diff --git a/Manager/app/src/main/kotlin/com/meowarex/rlmobile/ui/screens/patchopts/KnownPatch.kt b/Manager/app/src/main/kotlin/com/meowarex/rlmobile/ui/screens/patchopts/KnownPatch.kt
index 95ae534..60d0eeb 100644
--- a/Manager/app/src/main/kotlin/com/meowarex/rlmobile/ui/screens/patchopts/KnownPatch.kt
+++ b/Manager/app/src/main/kotlin/com/meowarex/rlmobile/ui/screens/patchopts/KnownPatch.kt
@@ -77,6 +77,12 @@ enum class KnownPatch(
titleRes = R.string.patch_quality_badge_colors_title,
descRes = R.string.patch_quality_badge_colors_desc,
),
+ PlayerOneHanded(
+ order = 37,
+ fileNames = listOf("player-one-handed.patch"),
+ titleRes = R.string.patch_player_one_handed_title,
+ descRes = R.string.patch_player_one_handed_desc,
+ ),
CoverEverywhere(
order = 35,
fileNames = listOf(
diff --git a/Manager/app/src/main/kotlin/com/meowarex/rlmobile/ui/screens/patchopts/PatchOptions.kt b/Manager/app/src/main/kotlin/com/meowarex/rlmobile/ui/screens/patchopts/PatchOptions.kt
index e19df17..6a6de7f 100644
--- a/Manager/app/src/main/kotlin/com/meowarex/rlmobile/ui/screens/patchopts/PatchOptions.kt
+++ b/Manager/app/src/main/kotlin/com/meowarex/rlmobile/ui/screens/patchopts/PatchOptions.kt
@@ -42,6 +42,7 @@ data class PatchOptions(
val disabled = (
KnownPatch.DebugMenuUnlock.fileNames +
KnownPatch.EnableLegacyUi.fileNames +
+ KnownPatch.PlayerOneHanded.fileNames +
miniPlayerFiles
).toSet()
diff --git a/Manager/app/src/main/res/values/strings.xml b/Manager/app/src/main/res/values/strings.xml
index 6c4cdb5..abe8cef 100644
--- a/Manager/app/src/main/res/values/strings.xml
+++ b/Manager/app/src/main/res/values/strings.xml
@@ -270,6 +270,8 @@
Restores the legacy translucent backdrop blur behind the player.
Quality Badge Colors
Brings color back to the player quality badge.
+ One-Handed Mode
+ Mirrors the bottom player buttons left-to-right for easier one-handed reach.
Cover Everywhere - WIP
Applies the blurred backdrop to every Compose based page (Home & Collection)
Replace Share Button
diff --git a/patches/player-one-handed.patch b/patches/player-one-handed.patch
new file mode 100644
index 0000000..acfc2f5
--- /dev/null
+++ b/patches/player-one-handed.patch
@@ -0,0 +1,45 @@
+# rl-locals: com/tidal/android/feature/playerscreen/ui/PlayerScreenKt.smali e( 80
+--- a/com/tidal/android/feature/playerscreen/ui/PlayerScreenKt.smali
++++ b/com/tidal/android/feature/playerscreen/ui/PlayerScreenKt.smali
+@@ -5650,12 +5650,26 @@
+ invoke-static {v2, v15, v7, v9}, Lcom/aspiro/wamp/dynamicpages/ui/compose/f;->a(FLandroidx/compose/ui/Modifier$Companion;Landroidx/compose/runtime/Composer;I)V
+
+ const/4 v2, 0x0
+
+ const/4 v9, 0x0
+
++ invoke-static {}, Landroidx/compose/ui/platform/CompositionLocalsKt;->getLocalLayoutDirection()Landroidx/compose/runtime/ProvidableCompositionLocal; # layout-direction local
++
++ move-result-object v77 # the local
++
++ sget-object v78, Landroidx/compose/ui/unit/LayoutDirection;->Rtl:Landroidx/compose/ui/unit/LayoutDirection; # right-to-left value
++
++ invoke-virtual/range {v77 .. v78}, Landroidx/compose/runtime/ProvidableCompositionLocal;->provides(Ljava/lang/Object;)Landroidx/compose/runtime/ProvidedValue; # provide Rtl to local
++
++ move-result-object v77 # the provided value
++
++ move-object/from16 v76, v7 # composer
++
++ invoke-interface/range {v76 .. v77}, Landroidx/compose/runtime/Composer;->startProvider(Landroidx/compose/runtime/ProvidedValue;)V # open Rtl scope (mirror row)
++
+ .line 302
+ invoke-static {v15, v9, v1, v2}, Landroidx/compose/foundation/layout/SizeKt;->fillMaxWidth$default(Landroidx/compose/ui/Modifier;FILjava/lang/Object;)Landroidx/compose/ui/Modifier;
+
+ move-result-object v4
+
+ move/from16 v5, v58
+@@ -6001,12 +6015,14 @@
+
+ invoke-static {v13, v7, v2, v4}, Lcom/tidal/android/feature/playerscreen/ui/composables/m0;->a(ILandroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;Lyl0/a;)V
+
+ .line 343
+ invoke-interface {v7}, Landroidx/compose/runtime/Composer;->endNode()V
+
++ invoke-interface {v7}, Landroidx/compose/runtime/Composer;->endProvider()V # close Rtl scope (end mirror)
++
+ .line 344
+ invoke-static/range {v40 .. v40}, Landroidx/compose/ui/unit/Dp;->constructor-impl(F)F
+
+ move-result v20
+
+ const/16 v21, 0x7