From 33d7d854ae5f6d4bd3ac1b8ede00a6dd2492aef0 Mon Sep 17 00:00:00 2001 From: artdeell Date: Fri, 27 Jan 2023 07:33:52 +0300 Subject: [PATCH] Implement AWT (1.12.2-) link opening TODO: DIrectory opening --- .../cacio-androidnw-1.10-SNAPSHOT.jar | Bin 35516 -> 37334 bytes .../assets/components/caciocavallo/version | 2 +- .../net/kdt/pojavlaunch/MainActivity.java | 13 +++++++ app_pojavlauncher/src/main/jni/awt_bridge.c | 35 ++++++++++++++++++ 4 files changed, 49 insertions(+), 1 deletion(-) diff --git a/app_pojavlauncher/src/main/assets/components/caciocavallo/cacio-androidnw-1.10-SNAPSHOT.jar b/app_pojavlauncher/src/main/assets/components/caciocavallo/cacio-androidnw-1.10-SNAPSHOT.jar index d9313f7761f8f4c6784e6ae1547c9229025f5a49..d6c653f43116a5a5be604a93fcc38aad946b8b8c 100644 GIT binary patch delta 5096 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 F;Xj<~q%;5k diff --git a/app_pojavlauncher/src/main/assets/components/caciocavallo/version b/app_pojavlauncher/src/main/assets/components/caciocavallo/version index 460a6591e..2a8e424de 100644 --- a/app_pojavlauncher/src/main/assets/components/caciocavallo/version +++ b/app_pojavlauncher/src/main/assets/components/caciocavallo/version @@ -1 +1 @@ -HEllo People \ No newline at end of file +HEllo PeoplE \ No newline at end of file diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java index 4186aed54..9ea5606ac 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java @@ -17,6 +17,7 @@ import android.content.res.Configuration; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.os.*; +import android.provider.DocumentsContract; import android.util.*; import android.view.*; import android.widget.*; @@ -519,6 +520,18 @@ public class MainActivity extends BaseActivity implements ControlButtonMenuListe } }); } + public static void openPath(String path) { + Context ctx = touchpad.getContext(); // no more better way to obtain a context statically + ((Activity)ctx).runOnUiThread(() -> { + try { + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setDataAndType(DocumentsContract.buildDocumentUri(ctx.getString(R.string.storageProviderAuthorities), path), "*/*"); + ctx.startActivity(intent); + } catch (Throwable th) { + Tools.showError(ctx, th); + } + }); + } @Override public void onClickedMenu() { diff --git a/app_pojavlauncher/src/main/jni/awt_bridge.c b/app_pojavlauncher/src/main/jni/awt_bridge.c index ff1330dff..31b0051f1 100644 --- a/app_pojavlauncher/src/main/jni/awt_bridge.c +++ b/app_pojavlauncher/src/main/jni/awt_bridge.c @@ -1,5 +1,7 @@ #include #include +#include +#include static JavaVM* dalvikJavaVMPtr; @@ -13,6 +15,10 @@ jmethodID method_GetRGB; jclass class_CTCAndroidInput; jmethodID method_ReceiveInput; +jclass class_MainActivity; +jmethodID method_OpenLink; +jmethodID method_OpenPath; + jclass class_Frame; jclass class_Rectangle; jmethodID constructor_Rectangle; @@ -26,6 +32,11 @@ jint JNI_OnLoad(JavaVM* vm, void* reserved) { if (dalvikJavaVMPtr == NULL) { //Save dalvik global JavaVM pointer dalvikJavaVMPtr = vm; + JNIEnv *env = NULL; + (*vm)->GetEnv(vm, (void**)&env, JNI_VERSION_1_4); + class_MainActivity = (*env)->NewGlobalRef(env,(*env)->FindClass(env, "net/kdt/pojavlaunch/MainActivity")); + method_OpenLink= (*env)->GetStaticMethodID(env, class_MainActivity, "openLink", "(Ljava/lang/String;)V"); + method_OpenPath= (*env)->GetStaticMethodID(env, class_MainActivity, "openLink", "(Ljava/lang/String;)V"); } else if (dalvikJavaVMPtr != vm) { runtimeJavaVMPtr = vm; } @@ -136,6 +147,30 @@ Java_net_kdt_pojavlaunch_AWTInputBridge_nativePutClipboard(JNIEnv *env, jclass c (*runtimeJNIEnvPtr_CLIPBOARD)->DeleteLocalRef(runtimeJNIEnvPtr_CLIPBOARD,o_stringSelection); } +JNIEXPORT void JNICALL Java_net_java_openjdk_cacio_ctc_CTCDesktopPeer_openFile(JNIEnv *env, jclass clazz, jstring filePath) { + JNIEnv *dalvikEnv;char detachable = 0; + if((*dalvikJavaVMPtr)->GetEnv(dalvikJavaVMPtr, (void **) &dalvikEnv, JNI_VERSION_1_6) == JNI_EDETACHED) { + (*dalvikJavaVMPtr)->AttachCurrentThread(dalvikJavaVMPtr, &dalvikEnv, NULL); + detachable = 1; + } + const char* stringChars = (*env)->GetStringUTFChars(env, filePath, NULL); + (*dalvikEnv)->CallStaticVoidMethod(dalvikEnv, class_MainActivity, method_OpenPath, (*dalvikEnv)->NewStringUTF(dalvikEnv, stringChars)); + (*env)->ReleaseStringUTFChars(env, filePath, stringChars); + if(detachable) (*dalvikJavaVMPtr)->DetachCurrentThread(dalvikJavaVMPtr); +} + +JNIEXPORT void JNICALL Java_net_java_openjdk_cacio_ctc_CTCDesktopPeer_openUri(JNIEnv *env, jclass clazz, jstring uri) { + JNIEnv *dalvikEnv;char detachable = 0; + if((*dalvikJavaVMPtr)->GetEnv(dalvikJavaVMPtr, (void **) &dalvikEnv, JNI_VERSION_1_6) == JNI_EDETACHED) { + (*dalvikJavaVMPtr)->AttachCurrentThread(dalvikJavaVMPtr, &dalvikEnv, NULL); + detachable = 1; + } + const char* stringChars = (*env)->GetStringUTFChars(env, uri, NULL); + (*dalvikEnv)->CallStaticVoidMethod(dalvikEnv, class_MainActivity, method_OpenLink, (*dalvikEnv)->NewStringUTF(dalvikEnv, stringChars)); + (*env)->ReleaseStringUTFChars(env, uri, stringChars); + if(detachable) (*dalvikJavaVMPtr)->DetachCurrentThread(dalvikJavaVMPtr); +} + JNIEXPORT void JNICALL Java_net_kdt_pojavlaunch_AWTInputBridge_nativeMoveWindow(JNIEnv *env, jclass clazz, jint xoff, jint yoff) { if (runtimeJNIEnvPtr_INPUT == NULL) {