diff options
Diffstat (limited to 'vendor/gioui.org/app/Gio.java')
-rw-r--r-- | vendor/gioui.org/app/Gio.java | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/vendor/gioui.org/app/Gio.java b/vendor/gioui.org/app/Gio.java new file mode 100644 index 0000000..33e1a68 --- /dev/null +++ b/vendor/gioui.org/app/Gio.java @@ -0,0 +1,68 @@ +// SPDX-License-Identifier: Unlicense OR MIT + +package org.gioui; + +import android.content.ClipboardManager; +import android.content.ClipData; +import android.content.Context; +import android.os.Handler; +import android.os.Looper; + +import java.io.UnsupportedEncodingException; + +public final class Gio { + private static final Object initLock = new Object(); + private static boolean jniLoaded; + private static final Handler handler = new Handler(Looper.getMainLooper()); + + /** + * init loads and initializes the Go native library and runs + * the Go main function. + * + * It is exported for use by Android apps that need to run Go code + * outside the lifecycle of the Gio activity. + */ + public static synchronized void init(Context appCtx) { + synchronized (initLock) { + if (jniLoaded) { + return; + } + String dataDir = appCtx.getFilesDir().getAbsolutePath(); + byte[] dataDirUTF8; + try { + dataDirUTF8 = dataDir.getBytes("UTF-8"); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + System.loadLibrary("gio"); + runGoMain(dataDirUTF8, appCtx); + jniLoaded = true; + } + } + + static private native void runGoMain(byte[] dataDir, Context context); + + static void writeClipboard(Context ctx, String s) { + ClipboardManager m = (ClipboardManager)ctx.getSystemService(Context.CLIPBOARD_SERVICE); + m.setPrimaryClip(ClipData.newPlainText(null, s)); + } + + static String readClipboard(Context ctx) { + ClipboardManager m = (ClipboardManager)ctx.getSystemService(Context.CLIPBOARD_SERVICE); + ClipData c = m.getPrimaryClip(); + if (c == null || c.getItemCount() < 1) { + return null; + } + return c.getItemAt(0).coerceToText(ctx).toString(); + } + + static void wakeupMainThread() { + handler.post(new Runnable() { + @Override public void run() { + scheduleMainFuncs(); + } + }); + } + + static private native void scheduleMainFuncs(); +} |