From f0005fa912934f4afeea1245d058da36e94b394a Mon Sep 17 00:00:00 2001 From: artdeell Date: Fri, 27 Dec 2024 22:54:00 +0300 Subject: [PATCH] Feat[gamepad_direct]: detect usage of GLFW gamepad automatically --- .../components/lwjgl3/lwjgl-glfw-classes.jar | Bin 2938541 -> 2938675 bytes .../src/main/assets/components/lwjgl3/version | 2 +- .../kdt/pojavlaunch/MinecraftGLSurface.java | 17 +++++- .../gamepad/DefaultDataProvider.java | 5 ++ .../customcontrols/gamepad/Gamepad.java | 10 +++- .../gamepad/GamepadDataProvider.java | 1 + .../gamepad/GamepadMapperAdapter.java | 5 ++ .../direct/DirectGamepadEnableHandler.java | 5 ++ .../prefs/LauncherPreferences.java | 2 - .../LauncherPreferenceControlFragment.java | 3 - .../java/org/lwjgl/glfw/CallbackBridge.java | 20 +++++++ .../src/main/jni/environ/environ.h | 1 + .../src/main/jni/input_bridge_v3.c | 56 ++++++++++++------ .../src/main/res/xml/pref_control.xml | 6 -- .../java/org/lwjgl/glfw/CallbackBridge.java | 8 +++ .../src/main/java/org/lwjgl/glfw/GLFW.java | 1 + 16 files changed, 109 insertions(+), 33 deletions(-) create mode 100644 app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/gamepad/direct/DirectGamepadEnableHandler.java diff --git a/app_pojavlauncher/src/main/assets/components/lwjgl3/lwjgl-glfw-classes.jar b/app_pojavlauncher/src/main/assets/components/lwjgl3/lwjgl-glfw-classes.jar index beb1da2cbbcb07fe42374e3a1f79338cbc91ff03..9a3f74a5984eb209490ee3414f91646470e4c42f 100644 GIT binary patch delta 49845 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 C)aSDR delta 49621 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 TY#9}%Ghf%yVhhgz-Q@%TmR>6v diff --git a/app_pojavlauncher/src/main/assets/components/lwjgl3/version b/app_pojavlauncher/src/main/assets/components/lwjgl3/version index f476a7b5a..f24b1ea4c 100644 --- a/app_pojavlauncher/src/main/assets/components/lwjgl3/version +++ b/app_pojavlauncher/src/main/assets/components/lwjgl3/version @@ -1 +1 @@ -1735293224932 \ No newline at end of file +1735328970475 \ No newline at end of file diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MinecraftGLSurface.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MinecraftGLSurface.java index 415d13f26..b63ffcd4f 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MinecraftGLSurface.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MinecraftGLSurface.java @@ -30,6 +30,7 @@ import net.kdt.pojavlaunch.customcontrols.ControlLayout; import net.kdt.pojavlaunch.customcontrols.gamepad.DefaultDataProvider; import net.kdt.pojavlaunch.customcontrols.gamepad.Gamepad; import net.kdt.pojavlaunch.customcontrols.gamepad.direct.DirectGamepad; +import net.kdt.pojavlaunch.customcontrols.gamepad.direct.DirectGamepadEnableHandler; import net.kdt.pojavlaunch.customcontrols.mouse.AbstractTouchpad; import net.kdt.pojavlaunch.customcontrols.mouse.AndroidPointerCapture; import net.kdt.pojavlaunch.customcontrols.mouse.InGUIEventProcessor; @@ -48,7 +49,7 @@ import fr.spse.gamepad_remapper.RemapperView; /** * Class dealing with showing minecraft surface and taking inputs to dispatch them to minecraft */ -public class MinecraftGLSurface extends View implements GrabListener { +public class MinecraftGLSurface extends View implements GrabListener, DirectGamepadEnableHandler { /* Gamepad object for gamepad inputs, instantiated on need */ private GamepadHandler mGamepadHandler; /* The RemapperView.Builder object allows you to set which buttons to remap */ @@ -90,6 +91,7 @@ public class MinecraftGLSurface extends View implements GrabListener { public MinecraftGLSurface(Context context, AttributeSet attributeSet) { super(context, attributeSet); setFocusable(true); + CallbackBridge.setDirectGamepadEnableHandler(this); } @RequiresApi(api = Build.VERSION_CODES.O) @@ -205,7 +207,7 @@ public class MinecraftGLSurface extends View implements GrabListener { } private void createGamepad(View contextView, InputDevice inputDevice) { - if(LauncherPreferences.PREF_DIRECT_CONTROLLER) { + if(CallbackBridge.sGamepadDirectInput) { mGamepadHandler = new DirectGamepad(); }else { mGamepadHandler = new Gamepad(contextView, inputDevice, DefaultDataProvider.INSTANCE, true); @@ -411,6 +413,17 @@ public class MinecraftGLSurface extends View implements GrabListener { } } + @Override + public void onDirectGamepadEnabled() { + post(()->{ + if(mGamepadHandler != null && mGamepadHandler instanceof Gamepad) { + ((Gamepad)mGamepadHandler).removeSelf(); + } + // Force gamepad recreation on next event + mGamepadHandler = null; + }); + } + /** A small interface called when the listener is ready for the first time */ public interface SurfaceReadyListener { void isReady(); diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/gamepad/DefaultDataProvider.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/gamepad/DefaultDataProvider.java index f16c97115..50fcb4a60 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/gamepad/DefaultDataProvider.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/gamepad/DefaultDataProvider.java @@ -30,4 +30,9 @@ public class DefaultDataProvider implements GamepadDataProvider { public void attachGrabListener(GrabListener grabListener) { CallbackBridge.addGrabListener(grabListener); } + + @Override + public void detachGrabListener(GrabListener grabListener) { + CallbackBridge.removeGrabListener(grabListener); + } } diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/gamepad/Gamepad.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/gamepad/Gamepad.java index 03466a3e7..f84cef74b 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/gamepad/Gamepad.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/gamepad/Gamepad.java @@ -87,6 +87,8 @@ public class Gamepad implements GrabListener, GamepadHandler { private final GamepadDataProvider mMapProvider; + private boolean mRemoved = false; + public Gamepad(View contextView, InputDevice inputDevice, GamepadDataProvider mapProvider, boolean showCursor){ Settings.setDeadzoneScale(PREF_DEADZONE_SCALE); @@ -95,7 +97,7 @@ public class Gamepad implements GrabListener, GamepadHandler { @Override public void doFrame(long frameTimeNanos) { tick(frameTimeNanos); - mScreenChoreographer.postFrameCallback(this); + if(!mRemoved) mScreenChoreographer.postFrameCallback(this); } }; mScreenChoreographer.postFrameCallback(frameCallback); @@ -452,4 +454,10 @@ public class Gamepad implements GrabListener, GamepadHandler { break; } } + public void removeSelf() { + mRemoved = true; + mMapProvider.detachGrabListener(this); + ViewGroup viewGroup = (ViewGroup) mPointerImageView.getParent(); + if(viewGroup != null) viewGroup.removeView(mPointerImageView); + } } diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/gamepad/GamepadDataProvider.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/gamepad/GamepadDataProvider.java index 37dcbaab5..0b79db086 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/gamepad/GamepadDataProvider.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/gamepad/GamepadDataProvider.java @@ -7,4 +7,5 @@ public interface GamepadDataProvider { GamepadMap getGameMap(); boolean isGrabbing(); void attachGrabListener(GrabListener grabListener); + void detachGrabListener(GrabListener grabListener); } diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/gamepad/GamepadMapperAdapter.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/gamepad/GamepadMapperAdapter.java index 487440ffc..bdcd4741b 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/gamepad/GamepadMapperAdapter.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/gamepad/GamepadMapperAdapter.java @@ -325,6 +325,11 @@ public class GamepadMapperAdapter extends RecyclerView.Adapter grabListeners = new ArrayList<>(); + private static WeakReference sDirectGamepadEnableHandler; public static final int CLIPBOARD_COPY = 2000; public static final int CLIPBOARD_PASTE = 2001; @@ -32,6 +36,7 @@ public class CallbackBridge { public static final ByteBuffer sGamepadButtonBuffer; public static final FloatBuffer sGamepadAxisBuffer; + public static boolean sGamepadDirectInput = false; public static void putMouseEventWithCoords(int button, float x, float y) { putMouseEventWithCoords(button, true, x, y); @@ -171,6 +176,16 @@ public class CallbackBridge { } } + //Called from JRE side + @SuppressWarnings("unused") + @Keep + private static void onDirectInputEnable() { + Log.i("CallbackBridge", "onDirectInputEnable()"); + DirectGamepadEnableHandler enableHandler = Tools.getWeakReference(sDirectGamepadEnableHandler); + if(enableHandler != null) enableHandler.onDirectGamepadEnabled(); + sGamepadDirectInput = true; + } + //Called from JRE side @SuppressWarnings("unused") @Keep @@ -199,12 +214,17 @@ public class CallbackBridge { grabListeners.remove(listener); } } + public static FloatBuffer createGamepadAxisBuffer() { ByteBuffer axisByteBuffer = nativeCreateGamepadAxisBuffer(); // NOTE: hardcoded order (also in jre_lwjgl3glfw CallbackBridge) return axisByteBuffer.order(ByteOrder.LITTLE_ENDIAN).asFloatBuffer(); } + public static void setDirectGamepadEnableHandler(DirectGamepadEnableHandler h) { + sDirectGamepadEnableHandler = new WeakReference<>(h); + } + @Keep @CriticalNative public static native void nativeSetUseInputStackQueue(boolean useInputStackQueue); @Keep @CriticalNative private static native boolean nativeSendChar(char codepoint); diff --git a/app_pojavlauncher/src/main/jni/environ/environ.h b/app_pojavlauncher/src/main/jni/environ/environ.h index 62ec4a45d..11c4e4333 100644 --- a/app_pojavlauncher/src/main/jni/environ/environ.h +++ b/app_pojavlauncher/src/main/jni/environ/environ.h @@ -47,6 +47,7 @@ struct pojav_environ_s { double cursorX, cursorY, cLastX, cLastY; jmethodID method_accessAndroidClipboard; jmethodID method_onGrabStateChanged; + jmethodID method_onDirectInputEnable; jmethodID method_glftSetWindowAttrib; jmethodID method_internalWindowSizeChanged; jmethodID method_internalChangeMonitorSize; diff --git a/app_pojavlauncher/src/main/jni/input_bridge_v3.c b/app_pojavlauncher/src/main/jni/input_bridge_v3.c index 3bfac1f07..ddabcfc34 100644 --- a/app_pojavlauncher/src/main/jni/input_bridge_v3.c +++ b/app_pojavlauncher/src/main/jni/input_bridge_v3.c @@ -9,7 +9,7 @@ * * - Implements glfwSetCursorPos() to handle grab camera pos correctly. */ - + #include #include #include @@ -30,6 +30,29 @@ #define EVENT_TYPE_MOUSE_BUTTON 1006 #define EVENT_TYPE_SCROLL 1007 +static jint attach_env(JNIEnv ** pEnv, JavaVM *jvm) { + JNIEnv *jvm_env = NULL; + jint env_result = (*jvm)->GetEnv(jvm, (void**)&jvm_env, JNI_VERSION_1_4); + if(env_result == JNI_EDETACHED) { + env_result = (*jvm)->AttachCurrentThread(jvm, &jvm_env, NULL); + } + if(env_result != JNI_OK) { + return env_result; + } + *pEnv = jvm_env; + return JNI_OK; +} + +#define TRY_ATTACH_ENV(env_name, vm, error_message, then) JNIEnv* env_name;\ +do { \ + jint result = attach_env(&env_name, vm); \ + if(result != JNI_OK) { \ + printf(error_message, result); \ + then\ + } \ +} while(0) + + jint (*orig_ProcessImpl_forkAndExec)(JNIEnv *env, jobject process, jint mode, jbyteArray helperpath, jbyteArray prog, jbyteArray argBlock, jint argc, jbyteArray envBlock, jint envc, jbyteArray dir, jintArray std_fds, jboolean redirectErrorStream); static void registerFunctions(JNIEnv *env); @@ -44,6 +67,7 @@ jint JNI_OnLoad(JavaVM* vm, __attribute__((unused)) void* reserved) { pojav_environ->bridgeClazz = (*env)->NewGlobalRef(env,(*env) ->FindClass(env,"org/lwjgl/glfw/CallbackBridge")); pojav_environ->method_accessAndroidClipboard = (*env)->GetStaticMethodID(env, pojav_environ->bridgeClazz, "accessAndroidClipboard", "(ILjava/lang/String;)Ljava/lang/String;"); pojav_environ->method_onGrabStateChanged = (*env)->GetStaticMethodID(env, pojav_environ->bridgeClazz, "onGrabStateChanged", "(Z)V"); + pojav_environ->method_onDirectInputEnable = (*env)->GetStaticMethodID(env, pojav_environ->bridgeClazz, "onDirectInputEnable", "()V"); pojav_environ->isUseStackQueueCall = JNI_FALSE; } else if (pojav_environ->dalvikJavaVMPtr != vm) { __android_log_print(ANDROID_LOG_INFO, "Native", "Saving JVM environ..."); @@ -71,7 +95,7 @@ jint JNI_OnLoad(JavaVM* vm, __attribute__((unused)) void* reserved) { registerFunctions(env); } pojav_environ->isGrabbing = JNI_FALSE; - + return JNI_VERSION_1_4; } @@ -361,7 +385,7 @@ JNIEXPORT jstring JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeClipboard(JNI (*pojav_environ->dalvikJavaVMPtr)->AttachCurrentThread(pojav_environ->dalvikJavaVMPtr, &dalvikEnv, NULL); assert(dalvikEnv != NULL); assert(pojav_environ->bridgeClazz != NULL); - + LOGD("Clipboard: Converting string\n"); char *copySrcC; jstring copyDst = NULL; @@ -374,7 +398,7 @@ JNIEXPORT jstring JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeClipboard(JNI jstring pasteDst = convertStringJVM(dalvikEnv, env, (jstring) (*dalvikEnv)->CallStaticObjectMethod(dalvikEnv, pojav_environ->bridgeClazz, pojav_environ->method_accessAndroidClipboard, action, copyDst)); if (copySrc) { - (*dalvikEnv)->DeleteLocalRef(dalvikEnv, copyDst); + (*dalvikEnv)->DeleteLocalRef(dalvikEnv, copyDst); (*env)->ReleaseByteArrayElements(env, copySrc, (jbyte *)copySrcC, 0); } (*pojav_environ->dalvikJavaVMPtr)->DetachCurrentThread(pojav_environ->dalvikJavaVMPtr); @@ -395,13 +419,18 @@ JNIEXPORT jboolean JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeSetInputRead } JNIEXPORT void JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeSetGrabbing(__attribute__((unused)) JNIEnv* env, __attribute__((unused)) jclass clazz, jboolean grabbing) { - JNIEnv *dalvikEnv; - (*pojav_environ->dalvikJavaVMPtr)->AttachCurrentThread(pojav_environ->dalvikJavaVMPtr, &dalvikEnv, NULL); - (*dalvikEnv)->CallStaticVoidMethod(dalvikEnv, pojav_environ->bridgeClazz, pojav_environ->method_onGrabStateChanged, grabbing); - (*pojav_environ->dalvikJavaVMPtr)->DetachCurrentThread(pojav_environ->dalvikJavaVMPtr); + TRY_ATTACH_ENV(dvm_env, pojav_environ->dalvikJavaVMPtr, "nativeSetGrabbing failed: %i", return;); + (*dvm_env)->CallStaticVoidMethod(dvm_env, pojav_environ->bridgeClazz, pojav_environ->method_onGrabStateChanged, grabbing); pojav_environ->isGrabbing = grabbing; } +JNIEXPORT jboolean JNICALL +Java_org_lwjgl_glfw_CallbackBridge_nativeEnableGamepadDirectInput(__attribute__((unused)) JNIEnv *env, __attribute__((unused)) jclass clazz) { + TRY_ATTACH_ENV(dvm_env, pojav_environ->dalvikJavaVMPtr, "nativeEnableGamepadDirectInput failed: %i", return JNI_FALSE;); + (*dvm_env)->CallStaticVoidMethod(dvm_env, pojav_environ->bridgeClazz, pojav_environ->method_onDirectInputEnable); + return JNI_TRUE; +} + jboolean critical_send_char(jchar codepoint) { if (pojav_environ->GLFW_invoke_Char && pojav_environ->isInputReady) { if (pojav_environ->isUseStackQueueCall) { @@ -561,16 +590,7 @@ JNIEXPORT void JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeSetWindowAttrib( // in environ for the Android UI thread but this is the only place that uses it // (very rarely, only in lifecycle callbacks) so i dont care - JavaVM* jvm = pojav_environ->runtimeJavaVMPtr; - JNIEnv *jvm_env = NULL; - jint env_result = (*jvm)->GetEnv(jvm, (void**)&jvm_env, JNI_VERSION_1_4); - if(env_result == JNI_EDETACHED) { - env_result = (*jvm)->AttachCurrentThread(jvm, &jvm_env, NULL); - } - if(env_result != JNI_OK) { - printf("input_bridge nativeSetWindowAttrib() JNI call failed: %i\n", env_result); - return; - } + TRY_ATTACH_ENV(jvm_env, pojav_environ->runtimeJavaVMPtr, "nativeSetWindowAttrib failed: %i", return;); (*jvm_env)->CallStaticVoidMethod( jvm_env, pojav_environ->vmGlfwClass, diff --git a/app_pojavlauncher/src/main/res/xml/pref_control.xml b/app_pojavlauncher/src/main/res/xml/pref_control.xml index cd0093bce..0d2778e17 100644 --- a/app_pojavlauncher/src/main/res/xml/pref_control.xml +++ b/app_pojavlauncher/src/main/res/xml/pref_control.xml @@ -144,13 +144,7 @@ - diff --git a/jre_lwjgl3glfw/src/main/java/org/lwjgl/glfw/CallbackBridge.java b/jre_lwjgl3glfw/src/main/java/org/lwjgl/glfw/CallbackBridge.java index 17d25e203..88263d02c 100644 --- a/jre_lwjgl3glfw/src/main/java/org/lwjgl/glfw/CallbackBridge.java +++ b/jre_lwjgl3glfw/src/main/java/org/lwjgl/glfw/CallbackBridge.java @@ -19,6 +19,8 @@ public class CallbackBridge { public static final int ANDROID_TYPE_GRAB_STATE = 0; public static final boolean INPUT_DEBUG_ENABLED; + + public static boolean sGamepadDirectEnabled; // TODO send grab state event to Android @@ -41,6 +43,11 @@ public class CallbackBridge { } + public static void enableGamepadDirectInput() { + if(sGamepadDirectEnabled) return; + sGamepadDirectEnabled = nativeEnableGamepadDirectInput(); + } + public static void sendData(int type, String data) { nativeSendData(false, type, data); } @@ -50,5 +57,6 @@ public class CallbackBridge { public static native void nativeSetGrabbing(boolean grab); public static native ByteBuffer nativeCreateGamepadButtonBuffer(); public static native ByteBuffer nativeCreateGamepadAxisBuffer(); + private static native boolean nativeEnableGamepadDirectInput(); } diff --git a/jre_lwjgl3glfw/src/main/java/org/lwjgl/glfw/GLFW.java b/jre_lwjgl3glfw/src/main/java/org/lwjgl/glfw/GLFW.java index b878cb149..46646b804 100644 --- a/jre_lwjgl3glfw/src/main/java/org/lwjgl/glfw/GLFW.java +++ b/jre_lwjgl3glfw/src/main/java/org/lwjgl/glfw/GLFW.java @@ -1211,6 +1211,7 @@ public class GLFW public static boolean glfwJoystickPresent(int jid) { if(jid == GLFW_JOYSTICK_1) { + CallbackBridge.enableGamepadDirectInput(); return true; }else return false; }