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 d9313f776..d6c653f43 100644 Binary files a/app_pojavlauncher/src/main/assets/components/caciocavallo/cacio-androidnw-1.10-SNAPSHOT.jar and b/app_pojavlauncher/src/main/assets/components/caciocavallo/cacio-androidnw-1.10-SNAPSHOT.jar differ 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) {