Skip to content

Commit da46604

Browse files
backport snapping mods to U
1 parent 4508b27 commit da46604

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
@@ -24,7 +24,7 @@ const val SNAP_TO_START_AND_DISMISS = 11
2424
const val SNAP_TO_END_AND_DISMISS = 12
2525

2626
object AdditionalSnapTargetsHookConfig {
27-
val enabled = SnapModeHookConfig.enabled && CustomFixedRatioHookConfig.enabled && Build.VERSION.SDK_INT >= Build.VERSION_CODES.BAKLAVA
27+
val enabled = SnapModeHookConfig.enabled && CustomFixedRatioHookConfig.enabled && Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE
2828
}
2929

3030
class AdditionalSnapTargetsHook : IXposedHookLoadPackage, IXposedHookInitPackageResources {
@@ -42,7 +42,22 @@ class AdditionalSnapTargetsHook : IXposedHookLoadPackage, IXposedHookInitPackage
4242

4343
val DividerSnapAlgorithmClass = XposedHelpers.findClass("com.android.wm.shell.common.split.DividerSnapAlgorithm", lpparam.classLoader)
4444
val SnapTargetClass = XposedHelpers.findClass(DividerSnapAlgorithmClass.name + "\$SnapTarget", lpparam.classLoader)
45-
val SnapTargetClassConstructor = XposedHelpers.findConstructorExact(SnapTargetClass, Int::class.java, Int::class.java)
45+
val SnapTargetClassConstructor = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) XposedHelpers.findConstructorExact(
46+
SnapTargetClass,
47+
Int::class.java,
48+
Int::class.java,
49+
)
50+
else XposedHelpers.findConstructorExact(
51+
SnapTargetClass,
52+
Int::class.java,
53+
Int::class.java,
54+
Int::class.java,
55+
)
56+
57+
fun createNewSnapTargetInstance(position: Int, snapPosition: Int): Any {
58+
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) SnapTargetClassConstructor.newInstance(position, snapPosition)
59+
else SnapTargetClassConstructor.newInstance(position, 0, snapPosition)
60+
}
4661

4762
XposedBridge.hookAllConstructors(DividerSnapAlgorithmClass, object : XC_MethodHook() {
4863
override fun afterHookedMethod(param: MethodHookParam) {
@@ -52,7 +67,11 @@ class AdditionalSnapTargetsHook : IXposedHookLoadPackage, IXposedHookInitPackage
5267
if (mTargets.isEmpty()) return
5368

5469
// reimplementation of inlined methods getStartInset() and getEndInset()
55-
val mIsLeftRightSplit = XposedHelpers.getBooleanField(param.thisObject, "mIsLeftRightSplit")
70+
val mIsLeftRightSplit = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) XposedHelpers.getBooleanField(
71+
param.thisObject,
72+
"mIsLeftRightSplit"
73+
)
74+
else XposedHelpers.getBooleanField(param.thisObject, "mIsHorizontalDivision")
5675
val mInsets = XposedHelpers.getObjectField(param.thisObject, "mInsets") as Rect
5776
val startInset = if (mIsLeftRightSplit) mInsets.left else mInsets.top
5877
val endInset = if (mIsLeftRightSplit) mInsets.right else mInsets.bottom
@@ -85,7 +104,7 @@ class AdditionalSnapTargetsHook : IXposedHookLoadPackage, IXposedHookInitPackage
85104
return
86105
}
87106
log("adding snap target ${snapTargetRatio} at $position of size $size")
88-
val snapTarget = SnapTargetClassConstructor.newInstance(position, snapPosition ?: SNAP_TO_NONE)
107+
val snapTarget = createNewSnapTargetInstance(position, snapPosition ?: SNAP_TO_NONE)
89108
mTargets.add(snapTarget)
90109
}
91110

@@ -99,6 +118,7 @@ class AdditionalSnapTargetsHook : IXposedHookLoadPackage, IXposedHookInitPackage
99118
}
100119

101120
fun getCalculateRatiosBasedOnAvailableSpace(res: Resources): Boolean {
121+
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) return false
102122
val mCalculateRatiosBasedOnAvailableSpaceId = res.getIdentifier("config_flexibleSplitRatios", "bool", "android")
103123
return res.getBoolean(mCalculateRatiosBasedOnAvailableSpaceId)
104124
}

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)