fix open link for 1.13-

This commit is contained in:
ShirosakiMio 2023-07-09 12:42:12 +08:00
parent d4695e8205
commit ee0723953b
7 changed files with 87 additions and 1 deletions

View File

@ -124,6 +124,7 @@ public class FCLauncher {
private static void addCommonEnv(FCLConfig config, HashMap<String, String> envMap) { private static void addCommonEnv(FCLConfig config, HashMap<String, String> envMap) {
envMap.put("HOME", config.getLogDir()); envMap.put("HOME", config.getLogDir());
envMap.put("JAVA_HOME", config.getJavaPath()); envMap.put("JAVA_HOME", config.getJavaPath());
envMap.put("FCL_NATIVEDIR",config.getContext().getApplicationInfo().nativeLibraryDir);
} }
private static void addRendererEnv(FCLConfig config, HashMap<String, String> envMap) { private static void addRendererEnv(FCLConfig config, HashMap<String, String> envMap) {

View File

@ -1,15 +1,22 @@
package com.tungsten.fclauncher.bridge; package com.tungsten.fclauncher.bridge;
import android.app.Activity;
import android.content.ClipData; import android.content.ClipData;
import android.content.ClipboardManager; import android.content.ClipboardManager;
import android.content.Context; import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.provider.DocumentsContract;
import android.util.Log;
import android.view.Surface; import android.view.Surface;
import android.webkit.MimeTypeMap;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.tungsten.fclauncher.FCLPath; import com.tungsten.fclauncher.FCLPath;
import java.io.File;
import java.io.Serializable; import java.io.Serializable;
public class FCLBridge implements Serializable { public class FCLBridge implements Serializable {
@ -66,6 +73,7 @@ public class FCLBridge implements Serializable {
System.loadLibrary("xhook"); System.loadLibrary("xhook");
System.loadLibrary("fcl"); System.loadLibrary("fcl");
System.loadLibrary("glfw"); System.loadLibrary("glfw");
System.loadLibrary("fcl_awt");
} }
public FCLBridge() { public FCLBridge() {
@ -175,6 +183,26 @@ public class FCLBridge implements Serializable {
return item.getText().toString(); return item.getText().toString();
} }
public static void openLink(final String link) {
Context ctx = FCLPath.CONTEXT;
((Activity)ctx).runOnUiThread(() -> {
try {
Intent intent = new Intent(Intent.ACTION_VIEW);
String targetLink = link;
if(targetLink.startsWith("file:")) {
targetLink = targetLink.replace("file:","");
if(targetLink.startsWith("//")) {
targetLink = targetLink.replace("//","/");
}
}
intent.setDataAndType(Uri.parse(targetLink), "*/*");
ctx.startActivity(intent);
} catch (Exception e) {
Log.e("openLink error",e.toString());
}
});
}
public void setScaleFactor(double scaleFactor) { public void setScaleFactor(double scaleFactor) {
this.scaleFactor = scaleFactor; this.scaleFactor = scaleFactor;
} }

View File

@ -80,6 +80,11 @@ LOCAL_SHARED_LIBRARIES := awt_headless
LOCAL_SRC_FILES := awt_xawt/xawt_fake.c LOCAL_SRC_FILES := awt_xawt/xawt_fake.c
include $(BUILD_SHARED_LIBRARY) include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := fcl_awt
LOCAL_SRC_FILES := awt/awt_bridge.c
include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS) include $(CLEAR_VARS)
LOCAL_MODULE := lwjgl2 LOCAL_MODULE := lwjgl2
LOCAL_SHARED_LIBRARIES := fcl LOCAL_SHARED_LIBRARIES := fcl

View File

@ -0,0 +1,52 @@
#include <jni.h>
#include <assert.h>
#include <string.h>
#include <stdio.h>
static JavaVM* dalvikJavaVMPtr;
static JavaVM* runtimeJavaVMPtr;
jclass class_MainActivity;
jmethodID method_OpenLink;
jmethodID method_OpenPath;
jint JNI_OnLoad(JavaVM* vm, void* reserved) {
if (dalvikJavaVMPtr == NULL) {
dalvikJavaVMPtr = vm;
JNIEnv *env = NULL;
(*vm)->GetEnv(vm, (void**)&env, JNI_VERSION_1_4);
class_MainActivity = (*env)->NewGlobalRef(env,(*env)->FindClass(env, "com/tungsten/fclauncher/bridge/FCLBridge"));
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;
}
return JNI_VERSION_1_4;
}
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);
}