From 0765ce7991c467856625ddc1f3be790df421d65b Mon Sep 17 00:00:00 2001 From: fifth_light Date: Wed, 16 Jul 2025 20:32:34 +0800 Subject: [PATCH 1/5] feat[TouchController]: Initial integration --- app_pojavlauncher/build.gradle | 2 + .../src/main/AndroidManifest.xml | 1 + .../net/kdt/pojavlaunch/MainActivity.java | 6 + .../kdt/pojavlaunch/MinecraftGLSurface.java | 2 + .../prefs/LauncherPreferences.java | 4 + .../utils/TouchControllerUtils.java | 113 ++++++++++++++++++ .../src/main/res/values-zh-rCN/strings.xml | 6 + .../src/main/res/values/strings.xml | 6 + .../src/main/res/values/values.xml | 2 + .../src/main/res/xml/pref_control.xml | 16 ++- 10 files changed, 157 insertions(+), 1 deletion(-) create mode 100644 app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/TouchControllerUtils.java diff --git a/app_pojavlauncher/build.gradle b/app_pojavlauncher/build.gradle index a6421dc10..2f207127a 100644 --- a/app_pojavlauncher/build.gradle +++ b/app_pojavlauncher/build.gradle @@ -228,6 +228,8 @@ dependencies { // implementation 'net.sourceforge.streamsupport:streamsupport-cfuture:1.7.0' + implementation 'top.fifthlight.touchcontroller:proxy-client-android:0.0.3' + implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar']) implementation project(":MobileGlues") diff --git a/app_pojavlauncher/src/main/AndroidManifest.xml b/app_pojavlauncher/src/main/AndroidManifest.xml index 7cd3261d0..a25fb0d92 100644 --- a/app_pojavlauncher/src/main/AndroidManifest.xml +++ b/app_pojavlauncher/src/main/AndroidManifest.xml @@ -20,6 +20,7 @@ + 启用实验性的 Compute Shader 扩展 可能有助于解决光影渲染异常。非必要请禁用,可能会导致错误。 OpenGL 报错设置 + + TouchController 设置 + 启用 TouchController + 启用 TouchController 集成。 + TouchController 震动长度 + 设置使用 TouchController 时的震动长度。 diff --git a/app_pojavlauncher/src/main/res/values/strings.xml b/app_pojavlauncher/src/main/res/values/strings.xml index 2104b8d3a..bbe48eb6f 100644 --- a/app_pojavlauncher/src/main/res/values/strings.xml +++ b/app_pojavlauncher/src/main/res/values/strings.xml @@ -456,4 +456,10 @@ Create Neoforge profile Select NeoForge version Sorry, but this version of NeoForge does not have an installer, which is not yet supported. + + TouchController Settings + Enable TouchController + Enable TouchController integration. + TouchController vibrate length + Set the length of the vibration when using TouchController. diff --git a/app_pojavlauncher/src/main/res/values/values.xml b/app_pojavlauncher/src/main/res/values/values.xml index 3220345b6..95eaf3533 100644 --- a/app_pojavlauncher/src/main/res/values/values.xml +++ b/app_pojavlauncher/src/main/res/values/values.xml @@ -34,4 +34,6 @@ 8 256 + 10 + 1000 \ No newline at end of file diff --git a/app_pojavlauncher/src/main/res/xml/pref_control.xml b/app_pojavlauncher/src/main/res/xml/pref_control.xml index 0d2778e17..bf7b0b4da 100644 --- a/app_pojavlauncher/src/main/res/xml/pref_control.xml +++ b/app_pojavlauncher/src/main/res/xml/pref_control.xml @@ -164,7 +164,21 @@ - + + + + \ No newline at end of file From 71a28fa5fb639512d3e7b32faa9fb9076548e7cc Mon Sep 17 00:00:00 2001 From: fifth_light Date: Wed, 16 Jul 2025 20:49:16 +0800 Subject: [PATCH 2/5] fix[TouchController]: Fixed slider preferences of TouchController vibrate length --- .../LauncherPreferenceControlFragment.java | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/screens/LauncherPreferenceControlFragment.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/screens/LauncherPreferenceControlFragment.java index 7002f8452..bc793cba0 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/screens/LauncherPreferenceControlFragment.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/screens/LauncherPreferenceControlFragment.java @@ -13,6 +13,7 @@ import net.kdt.pojavlaunch.prefs.LauncherPreferences; public class LauncherPreferenceControlFragment extends LauncherPreferenceFragment { private boolean mGyroAvailable = false; + @Override public void onCreatePreferences(Bundle b, String str) { // Get values @@ -20,6 +21,7 @@ public class LauncherPreferenceControlFragment extends LauncherPreferenceFragmen int prefButtonSize = (int) LauncherPreferences.PREF_BUTTONSIZE; int mouseScale = (int) (LauncherPreferences.PREF_MOUSESCALE * 100); int gyroSampleRate = LauncherPreferences.PREF_GYRO_SAMPLE_RATE; + int touchControllerVibrateLength = LauncherPreferences.PREF_TOUCHCONTROLLER_VIBRATE_LENGTH; float mouseSpeed = LauncherPreferences.PREF_MOUSESPEED; float gyroSpeed = LauncherPreferences.PREF_GYRO_SENSITIVITY; float joystickDeadzone = LauncherPreferences.PREF_DEADZONE_SCALE; @@ -45,7 +47,7 @@ public class LauncherPreferenceControlFragment extends LauncherPreferenceFragmen CustomSeekBarPreference seek6 = requirePreference("mousespeed", CustomSeekBarPreference.class); - seek6.setValue((int)(mouseSpeed *100f)); + seek6.setValue((int) (mouseSpeed * 100f)); seek6.setSuffix(" %"); CustomSeekBarPreference deadzoneSeek = requirePreference("gamepad_deadzone_scale", @@ -55,22 +57,29 @@ public class LauncherPreferenceControlFragment extends LauncherPreferenceFragmen Context context = getContext(); - if(context != null) { + if (context != null) { mGyroAvailable = Tools.deviceSupportsGyro(context); } - PreferenceCategory gyroCategory = requirePreference("gyroCategory", + PreferenceCategory gyroCategory = requirePreference("gyroCategory", PreferenceCategory.class); gyroCategory.setVisible(mGyroAvailable); CustomSeekBarPreference gyroSensitivitySeek = requirePreference("gyroSensitivity", CustomSeekBarPreference.class); - gyroSensitivitySeek.setValue((int) (gyroSpeed*100f)); + gyroSensitivitySeek.setValue((int) (gyroSpeed * 100f)); gyroSensitivitySeek.setSuffix(" %"); CustomSeekBarPreference gyroSampleRateSeek = requirePreference("gyroSampleRate", CustomSeekBarPreference.class); gyroSampleRateSeek.setValue(gyroSampleRate); gyroSampleRateSeek.setSuffix(" ms"); + + CustomSeekBarPreference touchControllerVibrateLengthSeek = requirePreference( + "touchControllerVibrateLength", + CustomSeekBarPreference.class); + touchControllerVibrateLengthSeek.setValue(touchControllerVibrateLength); + touchControllerVibrateLengthSeek.setSuffix(" ms"); + computeVisibility(); } @@ -80,7 +89,7 @@ public class LauncherPreferenceControlFragment extends LauncherPreferenceFragmen computeVisibility(); } - private void computeVisibility(){ + private void computeVisibility() { requirePreference("timeLongPressTrigger").setVisible(!LauncherPreferences.PREF_DISABLE_GESTURES); requirePreference("gyroSensitivity").setVisible(LauncherPreferences.PREF_ENABLE_GYRO); requirePreference("gyroSampleRate").setVisible(LauncherPreferences.PREF_ENABLE_GYRO); From cd0f40f3774d005a75d10cb0514febcaa347667b Mon Sep 17 00:00:00 2001 From: fifth_light Date: Wed, 16 Jul 2025 22:36:03 +0800 Subject: [PATCH 3/5] fix[TouchController]: Fixed TouchController proxy thread not being run --- .../src/main/java/net/kdt/pojavlaunch/MinecraftGLSurface.java | 2 +- .../java/net/kdt/pojavlaunch/utils/TouchControllerUtils.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) 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 69ba893ca..8e20d3cb5 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MinecraftGLSurface.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MinecraftGLSurface.java @@ -203,8 +203,8 @@ public class MinecraftGLSurface extends View implements GrabListener, DirectGame CallbackBridge.sendCursorPos( e.getX(i) * LauncherPreferences.PREF_SCALE_FACTOR, e.getY(i) * LauncherPreferences.PREF_SCALE_FACTOR); return true; //mouse event handled successfully } - if (mIngameProcessor == null || mInGUIProcessor == null) return true; TouchControllerUtils.processTouchEvent(e, this); + if (mIngameProcessor == null || mInGUIProcessor == null) return true; return mCurrentTouchProcessor.processTouchEvent(e); } diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/TouchControllerUtils.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/TouchControllerUtils.java index 578fb69dd..c999a283e 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/TouchControllerUtils.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/utils/TouchControllerUtils.java @@ -104,6 +104,7 @@ public class TouchControllerUtils { } MessageTransport transport = UnixSocketTransportKt.UnixSocketTransport(socketName); proxyClient = new LauncherProxyClient(transport); + proxyClient.run(); Vibrator vibrator = ContextCompat.getSystemService(context, Vibrator.class); if (vibrator != null) { LauncherProxyClient.VibrationHandler vibrationHandler = new VibrationHandler(vibrator); From 8f1aede432c2f22d5f4d017f74d5f9c68d2e5abc Mon Sep 17 00:00:00 2001 From: fifth_light Date: Wed, 16 Jul 2025 23:27:06 +0800 Subject: [PATCH 4/5] feat[TouchController]: add TouchController mod detection --- .../net/kdt/pojavlaunch/MainActivity.java | 9 ++++---- .../main/java/net/kdt/pojavlaunch/Tools.java | 21 +++++++++++++++++++ .../prefs/LauncherPreferences.java | 4 ++-- .../src/main/res/values-zh-rCN/strings.xml | 4 ++-- .../src/main/res/values/strings.xml | 4 ++-- .../src/main/res/xml/pref_control.xml | 6 +++--- 6 files changed, 35 insertions(+), 13 deletions(-) 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 81a6f147a..a87316069 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java @@ -104,13 +104,14 @@ public class MainActivity extends BaseActivity implements ControlButtonMenuListe public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - if (LauncherPreferences.PREF_ENABLE_TOUCHCONTROLLER) { + minecraftProfile = LauncherProfiles.getCurrentProfile(); + + String gameDirPath = Tools.getGameDirPath(minecraftProfile).getAbsolutePath(); + MCOptionUtils.load(gameDirPath); + if (Tools.hasTouchController(new File(gameDirPath)) || LauncherPreferences.PREF_FORCE_ENABLE_TOUCHCONTROLLER) { TouchControllerUtils.initialize(this); } - minecraftProfile = LauncherProfiles.getCurrentProfile(); - MCOptionUtils.load(Tools.getGameDirPath(minecraftProfile).getAbsolutePath()); - Intent gameServiceIntent = new Intent(this, GameService.class); // Start the service a bit early ContextCompat.startForegroundService(this, gameServiceIntent); diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/Tools.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/Tools.java index a5f876aff..82d101fc9 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/Tools.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/Tools.java @@ -227,6 +227,27 @@ public final class Tools { return false; } + /** + * Search for TouchController mod to automatically enable TouchController mod support. + * + * @param gameDir current game directory + * @return whether TouchController is found + */ + public static boolean hasTouchController(File gameDir) { + File modsDir = new File(gameDir, "mods"); + File[] mods = modsDir.listFiles(file -> file.isFile() && file.getName().endsWith(".jar")); + if (mods == null) { + return false; + } + for (File file : mods) { + String name = file.getName().toLowerCase(Locale.ROOT); + if (name.contains("touchcontroller")) { + return true; + } + } + return false; + } + /** * Initialize OpenGL and do checks to see if the GPU of the device is affected by the render * distance issue. diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/LauncherPreferences.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/LauncherPreferences.java index e6379f865..d6dfc112b 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/LauncherPreferences.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/prefs/LauncherPreferences.java @@ -70,7 +70,7 @@ public class LauncherPreferences { public static String PREF_DOWNLOAD_SOURCE = "default"; public static boolean PREF_SKIP_NOTIFICATION_PERMISSION_CHECK = false; public static boolean PREF_VSYNC_IN_ZINK = true; - public static boolean PREF_ENABLE_TOUCHCONTROLLER = false; + public static boolean PREF_FORCE_ENABLE_TOUCHCONTROLLER = false; public static int PREF_TOUCHCONTROLLER_VIBRATE_LENGTH = 100; @@ -114,7 +114,7 @@ public class LauncherPreferences { PREF_VERIFY_MANIFEST = DEFAULT_PREF.getBoolean("verifyManifest", true); PREF_SKIP_NOTIFICATION_PERMISSION_CHECK = DEFAULT_PREF.getBoolean(PREF_KEY_SKIP_NOTIFICATION_CHECK, false); PREF_VSYNC_IN_ZINK = DEFAULT_PREF.getBoolean("vsync_in_zink", true); - PREF_ENABLE_TOUCHCONTROLLER = DEFAULT_PREF.getBoolean("enableTouchController", false); + PREF_FORCE_ENABLE_TOUCHCONTROLLER = DEFAULT_PREF.getBoolean("forceEnableTouchController", false); PREF_TOUCHCONTROLLER_VIBRATE_LENGTH = DEFAULT_PREF.getInt("touchControllerVibrateLength", 100); String argLwjglLibname = "-Dorg.lwjgl.opengl.libname="; diff --git a/app_pojavlauncher/src/main/res/values-zh-rCN/strings.xml b/app_pojavlauncher/src/main/res/values-zh-rCN/strings.xml index a61926cc6..c422d6ccb 100644 --- a/app_pojavlauncher/src/main/res/values-zh-rCN/strings.xml +++ b/app_pojavlauncher/src/main/res/values-zh-rCN/strings.xml @@ -401,8 +401,8 @@ OpenGL 报错设置 TouchController 设置 - 启用 TouchController - 启用 TouchController 集成。 + 强制启用 TouchController + 启用 TouchController 集成,即使没有找到模组文件。 TouchController 震动长度 设置使用 TouchController 时的震动长度。 diff --git a/app_pojavlauncher/src/main/res/values/strings.xml b/app_pojavlauncher/src/main/res/values/strings.xml index bbe48eb6f..874252e46 100644 --- a/app_pojavlauncher/src/main/res/values/strings.xml +++ b/app_pojavlauncher/src/main/res/values/strings.xml @@ -458,8 +458,8 @@ Sorry, but this version of NeoForge does not have an installer, which is not yet supported. TouchController Settings - Enable TouchController - Enable TouchController integration. + Force enable TouchController + Force enable TouchController integration, even if mod file is not found. TouchController vibrate length Set the length of the vibration when using TouchController. diff --git a/app_pojavlauncher/src/main/res/xml/pref_control.xml b/app_pojavlauncher/src/main/res/xml/pref_control.xml index bf7b0b4da..77c02f91c 100644 --- a/app_pojavlauncher/src/main/res/xml/pref_control.xml +++ b/app_pojavlauncher/src/main/res/xml/pref_control.xml @@ -167,9 +167,9 @@ + android:key="forceEnableTouchController" + android:title="@string/preference_force_enable_touchcontroller_title" + android:summary="@string/preference_force_enable_touchcontroller_description"/> Date: Mon, 21 Jul 2025 22:01:31 +0800 Subject: [PATCH 5/5] feat[TouchController]: upgrade TouchController proxy version to 0.0.4 --- app_pojavlauncher/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app_pojavlauncher/build.gradle b/app_pojavlauncher/build.gradle index 2f207127a..99caaa7bf 100644 --- a/app_pojavlauncher/build.gradle +++ b/app_pojavlauncher/build.gradle @@ -228,7 +228,7 @@ dependencies { // implementation 'net.sourceforge.streamsupport:streamsupport-cfuture:1.7.0' - implementation 'top.fifthlight.touchcontroller:proxy-client-android:0.0.3' + implementation 'top.fifthlight.touchcontroller:proxy-client-android:0.0.4' implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])