You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
1.8 KiB
Java
69 lines
1.8 KiB
Java
// 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();
|
|
}
|