add context.bridge

This commit is contained in:
pengfei.zhou 2019-07-20 13:40:06 +08:00
parent 16732340c7
commit ef5bb17380
5 changed files with 34 additions and 15 deletions

View File

@ -6,6 +6,7 @@ import com.github.penfeizhou.doric.DoricContext;
import com.github.penfeizhou.doric.extension.bridge.DoricMethod; import com.github.penfeizhou.doric.extension.bridge.DoricMethod;
import com.github.penfeizhou.doric.extension.bridge.DoricPlugin; import com.github.penfeizhou.doric.extension.bridge.DoricPlugin;
import com.github.penfeizhou.doric.plugin.DoricJavaPlugin; import com.github.penfeizhou.doric.plugin.DoricJavaPlugin;
import com.github.penfeizhou.doric.utils.ThreadMode;
/** /**
* @Description: com.github.penfeizhou.doricdemo * @Description: com.github.penfeizhou.doricdemo
@ -18,8 +19,13 @@ public class DemoPlugin extends DoricJavaPlugin {
super(doricContext); super(doricContext);
} }
@DoricMethod @DoricMethod(thread = ThreadMode.UI)
public void test() { public void test() {
Toast.makeText(getDoricContext().getContext(), "test", Toast.LENGTH_SHORT).show(); Toast.makeText(getDoricContext().getContext(), "test", Toast.LENGTH_SHORT).show();
} }
@DoricMethod(thread = ThreadMode.UI)
public void testPromise() {
Toast.makeText(getDoricContext().getContext(), "test", Toast.LENGTH_SHORT).show();
}
} }

View File

@ -3,6 +3,7 @@ package com.github.penfeizhou.doricdemo;
import android.app.Application; import android.app.Application;
import com.github.penfeizhou.doric.Doric; import com.github.penfeizhou.doric.Doric;
import com.github.penfeizhou.doric.DoricRegistry;
/** /**
* @Description: Doric * @Description: Doric
@ -14,5 +15,6 @@ public class MyApplication extends Application {
public void onCreate() { public void onCreate() {
super.onCreate(); super.onCreate();
Doric.init(this); Doric.init(this);
DoricRegistry.register(new DemoLibrary());
} }
} }

View File

@ -43,7 +43,7 @@ public class DoricJSEngine implements Handler.Callback, DoricTimerExtension.Time
} }
}); });
mTimerExtension = new DoricTimerExtension(looper, this); mTimerExtension = new DoricTimerExtension(looper, this);
mDoricBridgeExtension = new DoricBridgeExtension(); mDoricBridgeExtension = new DoricBridgeExtension(mDoricRegistry);
} }
public Handler getJSHandler() { public Handler getJSHandler() {
@ -174,17 +174,6 @@ public class DoricJSEngine implements Handler.Callback, DoricTimerExtension.Time
return String.format(DoricConstant.TEMPLATE_MODULE, moduleName, content); return String.format(DoricConstant.TEMPLATE_MODULE, moduleName, content);
} }
public JSDecoder invokeContextEntityMethod(final String contextId, final String method, final Object... args) {
final Object[] nArgs = new Object[args.length + 2];
nArgs[0] = contextId;
nArgs[1] = method;
if (args.length > 0) {
System.arraycopy(args, 0, nArgs, 2, args.length);
}
return invokeDoricMethod(DoricConstant.DORIC_CONTEXT_INVOKE, nArgs);
}
public JSDecoder invokeDoricMethod(final String method, final Object... args) { public JSDecoder invokeDoricMethod(final String method, final Object... args) {
ArrayList<JavaValue> values = new ArrayList<>(); ArrayList<JavaValue> values = new ArrayList<>();
for (Object arg : args) { for (Object arg : args) {
@ -196,6 +185,11 @@ public class DoricJSEngine implements Handler.Callback, DoricTimerExtension.Time
@Override @Override
public void callback(long timerId) { public void callback(long timerId) {
try {
invokeDoricMethod(DoricConstant.DORIC_TIMER_CALLBACK, timerId); invokeDoricMethod(DoricConstant.DORIC_TIMER_CALLBACK, timerId);
} catch (Exception e) {
e.printStackTrace();
DoricLog.e("Timer Callback error:%s", e.getLocalizedMessage());
}
} }
} }

View File

@ -19,7 +19,7 @@ log('console', Object.getOwnPropertyNames(console))
setTimeout(() => { setTimeout(() => {
log('exec setTimeout') log('exec setTimeout')
context.callNative("modal", "toast", "Hello,Doric!") // context.callNative("modal", "toast", "Hello,Doric!")
}, 1000) }, 1000)
const timerId = setInterval(() => { const timerId = setInterval(() => {
log('exec setInterval') log('exec setInterval')
@ -39,5 +39,8 @@ export class MyPage extends Panel {
log("Hello.HEGO") log("Hello.HEGO")
logw("Hello.HEGO") logw("Hello.HEGO")
loge("Hello.HEGO") loge("Hello.HEGO")
setTimeout(() => {
context.bridge.demo_test()
}, 1000)
} }
} }

View File

@ -71,8 +71,22 @@ export class Context {
entity: any entity: any
id: string id: string
callbacks: Map<string, { resolve: Function, reject: Function }> = new Map callbacks: Map<string, { resolve: Function, reject: Function }> = new Map
bridge: { [index: string]: (args?: any) => Promise<any> }
constructor(id: string) { constructor(id: string) {
this.id = id this.id = id
this.bridge = new Proxy({}, {
get: (target, p: any) => {
if (typeof p === 'string') {
return (args?: any) => {
const array = p.split('_')
return this.callNative(array[0], array[1], args)
}
} else {
return Reflect.get(target, p)
}
}
})
} }
callNative(namespace: string, method: string, args?: any): Promise<any> { callNative(namespace: string, method: string, args?: any): Promise<any> {
const callbackId = uniqueId('callback') const callbackId = uniqueId('callback')