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