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) {
onWindowInsets(nhandle, insets.top, insets.right, insets.bottom, insets.left);
return true;
@@ -201,7 +193,7 @@ public final class GioView extends SurfaceView implements Choreographer.FrameCal
return onBack(nhandle);
}
protected void wakeupMainThread() {
void wakeupMainThread() {
handler.post(new Runnable() {
@Override public void run() {
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;
try {
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());
}
handler.post(new Runnable() {
public void run() {
final Fragment frag;
try {
frag = (Fragment)cls.newInstance();
@@ -235,15 +225,13 @@ public final class GioView extends SurfaceView implements Choreographer.FrameCal
ft.add(frag, del);
ft.commitNow();
}
});
}
protected void writeClipboard(String s) {
void writeClipboard(String s) {
ClipboardManager m = (ClipboardManager)getContext().getSystemService(Context.CLIPBOARD_SERVICE);
m.setPrimaryClip(ClipData.newPlainText(null, s));
}
protected String readClipboard() {
String readClipboard() {
ClipboardManager m = (ClipboardManager)getContext().getSystemService(Context.CLIPBOARD_SERVICE);
ClipData c = m.getPrimaryClip();
if (c == null || c.getItemCount() < 1) {
+3 -5
View File
@@ -80,7 +80,6 @@ type window struct {
mshowTextInput C.jmethodID
mhideTextInput C.jmethodID
mpostFrameCallback C.jmethodID
mpostFrameCallbackOnMainThread C.jmethodID
mRegisterFragment C.jmethodID
mwakeupMainThread 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"),
mhideTextInput: getMethodID(env, class, "hideTextInput", "()V"),
mpostFrameCallback: getMethodID(env, class, "postFrameCallback", "()V"),
mpostFrameCallbackOnMainThread: getMethodID(env, class, "postFrameCallbackOnMainThread", "()V"),
mRegisterFragment: getMethodID(env, class, "registerFragment", "(Ljava/lang/String;)V"),
mwakeupMainThread: getMethodID(env, class, "wakeupMainThread", "()V"),
mwriteClipboard: getMethodID(env, class, "writeClipboard", "(Ljava/lang/String;)V"),
@@ -370,8 +368,8 @@ func (w *window) SetAnimating(anim bool) {
w.animating = anim
w.mu.Unlock()
if anim {
runInJVM(javaVM(), func(env *C.JNIEnv) {
callVoidMethod(env, w.view, w.mpostFrameCallbackOnMainThread)
w.runOnMain(func(env *C.JNIEnv) {
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) {
runInJVM(javaVM(), func(env *C.JNIEnv) {
w.runOnMain(func(env *C.JNIEnv) {
jstr := javaString(env, del)
callVoidMethod(env, w.view, w.mRegisterFragment, jvalue(jstr))
})