Skip to content

Commit cfc4797

Browse files
backport snapping mods to U
1 parent 7612df8 commit cfc4797

File tree

7 files changed

+57
-14
lines changed

7 files changed

+57
-14
lines changed

SplitScreenMods/src/main/java/com/programminghoch10/SplitScreenMods/AdditionalSnapTargetsHook.kt

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import de.robv.android.xposed.callbacks.XC_InitPackageResources
1616
import de.robv.android.xposed.callbacks.XC_LoadPackage
1717

1818
object AdditionalSnapTargetsHookConfig {
19-
val enabled = SnapModeHookConfig.enabled && CustomFixedRatioHookConfig.enabled && Build.VERSION.SDK_INT >= Build.VERSION_CODES.BAKLAVA
19+
val enabled = SnapModeHookConfig.enabled && CustomFixedRatioHookConfig.enabled && Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE
2020
}
2121

2222
class AdditionalSnapTargetsHook : IXposedHookLoadPackage, IXposedHookInitPackageResources {
@@ -34,7 +34,22 @@ class AdditionalSnapTargetsHook : IXposedHookLoadPackage, IXposedHookInitPackage
3434

3535
val DividerSnapAlgorithmClass = XposedHelpers.findClass("com.android.wm.shell.common.split.DividerSnapAlgorithm", lpparam.classLoader)
3636
val SnapTargetClass = XposedHelpers.findClass(DividerSnapAlgorithmClass.name + "\$SnapTarget", lpparam.classLoader)
37-
val SnapTargetClassConstructor = XposedHelpers.findConstructorExact(SnapTargetClass, Int::class.java, Int::class.java)
37+
val SnapTargetClassConstructor = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) XposedHelpers.findConstructorExact(
38+
SnapTargetClass,
39+
Int::class.java,
40+
Int::class.java,
41+
)
42+
else XposedHelpers.findConstructorExact(
43+
SnapTargetClass,
44+
Int::class.java,
45+
Int::class.java,
46+
Int::class.java,
47+
)
48+
49+
fun createNewSnapTargetInstance(position: Int, snapPosition: Int): Any {
50+
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) SnapTargetClassConstructor.newInstance(position, snapPosition)
51+
else SnapTargetClassConstructor.newInstance(position, 0, snapPosition)
52+
}
3853

3954
XposedBridge.hookAllConstructors(DividerSnapAlgorithmClass, object : XC_MethodHook() {
4055
override fun afterHookedMethod(param: MethodHookParam) {
@@ -44,7 +59,11 @@ class AdditionalSnapTargetsHook : IXposedHookLoadPackage, IXposedHookInitPackage
4459
if (mTargets.isEmpty()) return
4560

4661
// reimplementation of inlined methods getStartInset() and getEndInset()
47-
val mIsLeftRightSplit = XposedHelpers.getBooleanField(param.thisObject, "mIsLeftRightSplit")
62+
val mIsLeftRightSplit = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) XposedHelpers.getBooleanField(
63+
param.thisObject,
64+
"mIsLeftRightSplit",
65+
)
66+
else XposedHelpers.getBooleanField(param.thisObject, "mIsHorizontalDivision")
4867
val mInsets = XposedHelpers.getObjectField(param.thisObject, "mInsets") as Rect
4968
val startInset = if (mIsLeftRightSplit) mInsets.left else mInsets.top
5069
val endInset = if (mIsLeftRightSplit) mInsets.right else mInsets.bottom
@@ -77,7 +96,7 @@ class AdditionalSnapTargetsHook : IXposedHookLoadPackage, IXposedHookInitPackage
7796
return
7897
}
7998
log("adding snap target ${snapTargetRatio} at $position of size $size")
80-
val snapTarget = SnapTargetClassConstructor.newInstance(position, snapPosition ?: SNAP_TO_NONE)
99+
val snapTarget = createNewSnapTargetInstance(position, snapPosition ?: SNAP_TO_NONE)
81100
mTargets.add(snapTarget)
82101
}
83102

@@ -91,6 +110,7 @@ class AdditionalSnapTargetsHook : IXposedHookLoadPackage, IXposedHookInitPackage
91110
}
92111

93112
fun getCalculateRatiosBasedOnAvailableSpace(res: Resources): Boolean {
113+
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) return false
94114
val mCalculateRatiosBasedOnAvailableSpaceId = res.getIdentifier("config_flexibleSplitRatios", "bool", "android")
95115
return res.getBoolean(mCalculateRatiosBasedOnAvailableSpaceId)
96116
}

SplitScreenMods/src/main/java/com/programminghoch10/SplitScreenMods/CalculateRatiosHook.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.programminghoch10.SplitScreenMods
22

3+
import android.os.Build
34
import com.programminghoch10.SplitScreenMods.BuildConfig.SHARED_PREFERENCES_NAME
45
import com.programminghoch10.SplitScreenMods.CalculateRatiosHookConfig.enabled
56
import de.binarynoise.logger.Logger.log
@@ -8,7 +9,7 @@ import de.robv.android.xposed.XSharedPreferences
89
import de.robv.android.xposed.callbacks.XC_InitPackageResources
910

1011
object CalculateRatiosHookConfig {
11-
val enabled = SnapModeHookConfig.enabled
12+
val enabled = SnapModeHookConfig.enabled && Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM
1213
}
1314

