app/internal/window: [Android] move main thread dispatching to Go

Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
Elias Naur
2020-05-17 15:46:17 +02:00
parent bb4a02babc
commit 503534e84e
2 changed files with 41 additions and 55 deletions
+4 -16
View File
@@ -145,14 +145,6 @@ public final class GioView extends SurfaceView implements Choreographer.FrameCal
}); });
} }
void postFrameCallbackOnMainThread() {
handler.post(new Runnable() {
@Override public void run() {
postFrameCallback();
}
});
}
@Override protected boolean fitSystemWindows(Rect insets) { @Override protected boolean fitSystemWindows(Rect insets) {
onWindowInsets(nhandle, insets.top, insets.right, insets.bottom, insets.left); onWindowInsets(nhandle, insets.top, insets.right, insets.bottom, insets.left);
return true; return true;
@@ -201,7 +193,7 @@ public final class GioView extends SurfaceView implements Choreographer.FrameCal
return onBack(nhandle); return onBack(nhandle);
} }
protected void wakeupMainThread() { void wakeupMainThread() {
handler.post(new Runnable() { handler.post(new Runnable() {
@Override public void run() { @Override public void run() {
scheduleMainFuncs(); scheduleMainFuncs();
@@ -209,7 +201,7 @@ public final class GioView extends SurfaceView implements Choreographer.FrameCal
}); });
} }
protected void registerFragment(String del) { void registerFragment(String del) {
final Class cls; final Class cls;
try { try {
cls = getContext().getClassLoader().loadClass(del); cls = getContext().getClassLoader().loadClass(del);
@@ -217,8 +209,6 @@ public final class GioView extends SurfaceView implements Choreographer.FrameCal
throw new RuntimeException("RegisterFragment: fragment class not found: " + e.getMessage()); throw new RuntimeException("RegisterFragment: fragment class not found: " + e.getMessage());
} }
handler.post(new Runnable() {
public void run() {
final Fragment frag; final Fragment frag;
try { try {
frag = (Fragment)cls.newInstance(); frag = (Fragment)cls.newInstance();
@@ -235,15 +225,13 @@ public final class GioView extends SurfaceView implements Choreographer.FrameCal
ft.add(frag, del); ft.add(frag, del);
ft.commitNow(); ft.commitNow();
} }
});
}
protected void writeClipboard(String s) { void writeClipboard(String s) {
ClipboardManager m = (ClipboardManager)getContext().getSystemService(Context.CLIPBOARD_SERVICE); ClipboardManager m = (ClipboardManager)getContext().getSystemService(Context.CLIPBOARD_SERVICE);
m.setPrimaryClip(ClipData.newPlainText(null, s)); m.setPrimaryClip(ClipData.newPlainText(null, s));
} }
protected String readClipboard() { String readClipboard() {
ClipboardManager m = (ClipboardManager)getContext().getSystemService(Context.CLIPBOARD_SERVICE); ClipboardManager m = (ClipboardManager)getContext().getSystemService(Context.CLIPBOARD_SERVICE);
ClipData c = m.getPrimaryClip(); ClipData c = m.getPrimaryClip();
if (c == null || c.getItemCount() < 1) { if (c == null || c.getItemCount() < 1) {
+3 -5
View File
@@ -80,7 +80,6 @@ type window struct {
mshowTextInput C.jmethodID mshowTextInput C.jmethodID
mhideTextInput C.jmethodID mhideTextInput C.jmethodID
mpostFrameCallback C.jmethodID mpostFrameCallback C.jmethodID
mpostFrameCallbackOnMainThread C.jmethodID
mRegisterFragment C.jmethodID mRegisterFragment C.jmethodID
mwakeupMainThread C.jmethodID mwakeupMainThread C.jmethodID
mwriteClipboard C.jmethodID mwriteClipboard C.jmethodID
@@ -187,7 +186,6 @@ func Java_org_gioui_GioView_onCreateView(env *C.JNIEnv, class C.jclass, view C.j
mshowTextInput: getMethodID(env, class, "showTextInput", "()V"), mshowTextInput: getMethodID(env, class, "showTextInput", "()V"),
mhideTextInput: getMethodID(env, class, "hideTextInput", "()V"), mhideTextInput: getMethodID(env, class, "hideTextInput", "()V"),
mpostFrameCallback: getMethodID(env, class, "postFrameCallback", "()V"), mpostFrameCallback: getMethodID(env, class, "postFrameCallback", "()V"),
mpostFrameCallbackOnMainThread: getMethodID(env, class, "postFrameCallbackOnMainThread", "()V"),
mRegisterFragment: getMethodID(env, class, "registerFragment", "(Ljava/lang/String;)V"), mRegisterFragment: getMethodID(env, class, "registerFragment", "(Ljava/lang/String;)V"),
mwakeupMainThread: getMethodID(env, class, "wakeupMainThread", "()V"), mwakeupMainThread: getMethodID(env, class, "wakeupMainThread", "()V"),
mwriteClipboard: getMethodID(env, class, "writeClipboard", "(Ljava/lang/String;)V"), mwriteClipboard: getMethodID(env, class, "writeClipboard", "(Ljava/lang/String;)V"),
@@ -370,8 +368,8 @@ func (w *window) SetAnimating(anim bool) {
w.animating = anim w.animating = anim
w.mu.Unlock() w.mu.Unlock()
if anim { if anim {
runInJVM(javaVM(), func(env *C.JNIEnv) { w.runOnMain(func(env *C.JNIEnv) {
callVoidMethod(env, w.view, w.mpostFrameCallbackOnMainThread) callVoidMethod(env, w.view, w.mpostFrameCallback)
}) })
} }
} }
@@ -532,7 +530,7 @@ func javaString(env *C.JNIEnv, str string) C.jstring {
} }
func (w *window) RegisterFragment(del string) { func (w *window) RegisterFragment(del string) {
runInJVM(javaVM(), func(env *C.JNIEnv) { w.runOnMain(func(env *C.JNIEnv) {
jstr := javaString(env, del) jstr := javaString(env, del)
callVoidMethod(env, w.view, w.mRegisterFragment, jvalue(jstr)) callVoidMethod(env, w.view, w.mRegisterFragment, jvalue(jstr))
}) })