Compare commits

..
11 Commits
Author SHA1 Message Date
meoware.exe 2150b87371 Merge pull request #71 from meowarex/dev
Word by Word Lyrics <3
2026-07-18 15:04:56 +10:00
meoware.exe 0d82c16168 Readme Update 2026-07-18 15:04:31 +10:00
meoware.exe 4c257f7ad9 Word by Word Lyrics <3 2026-07-18 15:02:07 +10:00
meoware.exe 7458df8eba Merge pull request #69 from meowarex/dev
Lyrics Button Hotfix <3
2026-07-17 00:01:18 +10:00
meoware.exe 6a5771cf9e Readme changes <3 2026-07-17 00:00:49 +10:00
meoware.exe a8a576c994 Lyrics Button Hotfix <3 2026-07-16 23:00:03 +10:00
meoware.exe 585666c403 Merge pull request #68 from meowarex/dev
Player Backdrop Image Settings <3
2026-07-14 01:54:31 +10:00
meoware.exe 90c008082f Player Backdrop Image Settings <3 2026-07-14 01:33:30 +10:00
meoware.exe c2a2586306 Merge pull request #67 from meowarex/dev
Upgrade Tidal Version + Native Blur <3
2026-07-14 00:35:34 +10:00
meoware.exe 2291f4064e Upgrade Tidal Version + Native Blur <3 2026-07-14 00:31:41 +10:00
meoware.exe f6a4de0cc7 Fix Missing Blocks on Patches <3 2026-07-06 16:56:56 +10:00
67 changed files with 3140 additions and 807 deletions
@@ -21,6 +21,8 @@
"LyricsKeepControlsVisible",
"PlayerBackdrop",
"QualityBadgeColors",
"PlayerMovePlayingFrom",
"PlayerOneHanded",
"LyricsProgressPill",
"MiniPlayerRedesign"
]
@@ -30,58 +32,133 @@
"order": 20,
"fileNames": [
"lyrics-rl-api.patch",
"lyrics-rl-api-observer.patch"
"lyrics-rl-api-observer.patch",
"lyrics-rl-api-isrc.patch"
],
"title": "Radiant Lyrics API - WIP",
"description": "Use Radiant Lyrics API to fetch Lyrics (Higher quality & More providers)",
"default": false
"description": "Use Radiant Lyrics API to fetch Lyrics (Higher quality & More providers). Pick how the highlight moves: whole Line or word-by-word (Word).",
"default": false,
"defaultVariantIndex": 0,
"variants": [
{
"title": "Line",
"fileNames": []
},
{
"title": "Word",
"fileNames": [
"lyrics-rl-api-word.patch"
]
}
]
},
{
"id": "PlayerBackdrop",
"order": 30,
"fileNames": [
"player-backdrop.patch"
],
"fileNames": [],
"title": "Player Backdrop",
"description": "Restores the legacy translucent backdrop blur behind the player",
"description": "Lets you fully adjust how the player backdrop blur looks and behaves",
"default": true,
"defaultVariantIndex": 2,
"variants": [
{
"title": "Static",
"fileNames": [
"player-backdrop-static.patch"
],
"extensionFiles": [
"radiant/BackdropFx.smali"
]
},
{
"title": "Animated",
"fileNames": [
"player-backdrop-animated.patch"
],
"extensionFiles": [
"radiant/BackdropFx.smali"
]
},
{
"title": "Playback",
"fileNames": [
"player-backdrop-playback.patch"
],
"extensionFiles": [
"radiant/BackdropFx.smali"
]
}
],
"advancedOptions": [
{
"type": "slider",
"key": "blur_strength",
"title": "Blur Strength",
"description": "How strongly the album art behind the player is blurred",
"description": "The value of Blur applied to the backdrop cover",
"default": 50,
"min": 0,
"max": 100,
"steps": 19,
"displayAsPercent": true,
"token": "RL_BLUR_BITS",
"token": "RL_BLUR",
"encode": {
"kind": "floatBits",
"scale": 1.8
"kind": "int",
"scale": 1.0
}
},
{
"type": "slider",
"key": "dimming",
"title": "Backdrop Dimming",
"description": "Darkens the backdrop so the foreground controls stay legible",
"key": "contrast",
"title": "Contrast",
"description": "The value of Contrast applied to the backdrop cover",
"default": 50,
"min": 0,
"max": 100,
"steps": 19,
"displayAsPercent": true,
"token": "RL_SCRIM_ARGB",
"token": "RL_CONTRAST",
"encode": {
"kind": "argbAlpha"
"kind": "floatBits",
"scale": 0.02
}
},
{
"type": "slider",
"key": "saturation",
"title": "Saturation",
"description": "The value of Saturation applied to the backdrop cover",
"default": 50,
"min": 0,
"max": 100,
"steps": 19,
"displayAsPercent": true,
"token": "RL_SATURATION",
"encode": {
"kind": "floatBits",
"scale": 0.02
}
},
{
"type": "slider",
"key": "brightness",
"title": "Brightness",
"description": "The value of Brightness applied to the backdrop cover",
"default": 50,
"min": 0,
"max": 100,
"steps": 19,
"displayAsPercent": true,
"token": "RL_BRIGHTNESS",
"encode": {
"kind": "floatBits",
"scale": 0.02
}
},
{
"type": "toggle",
"key": "cover_everywhere",
"title": "Cover Everywhere - WIP",
"description": "Applies the blurred backdrop to every Compose based page (Home & Collection)",
"description": "Applies TIDAL's native blurred album-art backdrop to every Compose based page (Home & Collection)",
"default": false,
"inline": true,
"fileNames": [
@@ -283,7 +360,7 @@
"radiant/MiniPlayerTrackGestures$OffsetLayer.smali",
"radiant/MiniPlayerTrackGestures$ResetAnimator.smali",
"radiant/MiniPlayerTrackGestures$TextDraw.smali",
"com/tidal/android/feature/appscaffold/ui/s$c.smali"
"com/tidal/android/feature/appscaffold/ui/r$c.smali"
]
}
]
@@ -79,6 +79,8 @@ data class PatchOptions(
if (spec.variants.isEmpty()) {
if (!enabled) addAll(spec.fileNames)
} else {
// base fileNames apply for every variant while enabled; disable them when off
if (!enabled) addAll(spec.fileNames)
val selected = variantIndex(spec)
spec.variants.forEachIndexed { index, variant ->
if (!enabled || index != selected) addAll(variant.fileNames)
@@ -48,6 +48,7 @@ data class VariantSpec(
val title: String,
val fileNames: List<String> = emptyList(),
val extensionFiles: List<String> = emptyList(),
val enabled: Boolean = true,
)
/** A single advanced option. Discriminated by `"type"` in JSON. */
@@ -173,7 +174,7 @@ fun builtinPatchSpecs(context: Context, json: Json): List<PatchSpec> = try {
}
@Immutable
data class EffectiveVariant(val originalIndex: Int, val title: String)
data class EffectiveVariant(val originalIndex: Int, val title: String, val enabled: Boolean = true)
fun PatchSpec.effectiveVariants(isOptionOn: (OptionSpec.Toggle) -> Boolean): List<EffectiveVariant> {
if (variants.isEmpty()) return emptyList()
@@ -186,19 +187,22 @@ fun PatchSpec.effectiveVariants(isOptionOn: (OptionSpec.Toggle) -> Boolean): Lis
}
}
return variants.mapIndexedNotNull { index, variant ->
if (index in hidden) null else EffectiveVariant(index, relabel[index] ?: variant.title)
if (index in hidden) null
else EffectiveVariant(index, relabel[index] ?: variant.title, variant.enabled)
}
}
fun PatchSpec.resolveVariantIndex(stored: Int, isOptionOn: (OptionSpec.Toggle) -> Boolean): Int {
val visible = effectiveVariants(isOptionOn)
if (visible.isEmpty() || visible.any { it.originalIndex == stored }) return stored
// never resolve onto a greyed/disabled variant
if (visible.isEmpty() || visible.any { it.originalIndex == stored && it.enabled }) return stored
val relabelKeys = buildSet {
for (option in advancedOptions) {
if (option is OptionSpec.Toggle && isOptionOn(option)) addAll(option.relabelVariants.keys)
}
}
return visible.firstOrNull { it.originalIndex in relabelKeys }?.originalIndex
return visible.firstOrNull { it.originalIndex in relabelKeys && it.enabled }?.originalIndex
?: visible.firstOrNull { it.enabled }?.originalIndex
?: visible.first().originalIndex
}
@@ -169,15 +169,18 @@ fun PatchSelectionAccordion(
.fillMaxWidth()
.padding(bottom = 8.dp),
) {
val resolvedVariant =
if (patch.variants.isNotEmpty())
patch.resolveVariantIndex(variantIndex(patch)) {
optionState.toggle(patch, it)
}
else -1
if (patch.variants.isNotEmpty()) {
val effective = patch.effectiveVariants { optionState.toggle(patch, it) }
val resolved = patch.resolveVariantIndex(variantIndex(patch)) {
optionState.toggle(patch, it)
}
PatchVariantSelector(
variants = effective,
selectedIndex = effective
.indexOfFirst { it.originalIndex == resolved }
.indexOfFirst { it.originalIndex == resolvedVariant }
.coerceAtLeast(0),
onSelect = { pos ->
effective.getOrNull(pos)?.let { onSelectVariant(patch, it.originalIndex) }
@@ -186,12 +189,16 @@ fun PatchSelectionAccordion(
}
for (option in inlineToggles) key(option.key) {
InlineToggleRow(
title = option.title,
description = option.description,
checked = optionState.toggle(patch, option),
onCheckedChange = { optionState.setToggle(patch, option, it) },
)
val show = option.requiresVariant == null ||
option.requiresVariant == resolvedVariant
if (show) {
InlineToggleRow(
title = option.title,
description = option.description,
checked = optionState.toggle(patch, option),
onCheckedChange = { optionState.setToggle(patch, option, it) },
)
}
}
if (hasSheetOptions) {
@@ -22,7 +22,8 @@ fun PatchVariantSelector(
variants.forEachIndexed { index, variant ->
SegmentedButton(
selected = index == selectedIndex,
onClick = { onSelect(index) },
enabled = variant.enabled,
onClick = { if (variant.enabled) onSelect(index) },
shape = SegmentedButtonDefaults.itemShape(
index = index,
count = variants.size,
+20 -5
View File
@@ -2,13 +2,25 @@
A Manager app for Android that patches TIDAL to bring the Radiant Lyrics experience to mobile.
## What it does
## What it does?
- Blurred album art background in the player
- Progress pill overlay in lyrics mode - restored from old UI
- Hides the ugly cover art when in lyrics mode
This project adds ALLOT of completely Optional & Customisable Patches/Integrations to TIDAL on Android (iOS SoonTM).
Every Patch & Integration can be disabled/enabled & adjusted exactly how you want TIDAL to feel/look <3
### Patches:
- Insane Customisation of the Player Backdrop
- Higher quality lyrics from more providers (WIP)
- Progress pill overlay in lyrics mode (restored from old UI)
- Keeps lyrics controls visible
- One-handed player controls
- Redesigned mini-player with gestures
- Word Level Lyrics (Word by Word) <3
- Syllable Level lyrics (SoonTM)
### Integrations
- Waze | Control TIDAL playback from Waze
### Disclaimer
@@ -18,7 +30,10 @@ This project is not affiliated with TIDAL in any way. Use at your own risk.
## Installation
### Batteries <3
- Android 10.0+ & >340 DPI
- Phone of some unknown description
- The smallest amount of brain damage
- Android 7.0+ & >340 DPI
- Internet
- Paid TIDAL Account
### Steps
+3 -3
View File
@@ -9,14 +9,14 @@
+ invoke-static {v1, v0}, Lradiant/HomeBackdrop;->render(Landroidx/compose/runtime/Composer;I)V # render album-art backdrop
+
new-instance v0, Lcom/tidal/wave2/foundation/WaveScaffoldKt$WaveScaffold$2;
.line 388
@@ -991,7 +995,7 @@
.line 436
.line 437
- move-wide v15, v10
+ const-wide/16 v15, 0x0 # transparent containerColor
.line 438
const/4 v11, 0x0
+18 -7
View File
@@ -1,11 +1,22 @@
--- a/com/tidal/android/feature/appscaffold/ui/r.smali
+++ b/com/tidal/android/feature/appscaffold/ui/r.smali
@@ -48,6 +48,8 @@
.line 5
iput-object p4, p0, Lcom/tidal/android/feature/appscaffold/ui/r;->d:Ljava/lang/String;
--- a/com/tidal/android/feature/appscaffold/ui/q.smali
+++ b/com/tidal/android/feature/appscaffold/ui/q.smali
@@ -55,6 +55,8 @@
.line 10
iput-object p4, p0, Lcom/tidal/android/feature/appscaffold/ui/q;->d:Ljava/lang/String;
+ invoke-static {p3, p4}, Lradiant/HomeBackdrop;->fromMiniPlayer(ILjava/lang/String;)V # capture cover state
+
.line 6
iput-boolean p5, p0, Lcom/tidal/android/feature/appscaffold/ui/r;->e:Z
.line 11
.line 12
iput-boolean p5, p0, Lcom/tidal/android/feature/appscaffold/ui/q;->e:Z
--- a/com/tidal/android/feature/appscaffold/ui/t.smali
+++ b/com/tidal/android/feature/appscaffold/ui/t.smali
@@ -23,6 +23,8 @@
.method public constructor <init>(Lcom/tidal/android/feature/appscaffold/ui/MiniPlayerContract$ItemType;Lcom/tidal/android/feature/appscaffold/ui/q;Lcom/tidal/android/feature/appscaffold/ui/MiniPlayerContract$PlayState;Z)V
.locals 0
+ invoke-static {p3}, Lradiant/HomeBackdrop;->onPlayState(Lcom/tidal/android/feature/appscaffold/ui/MiniPlayerContract$PlayState;)V # RL: publish live play state to Cover Everywhere
+
.line 1
invoke-virtual {p1}, Ljava/lang/Object;->getClass()Ljava/lang/Class;
+2 -2
View File
@@ -1,5 +1,5 @@
{
"tidalVersionCode": 10002,
"tidalVersionCode": 10004,
"tidalApkUrl": "https://github.com/meowarex/rl-mobile/releases/download/latest/tidal-stock.apk",
"patchesVersion": "0.10.1"
"patchesVersion": "0.12.0"
}
+3 -3
View File
@@ -8,7 +8,7 @@
+ return v0 # bypass debug flag
+
.line 1
iget-object v0, p0, Lcom/tidal/android/core/debug/DebugFeatureInteractorDefault;->a:Lcom/tidal/android/featureflags/l;
iget-object v0, p0, Lcom/tidal/android/core/debug/DebugFeatureInteractorDefault;->a:Lcom/tidal/android/featureflags/n;
@@ -99,6 +102,14 @@
}
@@ -23,7 +23,7 @@
+ return-object v0 # short-circuit b()
+
.line 1
sget-object v0, Lp50/a;->a:Ljava/lang/String;
sget-object v0, Lo50/a;->a:Ljava/lang/String;
@@ -261,6 +272,9 @@
.method public final c()Z
@@ -33,5 +33,5 @@
+ return v0 # bypass debug flag
+
.line 1
sget-object v0, Lp50/a;->a:Ljava/lang/String;
sget-object v0, Lo50/a;->a:Ljava/lang/String;
+2 -2
View File
@@ -1,5 +1,5 @@
--- a/jg/d.smali
+++ b/jg/d.smali
--- a/hg/d.smali
+++ b/hg/d.smali
@@ -27,7 +27,7 @@
.line 2
@@ -1,12 +1,12 @@
.class public final Lcom/tidal/android/feature/appscaffold/ui/s$c;
.super Lcom/tidal/android/feature/appscaffold/ui/s;
.class public final Lcom/tidal/android/feature/appscaffold/ui/r$c;
.super Lcom/tidal/android/feature/appscaffold/ui/r;
.source "SourceFile"
# Synthetic mini-player event used by right swipe (previous/rewind).
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/tidal/android/feature/appscaffold/ui/s;
value = Lcom/tidal/android/feature/appscaffold/ui/r;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
@@ -16,18 +16,18 @@
# static fields
.field public static final a:Lcom/tidal/android/feature/appscaffold/ui/s$c;
.field public static final a:Lcom/tidal/android/feature/appscaffold/ui/r$c;
# direct methods
.method static constructor <clinit>()V
.locals 1
new-instance v0, Lcom/tidal/android/feature/appscaffold/ui/s$c;
new-instance v0, Lcom/tidal/android/feature/appscaffold/ui/r$c;
invoke-direct {v0}, Lcom/tidal/android/feature/appscaffold/ui/s;-><init>()V
invoke-direct {v0}, Lcom/tidal/android/feature/appscaffold/ui/r;-><init>()V
sput-object v0, Lcom/tidal/android/feature/appscaffold/ui/s$c;->a:Lcom/tidal/android/feature/appscaffold/ui/s$c;
sput-object v0, Lcom/tidal/android/feature/appscaffold/ui/r$c;->a:Lcom/tidal/android/feature/appscaffold/ui/r$c;
return-void
.end method
@@ -44,7 +44,7 @@
return v0
:cond_0
instance-of p1, p1, Lcom/tidal/android/feature/appscaffold/ui/s$c;
instance-of p1, p1, Lcom/tidal/android/feature/appscaffold/ui/r$c;
if-nez p1, :cond_1
+133
View File
@@ -0,0 +1,133 @@
.class public final Lradiant/BackdropFx;
.super Ljava/lang/Object;
.method public static apply(Landroid/graphics/Bitmap;)Landroid/graphics/Bitmap;
.locals 14
const v0, __RL_CONTRAST__
const v1, __RL_SATURATION__
const v2, __RL_BRIGHTNESS__
# cm = ColorMatrix(); cm.setSaturation(s)
new-instance v3, Landroid/graphics/ColorMatrix;
invoke-direct {v3}, Landroid/graphics/ColorMatrix;-><init>()V
invoke-virtual {v3, v1}, Landroid/graphics/ColorMatrix;->setSaturation(F)V
# o = 128 - 128*c (contrast pivot at mid-grey, 0..255 space)
const/high16 v4, 0x43000000
mul-float v5, v4, v0
sub-float v5, v4, v5
# contrast matrix: diag = c, offset column = o
const/16 v6, 0x14
new-array v7, v6, [F
const/4 v8, 0x0
aput v0, v7, v8
const/4 v8, 0x4
aput v5, v7, v8
const/4 v8, 0x6
aput v0, v7, v8
const/16 v8, 0x9
aput v5, v7, v8
const/16 v8, 0xc
aput v0, v7, v8
const/16 v8, 0xe
aput v5, v7, v8
const/high16 v9, 0x3f800000
const/16 v8, 0x12
aput v9, v7, v8
new-instance v8, Landroid/graphics/ColorMatrix;
invoke-direct {v8, v7}, Landroid/graphics/ColorMatrix;-><init>([F)V
invoke-virtual {v3, v8}, Landroid/graphics/ColorMatrix;->postConcat(Landroid/graphics/ColorMatrix;)V
# brightness matrix: diag = b
new-array v7, v6, [F
const/4 v8, 0x0
aput v2, v7, v8
const/4 v8, 0x6
aput v2, v7, v8
const/16 v8, 0xc
aput v2, v7, v8
const/16 v8, 0x12
aput v9, v7, v8
new-instance v8, Landroid/graphics/ColorMatrix;
invoke-direct {v8, v7}, Landroid/graphics/ColorMatrix;-><init>([F)V
invoke-virtual {v3, v8}, Landroid/graphics/ColorMatrix;->postConcat(Landroid/graphics/ColorMatrix;)V
# out = createBitmap(w, h, ARGB_8888)
invoke-virtual {p0}, Landroid/graphics/Bitmap;->getWidth()I
move-result v10
invoke-virtual {p0}, Landroid/graphics/Bitmap;->getHeight()I
move-result v11
sget-object v12, Landroid/graphics/Bitmap$Config;->ARGB_8888:Landroid/graphics/Bitmap$Config;
invoke-static {v10, v11, v12}, Landroid/graphics/Bitmap;->createBitmap(IILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap;
move-result-object v10
# canvas over out
new-instance v11, Landroid/graphics/Canvas;
invoke-direct {v11, v10}, Landroid/graphics/Canvas;-><init>(Landroid/graphics/Bitmap;)V
# paint with the color-matrix filter
new-instance v12, Landroid/graphics/Paint;
invoke-direct {v12}, Landroid/graphics/Paint;-><init>()V
new-instance v13, Landroid/graphics/ColorMatrixColorFilter;
invoke-direct {v13, v3}, Landroid/graphics/ColorMatrixColorFilter;-><init>(Landroid/graphics/ColorMatrix;)V
invoke-virtual {v12, v13}, Landroid/graphics/Paint;->setColorFilter(Landroid/graphics/ColorFilter;)Landroid/graphics/ColorFilter;
# draw the blurred bitmap through the filter
const/4 v0, 0x0
invoke-virtual {v11, p0, v0, v0, v12}, Landroid/graphics/Canvas;->drawBitmap(Landroid/graphics/Bitmap;FFLandroid/graphics/Paint;)V
invoke-virtual {p0}, Landroid/graphics/Bitmap;->recycle()V
return-object v10
.end method
+114 -69
View File
@@ -5,6 +5,20 @@
# static fields
.field public static volatile currentAlbumId:I
# 0 = Static, 1 = Animated (always rotate), 2 = Playback (follow live play state)
.field public static volatile mode:I
# Live play state from the mini-player (t.c PlayState = Playing)
.field public static isPlayingState:Landroidx/compose/runtime/MutableState;
.annotation system Ldalvik/annotation/Signature;
value = {
"Landroidx/compose/runtime/MutableState<",
"Ljava/lang/Boolean;",
">;"
}
.end annotation
.end field
.field public static coverUuidState:Landroidx/compose/runtime/MutableState;
.annotation system Ldalvik/annotation/Signature;
value = {
@@ -24,6 +38,24 @@
sput v0, Lradiant/HomeBackdrop;->currentAlbumId:I
const/4 v0, 0x2
sput v0, Lradiant/HomeBackdrop;->mode:I
sget-object v0, Ljava/lang/Boolean;->FALSE:Ljava/lang/Boolean;
const/4 v1, 0x0
const/4 v2, 0x2
const/4 v3, 0x0
invoke-static {v0, v1, v2, v3}, Landroidx/compose/runtime/SnapshotStateKt;->mutableStateOf$default(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;ILjava/lang/Object;)Landroidx/compose/runtime/MutableState;
move-result-object v0
sput-object v0, Lradiant/HomeBackdrop;->isPlayingState:Landroidx/compose/runtime/MutableState;
const/4 v0, 0x0
const/4 v1, 0x0
@@ -41,6 +73,64 @@
return-void
.end method
.method public static setModeStatic()V
.locals 1
const/4 v0, 0x0
sput v0, Lradiant/HomeBackdrop;->mode:I
return-void
.end method
.method public static setModeAnimated()V
.locals 1
const/4 v0, 0x1
sput v0, Lradiant/HomeBackdrop;->mode:I
return-void
.end method
.method public static setModePlayback()V
.locals 1
const/4 v0, 0x2
sput v0, Lradiant/HomeBackdrop;->mode:I
return-void
.end method
# from the mini-player state ctor (t.<init>) whenever play state changes.
.method public static onPlayState(Lcom/tidal/android/feature/appscaffold/ui/MiniPlayerContract$PlayState;)V
.locals 2
sget-object v0, Lradiant/HomeBackdrop;->isPlayingState:Landroidx/compose/runtime/MutableState;
if-nez v0, :cond_ready
return-void
:cond_ready
sget-object v1, Lcom/tidal/android/feature/appscaffold/ui/MiniPlayerContract$PlayState;->Playing:Lcom/tidal/android/feature/appscaffold/ui/MiniPlayerContract$PlayState;
if-ne p0, v1, :cond_paused
sget-object v1, Ljava/lang/Boolean;->TRUE:Ljava/lang/Boolean;
goto :goto_set
:cond_paused
sget-object v1, Ljava/lang/Boolean;->FALSE:Ljava/lang/Boolean;
:goto_set
invoke-interface {v0, v1}, Landroidx/compose/runtime/MutableState;->setValue(Ljava/lang/Object;)V
return-void
.end method
.method private constructor <init>()V
.locals 0
@@ -271,97 +361,52 @@
if-eqz v2, :skip
sget v2, Lradiant/HomeBackdrop;->currentAlbumId:I
new-instance v3, Lcom/tidal/android/feature/playerscreen/ui/composables/o0;
invoke-direct {v3, v2, v1}, Lcom/tidal/android/feature/playerscreen/ui/composables/o0;-><init>(ILjava/lang/String;)V
sget-object v4, Landroidx/compose/ui/Modifier;->Companion:Landroidx/compose/ui/Modifier$Companion;
const/4 v5, 0x0
const/4 v6, 0x1
const/4 v7, 0x0
invoke-static {v4, v5, v6, v7}, Landroidx/compose/foundation/layout/SizeKt;->fillMaxSize$default(Landroidx/compose/ui/Modifier;FILjava/lang/Object;)Landroidx/compose/ui/Modifier;
move-result-object v4
const/high16 v5, 0x42200000
invoke-static {v5}, Landroidx/compose/ui/unit/Dp;->constructor-impl(F)F
move-result v5
sget-object v6, Landroidx/compose/ui/draw/BlurredEdgeTreatment;->Companion:Landroidx/compose/ui/draw/BlurredEdgeTreatment$Companion;
invoke-virtual {v6}, Landroidx/compose/ui/draw/BlurredEdgeTreatment$Companion;->getRectangle---Goahg()Landroidx/compose/ui/graphics/Shape;
move-result-object v6
invoke-static {v4, v5, v6}, Landroidx/compose/ui/draw/BlurKt;->blur-F8QBwvs(Landroidx/compose/ui/Modifier;FLandroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier;
move-result-object v4
sget-object v5, Landroidx/compose/ui/layout/ContentScale;->Companion:Landroidx/compose/ui/layout/ContentScale$Companion;
invoke-virtual {v5}, Landroidx/compose/ui/layout/ContentScale$Companion;->getCrop()Landroidx/compose/ui/layout/ContentScale;
move-result-object v5
move-object/from16 v6, v3
const/4 v7, 0x0
move-object/from16 v8, v4
# Render TIDAL's NATIVE DarkBlurBackground (p3.a)
sget-object v8, Landroidx/compose/ui/Modifier;->Companion:Landroidx/compose/ui/Modifier$Companion;
const/4 v9, 0x0
move-object/from16 v10, v5
const/4 v10, 0x1
move-object/from16 v11, v1 # uuid as cache key
const/4 v11, 0x0
const/4 v12, 0x0
invoke-static {v8, v9, v10, v11}, Landroidx/compose/foundation/layout/SizeKt;->fillMaxSize$default(Landroidx/compose/ui/Modifier;FILjava/lang/Object;)Landroidx/compose/ui/Modifier;
move-object/from16 v13, v0
move-result-object v13 # v13 = fillMaxSize modifier
const/4 v14, 0x0
sget v8, Lradiant/HomeBackdrop;->currentAlbumId:I # v8 = album id
const/16 v15, 0x48
move-object v9, v1 # v9 = cover uuid
invoke-static/range {v6 .. v15}, Lee0/e;->a(Lem0/l;Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/ColorFilter;Landroidx/compose/ui/layout/ContentScale;Ljava/lang/Object;Lem0/a;Landroidx/compose/runtime/Composer;II)V
# v10 = isPlaying, mirrored from the Player Backdrop variant
sget v10, Lradiant/HomeBackdrop;->mode:I
sget-object v3, Landroidx/compose/ui/Modifier;->Companion:Landroidx/compose/ui/Modifier$Companion;
const/4 v11, 0x2
const/4 v4, 0x0
if-ne v10, v11, :rl_mode_done
const/4 v5, 0x1
sget-object v10, Lradiant/HomeBackdrop;->isPlayingState:Landroidx/compose/runtime/MutableState;
const/4 v6, 0x0
invoke-interface {v10}, Landroidx/compose/runtime/State;->getValue()Ljava/lang/Object;
invoke-static {v3, v4, v5, v6}, Landroidx/compose/foundation/layout/SizeKt;->fillMaxSize$default(Landroidx/compose/ui/Modifier;FILjava/lang/Object;)Landroidx/compose/ui/Modifier;
move-result-object v10
move-result-object v3
check-cast v10, Ljava/lang/Boolean;
const v4, -0x80000000
invoke-virtual {v10}, Ljava/lang/Boolean;->booleanValue()Z
invoke-static {v4}, Landroidx/compose/ui/graphics/ColorKt;->Color(I)J
move-result v10
move-result-wide v4
:rl_mode_done
const/4 v11, 0x0 # v11 = isSeeking = false
invoke-static {}, Landroidx/compose/ui/graphics/RectangleShapeKt;->getRectangleShape()Landroidx/compose/ui/graphics/Shape;
const/4 v12, 0x0 # v12 = progress callback = null (unused while not seeking)
move-result-object v6
move-object v14, v0 # v14 = composer
invoke-static {v3, v4, v5, v6}, Landroidx/compose/foundation/BackgroundKt;->background-bw27NRU(Landroidx/compose/ui/Modifier;JLandroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier;
const/4 v15, 0x0 # v15 = changed flags
move-result-object v3
const/4 v4, 0x0
invoke-static {v3, v0, v4}, Landroidx/compose/foundation/layout/SpacerKt;->Spacer(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V
invoke-static/range {v8 .. v15}, Lcom/tidal/android/feature/playerscreen/ui/composables/p3;->a(ILjava/lang/String;ZZLam0/a;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V
:skip
invoke-interface {v0}, Landroidx/compose/runtime/Composer;->endReplaceGroup()V
+61
View File
@@ -0,0 +1,61 @@
.class public final Lradiant/IsrcCache;
.super Ljava/lang/Object;
# Caches trackId(String) -> ISRC(String), captured from TIDAL's own track mapper
.field public static final map:Ljava/util/concurrent/ConcurrentHashMap;
.method static constructor <clinit>()V
.locals 1
new-instance v0, Ljava/util/concurrent/ConcurrentHashMap;
invoke-direct {v0}, Ljava/util/concurrent/ConcurrentHashMap;-><init>()V
sput-object v0, Lradiant/IsrcCache;->map:Ljava/util/concurrent/ConcurrentHashMap;
return-void
.end method
.method private constructor <init>()V
.locals 0
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method public static put(Ljava/lang/String;Ljava/lang/String;)V
.locals 1
if-eqz p0, :ret
if-eqz p1, :ret
sget-object v0, Lradiant/IsrcCache;->map:Ljava/util/concurrent/ConcurrentHashMap;
invoke-virtual {v0, p0, p1}, Ljava/util/concurrent/ConcurrentHashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
:ret
return-void
.end method
.method public static get(Ljava/lang/String;)Ljava/lang/String;
.locals 2
const/4 v0, 0x0
if-eqz p0, :none
sget-object v1, Lradiant/IsrcCache;->map:Ljava/util/concurrent/ConcurrentHashMap;
invoke-virtual {v1, p0}, Ljava/util/concurrent/ConcurrentHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/lang/String;
:none
return-object v0
.end method
@@ -8,6 +8,8 @@
# stuff that makes lyrics view stays open.. i forgot what it actually does other than short circuit a call or some shit <3
.field public static lastMediaId:I
.field public static lastVm:Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;
# direct methods
.method static constructor <clinit>()V
@@ -17,5 +19,9 @@
sput v0, Lradiant/LyricsReinitGuard;->lastMediaId:I
const/4 v0, 0x0
sput-object v0, Lradiant/LyricsReinitGuard;->lastVm:Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;
return-void
.end method
@@ -83,7 +83,7 @@
const/16 v7, 0x8
invoke-static/range {v0 .. v7}, Landroidx/compose/animation/SingleValueAnimationKt;->animateColorAsState-euL9pac(JLandroidx/compose/animation/core/AnimationSpec;Ljava/lang/String;Lem0/l;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State;
invoke-static/range {v0 .. v7}, Landroidx/compose/animation/SingleValueAnimationKt;->animateColorAsState-euL9pac(JLandroidx/compose/animation/core/AnimationSpec;Ljava/lang/String;Lam0/l;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State;
move-result-object v0
@@ -1,6 +1,6 @@
.class public final Lradiant/MiniPlayerGestures$FeedbackLayer;
.super Ljava/lang/Object;
.implements Lem0/l;
.implements Lam0/l;
# annotations
@@ -41,7 +41,7 @@
# virtual methods
.method public final invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)Lkotlin/v;
.method public final invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)Lkotlin/u;
.locals 1
sget-object v0, Lradiant/MiniPlayerGestures;->v:Landroidx/compose/runtime/MutableFloatState;
@@ -52,7 +52,7 @@
invoke-interface {p1, v0}, Landroidx/compose/ui/graphics/GraphicsLayerScope;->setTranslationY(F)V
sget-object p1, Lkotlin/v;->a:Lkotlin/v;
sget-object p1, Lkotlin/u;->a:Lkotlin/u;
return-object p1
.end method
@@ -62,7 +62,7 @@
check-cast p1, Landroidx/compose/ui/graphics/GraphicsLayerScope;
invoke-virtual {p0, p1}, Lradiant/MiniPlayerGestures$FeedbackLayer;->invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)Lkotlin/v;
invoke-virtual {p0, p1}, Lradiant/MiniPlayerGestures$FeedbackLayer;->invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)Lkotlin/u;
move-result-object p1
@@ -1,6 +1,6 @@
.class public final Lradiant/MiniPlayerGestures$Gesture;
.super Ljava/lang/Object;
.implements Lem0/l;
.implements Lam0/l;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
@@ -14,7 +14,7 @@
# instance fields
.field public final a:Lem0/l;
.field public final a:Lam0/l;
# Y at ACTION_DOWN
.field public b:F
@@ -43,12 +43,12 @@
# direct methods
.method public constructor <init>(Lem0/l;Landroidx/compose/material3/SheetState;Z)V
.method public constructor <init>(Lam0/l;Landroidx/compose/material3/SheetState;Z)V
.locals 0
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
iput-object p1, p0, Lradiant/MiniPlayerGestures$Gesture;->a:Lem0/l;
iput-object p1, p0, Lradiant/MiniPlayerGestures$Gesture;->a:Lam0/l;
iput-object p2, p0, Lradiant/MiniPlayerGestures$Gesture;->f:Landroidx/compose/material3/SheetState;
@@ -90,9 +90,9 @@
iget-object v0, p0, Lradiant/MiniPlayerGestures$Gesture;->f:Landroidx/compose/material3/SheetState;
iget-object v1, p0, Lradiant/MiniPlayerGestures$Gesture;->a:Lem0/l;
iget-object v1, p0, Lradiant/MiniPlayerGestures$Gesture;->a:Lam0/l;
invoke-static {v0, v1, p1}, Lradiant/MiniPlayerGestures;->finishDrag(Landroidx/compose/material3/SheetState;Lem0/l;F)V
invoke-static {v0, v1, p1}, Lradiant/MiniPlayerGestures;->finishDrag(Landroidx/compose/material3/SheetState;Lam0/l;F)V
return-void
.end method
@@ -100,11 +100,11 @@
.method private openPlayer()V
.locals 2
iget-object v0, p0, Lradiant/MiniPlayerGestures$Gesture;->a:Lem0/l;
iget-object v0, p0, Lradiant/MiniPlayerGestures$Gesture;->a:Lam0/l;
sget-object v1, Lcom/tidal/android/feature/appscaffold/ui/b$b;->a:Lcom/tidal/android/feature/appscaffold/ui/b$b;
invoke-interface {v0, v1}, Lem0/l;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
invoke-interface {v0, v1}, Lam0/l;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
return-void
.end method
@@ -174,7 +174,7 @@
# virtual methods
# Listens for MotionEvents
.method public final invoke(Landroid/view/MotionEvent;)Lkotlin/v;
.method public final invoke(Landroid/view/MotionEvent;)Lkotlin/u;
.locals 11
invoke-virtual {p1}, Landroid/view/MotionEvent;->getActionMasked()I
@@ -467,9 +467,9 @@
move-result v0
iget-object v1, p0, Lradiant/MiniPlayerGestures$Gesture;->a:Lem0/l;
iget-object v1, p0, Lradiant/MiniPlayerGestures$Gesture;->a:Lam0/l;
invoke-static {v1, v0}, Lradiant/MiniPlayerGestures;->completeSimpleSwipe(Lem0/l;F)Z
invoke-static {v1, v0}, Lradiant/MiniPlayerGestures;->completeSimpleSwipe(Lam0/l;F)Z
invoke-static {}, Lradiant/MiniPlayerGestures;->animateSwipeFeedbackReset()V
@@ -489,9 +489,9 @@
iget-object v0, p0, Lradiant/MiniPlayerGestures$Gesture;->f:Landroidx/compose/material3/SheetState;
iget-object v1, p0, Lradiant/MiniPlayerGestures$Gesture;->a:Lem0/l;
iget-object v1, p0, Lradiant/MiniPlayerGestures$Gesture;->a:Lam0/l;
invoke-static {v0, v1}, Lradiant/MiniPlayerGestures;->cancelDrag(Landroidx/compose/material3/SheetState;Lem0/l;)V
invoke-static {v0, v1}, Lradiant/MiniPlayerGestures;->cancelDrag(Landroidx/compose/material3/SheetState;Lam0/l;)V
goto :cancel_reset
@@ -503,7 +503,7 @@
:done
sget-object p1, Lkotlin/v;->a:Lkotlin/v;
sget-object p1, Lkotlin/u;->a:Lkotlin/u;
return-object p1
.end method
@@ -513,7 +513,7 @@
check-cast p1, Landroid/view/MotionEvent;
invoke-virtual {p0, p1}, Lradiant/MiniPlayerGestures$Gesture;->invoke(Landroid/view/MotionEvent;)Lkotlin/v;
invoke-virtual {p0, p1}, Lradiant/MiniPlayerGestures$Gesture;->invoke(Landroid/view/MotionEvent;)Lkotlin/u;
move-result-object p1
@@ -1,6 +1,6 @@
.class public final Lradiant/MiniPlayerGestures$RootGesture;
.super Ljava/lang/Object;
.implements Lem0/l;
.implements Lam0/l;
# annotations
@@ -15,18 +15,18 @@
# instance fields
.field public final a:Lem0/l;
.field public final a:Lam0/l;
.field public final b:Landroidx/compose/material3/SheetState;
# direct methods
.method public constructor <init>(Lem0/l;Landroidx/compose/material3/SheetState;)V
.method public constructor <init>(Lam0/l;Landroidx/compose/material3/SheetState;)V
.locals 0
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
iput-object p1, p0, Lradiant/MiniPlayerGestures$RootGesture;->a:Lem0/l;
iput-object p1, p0, Lradiant/MiniPlayerGestures$RootGesture;->a:Lam0/l;
iput-object p2, p0, Lradiant/MiniPlayerGestures$RootGesture;->b:Landroidx/compose/material3/SheetState;
@@ -35,7 +35,7 @@
# virtual methods
.method public final invoke(Landroid/view/MotionEvent;)Lkotlin/v;
.method public final invoke(Landroid/view/MotionEvent;)Lkotlin/u;
.locals 6
iget-object v0, p0, Lradiant/MiniPlayerGestures$RootGesture;->b:Landroidx/compose/material3/SheetState;
@@ -100,9 +100,9 @@
move-result v1
iget-object v2, p0, Lradiant/MiniPlayerGestures$RootGesture;->a:Lem0/l;
iget-object v2, p0, Lradiant/MiniPlayerGestures$RootGesture;->a:Lam0/l;
invoke-static {v2, v1}, Lradiant/MiniPlayerGestures;->completeSimpleSwipe(Lem0/l;F)Z
invoke-static {v2, v1}, Lradiant/MiniPlayerGestures;->completeSimpleSwipe(Lam0/l;F)Z
invoke-static {}, Lradiant/MiniPlayerGestures;->animateSwipeFeedbackReset()V
@@ -143,9 +143,9 @@
move-result v1
iget-object v2, p0, Lradiant/MiniPlayerGestures$RootGesture;->a:Lem0/l;
iget-object v2, p0, Lradiant/MiniPlayerGestures$RootGesture;->a:Lam0/l;
invoke-static {v0, v2, v1}, Lradiant/MiniPlayerGestures;->finishDrag(Landroidx/compose/material3/SheetState;Lem0/l;F)V
invoke-static {v0, v2, v1}, Lradiant/MiniPlayerGestures;->finishDrag(Landroidx/compose/material3/SheetState;Lam0/l;F)V
invoke-static {}, Lradiant/MiniPlayerGestures;->animateSwipeFeedbackReset()V
@@ -153,14 +153,14 @@
# ACTION_CANCEL
:cancel
iget-object v2, p0, Lradiant/MiniPlayerGestures$RootGesture;->a:Lem0/l;
iget-object v2, p0, Lradiant/MiniPlayerGestures$RootGesture;->a:Lam0/l;
invoke-static {v0, v2}, Lradiant/MiniPlayerGestures;->cancelDrag(Landroidx/compose/material3/SheetState;Lem0/l;)V
invoke-static {v0, v2}, Lradiant/MiniPlayerGestures;->cancelDrag(Landroidx/compose/material3/SheetState;Lam0/l;)V
invoke-static {}, Lradiant/MiniPlayerGestures;->animateSwipeFeedbackReset()V
:done
sget-object p1, Lkotlin/v;->a:Lkotlin/v;
sget-object p1, Lkotlin/u;->a:Lkotlin/u;
return-object p1
.end method
@@ -170,7 +170,7 @@
check-cast p1, Landroid/view/MotionEvent;
invoke-virtual {p0, p1}, Lradiant/MiniPlayerGestures$RootGesture;->invoke(Landroid/view/MotionEvent;)Lkotlin/v;
invoke-virtual {p0, p1}, Lradiant/MiniPlayerGestures$RootGesture;->invoke(Landroid/view/MotionEvent;)Lkotlin/u;
move-result-object p1
@@ -23,7 +23,7 @@
.field private static g:Landroidx/compose/material3/SheetState;
# Material3 settle lambda
.field private static h:Lem0/l;
.field private static h:Lam0/l;
# Latest MotionEvent eventTime for drag updates
.field private static i:J
@@ -51,7 +51,7 @@
.field private static r:Z
# AppScaffold context
.field private static s:Lem0/l;
.field private static s:Lam0/l;
.field private static t:Landroidx/compose/material3/SheetState;
@@ -321,7 +321,7 @@
sput-object v0, Lradiant/MiniPlayerGestures;->g:Landroidx/compose/material3/SheetState;
sput-object v0, Lradiant/MiniPlayerGestures;->h:Lem0/l;
sput-object v0, Lradiant/MiniPlayerGestures;->h:Lam0/l;
sput v0, Lradiant/MiniPlayerGestures;->d:F
@@ -437,7 +437,7 @@
return-void
.end method
.method public static cancelDrag(Landroidx/compose/material3/SheetState;Lem0/l;)V
.method public static cancelDrag(Landroidx/compose/material3/SheetState;Lam0/l;)V
.locals 1
invoke-static {p0}, Lradiant/MiniPlayerGestures;->isDragging(Landroidx/compose/material3/SheetState;)Z
@@ -450,13 +450,13 @@
sget-object p0, Lcom/tidal/android/feature/appscaffold/ui/b$a;->a:Lcom/tidal/android/feature/appscaffold/ui/b$a;
invoke-interface {p1, p0}, Lem0/l;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
invoke-interface {p1, p0}, Lam0/l;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
:done
return-void
.end method
.method public static finishDrag(Landroidx/compose/material3/SheetState;Lem0/l;F)V
.method public static finishDrag(Landroidx/compose/material3/SheetState;Lam0/l;F)V
.locals 6
invoke-static {p0}, Lradiant/MiniPlayerGestures;->isDragging(Landroidx/compose/material3/SheetState;)Z
@@ -469,7 +469,7 @@
if-ne v0, p0, :fallback_snap
sget-object v0, Lradiant/MiniPlayerGestures;->h:Lem0/l;
sget-object v0, Lradiant/MiniPlayerGestures;->h:Lam0/l;
if-eqz v0, :fallback_snap
@@ -485,7 +485,7 @@
move-result-object p0
invoke-interface {v0, p0}, Lem0/l;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
invoke-interface {v0, p0}, Lam0/l;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
goto/16 :done
@@ -589,7 +589,7 @@
sget-object p0, Lcom/tidal/android/feature/appscaffold/ui/b$a;->a:Lcom/tidal/android/feature/appscaffold/ui/b$a;
invoke-interface {p1, p0}, Lem0/l;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
invoke-interface {p1, p0}, Lam0/l;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
:done
return-void
@@ -748,10 +748,10 @@
return-void
.end method
.method public static configure(Lem0/l;Landroidx/compose/material3/SheetState;Z)V
.method public static configure(Lam0/l;Landroidx/compose/material3/SheetState;Z)V
.locals 0
sput-object p0, Lradiant/MiniPlayerGestures;->s:Lem0/l;
sput-object p0, Lradiant/MiniPlayerGestures;->s:Lam0/l;
sput-object p1, Lradiant/MiniPlayerGestures;->t:Landroidx/compose/material3/SheetState;
@@ -798,7 +798,7 @@
sget-object v0, Lradiant/MiniPlayerGestures$FeedbackLayer;->INSTANCE:Lradiant/MiniPlayerGestures$FeedbackLayer;
invoke-static {p0, v0}, Landroidx/compose/ui/graphics/GraphicsLayerModifierKt;->graphicsLayer(Landroidx/compose/ui/Modifier;Lem0/l;)Landroidx/compose/ui/Modifier;
invoke-static {p0, v0}, Landroidx/compose/ui/graphics/GraphicsLayerModifierKt;->graphicsLayer(Landroidx/compose/ui/Modifier;Lam0/l;)Landroidx/compose/ui/Modifier;
move-result-object p0
@@ -848,14 +848,14 @@
return p0
.end method
.method public static modifier(Landroidx/compose/ui/Modifier;Lem0/l;Landroidx/compose/material3/SheetState;Z)Landroidx/compose/ui/Modifier;
.method public static modifier(Landroidx/compose/ui/Modifier;Lam0/l;Landroidx/compose/material3/SheetState;Z)Landroidx/compose/ui/Modifier;
.locals 1
new-instance v0, Lradiant/MiniPlayerGestures$Gesture;
invoke-direct {v0, p1, p2, p3}, Lradiant/MiniPlayerGestures$Gesture;-><init>(Lem0/l;Landroidx/compose/material3/SheetState;Z)V
invoke-direct {v0, p1, p2, p3}, Lradiant/MiniPlayerGestures$Gesture;-><init>(Lam0/l;Landroidx/compose/material3/SheetState;Z)V
invoke-static {p0, v0}, Landroidx/compose/ui/input/pointer/PointerInteropFilter_androidKt;->motionEventSpy(Landroidx/compose/ui/Modifier;Lem0/l;)Landroidx/compose/ui/Modifier;
invoke-static {p0, v0}, Landroidx/compose/ui/input/pointer/PointerInteropFilter_androidKt;->motionEventSpy(Landroidx/compose/ui/Modifier;Lam0/l;)Landroidx/compose/ui/Modifier;
move-result-object p0
@@ -865,7 +865,7 @@
.method public static trackAreaModifier(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
.locals 3
sget-object v0, Lradiant/MiniPlayerGestures;->s:Lem0/l;
sget-object v0, Lradiant/MiniPlayerGestures;->s:Lam0/l;
if-eqz v0, :done
@@ -875,7 +875,7 @@
sget-boolean v2, Lradiant/MiniPlayerGestures;->u:Z
invoke-static {p0, v0, v1, v2}, Lradiant/MiniPlayerGestures;->modifier(Landroidx/compose/ui/Modifier;Lem0/l;Landroidx/compose/material3/SheetState;Z)Landroidx/compose/ui/Modifier;
invoke-static {p0, v0, v1, v2}, Lradiant/MiniPlayerGestures;->modifier(Landroidx/compose/ui/Modifier;Lam0/l;Landroidx/compose/material3/SheetState;Z)Landroidx/compose/ui/Modifier;
move-result-object p0
@@ -988,7 +988,7 @@
return-void
.end method
.method public static completeSimpleSwipe(Lem0/l;F)Z
.method public static completeSimpleSwipe(Lam0/l;F)Z
.locals 4
sget-boolean v0, Lradiant/MiniPlayerGestures;->u:Z
@@ -1035,7 +1035,7 @@
sget-object v0, Lcom/tidal/android/feature/appscaffold/ui/b$b;->a:Lcom/tidal/android/feature/appscaffold/ui/b$b;
invoke-interface {p0, v0}, Lem0/l;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
invoke-interface {p0, v0}, Lam0/l;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
const/4 v0, 0x1
@@ -1307,26 +1307,26 @@
return p0
.end method
.method public static rootModifier(Landroidx/compose/ui/Modifier;Lem0/l;Landroidx/compose/material3/SheetState;)Landroidx/compose/ui/Modifier;
.method public static rootModifier(Landroidx/compose/ui/Modifier;Lam0/l;Landroidx/compose/material3/SheetState;)Landroidx/compose/ui/Modifier;
.locals 1
new-instance v0, Lradiant/MiniPlayerGestures$RootGesture;
invoke-direct {v0, p1, p2}, Lradiant/MiniPlayerGestures$RootGesture;-><init>(Lem0/l;Landroidx/compose/material3/SheetState;)V
invoke-direct {v0, p1, p2}, Lradiant/MiniPlayerGestures$RootGesture;-><init>(Lam0/l;Landroidx/compose/material3/SheetState;)V
invoke-static {p0, v0}, Landroidx/compose/ui/input/pointer/PointerInteropFilter_androidKt;->motionEventSpy(Landroidx/compose/ui/Modifier;Lem0/l;)Landroidx/compose/ui/Modifier;
invoke-static {p0, v0}, Landroidx/compose/ui/input/pointer/PointerInteropFilter_androidKt;->motionEventSpy(Landroidx/compose/ui/Modifier;Lam0/l;)Landroidx/compose/ui/Modifier;
move-result-object p0
return-object p0
.end method
.method public static setSettleCallback(Landroidx/compose/material3/SheetState;Lem0/l;)V
.method public static setSettleCallback(Landroidx/compose/material3/SheetState;Lam0/l;)V
.locals 0
sput-object p0, Lradiant/MiniPlayerGestures;->g:Landroidx/compose/material3/SheetState;
sput-object p1, Lradiant/MiniPlayerGestures;->h:Lem0/l;
sput-object p1, Lradiant/MiniPlayerGestures;->h:Lam0/l;
return-void
.end method
@@ -1,6 +1,6 @@
.class public final Lradiant/MiniPlayerTrackGestures$Gesture;
.super Ljava/lang/Object;
.implements Lem0/l;
.implements Lam0/l;
# annotations
@@ -15,16 +15,16 @@
# instance fields
.field public final a:Lem0/l;
.field public final a:Lam0/l;
# direct methods
.method public constructor <init>(Lem0/l;)V
.method public constructor <init>(Lam0/l;)V
.locals 0
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
iput-object p1, p0, Lradiant/MiniPlayerTrackGestures$Gesture;->a:Lem0/l;
iput-object p1, p0, Lradiant/MiniPlayerTrackGestures$Gesture;->a:Lam0/l;
return-void
.end method
@@ -32,11 +32,11 @@
.method private nextTrack()V
.locals 2
iget-object v0, p0, Lradiant/MiniPlayerTrackGestures$Gesture;->a:Lem0/l;
iget-object v0, p0, Lradiant/MiniPlayerTrackGestures$Gesture;->a:Lam0/l;
sget-object v1, Lcom/tidal/android/feature/appscaffold/ui/s$a;->a:Lcom/tidal/android/feature/appscaffold/ui/s$a; # Tidal's built-in next track mini-player event
sget-object v1, Lcom/tidal/android/feature/appscaffold/ui/r$a;->a:Lcom/tidal/android/feature/appscaffold/ui/r$a; # Tidal's built-in next track mini-player event
invoke-interface {v0, v1}, Lem0/l;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
invoke-interface {v0, v1}, Lam0/l;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
return-void
.end method
@@ -44,18 +44,18 @@
.method private previousTrack()V
.locals 2
iget-object v0, p0, Lradiant/MiniPlayerTrackGestures$Gesture;->a:Lem0/l;
iget-object v0, p0, Lradiant/MiniPlayerTrackGestures$Gesture;->a:Lam0/l;
sget-object v1, Lcom/tidal/android/feature/appscaffold/ui/s$c;->a:Lcom/tidal/android/feature/appscaffold/ui/s$c; # Our synthetic previous track event
sget-object v1, Lcom/tidal/android/feature/appscaffold/ui/r$c;->a:Lcom/tidal/android/feature/appscaffold/ui/r$c; # Our synthetic previous track event
invoke-interface {v0, v1}, Lem0/l;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
invoke-interface {v0, v1}, Lam0/l;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
return-void
.end method
# virtual methods
.method public final invoke(Landroid/view/MotionEvent;)Lkotlin/v;
.method public final invoke(Landroid/view/MotionEvent;)Lkotlin/u;
.locals 3
invoke-virtual {p1}, Landroid/view/MotionEvent;->getActionMasked()I
@@ -132,7 +132,7 @@
invoke-static {}, Lradiant/MiniPlayerTrackGestures;->cancelDrag()V
:done
sget-object p1, Lkotlin/v;->a:Lkotlin/v;
sget-object p1, Lkotlin/u;->a:Lkotlin/u;
return-object p1
.end method
@@ -142,7 +142,7 @@
check-cast p1, Landroid/view/MotionEvent;
invoke-virtual {p0, p1}, Lradiant/MiniPlayerTrackGestures$Gesture;->invoke(Landroid/view/MotionEvent;)Lkotlin/v;
invoke-virtual {p0, p1}, Lradiant/MiniPlayerTrackGestures$Gesture;->invoke(Landroid/view/MotionEvent;)Lkotlin/u;
move-result-object p1
@@ -1,6 +1,6 @@
.class public final Lradiant/MiniPlayerTrackGestures$OffsetLayer;
.super Ljava/lang/Object;
.implements Lem0/l;
.implements Lam0/l;
# annotations
@@ -41,7 +41,7 @@
# virtual methods
.method public final invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)Lkotlin/v;
.method public final invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)Lkotlin/u;
.locals 1
sget-object v0, Lradiant/MiniPlayerTrackGestures;->b:Landroidx/compose/runtime/MutableFloatState;
@@ -52,7 +52,7 @@
invoke-interface {p1, v0}, Landroidx/compose/ui/graphics/GraphicsLayerScope;->setTranslationX(F)V
sget-object p1, Lkotlin/v;->a:Lkotlin/v;
sget-object p1, Lkotlin/u;->a:Lkotlin/u;
return-object p1
.end method
@@ -62,7 +62,7 @@
check-cast p1, Landroidx/compose/ui/graphics/GraphicsLayerScope;
invoke-virtual {p0, p1}, Lradiant/MiniPlayerTrackGestures$OffsetLayer;->invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)Lkotlin/v;
invoke-virtual {p0, p1}, Lradiant/MiniPlayerTrackGestures$OffsetLayer;->invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)Lkotlin/u;
move-result-object p1
@@ -1,6 +1,6 @@
.class public final Lradiant/MiniPlayerTrackGestures$TextDraw;
.super Ljava/lang/Object;
.implements Lem0/l;
.implements Lam0/l;
# annotations
@@ -41,7 +41,7 @@
# virtual methods
.method public final invoke(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)Lkotlin/v;
.method public final invoke(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)Lkotlin/u;
.locals 12
sget-object v0, Lradiant/MiniPlayerTrackGestures;->b:Landroidx/compose/runtime/MutableFloatState;
@@ -109,7 +109,7 @@
invoke-interface {v7, v8, v9}, Landroidx/compose/ui/graphics/drawscope/DrawContext;->setSize-uvyYCjk(J)V
sget-object p1, Lkotlin/v;->a:Lkotlin/v;
sget-object p1, Lkotlin/u;->a:Lkotlin/u;
return-object p1
@@ -132,7 +132,7 @@
check-cast p1, Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;
invoke-virtual {p0, p1}, Lradiant/MiniPlayerTrackGestures$TextDraw;->invoke(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)Lkotlin/v;
invoke-virtual {p0, p1}, Lradiant/MiniPlayerTrackGestures$TextDraw;->invoke(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)Lkotlin/u;
move-result-object p1
@@ -419,7 +419,7 @@
sget-object v0, Lradiant/MiniPlayerTrackGestures$OffsetLayer;->INSTANCE:Lradiant/MiniPlayerTrackGestures$OffsetLayer;
invoke-static {p0, v0}, Landroidx/compose/ui/graphics/GraphicsLayerModifierKt;->graphicsLayer(Landroidx/compose/ui/Modifier;Lem0/l;)Landroidx/compose/ui/Modifier;
invoke-static {p0, v0}, Landroidx/compose/ui/graphics/GraphicsLayerModifierKt;->graphicsLayer(Landroidx/compose/ui/Modifier;Lam0/l;)Landroidx/compose/ui/Modifier;
move-result-object p0
@@ -431,7 +431,7 @@
sget-object v0, Lradiant/MiniPlayerTrackGestures$TextDraw;->INSTANCE:Lradiant/MiniPlayerTrackGestures$TextDraw; # text clip on right only
invoke-static {p0, v0}, Landroidx/compose/ui/draw/DrawModifierKt;->drawWithContent(Landroidx/compose/ui/Modifier;Lem0/l;)Landroidx/compose/ui/Modifier;
invoke-static {p0, v0}, Landroidx/compose/ui/draw/DrawModifierKt;->drawWithContent(Landroidx/compose/ui/Modifier;Lam0/l;)Landroidx/compose/ui/Modifier;
move-result-object p0
@@ -590,14 +590,14 @@
return-void
.end method
.method public static trackModifier(Landroidx/compose/ui/Modifier;Lem0/l;)Landroidx/compose/ui/Modifier;
.method public static trackModifier(Landroidx/compose/ui/Modifier;Lam0/l;)Landroidx/compose/ui/Modifier;
.locals 1
new-instance v0, Lradiant/MiniPlayerTrackGestures$Gesture;
invoke-direct {v0, p1}, Lradiant/MiniPlayerTrackGestures$Gesture;-><init>(Lem0/l;)V
invoke-direct {v0, p1}, Lradiant/MiniPlayerTrackGestures$Gesture;-><init>(Lam0/l;)V
invoke-static {p0, v0}, Landroidx/compose/ui/input/pointer/PointerInteropFilter_androidKt;->motionEventSpy(Landroidx/compose/ui/Modifier;Lem0/l;)Landroidx/compose/ui/Modifier;
invoke-static {p0, v0}, Landroidx/compose/ui/input/pointer/PointerInteropFilter_androidKt;->motionEventSpy(Landroidx/compose/ui/Modifier;Lam0/l;)Landroidx/compose/ui/Modifier;
move-result-object p0
@@ -1,7 +1,7 @@
.class public final Lradiant/MiniSeekerFloating;
.super Ljava/lang/Object;
.implements Lem0/l;
.implements Lam0/l;
# static fields
@@ -46,7 +46,7 @@
.catch Ljava/lang/Throwable; {:try_start .. :try_end} :swallow
:swallow
sget-object v0, Lkotlin/v;->a:Lkotlin/v; # Unit
sget-object v0, Lkotlin/u;->a:Lkotlin/u; # Unit
return-object v0
.end method
+12 -12
View File
@@ -5,7 +5,7 @@
# static fields
.field public static progressState:Landroidx/compose/runtime/MutableFloatState;
.field public static volatile vm:Lih/g;
.field public static volatile vm:Lgh/j;
.field public static volatile sub:Lio/reactivex/disposables/Disposable;
@@ -57,7 +57,7 @@
:start_block
:try_start
sget-object v0, Lradiant/MiniSeekerLine;->vm:Lih/g; # cached vm
sget-object v0, Lradiant/MiniSeekerLine;->vm:Lgh/j; # cached vm
if-nez v0, :got_vm # reuse if present
@@ -69,28 +69,28 @@
move-result-object v0 # component
check-cast v0, Le5/u$n2; # narrow type
check-cast v0, Le5/z$n2; # narrow type
iget-object v0, v0, Le5/u$n2;->z0:Ldagger/internal/j; # playqueue provider
iget-object v0, v0, Le5/z$n2;->z0:Ldagger/internal/j; # playqueue provider
invoke-interface {v0}, Lul0/a;->get()Ljava/lang/Object; # resolve
invoke-interface {v0}, Lql0/a;->get()Ljava/lang/Object; # resolve
move-result-object v0 # playqueue
check-cast v0, Lcom/aspiro/wamp/playqueue/y0; # narrow type
check-cast v0, Lcom/aspiro/wamp/playqueue/d1; # narrow type
new-instance v1, Lih/g; # build vm
new-instance v1, Lgh/j; # build vm
invoke-direct {v1, v0}, Lih/g;-><init>(Lcom/aspiro/wamp/playqueue/y0;)V # ctor
invoke-direct {v1, v0}, Lgh/j;-><init>(Lcom/aspiro/wamp/playqueue/d1;)V # ctor
sput-object v1, Lradiant/MiniSeekerLine;->vm:Lih/g; # cache
sput-object v1, Lradiant/MiniSeekerLine;->vm:Lgh/j; # cache
:got_vm
sget-object v0, Lradiant/MiniSeekerLine;->vm:Lih/g; # vm ref
sget-object v0, Lradiant/MiniSeekerLine;->vm:Lgh/j; # vm ref
invoke-virtual {v0}, Lih/g;->a()V # activate emission
invoke-virtual {v0}, Lgh/j;->a()V # activate emission
iget-object v0, v0, Lih/g;->d:Lio/reactivex/subjects/BehaviorSubject; # position subject
iget-object v0, v0, Lgh/j;->d:Lio/reactivex/subjects/BehaviorSubject; # position subject
invoke-static {}, Lio/reactivex/android/schedulers/AndroidSchedulers;->mainThread()Lio/reactivex/Scheduler; # main scheduler
+2 -2
View File
@@ -1,6 +1,6 @@
.class public final Lradiant/NoOp;
.super Ljava/lang/Object;
.implements Lem0/a;
.implements Lam0/a;
# static fields
@@ -33,7 +33,7 @@
.method public final invoke()Ljava/lang/Object;
.locals 1
sget-object v0, Lkotlin/v;->a:Lkotlin/v;
sget-object v0, Lkotlin/u;->a:Lkotlin/u;
return-object v0
.end method
+6 -6
View File
@@ -85,15 +85,15 @@
return-object p0
.end method
.method public static style(ILr20/c2;)Lr20/c2;
.method public static style(ILq20/c2;)Lq20/c2;
.registers 16
invoke-static {p0}, Lradiant/QualityBadge;->textArgb(I)I
move-result v0
new-instance v1, Lg20/a;
invoke-direct {v1, v0}, Lg20/a;-><init>(I)V
new-instance v0, Lg20/d;
new-instance v1, Lf20/a;
invoke-direct {v1, v0}, Lf20/a;-><init>(I)V
new-instance v0, Lf20/d;
const/4 v2, 0x0
const/4 v3, 0x0
const/4 v4, 0x0
@@ -107,7 +107,7 @@
const/4 v12, 0x0
const/16 v13, 0xffe
const/4 v14, 0x0
invoke-direct/range {v0 .. v14}, Lg20/d;-><init>(Lg20/a;Lg20/a;Lg20/a;Lg20/a;Lg20/a;Lg20/a;Lg20/a;Lg20/a;Lg20/a;Lg20/a;Lg20/a;Lg20/a;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
invoke-direct/range {v0 .. v14}, Lf20/d;-><init>(Lf20/a;Lf20/a;Lf20/a;Lf20/a;Lf20/a;Lf20/a;Lf20/a;Lf20/a;Lf20/a;Lf20/a;Lf20/a;Lf20/a;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
move-object v9, v0
move-object/from16 v0, p1
@@ -118,7 +118,7 @@
const/4 v5, 0x0
const/16 v6, 0x1d
const/4 v7, 0x0
invoke-static/range {v0 .. v7}, Lr20/c2;->g(Lr20/c2;Lr20/s4;Lg20/d;Lcom/squareup/ui/market/core/text/MarketTextAlignment;Lcom/squareup/ui/market/core/text/MarketTextTransform;Lr20/r4;ILjava/lang/Object;)Lr20/c2;
invoke-static/range {v0 .. v7}, Lq20/c2;->g(Lq20/c2;Lq20/s4;Lf20/d;Lcom/squareup/ui/market/core/text/MarketTextAlignment;Lcom/squareup/ui/market/core/text/MarketTextTransform;Lq20/r4;ILjava/lang/Object;)Lq20/c2;
move-result-object p0
return-object p0
.end method
+126 -19
View File
@@ -5,8 +5,12 @@
# static fields
.field public static volatile currentKey:Ljava/lang/String;
.field public static volatile currentVm:Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;
.field public static volatile isRlState:Z
.field public static volatile keepOpen:Z
# direct methods
.method static constructor <clinit>()V
@@ -16,8 +20,12 @@
sput-object v0, Lradiant/RLAPILyricsHook;->currentKey:Ljava/lang/String;
sput-object v0, Lradiant/RLAPILyricsHook;->currentVm:Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;
sput-boolean v0, Lradiant/RLAPILyricsHook;->isRlState:Z
sput-boolean v0, Lradiant/RLAPILyricsHook;->keepOpen:Z
return-void
.end method
@@ -60,6 +68,45 @@
return v1
.end method
.method public static isOwner(Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;)Z
.locals 2
sget-object v0, Lradiant/RLAPILyricsHook;->currentVm:Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;
if-ne p0, v0, :not_owner
sget-boolean v1, Lradiant/RLAPILyricsHook;->isRlState:Z
return v1
:not_owner
const/4 v1, 0x0
return v1
.end method
.method public static shouldKeepOpen(Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;)Z
.locals 2
sget-object v0, Lradiant/RLAPILyricsHook;->currentVm:Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;
if-ne p0, v0, :do_not_keep
sget-boolean v1, Lradiant/RLAPILyricsHook;->keepOpen:Z
if-nez v1, :keep
sget-boolean v1, Lradiant/RLAPILyricsHook;->isRlState:Z
:keep
return v1
:do_not_keep
const/4 v1, 0x0
return v1
.end method
.method public static onWampTrack(Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;Lcom/aspiro/wamp/model/Track;)V
.locals 11
@@ -80,7 +127,7 @@
invoke-static {v3}, Lradiant/RLAPILyricsHook;->dlog(Ljava/lang/String;)V
return-void
goto :invalid_track
:have_track
invoke-virtual {p1}, Lcom/aspiro/wamp/model/MediaItem;->getTitle()Ljava/lang/String;
@@ -93,7 +140,7 @@
invoke-static {v3}, Lradiant/RLAPILyricsHook;->dlog(Ljava/lang/String;)V
return-void
goto :invalid_track
:title_present
invoke-static {v1}, Lradiant/RLAPILyricsHook;->isBlank(Ljava/lang/String;)Z
@@ -106,20 +153,34 @@
invoke-static {v3}, Lradiant/RLAPILyricsHook;->dlog(Ljava/lang/String;)V
return-void
goto :invalid_track
:title_ok
# match desktop: primary artist name (artist?.name), fall back to the joined list
invoke-virtual {p1}, Lcom/aspiro/wamp/model/MediaItem;->getArtist()Lcom/aspiro/wamp/model/Artist;
move-result-object v3
if-eqz v3, :use_artist_names
invoke-virtual {v3}, Lcom/aspiro/wamp/model/Artist;->getName()Ljava/lang/String;
move-result-object v2
if-nez v2, :artist_present
:use_artist_names
invoke-virtual {p1}, Lcom/aspiro/wamp/model/MediaItem;->getArtistNames()Ljava/lang/String;
move-result-object v2
if-nez v2, :artist_present
const-string v3, "bail: getArtistNames() returned null"
const-string v3, "bail: artist name null"
invoke-static {v3}, Lradiant/RLAPILyricsHook;->dlog(Ljava/lang/String;)V
return-void
goto :invalid_track
:artist_present
invoke-static {v2}, Lradiant/RLAPILyricsHook;->isBlank(Ljava/lang/String;)Z
@@ -132,24 +193,14 @@
invoke-static {v3}, Lradiant/RLAPILyricsHook;->dlog(Ljava/lang/String;)V
return-void
goto :invalid_track
:artist_ok
const-string v3, ""
invoke-virtual {p1}, Lcom/aspiro/wamp/model/MediaItem;->getId()I
new-instance v4, Ljava/lang/StringBuilder;
move-result v3
invoke-direct {v4}, Ljava/lang/StringBuilder;-><init>()V
invoke-virtual {v4, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
const-string v5, "|"
invoke-virtual {v4, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v4, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v4}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
invoke-static {v3}, Ljava/lang/String;->valueOf(I)Ljava/lang/String;
move-result-object v4
@@ -161,6 +212,10 @@
if-eqz v5, :rl_new_track
sget-object v5, Lradiant/RLAPILyricsHook;->currentVm:Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;
if-ne p0, v5, :rl_new_track
const-string v5, "onWampTrack: same track re-fired, skipping duplicate fetch"
invoke-static {v5}, Lradiant/RLAPILyricsHook;->dlog(Ljava/lang/String;)V
@@ -168,12 +223,51 @@
return-void
:rl_new_track
iget-object v5, p0, Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;->P:Lkotlinx/coroutines/flow/MutableStateFlow;
invoke-interface {v5}, Lkotlinx/coroutines/flow/MutableStateFlow;->getValue()Ljava/lang/Object;
move-result-object v5
check-cast v5, Ljava/lang/Boolean;
invoke-virtual {v5}, Ljava/lang/Boolean;->booleanValue()Z
move-result v5
if-nez v5, :store_keep_open
sget-object v6, Lradiant/RLAPILyricsHook;->currentVm:Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;
if-eqz v6, :store_keep_open
if-eq p0, v6, :store_keep_open
iget-object v7, v6, Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;->P:Lkotlinx/coroutines/flow/MutableStateFlow;
invoke-interface {v7}, Lkotlinx/coroutines/flow/MutableStateFlow;->getValue()Ljava/lang/Object;
move-result-object v7
check-cast v7, Ljava/lang/Boolean;
invoke-virtual {v7}, Ljava/lang/Boolean;->booleanValue()Z
move-result v5
:store_keep_open
sput-boolean v5, Lradiant/RLAPILyricsHook;->keepOpen:Z
const/4 v5, 0x0
sput-boolean v5, Lradiant/RLAPILyricsHook;->isRlState:Z
sput-object v4, Lradiant/RLAPILyricsHook;->currentKey:Ljava/lang/String;
sput-object p0, Lradiant/RLAPILyricsHook;->currentVm:Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;
move-object v3, v4
new-instance v5, Ljava/lang/StringBuilder;
const-string v6, "onWampTrack: fetching for title='"
@@ -222,6 +316,19 @@
invoke-virtual {v6}, Ljava/lang/Thread;->start()V
goto :done
:invalid_track
const/4 v3, 0x0
sput-boolean v3, Lradiant/RLAPILyricsHook;->isRlState:Z
sput-boolean v3, Lradiant/RLAPILyricsHook;->keepOpen:Z
sput-object v3, Lradiant/RLAPILyricsHook;->currentKey:Ljava/lang/String;
sput-object p0, Lradiant/RLAPILyricsHook;->currentVm:Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;
:done
return-void
.end method
+375 -44
View File
@@ -14,6 +14,8 @@
.field public final lyricsId:Ljava/lang/String;
.field public static volatile clientIp:Ljava/lang/String;
# direct methods
.method public constructor <init>(Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
@@ -34,6 +36,181 @@
return-void
.end method
.method private failCurrent()V
.locals 4
invoke-direct {p0}, Lradiant/RLAPILyricsWorker;->isCurrent()Z
move-result v0
if-eqz v0, :done
invoke-static {}, Lradiant/WordLyrics;->clear()V
const/4 v0, 0x0
sput-object v0, Lradiant/RLAPILyricsHook;->currentKey:Ljava/lang/String;
sput-boolean v0, Lradiant/RLAPILyricsHook;->isRlState:Z
sget-boolean v0, Lradiant/StickyLyrics;->enabled:Z
if-nez v0, :done
sget-boolean v0, Lradiant/RLAPILyricsHook;->keepOpen:Z
if-nez v0, :done
iget-object v1, p0, Lradiant/RLAPILyricsWorker;->vm:Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;
iget-object v2, v1, Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;->P:Lkotlinx/coroutines/flow/MutableStateFlow;
sget-object v3, Ljava/lang/Boolean;->FALSE:Ljava/lang/Boolean;
invoke-interface {v2, v3}, Lkotlinx/coroutines/flow/MutableStateFlow;->setValue(Ljava/lang/Object;)V
:done
return-void
.end method
.method private isCurrent()Z
.locals 4
iget-object v0, p0, Lradiant/RLAPILyricsWorker;->vm:Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;
sget-object v1, Lradiant/RLAPILyricsHook;->currentVm:Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;
if-ne v0, v1, :not_current
iget-object v1, v0, Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;->a:Lbi/e;
invoke-interface {v1}, Lbi/e;->getCurrentItem()Lcom/aspiro/wamp/playqueue/u0;
move-result-object v1
if-eqz v1, :not_current
invoke-interface {v1}, Lcom/aspiro/wamp/playqueue/u0;->getMediaItem()Lcom/aspiro/wamp/model/MediaItem;
move-result-object v1
if-eqz v1, :not_current
invoke-virtual {v1}, Lcom/aspiro/wamp/model/MediaItem;->getId()I
move-result v2
invoke-static {v2}, Ljava/lang/String;->valueOf(I)Ljava/lang/String;
move-result-object v1
iget-object v2, p0, Lradiant/RLAPILyricsWorker;->key:Ljava/lang/String;
invoke-virtual {v2, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v3
return v3
:not_current
const/4 v3, 0x0
return v3
.end method
# Public client IP (needed for debugging with ratelimits)
.method static clientIp()Ljava/lang/String;
.locals 6
sget-object v0, Lradiant/RLAPILyricsWorker;->clientIp:Ljava/lang/String;
if-eqz v0, :fetch
return-object v0
:fetch
:try_start
new-instance v0, Ljava/net/URL;
const-string v1, "https://api.ipify.org?format=text"
invoke-direct {v0, v1}, Ljava/net/URL;-><init>(Ljava/lang/String;)V
invoke-virtual {v0}, Ljava/net/URL;->openConnection()Ljava/net/URLConnection;
move-result-object v0
check-cast v0, Ljava/net/HttpURLConnection;
const/16 v1, 0x5dc
invoke-virtual {v0, v1}, Ljava/net/URLConnection;->setConnectTimeout(I)V
invoke-virtual {v0, v1}, Ljava/net/URLConnection;->setReadTimeout(I)V
invoke-virtual {v0}, Ljava/net/HttpURLConnection;->getResponseCode()I
move-result v1
const/16 v2, 0xc8
if-eq v1, v2, :ok
invoke-virtual {v0}, Ljava/net/HttpURLConnection;->disconnect()V
goto :fail
:ok
invoke-virtual {v0}, Ljava/net/HttpURLConnection;->getInputStream()Ljava/io/InputStream;
move-result-object v1
new-instance v2, Ljava/io/InputStreamReader;
const-string v3, "UTF-8"
invoke-direct {v2, v1, v3}, Ljava/io/InputStreamReader;-><init>(Ljava/io/InputStream;Ljava/lang/String;)V
new-instance v3, Ljava/io/BufferedReader;
invoke-direct {v3, v2}, Ljava/io/BufferedReader;-><init>(Ljava/io/Reader;)V
invoke-virtual {v3}, Ljava/io/BufferedReader;->readLine()Ljava/lang/String;
move-result-object v4
invoke-virtual {v3}, Ljava/io/BufferedReader;->close()V
invoke-virtual {v0}, Ljava/net/HttpURLConnection;->disconnect()V
if-eqz v4, :fail
invoke-virtual {v4}, Ljava/lang/String;->trim()Ljava/lang/String;
move-result-object v4
invoke-virtual {v4}, Ljava/lang/String;->isEmpty()Z
move-result v5
if-nez v5, :fail
sput-object v4, Lradiant/RLAPILyricsWorker;->clientIp:Ljava/lang/String;
return-object v4
:try_end
.catchall {:try_start .. :try_end} :catch_all
:catch_all
move-exception v0
:fail
const-string v0, "null"
return-object v0
.end method
.method public static fetch(Ljava/lang/String;Z)Ljava/lang/String;
.locals 7
@@ -56,6 +233,8 @@
invoke-virtual {v0, v1}, Ljava/net/URLConnection;->setConnectTimeout(I)V
const v1, 0xafc8
invoke-virtual {v0, v1}, Ljava/net/URLConnection;->setReadTimeout(I)V
if-eqz p1, :no_auth
@@ -74,7 +253,9 @@
const-string v1, "x-client-ip"
const-string v2, "null"
invoke-static {}, Lradiant/RLAPILyricsWorker;->clientIp()Ljava/lang/String;
move-result-object v2
invoke-virtual {v0, v1, v2}, Ljava/net/URLConnection;->setRequestProperty(Ljava/lang/String;Ljava/lang/String;)V
@@ -313,20 +494,168 @@
return-object v1
.end method
# Returns "&isrc=<enc>" for the current track
.method private isrcParam()Ljava/lang/String;
.locals 6
iget-object v0, p0, Lradiant/RLAPILyricsWorker;->key:Ljava/lang/String;
const/4 v1, 0x0
:loop
invoke-static {v0}, Lradiant/IsrcCache;->get(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
if-eqz v2, :retry
invoke-virtual {v2}, Ljava/lang/String;->trim()Ljava/lang/String;
move-result-object v2
invoke-virtual {v2}, Ljava/lang/String;->isEmpty()Z
move-result v3
if-nez v3, :retry
:try_enc_start
invoke-static {v2}, Lradiant/RLAPILyricsWorker;->uric(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
:try_enc_end
.catchall {:try_enc_start .. :try_enc_end} :enc_fail
:enc_done
new-instance v3, Ljava/lang/StringBuilder;
const-string v4, "&isrc="
invoke-direct {v3, v4}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v3, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v2
return-object v2
:enc_fail
move-exception v3
goto :enc_done
:retry
# keep waiting for TIDAL's mapper to cache the ISRC while this track is still current
invoke-direct {p0}, Lradiant/RLAPILyricsWorker;->isCurrent()Z
move-result v3
if-eqz v3, :giveup
const/16 v3, 0x28
if-ge v1, v3, :giveup
:try_sleep_start
const-wide/16 v3, 0x64
invoke-static {v3, v4}, Ljava/lang/Thread;->sleep(J)V
:try_sleep_end
.catchall {:try_sleep_start .. :try_sleep_end} :sleep_catch
:sleep_done
add-int/lit8 v1, v1, 0x1
goto :loop
:sleep_catch
move-exception v3
goto :sleep_done
:giveup
const-string v0, ""
return-object v0
.end method
# URL-encode like JS encodeURIComponent (so requests are byte identical to the desktop plugin)
.method static uric(Ljava/lang/String;)Ljava/lang/String;
.locals 3
const-string v0, "UTF-8"
invoke-static {p0, v0}, Ljava/net/URLEncoder;->encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
move-result-object v0
const-string v1, "+"
const-string v2, "%20"
invoke-virtual {v0, v1, v2}, Ljava/lang/String;->replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
move-result-object v0
const-string v1, "%21"
const-string v2, "!"
invoke-virtual {v0, v1, v2}, Ljava/lang/String;->replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
move-result-object v0
const-string v1, "%27"
const-string v2, "\'"
invoke-virtual {v0, v1, v2}, Ljava/lang/String;->replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
move-result-object v0
const-string v1, "%28"
const-string v2, "("
invoke-virtual {v0, v1, v2}, Ljava/lang/String;->replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
move-result-object v0
const-string v1, "%29"
const-string v2, ")"
invoke-virtual {v0, v1, v2}, Ljava/lang/String;->replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
move-result-object v0
const-string v1, "%7E"
const-string v2, "~"
invoke-virtual {v0, v1, v2}, Ljava/lang/String;->replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;
move-result-object v0
return-object v0
.end method
.method private runImpl()V
.locals 11
.locals 13
iget-object v0, p0, Lradiant/RLAPILyricsWorker;->title:Ljava/lang/String;
const-string v1, "UTF-8"
invoke-static {v0, v1}, Ljava/net/URLEncoder;->encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
invoke-static {v0}, Lradiant/RLAPILyricsWorker;->uric(Ljava/lang/String;)Ljava/lang/String;
move-result-object v0
iget-object v2, p0, Lradiant/RLAPILyricsWorker;->artist:Ljava/lang/String;
invoke-static {v2, v1}, Ljava/net/URLEncoder;->encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
invoke-static {v2}, Lradiant/RLAPILyricsWorker;->uric(Ljava/lang/String;)Ljava/lang/String;
move-result-object v1
@@ -344,6 +673,12 @@
invoke-virtual {v2, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-direct {p0}, Lradiant/RLAPILyricsWorker;->isrcParam()Ljava/lang/String;
move-result-object v0
invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
const-string v0, "&platform=rl-mobile"
invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
@@ -396,32 +731,11 @@
invoke-static {v4}, Lradiant/RLAPILyricsHook;->dlog(Ljava/lang/String;)V
iget-object v4, p0, Lradiant/RLAPILyricsWorker;->key:Ljava/lang/String;
sget-object v5, Lradiant/RLAPILyricsHook;->currentKey:Ljava/lang/String;
invoke-virtual {v4, v5}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v4
if-eqz v4, :no_close # Smthn needed to keep lyrics open
sget-boolean v4, Lradiant/StickyLyrics;->enabled:Z
if-nez v4, :no_close
iget-object v4, p0, Lradiant/RLAPILyricsWorker;->vm:Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;
iget-object v5, v4, Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;->O:Lkotlinx/coroutines/flow/MutableStateFlow;
sget-object v6, Ljava/lang/Boolean;->FALSE:Ljava/lang/Boolean;
invoke-interface {v5, v6}, Lkotlinx/coroutines/flow/MutableStateFlow;->setValue(Ljava/lang/Object;)V
:no_close
return-void
goto :request_failed
:got_body
move-object v11, v3
invoke-static {v3}, Lradiant/RLAPILyricsWorker;->parseLines(Ljava/lang/String;)Ljava/util/ArrayList;
move-result-object v3
@@ -432,7 +746,7 @@
invoke-static {v4}, Lradiant/RLAPILyricsHook;->dlog(Ljava/lang/String;)V
return-void
goto :request_failed
:parse_ok
invoke-virtual {v3}, Ljava/util/ArrayList;->size()I
@@ -445,7 +759,7 @@
invoke-static {v5}, Lradiant/RLAPILyricsHook;->dlog(Ljava/lang/String;)V
return-void
goto :request_failed
:nonempty
new-instance v5, Ljava/lang/StringBuilder;
@@ -466,11 +780,7 @@
invoke-static {v5}, Lradiant/RLAPILyricsHook;->dlog(Ljava/lang/String;)V
iget-object v4, p0, Lradiant/RLAPILyricsWorker;->key:Ljava/lang/String;
sget-object v5, Lradiant/RLAPILyricsHook;->currentKey:Ljava/lang/String;
invoke-virtual {v4, v5}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
invoke-direct {p0}, Lradiant/RLAPILyricsWorker;->isCurrent()Z
move-result v4
@@ -483,11 +793,13 @@
return-void
:key_ok
invoke-static {v11}, Lradiant/WordLyrics;->ingest(Ljava/lang/String;)V
iget-object v4, p0, Lradiant/RLAPILyricsWorker;->vm:Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;
iget-object v5, v4, Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;->N:Lkotlinx/coroutines/flow/MutableStateFlow;
iget-object v5, v4, Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;->O:Lkotlinx/coroutines/flow/MutableStateFlow;
invoke-static {v3}, Lzn0/a;->c(Ljava/lang/Iterable;)Lzn0/b;
invoke-static {v3}, Lvn0/a;->c(Ljava/lang/Iterable;)Lvn0/b;
move-result-object v6
@@ -504,7 +816,7 @@
const/4 v10, 0x0
invoke-direct {v8, v7, v6, v9, v10}, Lcom/tidal/android/feature/playerscreen/ui/g$c;-><init>(Ljava/lang/String;Lzn0/b;IZ)V
invoke-direct {v8, v7, v6, v9, v10}, Lcom/tidal/android/feature/playerscreen/ui/g$c;-><init>(Ljava/lang/String;Lvn0/b;IZ)V
const-string v6, "publishing g$c -> K=true (O=true if sticky) N=g$c"
@@ -512,6 +824,8 @@
const/4 v6, 0x1
invoke-interface {v5, v8}, Lkotlinx/coroutines/flow/MutableStateFlow;->setValue(Ljava/lang/Object;)V
sput-boolean v6, Lradiant/RLAPILyricsHook;->isRlState:Z
iget-object v6, v4, Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;->K:Lkotlinx/coroutines/flow/MutableStateFlow;
@@ -520,25 +834,34 @@
invoke-interface {v6, v7}, Lkotlinx/coroutines/flow/MutableStateFlow;->setValue(Ljava/lang/Object;)V
sget-boolean v9, Lradiant/RLAPILyricsHook;->keepOpen:Z
if-nez v9, :open_lyrics
sget-boolean v9, Lradiant/StickyLyrics;->enabled:Z
if-eqz v9, :skip_n
iget-object v6, v4, Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;->O:Lkotlinx/coroutines/flow/MutableStateFlow;
:open_lyrics
iget-object v6, v4, Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;->P:Lkotlinx/coroutines/flow/MutableStateFlow;
invoke-interface {v6, v7}, Lkotlinx/coroutines/flow/MutableStateFlow;->setValue(Ljava/lang/Object;)V
:skip_n
invoke-interface {v5, v8}, Lkotlinx/coroutines/flow/MutableStateFlow;->setValue(Ljava/lang/Object;)V
:done
return-void
:request_failed
invoke-direct {p0}, Lradiant/RLAPILyricsWorker;->failCurrent()V
return-void
.end method
# virtual methods
.method public run()V
.locals 1
.locals 2
:try_start
invoke-direct {p0}, Lradiant/RLAPILyricsWorker;->runImpl()V
@@ -551,5 +874,13 @@
:catch_all
move-exception v0
invoke-virtual {v0}, Ljava/lang/Throwable;->toString()Ljava/lang/String;
move-result-object v1
invoke-static {v1}, Lradiant/RLAPILyricsHook;->dlog(Ljava/lang/String;)V
invoke-direct {p0}, Lradiant/RLAPILyricsWorker;->failCurrent()V
return-void
.end method
@@ -20,13 +20,13 @@
if-eqz p1, :ret # null guard
instance-of v0, p1, Lih/b; # type guard
instance-of v0, p1, Lgh/b; # type guard
if-eqz v0, :ret # skip if wrong type
check-cast p1, Lih/b; # narrow type
check-cast p1, Lgh/b; # narrow type
iget v0, p1, Lih/b;->b:F # raw progress
iget v0, p1, Lgh/b;->b:F # raw progress
invoke-static {v0}, Ljava/lang/Float;->isNaN(F)Z # nan check
@@ -4,7 +4,7 @@
# direct methods
.method public static final a(ILandroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;Lem0/a;)V
.method public static final a(ILandroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;Lam0/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/y;->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/z;->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;)Lr20/u1;
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;)Lq20/u1;
move-result-object v4
@@ -140,7 +140,7 @@
:cond_5
move-object v9, v4
check-cast v9, Lr20/u1;
check-cast v9, Lq20/u1;
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(Lem0/a;Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLcom/squareup/ui/market/components/n;Lem0/a;Ljava/lang/String;Lr20/u1;Lem0/p;Landroidx/compose/runtime/Composer;II)V
invoke-static/range {v1 .. v13}, Lcom/squareup/ui/market/components/MarketIconButtonKt;->b(Lam0/a;Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLcom/squareup/ui/market/components/n;Lam0/a;Ljava/lang/String;Lq20/u1;Lam0/p;Landroidx/compose/runtime/Composer;II)V
invoke-static {}, Landroidx/compose/runtime/ComposerKt;->isTraceInProgress()Z
@@ -3,7 +3,7 @@
.source "SourceFile"
# interfaces
.implements Lem0/p;
.implements Lam0/p;
# virtual methods
@@ -35,7 +35,7 @@
invoke-static {v0, p2, v1, v2}, Landroidx/compose/runtime/ComposerKt;->traceEventStart(IIILjava/lang/String;)V
:cond_0
const p2, 0x7f080521
const p2, 0x7f080522
const/4 v0, 0x0
+1 -1
View File
@@ -1,6 +1,6 @@
.class public final Lradiant/SpvFactory;
.super Ljava/lang/Object;
.implements Lem0/l;
.implements Lam0/l;
# static fields
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,21 @@
.class public final Lradiant/WordLyricsTick;
.super Ljava/lang/Object;
.implements Ljava/lang/Runnable;
# 50ms clock tick driver for word level lyrics highlighting
.method public constructor <init>()V
.locals 0
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method public run()V
.locals 0
invoke-static {}, Lradiant/WordLyrics;->tick()V
return-void
.end method
+8 -8
View File
@@ -1,16 +1,16 @@
--- a/com/tidal/android/feature/home/ui/k.smali
+++ b/com/tidal/android/feature/home/ui/k.smali
@@ -427,7 +427,7 @@
@@ -424,7 +424,7 @@
const/4 v6, 0x0
.line 182
- move-wide v7, v9
.line 181
- move-wide v7, v8
+ const-wide/16 v7, 0x0 # transparent containerColor
.line 183
.line 182
const-wide/16 v9, 0x0
--- a/com/tidal/android/feature/home/ui/n.smali
+++ b/com/tidal/android/feature/home/ui/n.smali
--- a/com/tidal/android/feature/home/ui/o.smali
+++ b/com/tidal/android/feature/home/ui/o.smali
@@ -187,6 +187,10 @@
.line 61
.line 62
@@ -22,8 +22,8 @@
invoke-interface {p1}, Landroidx/compose/foundation/layout/PaddingValues;->calculateTopPadding-D9Ej5fM()F
.line 63
--- a/com/tidal/android/feature/home/ui/composables/f.smali
+++ b/com/tidal/android/feature/home/ui/composables/f.smali
--- a/com/tidal/android/feature/home/ui/composables/g.smali
+++ b/com/tidal/android/feature/home/ui/composables/g.smali
@@ -790,6 +790,8 @@
.line 104
move-result-wide v14
+3 -3
View File
@@ -1,5 +1,5 @@
--- a/ob/e.smali
+++ b/ob/e.smali
--- a/mb/f.smali
+++ b/mb/f.smali
@@ -613,6 +613,25 @@
.line 236
@@ -52,4 +52,4 @@
+
.line 306
.line 307
iget-object v1, v0, Lob/e;->c:Ljava/util/Map;
iget-object v1, v0, Lmb/f;->c:Ljava/util/Map;
+4 -4
View File
@@ -1,5 +1,5 @@
--- a/com/tidal/android/feature/playerscreen/ui/v0.smali
+++ b/com/tidal/android/feature/playerscreen/ui/v0.smali
--- a/com/tidal/android/feature/playerscreen/ui/b0.smali
+++ b/com/tidal/android/feature/playerscreen/ui/b0.smali
@@ -669,8 +669,23 @@
move-object v5, v1
@@ -8,7 +8,7 @@
+
+ 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/v0;->b:Lcom/tidal/android/feature/playerscreen/ui/s$a; # player state
+ iget-object v1, v0, Lcom/tidal/android/feature/playerscreen/ui/b0;->b:Lcom/tidal/android/feature/playerscreen/ui/s$a; # player state
+
+ iget-object v1, v1, Lcom/tidal/android/feature/playerscreen/ui/s$a;->j:Lcom/tidal/android/feature/playerscreen/ui/g; # current view mode
+
@@ -16,7 +16,7 @@
+
+ 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;Lem0/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;Lam0/l;FLandroidx/compose/ui/Modifier;ZLandroidx/compose/runtime/Composer;II)V
+ :radiant_after_cover # skip target
+ invoke-interface {v7}, Landroidx/compose/runtime/Composer;->endReplaceGroup()V # close group
+3 -3
View File
@@ -1,10 +1,10 @@
--- a/com/tidal/android/feature/playerscreen/ui/composables/l1.smali
+++ b/com/tidal/android/feature/playerscreen/ui/composables/l1.smali
--- a/com/tidal/android/feature/playerscreen/ui/composables/o1.smali
+++ b/com/tidal/android/feature/playerscreen/ui/composables/o1.smali
@@ -64,7 +64,7 @@
.line 16
.line 17
- iget v2, p0, Lcom/tidal/android/feature/playerscreen/ui/composables/l1;->a:F
- iget v2, p0, Lcom/tidal/android/feature/playerscreen/ui/composables/o1;->a:F
+ const/high16 v2, 0x43200000 # 160f start dp
.line 18
+11 -10
View File
@@ -1,30 +1,31 @@
--- a/com/tidal/android/feature/playerscreen/ui/PlayerScreenKt$PlayerScreenPortrait$2$1.smali
+++ b/com/tidal/android/feature/playerscreen/ui/PlayerScreenKt$PlayerScreenPortrait$2$1.smali
@@ -228,11 +228,11 @@
.line 23
.line 24
iget-boolean p1, p0, Lcom/tidal/android/feature/playerscreen/ui/PlayerScreenKt$PlayerScreenPortrait$2$1;->$isLyricsVisible:Z
@@ -231,7 +231,7 @@
.line 25
.line 26
- if-eqz p1, :cond_3
+ goto :cond_3 # skip auto-hide branch
.line 27
.line 28
iput v2, p0, Lcom/tidal/android/feature/playerscreen/ui/PlayerScreenKt$PlayerScreenPortrait$2$1;->label:I
--- a/com/tidal/android/feature/playerscreen/ui/PlayerViewModel.smali
+++ b/com/tidal/android/feature/playerscreen/ui/PlayerViewModel.smali
@@ -1299,6 +1299,14 @@
@@ -1382,6 +1382,19 @@
.line 109
.line 110
move-result v1
+ sget v4, Lradiant/LyricsReinitGuard;->lastMediaId:I
+ if-eq v1, v4, :rl_skip_reinit # same track re-emitted -> skip the redundant re-init (avoids the loading-state flash)
+ if-ne v1, v4, :rl_reinit_store
+ sget-object v4, Lradiant/LyricsReinitGuard;->lastVm:Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;
+ if-ne v0, v4, :rl_reinit_store
+ goto :rl_skip_reinit # only suppress duplicate initialization on the same ViewModel
+ :rl_reinit_store
+ sput v1, Lradiant/LyricsReinitGuard;->lastMediaId:I
+ sput-object v0, Lradiant/LyricsReinitGuard;->lastVm:Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;
+ goto :rl_reinit_ok
+ :rl_skip_reinit
+ sget-object v4, Lkotlin/v;->a:Lkotlin/v;
+ sget-object v4, Lkotlin/u;->a:Lkotlin/u;
+ return-object v4
+ :rl_reinit_ok
+5 -5
View File
@@ -1,5 +1,5 @@
--- a/com/tidal/android/feature/playerscreen/ui/s0.smali
+++ b/com/tidal/android/feature/playerscreen/ui/s0.smali
--- a/com/tidal/android/feature/playerscreen/ui/m0.smali
+++ b/com/tidal/android/feature/playerscreen/ui/m0.smali
@@ -45,7 +45,7 @@
# virtual methods
@@ -11,7 +11,7 @@
move-object/from16 v0, p0
@@ -460,6 +460,64 @@
.line 200
invoke-static/range {v2 .. v9}, Lcom/tidal/android/feature/playerscreen/ui/composables/LyricsKt;->a(Lcom/tidal/android/feature/playerscreen/ui/g;Lem0/l;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/PaddingValues;Lem0/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;Lam0/l;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/PaddingValues;Lam0/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;Lem0/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;Lam0/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(Lem0/l;Landroidx/compose/ui/Modifier;Lem0/l;Landroidx/compose/runtime/Composer;II)V # mount progress pill
+ invoke-static/range {v17 .. v22}, Landroidx/compose/ui/viewinterop/AndroidView_androidKt;->AndroidView(Lam0/l;Landroidx/compose/ui/Modifier;Lam0/l;Landroidx/compose/runtime/Composer;II)V # mount progress pill
+
.line 201
.line 202
+18 -18
View File
@@ -1,30 +1,30 @@
# 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
@@ -5002,7 +5002,11 @@
const/4 v13, 0x0
@@ -5183,7 +5183,11 @@
const/4 v12, 0x0
.line 230
- invoke-static {v13, v6, v4, v14, v11}, Lcom/tidal/android/feature/playerscreen/ui/composables/h1;->a(Landroidx/compose/ui/Modifier;Lem0/a;ZLandroidx/compose/runtime/Composer;I)V
+ const v13, 0x52414448 # empty group key
.line 259
- invoke-static {v7, v8, v4, v15, v12}, Lcom/tidal/android/feature/playerscreen/ui/composables/k1;->a(Landroidx/compose/ui/Modifier;Lam0/a;ZLandroidx/compose/runtime/Composer;I)V
+ const v7, 0x52414448 # empty group key
+
+ invoke-interface {v14, v13}, Landroidx/compose/runtime/Composer;->startReplaceGroup(I)V # open empty
+ invoke-interface {v15, v7}, Landroidx/compose/runtime/Composer;->startReplaceGroup(I)V # open empty
+
+ invoke-interface {v14}, Landroidx/compose/runtime/Composer;->endReplaceGroup()V # close empty
+ invoke-interface {v15}, Landroidx/compose/runtime/Composer;->endReplaceGroup()V # close empty
.line 231
invoke-interface {v14}, Landroidx/compose/runtime/Composer;->endReplaceGroup()V
@@ -5791,6 +5795,22 @@
.line 260
invoke-interface {v15}, Landroidx/compose/runtime/Composer;->endReplaceGroup()V
@@ -5967,6 +5971,22 @@
invoke-static {v15, v7, v8, v3}, Lcom/tidal/android/feature/playerscreen/ui/composables/i3;->a(ILandroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;Lem0/a;)V
invoke-static {v4, v3, v7, v6}, Lcom/tidal/android/feature/playerscreen/ui/composables/s3;->a(ILam0/a;Landroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;)V
+ new-instance v74, Lcom/tidal/android/feature/playerscreen/ui/u0; # lyrics toggle lambda
+ new-instance v74, Landroidx/window/embedding/a2; # lyrics toggle lambda
+
+ move-object/from16 v75, p5 # action dispatcher
+ move-object/from16 v75, p2 # action dispatcher
+
+ const/16 v76, 0x0 # lyrics action disc
+ const/16 v76, 0x1 # lyrics action disc
+
+ invoke-direct/range {v74 .. v76}, Lcom/tidal/android/feature/playerscreen/ui/u0;-><init>(Ljava/lang/Object;I)V # build lambda
+ invoke-direct/range {v74 .. v76}, Landroidx/window/embedding/a2;-><init>(Ljava/lang/Object;I)V # build lambda
+
+ const/16 v71, 0x0 # changed flags
+
@@ -32,8 +32,8 @@
+
+ const/16 v73, 0x0 # null modifier
+
+ invoke-static/range {v71 .. v74}, Lradiant/SparkleButton;->a(ILandroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;Lem0/a;)V # render sparkle button
+ invoke-static/range {v71 .. v74}, Lradiant/SparkleButton;->a(ILandroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;Lam0/a;)V # render sparkle button
+
.line 336
iget-object v3, v10, Lcom/tidal/android/feature/playerscreen/ui/s$a;->l:Lcom/tidal/android/feature/playerscreen/ui/p;
.line 365
iget-object v3, v11, Lcom/tidal/android/feature/playerscreen/ui/s$a;->m:Lcom/tidal/android/feature/playerscreen/ui/p;
+31 -31
View File
@@ -1,46 +1,46 @@
--- a/com/tidal/android/feature/playerscreen/ui/PlayerScreenKt.smali
+++ b/com/tidal/android/feature/playerscreen/ui/PlayerScreenKt.smali
@@ -5155,7 +5155,11 @@
const/4 v13, 0x0
@@ -5328,7 +5328,11 @@
const/4 v12, 0x0
.line 251
- invoke-static {v6, v10, v13, v14, v7}, Lcom/tidal/android/feature/playerscreen/ui/composables/BroadcastButtonKt;->b(Lcom/tidal/android/feature/playerscreen/ui/b;Lem0/a;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V
+ const v13, 0x52414244 # empty group key
.line 280
- invoke-static {v8, v6, v12, v15, v3}, Lcom/tidal/android/feature/playerscreen/ui/composables/BroadcastButtonKt;->b(Lcom/tidal/android/feature/playerscreen/ui/b;Lam0/a;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V
+ const v3, 0x52414244 # empty group key
+
+ invoke-interface {v14, v13}, Landroidx/compose/runtime/Composer;->startReplaceGroup(I)V # open empty
+ invoke-interface {v15, v3}, Landroidx/compose/runtime/Composer;->startReplaceGroup(I)V # open empty
+
+ invoke-interface {v14}, Landroidx/compose/runtime/Composer;->endReplaceGroup()V # close empty
+ invoke-interface {v15}, Landroidx/compose/runtime/Composer;->endReplaceGroup()V # close empty
.line 252
invoke-interface {v14}, Landroidx/compose/runtime/Composer;->endNode()V
@@ -5978,11 +5982,11 @@
.line 356
:cond_59
:goto_29
- new-instance v0, Lcom/tidal/android/feature/playerscreen/ui/i0;
+ new-instance v0, Lcom/squareup/ui/market/modal/o; # connect click lambda (was share i0)
.line 281
invoke-interface {v15}, Landroidx/compose/runtime/Composer;->endNode()V
@@ -6156,11 +6160,11 @@
.line 385
:cond_61
:goto_2e
- new-instance v1, Lcom/tidal/android/feature/playerscreen/ui/e0;
+ new-instance v1, Landroidx/window/embedding/b2; # connect click lambda (was share e0)
- const/4 v15, 0x0
+ const/4 v15, 0x1 # connect-clicked disc
- const/4 v6, 0x0
+ const/4 v6, 0x1 # connect-clicked disc
- invoke-direct {v0, v11, v15}, Lcom/tidal/android/feature/playerscreen/ui/i0;-><init>(Ljava/lang/Object;I)V
+ invoke-direct {v0, v11, v15}, Lcom/squareup/ui/market/modal/o;-><init>(Ljava/lang/Object;I)V # build connect lambda
- invoke-direct {v1, v10, v6}, Lcom/tidal/android/feature/playerscreen/ui/e0;-><init>(Ljava/lang/Object;I)V
+ invoke-direct {v1, v10, v6}, Landroidx/window/embedding/b2;-><init>(Ljava/lang/Object;I)V # build connect lambda
.line 357
invoke-interface {v7, v0}, Landroidx/compose/runtime/Composer;->updateRememberedValue(Ljava/lang/Object;)V
@@ -5991,9 +5995,13 @@
:goto_2a
check-cast v0, Lem0/a;
.line 386
invoke-interface {v7, v1}, Landroidx/compose/runtime/Composer;->updateRememberedValue(Ljava/lang/Object;)V
@@ -6169,9 +6173,13 @@
:goto_2f
check-cast v1, Lam0/a;
- const/4 v8, 0x0
+ iget-object v8, v10, Lcom/tidal/android/feature/playerscreen/ui/s$a;->d:Lcom/tidal/android/feature/playerscreen/ui/b; # broadcast state
- const/4 v3, 0x0
+ iget-object v8, v11, Lcom/tidal/android/feature/playerscreen/ui/s$a;->d:Lcom/tidal/android/feature/playerscreen/ui/b; # broadcast state
+
+ const/4 v13, 0x0 # null modifier
+ const/4 v3, 0x0 # null modifier
+
+ const/4 v15, 0x0 # changed flags
+ const/4 v6, 0x0 # changed flags
- invoke-static {v15, v7, v8, v0}, Lcom/tidal/android/feature/playerscreen/ui/composables/t4;->a(ILandroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;Lem0/a;)V
+ invoke-static {v8, v0, v13, v7, v15}, Lcom/tidal/android/feature/playerscreen/ui/composables/BroadcastButtonKt;->b(Lcom/tidal/android/feature/playerscreen/ui/b;Lem0/a;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V # render connect button
- invoke-static {v6, v1, v7, v3}, Lcom/tidal/android/feature/playerscreen/ui/composables/e5;->a(ILam0/a;Landroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;)V
+ invoke-static {v8, v1, v3, v7, v6}, Lcom/tidal/android/feature/playerscreen/ui/composables/BroadcastButtonKt;->b(Lcom/tidal/android/feature/playerscreen/ui/b;Lam0/a;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V # render connect button
if-ne v1, v2, :cond_5a
if-ne v0, v2, :cond_62
+26
View File
@@ -0,0 +1,26 @@
--- a/cg0/h.smali
+++ b/cg0/h.smali
@@ -363,6 +363,23 @@
.method public static final d(Lcom/tidal/sdk/tidalapi/generated/models/TracksResourceObject;Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/Map;)Lcom/tidal/android/tidalapi/domain/model/o;
.locals 23
+ invoke-virtual/range {p0 .. p0}, Lcom/tidal/sdk/tidalapi/generated/models/TracksResourceObject;->getAttributes()Lcom/tidal/sdk/tidalapi/generated/models/TracksAttributes;
+
+ move-result-object v1
+
+ if-eqz v1, :rl_isrc_skip
+
+ invoke-virtual/range {p0 .. p0}, Lcom/tidal/sdk/tidalapi/generated/models/TracksResourceObject;->getId()Ljava/lang/String;
+
+ move-result-object v0
+
+ invoke-virtual {v1}, Lcom/tidal/sdk/tidalapi/generated/models/TracksAttributes;->getIsrc()Ljava/lang/String;
+
+ move-result-object v1
+
+ invoke-static {v0, v1}, Lradiant/IsrcCache;->put(Ljava/lang/String;Ljava/lang/String;)V
+
+ :rl_isrc_skip
move-object/from16 v0, p4
move-object/from16 v1, p7
+15 -7
View File
@@ -1,17 +1,25 @@
--- a/com/tidal/android/feature/playerscreen/ui/PlayerViewModel$observeLyricsProgress$1$a.smali
+++ b/com/tidal/android/feature/playerscreen/ui/PlayerViewModel$observeLyricsProgress$1$a.smali
@@ -190,7 +190,14 @@
goto :goto_0
@@ -58,6 +58,8 @@
.line 5
int-to-long p1, p1
+ invoke-static {p1, p2}, Lradiant/WordLyrics;->onProgress(J)V
+
.line 6
iget-object v0, p0, Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel$observeLyricsProgress$1$a;->a:Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;
@@ -191,6 +193,13 @@
.line 67
:cond_3
+ sget-boolean v6, Lradiant/RLAPILyricsHook;->isRlState:Z # read RL flag
+ sget-boolean v6, Lradiant/RLAPILyricsHook;->isRlState:Z
+
+ if-eqz v6, :radiant_skip # skip if not RL
+ if-eqz v6, :radiant_skip
+
+ const/4 v5, -0x1 # RL no-match default = -1
+ const/4 v5, -0x1
+
+ :radiant_skip
if-gez v4, :cond_4
.line 68
+56
View File
@@ -0,0 +1,56 @@
--- a/com/tidal/android/feature/playerscreen/ui/composables/f2.smali
+++ b/com/tidal/android/feature/playerscreen/ui/composables/f2.smali
@@ -87,7 +87,7 @@
# virtual methods
.method public final invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
- .locals 28
+ .locals 40
.line 1
move-object/from16 v0, p0
@@ -313,6 +313,8 @@
.line 100
check-cast v1, Lcom/tidal/android/feature/playerscreen/ui/f;
+ move/16 v33, v2
+
.line 101
.line 102
const v3, 0x6b82e849
@@ -801,6 +803,26 @@
.line 331
iget-object v3, v1, Lcom/tidal/android/feature/playerscreen/ui/f;->a:Ljava/lang/String;
+ iget v4, v0, Lcom/tidal/android/feature/playerscreen/ui/composables/f2;->b:I
+
+ move/16 v34, v4
+
+ iget-object v4, v1, Lcom/tidal/android/feature/playerscreen/ui/f;->a:Ljava/lang/String;
+
+ move-object/16 v35, v4
+
+ iget-wide v4, v0, Lcom/tidal/android/feature/playerscreen/ui/composables/f2;->d:J
+
+ move-wide/16 v36, v4
+
+ iget-wide v4, v0, Lcom/tidal/android/feature/playerscreen/ui/composables/f2;->e:J
+
+ move-wide/16 v38, v4
+
+ invoke-static/range {v33 .. v39}, Lradiant/WordLyrics;->render(IILjava/lang/String;JJ)Landroidx/compose/ui/text/AnnotatedString;
+
+ move-result-object v3
+
.line 332
.line 333
invoke-interface {v2}, Landroidx/compose/runtime/State;->getValue()Ljava/lang/Object;
@@ -898,7 +920,7 @@
.line 377
.line 378
- invoke-static/range {v3 .. v27}, Landroidx/compose/material3/TextKt;->Text--4IGK_g(Ljava/lang/String;Landroidx/compose/ui/Modifier;JJLandroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontFamily;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/text/style/TextAlign;JIZIILam0/l;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/runtime/Composer;III)V
+ invoke-static/range {v3 .. v27}, Landroidx/compose/material3/TextKt;->Text--4IGK_g(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/Modifier;JJLandroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontFamily;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/text/style/TextAlign;JIZILjava/util/Map;Lam0/l;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/runtime/Composer;III)V
.line 379
.line 380
+49 -38
View File
@@ -1,6 +1,6 @@
--- a/com/tidal/android/feature/playerscreen/ui/PlayerViewModel.smali
+++ b/com/tidal/android/feature/playerscreen/ui/PlayerViewModel.smali
@@ -1291,6 +1291,8 @@
@@ -1374,6 +1374,8 @@
.line 105
check-cast v1, Lcom/aspiro/wamp/model/Track;
@@ -9,58 +9,69 @@
.line 106
.line 107
invoke-virtual {v1}, Lcom/aspiro/wamp/model/MediaItem;->getId()I
@@ -1564,7 +1566,7 @@
.line 235
.line 236
.line 237
- if-nez v9, :cond_a
+ goto :cond_a # RL: skip TIDAL O=false in the has-lyrics path
.line 238
@@ -1655,7 +1657,11 @@
.line 239
@@ -2256,7 +2258,10 @@
.line 240
.line 241
- if-nez v9, :cond_a
+ invoke-static {v0}, Lradiant/RLAPILyricsHook;->shouldKeepOpen(Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;)Z
+ move-result v20
+ if-nez v20, :cond_a # keep visibility only for RL state owned by this ViewModel
+ :rl_native_visibility
+ if-nez v9, :cond_a
.line 568
.line 242
.line 243
@@ -2347,7 +2353,12 @@
.line 572
:goto_c
+ sget-boolean v5, Lradiant/RLAPILyricsHook;->isRlState:Z
+ if-nez v5, :rl_keep_n2 # RL active -> keep worker content
+ invoke-static {v0}, Lradiant/RLAPILyricsHook;->isOwner(Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;)Z
+ move-result v20
+ if-nez v20, :rl_keep_n2 # only preserve RL content owned by this ViewModel
+ :rl_set_n2
invoke-interface {v9, v1}, Lkotlinx/coroutines/flow/MutableStateFlow;->setValue(Ljava/lang/Object;)V
+ :rl_keep_n2
.line 569
.line 570
@@ -2305,7 +2310,10 @@
.line 573
.line 574
@@ -2396,7 +2407,12 @@
.line 591
.line 592
+ sget-boolean v7, Lradiant/RLAPILyricsHook;->isRlState:Z
+ if-nez v7, :rl_keep_o # RL active -> keep view-open flag
.line 595
.line 596
+ invoke-static {v0}, Lradiant/RLAPILyricsHook;->shouldKeepOpen(Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;)Z
+ move-result v20
+ if-nez v20, :rl_keep_o # only preserve visibility owned by this ViewModel
+ :rl_set_o
invoke-interface {v1, v5}, Lkotlinx/coroutines/flow/MutableStateFlow;->setValue(Ljava/lang/Object;)V
+ :rl_keep_o
.line 593
.line 594
@@ -2334,7 +2342,10 @@
.line 597
.line 598
@@ -2425,7 +2441,12 @@
.line 606
.line 607
+ sget-boolean v7, Lradiant/RLAPILyricsHook;->isRlState:Z
+ if-nez v7, :rl_keep_n # RL active -> keep worker content
.line 610
.line 611
+ invoke-static {v0}, Lradiant/RLAPILyricsHook;->isOwner(Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;)Z
+ move-result v20
+ if-nez v20, :rl_keep_n # only preserve RL content owned by this ViewModel
+ :rl_set_n
invoke-interface {v1, v6}, Lkotlinx/coroutines/flow/MutableStateFlow;->setValue(Ljava/lang/Object;)V
+ :rl_keep_n
.line 608
.line 609
.line 612
.line 613
--- 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
@@ -2202,6 +2202,10 @@
.line 1011
.line 1012
move-result v31
+ sget-boolean v5, Lradiant/RLAPILyricsHook;->isRlState:Z
+ if-eqz v5, :rl_hl_done # not RL -> use TIDAL's hasLyrics
+ const/16 v31, 0x1 # RL lyrics active -> force hasLyrics so the sparkle stays
@@ -2256,6 +2256,11 @@
.line 1040
.line 1041
move-result v34
+ invoke-static {v1}, Lradiant/RLAPILyricsHook;->isOwner(Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;)Z
+ move-result v4
+ if-eqz v4, :rl_hl_done # ignore non-RL state or state owned by an obsolete ViewModel
+ const/16 v34, 0x1 # RL lyrics active = force hasLyrics so the sparkle stays
+ :rl_hl_done
.line 1013
iget-object v5, v1, Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;->O:Lkotlinx/coroutines/flow/MutableStateFlow;
.line 1042
iget-object v4, v1, Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;->P:Lkotlinx/coroutines/flow/MutableStateFlow;
@@ -1,37 +1,37 @@
--- a/com/tidal/android/feature/playerscreen/ui/PlayerScreenKt.smali
+++ b/com/tidal/android/feature/playerscreen/ui/PlayerScreenKt.smali
@@ -5795,6 +5795,14 @@
@@ -5971,6 +5971,14 @@
invoke-static {v15, v7, v8, v3}, Lcom/tidal/android/feature/playerscreen/ui/composables/i3;->a(ILandroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;Lem0/a;)V
invoke-static {v4, v3, v7, v6}, Lcom/tidal/android/feature/playerscreen/ui/composables/s3;->a(ILam0/a;Landroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;)V
+ iget-boolean v2, v10, Lcom/tidal/android/feature/playerscreen/ui/s$a;->i:Z # hasLyrics flag
+ iget-boolean v3, v11, Lcom/tidal/android/feature/playerscreen/ui/s$a;->i:Z # hasLyrics flag
+
+ if-eqz v2, :cond_sparkle_no_lyrics # branch when no lyrics
+ if-eqz v3, :cond_sparkle_no_lyrics # branch when no lyrics
+
+ const v2, 0x30551b59 # group key (lyrics)
+ const v3, 0x30551b59 # group key (lyrics)
+
+ invoke-interface {v7, v2}, Landroidx/compose/runtime/Composer;->startReplaceGroup(I)V # open lyrics branch
+ invoke-interface {v7, v3}, Landroidx/compose/runtime/Composer;->startReplaceGroup(I)V # open lyrics branch
+
new-instance v74, Lcom/tidal/android/feature/playerscreen/ui/u0; # lyrics toggle lambda
new-instance v74, Landroidx/window/embedding/a2; # lyrics toggle lambda
move-object/from16 v75, p5 # action dispatcher
@@ -5811,6 +5819,19 @@
move-object/from16 v75, p2 # action dispatcher
@@ -5987,6 +5995,19 @@
invoke-static/range {v71 .. v74}, Lradiant/SparkleButton;->a(ILandroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;Lem0/a;)V # render sparkle button
invoke-static/range {v71 .. v74}, Lradiant/SparkleButton;->a(ILandroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;Lam0/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 # no-lyrics branch
+ const v2, 0x3057f75c # group key (no lyrics)
+ const v3, 0x3057f75c # group key (no lyrics)
+
+ invoke-interface {v7, v2}, Landroidx/compose/runtime/Composer;->startReplaceGroup(I)V # open empty
+ invoke-interface {v7, v3}, Landroidx/compose/runtime/Composer;->startReplaceGroup(I)V # open empty
+
+ invoke-interface {v7}, Landroidx/compose/runtime/Composer;->endReplaceGroup()V # close empty
+
+ :goto_sparkle_done # join target
+
.line 336
iget-object v3, v10, Lcom/tidal/android/feature/playerscreen/ui/s$a;->l:Lcom/tidal/android/feature/playerscreen/ui/p;
.line 365
iget-object v3, v11, Lcom/tidal/android/feature/playerscreen/ui/s$a;->m:Lcom/tidal/android/feature/playerscreen/ui/p;
+95 -18
View File
@@ -21,6 +21,8 @@
"LyricsKeepControlsVisible",
"PlayerBackdrop",
"QualityBadgeColors",
"PlayerMovePlayingFrom",
"PlayerOneHanded",
"LyricsProgressPill",
"MiniPlayerRedesign"
]
@@ -30,58 +32,133 @@
"order": 20,
"fileNames": [
"lyrics-rl-api.patch",
"lyrics-rl-api-observer.patch"
"lyrics-rl-api-observer.patch",
"lyrics-rl-api-isrc.patch"
],
"title": "Radiant Lyrics API - WIP",
"description": "Use Radiant Lyrics API to fetch Lyrics (Higher quality & More providers)",
"default": false
"description": "Use Radiant Lyrics API to fetch Lyrics (Higher quality & More providers). Pick how the highlight moves: whole Line or word-by-word (Word).",
"default": false,
"defaultVariantIndex": 0,
"variants": [
{
"title": "Line",
"fileNames": []
},
{
"title": "Word",
"fileNames": [
"lyrics-rl-api-word.patch"
]
}
]
},
{
"id": "PlayerBackdrop",
"order": 30,
"fileNames": [
"player-backdrop.patch"
],
"fileNames": [],
"title": "Player Backdrop",
"description": "Restores the legacy translucent backdrop blur behind the player",
"description": "Lets you fully adjust how the player backdrop blur looks and behaves",
"default": true,
"defaultVariantIndex": 2,
"variants": [
{
"title": "Static",
"fileNames": [
"player-backdrop-static.patch"
],
"extensionFiles": [
"radiant/BackdropFx.smali"
]
},
{
"title": "Animated",
"fileNames": [
"player-backdrop-animated.patch"
],
"extensionFiles": [
"radiant/BackdropFx.smali"
]
},
{
"title": "Playback",
"fileNames": [
"player-backdrop-playback.patch"
],
"extensionFiles": [
"radiant/BackdropFx.smali"
]
}
],
"advancedOptions": [
{
"type": "slider",
"key": "blur_strength",
"title": "Blur Strength",
"description": "How strongly the album art behind the player is blurred",
"description": "The value of Blur applied to the backdrop cover",
"default": 50,
"min": 0,
"max": 100,
"steps": 19,
"displayAsPercent": true,
"token": "RL_BLUR_BITS",
"token": "RL_BLUR",
"encode": {
"kind": "floatBits",
"scale": 1.8
"kind": "int",
"scale": 1.0
}
},
{
"type": "slider",
"key": "dimming",
"title": "Backdrop Dimming",
"description": "Darkens the backdrop so the foreground controls stay legible",
"key": "contrast",
"title": "Contrast",
"description": "The value of Contrast applied to the backdrop cover",
"default": 50,
"min": 0,
"max": 100,
"steps": 19,
"displayAsPercent": true,
"token": "RL_SCRIM_ARGB",
"token": "RL_CONTRAST",
"encode": {
"kind": "argbAlpha"
"kind": "floatBits",
"scale": 0.02
}
},
{
"type": "slider",
"key": "saturation",
"title": "Saturation",
"description": "The value of Saturation applied to the backdrop cover",
"default": 50,
"min": 0,
"max": 100,
"steps": 19,
"displayAsPercent": true,
"token": "RL_SATURATION",
"encode": {
"kind": "floatBits",
"scale": 0.02
}
},
{
"type": "slider",
"key": "brightness",
"title": "Brightness",
"description": "The value of Brightness applied to the backdrop cover",
"default": 50,
"min": 0,
"max": 100,
"steps": 19,
"displayAsPercent": true,
"token": "RL_BRIGHTNESS",
"encode": {
"kind": "floatBits",
"scale": 0.02
}
},
{
"type": "toggle",
"key": "cover_everywhere",
"title": "Cover Everywhere - WIP",
"description": "Applies the blurred backdrop to every Compose based page (Home & Collection)",
"description": "Applies TIDAL's native blurred album-art backdrop to every Compose based page (Home & Collection)",
"default": false,
"inline": true,
"fileNames": [
@@ -283,7 +360,7 @@
"radiant/MiniPlayerTrackGestures$OffsetLayer.smali",
"radiant/MiniPlayerTrackGestures$ResetAnimator.smali",
"radiant/MiniPlayerTrackGestures$TextDraw.smali",
"com/tidal/android/feature/appscaffold/ui/s$c.smali"
"com/tidal/android/feature/appscaffold/ui/r$c.smali"
]
}
]
+1 -1
View File
@@ -68,7 +68,7 @@
@@ -2487,6 +2495,10 @@
invoke-static {v6, v2, v3}, Landroidx/compose/runtime/Updater;->set-impl(Landroidx/compose/runtime/Composer;Ljava/lang/Object;Lem0/p;)V
invoke-static {v6, v2, v3}, Landroidx/compose/runtime/Updater;->set-impl(Landroidx/compose/runtime/Composer;Ljava/lang/Object;Lam0/p;)V
+ const/4 v8, 0x0 # composer $changed flags
+
+17 -17
View File
@@ -15,41 +15,41 @@
--- a/com/tidal/android/feature/playerscreen/ui/PlayerViewModel.smali
+++ b/com/tidal/android/feature/playerscreen/ui/PlayerViewModel.smali
@@ -1063,6 +1063,10 @@
@@ -1146,6 +1146,10 @@
iput-object v1, v0, Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;->V:Lkotlinx/coroutines/flow/StateFlow;
iput-object v1, v0, Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;->W:Lkotlinx/coroutines/flow/StateFlow;
+ iget-object v1, v0, Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;->P:Lkotlin/i;
+ iget-object v1, v0, Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;->Q:Lkotlin/i;
+
+ invoke-interface {v1}, Lkotlin/i;->getValue()Ljava/lang/Object; # init player bg color
+
return-void
.end method
@@ -1620,6 +1624,8 @@
@@ -1711,6 +1715,8 @@
:goto_6
invoke-interface {v9, v10}, Lkotlinx/coroutines/flow/MutableStateFlow;->setValue(Ljava/lang/Object;)V
+ invoke-static {v10}, Lradiant/MiniPlayerBackground;->setHex(Ljava/lang/String;)V # store player bg hex
+
.line 263
.line 264
.line 265
@@ -2319,6 +2325,8 @@
.line 598
.line 267
.line 268
.line 269
@@ -2410,6 +2416,8 @@
.line 602
invoke-interface {v1, v5}, Lkotlinx/coroutines/flow/MutableStateFlow;->setValue(Ljava/lang/Object;)V
+ invoke-static {v5}, Lradiant/MiniPlayerBackground;->setHex(Ljava/lang/String;)V # clear bg color
+
.line 599
.line 600
.line 601
@@ -2536,6 +2544,8 @@
.line 704
.line 603
.line 604
.line 605
@@ -2627,6 +2635,8 @@
.line 708
invoke-interface {v1, v5}, Lkotlinx/coroutines/flow/MutableStateFlow;->setValue(Ljava/lang/Object;)V
+ invoke-static {v5}, Lradiant/MiniPlayerBackground;->setHex(Ljava/lang/String;)V # clear bg color
+
.line 705
.line 706
.line 707
.line 709
.line 710
.line 711
+2 -2
View File
@@ -6,10 +6,10 @@
+ sget-object v5, Lradiant/MiniSeekerFloating;->INSTANCE:Lradiant/MiniSeekerFloating; # draw lambda
+
+ invoke-static {v2, v5}, Landroidx/compose/ui/draw/DrawModifierKt;->drawWithContent(Landroidx/compose/ui/Modifier;Lem0/l;)Landroidx/compose/ui/Modifier; # overlay perimeter stroke
+ invoke-static {v2, v5}, Landroidx/compose/ui/draw/DrawModifierKt;->drawWithContent(Landroidx/compose/ui/Modifier;Lam0/l;)Landroidx/compose/ui/Modifier; # overlay perimeter stroke
+
+ move-result-object v2 # updated modifier
+
.line 153
sget-object v3, Lkotlin/v;->a:Lkotlin/v;
sget-object v3, Lkotlin/u;->a:Lkotlin/u;
+45 -27
View File
@@ -4,7 +4,7 @@
move-result-object v6
+ invoke-static {v6, v1}, Lradiant/MiniPlayerTrackGestures;->trackModifier(Landroidx/compose/ui/Modifier;Lem0/l;)Landroidx/compose/ui/Modifier; # attach horizontal swipe listener
+ invoke-static {v6, v1}, Lradiant/MiniPlayerTrackGestures;->trackModifier(Landroidx/compose/ui/Modifier;Lam0/l;)Landroidx/compose/ui/Modifier; # attach horizontal swipe listener
+
+ move-result-object v6
+
@@ -13,38 +13,41 @@
@@ -1352,6 +1356,8 @@
.line 56
iget-object v6, v0, Lcom/tidal/android/feature/appscaffold/ui/u;->b:Lcom/tidal/android/feature/appscaffold/ui/r;
iget-object v11, v0, Lcom/tidal/android/feature/appscaffold/ui/t;->b:Lcom/tidal/android/feature/appscaffold/ui/q;
+ invoke-static {v6}, Lradiant/MiniPlayerTrackGestures;->onRenderedItem(Ljava/lang/Object;)V # reset stale drag offset if track metadata changes mid-gesture
+ invoke-static {v11}, Lradiant/MiniPlayerTrackGestures;->onRenderedItem(Ljava/lang/Object;)V # reset stale drag offset if track metadata changes mid-gesture
+
.line 57
invoke-virtual/range {v16 .. v16}, Lcom/squareup/ui/market/core/theme/MarketStylesheet;->getBorderRadii()Lcom/squareup/ui/market/core/theme/MarketStylesheet$b;
@@ -1388,6 +1394,10 @@
@@ -1390,6 +1396,10 @@
move-result-object v4
move-result-object v6
+ invoke-static {v4}, Lradiant/MiniPlayerTrackGestures;->feedbackModifier(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; # move the whole cover container with horizontal swipe
+ invoke-static {v6}, Lradiant/MiniPlayerTrackGestures;->feedbackModifier(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; # move the whole cover container with horizontal swipe
+
+ move-result-object v4
+ move-result-object v6
+
.line 63
invoke-virtual/range {v22 .. v22}, Lcom/squareup/ui/market/core/theme/MarketStylesheet$c;->p0()Lg20/a;
invoke-virtual/range {v22 .. v22}, Lcom/squareup/ui/market/core/theme/MarketStylesheet$c;->p0()Lf20/a;
@@ -1499,6 +1509,10 @@
@@ -1501,6 +1511,10 @@
move-result-object v4
move-result-object v5
+ invoke-static {v4}, Lradiant/MiniPlayerTrackGestures;->textFeedbackModifier(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; # move title/artist
+ invoke-static {v5}, Lradiant/MiniPlayerTrackGestures;->textFeedbackModifier(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; # move title/artist
+
+ move-result-object v4
+ move-result-object v5
+
.line 72
invoke-virtual/range {v31 .. v31}, Landroidx/compose/foundation/layout/Arrangement;->getTop()Landroidx/compose/foundation/layout/Arrangement$Vertical;
invoke-virtual/range {v32 .. v32}, Landroidx/compose/foundation/layout/Arrangement;->getTop()Landroidx/compose/foundation/layout/Arrangement$Vertical;
--- a/com/tidal/android/feature/appscaffold/ui/MiniPlayerViewModel.smali
+++ b/com/tidal/android/feature/appscaffold/ui/MiniPlayerViewModel.smali
@@ -595,10 +595,10 @@
@@ -512,16 +512,16 @@
.line 110
invoke-virtual {p1, v0}, Ljava/lang/Object;->equals(Ljava/lang/Object;)Z
.line 111
.line 112
.line 113
@@ -57,11 +60,17 @@
.line 115
.line 116
@@ -778,6 +778,28 @@
invoke-interface {v3}, Lbi/e;->i()Z
.line 117
@@ -695,12 +695,34 @@
.line 194
:cond_e
return-void
.line 195
:cond_f
+ sget-object v0, Lcom/tidal/android/feature/appscaffold/ui/s$c;->a:Lcom/tidal/android/feature/appscaffold/ui/s$c; # our synthetic previous-track event
+ sget-object v0, Lcom/tidal/android/feature/appscaffold/ui/r$c;->a:Lcom/tidal/android/feature/appscaffold/ui/r$c; # our synthetic previous-track event
+
+ invoke-virtual {p1, v0}, Ljava/lang/Object;->equals(Ljava/lang/Object;)Z # is this the swipe-previous event?
+
@@ -69,7 +78,7 @@
+
+ if-eqz p1, :unknown_event
+
+ invoke-interface {v3}, Ldi/e;->canSkipToPreviousOrRewind()Z
+ invoke-interface {v3}, Lbi/e;->canSkipToPreviousOrRewind()Z
+
+ move-result p1
+
@@ -77,32 +86,41 @@
+
+ const/4 p1, 0x0
+
+ invoke-interface {v3, p1}, Ldi/e;->h(Z)V # false = previous/rewind
+ invoke-interface {v3, p1}, Lbi/e;->h(Z)V # false = previous/rewind
+
+ :previous_done
+ return-void
+
+ :unknown_event
invoke-static {}, Lcoil/util/i;->a()V
invoke-static {}, Landroidx/navigation/f0;->a()V
.line 196
--- a/com/aspiro/wamp/util/m.smali
+++ b/com/aspiro/wamp/util/m.smali
@@ -61,6 +61,17 @@
.line 197
.line 198
return-void
--- a/com/tidal/android/feature/appscaffold/ui/composable/g.smali
+++ b/com/tidal/android/feature/appscaffold/ui/composable/g.smali
@@ -24,12 +24,23 @@
# virtual methods
.method public final invoke()Ljava/lang/Object;
.locals 2
.line 15
:pswitch_0
+ invoke-static {}, Lradiant/MiniPlayerTrackGestures;->consumeTapOpenSuppression()Z # skip open-player if a horizontal skip-swipe just happened
+
+ move-result v0
+
+ if-eqz v0, :rl_continue_open
+
+ sget-object v0, Lkotlin/v;->a:Lkotlin/v;
+ sget-object v0, Lkotlin/u;->a:Lkotlin/u;
+
+ return-object v0
+
+ :rl_continue_open
iget-object v0, p0, Lcom/aspiro/wamp/util/m;->b:Ljava/lang/Object;
.line 1
iget-object v0, p0, Lcom/tidal/android/feature/appscaffold/ui/composable/g;->a:Lam0/l;
.line 16
.line 2
.line 3
sget-object v1, Lcom/tidal/android/feature/appscaffold/ui/b$b;->a:Lcom/tidal/android/feature/appscaffold/ui/b$b;
+23 -17
View File
@@ -11,7 +11,7 @@
+
+ const/16 v51, __RL_MINI_PLAYER_SWIPE_UP_DRAG__ # Enable Drag option
+
+ invoke-static/range {v49 .. v51}, Lradiant/MiniPlayerGestures;->configure(Lem0/l;Landroidx/compose/material3/SheetState;Z)V # wire swipe-up to expand the sheet
+ invoke-static/range {v49 .. v51}, Lradiant/MiniPlayerGestures;->configure(Lam0/l;Landroidx/compose/material3/SheetState;Z)V # wire swipe-up to expand the sheet
+
.line 69
invoke-static {}, Landroidx/compose/ui/platform/CompositionLocalsKt;->getLocalDensity()Landroidx/compose/runtime/ProvidableCompositionLocal;
@@ -20,9 +20,9 @@
+++ b/com/tidal/android/feature/appscaffold/ui/composable/MiniPlayerKt.smali
@@ -712,6 +712,22 @@
iget-object v3, v0, Lcom/tidal/android/feature/appscaffold/ui/u;->c:Lcom/tidal/android/feature/appscaffold/ui/MiniPlayerContract$PlayState;
iget-object v3, v0, Lcom/tidal/android/feature/appscaffold/ui/t;->c:Lcom/tidal/android/feature/appscaffold/ui/MiniPlayerContract$PlayState;
+ iget-object v5, v0, Lcom/tidal/android/feature/appscaffold/ui/u;->a:Lcom/tidal/android/feature/appscaffold/ui/MiniPlayerContract$ItemType; # currently rendered mini player media type
+ iget-object v5, v0, Lcom/tidal/android/feature/appscaffold/ui/t;->a:Lcom/tidal/android/feature/appscaffold/ui/MiniPlayerContract$ItemType; # currently rendered mini player media type
+
+ sget-object v6, Lcom/tidal/android/feature/appscaffold/ui/MiniPlayerContract$ItemType;->Unknown:Lcom/tidal/android/feature/appscaffold/ui/MiniPlayerContract$ItemType; # Unknown = no media playing
+
@@ -52,27 +52,27 @@
.line 38
sget-object v21, Landroidx/compose/ui/Alignment;->Companion:Landroidx/compose/ui/Alignment$Companion;
@@ -1388,6 +1408,10 @@
@@ -1390,6 +1410,10 @@
move-result-object v4
move-result-object v6
+ invoke-static {v4}, Lradiant/MiniPlayerGestures;->feedbackModifier(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; # move cover (swipe up feedback)
+ invoke-static {v6}, Lradiant/MiniPlayerGestures;->feedbackModifier(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; # move cover (swipe up feedback)
+
+ move-result-object v4
+ move-result-object v6
+
.line 63
invoke-virtual/range {v22 .. v22}, Lcom/squareup/ui/market/core/theme/MarketStylesheet$c;->p0()Lg20/a;
invoke-virtual/range {v22 .. v22}, Lcom/squareup/ui/market/core/theme/MarketStylesheet$c;->p0()Lf20/a;
@@ -1499,6 +1523,10 @@
@@ -1501,6 +1525,10 @@
move-result-object v4
move-result-object v5
+ invoke-static {v4}, Lradiant/MiniPlayerGestures;->feedbackModifier(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; # move title/artist (swipe up feedback)
+ invoke-static {v5}, Lradiant/MiniPlayerGestures;->feedbackModifier(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; # move title/artist (swipe up feedback)
+
+ move-result-object v4
+ move-result-object v5
+
.line 72
invoke-virtual/range {v31 .. v31}, Landroidx/compose/foundation/layout/Arrangement;->getTop()Landroidx/compose/foundation/layout/Arrangement$Vertical;
invoke-virtual/range {v32 .. v32}, Landroidx/compose/foundation/layout/Arrangement;->getTop()Landroidx/compose/foundation/layout/Arrangement$Vertical;
--- a/androidx/compose/material3/ModalBottomSheetKt$ModalBottomSheet$4$1.smali
+++ b/androidx/compose/material3/ModalBottomSheetKt$ModalBottomSheet$4$1.smali
@@ -99,19 +99,25 @@
:goto_0
--- a/androidx/compose/material3/ModalBottomSheetKt.smali
+++ b/androidx/compose/material3/ModalBottomSheetKt.smali
@@ -1291,6 +1291,12 @@
@@ -1288,12 +1288,18 @@
.line 33
invoke-interface {v5, v12}, Landroidx/compose/runtime/Composer;->updateRememberedValue(Ljava/lang/Object;)V
.line 34
:cond_47
+ move-object v14, v12 # settle callback
+
+ check-cast v14, Lem0/l; # to Function1
+ check-cast v14, Lam0/l; # to Function1
+
+ invoke-static {v13, v14}, Lradiant/MiniPlayerGestures;->setSettleCallback(Landroidx/compose/material3/SheetState;Lem0/l;)V # reuse native settle animation on release
+ invoke-static {v13, v14}, Lradiant/MiniPlayerGestures;->setSettleCallback(Landroidx/compose/material3/SheetState;Lam0/l;)V # reuse native settle animation on release
+
move-object/from16 v32, v12
check-cast v32, Lem0/l;
check-cast v32, Lam0/l;
.line 35
invoke-interface {v5}, Landroidx/compose/runtime/Composer;->rememberedValue()Ljava/lang/Object;
--- a/androidx/compose/material3/SheetDefaultsKt.smali
+++ b/androidx/compose/material3/SheetDefaultsKt.smali
@@ -98,7 +98,7 @@
+1 -1
View File
@@ -55,7 +55,7 @@
@@ -2487,6 +2489,10 @@
invoke-static {v6, v2, v3}, Landroidx/compose/runtime/Updater;->set-impl(Landroidx/compose/runtime/Composer;Ljava/lang/Object;Lem0/p;)V
invoke-static {v6, v2, v3}, Landroidx/compose/runtime/Updater;->set-impl(Landroidx/compose/runtime/Composer;Ljava/lang/Object;Lam0/p;)V
+ const/4 v8, 0x0 # composer $changed flags
+
+121
View File
@@ -0,0 +1,121 @@
--- a/com/tidal/android/feature/playerscreen/ui/PlayerScreenKt.smali
+++ b/com/tidal/android/feature/playerscreen/ui/PlayerScreenKt.smali
@@ -4433,6 +4433,14 @@
move-object/from16 v25, v10
+ sget-object v16, Lcom/tidal/android/feature/playerscreen/ui/model/PlayerBackgroundStyle;->DARK_BLUR:Lcom/tidal/android/feature/playerscreen/ui/model/PlayerBackgroundStyle; # RL: force native Blur player background
+
+ const/16 v21, 0x1 # RL: isPlaying=true (Animated — always rotate)
+
+ const/16 v22, 0x0 # RL: isSeeking=false (Animated — ignore scrub)
+
+ invoke-static {}, Lradiant/HomeBackdrop;->setModeAnimated()V # RL: mirror rotation to Cover Everywhere
+
.line 171
invoke-static/range {v16 .. v26}, Lcom/tidal/android/feature/playerscreen/ui/composables/p3;->b(Lcom/tidal/android/feature/playerscreen/ui/model/PlayerBackgroundStyle;JILjava/lang/String;ZZLam0/a;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V
--- a/com/tidal/android/core/ui/composable/c0.smali
+++ b/com/tidal/android/core/ui/composable/c0.smali
@@ -16,7 +16,9 @@
move-result p0
.line 5
- invoke-virtual {p2, p0}, Landroid/view/Window;->setNavigationBarColor(I)V
+ const/4 v3, 0x0 # RL: force transparent nav bar so the native blur backdrop shows through (was p0 = extracted BG color; luminance below still uses p0 for icon light/dark)
+
+ invoke-virtual {p2, v3}, Landroid/view/Window;->setNavigationBarColor(I)V
.line 6
.line 7
--- a/de0/c.smali
+++ b/de0/c.smali
@@ -26,29 +26,26 @@
.line 2
.line 3
.line 4
- const-string v0, "HeavyBlurTransformation() "
-
- .line 5
- .line 6
- const-string v1, " "
-
- .line 7
- .line 8
- const/4 v2, 0x6
-
- .line 9
- const/16 v3, 0x19
-
- .line 10
- .line 11
- invoke-static {v2, v3, v0, v1}, Landroidx/compose/foundation/text/input/a;->b(IILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-
- .line 12
- .line 13
- .line 14
+ new-instance v0, Ljava/lang/StringBuilder;
+ invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
+ const-string v1, "RLBackdrop_b"
+ invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
+ const/16 v1, __RL_BLUR__
+ invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
+ const-string v1, "c"
+ invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
+ const v1, __RL_CONTRAST__
+ invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
+ const-string v1, "s"
+ invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
+ const v1, __RL_SATURATION__
+ invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
+ const-string v1, "r"
+ invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
+ const v1, __RL_BRIGHTNESS__
+ invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
+ invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
-
- .line 15
iput-object v0, p0, Lde0/c;->a:Ljava/lang/String;
.line 16
@@ -59,10 +56,17 @@
# virtual methods
.method public final a(Landroid/graphics/Bitmap;)Landroid/graphics/Bitmap;
- .locals 2
+ .locals 3
.line 1
- const/4 v0, 0x6
+ const/16 v2, __RL_BLUR__
+ mul-int/lit8 v0, v2, 0x6
+ const/16 v1, 0x32
+ div-int v0, v0, v1
+ const/4 v1, 0x1
+ if-ge v0, v1, :rl_ds_ok
+ const/4 v0, 0x1
+ :rl_ds_ok
.line 2
invoke-static {p1, v0}, Lcom/squareup/ui/market/layout/e;->c(Landroid/graphics/Bitmap;I)Landroid/graphics/Bitmap;
@@ -82,7 +86,7 @@
.line 9
.line 10
.line 11
- const/16 v1, 0x19
+ div-int/lit8 v1, v2, 0x2
.line 12
.line 13
@@ -93,6 +97,10 @@
.line 16
move-result-object v1
+ invoke-static {v1}, Lradiant/BackdropFx;->apply(Landroid/graphics/Bitmap;)Landroid/graphics/Bitmap;
+
+ move-result-object v1
+
.line 17
invoke-virtual {v0}, Landroid/graphics/Bitmap;->recycle()V
+117
View File
@@ -0,0 +1,117 @@
--- a/com/tidal/android/feature/playerscreen/ui/PlayerScreenKt.smali
+++ b/com/tidal/android/feature/playerscreen/ui/PlayerScreenKt.smali
@@ -4433,6 +4433,10 @@
move-object/from16 v25, v10
+ sget-object v16, Lcom/tidal/android/feature/playerscreen/ui/model/PlayerBackgroundStyle;->DARK_BLUR:Lcom/tidal/android/feature/playerscreen/ui/model/PlayerBackgroundStyle; # RL: force native Blur player background
+
+ invoke-static {}, Lradiant/HomeBackdrop;->setModePlayback()V # RL: mirror rotation to Cover Everywhere
+
.line 171
invoke-static/range {v16 .. v26}, Lcom/tidal/android/feature/playerscreen/ui/composables/p3;->b(Lcom/tidal/android/feature/playerscreen/ui/model/PlayerBackgroundStyle;JILjava/lang/String;ZZLam0/a;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V
--- a/com/tidal/android/core/ui/composable/c0.smali
+++ b/com/tidal/android/core/ui/composable/c0.smali
@@ -16,7 +16,9 @@
move-result p0
.line 5
- invoke-virtual {p2, p0}, Landroid/view/Window;->setNavigationBarColor(I)V
+ const/4 v3, 0x0 # RL: force transparent nav bar so the native blur backdrop shows through (was p0 = extracted BG color; luminance below still uses p0 for icon light/dark)
+
+ invoke-virtual {p2, v3}, Landroid/view/Window;->setNavigationBarColor(I)V
.line 6
.line 7
--- a/de0/c.smali
+++ b/de0/c.smali
@@ -26,29 +26,26 @@
.line 2
.line 3
.line 4
- const-string v0, "HeavyBlurTransformation() "
-
- .line 5
- .line 6
- const-string v1, " "
-
- .line 7
- .line 8
- const/4 v2, 0x6
-
- .line 9
- const/16 v3, 0x19
-
- .line 10
- .line 11
- invoke-static {v2, v3, v0, v1}, Landroidx/compose/foundation/text/input/a;->b(IILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-
- .line 12
- .line 13
- .line 14
+ new-instance v0, Ljava/lang/StringBuilder;
+ invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
+ const-string v1, "RLBackdrop_b"
+ invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
+ const/16 v1, __RL_BLUR__
+ invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
+ const-string v1, "c"
+ invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
+ const v1, __RL_CONTRAST__
+ invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
+ const-string v1, "s"
+ invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
+ const v1, __RL_SATURATION__
+ invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
+ const-string v1, "r"
+ invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
+ const v1, __RL_BRIGHTNESS__
+ invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
+ invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
-
- .line 15
iput-object v0, p0, Lde0/c;->a:Ljava/lang/String;
.line 16
@@ -59,10 +56,17 @@
# virtual methods
.method public final a(Landroid/graphics/Bitmap;)Landroid/graphics/Bitmap;
- .locals 2
+ .locals 3
.line 1
- const/4 v0, 0x6
+ const/16 v2, __RL_BLUR__
+ mul-int/lit8 v0, v2, 0x6
+ const/16 v1, 0x32
+ div-int v0, v0, v1
+ const/4 v1, 0x1
+ if-ge v0, v1, :rl_ds_ok
+ const/4 v0, 0x1
+ :rl_ds_ok
.line 2
invoke-static {p1, v0}, Lcom/squareup/ui/market/layout/e;->c(Landroid/graphics/Bitmap;I)Landroid/graphics/Bitmap;
@@ -82,7 +86,7 @@
.line 9
.line 10
.line 11
- const/16 v1, 0x19
+ div-int/lit8 v1, v2, 0x2
.line 12
.line 13
@@ -93,6 +97,10 @@
.line 16
move-result-object v1
+ invoke-static {v1}, Lradiant/BackdropFx;->apply(Landroid/graphics/Bitmap;)Landroid/graphics/Bitmap;
+
+ move-result-object v1
+
.line 17
invoke-virtual {v0}, Landroid/graphics/Bitmap;->recycle()V
+121
View File
@@ -0,0 +1,121 @@
--- a/com/tidal/android/feature/playerscreen/ui/PlayerScreenKt.smali
+++ b/com/tidal/android/feature/playerscreen/ui/PlayerScreenKt.smali
@@ -4433,6 +4433,14 @@
move-object/from16 v25, v10
+ sget-object v16, Lcom/tidal/android/feature/playerscreen/ui/model/PlayerBackgroundStyle;->DARK_BLUR:Lcom/tidal/android/feature/playerscreen/ui/model/PlayerBackgroundStyle; # RL: force native Blur player background
+
+ const/16 v21, 0x0 # RL: isPlaying=false (Static — no rotation)
+
+ const/16 v22, 0x0 # RL: isSeeking=false (Static — no scrub rotation)
+
+ invoke-static {}, Lradiant/HomeBackdrop;->setModeStatic()V # RL: mirror rotation to Cover Everywhere
+
.line 171
invoke-static/range {v16 .. v26}, Lcom/tidal/android/feature/playerscreen/ui/composables/p3;->b(Lcom/tidal/android/feature/playerscreen/ui/model/PlayerBackgroundStyle;JILjava/lang/String;ZZLam0/a;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V
--- a/com/tidal/android/core/ui/composable/c0.smali
+++ b/com/tidal/android/core/ui/composable/c0.smali
@@ -16,7 +16,9 @@
move-result p0
.line 5
- invoke-virtual {p2, p0}, Landroid/view/Window;->setNavigationBarColor(I)V
+ const/4 v3, 0x0 # RL: force transparent nav bar so the native blur backdrop shows through (was p0 = extracted BG color; luminance below still uses p0 for icon light/dark)
+
+ invoke-virtual {p2, v3}, Landroid/view/Window;->setNavigationBarColor(I)V
.line 6
.line 7
--- a/de0/c.smali
+++ b/de0/c.smali
@@ -26,29 +26,26 @@
.line 2
.line 3
.line 4
- const-string v0, "HeavyBlurTransformation() "
-
- .line 5
- .line 6
- const-string v1, " "
-
- .line 7
- .line 8
- const/4 v2, 0x6
-
- .line 9
- const/16 v3, 0x19
-
- .line 10
- .line 11
- invoke-static {v2, v3, v0, v1}, Landroidx/compose/foundation/text/input/a;->b(IILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-
- .line 12
- .line 13
- .line 14
+ new-instance v0, Ljava/lang/StringBuilder;
+ invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
+ const-string v1, "RLBackdrop_b"
+ invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
+ const/16 v1, __RL_BLUR__
+ invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
+ const-string v1, "c"
+ invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
+ const v1, __RL_CONTRAST__
+ invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
+ const-string v1, "s"
+ invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
+ const v1, __RL_SATURATION__
+ invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
+ const-string v1, "r"
+ invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
+ const v1, __RL_BRIGHTNESS__
+ invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
+ invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
-
- .line 15
iput-object v0, p0, Lde0/c;->a:Ljava/lang/String;
.line 16
@@ -59,10 +56,17 @@
# virtual methods
.method public final a(Landroid/graphics/Bitmap;)Landroid/graphics/Bitmap;
- .locals 2
+ .locals 3
.line 1
- const/4 v0, 0x6
+ const/16 v2, __RL_BLUR__
+ mul-int/lit8 v0, v2, 0x6
+ const/16 v1, 0x32
+ div-int v0, v0, v1
+ const/4 v1, 0x1
+ if-ge v0, v1, :rl_ds_ok
+ const/4 v0, 0x1
+ :rl_ds_ok
.line 2
invoke-static {p1, v0}, Lcom/squareup/ui/market/layout/e;->c(Landroid/graphics/Bitmap;I)Landroid/graphics/Bitmap;
@@ -82,7 +86,7 @@
.line 9
.line 10
.line 11
- const/16 v1, 0x19
+ div-int/lit8 v1, v2, 0x2
.line 12
.line 13
@@ -93,6 +97,10 @@
.line 16
move-result-object v1
+ invoke-static {v1}, Lradiant/BackdropFx;->apply(Landroid/graphics/Bitmap;)Landroid/graphics/Bitmap;
+
+ move-result-object v1
+
.line 17
invoke-virtual {v0}, Landroid/graphics/Bitmap;->recycle()V
-175
View File
@@ -1,175 +0,0 @@
# 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
@@ -4221,6 +4221,153 @@
invoke-static {v6, v3, v4}, Landroidx/compose/runtime/Updater;->set-impl(Landroidx/compose/runtime/Composer;Ljava/lang/Object;Lem0/p;)V
+ move-object/from16 v57, v6 # capture live composer into free reg
+
+ const v58, 0x52414449 # slot table key
+
+ invoke-interface/range {v57 .. v58}, Landroidx/compose/runtime/Composer;->startReplaceGroup(I)V # open group
+
+ move-object/from16 v3, p3 # player state
+
+ iget-object v3, v3, Lcom/tidal/android/feature/playerscreen/ui/s$a;->c:Lcom/tidal/android/feature/playerscreen/ui/d; # cover pager
+
+ iget-object v4, v3, Lcom/tidal/android/feature/playerscreen/ui/d;->a:Lzn0/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 # list size
+
+ move-result v6 # size value
+
+ if-le v6, v5, :radiant_skip # bounds check
+
+ if-ltz v5, :radiant_skip # negative check
+
+ invoke-interface {v4, v5}, Ljava/util/List;->get(I)Ljava/lang/Object; # current item
+
+ move-result-object v4 # current item
+
+ instance-of v6, v4, Lcom/tidal/android/feature/playerscreen/ui/c$a; # still album cover?
+
+ if-eqz v6, :radiant_try_animated # if not, try animated album cover
+
+ 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
+
+ goto :radiant_have_cover # cover resolved
+
+ :radiant_try_animated # animated album cover (c$b) shares albumId/cover layout
+ instance-of v6, v4, Lcom/tidal/android/feature/playerscreen/ui/c$b; # animated album cover?
+
+ if-eqz v6, :radiant_skip # neither -> skip (music video / unknown)
+
+ check-cast v4, Lcom/tidal/android/feature/playerscreen/ui/c$b; # narrow type
+
+ iget v5, v4, Lcom/tidal/android/feature/playerscreen/ui/c$b;->b:I # album id
+
+ iget-object v4, v4, Lcom/tidal/android/feature/playerscreen/ui/c$b;->c:Ljava/lang/String; # still cover uuid (blur this)
+
+ :radiant_have_cover # v5 = album id, v4 = cover uuid
+ new-instance v6, Lcom/tidal/android/feature/playerscreen/ui/composables/o0; # cover request lambda
+
+ invoke-direct {v6, v5, v4}, Lcom/tidal/android/feature/playerscreen/ui/composables/o0;-><init>(ILjava/lang/String;)V # build request
+
+ sget-object v5, Landroidx/compose/ui/Modifier;->Companion:Landroidx/compose/ui/Modifier$Companion; # base modifier
+
+ const/4 v7, 0x0 # fraction unused
+
+ const/4 v8, 0x1 # default fraction
+
+ 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 # filled modifier
+
+ const v7, __RL_BLUR_BITS__ # blur dp bits (Advanced Options: Blur Strength)
+
+ invoke-static {v7}, Landroidx/compose/ui/unit/Dp;->constructor-impl(F)F # to Dp
+
+ move-result v7 # blur dp value
+
+ 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; # rectangle treatment
+
+ 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 # blurred modifier
+
+ 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 # crop scale
+
+ move-object/from16 v61, v6 # request
+
+ const/16 v62, 0x0 # contentDescription
+
+ move-object/from16 v63, v5 # blurred modifier
+
+ const/16 v64, 0x0 # colorFilter
+
+ move-object/from16 v65, v7 # contentScale
+
+ move-object/from16 v66, v4 # cover uuid
+
+ const/16 v67, 0x0 # null onError
+
+ move-object/from16 v68, v57 # composer
+
+ const/16 v69, 0x0 # changed flags
+
+ const/16 v70, 0x48 # default mask
+
+ invoke-static/range {v61 .. v70}, Lee0/e;->a(Lem0/l;Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/ColorFilter;Landroidx/compose/ui/layout/ContentScale;Ljava/lang/Object;Lem0/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 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 # fullscreen modifier
+
+ const v6, __RL_SCRIM_ARGB__ # scrim ARGB (Advanced Options: Backdrop Dimming)
+
+ invoke-static {v6}, Landroidx/compose/ui/graphics/ColorKt;->Color(I)J # pack color long
+
+ 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 # 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 # tinted modifier
+
+ move-object/from16 v58, v3 # scrim modifier
+
+ move-object/from16 v59, v57 # composer
+
+ const/16 v60, 0x0 # changed flags
+
+ invoke-static/range {v58 .. v60}, Landroidx/compose/foundation/layout/SpacerKt;->Spacer(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V # draw scrim
+
+ :radiant_skip # skip target
+ invoke-interface/range {v57 .. v57}, Landroidx/compose/runtime/Composer;->endReplaceGroup()V # close group
+
.line 142
sget-object v3, Landroidx/compose/foundation/layout/BoxScopeInstance;->INSTANCE:Landroidx/compose/foundation/layout/BoxScopeInstance;
--- a/com/tidal/android/core/ui/composable/z.smali
+++ b/com/tidal/android/core/ui/composable/z.smali
@@ -13,13 +13,15 @@
.line 2
.line 3
.line 4
move-result p0
.line 5
- invoke-virtual {p2, p0}, Landroid/view/Window;->setNavigationBarColor(I)V
+ const/4 v3, 0x0
+
+ invoke-virtual {p2, v3}, Landroid/view/Window;->setNavigationBarColor(I)V # RL: force transparent nav bar so the player backdrop shows through (was p0 = TIDAL's extracted single-color BG). Luminance below still uses p0 so the light/dark icon choice adapts to the backdrop behind the now-transparent bar.
.line 6
.line 7
.line 8
sget p1, Landroid/os/Build$VERSION;->SDK_INT:I
+19 -19
View File
@@ -1,24 +1,24 @@
--- a/com/tidal/android/feature/playerscreen/ui/composables/z0.smali
+++ b/com/tidal/android/feature/playerscreen/ui/composables/z0.smali
@@ -91,7 +91,7 @@
--- a/com/tidal/android/feature/playerscreen/ui/composables/c1.smali
+++ b/com/tidal/android/feature/playerscreen/ui/composables/c1.smali
@@ -300,7 +300,7 @@
.line 32
.line 33
- sget p2, Lcom/tidal/android/feature/playerscreen/ui/R$drawable;->ic_circle_checked:I
+ sget p2, Lcom/tidal/android/feature/playerscreen/ui/R$drawable;->ic_shapes_heart_filled_medium:I # favorited: filled heart (was circle-check)
.line 128
.line 129
- sget v0, Lcom/tidal/android/feature/playerscreen/ui/R$drawable;->ic_circle_checked:I
+ sget v0, Lcom/tidal/android/feature/playerscreen/ui/R$drawable;->ic_shapes_heart_filled_medium:I # favorited: filled heart (was circle-check)
.line 34
.line 35
@@ -99,11 +99,7 @@
.line 130
.line 131
@@ -308,11 +308,7 @@
.line 36
:cond_1
- sget-object p2, Lb30/b;->O:Lb30/a;
.line 132
:cond_5
- sget-object v0, La30/b;->O:La30/a;
-
- .line 37
- .line 38
- iget p2, p2, Lb30/a;->a:I
+ sget p2, Lcom/tidal/android/feature/playerscreen/ui/R$drawable;->ic_shapes_heart_medium:I # not favorited: outline heart (was market plus)
- .line 133
- .line 134
- iget v0, v0, La30/a;->a:I
+ sget v0, Lcom/tidal/android/feature/playerscreen/ui/R$drawable;->ic_shapes_heart_medium:I # not favorited: outline heart (was market plus)
.line 39
.line 40
.line 135
.line 136
+4 -4
View File
@@ -1,11 +1,11 @@
--- a/com/tidal/android/feature/playerscreen/ui/PlayerScreenKt.smali
+++ b/com/tidal/android/feature/playerscreen/ui/PlayerScreenKt.smali
@@ -5794,6 +5794,8 @@
.line 336
iget-object v3, v10, Lcom/tidal/android/feature/playerscreen/ui/s$a;->l:Lcom/tidal/android/feature/playerscreen/ui/p;
@@ -5970,6 +5970,8 @@
.line 365
iget-object v3, v11, Lcom/tidal/android/feature/playerscreen/ui/s$a;->m:Lcom/tidal/android/feature/playerscreen/ui/p;
+ const/4 v3, 0x0 # Never show the "Playing from" source at the bottom (relocated above the title, or hidden when off)
+
if-nez v3, :cond_52
if-nez v3, :cond_5a
const v3, 0x26ba353b
+41 -39
View File
@@ -1,66 +1,68 @@
# rl-locals: com/tidal/android/feature/playerscreen/ui/composables/k2.smali a( 42
# rl-locals: com/tidal/android/feature/playerscreen/ui/composables/n2.smali a( 45
--- a/com/tidal/android/feature/playerscreen/ui/PlayerScreenKt.smali
+++ b/com/tidal/android/feature/playerscreen/ui/PlayerScreenKt.smali
@@ -5023,6 +5023,20 @@
.line 233
:goto_1d
+ iget-object v0, v3, Lcom/tidal/android/feature/playerscreen/ui/s$a;->l:Lcom/tidal/android/feature/playerscreen/ui/p; # RL move-playing-from: SourceLabel — published in BOTH cover & lyrics view (may be null)
@@ -5202,6 +5202,20 @@
.line 262
:goto_21
+ iget-object v7, v5, Lcom/tidal/android/feature/playerscreen/ui/s$a;->m:Lcom/tidal/android/feature/playerscreen/ui/p; # RL move-playing-from: SourceLabel — published in BOTH cover & lyrics view (may be null)
+
+ if-eqz v0, :rl_pf_null # no source -> clear
+ if-eqz v7, :rl_pf_null # no source -> clear
+
+ iget-object v0, v0, Lcom/tidal/android/feature/playerscreen/ui/p;->a:Ljava/lang/String; # sourceName
+ iget-object v7, v7, Lcom/tidal/android/feature/playerscreen/ui/p;->a:Ljava/lang/String; # sourceName
+
+ goto :rl_pf_set
+
+ :rl_pf_null
+ const/4 v0, 0x0
+ const/4 v7, 0x0
+
+ :rl_pf_set
+ sput-object v0, Lradiant/PlayingFrom;->a:Ljava/lang/String; # publish for k2 (rendered above the title)
+ sput-object v7, Lradiant/PlayingFrom;->a:Ljava/lang/String; # publish for n2 (rendered above the title)
+
iget-object v0, v3, Lcom/tidal/android/feature/playerscreen/ui/s$a;->c:Lcom/tidal/android/feature/playerscreen/ui/d;
.line 234
--- a/com/tidal/android/feature/playerscreen/ui/composables/k2.smali
+++ b/com/tidal/android/feature/playerscreen/ui/composables/k2.smali
@@ -632,6 +632,39 @@
.line 42
:cond_1c
check-cast v5, Lr20/c2;
+ sget-object v30, Lradiant/PlayingFrom;->a:Ljava/lang/String; # RL: published "Playing from" source name
iget-object v7, v5, Lcom/tidal/android/feature/playerscreen/ui/s$a;->c:Lcom/tidal/android/feature/playerscreen/ui/d;
.line 263
--- a/com/tidal/android/feature/playerscreen/ui/composables/n2.smali
+++ b/com/tidal/android/feature/playerscreen/ui/composables/n2.smali
@@ -674,6 +674,41 @@
:cond_1e
check-cast v3, Lq20/c2;
+ move-object/from16 v33, v1 # RL: composer held stable for the conditional group
+
+ const v13, 0x52414450 # RL group key (v13 is dead here; the title setup below resets it)
+ const v34, 0x52414450 # RL group key
+
+ invoke-interface {v1, v13}, Landroidx/compose/runtime/Composer;->startReplaceGroup(I)V
+ invoke-interface/range {v33 .. v34}, Landroidx/compose/runtime/Composer;->startReplaceGroup(I)V
+
+ if-eqz v30, :rl_pf_skip # no source -> render nothing above the title
+ sget-object v34, Lradiant/PlayingFrom;->a:Ljava/lang/String; # RL: published "Playing from" source name
+
+ sget-object v31, Landroidx/compose/ui/Modifier;->Companion:Landroidx/compose/ui/Modifier$Companion;
+ if-eqz v34, :rl_pf_skip # no source -> render nothing above the title
+
+ const/16 v32, 0x1 # maxLines = 1
+ sget-object v35, Landroidx/compose/ui/Modifier;->Companion:Landroidx/compose/ui/Modifier$Companion;
+
+ const/16 v33, 0x0
+ const/16 v36, 0x1 # maxLines = 1
+
+ const/16 v34, 0x0
+ const/16 v37, 0x0
+
+ const/16 v35, 0x0
+
+ const/16 v36, 0x0
+
+ move-object/from16 v37, v5 # reuse the artist PARAGRAPH_30 style (same colour + size as the artist names)
+
+ move-object/from16 v38, v1 # composer
+ const/16 v38, 0x0
+
+ const/16 v39, 0x0
+
+ const/16 v40, 0x78 # default-arg mask (matches the artist MarketLabel.e call)
+ const/16 v40, 0x0
+
+ invoke-static/range {v30 .. v40}, Lcom/squareup/ui/market/components/MarketLabelKt;->e(Ljava/lang/String;Landroidx/compose/ui/Modifier;IILcom/squareup/ui/market/text/a;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lem0/l;Lr20/c2;Landroidx/compose/runtime/Composer;II)V
+ move-object/from16 v41, v3 # reuse the artist PARAGRAPH_30 style (same colour + size)
+
+ move-object/from16 v42, v1 # composer
+
+ const/16 v43, 0x0
+
+ const/16 v44, 0x78 # default-arg mask (matches the artist MarketLabel.e call)
+
+ invoke-static/range {v34 .. v44}, Lcom/squareup/ui/market/components/MarketLabelKt;->e(Ljava/lang/String;Landroidx/compose/ui/Modifier;IILcom/squareup/ui/market/text/a;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lam0/l;Lq20/c2;Landroidx/compose/runtime/Composer;II)V
+
+ :rl_pf_skip
+ invoke-interface {v1}, Landroidx/compose/runtime/Composer;->endReplaceGroup()V
+ invoke-interface/range {v33 .. v33}, Landroidx/compose/runtime/Composer;->endReplaceGroup()V
+
.line 43
sget-object v13, Landroidx/compose/ui/Modifier;->Companion:Landroidx/compose/ui/Modifier$Companion;
sget-object v17, Landroidx/compose/ui/Modifier;->Companion:Landroidx/compose/ui/Modifier$Companion;
+8 -8
View File
@@ -1,9 +1,9 @@
# 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
@@ -5579,6 +5579,20 @@
@@ -5755,6 +5755,20 @@
const/4 v9, 0x0
const/4 v8, 0x0
+ invoke-static {}, Landroidx/compose/ui/platform/CompositionLocalsKt;->getLocalLayoutDirection()Landroidx/compose/runtime/ProvidableCompositionLocal; # layout-direction local
+
@@ -19,15 +19,15 @@
+
+ invoke-interface/range {v76 .. v77}, Landroidx/compose/runtime/Composer;->startProvider(Landroidx/compose/runtime/ProvidedValue;)V # open Rtl scope (mirror row)
+
.line 306
invoke-static {v0, v9, v14, v8}, Landroidx/compose/foundation/layout/SizeKt;->fillMaxWidth$default(Landroidx/compose/ui/Modifier;FILjava/lang/Object;)Landroidx/compose/ui/Modifier;
.line 335
invoke-static {v1, v8, v14, v3}, Landroidx/compose/foundation/layout/SizeKt;->fillMaxWidth$default(Landroidx/compose/ui/Modifier;FILjava/lang/Object;)Landroidx/compose/ui/Modifier;
@@ -6049,6 +6063,8 @@
.line 364
@@ -6221,6 +6235,8 @@
.line 393
invoke-interface {v7}, Landroidx/compose/runtime/Composer;->endNode()V
+ invoke-interface {v7}, Landroidx/compose/runtime/Composer;->endProvider()V # close Rtl scope (end mirror)
+
.line 365
invoke-static/range {v27 .. v27}, Landroidx/compose/ui/unit/Dp;->constructor-impl(F)F
.line 394
invoke-static/range {v41 .. v41}, Landroidx/compose/ui/unit/Dp;->constructor-impl(F)F
+27 -27
View File
@@ -2,7 +2,7 @@
+++ 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/m4;->g:F
sget v4, Lcom/tidal/android/feature/playerscreen/ui/composables/t4;->g:F
+ const/high16 v11, 0x40000000 # 2.0f
+
@@ -30,7 +30,7 @@
+
+ move-object/from16 v3, p1
+
+ invoke-static {v13, v3}, Lradiant/QualityBadge;->style(ILr20/c2;)Lr20/c2;
+ invoke-static {v13, v3}, Lradiant/QualityBadge;->style(ILq20/c2;)Lq20/c2;
+
+ move-result-object v8
+
@@ -72,46 +72,46 @@
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
@@ -1399,7 +1399,15 @@
.line 634
.line 635
.line 636
- move-result v9
+ move-result v9 # isCurrentStreamHiResLosslessQuality() result
@@ -1452,7 +1452,15 @@
.line 662
.line 663
.line 664
- move-result v8
+ move-result v8 # isCurrentStreamHiResLosslessQuality() result
+
+ const/16 v31, 0x0 # LOW / HIGH quality
+
+ if-eqz v9, :radiant_qbc_not_hires
+ if-eqz v8, :radiant_qbc_not_hires
+
+ const/16 v31, 0x2 # HI_RES_LOSSLESS quality
+
+ :radiant_qbc_not_hires
.line 637
if-nez v9, :cond_1e
@@ -1411,7 +1419,13 @@
.line 640
.line 641
.line 642
- move-result v9
+ move-result v9 # isCurrentStreamLossless() result
.line 665
if-nez v8, :cond_1f
@@ -1464,7 +1472,13 @@
.line 668
.line 669
.line 670
- move-result v8
+ move-result v8 # isCurrentStreamLossless() result
+
+ if-eqz v9, :radiant_qbc_not_lossless
+ if-eqz v8, :radiant_qbc_not_lossless
+
+ const/16 v31, 0x1 # LOSSLESS quality
+
+ :radiant_qbc_not_lossless
.line 643
if-eqz v9, :cond_1d
@@ -1740,7 +1754,9 @@
.line 671
if-eqz v8, :cond_1e
@@ -1793,7 +1807,9 @@
.line 790
.line 791
- invoke-direct {v7, v5}, Lcom/tidal/android/feature/playerscreen/ui/i$a;-><init>(Ljava/lang/String;)V
.line 818
.line 819
- invoke-direct {v5, v4}, Lcom/tidal/android/feature/playerscreen/ui/i$a;-><init>(Ljava/lang/String;)V
+ move/from16 v9, v31 # quality
+
+ invoke-direct {v7, v5, v9}, Lcom/tidal/android/feature/playerscreen/ui/i$a;-><init>(Ljava/lang/String;I)V
+ invoke-direct {v5, v4, v9}, Lcom/tidal/android/feature/playerscreen/ui/i$a;-><init>(Ljava/lang/String;I)V
.line 792
.line 793
.line 820
.line 821