Android Open Source - kirin-for-android Native Context From Project Back to project page kirin-for-android .
License The source code is released under:
Apache License
If you think the Android project kirin-for-android listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
Java Source Code package com.futureplatforms.kirin.internal.core;
/ / f r o m w w w . j a v a 2 s . c o m
import java.text.MessageFormat;
import java.util.Collection;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicLong;
import android.app.Activity;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import com.futureplatforms.kirin.C;
import com.futureplatforms.kirin.extensions.IKirinExtensionOnNonDefaultThread;
import com.futureplatforms.kirin.extensions.IKirinExtensionOnUiThread;
import com.futureplatforms.kirin.internal.attic.ProxyGenerator;
public class NativeContext implements INativeContext {
public static final class SettableFuture<T> {
private final CountDownLatch mLatch = new CountDownLatch(1);
private T mValue;
public T get() {
try {
mLatch.await();
} catch (InterruptedException e) {
Log.e(C.TAG, "Problem handling return value" );
}
Log.d(C.TAG, "Getting value: " + mValue);
return mValue;
}
public void set(T value) {
mValue = value;
Log.d(C.TAG, "Setting value: " + mValue);
mLatch.countDown();
}
}
private final Map<String, IObjectHolder> mObjectHolders = new ConcurrentHashMap<String, IObjectHolder>();
private final Map<Long, SettableFuture<?>> mFutureMap = new ConcurrentHashMap<Long, SettableFuture<?>>();
private final AtomicLong mNextId = new AtomicLong(0);
private final Executor mDefaultExecutorService;
public NativeContext() {
this (Executors.newCachedThreadPool());
}
public NativeContext(Executor defaultExecutor) {
mDefaultExecutorService = defaultExecutor;
}
@Override
public Collection<String> getMethodNamesForObject(String objectName) {
return getObjectHolder(objectName).getMethodNames();
}
private IObjectHolder getObjectHolder(String objectName) {
IObjectHolder holder = mObjectHolders.get(objectName);
if (holder == null) {
throw new IllegalStateException("No object for " + objectName + " has been registered. This is almost certainly a bug in Kirin." );
}
return holder;
}
private void logThread(Object object, String threadPoolName) {
Log.d(C.TAG, MessageFormat.format("Will dispatch to KirinService {0} on a {1} thread(s)" , object.getClass().getName(), threadPoolName));
}
@Override
public void registerNativeObject(String moduleName, Object object, ProxyGenerator proxyGenerator) {
IObjectHolder objectHolder = null;
if (object instanceof View || object instanceof Activity || object instanceof IKirinExtensionOnUiThread) {
objectHolder = new UiObjectHolder(new Handler(), object, proxyGenerator);
logThread(object, "UI" );
} else if (object instanceof IKirinExtensionOnNonDefaultThread) {
Executor executor = ((IKirinExtensionOnNonDefaultThread) object).getExecutor();
if (executor == null) {
logThread(object, "default background" );
executor = mDefaultExecutorService;
} else {
logThread(object, "custom background" );
}
objectHolder = new DefaultObjectHandler(executor, object, proxyGenerator);
} else {
logThread(object, "default background" );
objectHolder = new DefaultObjectHandler(mDefaultExecutorService, object, proxyGenerator);
}
mObjectHolders.put(moduleName, objectHolder);
}
@Override
public void unregisterNativeObject(String moduleName) {
mObjectHolders.remove(moduleName);
}
@Override
public void executeCommandFromModule(String moduleName, String methodName, Object... args) {
getObjectHolder(moduleName).invoke(methodName, (Object[]) args);
}
@Override
public <T> SettableFuture<T> getFuture(Long id) {
@SuppressWarnings("unchecked" )
SettableFuture<T> future = (SettableFuture<T>) mFutureMap.get(id);
if (future == null) {
future = new SettableFuture<T>();
mFutureMap.put(id, future);
}
return future;
}
@Override
public <T> void setReturnValue(Long id, T value) {
@SuppressWarnings("unchecked" )
SettableFuture<Object> future = (SettableFuture<Object>) mFutureMap.remove(id);
if (future != null) {
future.set(value);
}
}
@Override
public Long createNewId() {
return mNextId.incrementAndGet();
}
}
Java Source Code List com.futureplatforms.kirin.C.java com.futureplatforms.kirin.Kirin.java com.futureplatforms.kirin.TestingApplication.java com.futureplatforms.kirin.activities.KirinActivity.java com.futureplatforms.kirin.activities.KirinListActivity.java com.futureplatforms.kirin.application.IKirinApplication.java com.futureplatforms.kirin.application.KirinApplication.java com.futureplatforms.kirin.extensions.IKirinExtensionOnNonDefaultThread.java com.futureplatforms.kirin.extensions.IKirinExtensionOnUiThread.java com.futureplatforms.kirin.extensions.IKirinExtension.java com.futureplatforms.kirin.extensions.IProguardImmunity.java com.futureplatforms.kirin.extensions.KirinExtensionAdapter.java com.futureplatforms.kirin.extensions.KirinExtensions.java com.futureplatforms.kirin.extensions.databases.DBStatement.java com.futureplatforms.kirin.extensions.databases.DBTransaction.java com.futureplatforms.kirin.extensions.databases.DatabasesBackend.java com.futureplatforms.kirin.extensions.databases.IDatabasesBackend.java com.futureplatforms.kirin.extensions.fs.KirinFilesystemExtensionImpl.java com.futureplatforms.kirin.extensions.localnotifications.ILocalNotificationsBackend.java com.futureplatforms.kirin.extensions.localnotifications.LocalNotificationAlarmReceiver.java com.futureplatforms.kirin.extensions.localnotifications.LocalNotificationsBackend.java com.futureplatforms.kirin.extensions.networking.INetworkingBackend.java com.futureplatforms.kirin.extensions.networking.KirinXHRExtensionImpl.java com.futureplatforms.kirin.extensions.networking.NetworkingBackend.java com.futureplatforms.kirin.extensions.settings.ISettingsBackend.java com.futureplatforms.kirin.extensions.settings.PreferencesBackendImpl.java com.futureplatforms.kirin.extensions.settings.SettingsBackend.java com.futureplatforms.kirin.generated.fs.KirinCallback.java com.futureplatforms.kirin.generated.fs.KirinFile.java com.futureplatforms.kirin.generated.fs.KirinFilesystemExtension.java com.futureplatforms.kirin.generated.fs.KirinFilesystem.java com.futureplatforms.kirin.generated.fs.KirinFoundFile.java com.futureplatforms.kirin.generated.fs.KirinOptionalCallback.java com.futureplatforms.kirin.generated.location.KirinLocationBackend.java com.futureplatforms.kirin.generated.location.KirinLocationData.java com.futureplatforms.kirin.generated.location.KirinLocationListener.java com.futureplatforms.kirin.generated.location.KirinLocationPermissions.java com.futureplatforms.kirin.generated.location.KirinLocation.java com.futureplatforms.kirin.generated.preferences.KirinPreferenceListener.java com.futureplatforms.kirin.generated.preferences.KirinPreferencesBackend.java com.futureplatforms.kirin.generated.preferences.KirinPreferences.java com.futureplatforms.kirin.generated.xhr.KirinXHRExtension.java com.futureplatforms.kirin.generated.xhr.KirinXHRProgressEvent.java com.futureplatforms.kirin.generated.xhr.KirinXHRResponse.java com.futureplatforms.kirin.generated.xhr.KirinXHRequest.java com.futureplatforms.kirin.generated.xhr.KirinXMLHTTPRequest.java com.futureplatforms.kirin.helpers.IKirinExtensionHelper.java com.futureplatforms.kirin.helpers.IKirinHelper.java com.futureplatforms.kirin.helpers.KirinApplicationHelper.java com.futureplatforms.kirin.helpers.KirinExtensionHelper.java com.futureplatforms.kirin.helpers.KirinHelper.java com.futureplatforms.kirin.helpers.KirinScreenHelper.java com.futureplatforms.kirin.helpers.KirinUiFragmentHelper.java com.futureplatforms.kirin.internal.JSONUtils.java com.futureplatforms.kirin.internal.KirinPaths.java com.futureplatforms.kirin.internal.attic.IOUtils.java com.futureplatforms.kirin.internal.attic.KirinDropbox.java com.futureplatforms.kirin.internal.attic.ProxyGenerator.java com.futureplatforms.kirin.internal.attic.SDCardFileUtils.java com.futureplatforms.kirin.internal.core.AbstractObjectHolder.java com.futureplatforms.kirin.internal.core.DefaultObjectHandler.java com.futureplatforms.kirin.internal.core.IJsContext.java com.futureplatforms.kirin.internal.core.IKirinState.java com.futureplatforms.kirin.internal.core.INativeContext.java com.futureplatforms.kirin.internal.core.IObjectHolder.java com.futureplatforms.kirin.internal.core.JsCommands.java com.futureplatforms.kirin.internal.core.KirinAppState.java com.futureplatforms.kirin.internal.core.KirinWebViewHolder.java com.futureplatforms.kirin.internal.core.NativeContext.java com.futureplatforms.kirin.internal.core.UiObjectHolder.java com.futureplatforms.kirin.internal.fragmentation.CursorCoercer4.java com.futureplatforms.kirin.internal.fragmentation.CursorCoercer5.java com.futureplatforms.kirin.internal.fragmentation.CursorCoercer.java com.futureplatforms.kirin.internal.fragmentation.WebChromeClient7.java com.futureplatforms.kirin.internal.fragmentation.WebChromeClient8.java com.futureplatforms.kirin.state.IKirinDropbox.java com.futureplatforms.kirin.state.IKirinFileSystem.java com.futureplatforms.kirin.ui.DebugMenuActions.java com.futureplatforms.kirin.ui.JSListAdapter.java com.futureplatforms.kirin.ui.JSOnClickListener.java com.futureplatforms.kirin.ui.KirinRowRenderer.java