1415
class CalculateRatiosHook : IXposedHookInitPackageResources {

SplitScreenMods/src/main/java/com/programminghoch10/SplitScreenMods/FreeSnapHook.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.programminghoch10.SplitScreenMods
22

3-
import android.os.Build
43
import com.programminghoch10.SplitScreenMods.BuildConfig.SHARED_PREFERENCES_NAME
54
import com.programminghoch10.SplitScreenMods.FreeSnapHookConfig.enabled
65
import de.binarynoise.logger.Logger.log
@@ -13,7 +12,7 @@ import de.robv.android.xposed.callbacks.XC_LoadPackage
1312

1413
object FreeSnapHookConfig {
1514
@JvmField
16-
val enabled = Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE
15+
val enabled = SnapModeHookConfig.enabled
1716
}
1817

1918
class FreeSnapHook : IXposedHookLoadPackage {

SplitScreenMods/src/main/java/com/programminghoch10/SplitScreenMods/RemoveMinimalTaskSizeHook.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import de.robv.android.xposed.callbacks.XC_InitPackageResources
1212

1313
object RemoveMinimalTaskSizeHookConfig {
1414
@JvmField
15-
val enabled = Build.VERSION.SDK_INT >= Build.VERSION_CODES.BAKLAVA
15+
val enabled = Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE
1616
}
1717

1818
class RemoveMinimalTaskSizeHook : IXposedHookInitPackageResources {

SplitScreenMods/src/main/java/com/programminghoch10/SplitScreenMods/SettingsActivity.kt

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,21 @@ class SettingsActivity : FragmentActivity() {
5454
val isFixedRatioSnapMode = snapModePreference.value == SNAP_MODE.SNAP_FIXED_RATIO.key
5555
freeSnapPreference.setEnabledAndVisible(FreeSnapHookConfig.enabled && snapModePreference.isEnabled && !is1_1SnapMode)
5656
with(snapTargetsPreference) {
57-
setEnabledAndVisible(snapModePreference.isEnabled && isFixedRatioSnapMode)
58-
setEntries(if (freeSnapPreference.isChecked) R.array.FREE_SNAP_TARGET_TITLES else R.array.SNAP_TARGET_TITLES)
59-
setEntryValues(if (freeSnapPreference.isChecked) R.array.FREE_SNAP_TARGET_KEYS else R.array.SNAP_TARGET_KEYS)
57+
setEnabledAndVisible(snapModePreference.isEnabled && CustomFixedRatioHookConfig.enabled && isFixedRatioSnapMode)
58+
setEntries(
59+
when {
60+
!AdditionalSnapTargetsHookConfig.enabled -> R.array.CUSTOM_ONLY_SNAP_TARGET_TITLES
61+
freeSnapPreference.isChecked -> R.array.SINGLE_SNAP_TARGET_TITLES
62+
else -> R.array.SNAP_TARGET_TITLES
63+
}
64+
)
65+
setEntryValues(
66+
when {
67+
!AdditionalSnapTargetsHookConfig.enabled -> R.array.CUSTOM_ONLY_SNAP_TARGET_KEYS
68+
freeSnapPreference.isChecked -> R.array.SINGLE_SNAP_TARGET_KEYS
69+
else -> R.array.SNAP_TARGET_KEYS
70+
}
71+
)
6072
}
6173
customRatioPreference.setEnabledAndVisible(snapTargetsPreference.isEnabled && snapTargetsPreference.value == "CUSTOM")
6274
removeMinimalTaskSizePreference.setEnabledAndVisible(RemoveMinimalTaskSizeHookConfig.enabled && !is1_1SnapMode)

SplitScreenMods/src/main/java/com/programminghoch10/SplitScreenMods/SnapModeHook.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import de.robv.android.xposed.callbacks.XC_InitPackageResources
1010

1111
object SnapModeHookConfig {
1212
@JvmField
13-
val enabled = Build.VERSION.SDK_INT >= Build.VERSION_CODES.BAKLAVA
13+
val enabled = Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE
1414
}
1515

1616
class SnapModeHook : IXposedHookInitPackageResources {

SplitScreenMods/src/main/res/values/snaptargets.xml

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,28 @@
1818
<item>&#8531; &amp; &#188; &amp; &#8534;</item>
1919
</string-array>
2020

21-
<string-array name="FREE_SNAP_TARGET_KEYS"
21+
<string-array name="SINGLE_SNAP_TARGET_KEYS"
2222
translatable="false">
2323
<item>SYSTEM</item>
2424
<item>CUSTOM</item>
2525
<item>0.33</item>
2626
<item>0.25</item>
2727
</string-array>
28-
<string-array name="FREE_SNAP_TARGET_TITLES">
28+
<string-array name="SINGLE_SNAP_TARGET_TITLES">
2929
<item>System default</item>
3030
<item>Custom</item>
3131
<item>&#8531;</item>
3232
<item>&#188;</item>
3333
</string-array>
34+
35+
<string-array name="CUSTOM_ONLY_SNAP_TARGET_KEYS"
36+
translatable="false">
37+
<item>SYSTEM</item>
38+
<item>CUSTOM</item>
39+
</string-array>
40+
<string-array name="CUSTOM_ONLY_SNAP_TARGET_TITLES">
41+
<item>System default</item>
42+
<item>Custom</item>
43+
</string-array>
44+
3445
</resources>

0 commit comments

Comments
 (0)