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 7eb6fdc..17a863a 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
@@ -70,6 +70,12 @@ enum class KnownPatch(
titleRes = R.string.patch_player_backdrop_title,
descRes = R.string.patch_player_backdrop_desc,
),
+ QualityBadgeColors(
+ order = 31,
+ fileNames = listOf("quality-badge-colors.patch"),
+ titleRes = R.string.patch_quality_badge_colors_title,
+ descRes = R.string.patch_quality_badge_colors_desc,
+ ),
CoverEverywhere(
order = 35,
fileNames = listOf(
@@ -130,6 +136,7 @@ enum class KnownPatch(
LyricsRlApi,
LyricsKeepControlsVisible,
PlayerBackdrop,
+ QualityBadgeColors,
LyricsProgressPill,
CoverEverywhere,
),
diff --git a/Manager/app/src/main/res/values/strings.xml b/Manager/app/src/main/res/values/strings.xml
index 639a839..6c4cdb5 100644
--- a/Manager/app/src/main/res/values/strings.xml
+++ b/Manager/app/src/main/res/values/strings.xml
@@ -268,6 +268,8 @@
>Inverts the auto-hide behavior on the lyrics screen, playback controls stay visible by default and only hide when you tap them off.
Player Backdrop
Restores the legacy translucent backdrop blur behind the player.
+ Quality Badge Colors
+ Brings color back to the player quality badge.
Cover Everywhere - WIP
Applies the blurred backdrop to every Compose based page (Home & Collection)
Replace Share Button
diff --git a/patches/data.json b/patches/data.json
index dd5c6fe..ad121d9 100644
--- a/patches/data.json
+++ b/patches/data.json
@@ -1,5 +1,5 @@
{
"tidalVersionCode": 9090,
"tidalApkUrl": "https://github.com/meowarex/rl-mobile/releases/download/latest/tidal-stock.apk",
- "patchesVersion": "0.9.7"
+ "patchesVersion": "0.9.8"
}
diff --git a/patches/extension/radiant/QualityBadge.smali b/patches/extension/radiant/QualityBadge.smali
new file mode 100644
index 0000000..b0b2880
--- /dev/null
+++ b/patches/extension/radiant/QualityBadge.smali
@@ -0,0 +1,124 @@
+.class public final Lradiant/QualityBadge;
+.super Ljava/lang/Object;
+
+
+# direct methods
+.method private constructor ()V
+ .locals 0
+
+ invoke-direct {p0}, Ljava/lang/Object;->()V
+
+ return-void
+.end method
+
+# qualities : 0 = LOW / HIGH, 1 = LOSSLESS, 2 = HI_RES_LOSSLESS
+.method private static backgroundArgb(I)I
+ .locals 0
+
+ packed-switch p0, :quality_switch
+
+ const p0, 0x66475569 # LOW / HIGH bg
+ return p0
+
+ :lossless
+ const p0, 0x3306b6d4 # LOSSLESS bg
+ return p0
+
+ :hires
+ const p0, 0x40f59e0b # HI_RES_LOSSLESS bg
+ return p0
+
+ :quality_switch
+ .packed-switch 0x1
+ :lossless
+ :hires
+ .end packed-switch
+.end method
+
+.method private static textArgb(I)I
+ .locals 0
+
+ packed-switch p0, :quality_switch
+
+ const p0, -0x1d1710 # LOW / HIGH text
+ return p0
+
+ :lossless
+ const p0, -0x5a0c04 # LOSSLESS text
+ return p0
+
+ :hires
+ const p0, -0x21976 # HI_RES_LOSSLESS text
+ return p0
+
+ :quality_switch
+ .packed-switch 0x1
+ :lossless
+ :hires
+ .end packed-switch
+.end method
+
+
+.method public static modifier(Landroidx/compose/ui/Modifier;I)Landroidx/compose/ui/Modifier;
+ .locals 3
+
+ invoke-static {p1}, Lradiant/QualityBadge;->backgroundArgb(I)I
+
+ move-result p1
+ invoke-static {p1}, Landroidx/compose/ui/graphics/ColorKt;->Color(I)J
+ move-result-wide v0
+ const/high16 p1, 0x40800000 # 4.0f
+ invoke-static {p1}, Landroidx/compose/ui/unit/Dp;->constructor-impl(F)F
+ move-result p1
+ invoke-static {p1}, Landroidx/compose/foundation/shape/RoundedCornerShapeKt;->RoundedCornerShape-0680j_4(F)Landroidx/compose/foundation/shape/RoundedCornerShape;
+ move-result-object v2
+ invoke-static {p0, v0, v1, v2}, Landroidx/compose/foundation/BackgroundKt;->background-bw27NRU(Landroidx/compose/ui/Modifier;JLandroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier;
+ move-result-object p0
+ const/high16 p1, 0x40c00000 # 6.0f
+ invoke-static {p1}, Landroidx/compose/ui/unit/Dp;->constructor-impl(F)F
+ move-result p1
+ const/high16 v0, 0x40000000 # 2.0f
+ invoke-static {v0}, Landroidx/compose/ui/unit/Dp;->constructor-impl(F)F
+ move-result v0
+ invoke-static {p0, p1, v0}, Landroidx/compose/foundation/layout/PaddingKt;->padding-VpY3zN4(Landroidx/compose/ui/Modifier;FF)Landroidx/compose/ui/Modifier;
+ move-result-object p0
+ return-object p0
+.end method
+
+.method public static style(ILn20/e2;)Ln20/e2;
+ .registers 16
+
+ invoke-static {p0}, Lradiant/QualityBadge;->textArgb(I)I
+
+ move-result v0
+ new-instance v1, Lc20/a;
+ invoke-direct {v1, v0}, Lc20/a;->(I)V
+ new-instance v0, Lc20/d;
+ const/4 v2, 0x0
+ const/4 v3, 0x0
+ const/4 v4, 0x0
+ const/4 v5, 0x0
+ const/4 v6, 0x0
+ const/4 v7, 0x0
+ const/4 v8, 0x0
+ const/4 v9, 0x0
+ const/4 v10, 0x0
+ const/4 v11, 0x0
+ const/4 v12, 0x0
+ const/16 v13, 0xffe
+ const/4 v14, 0x0
+ invoke-direct/range {v0 .. v14}, Lc20/d;->(Lc20/a;Lc20/a;Lc20/a;Lc20/a;Lc20/a;Lc20/a;Lc20/a;Lc20/a;Lc20/a;Lc20/a;Lc20/a;Lc20/a;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
+
+ move-object v9, v0
+ move-object/from16 v0, p1
+ const/4 v1, 0x0
+ move-object v2, v9
+ const/4 v3, 0x0
+ const/4 v4, 0x0
+ const/4 v5, 0x0
+ const/16 v6, 0x1d
+ const/4 v7, 0x0
+ invoke-static/range {v0 .. v7}, Ln20/e2;->g(Ln20/e2;Ln20/u4;Lc20/d;Lcom/squareup/ui/market/core/text/MarketTextAlignment;Lcom/squareup/ui/market/core/text/MarketTextTransform;Ln20/t4;ILjava/lang/Object;)Ln20/e2;
+ move-result-object p0
+ return-object p0
+.end method
\ No newline at end of file
diff --git a/patches/quality-badge-colors.patch b/patches/quality-badge-colors.patch
new file mode 100644
index 0000000..7cdcb40
--- /dev/null
+++ b/patches/quality-badge-colors.patch
@@ -0,0 +1,116 @@
+--- a/com/tidal/android/feature/playerscreen/ui/composables/SeekbarAndTimeKt.smali
++++ b/com/tidal/android/feature/playerscreen/ui/composables/SeekbarAndTimeKt.smali
+@@ -372,6 +372,10 @@
+ .line 158
+ sget v4, Lcom/tidal/android/feature/playerscreen/ui/composables/o4;->g:F
+
++ const/high16 v11, 0x40000000 # 2.0f
++
++ mul-float/2addr v4, v11 # scale atmos icon 2x as it is too small in stock app
++
+ .line 159
+ .line 160
+ invoke-static {v2, v4}, Landroidx/compose/foundation/layout/SizeKt;->height-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier;
+@@ -461,6 +465,8 @@
+ .line 200
+ check-cast v3, Lcom/tidal/android/feature/playerscreen/ui/i$a;
+
++ iget v13, v3, Lcom/tidal/android/feature/playerscreen/ui/i$a;->b:I
++
+ .line 201
+ .line 202
+ iget-object v3, v3, Lcom/tidal/android/feature/playerscreen/ui/i$a;->a:Ljava/lang/String;
+@@ -481,6 +487,16 @@
+ .line 210
+ move-object v1, v3
+
++ invoke-static {v2, v13}, Lradiant/QualityBadge;->modifier(Landroidx/compose/ui/Modifier;I)Landroidx/compose/ui/Modifier;
++
++ move-result-object v2
++
++ move-object/from16 v3, p1
++
++ invoke-static {v13, v3}, Lradiant/QualityBadge;->style(ILn20/e2;)Ln20/e2;
++
++ move-result-object v8
++
+ .line 211
+ const/4 v3, 0x0
+
+--- a/com/tidal/android/feature/playerscreen/ui/i$a.smali
++++ b/com/tidal/android/feature/playerscreen/ui/i$a.smali
+@@ -21,9 +21,21 @@
+ # instance fields
+ .field public final a:Ljava/lang/String;
+
++.field public final b:I
++
+
+ # direct methods
+ .method public constructor (Ljava/lang/String;)V
++ .locals 1
++
++ const/4 v0, 0x0
++
++ invoke-direct {p0, p1, v0}, Lcom/tidal/android/feature/playerscreen/ui/i$a;->(Ljava/lang/String;I)V
++
++ return-void
++.end method
++
++.method public constructor (Ljava/lang/String;I)V
+ .locals 0
+
+ .line 1
+@@ -34,6 +46,8 @@
+ .line 4
+ iput-object p1, p0, Lcom/tidal/android/feature/playerscreen/ui/i$a;->a:Ljava/lang/String;
+
++ iput p2, p0, Lcom/tidal/android/feature/playerscreen/ui/i$a;->b:I
++
+ .line 5
+ .line 6
+ return-void
+--- a/com/tidal/android/feature/playerscreen/ui/PlayerViewModel$special$$inlined$mapNotNull$1$2.smali
++++ b/com/tidal/android/feature/playerscreen/ui/PlayerViewModel$special$$inlined$mapNotNull$1$2.smali
+@@ -1356,6 +1356,14 @@
+ .line 617
+- move-result v10
++ move-result v10 # isCurrentStreamHiResLosslessQuality() result
+
++ const/16 v31, 0x0 # LOW / HIGH quality
++
++ if-eqz v10, :radiant_qbc_not_hires
++
++ const/16 v31, 0x2 # HI_RES_LOSSLESS quality
++
++ :radiant_qbc_not_hires
++
+ .line 618
+ if-nez v10, :cond_19
+
+@@ -1368,6 +1376,12 @@
+ .line 623
+- move-result v10
++ move-result v10 # isCurrentStreamLossless() result
+
++ if-eqz v10, :radiant_qbc_not_lossless
++
++ const/16 v31, 0x1 # LOSSLESS quality
++
++ :radiant_qbc_not_lossless
++
+ .line 624
+ if-eqz v10, :cond_18
+
+@@ -1695,7 +1709,10 @@
+
+ .line 771
+ .line 772
+- invoke-direct {v8, v5}, Lcom/tidal/android/feature/playerscreen/ui/i$a;->(Ljava/lang/String;)V
++ move/from16 v10, v31 # quality
++
++ invoke-direct {v8, v5, v10}, Lcom/tidal/android/feature/playerscreen/ui/i$a;->(Ljava/lang/String;I)V
++
+
+ .line 773
+ .line 774