forked from joejulian/gio
app/internal/window: [Android] move main thread dispatching to Go
Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
@@ -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))
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user