diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 1ca9d7d..f647357 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -60,7 +60,7 @@ jobs:
if [[ "$tidal_src" == *.apkm ]]; then
echo "Merging splits from $tidal_src via APKEditor"
curl --fail --location --retry 3 --retry-delay 2 -sSo /tmp/APKEditor.jar \
- https://github.com/REAndroid/APKEditor/releases/download/V1.4.3/APKEditor-1.4.3.jar
+ https://github.com/REAndroid/APKEditor/releases/download/V1.4.9/APKEditor-1.4.9.jar
java -jar /tmp/APKEditor.jar m -i "$tidal_src" -o ./dist/tidal-stock.apk
echo "Merged tidal-stock.apk:"
ls -la ./dist/tidal-stock.apk
diff --git a/Manager/app/src/main/res/values/strings.xml b/Manager/app/src/main/res/values/strings.xml
index 17a6a84..5fbbd1a 100644
--- a/Manager/app/src/main/res/values/strings.xml
+++ b/Manager/app/src/main/res/values/strings.xml
@@ -138,6 +138,11 @@
%s contributions
Failed to load
+ Metered network
+ It appears you are connected to mobile data or a potentially metered network. Continuing with the installation may result in several hundred megabytes being downloaded. Are you sure you want to continue?
+ Don\'t show this again
None
Stable
@@ -310,7 +315,7 @@
Open Play Protect
Don\'t show this again
- Fun Fact: %s
+ %s
Did you know that TIDAL no longer like blur!
Radiant Lyrics is also available for DESKTOP!!!
i am in your walls!
diff --git a/patches/data.json b/patches/data.json
index bee144d..13a898f 100644
--- a/patches/data.json
+++ b/patches/data.json
@@ -1,5 +1,5 @@
{
- "tidalVersionCode": 9089,
+ "tidalVersionCode": 9090,
"tidalApkUrl": "https://github.com/meowarex/rl-mobile/releases/download/latest/tidal-stock.apk",
- "patchesVersion": "0.6.0"
+ "patchesVersion": "0.7.6"
}
diff --git a/patches/debug-menu-unlock.patch b/patches/debug-menu-unlock.patch
index 63f57ab..80e3898 100644
--- a/patches/debug-menu-unlock.patch
+++ b/patches/debug-menu-unlock.patch
@@ -1,43 +1,36 @@
--- a/com/tidal/android/core/debug/DebugFeatureInteractorDefault.smali
+++ b/com/tidal/android/core/debug/DebugFeatureInteractorDefault.smali
-@@ -53,6 +53,11 @@
+@@ -54,6 +54,9 @@
.method public final a()Z
.locals 2
-+ # rl-debug-unlock: force a() to always return true, bypassing the
-+ # "debug-menu" feature flag check that normally hides the Settings entry.
-+ const/4 v0, 0x1
-+ return v0
++ const/4 v0, 0x1 # force true
++ return v0 # bypass debug flag
+
.line 1
iget-object v0, p0, Lcom/tidal/android/core/debug/DebugFeatureInteractorDefault;->a:Lcom/tidal/android/featureflags/l;
-@@ -97,6 +102,14 @@
+@@ -98,6 +101,14 @@
}
.end annotation
-+ # rl-debug-unlock: short-circuit b() to always emit MutableStateFlow(TRUE).
-+ # Mirrors the original ":cond_1 :goto_0" path the app uses for internal/test builds.
-+ sget-object v0, Ljava/lang/Boolean;->TRUE:Ljava/lang/Boolean;
++ sget-object v0, Ljava/lang/Boolean;->TRUE:Ljava/lang/Boolean; # always-true value
+
-+ invoke-static {v0}, Lkotlinx/coroutines/flow/StateFlowKt;->MutableStateFlow(Ljava/lang/Object;)Lkotlinx/coroutines/flow/MutableStateFlow;
++ invoke-static {v0}, Lkotlinx/coroutines/flow/StateFlowKt;->MutableStateFlow(Ljava/lang/Object;)Lkotlinx/coroutines/flow/MutableStateFlow; # wrap in flow
+
-+ move-result-object v0
++ move-result-object v0 # the flow
+
-+ return-object v0
++ return-object v0 # short-circuit b()
+
.line 1
- sget-object v0, Lh50/a;->a:Ljava/lang/String;
+ sget-object v0, Lj50/a;->a:Ljava/lang/String;
-@@ -261,6 +274,11 @@
+@@ -261,5 +272,8 @@
.method public final c()Z
.locals 3
-+ # rl-debug-unlock: force c() to always return true, bypassing the
-+ # applicationId-substring / in-app-bug-reports / export-logs flag checks.
-+ const/4 v0, 0x1
-+ return v0
++ const/4 v0, 0x1 # force true
++ return v0 # bypass debug flag
+
.line 1
- sget-object v0, Lh50/a;->a:Ljava/lang/String;
-
+ sget-object v0, Lj50/a;->a:Ljava/lang/String;
diff --git a/patches/enable-legacy-ui.patch b/patches/enable-legacy-ui.patch
index aa9d04c..de2d202 100644
--- a/patches/enable-legacy-ui.patch
+++ b/patches/enable-legacy-ui.patch
@@ -1,7 +1,7 @@
---- a/ig/d.smali
-+++ b/ig/d.smali
+--- a/kg/e.smali
++++ b/kg/e.smali
@@ -26,8 +26,8 @@
- new-instance v0, Lig/d;
+ new-instance v0, Lkg/e;
.line 2
.line 3
diff --git a/patches/extension/radiant/NoOp.smali b/patches/extension/radiant/NoOp.smali
index 3228036..fbdd779 100644
--- a/patches/extension/radiant/NoOp.smali
+++ b/patches/extension/radiant/NoOp.smali
@@ -1,6 +1,6 @@
.class public final Lradiant/NoOp;
.super Ljava/lang/Object;
-.implements Ltl0/a;
+.implements Lyl0/a;
# static fields
diff --git a/patches/extension/radiant/SparkleButton.smali b/patches/extension/radiant/SparkleButton.smali
index 74e6eaa..f53c1f9 100644
--- a/patches/extension/radiant/SparkleButton.smali
+++ b/patches/extension/radiant/SparkleButton.smali
@@ -4,7 +4,7 @@
# direct methods
-.method public static final a(ILandroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;Ltl0/a;)V
+.method public static final a(ILandroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;Lyl0/a;)V
.locals 21
.annotation build Landroidx/compose/runtime/Composable;
.end annotation
@@ -98,7 +98,7 @@
const/4 v4, 0x6
- invoke-static {v2, v11, v4}, Lcom/squareup/ui/market/core/theme/w;->t(Lcom/squareup/ui/market/core/theme/k$a;Landroidx/compose/runtime/Composer;I)Lcom/squareup/ui/market/core/theme/MarketStylesheet;
+ invoke-static {v2, v11, v4}, Lcom/squareup/ui/market/core/theme/x;->t(Lcom/squareup/ui/market/core/theme/k$a;Landroidx/compose/runtime/Composer;I)Lcom/squareup/ui/market/core/theme/MarketStylesheet;
move-result-object v15
@@ -131,7 +131,7 @@
const/16 v18, 0x0
- invoke-static/range {v15 .. v20}, Lcom/squareup/ui/market/components/MarketIconButtonKt;->P(Lcom/squareup/ui/market/core/theme/MarketStylesheet;Lcom/squareup/ui/market/core/components/properties/IconButton$Size;Lcom/squareup/ui/market/core/components/properties/IconButton$Rank;Lcom/squareup/ui/market/core/components/properties/IconButton$Variant;ILjava/lang/Object;)Ll20/v1;
+ invoke-static/range {v15 .. v20}, Lcom/squareup/ui/market/components/MarketIconButtonKt;->P(Lcom/squareup/ui/market/core/theme/MarketStylesheet;Lcom/squareup/ui/market/core/components/properties/IconButton$Size;Lcom/squareup/ui/market/core/components/properties/IconButton$Rank;Lcom/squareup/ui/market/core/components/properties/IconButton$Variant;ILjava/lang/Object;)Ln20/w1;
move-result-object v4
@@ -140,7 +140,7 @@
:cond_5
move-object v9, v4
- check-cast v9, Ll20/v1;
+ check-cast v9, Ln20/w1;
sget v2, Lcom/tidal/android/feature/playerscreen/ui/R$string;->lyrics:I
@@ -172,7 +172,7 @@
const/4 v8, 0x0
- invoke-static/range {v1 .. v13}, Lcom/squareup/ui/market/components/MarketIconButtonKt;->c(Ltl0/a;Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLcom/squareup/ui/market/components/n;Ltl0/a;Ljava/lang/String;Ll20/v1;Ltl0/p;Landroidx/compose/runtime/Composer;II)V
+ invoke-static/range {v1 .. v13}, Lcom/squareup/ui/market/components/MarketIconButtonKt;->c(Lyl0/a;Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLcom/squareup/ui/market/components/n;Lyl0/a;Ljava/lang/String;Ln20/w1;Lyl0/p;Landroidx/compose/runtime/Composer;II)V
invoke-static {}, Landroidx/compose/runtime/ComposerKt;->isTraceInProgress()Z
diff --git a/patches/extension/radiant/SparkleContent.smali b/patches/extension/radiant/SparkleContent.smali
index 23c6330..3284dfb 100644
--- a/patches/extension/radiant/SparkleContent.smali
+++ b/patches/extension/radiant/SparkleContent.smali
@@ -3,7 +3,7 @@
.source "SourceFile"
# interfaces
-.implements Ltl0/p;
+.implements Lyl0/p;
# virtual methods
diff --git a/patches/extension/radiant/SpvFactory.smali b/patches/extension/radiant/SpvFactory.smali
index 9339c6d..59e9f4d 100644
--- a/patches/extension/radiant/SpvFactory.smali
+++ b/patches/extension/radiant/SpvFactory.smali
@@ -1,6 +1,6 @@
.class public final Lradiant/SpvFactory;
.super Ljava/lang/Object;
-.implements Ltl0/l;
+.implements Lyl0/l;
# static fields
diff --git a/patches/lyrics-disable-cover.patch b/patches/lyrics-disable-cover.patch
index 81b64fe..148fd9a 100644
--- a/patches/lyrics-disable-cover.patch
+++ b/patches/lyrics-disable-cover.patch
@@ -1,26 +1,26 @@
---- a/com/tidal/android/feature/playerscreen/ui/g0.smali
-+++ b/com/tidal/android/feature/playerscreen/ui/g0.smali
-@@ -666,8 +666,23 @@
+--- a/com/tidal/android/feature/playerscreen/ui/h0.smali
++++ b/com/tidal/android/feature/playerscreen/ui/h0.smali
+@@ -669,8 +669,23 @@
move-object v5, v1
-
- .line 288
+
+ .line 289
+ const v1, 0x52414443 # group key
+
+ invoke-interface {v7, v1}, Landroidx/compose/runtime/Composer;->startReplaceGroup(I)V # open group around the cover
+
-+ iget-object v1, v0, Lcom/tidal/android/feature/playerscreen/ui/g0;->b:Lcom/tidal/android/feature/playerscreen/ui/r$a; # player state
++ iget-object v1, v0, Lcom/tidal/android/feature/playerscreen/ui/h0;->b:Lcom/tidal/android/feature/playerscreen/ui/r$a; # player state
+
+ iget-object v1, v1, Lcom/tidal/android/feature/playerscreen/ui/r$a;->j:Lcom/tidal/android/feature/playerscreen/ui/g; # current view mode
+
-+ instance-of v1, v1, Lcom/tidal/android/feature/playerscreen/ui/g$a; # only render when on cover mode
++ instance-of v1, v1, Lcom/tidal/android/feature/playerscreen/ui/g$a; # cover mode only
+
+ if-eqz v1, :radiant_after_cover # lyrics/credits mode -> skip cover
+
- invoke-static/range {v2 .. v9}, Lcom/tidal/android/feature/playerscreen/ui/composables/CoverPagerKt;->c(Lcom/tidal/android/feature/playerscreen/ui/d;Ltl0/l;FLandroidx/compose/ui/Modifier;ZLandroidx/compose/runtime/Composer;II)V
+ invoke-static/range {v2 .. v9}, Lcom/tidal/android/feature/playerscreen/ui/composables/CoverPagerKt;->c(Lcom/tidal/android/feature/playerscreen/ui/d;Lyl0/l;FLandroidx/compose/ui/Modifier;ZLandroidx/compose/runtime/Composer;II)V
-+ :radiant_after_cover
++ :radiant_after_cover # skip target
+ invoke-interface {v7}, Landroidx/compose/runtime/Composer;->endReplaceGroup()V # close group
+
- .line 289
.line 290
.line 291
+ .line 292
diff --git a/patches/lyrics-fade-region.patch b/patches/lyrics-fade-region.patch
index 94d01a3..f9967ea 100644
--- a/patches/lyrics-fade-region.patch
+++ b/patches/lyrics-fade-region.patch
@@ -1,11 +1,11 @@
---- a/com/tidal/android/feature/playerscreen/ui/composables/k1.smali
-+++ b/com/tidal/android/feature/playerscreen/ui/composables/k1.smali
+--- a/com/tidal/android/feature/playerscreen/ui/composables/o1.smali
++++ b/com/tidal/android/feature/playerscreen/ui/composables/o1.smali
@@ -64,26 +64,29 @@
.line 16
.line 17
-- iget v2, p0, Lcom/tidal/android/feature/playerscreen/ui/composables/k1;->a:F
-+ const/high16 v2, 0x43200000 # 160f startDp — alpha clamps to 0 above this, hiding lyrics under the pill
+- iget v2, p0, Lcom/tidal/android/feature/playerscreen/ui/composables/o1;->a:F
++ const/high16 v2, 0x43200000 # 160f start dp
.line 18
.line 19
@@ -17,9 +17,9 @@
- move-result v3
+ move-result v2 # startY in px
+
-+ const/high16 v3, 0x435c0000 # 220f endDp — 60dp transition, alpha clamps to 1 below this
++ const/high16 v3, 0x435c0000 # 220f end dp
+
-+ invoke-interface {p1, v3}, Landroidx/compose/ui/unit/Density;->toPx-0680j_4(F)F
++ invoke-interface {p1, v3}, Landroidx/compose/ui/unit/Density;->toPx-0680j_4(F)F # dp to px
+
+ move-result v3 # endY in px
diff --git a/patches/lyrics-progress-pill.patch b/patches/lyrics-progress-pill.patch
index 8d6431f..e99cb68 100644
--- a/patches/lyrics-progress-pill.patch
+++ b/patches/lyrics-progress-pill.patch
@@ -1,6 +1,6 @@
---- a/com/tidal/android/feature/playerscreen/ui/b0.smali
-+++ b/com/tidal/android/feature/playerscreen/ui/b0.smali
-@@ -45,7 +45,7 @@
+--- a/com/tidal/android/feature/playerscreen/ui/c0.smali
++++ b/com/tidal/android/feature/playerscreen/ui/c0.smali
+@@ -47,7 +47,7 @@
# virtual methods
.method public final invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
@@ -9,9 +9,9 @@
.line 1
move-object/from16 v0, p0
-@@ -460,6 +460,64 @@
+@@ -461,6 +461,64 @@
.line 200
- invoke-static/range {v2 .. v9}, Lcom/tidal/android/feature/playerscreen/ui/composables/LyricsKt;->a(Lcom/tidal/android/feature/playerscreen/ui/g;Ltl0/l;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/PaddingValues;Ltl0/l;Landroidx/compose/runtime/Composer;II)V
+ invoke-static/range {v2 .. v9}, Lcom/tidal/android/feature/playerscreen/ui/composables/LyricsKt;->a(Lcom/tidal/android/feature/playerscreen/ui/g;Lyl0/l;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/PaddingValues;Lyl0/l;Landroidx/compose/runtime/Composer;II)V
+ sget-object v17, Lradiant/SpvFactory;->a:Lradiant/SpvFactory; # progress view factory
+
@@ -29,7 +29,7 @@
+
+ const/16 v24, 0x0 # synthetic null
+
-+ invoke-static/range {v18 .. v24}, Landroidx/compose/foundation/ClickableKt;->clickable-XHw0xAI$default(Landroidx/compose/ui/Modifier;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Ltl0/a;ILjava/lang/Object;)Landroidx/compose/ui/Modifier; # apply clickable
++ invoke-static/range {v18 .. v24}, Landroidx/compose/foundation/ClickableKt;->clickable-XHw0xAI$default(Landroidx/compose/ui/Modifier;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lyl0/a;ILjava/lang/Object;)Landroidx/compose/ui/Modifier; # apply clickable
+
+ move-result-object v23 # clickable modifier
+
@@ -69,7 +69,7 @@
+
+ const/16 v22, 0x4 # default mask
+
-+ invoke-static/range {v17 .. v22}, Landroidx/compose/ui/viewinterop/AndroidView_androidKt;->AndroidView(Ltl0/l;Landroidx/compose/ui/Modifier;Ltl0/l;Landroidx/compose/runtime/Composer;II)V # mount progress pill
++ invoke-static/range {v17 .. v22}, Landroidx/compose/ui/viewinterop/AndroidView_androidKt;->AndroidView(Lyl0/l;Landroidx/compose/ui/Modifier;Lyl0/l;Landroidx/compose/runtime/Composer;II)V # mount progress pill
+
.line 201
.line 202
diff --git a/patches/lyrics-replace-lyrics-button.patch b/patches/lyrics-replace-lyrics-button.patch
index 408fb5f..7107f90 100644
--- a/patches/lyrics-replace-lyrics-button.patch
+++ b/patches/lyrics-replace-lyrics-button.patch
@@ -1,11 +1,11 @@
# rl-locals: com/tidal/android/feature/playerscreen/ui/PlayerScreenKt.smali e( 79
--- a/com/tidal/android/feature/playerscreen/ui/PlayerScreenKt.smali
+++ b/com/tidal/android/feature/playerscreen/ui/PlayerScreenKt.smali
-@@ -4931,7 +4931,11 @@
- const/4 v10, 0x0
+@@ -4945,7 +4945,11 @@
+ const/4 v7, 0x0
.line 226
-- invoke-static {v10, v9, v4, v2, v7}, Lcom/tidal/android/feature/playerscreen/ui/composables/h1;->a(Landroidx/compose/ui/Modifier;Ltl0/a;ZLandroidx/compose/runtime/Composer;I)V
+- invoke-static {v7, v9, v4, v2, v10}, Lcom/tidal/android/feature/playerscreen/ui/composables/k1;->a(Landroidx/compose/ui/Modifier;Lyl0/a;ZLandroidx/compose/runtime/Composer;I)V
+ const v10, 0x52414448 # empty group key
+
+ invoke-interface {v2, v10}, Landroidx/compose/runtime/Composer;->startReplaceGroup(I)V # open empty
@@ -14,21 +14,21 @@
.line 227
invoke-interface {v2}, Landroidx/compose/runtime/Composer;->endReplaceGroup()V
-@@ -5838,6 +5838,22 @@
+@@ -5720,6 +5724,22 @@
:cond_51
- check-cast v4, Ltl0/a;
+ check-cast v4, Lyl0/a;
const/4 v2, 0x0
- invoke-static {v13, v7, v2, v4}, Lcom/tidal/android/feature/playerscreen/ui/composables/h3;->a(ILandroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;Ltl0/a;)V
+ invoke-static {v13, v7, v2, v4}, Lcom/tidal/android/feature/playerscreen/ui/composables/l3;->a(ILandroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;Lyl0/a;)V
+
-+ new-instance v74, Lc8/j; # lyrics-toggle lambda
++ new-instance v74, Lcom/tidal/android/feature/playerscreen/ui/g0; # lyrics toggle lambda
+
-+ move-object/from16 v75, p5 # lambda receiver
++ move-object/from16 v75, p5 # action dispatcher
+
-+ const/16 v76, 0x1 # lyrics action
++ const/16 v76, 0x0 # lyrics action disc
+
-+ invoke-direct/range {v74 .. v76}, Lc8/j;->(Ljava/lang/Object;I)V # build lambda
++ invoke-direct/range {v74 .. v76}, Lcom/tidal/android/feature/playerscreen/ui/g0;->(Ljava/lang/Object;I)V # build lambda
+
+ const/16 v71, 0x0 # changed flags
+
@@ -36,4 +36,4 @@
+
+ const/16 v73, 0x0 # null modifier
+
-+ invoke-static/range {v71 .. v74}, Lradiant/SparkleButton;->a(ILandroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;Ltl0/a;)V # render sparkle button
++ invoke-static/range {v71 .. v74}, Lradiant/SparkleButton;->a(ILandroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;Lyl0/a;)V # render sparkle button
diff --git a/patches/lyrics-replace-share-button.patch b/patches/lyrics-replace-share-button.patch
index 942320d..85723ca 100644
--- a/patches/lyrics-replace-share-button.patch
+++ b/patches/lyrics-replace-share-button.patch
@@ -1,10 +1,10 @@
--- a/com/tidal/android/feature/playerscreen/ui/PlayerScreenKt.smali
+++ b/com/tidal/android/feature/playerscreen/ui/PlayerScreenKt.smali
-@@ -5086,7 +5086,11 @@
+@@ -5094,7 +5094,11 @@
const/4 v13, 0x0
.line 247
-- invoke-static {v9, v0, v13, v2, v10}, Lcom/tidal/android/feature/playerscreen/ui/composables/BroadcastButtonKt;->b(Lcom/tidal/android/feature/playerscreen/ui/b;Ltl0/a;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V
+- invoke-static {v9, v0, v10, v2, v13}, Lcom/tidal/android/feature/playerscreen/ui/composables/BroadcastButtonKt;->b(Lcom/tidal/android/feature/playerscreen/ui/b;Lyl0/a;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V
+ const v9, 0x52414244 # empty group key
+
+ invoke-interface {v2, v9}, Landroidx/compose/runtime/Composer;->startReplaceGroup(I)V # open empty
@@ -13,39 +13,38 @@
.line 248
invoke-interface {v2}, Landroidx/compose/runtime/Composer;->endNode()V
-@@ -5758,17 +5758,19 @@
+@@ -5770,16 +5774,20 @@
+ .line 335
:cond_53
-- new-instance v4, Landroidx/compose/foundation/text/input/internal/selection/l;
+- new-instance v4, Lcom/aspiro/wamp/tidalconnect/playback/i;
-
-- const/4 v6, 0x2
--
-- invoke-direct {v4, v11, v6}, Landroidx/compose/foundation/text/input/internal/selection/l;->(Ljava/lang/Object;I)V
+- invoke-direct {v4, v11, v1}, Lcom/aspiro/wamp/tidalconnect/playback/i;->(Ljava/lang/Object;I)V
-
- .line 336
- invoke-interface {v7, v4}, Landroidx/compose/runtime/Composer;->updateRememberedValue(Ljava/lang/Object;)V
-
- .line 337
- :cond_54
-- check-cast v4, Ltl0/a;
+- check-cast v4, Lyl0/a;
-
- const/4 v2, 0x0
-
-- invoke-static {v13, v7, v2, v4}, Lcom/tidal/android/feature/playerscreen/ui/composables/u4;->a(ILandroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;Ltl0/a;)V
-+ new-instance v4, Lcom/tidal/android/feature/playerscreen/ui/f0; # connect click lambda
+- invoke-static {v13, v7, v2, v4}, Lcom/tidal/android/feature/playerscreen/ui/composables/x4;->a(ILandroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;Lyl0/a;)V
++ new-instance v4, Lcom/aspiro/wamp/tidalconnect/playback/i; # connect click lambda factory
+
+ move-object/from16 v6, p5 # action dispatcher
+
-+ const/4 v8, 0x0 # connect-clicked discriminator
++ const/4 v8, 0x1 # connect-clicked disc
+
-+ invoke-direct {v4, v6, v8}, Lcom/tidal/android/feature/playerscreen/ui/f0;->(Ljava/lang/Object;I)V # build lambda
++ invoke-direct {v4, v6, v8}, Lcom/aspiro/wamp/tidalconnect/playback/i;->(Ljava/lang/Object;I)V # build lambda
+
+ invoke-interface {v7, v4}, Landroidx/compose/runtime/Composer;->updateRememberedValue(Ljava/lang/Object;)V # cache lambda
+
-+ :cond_54
-+ check-cast v4, Ltl0/a;
++ :cond_54 # cache join
++ check-cast v4, Lyl0/a; # cast to Function0
+
+ iget-object v8, v10, Lcom/tidal/android/feature/playerscreen/ui/r$a;->d:Lcom/tidal/android/feature/playerscreen/ui/b; # broadcast state
+
+ const/4 v2, 0x0 # changed flags
+
-+ invoke-static {v8, v4, v13, v7, v2}, Lcom/tidal/android/feature/playerscreen/ui/composables/BroadcastButtonKt;->b(Lcom/tidal/android/feature/playerscreen/ui/b;Ltl0/a;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V # render connect button
++ invoke-static {v8, v4, v13, v7, v2}, Lcom/tidal/android/feature/playerscreen/ui/composables/BroadcastButtonKt;->b(Lcom/tidal/android/feature/playerscreen/ui/b;Lyl0/a;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V # render connect button
diff --git a/patches/lyrics-sparkle-conditional-visibility.patch b/patches/lyrics-sparkle-conditional-visibility.patch
index 1646829..9e30f43 100644
--- a/patches/lyrics-sparkle-conditional-visibility.patch
+++ b/patches/lyrics-sparkle-conditional-visibility.patch
@@ -1,7 +1,7 @@
--- a/com/tidal/android/feature/playerscreen/ui/PlayerScreenKt.smali
+++ b/com/tidal/android/feature/playerscreen/ui/PlayerScreenKt.smali
-@@ -5854,17 +5854,38 @@
- invoke-static {v13, v7, v2, v4}, Lcom/tidal/android/feature/playerscreen/ui/composables/h3;->a(ILandroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;Ltl0/a;)V
+@@ -5725,17 +5725,38 @@
+ invoke-static {v13, v7, v2, v4}, Lcom/tidal/android/feature/playerscreen/ui/composables/l3;->a(ILandroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;Lyl0/a;)V
+
+ iget-boolean v2, v10, Lcom/tidal/android/feature/playerscreen/ui/r$a;->i:Z # hasLyrics flag
+
@@ -11,13 +11,13 @@
+
+ invoke-interface {v7, v2}, Landroidx/compose/runtime/Composer;->startReplaceGroup(I)V # open lyrics branch
- new-instance v74, Lc8/j; # lyrics-toggle lambda
+ new-instance v74, Lcom/tidal/android/feature/playerscreen/ui/g0; # lyrics toggle lambda
- move-object/from16 v75, p5 # lambda receiver
+ move-object/from16 v75, p5 # action dispatcher
- const/16 v76, 0x1 # lyrics action
+ const/16 v76, 0x0 # lyrics action disc
- invoke-direct/range {v74 .. v76}, Lc8/j;->(Ljava/lang/Object;I)V # build lambda
+ invoke-direct/range {v74 .. v76}, Lcom/tidal/android/feature/playerscreen/ui/g0;->(Ljava/lang/Object;I)V # build lambda
const/16 v71, 0x0 # changed flags
@@ -25,17 +25,17 @@
const/16 v73, 0x0 # null modifier
- invoke-static/range {v71 .. v74}, Lradiant/SparkleButton;->a(ILandroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;Ltl0/a;)V # render sparkle button
+ invoke-static/range {v71 .. v74}, Lradiant/SparkleButton;->a(ILandroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;Lyl0/a;)V # render sparkle button
+
+ invoke-interface {v7}, Landroidx/compose/runtime/Composer;->endReplaceGroup()V # close lyrics branch
+
+ goto :goto_sparkle_done # skip empty branch
+
-+ :cond_sparkle_no_lyrics
++ :cond_sparkle_no_lyrics # no-lyrics branch
+ const v2, 0x3057f75c # group key (no lyrics)
+
+ invoke-interface {v7, v2}, Landroidx/compose/runtime/Composer;->startReplaceGroup(I)V # open empty
+
+ invoke-interface {v7}, Landroidx/compose/runtime/Composer;->endReplaceGroup()V # close empty
+
-+ :goto_sparkle_done
++ :goto_sparkle_done # join target
diff --git a/patches/player-backdrop.patch b/patches/player-backdrop.patch
index 7567e6d..77067f1 100644
--- a/patches/player-backdrop.patch
+++ b/patches/player-backdrop.patch
@@ -1,11 +1,11 @@
# rl-locals: com/tidal/android/feature/playerscreen/ui/PlayerScreenKt.smali e( 71
--- a/com/tidal/android/feature/playerscreen/ui/PlayerScreenKt.smali
+++ b/com/tidal/android/feature/playerscreen/ui/PlayerScreenKt.smali
-@@ -4164,6 +4164,133 @@
-
- invoke-static {v5, v3, v4}, Landroidx/compose/runtime/Updater;->set-impl(Landroidx/compose/runtime/Composer;Ljava/lang/Object;Ltl0/p;)V
-
-+ const v3, 0x52414449 # group key for slot table
+@@ -4172,6 +4172,133 @@
+
+ invoke-static {v5, v3, v4}, Landroidx/compose/runtime/Updater;->set-impl(Landroidx/compose/runtime/Composer;Ljava/lang/Object;Lyl0/p;)V
+
++ const v3, 0x52414449 # slot table key
+
+ invoke-interface {v10, v3}, Landroidx/compose/runtime/Composer;->startReplaceGroup(I)V # open group
+
@@ -13,75 +13,75 @@
+
+ iget-object v3, v3, Lcom/tidal/android/feature/playerscreen/ui/r$a;->c:Lcom/tidal/android/feature/playerscreen/ui/d; # cover pager
+
-+ iget-object v4, v3, Lcom/tidal/android/feature/playerscreen/ui/d;->a:Lon0/b; # item list
++ iget-object v4, v3, Lcom/tidal/android/feature/playerscreen/ui/d;->a:Ltn0/b; # item list
+
+ iget v5, v3, Lcom/tidal/android/feature/playerscreen/ui/d;->b:I # current index
+
-+ invoke-interface {v4}, Ljava/util/List;->size()I
++ invoke-interface {v4}, Ljava/util/List;->size()I # list size
+
-+ move-result v6
++ move-result v6 # size value
+
-+ if-le v6, v5, :radiant_skip # index out of bounds -> skip
++ if-le v6, v5, :radiant_skip # bounds check
+
-+ if-ltz v5, :radiant_skip
++ if-ltz v5, :radiant_skip # negative check
+
-+ invoke-interface {v4, v5}, Ljava/util/List;->get(I)Ljava/lang/Object;
++ invoke-interface {v4, v5}, Ljava/util/List;->get(I)Ljava/lang/Object; # current item
+
-+ move-result-object v4
++ move-result-object v4 # current item
+
+ instance-of v6, v4, Lcom/tidal/android/feature/playerscreen/ui/c$a; # only album covers
+
-+ if-eqz v6, :radiant_skip
++ if-eqz v6, :radiant_skip # skip non-albums
+
-+ check-cast v4, Lcom/tidal/android/feature/playerscreen/ui/c$a;
++ check-cast v4, Lcom/tidal/android/feature/playerscreen/ui/c$a; # narrow type
+
+ iget v5, v4, Lcom/tidal/android/feature/playerscreen/ui/c$a;->b:I # album id
+
+ iget-object v4, v4, Lcom/tidal/android/feature/playerscreen/ui/c$a;->c:Ljava/lang/String; # cover uuid
+
-+ new-instance v6, Lcom/tidal/android/feature/playerscreen/ui/composables/p0; # tidal's cover request
++ new-instance v6, Lcom/tidal/android/feature/playerscreen/ui/composables/n0; # cover request lambda
+
-+ invoke-direct {v6, v5, v4}, Lcom/tidal/android/feature/playerscreen/ui/composables/p0;->(ILjava/lang/String;)V
++ invoke-direct {v6, v5, v4}, Lcom/tidal/android/feature/playerscreen/ui/composables/n0;->(ILjava/lang/String;)V # build request
+
-+ sget-object v5, Landroidx/compose/ui/Modifier;->Companion:Landroidx/compose/ui/Modifier$Companion;
++ sget-object v5, Landroidx/compose/ui/Modifier;->Companion:Landroidx/compose/ui/Modifier$Companion; # base modifier
+
-+ const/4 v7, 0x0
++ const/4 v7, 0x0 # fraction unused
+
-+ const/4 v8, 0x1
++ const/4 v8, 0x1 # default fraction
+
-+ const/4 v3, 0x0
++ const/4 v3, 0x0 # synthetic null
+
+ invoke-static {v5, v7, v8, v3}, Landroidx/compose/foundation/layout/SizeKt;->fillMaxSize$default(Landroidx/compose/ui/Modifier;FILjava/lang/Object;)Landroidx/compose/ui/Modifier; # fill the player root
+
-+ move-result-object v5
++ move-result-object v5 # filled modifier
+
-+ const/high16 v7, 0x42b40000 # 90f (blur radius dp)
++ const/high16 v7, 0x42b40000 # 90f blur dp
+
-+ invoke-static {v7}, Landroidx/compose/ui/unit/Dp;->constructor-impl(F)F
++ invoke-static {v7}, Landroidx/compose/ui/unit/Dp;->constructor-impl(F)F # to Dp
+
-+ move-result v7
++ move-result v7 # blur dp value
+
-+ sget-object v8, Landroidx/compose/ui/draw/BlurredEdgeTreatment;->Companion:Landroidx/compose/ui/draw/BlurredEdgeTreatment$Companion;
++ sget-object v8, Landroidx/compose/ui/draw/BlurredEdgeTreatment;->Companion:Landroidx/compose/ui/draw/BlurredEdgeTreatment$Companion; # blur edge companion
+
-+ invoke-virtual {v8}, Landroidx/compose/ui/draw/BlurredEdgeTreatment$Companion;->getRectangle---Goahg()Landroidx/compose/ui/graphics/Shape;
++ invoke-virtual {v8}, Landroidx/compose/ui/draw/BlurredEdgeTreatment$Companion;->getRectangle---Goahg()Landroidx/compose/ui/graphics/Shape; # rectangle treatment
+
-+ move-result-object v8
++ move-result-object v8 # edge shape
+
+ invoke-static {v5, v7, v8}, Landroidx/compose/ui/draw/BlurKt;->blur-F8QBwvs(Landroidx/compose/ui/Modifier;FLandroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier; # apply blur
+
-+ move-result-object v5
++ move-result-object v5 # blurred modifier
+
-+ sget-object v7, Landroidx/compose/ui/layout/ContentScale;->Companion:Landroidx/compose/ui/layout/ContentScale$Companion;
++ sget-object v7, Landroidx/compose/ui/layout/ContentScale;->Companion:Landroidx/compose/ui/layout/ContentScale$Companion; # scale companion
+
+ invoke-virtual {v7}, Landroidx/compose/ui/layout/ContentScale$Companion;->getCrop()Landroidx/compose/ui/layout/ContentScale; # cover-crop scaling
+
-+ move-result-object v7
++ move-result-object v7 # crop scale
+
+ move-object/from16 v61, v6 # request
+
+ const/16 v62, 0x0 # contentDescription
+
-+ move-object/from16 v63, v5 # modifier (blurred + fillMaxSize)
++ move-object/from16 v63, v5 # blurred modifier
+
+ const/16 v64, 0x0 # colorFilter
+
@@ -89,49 +89,49 @@
+
+ move-object/from16 v66, v4 # cover uuid
+
-+ const/16 v67, 0x0
++ const/16 v67, 0x0 # null onError
+
+ move-object/from16 v68, v10 # composer
+
-+ const/16 v69, 0x0
++ const/16 v69, 0x0 # changed flags
+
-+ const/16 v70, 0x48
++ const/16 v70, 0x48 # default mask
+
-+ invoke-static/range {v61 .. v70}, Lsd0/f;->a(Ltl0/l;Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/ColorFilter;Landroidx/compose/ui/layout/ContentScale;Ljava/lang/Object;Ltl0/a;Landroidx/compose/runtime/Composer;II)V # render blurred cover
++ invoke-static/range {v61 .. v70}, Lxd0/f;->a(Lyl0/l;Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/ColorFilter;Landroidx/compose/ui/layout/ContentScale;Ljava/lang/Object;Lyl0/a;Landroidx/compose/runtime/Composer;II)V # render blurred cover
+
+ sget-object v3, Landroidx/compose/ui/Modifier;->Companion:Landroidx/compose/ui/Modifier$Companion; # scrim chain start
+
+ const/4 v4, 0x0 # fraction unused
+
-+ const/4 v5, 0x1 # $default mask
++ const/4 v5, 0x1 # default mask
+
+ const/4 v6, 0x0 # null obj
+
+ invoke-static {v3, v4, v5, v6}, Landroidx/compose/foundation/layout/SizeKt;->fillMaxSize$default(Landroidx/compose/ui/Modifier;FILjava/lang/Object;)Landroidx/compose/ui/Modifier; # fill screen
+
-+ move-result-object v3 # modifier
++ move-result-object v3 # fullscreen modifier
+
-+ const v6, -0x80000000 # 0x80000000 = 50% black
++ const v6, -0x80000000 # 50% black ARGB
+
-+ invoke-static {v6}, Landroidx/compose/ui/graphics/ColorKt;->Color(I)J # pack ARGB long
++ invoke-static {v6}, Landroidx/compose/ui/graphics/ColorKt;->Color(I)J # pack color long
+
-+ move-result-wide v6 # color
++ move-result-wide v6 # color long
+
+ invoke-static {}, Landroidx/compose/ui/graphics/RectangleShapeKt;->getRectangleShape()Landroidx/compose/ui/graphics/Shape; # rect shape
+
-+ move-result-object v4 # shape
++ move-result-object v4 # rect shape
+
+ invoke-static {v3, v6, v7, v4}, Landroidx/compose/foundation/BackgroundKt;->background-bw27NRU(Landroidx/compose/ui/Modifier;JLandroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier; # tint with scrim
+
-+ move-result-object v3 # modifier
++ move-result-object v3 # tinted modifier
+
-+ const/4 v4, 0x0 # $changed flags
++ const/4 v4, 0x0 # changed flags
+
+ invoke-static {v3, v10, v4}, Landroidx/compose/foundation/layout/SpacerKt;->Spacer(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V # draw scrim
+
-+ :radiant_skip
++ :radiant_skip # skip target
+ invoke-interface {v10}, Landroidx/compose/runtime/Composer;->endReplaceGroup()V # close group
+
.line 138
sget-object v3, Landroidx/compose/foundation/layout/BoxScopeInstance;->INSTANCE:Landroidx/compose/foundation/layout/BoxScopeInstance;
-
+
diff --git a/tidal-apk/com.aspiro.tidal_2.192.0-9089_1arch_3dpi_24lang_c83a23222f1eac5745b14c826738c6d0_apkmirror.com.apkm b/tidal-apk/com.aspiro.tidal_2.192.1-9090_4arch_7dpi_24lang_56762977dcaecf1452892e71fe48d6f0_apkmirror.com.apkm
similarity index 73%
rename from tidal-apk/com.aspiro.tidal_2.192.0-9089_1arch_3dpi_24lang_c83a23222f1eac5745b14c826738c6d0_apkmirror.com.apkm
rename to tidal-apk/com.aspiro.tidal_2.192.1-9090_4arch_7dpi_24lang_56762977dcaecf1452892e71fe48d6f0_apkmirror.com.apkm
index 94524a6..72f3c09 100644
Binary files a/tidal-apk/com.aspiro.tidal_2.192.0-9089_1arch_3dpi_24lang_c83a23222f1eac5745b14c826738c6d0_apkmirror.com.apkm and b/tidal-apk/com.aspiro.tidal_2.192.1-9090_4arch_7dpi_24lang_56762977dcaecf1452892e71fe48d6f0_apkmirror.com.apkm differ