From 642effa7031cd17ecee1dbf32c668d0ef9f3e908 Mon Sep 17 00:00:00 2001 From: programminghoch10 <16062290+programminghoch10@users.noreply.github.com> Date: Mon, 10 Nov 2025 19:17:14 +0100 Subject: [PATCH 01/14] fix KeepSplitScreenRatio keeping 100%/0% split after dragging to close --- .../KeepSplitScreenRatio/Hook.kt | 77 +++++++++++++++++-- 1 file changed, 71 insertions(+), 6 deletions(-) diff --git a/KeepSplitScreenRatio/src/main/java/com/programminghoch10/KeepSplitScreenRatio/Hook.kt b/KeepSplitScreenRatio/src/main/java/com/programminghoch10/KeepSplitScreenRatio/Hook.kt index 1526f4c..2c40af3 100644 --- a/KeepSplitScreenRatio/src/main/java/com/programminghoch10/KeepSplitScreenRatio/Hook.kt +++ b/KeepSplitScreenRatio/src/main/java/com/programminghoch10/KeepSplitScreenRatio/Hook.kt @@ -2,26 +2,91 @@ package com.programminghoch10.KeepSplitScreenRatio import android.os.IBinder import de.robv.android.xposed.IXposedHookLoadPackage +import de.robv.android.xposed.XC_MethodReplacement +import de.robv.android.xposed.XposedBridge import de.robv.android.xposed.XposedHelpers import de.robv.android.xposed.callbacks.XC_LoadPackage import de.robv.android.xposed.XC_MethodHook as MethodHook + class Hook : IXposedHookLoadPackage { override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { if (lpparam.packageName != "com.android.systemui") return - val SplitScreenTransitionsClass = XposedHelpers.findClass("com.android.wm.shell.splitscreen.SplitScreenTransitions", lpparam.classLoader) + val SplitLayoutClass = XposedHelpers.findClass("com.android.wm.shell.common.split.SplitLayout", lpparam.classLoader) + val StageCoordinatorClass = XposedHelpers.findClass("com.android.wm.shell.splitscreen.StageCoordinator", lpparam.classLoader) + + /* + Currently this module disables SplitScreen enter and dismiss animations completely. + + Before animating, the Divider state is initialized in + https://github.com/LineageOS/android_frameworks_base/blob/2dc97cf3d6234c87497ca78b2734bb3ed604c349/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java#L1849 + then a "fling to center" is started in + https://github.com/LineageOS/android_frameworks_base/blob/2dc97cf3d6234c87497ca78b2734bb3ed604c349/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java#L3586 + Since this "fling to center" is embedded deeply, + we currently simply disable it. + */ + XposedHelpers.findAndHookMethod( - SplitScreenTransitionsClass, - "setEnterTransition", - IBinder::class.java, - "android.window.RemoteTransition", + StageCoordinatorClass, + "onSnappedToDismiss", Int::class.java, Boolean::class.java, + object : MethodHook() { + override fun afterHookedMethod(param: MethodHookParam) { + // reset the divider position after a fling to dismiss is finished, + // since the SplitScreen enter animation won't take care of it anymore + val mSplitLayout = XposedHelpers.getObjectField(param.thisObject, "mSplitLayout") + //XposedHelpers.callMethod(mSplitLayout, "resetDividerPosition") + XposedBridge.invokeOriginalMethod( + XposedHelpers.findMethodExact( + SplitLayoutClass, + "resetDividerPosition", + *arrayOf(), + ), + mSplitLayout, + arrayOf(), + ) + } + }, + ) + + // disable resetDividerPosition entirely + XposedHelpers.findAndHookMethod( + SplitLayoutClass, + "resetDividerPosition", + XC_MethodReplacement.DO_NOTHING, + ) + + XposedHelpers.findAndHookMethod( + StageCoordinatorClass, + "prepareSplitLayout", + "android.window.WindowContainerTransaction", + Boolean::class.java, + object : MethodHook() { + override fun beforeHookedMethod(param: MethodHookParam) { + // disabling resizeAnim makes the method call resetDividerPosition() + param.args[1] = false + } + }, + ) + + val startPendingAnimationMethod = + StageCoordinatorClass.declaredMethods.find { it.name == "startPendingAnimation" && it.parameterTypes[0] == IBinder::class.java }!! + XposedBridge.hookMethod( + startPendingAnimationMethod, object : MethodHook() { override fun beforeHookedMethod(param: MethodHookParam) { - param.args[3] = false + val binder = param.args[0] as IBinder + val stageCoordinator = param.thisObject + val mSplitTransitions = XposedHelpers.getObjectField(stageCoordinator, "mSplitTransitions") + val isPendingEnter = XposedHelpers.callMethod(mSplitTransitions, "isPendingEnter", binder) as Boolean + if (!isPendingEnter) return + val mPendingEnter = XposedHelpers.getObjectField(mSplitTransitions, "mPendingEnter") + XposedHelpers.getBooleanField(mPendingEnter, "mResizeAnim") + // disable resizeAnim when entering SplitScreen + XposedHelpers.setBooleanField(mPendingEnter, "mResizeAnim", false) } }, ) From 217323b4ee8613f300192c85760a30dac7838002 Mon Sep 17 00:00:00 2001 From: programminghoch10 <16062290+programminghoch10@users.noreply.github.com> Date: Wed, 12 Nov 2025 13:28:35 +0100 Subject: [PATCH 02/14] merge AlwaysAllowMultiInstaceSplit and KeepSplitScreenRatio into SplitScreenMods --- AlwaysAllowMultiInstanceSplit/Readme.md | 7 ----- .../src/main/assets/xposed_init | 1 - KeepSplitScreenRatio/Readme.md | 5 ---- KeepSplitScreenRatio/build.gradle.kts | 13 ---------- .../src/main/AndroidManifest.xml | 24 ------------------ .../src/main/assets/xposed_init | 1 - .../src/main/res/values/arrays.xml | 6 ----- README.md | 2 +- SplitScreenMods/Readme.md | 19 ++++++++++++++ .../build.gradle.kts | 5 ++-- .../src/main/AndroidManifest.xml | 4 +-- SplitScreenMods/src/main/assets/xposed_init | 2 ++ .../AlwaysAllowMultiInstanceSplitHook.kt | 11 +++++--- .../KeepSplitScreenRatioHook.kt | 23 ++++++++++++----- .../src/main/res/values/arrays.xml | 0 .../src/main/res/values/strings.xml | 8 ++++++ .../convention/src/main/kotlin/Common.kt | 1 + .../en-US/full_description.txt | 3 --- .../en-US/short_description.txt | 1 - .../en-US/title.txt | 1 - .../en-US/full_description.txt | 6 +++++ .../images/phoneScreenshots/1-screenshot.png | Bin .../en-US/short_description.txt | 1 + .../en-US/title.txt | 1 + .../en-US/full_description.txt | 3 --- .../en-US/short_description.txt | 1 - .../en-US/title.txt | 1 - modules.gradle.kts | 3 +-- 28 files changed, 68 insertions(+), 85 deletions(-) delete mode 100644 AlwaysAllowMultiInstanceSplit/Readme.md delete mode 100644 AlwaysAllowMultiInstanceSplit/src/main/assets/xposed_init delete mode 100644 KeepSplitScreenRatio/Readme.md delete mode 100644 KeepSplitScreenRatio/build.gradle.kts delete mode 100644 KeepSplitScreenRatio/src/main/AndroidManifest.xml delete mode 100644 KeepSplitScreenRatio/src/main/assets/xposed_init delete mode 100644 KeepSplitScreenRatio/src/main/res/values/arrays.xml create mode 100644 SplitScreenMods/Readme.md rename {AlwaysAllowMultiInstanceSplit => SplitScreenMods}/build.gradle.kts (64%) rename {AlwaysAllowMultiInstanceSplit => SplitScreenMods}/src/main/AndroidManifest.xml (79%) create mode 100644 SplitScreenMods/src/main/assets/xposed_init rename AlwaysAllowMultiInstanceSplit/src/main/java/de/binarynoise/AlwaysAllowMultiInstanceSplit/Hook.kt => SplitScreenMods/src/main/java/com/programminghoch10/SplitScreenMods/AlwaysAllowMultiInstanceSplitHook.kt (90%) rename KeepSplitScreenRatio/src/main/java/com/programminghoch10/KeepSplitScreenRatio/Hook.kt => SplitScreenMods/src/main/java/com/programminghoch10/SplitScreenMods/KeepSplitScreenRatioHook.kt (78%) rename {AlwaysAllowMultiInstanceSplit => SplitScreenMods}/src/main/res/values/arrays.xml (100%) create mode 100644 SplitScreenMods/src/main/res/values/strings.xml delete mode 100644 metadata/com.programminghoch10.KeepSplitScreenRatio/en-US/full_description.txt delete mode 100644 metadata/com.programminghoch10.KeepSplitScreenRatio/en-US/short_description.txt delete mode 100644 metadata/com.programminghoch10.KeepSplitScreenRatio/en-US/title.txt create mode 100644 metadata/com.programminghoch10.SplitScreenMods/en-US/full_description.txt rename metadata/{de.binarynoise.AlwaysAllowMultiInstanceSplit => com.programminghoch10.SplitScreenMods}/en-US/images/phoneScreenshots/1-screenshot.png (100%) create mode 100644 metadata/com.programminghoch10.SplitScreenMods/en-US/short_description.txt create mode 100644 metadata/com.programminghoch10.SplitScreenMods/en-US/title.txt delete mode 100644 metadata/de.binarynoise.AlwaysAllowMultiInstanceSplit/en-US/full_description.txt delete mode 100644 metadata/de.binarynoise.AlwaysAllowMultiInstanceSplit/en-US/short_description.txt delete mode 100644 metadata/de.binarynoise.AlwaysAllowMultiInstanceSplit/en-US/title.txt diff --git a/AlwaysAllowMultiInstanceSplit/Readme.md b/AlwaysAllowMultiInstanceSplit/Readme.md deleted file mode 100644 index 851e246..0000000 --- a/AlwaysAllowMultiInstanceSplit/Readme.md +++ /dev/null @@ -1,7 +0,0 @@ -# AlwaysAllowMultiInstanceSplit - -Allow all apps to be launched twice side-by-side in a split screen. - -Undefined behaviour ahead! - -![1-screenshot.png](../metadata/de.binarynoise.AlwaysAllowMultiInstanceSplit/en-US/images/phoneScreenshots/1-screenshot.png) diff --git a/AlwaysAllowMultiInstanceSplit/src/main/assets/xposed_init b/AlwaysAllowMultiInstanceSplit/src/main/assets/xposed_init deleted file mode 100644 index d9b11dd..0000000 --- a/AlwaysAllowMultiInstanceSplit/src/main/assets/xposed_init +++ /dev/null @@ -1 +0,0 @@ -de.binarynoise.AlwaysAllowMultiInstanceSplit.Hook diff --git a/KeepSplitScreenRatio/Readme.md b/KeepSplitScreenRatio/Readme.md deleted file mode 100644 index d3fbc20..0000000 --- a/KeepSplitScreenRatio/Readme.md +++ /dev/null @@ -1,5 +0,0 @@ -# KeepSplitScreenRatio - -Keep the split screen ratio, when switching one of the split apps. - -Only required on Android 14 and later, since previous versions did not force a split resize in this situation. diff --git a/KeepSplitScreenRatio/build.gradle.kts b/KeepSplitScreenRatio/build.gradle.kts deleted file mode 100644 index 5ba30dd..0000000 --- a/KeepSplitScreenRatio/build.gradle.kts +++ /dev/null @@ -1,13 +0,0 @@ -plugins { - alias(libs.plugins.buildlogic.android.application) - alias(libs.plugins.buildlogic.kotlin.android) -} - -android { - namespace = "com.programminghoch10.KeepSplitScreenRatio" - - defaultConfig { - minSdk = 34 - targetSdk = 36 - } -} diff --git a/KeepSplitScreenRatio/src/main/AndroidManifest.xml b/KeepSplitScreenRatio/src/main/AndroidManifest.xml deleted file mode 100644 index cd5b2b9..0000000 --- a/KeepSplitScreenRatio/src/main/AndroidManifest.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - diff --git a/KeepSplitScreenRatio/src/main/assets/xposed_init b/KeepSplitScreenRatio/src/main/assets/xposed_init deleted file mode 100644 index 420f227..0000000 --- a/KeepSplitScreenRatio/src/main/assets/xposed_init +++ /dev/null @@ -1 +0,0 @@ -com.programminghoch10.KeepSplitScreenRatio.Hook diff --git a/KeepSplitScreenRatio/src/main/res/values/arrays.xml b/KeepSplitScreenRatio/src/main/res/values/arrays.xml deleted file mode 100644 index f8495b0..0000000 --- a/KeepSplitScreenRatio/src/main/res/values/arrays.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - com.android.systemui - - diff --git a/README.md b/README.md index 1341bd3..be57bfb 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,6 @@ A collection of small Xposed Modules. | Module | Author | Description | Releases | |-|-|-|-| | [AlwaysAllowChargingFeedback](AlwaysAllowChargingFeedback) | [@binarynoise](https://github.com/binarynoise) | Always allow charging feedback, even in DnD mode | [GitHub](https://github.com/binarynoise/XposedModulets/releases?q=AlwaysAllowChargingFeedback) | -| [AlwaysAllowMultiInstanceSplit](AlwaysAllowMultiInstanceSplit) | [@binarynoise](https://github.com/binarynoise) & [@programminghoch10](https://github.com/programminghoch10) | Allow all apps to be launched twice in a split screen | [GitHub](https://github.com/binarynoise/XposedModulets/releases?q=AlwaysAllowMultiInstanceSplit) | | [AnimationScaleMod](AnimationScaleMod) | [@programminghoch10](https://github.com/programminghoch10) | Add more animation scale multipliers | [GitHub](https://github.com/binarynoise/XposedModulets/releases?q=AnimationScaleMod) | | [AntiBrightnessChange](AntiBrightnessChange) | [@programminghoch10](https://github.com/programminghoch10) | Prevent apps from changing display brightness | [GitHub](https://github.com/binarynoise/XposedModulets/releases?q=AntiBrightnessChange) [IzzyOnDroid](https://apt.izzysoft.de/fdroid/index/apk/com.programminghoch10.AntiBrightnessChange) | | [AutomaticAdvancedSettingsExpander](AutomaticAdvancedSettingsExpander) | [@binarynoise](https://github.com/binarynoise) | Automatically expands the advanced settings in the Settings app | [GitHub](https://github.com/binarynoise/XposedModulets/releases?q=AutomaticAdvancedSettingsExpander) [IzzyOnDroid](https://apt.izzysoft.de/fdroid/index/apk/de.binarynoise.AutomaticAdvancedSettingsExpander) | @@ -22,6 +21,7 @@ A collection of small Xposed Modules. | [PersistentForegroundServiceNotifications](PersistentForegroundServiceNotifications) | [@binarynoise](https://github.com/binarynoise) | Make notifications of foreground services persistent again | [GitHub](https://github.com/binarynoise/XposedModulets/releases?q=persistentForegroundServiceNotifications) | | [ResetAllNotificationChannels](ResetAllNotificationChannels) | [@binarynoise](https://github.com/binarynoise) | Reset all Notification Channels: vibrations, ringtones, importance etc. | [GitHub](https://github.com/binarynoise/XposedModulets/releases?q=resetAllNotificationChannels) [IzzyOnDroid](https://apt.izzysoft.de/fdroid/index/apk/de.binarynoise.resetAllNotificationChannels) | | [RotationControl](RotationControl) | [@programminghoch10](https://github.com/programminghoch10) | Force rotation for selected packages | [GitHub](https://github.com/binarynoise/XposedModulets/releases?q=RotationControl) [IzzyOnDroid](https://apt.izzysoft.de/fdroid/index/apk/com.programminghoch10.RotationControl) | +| [SplitScreenMods](SplitScreenMods) | [@binarynoise](https://github.com/binarynoise) & [@programminghoch10](https://github.com/programminghoch10) | A collection of various SplitScreen modifications. | [GitHub](https://github.com/binarynoise/XposedModulets/releases?q=SplitScreenMods) | | [UpsideWifi](UpsideWifi) | [@programminghoch10](https://github.com/programminghoch10) | Turn the WiFi icon upside down | [GitHub](https://github.com/binarynoise/XposedModulets/releases?q=UpsideWifi) | | [VolumeStepsIncrease](VolumeStepsIncrease) | [@programminghoch10](https://github.com/programminghoch10) | Increase the amount of volume steps | [GitHub](https://github.com/binarynoise/XposedModulets/releases?q=VolumeStepsIncrease) | diff --git a/SplitScreenMods/Readme.md b/SplitScreenMods/Readme.md new file mode 100644 index 0000000..eaf1202 --- /dev/null +++ b/SplitScreenMods/Readme.md @@ -0,0 +1,19 @@ +# SplitScreenMods + +A collection of various SplitScreen modifications. + +## AlwaysAllowMultiInstanceSplit + +Allow all apps to be launched twice side-by-side in a split screen. + +Undefined behaviour ahead! + +![1-screenshot.png](../metadata/com.programminghoch10.SplitScreenMods/en-US/images/phoneScreenshots/1-screenshot.png) + +## KeepSplitScreenRatio + +Keep the split screen ratio, when switching one of the split apps. + +Only usable on Android 14 and later, +since previous versions did not force a split resize in this situation. + diff --git a/AlwaysAllowMultiInstanceSplit/build.gradle.kts b/SplitScreenMods/build.gradle.kts similarity index 64% rename from AlwaysAllowMultiInstanceSplit/build.gradle.kts rename to SplitScreenMods/build.gradle.kts index c23eaed..f0d664f 100644 --- a/AlwaysAllowMultiInstanceSplit/build.gradle.kts +++ b/SplitScreenMods/build.gradle.kts @@ -4,15 +4,14 @@ plugins { } android { - namespace = "de.binarynoise.AlwaysAllowMultiInstanceSplit" + namespace = "com.programminghoch10.SplitScreenMods" defaultConfig { minSdk = 33 - targetSdk = 35 + targetSdk = 36 } } dependencies { - implementation(project(":reflection")) implementation(project(":logger")) } diff --git a/AlwaysAllowMultiInstanceSplit/src/main/AndroidManifest.xml b/SplitScreenMods/src/main/AndroidManifest.xml similarity index 79% rename from AlwaysAllowMultiInstanceSplit/src/main/AndroidManifest.xml rename to SplitScreenMods/src/main/AndroidManifest.xml index 3667ace..a471559 100644 --- a/AlwaysAllowMultiInstanceSplit/src/main/AndroidManifest.xml +++ b/SplitScreenMods/src/main/AndroidManifest.xml @@ -2,14 +2,14 @@ - + = Build.VERSION_CODES.TIRAMISU override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { + if (!supportedSdk) return log("handleLoadPackage(${lpparam.packageName} in process ${lpparam.processName})") when (lpparam.packageName) { @@ -46,7 +49,7 @@ class Hook : IXposedHookLoadPackage { ActivityStarterClass, "executeRequest", ActivityStarterRequestClass, - object : MethodHook() { + object : XC_MethodHook() { override fun beforeHookedMethod(param: MethodHookParam) { val request = param.args[0] val aInfo = XposedHelpers.getObjectField(request, "activityInfo") as ActivityInfo diff --git a/KeepSplitScreenRatio/src/main/java/com/programminghoch10/KeepSplitScreenRatio/Hook.kt b/SplitScreenMods/src/main/java/com/programminghoch10/SplitScreenMods/KeepSplitScreenRatioHook.kt similarity index 78% rename from KeepSplitScreenRatio/src/main/java/com/programminghoch10/KeepSplitScreenRatio/Hook.kt rename to SplitScreenMods/src/main/java/com/programminghoch10/SplitScreenMods/KeepSplitScreenRatioHook.kt index 2c40af3..a7523c9 100644 --- a/KeepSplitScreenRatio/src/main/java/com/programminghoch10/KeepSplitScreenRatio/Hook.kt +++ b/SplitScreenMods/src/main/java/com/programminghoch10/SplitScreenMods/KeepSplitScreenRatioHook.kt @@ -1,6 +1,8 @@ -package com.programminghoch10.KeepSplitScreenRatio +package com.programminghoch10.SplitScreenMods +import android.os.Build import android.os.IBinder +import de.binarynoise.logger.Logger.log import de.robv.android.xposed.IXposedHookLoadPackage import de.robv.android.xposed.XC_MethodReplacement import de.robv.android.xposed.XposedBridge @@ -9,13 +11,19 @@ import de.robv.android.xposed.callbacks.XC_LoadPackage import de.robv.android.xposed.XC_MethodHook as MethodHook -class Hook : IXposedHookLoadPackage { +class KeepSplitScreenRatioHook : IXposedHookLoadPackage { + + val supportedSdk = Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) { if (lpparam.packageName != "com.android.systemui") return + if (!supportedSdk) return + log("handleLoadPackage(${lpparam.packageName} in process ${lpparam.processName})") - val SplitLayoutClass = XposedHelpers.findClass("com.android.wm.shell.common.split.SplitLayout", lpparam.classLoader) - val StageCoordinatorClass = XposedHelpers.findClass("com.android.wm.shell.splitscreen.StageCoordinator", lpparam.classLoader) + val SplitLayoutClass = + XposedHelpers.findClass("com.android.wm.shell.common.split.SplitLayout", lpparam.classLoader) + val StageCoordinatorClass = + XposedHelpers.findClass("com.android.wm.shell.splitscreen.StageCoordinator", lpparam.classLoader) /* Currently this module disables SplitScreen enter and dismiss animations completely. @@ -48,6 +56,7 @@ class Hook : IXposedHookLoadPackage { mSplitLayout, arrayOf(), ) + log("${StageCoordinatorClass.simpleName} onSnappedToDismiss called") } }, ) @@ -67,6 +76,7 @@ class Hook : IXposedHookLoadPackage { object : MethodHook() { override fun beforeHookedMethod(param: MethodHookParam) { // disabling resizeAnim makes the method call resetDividerPosition() + log("prepareSplitLayout: disable resizeAnim") param.args[1] = false } }, @@ -81,10 +91,11 @@ class Hook : IXposedHookLoadPackage { val binder = param.args[0] as IBinder val stageCoordinator = param.thisObject val mSplitTransitions = XposedHelpers.getObjectField(stageCoordinator, "mSplitTransitions") - val isPendingEnter = XposedHelpers.callMethod(mSplitTransitions, "isPendingEnter", binder) as Boolean + val isPendingEnter = + XposedHelpers.callMethod(mSplitTransitions, "isPendingEnter", binder) as Boolean + log("${startPendingAnimationMethod.name}: isPendingEnter=$isPendingEnter") if (!isPendingEnter) return val mPendingEnter = XposedHelpers.getObjectField(mSplitTransitions, "mPendingEnter") - XposedHelpers.getBooleanField(mPendingEnter, "mResizeAnim") // disable resizeAnim when entering SplitScreen XposedHelpers.setBooleanField(mPendingEnter, "mResizeAnim", false) } diff --git a/AlwaysAllowMultiInstanceSplit/src/main/res/values/arrays.xml b/SplitScreenMods/src/main/res/values/arrays.xml similarity index 100% rename from AlwaysAllowMultiInstanceSplit/src/main/res/values/arrays.xml rename to SplitScreenMods/src/main/res/values/arrays.xml diff --git a/SplitScreenMods/src/main/res/values/strings.xml b/SplitScreenMods/src/main/res/values/strings.xml new file mode 100644 index 0000000..c4d0117 --- /dev/null +++ b/SplitScreenMods/src/main/res/values/strings.xml @@ -0,0 +1,8 @@ + + + SplitScreenMods + + Collection of various SplitScreen modifications. + Enter settings to configure them. + + diff --git a/build-logic/convention/src/main/kotlin/Common.kt b/build-logic/convention/src/main/kotlin/Common.kt index 4fb9f09..b0d78b6 100644 --- a/build-logic/convention/src/main/kotlin/Common.kt +++ b/build-logic/convention/src/main/kotlin/Common.kt @@ -171,6 +171,7 @@ private class CommonAndroid : Plugin { disable += "ExpiredTargetSdkVersion" disable += "MissingApplicationIcon" disable += "MissingPermission" + disable += "ObsoleteSdkInt" disable += "OldTargetApi" disable += "PrivateApi" disable += "UnusedAttribute" diff --git a/metadata/com.programminghoch10.KeepSplitScreenRatio/en-US/full_description.txt b/metadata/com.programminghoch10.KeepSplitScreenRatio/en-US/full_description.txt deleted file mode 100644 index 52731c0..0000000 --- a/metadata/com.programminghoch10.KeepSplitScreenRatio/en-US/full_description.txt +++ /dev/null @@ -1,3 +0,0 @@ -Keep the split screen ratio, when switching one of the split apps. - -Only required on Android 14 and later, since previous versions did not force a split resize in this situation. diff --git a/metadata/com.programminghoch10.KeepSplitScreenRatio/en-US/short_description.txt b/metadata/com.programminghoch10.KeepSplitScreenRatio/en-US/short_description.txt deleted file mode 100644 index 0662932..0000000 --- a/metadata/com.programminghoch10.KeepSplitScreenRatio/en-US/short_description.txt +++ /dev/null @@ -1 +0,0 @@ -Keep the split screen ratio, when switching one of the split apps. diff --git a/metadata/com.programminghoch10.KeepSplitScreenRatio/en-US/title.txt b/metadata/com.programminghoch10.KeepSplitScreenRatio/en-US/title.txt deleted file mode 100644 index ef58b8a..0000000 --- a/metadata/com.programminghoch10.KeepSplitScreenRatio/en-US/title.txt +++ /dev/null @@ -1 +0,0 @@ -KeepSplitScreenRatio diff --git a/metadata/com.programminghoch10.SplitScreenMods/en-US/full_description.txt b/metadata/com.programminghoch10.SplitScreenMods/en-US/full_description.txt new file mode 100644 index 0000000..ac28712 --- /dev/null +++ b/metadata/com.programminghoch10.SplitScreenMods/en-US/full_description.txt @@ -0,0 +1,6 @@ +A collection of various SplitScreen modifications. + +* AlwaysAllowMultiInstanceSplit +* KeepSplitScreenRatio + +[Read the module's README on GitHub for explanations.](https://github.com/binarynoise/XposedModulets/blob/main/SplitScreenMods/README.md) diff --git a/metadata/de.binarynoise.AlwaysAllowMultiInstanceSplit/en-US/images/phoneScreenshots/1-screenshot.png b/metadata/com.programminghoch10.SplitScreenMods/en-US/images/phoneScreenshots/1-screenshot.png similarity index 100% rename from metadata/de.binarynoise.AlwaysAllowMultiInstanceSplit/en-US/images/phoneScreenshots/1-screenshot.png rename to metadata/com.programminghoch10.SplitScreenMods/en-US/images/phoneScreenshots/1-screenshot.png diff --git a/metadata/com.programminghoch10.SplitScreenMods/en-US/short_description.txt b/metadata/com.programminghoch10.SplitScreenMods/en-US/short_description.txt new file mode 100644 index 0000000..ee54b71 --- /dev/null +++ b/metadata/com.programminghoch10.SplitScreenMods/en-US/short_description.txt @@ -0,0 +1 @@ +A collection of various SplitScreen modifications. diff --git a/metadata/com.programminghoch10.SplitScreenMods/en-US/title.txt b/metadata/com.programminghoch10.SplitScreenMods/en-US/title.txt new file mode 100644 index 0000000..1b97486 --- /dev/null +++ b/metadata/com.programminghoch10.SplitScreenMods/en-US/title.txt @@ -0,0 +1 @@ +SplitScreenMods diff --git a/metadata/de.binarynoise.AlwaysAllowMultiInstanceSplit/en-US/full_description.txt b/metadata/de.binarynoise.AlwaysAllowMultiInstanceSplit/en-US/full_description.txt deleted file mode 100644 index 0a20e1b..0000000 --- a/metadata/de.binarynoise.AlwaysAllowMultiInstanceSplit/en-US/full_description.txt +++ /dev/null @@ -1,3 +0,0 @@ -Allow all apps to be launched twice side-by-side in a split screen. - -Undefined behaviour ahead! diff --git a/metadata/de.binarynoise.AlwaysAllowMultiInstanceSplit/en-US/short_description.txt b/metadata/de.binarynoise.AlwaysAllowMultiInstanceSplit/en-US/short_description.txt deleted file mode 100644 index 40ab737..0000000 --- a/metadata/de.binarynoise.AlwaysAllowMultiInstanceSplit/en-US/short_description.txt +++ /dev/null @@ -1 +0,0 @@ -Allow all apps to be launched twice in a split screen diff --git a/metadata/de.binarynoise.AlwaysAllowMultiInstanceSplit/en-US/title.txt b/metadata/de.binarynoise.AlwaysAllowMultiInstanceSplit/en-US/title.txt deleted file mode 100644 index 64d7a5b..0000000 --- a/metadata/de.binarynoise.AlwaysAllowMultiInstanceSplit/en-US/title.txt +++ /dev/null @@ -1 +0,0 @@ -AlwaysAllowMultiInstanceSplit diff --git a/modules.gradle.kts b/modules.gradle.kts index a3d053f..689e2ea 100644 --- a/modules.gradle.kts +++ b/modules.gradle.kts @@ -1,5 +1,4 @@ include(":AlwaysAllowChargingFeedback") -include(":AlwaysAllowMultiInstanceSplit") include(":AnimationScaleMod") include(":AntiBrightnessChange") include(":AutomaticAdvancedSettingsExpander") @@ -11,7 +10,6 @@ include(":DontResetIfBootedAndConnected") include(":EnableCallRecording") include(":FreeNotifications") include(":GalaxyWearable") -include(":KeepSplitScreenRatio") include(":MotionEventMod") include(":MuteSlf4jWarnings") include(":OpenWifiOnTop") @@ -20,5 +18,6 @@ include(":PreventAudioFocus") include(":ResetAllNotificationChannels") include(":RotationControl") include(":SensorMod") +include(":SplitScreenMods") include(":UpsideWifi") include(":VolumeStepsIncrease") From 91effe093cbf62e096081bb8206d1bf99f8ccac1 Mon Sep 17 00:00:00 2001 From: programminghoch10 <16062290+programminghoch10@users.noreply.github.com> Date: Wed, 12 Nov 2025 13:32:26 +0100 Subject: [PATCH 03/14] suppress lint WorldReadableFiles globally --- .../src/main/java/com/programminghoch10/CodecMod/CodecStore.java | 1 - .../com/programminghoch10/PreventAudioFocus/SettingsActivity.kt | 1 - .../com/programminghoch10/RotationControl/SettingsActivity.kt | 1 - .../java/com/programminghoch10/SensorMod/SettingsActivity.java | 1 - .../programminghoch10/VolumeStepsIncrease/SettingsActivity.kt | 1 - build-logic/convention/src/main/kotlin/Common.kt | 1 + 6 files changed, 1 insertion(+), 5 deletions(-) diff --git a/CodecMod/src/main/java/com/programminghoch10/CodecMod/CodecStore.java b/CodecMod/src/main/java/com/programminghoch10/CodecMod/CodecStore.java index 0b93df7..cc821b8 100644 --- a/CodecMod/src/main/java/com/programminghoch10/CodecMod/CodecStore.java +++ b/CodecMod/src/main/java/com/programminghoch10/CodecMod/CodecStore.java @@ -19,7 +19,6 @@ public class CodecStore { private final SharedPreferences sharedPreferences; private final List receivers = new LinkedList<>(); - @SuppressLint("WorldReadableFiles") CodecStore(Context context) { this.sharedPreferences = context.getSharedPreferences(PREFERENCES, MODE_WORLD_READABLE); } diff --git a/PreventAudioFocus/src/main/java/com/programminghoch10/PreventAudioFocus/SettingsActivity.kt b/PreventAudioFocus/src/main/java/com/programminghoch10/PreventAudioFocus/SettingsActivity.kt index 583206d..b4821ae 100644 --- a/PreventAudioFocus/src/main/java/com/programminghoch10/PreventAudioFocus/SettingsActivity.kt +++ b/PreventAudioFocus/src/main/java/com/programminghoch10/PreventAudioFocus/SettingsActivity.kt @@ -22,7 +22,6 @@ class SettingsActivity : FragmentActivity() { } class SettingsFragment : PreferenceFragmentCompat() { - @SuppressLint("WorldReadableFiles") override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { preferenceManager.sharedPreferencesName = SHARED_PREFERENCES_NAME preferenceManager.sharedPreferencesMode = MODE_WORLD_READABLE diff --git a/RotationControl/src/main/java/com/programminghoch10/RotationControl/SettingsActivity.kt b/RotationControl/src/main/java/com/programminghoch10/RotationControl/SettingsActivity.kt index 7c2d840..0769552 100644 --- a/RotationControl/src/main/java/com/programminghoch10/RotationControl/SettingsActivity.kt +++ b/RotationControl/src/main/java/com/programminghoch10/RotationControl/SettingsActivity.kt @@ -31,7 +31,6 @@ class SettingsActivity : FragmentActivity() { class SettingsFragment : PreferenceFragmentCompat() { val radioPreferences: MutableList = mutableListOf() - @SuppressLint("WorldReadableFiles") override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { preferenceManager.sharedPreferencesName = SHARED_PREFERENCES_NAME preferenceManager.sharedPreferencesMode = MODE_WORLD_READABLE diff --git a/SensorMod/src/main/java/com/programminghoch10/SensorMod/SettingsActivity.java b/SensorMod/src/main/java/com/programminghoch10/SensorMod/SettingsActivity.java index ac121ec..0cfb46d 100644 --- a/SensorMod/src/main/java/com/programminghoch10/SensorMod/SettingsActivity.java +++ b/SensorMod/src/main/java/com/programminghoch10/SensorMod/SettingsActivity.java @@ -32,7 +32,6 @@ protected void onCreate(Bundle savedInstanceState) { } public static class SettingsFragment extends PreferenceFragmentCompat { - @SuppressLint("WorldReadableFiles") @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { PreferenceManager preferenceManager = getPreferenceManager(); diff --git a/VolumeStepsIncrease/src/main/java/com/programminghoch10/VolumeStepsIncrease/SettingsActivity.kt b/VolumeStepsIncrease/src/main/java/com/programminghoch10/VolumeStepsIncrease/SettingsActivity.kt index d683375..efb50f6 100644 --- a/VolumeStepsIncrease/src/main/java/com/programminghoch10/VolumeStepsIncrease/SettingsActivity.kt +++ b/VolumeStepsIncrease/src/main/java/com/programminghoch10/VolumeStepsIncrease/SettingsActivity.kt @@ -34,7 +34,6 @@ class SettingsActivity : FragmentActivity() { } class SettingsFragment : PreferenceFragmentCompat() { - @SuppressLint("WorldReadableFiles") override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.root_preferences, rootKey) preferenceManager.sharedPreferencesName = SHARED_PREFERENCES_NAME diff --git a/build-logic/convention/src/main/kotlin/Common.kt b/build-logic/convention/src/main/kotlin/Common.kt index b0d78b6..2b6d13d 100644 --- a/build-logic/convention/src/main/kotlin/Common.kt +++ b/build-logic/convention/src/main/kotlin/Common.kt @@ -175,6 +175,7 @@ private class CommonAndroid : Plugin { disable += "OldTargetApi" disable += "PrivateApi" disable += "UnusedAttribute" + disable += "WorldReadableFiles" } compileOptions { From 4266aea44cd6bbf970402c99ee42223e3d287382 Mon Sep 17 00:00:00 2001 From: programminghoch10 <16062290+programminghoch10@users.noreply.github.com> Date: Wed, 12 Nov 2025 13:56:13 +0100 Subject: [PATCH 04/14] increase template xposedminversion to 93 at least 93 is required for new XSharedPreferences https://github.com/LSPosed/LSPosed/wiki/New-XSharedPreferences --- template/src/main/AndroidManifest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/template/src/main/AndroidManifest.xml b/template/src/main/AndroidManifest.xml index e4a2062..19a0c4f 100644 --- a/template/src/main/AndroidManifest.xml +++ b/template/src/main/AndroidManifest.xml @@ -13,7 +13,7 @@ /> Date: Wed, 12 Nov 2025 14:59:57 +0100 Subject: [PATCH 05/14] implement SplitScreenMods SettingsActivity --- .idea/codeStyles/Project.xml | 6 ++- SplitScreenMods/build.gradle.kts | 3 ++ SplitScreenMods/src/main/AndroidManifest.xml | 15 ++++++- .../AlwaysAllowMultiInstanceSplitHook.kt | 29 +++++++++--- .../KeepSplitScreenRatioHook.kt | 15 +++++-- .../SplitScreenMods/SettingsActivity.kt | 45 +++++++++++++++++++ .../src/main/res/layout/settings_activity.xml | 13 ++++++ .../src/main/res/values-v21/themes.xml | 6 +++ .../src/main/res/values/strings.xml | 12 ++++- .../src/main/res/values/themes.xml | 10 +++++ .../src/main/res/xml/root_preferences.xml | 20 +++++++++ 11 files changed, 160 insertions(+), 14 deletions(-) create mode 100644 SplitScreenMods/src/main/java/com/programminghoch10/SplitScreenMods/SettingsActivity.kt create mode 100644 SplitScreenMods/src/main/res/layout/settings_activity.xml create mode 100644 SplitScreenMods/src/main/res/values-v21/themes.xml create mode 100644 SplitScreenMods/src/main/res/values/themes.xml create mode 100644 SplitScreenMods/src/main/res/xml/root_preferences.xml diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml index 9969487..4d0cdf6 100644 --- a/.idea/codeStyles/Project.xml +++ b/.idea/codeStyles/Project.xml @@ -5,24 +5,26 @@