mirror of
https://github.com/meowarex/rl-mobile.git
synced 2026-06-18 05:23:12 +10:00
Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c89dd54fa6 | |||
| 53a4341d6b | |||
| c81d2edba3 | |||
| 9180129afc | |||
| d9de3207f5 | |||
| 59fe232ae4 | |||
| e105a3eb35 |
@@ -60,7 +60,7 @@ jobs:
|
||||
if [[ "$tidal_src" == *.apkm ]]; then
|
||||
echo "Merging splits from $tidal_src via APKEditor"
|
||||
curl --fail --location --retry 3 --retry-delay 2 -sSo /tmp/APKEditor.jar \
|
||||
https://github.com/REAndroid/APKEditor/releases/download/V1.4.3/APKEditor-1.4.3.jar
|
||||
https://github.com/REAndroid/APKEditor/releases/download/V1.4.9/APKEditor-1.4.9.jar
|
||||
java -jar /tmp/APKEditor.jar m -i "$tidal_src" -o ./dist/tidal-stock.apk
|
||||
echo "Merged tidal-stock.apk:"
|
||||
ls -la ./dist/tidal-stock.apk
|
||||
|
||||
@@ -12,7 +12,6 @@ class PreferencesManager(preferences: SharedPreferences) : BasePreferenceManager
|
||||
var devMode by booleanPreference("dev_mode", false)
|
||||
var installer by enumPreference<InstallerSetting>("installer", InstallerSetting.PackageInstaller)
|
||||
var keepPatchedApks by booleanPreference("keep_patched_apks", false)
|
||||
var showNetworkWarning by booleanPreference("show_network_warning", true)
|
||||
var showPlayProtectWarning by booleanPreference("show_play_protect_warning", true)
|
||||
var autoUpdateCheck by booleanPreference("auto_update_check", true)
|
||||
|
||||
|
||||
-96
@@ -1,96 +0,0 @@
|
||||
package com.meowarex.rlmobile.ui.components.dialogs
|
||||
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.interaction.MutableInteractionSource
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.material3.*
|
||||
import androidx.compose.runtime.*
|
||||
import androidx.compose.runtime.saveable.rememberSaveable
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.window.DialogProperties
|
||||
import com.meowarex.rlmobile.R
|
||||
|
||||
@Composable
|
||||
fun NetworkWarningDialog(
|
||||
onConfirm: (neverShow: Boolean) -> Unit,
|
||||
onDismiss: (neverShow: Boolean) -> Unit,
|
||||
) {
|
||||
val interactionSource = remember(::MutableInteractionSource)
|
||||
var neverShow by rememberSaveable { mutableStateOf(false) }
|
||||
val rememberedNeverShow by rememberUpdatedState(neverShow)
|
||||
|
||||
AlertDialog(
|
||||
onDismissRequest = { onDismiss(rememberedNeverShow) },
|
||||
properties = DialogProperties(
|
||||
dismissOnClickOutside = false,
|
||||
),
|
||||
confirmButton = {
|
||||
FilledTonalButton(
|
||||
onClick = { onConfirm(rememberedNeverShow) },
|
||||
colors = ButtonDefaults.filledTonalButtonColors(
|
||||
containerColor = MaterialTheme.colorScheme.error,
|
||||
contentColor = MaterialTheme.colorScheme.onError,
|
||||
),
|
||||
) {
|
||||
Text(stringResource(R.string.action_continue))
|
||||
}
|
||||
},
|
||||
dismissButton = {
|
||||
TextButton(
|
||||
onClick = { onDismiss(rememberedNeverShow) },
|
||||
colors = ButtonDefaults.textButtonColors(
|
||||
contentColor = MaterialTheme.colorScheme.onErrorContainer
|
||||
),
|
||||
) {
|
||||
Text(stringResource(R.string.navigation_back))
|
||||
}
|
||||
},
|
||||
title = { Text(stringResource(R.string.network_warning_title)) },
|
||||
text = {
|
||||
Column(
|
||||
verticalArrangement = Arrangement.spacedBy(12.dp),
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
) {
|
||||
Text(
|
||||
text = stringResource(R.string.network_warning_body),
|
||||
textAlign = TextAlign.Center,
|
||||
)
|
||||
|
||||
Row(
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
modifier = Modifier
|
||||
.clickable(
|
||||
interactionSource = interactionSource,
|
||||
indication = null,
|
||||
onClick = { neverShow = !rememberedNeverShow },
|
||||
)
|
||||
.padding(end = 16.dp)
|
||||
) {
|
||||
Checkbox(
|
||||
checked = neverShow,
|
||||
onCheckedChange = { neverShow = it },
|
||||
interactionSource = interactionSource,
|
||||
)
|
||||
|
||||
Text(stringResource(R.string.network_warning_disable))
|
||||
}
|
||||
}
|
||||
},
|
||||
icon = {
|
||||
Icon(
|
||||
painter = painterResource(R.drawable.ic_warning),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(32.dp),
|
||||
)
|
||||
},
|
||||
containerColor = MaterialTheme.colorScheme.errorContainer,
|
||||
iconContentColor = MaterialTheme.colorScheme.onErrorContainer,
|
||||
titleContentColor = MaterialTheme.colorScheme.onErrorContainer,
|
||||
textContentColor = MaterialTheme.colorScheme.onErrorContainer,
|
||||
)
|
||||
}
|
||||
-19
@@ -1,19 +0,0 @@
|
||||
package com.meowarex.rlmobile.ui.previews.dialogs
|
||||
|
||||
import android.content.res.Configuration
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.meowarex.rlmobile.ui.components.dialogs.NetworkWarningDialog
|
||||
import com.meowarex.rlmobile.ui.theme.ManagerTheme
|
||||
|
||||
@Composable
|
||||
@Preview(uiMode = Configuration.UI_MODE_NIGHT_YES)
|
||||
@Preview(uiMode = Configuration.UI_MODE_NIGHT_NO)
|
||||
private fun NetworkWarningDialogPreview() {
|
||||
ManagerTheme {
|
||||
NetworkWarningDialog(
|
||||
onConfirm = {},
|
||||
onDismiss = {},
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -117,18 +117,22 @@ class HomeModel(
|
||||
|
||||
val remote = remoteDataJson
|
||||
val currentPatches = remote?.patchesVersion?.toString()
|
||||
val installedPatches = installMetadata?.patchesVersion?.toString()
|
||||
val previousPatches = initialPrefPatchesVersion.ifEmpty {
|
||||
installMetadata?.patchesVersion?.toString().orEmpty()
|
||||
installedPatches.orEmpty()
|
||||
}
|
||||
val patchesFrom = previousPatches.takeIf { it.isNotEmpty() }
|
||||
val patchesTo = currentPatches ?: previousPatches.ifEmpty { "?" }
|
||||
val patchesUpdateAvailable = installedPatches != null
|
||||
&& currentPatches != null
|
||||
&& installedPatches != currentPatches
|
||||
add(
|
||||
VersionDelta(
|
||||
label = application.getString(R.string.manager_update_row_patches),
|
||||
iconRes = R.drawable.ic_extension,
|
||||
from = patchesFrom,
|
||||
to = patchesTo,
|
||||
tag = if (patchesFrom != null && patchesFrom != patchesTo)
|
||||
tag = if (patchesUpdateAvailable)
|
||||
application.getString(R.string.manager_update_tag_available) else null,
|
||||
)
|
||||
)
|
||||
@@ -142,13 +146,16 @@ class HomeModel(
|
||||
val tidalTo = currentTidal?.toString()
|
||||
?: previousTidal.takeIf { it > 0 }?.toString()
|
||||
?: "?"
|
||||
val tidalUpdateAvailable = installedTidalVersionCode > 0
|
||||
&& currentTidal != null
|
||||
&& installedTidalVersionCode != currentTidal
|
||||
add(
|
||||
VersionDelta(
|
||||
label = application.getString(R.string.manager_update_row_tidal),
|
||||
iconRes = R.drawable.ic_music_note,
|
||||
from = tidalFrom,
|
||||
to = tidalTo,
|
||||
tag = if (tidalFrom != null && tidalFrom != tidalTo)
|
||||
tag = if (tidalUpdateAvailable)
|
||||
application.getString(R.string.manager_update_tag_available) else null,
|
||||
)
|
||||
)
|
||||
|
||||
@@ -208,7 +208,9 @@ private fun ColumnScope.HomeContent(
|
||||
val label = when {
|
||||
state.latestTidalVersionCode == null -> "Loading…"
|
||||
install == null -> "Install"
|
||||
install.isUpToDate == false -> "Update"
|
||||
patchesBehind && tidalBehind -> "Update Patches & TIDAL"
|
||||
patchesBehind -> "Update Patches"
|
||||
tidalBehind -> "Update TIDAL"
|
||||
else -> "Repatch"
|
||||
}
|
||||
Text(
|
||||
|
||||
-14
@@ -28,7 +28,6 @@ import com.meowarex.rlmobile.patcher.steps.StepGroup
|
||||
import com.meowarex.rlmobile.ui.components.MainActionButton
|
||||
import com.meowarex.rlmobile.ui.components.Wakelock
|
||||
import com.meowarex.rlmobile.ui.components.dialogs.InstallerAbortDialog
|
||||
import com.meowarex.rlmobile.ui.components.dialogs.NetworkWarningDialog
|
||||
import com.meowarex.rlmobile.ui.screens.log.LogScreen
|
||||
import com.meowarex.rlmobile.ui.screens.patching.components.*
|
||||
import com.meowarex.rlmobile.ui.screens.patchopts.PatchOptions
|
||||
@@ -111,19 +110,6 @@ class PatchingScreen(
|
||||
listState.animateScrollToItem(0)
|
||||
}
|
||||
|
||||
if (model.showNetworkWarningDialog) {
|
||||
NetworkWarningDialog(
|
||||
onConfirm = { neverShow ->
|
||||
model.hideNetworkWarning(neverShow)
|
||||
model.install()
|
||||
},
|
||||
onDismiss = { neverShow ->
|
||||
model.hideNetworkWarning(neverShow)
|
||||
navigator.pop()
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
if (showAbortWarning) {
|
||||
InstallerAbortDialog(
|
||||
onDismiss = { showAbortWarning = false },
|
||||
|
||||
+1
-17
@@ -41,9 +41,6 @@ class PatchingScreenModel(
|
||||
|
||||
val devMode get() = prefs.devMode
|
||||
|
||||
var showNetworkWarningDialog by mutableStateOf(!alreadyShownNetworkWarning && application.isNetworkDangerous())
|
||||
private set
|
||||
|
||||
var steps by mutableStateOf<ImmutableMap<StepGroup, ImmutableList<Step>>?>(null)
|
||||
private set
|
||||
|
||||
@@ -52,11 +49,7 @@ class PatchingScreenModel(
|
||||
private set
|
||||
|
||||
init {
|
||||
if (!prefs.showNetworkWarning)
|
||||
showNetworkWarningDialog = false
|
||||
|
||||
if (!showNetworkWarningDialog)
|
||||
install()
|
||||
install()
|
||||
|
||||
// Rotate fun facts every so often
|
||||
screenModelScope.launch {
|
||||
@@ -67,12 +60,6 @@ class PatchingScreenModel(
|
||||
}
|
||||
}
|
||||
|
||||
fun hideNetworkWarning(neverShow: Boolean) {
|
||||
showNetworkWarningDialog = false
|
||||
alreadyShownNetworkWarning = true
|
||||
prefs.showNetworkWarning = !neverShow
|
||||
}
|
||||
|
||||
fun launchApp() {
|
||||
if (state.value !is PatchingScreenState.Success)
|
||||
return
|
||||
@@ -194,9 +181,6 @@ class PatchingScreenModel(
|
||||
}
|
||||
|
||||
companion object {
|
||||
// Global state to avoid showing the warning more than once per launch
|
||||
private var alreadyShownNetworkWarning = false
|
||||
|
||||
/**
|
||||
* Random fun facts to show on the installation screen.
|
||||
*/
|
||||
|
||||
+40
-3
@@ -4,19 +4,31 @@ import androidx.annotation.StringRes
|
||||
import com.meowarex.rlmobile.R
|
||||
|
||||
enum class KnownPatch(
|
||||
/**
|
||||
* Numeric display order in the patch options list. Lower = higher up.
|
||||
*
|
||||
* Convention: main patches use multiples of 10 (10, 20, 30, …). Patches
|
||||
* that act as helpers/dependencies of a main patch get offsets adjacent to
|
||||
* the requirer (e.g. main at 40, helpers at 41, 42, 43). DebugMenuUnlock
|
||||
* is pinned to 100 to keep it at the bottom of the list.
|
||||
*/
|
||||
val order: Int,
|
||||
val fileNames: List<String>,
|
||||
@StringRes val titleRes: Int,
|
||||
@StringRes val descRes: Int,
|
||||
val requires: List<KnownPatch> = emptyList(),
|
||||
val disables: List<KnownPatch> = emptyList(),
|
||||
) {
|
||||
// Dependency-first order (later refs need backward resolution)
|
||||
// Dependency-first order (later refs need backward resolution).
|
||||
// The `order` field controls display order; declaration order doesn't matter.
|
||||
LyricsDisableCover(
|
||||
order = 41,
|
||||
fileNames = listOf("lyrics-disable-cover.patch"),
|
||||
titleRes = R.string.patch_lyrics_disable_cover_title,
|
||||
descRes = R.string.patch_lyrics_disable_cover_desc,
|
||||
),
|
||||
LyricsReplaceLyricsButton(
|
||||
order = 42,
|
||||
fileNames = listOf(
|
||||
"lyrics-replace-lyrics-button.patch",
|
||||
"lyrics-sparkle-conditional-visibility.patch",
|
||||
@@ -25,21 +37,40 @@ enum class KnownPatch(
|
||||
descRes = R.string.patch_lyrics_replace_button_desc,
|
||||
),
|
||||
LyricsReplaceShareButton(
|
||||
order = 43,
|
||||
fileNames = listOf("lyrics-replace-share-button.patch"),
|
||||
titleRes = R.string.patch_lyrics_replace_share_button_title,
|
||||
descRes = R.string.patch_lyrics_replace_share_button_desc,
|
||||
),
|
||||
LyricsRlApi(
|
||||
order = 20,
|
||||
fileNames = listOf(
|
||||
"lyrics-rl-api.patch",
|
||||
"lyrics-rl-api-observer.patch",
|
||||
),
|
||||
titleRes = R.string.patch_lyrics_rl_api_title,
|
||||
descRes = R.string.patch_lyrics_rl_api_desc,
|
||||
),
|
||||
LyricsKeepControlsVisible(
|
||||
order = 60,
|
||||
fileNames = listOf("lyrics-keep-controls-visible.patch"),
|
||||
titleRes = R.string.patch_lyrics_keep_controls_title,
|
||||
descRes = R.string.patch_lyrics_keep_controls_desc,
|
||||
),
|
||||
PlayerBackdrop(
|
||||
order = 30,
|
||||
fileNames = listOf("player-backdrop.patch"),
|
||||
titleRes = R.string.patch_player_backdrop_title,
|
||||
descRes = R.string.patch_player_backdrop_desc,
|
||||
),
|
||||
DebugMenuUnlock(
|
||||
order = 100,
|
||||
fileNames = listOf("debug-menu-unlock.patch"),
|
||||
titleRes = R.string.patch_debug_menu_unlock_title,
|
||||
descRes = R.string.patch_debug_menu_unlock_desc,
|
||||
),
|
||||
LyricsProgressPill(
|
||||
order = 40,
|
||||
fileNames = listOf(
|
||||
"lyrics-progress-pill.patch",
|
||||
"lyrics-fade-region.patch",
|
||||
@@ -49,6 +80,7 @@ enum class KnownPatch(
|
||||
requires = listOf(LyricsDisableCover, LyricsReplaceShareButton),
|
||||
),
|
||||
EnableLegacyUi(
|
||||
order = 10,
|
||||
fileNames = listOf("enable-legacy-ui.patch"),
|
||||
titleRes = R.string.patch_enable_legacy_ui_title,
|
||||
descRes = R.string.patch_enable_legacy_ui_desc,
|
||||
@@ -57,15 +89,20 @@ enum class KnownPatch(
|
||||
LyricsDisableCover,
|
||||
LyricsReplaceLyricsButton,
|
||||
LyricsReplaceShareButton,
|
||||
LyricsRlApi,
|
||||
LyricsKeepControlsVisible,
|
||||
PlayerBackdrop,
|
||||
LyricsProgressPill,
|
||||
),
|
||||
);
|
||||
|
||||
companion object {
|
||||
// Alphabetical by first filename, but pin DebugMenuUnlock to the bottom
|
||||
/**
|
||||
* Sorted by `order` ascending. Tie-breaks fall back to the first filename
|
||||
* (alphabetical) so the order is always deterministic.
|
||||
*/
|
||||
val All: List<KnownPatch> = entries.sortedWith(
|
||||
compareBy({ it == DebugMenuUnlock }, { it.fileNames.first() })
|
||||
compareBy({ it.order }, { it.fileNames.first() })
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,11 +5,9 @@ import android.app.Activity
|
||||
import android.content.*
|
||||
import android.content.pm.PackageManager
|
||||
import android.content.res.Resources
|
||||
import android.net.ConnectivityManager
|
||||
import android.net.Uri
|
||||
import android.os.*
|
||||
import android.provider.Settings
|
||||
import android.telephony.TelephonyManager
|
||||
import android.util.Log
|
||||
import android.util.TypedValue
|
||||
import android.widget.Toast
|
||||
@@ -152,37 +150,6 @@ suspend fun Context.isPlayProtectEnabled(): Boolean? {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether the device is connected on a metered WIFI connection or through any type of mobile data,
|
||||
* to avoid unknowingly downloading a lot of stuff through a potentially metered network.
|
||||
*/
|
||||
@Suppress("DEPRECATION")
|
||||
fun Context.isNetworkDangerous(): Boolean {
|
||||
val connectivity = this.getSystemService<ConnectivityManager>()
|
||||
?: error("Unable to get system connectivity service")
|
||||
|
||||
if (connectivity.isActiveNetworkMetered) return true
|
||||
|
||||
when (val info = connectivity.activeNetworkInfo) {
|
||||
null -> return false
|
||||
else -> {
|
||||
if (info.isRoaming) return true
|
||||
if (info.type == ConnectivityManager.TYPE_WIFI) return false
|
||||
}
|
||||
}
|
||||
|
||||
val telephony = this.getSystemService<TelephonyManager>()
|
||||
?: error("Unable to get system telephony service")
|
||||
|
||||
val dangerousMobileDataStates = arrayOf(
|
||||
/* TelephonyManager.DATA_DISCONNECTING */ 4,
|
||||
TelephonyManager.DATA_CONNECTED,
|
||||
TelephonyManager.DATA_CONNECTING,
|
||||
)
|
||||
|
||||
return dangerousMobileDataStates.contains(telephony.dataState)
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the user associated with this context.
|
||||
*/
|
||||
|
||||
@@ -259,6 +259,14 @@
|
||||
<string name="patch_lyrics_progress_pill_desc">Restores the old Track Progress Pill in the top of the Lyrics screen!</string>
|
||||
<string name="patch_lyrics_replace_button_title">Replace Lyrics Button</string>
|
||||
<string name="patch_lyrics_replace_button_desc">Replaces the Lyrics button with the RL Sparkle!</string>
|
||||
<string name="patch_lyrics_rl_api_title">Radiant Lyrics API</string>
|
||||
<string name="patch_lyrics_rl_api_desc">Use Radiant Lyrics API to fetch Lyrics (Higher quality & More providers)</string>
|
||||
<string name="patch_sticky_lyrics_title">Sticky Lyrics</string>
|
||||
<string name="patch_sticky_lyrics_desc">Always Forces the Lyrics page to be opened (aslong as the track has lyrics)</string>
|
||||
<string name="patch_lyrics_keep_controls_title">Keep Controls Visible</string>
|
||||
<string
|
||||
name="patch_lyrics_keep_controls_desc"
|
||||
>Inverts the auto-hide behavior on the lyrics screen, playback controls stay visible by default and only hide when you tap them off.</string>
|
||||
<string name="patch_player_backdrop_title">Player Backdrop</string>
|
||||
<string name="patch_player_backdrop_desc">Restores the legacy translucent backdrop blur behind the player.</string>
|
||||
<string name="patch_lyrics_replace_share_button_title">Replace Share Button</string>
|
||||
@@ -315,7 +323,7 @@
|
||||
<string name="play_protect_warning_open_gpp">Open Play Protect</string>
|
||||
<string name="play_protect_warning_disable">Don\'t show this again</string>
|
||||
|
||||
<string name="fun_fact_prefix">Fun Fact: %s</string>
|
||||
<string name="fun_fact_prefix">%s</string>
|
||||
<string name="fun_fact_1">Did you know that TIDAL no longer like blur!</string>
|
||||
<string name="fun_fact_2">Radiant Lyrics is also available for DESKTOP!!!</string>
|
||||
<string name="fun_fact_3">i am in your walls!</string>
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"tidalVersionCode": 9089,
|
||||
"tidalVersionCode": 9090,
|
||||
"tidalApkUrl": "https://github.com/meowarex/rl-mobile/releases/download/latest/tidal-stock.apk",
|
||||
"patchesVersion": "0.6.0"
|
||||
"patchesVersion": "0.7.6"
|
||||
}
|
||||
|
||||
@@ -1,43 +1,36 @@
|
||||
--- a/com/tidal/android/core/debug/DebugFeatureInteractorDefault.smali
|
||||
+++ b/com/tidal/android/core/debug/DebugFeatureInteractorDefault.smali
|
||||
@@ -53,6 +53,11 @@
|
||||
@@ -54,6 +54,9 @@
|
||||
.method public final a()Z
|
||||
.locals 2
|
||||
|
||||
+ # rl-debug-unlock: force a() to always return true, bypassing the
|
||||
+ # "debug-menu" feature flag check that normally hides the Settings entry.
|
||||
+ const/4 v0, 0x1
|
||||
+ return v0
|
||||
+ const/4 v0, 0x1 # force true
|
||||
+ return v0 # bypass debug flag
|
||||
+
|
||||
.line 1
|
||||
iget-object v0, p0, Lcom/tidal/android/core/debug/DebugFeatureInteractorDefault;->a:Lcom/tidal/android/featureflags/l;
|
||||
|
||||
@@ -97,6 +102,14 @@
|
||||
@@ -98,6 +101,14 @@
|
||||
}
|
||||
.end annotation
|
||||
|
||||
+ # rl-debug-unlock: short-circuit b() to always emit MutableStateFlow(TRUE).
|
||||
+ # Mirrors the original ":cond_1 :goto_0" path the app uses for internal/test builds.
|
||||
+ sget-object v0, Ljava/lang/Boolean;->TRUE:Ljava/lang/Boolean;
|
||||
+ sget-object v0, Ljava/lang/Boolean;->TRUE:Ljava/lang/Boolean; # always-true value
|
||||
+
|
||||
+ invoke-static {v0}, Lkotlinx/coroutines/flow/StateFlowKt;->MutableStateFlow(Ljava/lang/Object;)Lkotlinx/coroutines/flow/MutableStateFlow;
|
||||
+ invoke-static {v0}, Lkotlinx/coroutines/flow/StateFlowKt;->MutableStateFlow(Ljava/lang/Object;)Lkotlinx/coroutines/flow/MutableStateFlow; # wrap in flow
|
||||
+
|
||||
+ move-result-object v0
|
||||
+ move-result-object v0 # the flow
|
||||
+
|
||||
+ return-object v0
|
||||
+ return-object v0 # short-circuit b()
|
||||
+
|
||||
.line 1
|
||||
sget-object v0, Lh50/a;->a:Ljava/lang/String;
|
||||
sget-object v0, Lj50/a;->a:Ljava/lang/String;
|
||||
|
||||
@@ -261,6 +274,11 @@
|
||||
@@ -261,5 +272,8 @@
|
||||
.method public final c()Z
|
||||
.locals 3
|
||||
|
||||
+ # rl-debug-unlock: force c() to always return true, bypassing the
|
||||
+ # applicationId-substring / in-app-bug-reports / export-logs flag checks.
|
||||
+ const/4 v0, 0x1
|
||||
+ return v0
|
||||
+ const/4 v0, 0x1 # force true
|
||||
+ return v0 # bypass debug flag
|
||||
+
|
||||
.line 1
|
||||
sget-object v0, Lh50/a;->a:Ljava/lang/String;
|
||||
|
||||
sget-object v0, Lj50/a;->a:Ljava/lang/String;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
--- a/ig/d.smali
|
||||
+++ b/ig/d.smali
|
||||
--- a/kg/e.smali
|
||||
+++ b/kg/e.smali
|
||||
@@ -26,8 +26,8 @@
|
||||
new-instance v0, Lig/d;
|
||||
new-instance v0, Lkg/e;
|
||||
|
||||
.line 2
|
||||
.line 3
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
.class public final Lradiant/NoOp;
|
||||
.super Ljava/lang/Object;
|
||||
.implements Ltl0/a;
|
||||
.implements Lyl0/a;
|
||||
|
||||
|
||||
# static fields
|
||||
|
||||
@@ -0,0 +1,210 @@
|
||||
.class public final Lradiant/RLAPILyricsHook;
|
||||
.super Ljava/lang/Object;
|
||||
|
||||
|
||||
# static fields
|
||||
.field public static volatile currentKey:Ljava/lang/String;
|
||||
|
||||
.field public static volatile isRlState:Z
|
||||
|
||||
|
||||
# direct methods
|
||||
.method static constructor <clinit>()V
|
||||
.locals 1
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
sput-object v0, Lradiant/RLAPILyricsHook;->currentKey:Ljava/lang/String;
|
||||
|
||||
sput-boolean v0, Lradiant/RLAPILyricsHook;->isRlState:Z
|
||||
|
||||
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 dlog(Ljava/lang/String;)V
|
||||
.locals 1
|
||||
|
||||
const-string v0, "RLLyrics"
|
||||
|
||||
invoke-static {v0, p0}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method private static isBlank(Ljava/lang/String;)Z
|
||||
.locals 2
|
||||
|
||||
if-nez p0, :not_null
|
||||
|
||||
const/4 v0, 0x1
|
||||
|
||||
return v0
|
||||
|
||||
:not_null
|
||||
invoke-virtual {p0}, Ljava/lang/String;->trim()Ljava/lang/String;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
invoke-virtual {v0}, Ljava/lang/String;->isEmpty()Z
|
||||
|
||||
move-result v1
|
||||
|
||||
return v1
|
||||
.end method
|
||||
|
||||
.method public static onWampTrack(Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;Lcom/aspiro/wamp/model/Track;)V
|
||||
.locals 11
|
||||
|
||||
const/4 v3, 0x0
|
||||
|
||||
sput-boolean v3, Lradiant/RLAPILyricsHook;->isRlState:Z
|
||||
|
||||
const-string v3, "onWampTrack: hook entered"
|
||||
|
||||
invoke-static {v3}, Lradiant/RLAPILyricsHook;->dlog(Ljava/lang/String;)V
|
||||
|
||||
if-eqz p1, :null_track
|
||||
|
||||
if-eqz p0, :done
|
||||
|
||||
goto :have_track
|
||||
|
||||
:null_track
|
||||
const-string v3, "onWampTrack: wamp Track is null, skip"
|
||||
|
||||
invoke-static {v3}, Lradiant/RLAPILyricsHook;->dlog(Ljava/lang/String;)V
|
||||
|
||||
return-void
|
||||
|
||||
:have_track
|
||||
invoke-virtual {p1}, Lcom/aspiro/wamp/model/MediaItem;->getTitle()Ljava/lang/String;
|
||||
|
||||
move-result-object v1
|
||||
|
||||
if-nez v1, :title_present
|
||||
|
||||
const-string v3, "bail: getTitle() returned null"
|
||||
|
||||
invoke-static {v3}, Lradiant/RLAPILyricsHook;->dlog(Ljava/lang/String;)V
|
||||
|
||||
return-void
|
||||
|
||||
:title_present
|
||||
invoke-static {v1}, Lradiant/RLAPILyricsHook;->isBlank(Ljava/lang/String;)Z
|
||||
|
||||
move-result v2
|
||||
|
||||
if-eqz v2, :title_ok
|
||||
|
||||
const-string v3, "bail: title is blank"
|
||||
|
||||
invoke-static {v3}, Lradiant/RLAPILyricsHook;->dlog(Ljava/lang/String;)V
|
||||
|
||||
return-void
|
||||
|
||||
:title_ok
|
||||
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"
|
||||
|
||||
invoke-static {v3}, Lradiant/RLAPILyricsHook;->dlog(Ljava/lang/String;)V
|
||||
|
||||
return-void
|
||||
|
||||
:artist_present
|
||||
invoke-static {v2}, Lradiant/RLAPILyricsHook;->isBlank(Ljava/lang/String;)Z
|
||||
|
||||
move-result v3
|
||||
|
||||
if-eqz v3, :artist_ok
|
||||
|
||||
const-string v3, "bail: artist is blank"
|
||||
|
||||
invoke-static {v3}, Lradiant/RLAPILyricsHook;->dlog(Ljava/lang/String;)V
|
||||
|
||||
return-void
|
||||
|
||||
:artist_ok
|
||||
const-string v3, ""
|
||||
|
||||
new-instance v4, Ljava/lang/StringBuilder;
|
||||
|
||||
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;
|
||||
|
||||
move-result-object v4
|
||||
|
||||
sput-object v4, Lradiant/RLAPILyricsHook;->currentKey:Ljava/lang/String;
|
||||
|
||||
new-instance v5, Ljava/lang/StringBuilder;
|
||||
|
||||
const-string v6, "onWampTrack: fetching for title='"
|
||||
|
||||
invoke-direct {v5, v6}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
|
||||
|
||||
invoke-virtual {v5, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
|
||||
|
||||
const-string v6, "' artist='"
|
||||
|
||||
invoke-virtual {v5, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
|
||||
|
||||
invoke-virtual {v5, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
|
||||
|
||||
const-string v6, "'"
|
||||
|
||||
invoke-virtual {v5, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
|
||||
|
||||
invoke-virtual {v5}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
|
||||
|
||||
move-result-object v5
|
||||
|
||||
invoke-static {v5}, Lradiant/RLAPILyricsHook;->dlog(Ljava/lang/String;)V
|
||||
|
||||
new-instance v5, Lradiant/RLAPILyricsWorker;
|
||||
|
||||
move-object v6, p0
|
||||
|
||||
move-object v7, v1
|
||||
|
||||
move-object v8, v2
|
||||
|
||||
move-object v9, v4
|
||||
|
||||
move-object v10, v3
|
||||
|
||||
invoke-direct/range {v5 .. v10}, Lradiant/RLAPILyricsWorker;-><init>(Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
|
||||
|
||||
new-instance v6, Ljava/lang/Thread;
|
||||
|
||||
invoke-direct {v6, v5}, Ljava/lang/Thread;-><init>(Ljava/lang/Runnable;)V
|
||||
|
||||
const/4 v7, 0x1
|
||||
|
||||
invoke-virtual {v6, v7}, Ljava/lang/Thread;->setDaemon(Z)V
|
||||
|
||||
invoke-virtual {v6}, Ljava/lang/Thread;->start()V
|
||||
|
||||
:done
|
||||
return-void
|
||||
.end method
|
||||
@@ -0,0 +1,545 @@
|
||||
.class public final Lradiant/RLAPILyricsWorker;
|
||||
.super Ljava/lang/Object;
|
||||
.implements Ljava/lang/Runnable;
|
||||
|
||||
|
||||
# instance fields
|
||||
.field public final vm:Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;
|
||||
|
||||
.field public final title:Ljava/lang/String;
|
||||
|
||||
.field public final artist:Ljava/lang/String;
|
||||
|
||||
.field public final key:Ljava/lang/String;
|
||||
|
||||
.field public final lyricsId: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
|
||||
.locals 0
|
||||
|
||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
||||
|
||||
iput-object p1, p0, Lradiant/RLAPILyricsWorker;->vm:Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;
|
||||
|
||||
iput-object p2, p0, Lradiant/RLAPILyricsWorker;->title:Ljava/lang/String;
|
||||
|
||||
iput-object p3, p0, Lradiant/RLAPILyricsWorker;->artist:Ljava/lang/String;
|
||||
|
||||
iput-object p4, p0, Lradiant/RLAPILyricsWorker;->key:Ljava/lang/String;
|
||||
|
||||
iput-object p5, p0, Lradiant/RLAPILyricsWorker;->lyricsId:Ljava/lang/String;
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method public static fetch(Ljava/lang/String;Z)Ljava/lang/String;
|
||||
.locals 7
|
||||
|
||||
:try_start
|
||||
new-instance v0, Ljava/net/URL;
|
||||
|
||||
invoke-direct {v0, p0}, 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-string v1, "GET"
|
||||
|
||||
invoke-virtual {v0, v1}, Ljava/net/HttpURLConnection;->setRequestMethod(Ljava/lang/String;)V
|
||||
|
||||
const v1, 0x2710
|
||||
|
||||
invoke-virtual {v0, v1}, Ljava/net/URLConnection;->setConnectTimeout(I)V
|
||||
|
||||
invoke-virtual {v0, v1}, Ljava/net/URLConnection;->setReadTimeout(I)V
|
||||
|
||||
if-eqz p1, :no_auth
|
||||
|
||||
const-string v1, "P-Access-Token-Id"
|
||||
|
||||
const-string v2, "58hy4s86"
|
||||
|
||||
invoke-virtual {v0, v1, v2}, Ljava/net/URLConnection;->setRequestProperty(Ljava/lang/String;Ljava/lang/String;)V
|
||||
|
||||
const-string v1, "P-Access-Token"
|
||||
|
||||
const-string v2, "xjehy2lfg5h5mjwotoxrcqugam"
|
||||
|
||||
invoke-virtual {v0, v1, v2}, Ljava/net/URLConnection;->setRequestProperty(Ljava/lang/String;Ljava/lang/String;)V
|
||||
|
||||
const-string v1, "x-client-ip"
|
||||
|
||||
const-string v2, "null"
|
||||
|
||||
invoke-virtual {v0, v1, v2}, Ljava/net/URLConnection;->setRequestProperty(Ljava/lang/String;Ljava/lang/String;)V
|
||||
|
||||
:no_auth
|
||||
invoke-virtual {v0}, Ljava/net/HttpURLConnection;->getResponseCode()I
|
||||
|
||||
move-result v1
|
||||
|
||||
new-instance v3, Ljava/lang/StringBuilder;
|
||||
|
||||
const-string v4, "fetch status="
|
||||
|
||||
invoke-direct {v3, v4}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
|
||||
|
||||
invoke-virtual {v3, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
|
||||
|
||||
const-string v4, " url="
|
||||
|
||||
invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
|
||||
|
||||
invoke-virtual {v3, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
|
||||
|
||||
invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
|
||||
|
||||
move-result-object v3
|
||||
|
||||
invoke-static {v3}, Lradiant/RLAPILyricsHook;->dlog(Ljava/lang/String;)V
|
||||
|
||||
const/16 v2, 0xc8
|
||||
|
||||
if-eq v1, v2, :status_ok
|
||||
|
||||
invoke-virtual {v0}, Ljava/net/HttpURLConnection;->disconnect()V
|
||||
|
||||
const/4 v1, 0x0
|
||||
|
||||
return-object v1
|
||||
|
||||
:status_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
|
||||
|
||||
new-instance v4, Ljava/lang/StringBuilder;
|
||||
|
||||
invoke-direct {v4}, Ljava/lang/StringBuilder;-><init>()V
|
||||
|
||||
:read_loop
|
||||
invoke-virtual {v3}, Ljava/io/BufferedReader;->readLine()Ljava/lang/String;
|
||||
|
||||
move-result-object v5
|
||||
|
||||
if-eqz v5, :read_done
|
||||
|
||||
invoke-virtual {v4, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
|
||||
|
||||
const/16 v5, 0xa
|
||||
|
||||
invoke-virtual {v4, v5}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;
|
||||
|
||||
goto :read_loop
|
||||
|
||||
:read_done
|
||||
invoke-virtual {v3}, Ljava/io/BufferedReader;->close()V
|
||||
|
||||
invoke-virtual {v0}, Ljava/net/HttpURLConnection;->disconnect()V
|
||||
|
||||
invoke-virtual {v4}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
|
||||
|
||||
move-result-object v6
|
||||
|
||||
return-object v6
|
||||
|
||||
:try_end
|
||||
.catchall {:try_start .. :try_end} :catch_all
|
||||
|
||||
:catch_all
|
||||
move-exception v0
|
||||
|
||||
new-instance v1, Ljava/lang/StringBuilder;
|
||||
|
||||
const-string v2, "fetch exception url="
|
||||
|
||||
invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
|
||||
|
||||
invoke-virtual {v1, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
|
||||
|
||||
const-string v2, " err="
|
||||
|
||||
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
|
||||
|
||||
invoke-virtual {v0}, Ljava/lang/Throwable;->toString()Ljava/lang/String;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
invoke-virtual {v1, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
|
||||
|
||||
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
|
||||
|
||||
move-result-object v1
|
||||
|
||||
invoke-static {v1}, Lradiant/RLAPILyricsHook;->dlog(Ljava/lang/String;)V
|
||||
|
||||
const/4 v1, 0x0
|
||||
|
||||
return-object v1
|
||||
.end method
|
||||
|
||||
.method public static parseLines(Ljava/lang/String;)Ljava/util/ArrayList;
|
||||
.locals 11
|
||||
|
||||
:try_start
|
||||
new-instance v0, Lorg/json/JSONObject;
|
||||
|
||||
invoke-direct {v0, p0}, Lorg/json/JSONObject;-><init>(Ljava/lang/String;)V
|
||||
|
||||
const-string v1, "type"
|
||||
|
||||
const-string v2, ""
|
||||
|
||||
invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->optString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
|
||||
|
||||
move-result-object v1
|
||||
|
||||
const-string v2, "Line"
|
||||
|
||||
invoke-virtual {v2, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
|
||||
|
||||
move-result v2
|
||||
|
||||
if-nez v2, :type_ok
|
||||
|
||||
const-string v2, "Word"
|
||||
|
||||
invoke-virtual {v2, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
|
||||
|
||||
move-result v2
|
||||
|
||||
if-nez v2, :type_ok
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
return-object v0
|
||||
|
||||
:type_ok
|
||||
const-string v1, "data"
|
||||
|
||||
invoke-virtual {v0, v1}, Lorg/json/JSONObject;->optJSONArray(Ljava/lang/String;)Lorg/json/JSONArray;
|
||||
|
||||
move-result-object v0
|
||||
|
||||
if-nez v0, :data_ok
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
return-object v0
|
||||
|
||||
:data_ok
|
||||
invoke-virtual {v0}, Lorg/json/JSONArray;->length()I
|
||||
|
||||
move-result v1
|
||||
|
||||
if-nez v1, :nonempty
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
return-object v0
|
||||
|
||||
:nonempty
|
||||
new-instance v2, Ljava/util/ArrayList;
|
||||
|
||||
invoke-direct {v2, v1}, Ljava/util/ArrayList;-><init>(I)V
|
||||
|
||||
const/4 v3, 0x0
|
||||
|
||||
:loop
|
||||
if-ge v3, v1, :loop_done
|
||||
|
||||
invoke-virtual {v0, v3}, Lorg/json/JSONArray;->getJSONObject(I)Lorg/json/JSONObject;
|
||||
|
||||
move-result-object v4
|
||||
|
||||
const-string v5, "text"
|
||||
|
||||
const-string v6, ""
|
||||
|
||||
invoke-virtual {v4, v5, v6}, Lorg/json/JSONObject;->optString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
|
||||
|
||||
move-result-object v5
|
||||
|
||||
const-string v6, "startTime"
|
||||
|
||||
const-wide/16 v7, 0x0
|
||||
|
||||
invoke-virtual {v4, v6, v7, v8}, Lorg/json/JSONObject;->optDouble(Ljava/lang/String;D)D
|
||||
|
||||
move-result-wide v7
|
||||
|
||||
const-wide v9, 0x408f400000000000L
|
||||
|
||||
mul-double/2addr v7, v9
|
||||
|
||||
double-to-long v7, v7
|
||||
|
||||
new-instance v4, Lcom/tidal/android/feature/playerscreen/ui/f;
|
||||
|
||||
invoke-direct {v4, v5, v7, v8}, Lcom/tidal/android/feature/playerscreen/ui/f;-><init>(Ljava/lang/String;J)V
|
||||
|
||||
invoke-virtual {v2, v4}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
|
||||
|
||||
add-int/lit8 v3, v3, 0x1
|
||||
|
||||
goto :loop
|
||||
|
||||
:loop_done
|
||||
return-object v2
|
||||
|
||||
:try_end
|
||||
.catchall {:try_start .. :try_end} :catch_all
|
||||
|
||||
:catch_all
|
||||
move-exception v0
|
||||
|
||||
const/4 v1, 0x0
|
||||
|
||||
return-object v1
|
||||
.end method
|
||||
|
||||
.method private runImpl()V
|
||||
.locals 11
|
||||
|
||||
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;
|
||||
|
||||
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;
|
||||
|
||||
move-result-object v1
|
||||
|
||||
new-instance v2, Ljava/lang/StringBuilder;
|
||||
|
||||
const-string v3, "?title="
|
||||
|
||||
invoke-direct {v2, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
|
||||
|
||||
invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
|
||||
|
||||
const-string v0, "&artist="
|
||||
|
||||
invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
|
||||
|
||||
invoke-virtual {v2, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
|
||||
|
||||
const-string v0, "&platform=Radiant%20Lyrics"
|
||||
|
||||
invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
|
||||
|
||||
invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
|
||||
|
||||
move-result-object v2
|
||||
|
||||
new-instance v3, Ljava/lang/StringBuilder;
|
||||
|
||||
const-string v4, "https://api.atomix.one/rl-api"
|
||||
|
||||
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 v3
|
||||
|
||||
const/4 v4, 0x1
|
||||
|
||||
invoke-static {v3, v4}, Lradiant/RLAPILyricsWorker;->fetch(Ljava/lang/String;Z)Ljava/lang/String;
|
||||
|
||||
move-result-object v3
|
||||
|
||||
if-nez v3, :got_body
|
||||
|
||||
new-instance v3, Ljava/lang/StringBuilder;
|
||||
|
||||
const-string v4, "https://rl-api.kineticsand.net/lyrics"
|
||||
|
||||
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 v3
|
||||
|
||||
const/4 v4, 0x0
|
||||
|
||||
invoke-static {v3, v4}, Lradiant/RLAPILyricsWorker;->fetch(Ljava/lang/String;Z)Ljava/lang/String;
|
||||
|
||||
move-result-object v3
|
||||
|
||||
if-nez v3, :got_body
|
||||
|
||||
const-string v4, "both primary and fallback fetches failed"
|
||||
|
||||
invoke-static {v4}, Lradiant/RLAPILyricsHook;->dlog(Ljava/lang/String;)V
|
||||
|
||||
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;->N: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
|
||||
|
||||
:got_body
|
||||
invoke-static {v3}, Lradiant/RLAPILyricsWorker;->parseLines(Ljava/lang/String;)Ljava/util/ArrayList;
|
||||
|
||||
move-result-object v3
|
||||
|
||||
if-nez v3, :parse_ok
|
||||
|
||||
const-string v4, "parse returned null (bad JSON / unsupported type)"
|
||||
|
||||
invoke-static {v4}, Lradiant/RLAPILyricsHook;->dlog(Ljava/lang/String;)V
|
||||
|
||||
return-void
|
||||
|
||||
:parse_ok
|
||||
invoke-virtual {v3}, Ljava/util/ArrayList;->size()I
|
||||
|
||||
move-result v4
|
||||
|
||||
if-nez v4, :nonempty
|
||||
|
||||
const-string v5, "parsed 0 lines"
|
||||
|
||||
invoke-static {v5}, Lradiant/RLAPILyricsHook;->dlog(Ljava/lang/String;)V
|
||||
|
||||
return-void
|
||||
|
||||
:nonempty
|
||||
new-instance v5, Ljava/lang/StringBuilder;
|
||||
|
||||
const-string v6, "parsed "
|
||||
|
||||
invoke-direct {v5, v6}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
|
||||
|
||||
invoke-virtual {v5, v4}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
|
||||
|
||||
const-string v6, " lines"
|
||||
|
||||
invoke-virtual {v5, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
|
||||
|
||||
invoke-virtual {v5}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
|
||||
|
||||
move-result-object v5
|
||||
|
||||
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
|
||||
|
||||
move-result v4
|
||||
|
||||
if-nez v4, :key_ok
|
||||
|
||||
const-string v5, "race-check failed (user skipped tracks)"
|
||||
|
||||
invoke-static {v5}, Lradiant/RLAPILyricsHook;->dlog(Ljava/lang/String;)V
|
||||
|
||||
return-void
|
||||
|
||||
:key_ok
|
||||
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;->M:Lkotlinx/coroutines/flow/MutableStateFlow;
|
||||
|
||||
invoke-static {v3}, Ltn0/a;->c(Ljava/lang/Iterable;)Ltn0/b;
|
||||
|
||||
move-result-object v6
|
||||
|
||||
iget-object v7, p0, Lradiant/RLAPILyricsWorker;->lyricsId:Ljava/lang/String;
|
||||
|
||||
if-nez v7, :have_id
|
||||
|
||||
const-string v7, ""
|
||||
|
||||
:have_id
|
||||
new-instance v8, Lcom/tidal/android/feature/playerscreen/ui/g$c;
|
||||
|
||||
const/4 v9, -0x1
|
||||
|
||||
const/4 v10, 0x0
|
||||
|
||||
invoke-direct {v8, v7, v6, v9, v10}, Lcom/tidal/android/feature/playerscreen/ui/g$c;-><init>(Ljava/lang/String;Ltn0/b;IZ)V
|
||||
|
||||
const-string v6, "publishing g$c -> J=true N=true M=g$c"
|
||||
|
||||
invoke-static {v6}, Lradiant/RLAPILyricsHook;->dlog(Ljava/lang/String;)V
|
||||
|
||||
const/4 v6, 0x1
|
||||
|
||||
sput-boolean v6, Lradiant/RLAPILyricsHook;->isRlState:Z
|
||||
|
||||
iget-object v6, v4, Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;->J:Lkotlinx/coroutines/flow/MutableStateFlow;
|
||||
|
||||
sget-object v7, Ljava/lang/Boolean;->TRUE:Ljava/lang/Boolean;
|
||||
|
||||
invoke-interface {v6, v7}, Lkotlinx/coroutines/flow/MutableStateFlow;->setValue(Ljava/lang/Object;)V
|
||||
|
||||
sget-boolean v9, Lradiant/StickyLyrics;->enabled:Z
|
||||
|
||||
if-eqz v9, :skip_n
|
||||
|
||||
iget-object v6, v4, Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;->N: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
|
||||
.end method
|
||||
|
||||
|
||||
# virtual methods
|
||||
.method public run()V
|
||||
.locals 1
|
||||
|
||||
:try_start
|
||||
invoke-direct {p0}, Lradiant/RLAPILyricsWorker;->runImpl()V
|
||||
|
||||
:try_end
|
||||
.catchall {:try_start .. :try_end} :catch_all
|
||||
|
||||
return-void
|
||||
|
||||
:catch_all
|
||||
move-exception v0
|
||||
|
||||
return-void
|
||||
.end method
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
|
||||
# direct methods
|
||||
.method public static final a(ILandroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;Ltl0/a;)V
|
||||
.method public static final a(ILandroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;Lyl0/a;)V
|
||||
.locals 21
|
||||
.annotation build Landroidx/compose/runtime/Composable;
|
||||
.end annotation
|
||||
@@ -98,7 +98,7 @@
|
||||
|
||||
const/4 v4, 0x6
|
||||
|
||||
invoke-static {v2, v11, v4}, Lcom/squareup/ui/market/core/theme/w;->t(Lcom/squareup/ui/market/core/theme/k$a;Landroidx/compose/runtime/Composer;I)Lcom/squareup/ui/market/core/theme/MarketStylesheet;
|
||||
invoke-static {v2, v11, v4}, Lcom/squareup/ui/market/core/theme/x;->t(Lcom/squareup/ui/market/core/theme/k$a;Landroidx/compose/runtime/Composer;I)Lcom/squareup/ui/market/core/theme/MarketStylesheet;
|
||||
|
||||
move-result-object v15
|
||||
|
||||
@@ -131,7 +131,7 @@
|
||||
|
||||
const/16 v18, 0x0
|
||||
|
||||
invoke-static/range {v15 .. v20}, Lcom/squareup/ui/market/components/MarketIconButtonKt;->P(Lcom/squareup/ui/market/core/theme/MarketStylesheet;Lcom/squareup/ui/market/core/components/properties/IconButton$Size;Lcom/squareup/ui/market/core/components/properties/IconButton$Rank;Lcom/squareup/ui/market/core/components/properties/IconButton$Variant;ILjava/lang/Object;)Ll20/v1;
|
||||
invoke-static/range {v15 .. v20}, Lcom/squareup/ui/market/components/MarketIconButtonKt;->P(Lcom/squareup/ui/market/core/theme/MarketStylesheet;Lcom/squareup/ui/market/core/components/properties/IconButton$Size;Lcom/squareup/ui/market/core/components/properties/IconButton$Rank;Lcom/squareup/ui/market/core/components/properties/IconButton$Variant;ILjava/lang/Object;)Ln20/w1;
|
||||
|
||||
move-result-object v4
|
||||
|
||||
@@ -140,7 +140,7 @@
|
||||
:cond_5
|
||||
move-object v9, v4
|
||||
|
||||
check-cast v9, Ll20/v1;
|
||||
check-cast v9, Ln20/w1;
|
||||
|
||||
sget v2, Lcom/tidal/android/feature/playerscreen/ui/R$string;->lyrics:I
|
||||
|
||||
@@ -172,7 +172,7 @@
|
||||
|
||||
const/4 v8, 0x0
|
||||
|
||||
invoke-static/range {v1 .. v13}, Lcom/squareup/ui/market/components/MarketIconButtonKt;->c(Ltl0/a;Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLcom/squareup/ui/market/components/n;Ltl0/a;Ljava/lang/String;Ll20/v1;Ltl0/p;Landroidx/compose/runtime/Composer;II)V
|
||||
invoke-static/range {v1 .. v13}, Lcom/squareup/ui/market/components/MarketIconButtonKt;->c(Lyl0/a;Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLcom/squareup/ui/market/components/n;Lyl0/a;Ljava/lang/String;Ln20/w1;Lyl0/p;Landroidx/compose/runtime/Composer;II)V
|
||||
|
||||
invoke-static {}, Landroidx/compose/runtime/ComposerKt;->isTraceInProgress()Z
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
.source "SourceFile"
|
||||
|
||||
# interfaces
|
||||
.implements Ltl0/p;
|
||||
.implements Lyl0/p;
|
||||
|
||||
|
||||
# virtual methods
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
.class public final Lradiant/SpvFactory;
|
||||
.super Ljava/lang/Object;
|
||||
.implements Ltl0/l;
|
||||
.implements Lyl0/l;
|
||||
|
||||
|
||||
# static fields
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
.class public final Lradiant/StickyLyrics;
|
||||
.super Ljava/lang/Object;
|
||||
|
||||
|
||||
# static fields
|
||||
.field public static volatile enabled:Z
|
||||
|
||||
|
||||
# direct methods
|
||||
.method static constructor <clinit>()V
|
||||
.locals 1
|
||||
|
||||
const/4 v0, 0x0
|
||||
|
||||
sput-boolean v0, Lradiant/StickyLyrics;->enabled:Z
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method private constructor <init>()V
|
||||
.locals 0
|
||||
|
||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
||||
|
||||
return-void
|
||||
.end method
|
||||
@@ -1,26 +1,26 @@
|
||||
--- a/com/tidal/android/feature/playerscreen/ui/g0.smali
|
||||
+++ b/com/tidal/android/feature/playerscreen/ui/g0.smali
|
||||
@@ -666,8 +666,23 @@
|
||||
--- a/com/tidal/android/feature/playerscreen/ui/h0.smali
|
||||
+++ b/com/tidal/android/feature/playerscreen/ui/h0.smali
|
||||
@@ -669,8 +669,23 @@
|
||||
move-object v5, v1
|
||||
|
||||
.line 288
|
||||
.line 289
|
||||
+ const v1, 0x52414443 # group key
|
||||
+
|
||||
+ invoke-interface {v7, v1}, Landroidx/compose/runtime/Composer;->startReplaceGroup(I)V # open group around the cover
|
||||
+
|
||||
+ iget-object v1, v0, Lcom/tidal/android/feature/playerscreen/ui/g0;->b:Lcom/tidal/android/feature/playerscreen/ui/r$a; # player state
|
||||
+ iget-object v1, v0, Lcom/tidal/android/feature/playerscreen/ui/h0;->b:Lcom/tidal/android/feature/playerscreen/ui/r$a; # player state
|
||||
+
|
||||
+ iget-object v1, v1, Lcom/tidal/android/feature/playerscreen/ui/r$a;->j:Lcom/tidal/android/feature/playerscreen/ui/g; # current view mode
|
||||
+
|
||||
+ instance-of v1, v1, Lcom/tidal/android/feature/playerscreen/ui/g$a; # only render when on cover mode
|
||||
+ instance-of v1, v1, Lcom/tidal/android/feature/playerscreen/ui/g$a; # cover mode only
|
||||
+
|
||||
+ if-eqz v1, :radiant_after_cover # lyrics/credits mode -> skip cover
|
||||
+
|
||||
invoke-static/range {v2 .. v9}, Lcom/tidal/android/feature/playerscreen/ui/composables/CoverPagerKt;->c(Lcom/tidal/android/feature/playerscreen/ui/d;Ltl0/l;FLandroidx/compose/ui/Modifier;ZLandroidx/compose/runtime/Composer;II)V
|
||||
invoke-static/range {v2 .. v9}, Lcom/tidal/android/feature/playerscreen/ui/composables/CoverPagerKt;->c(Lcom/tidal/android/feature/playerscreen/ui/d;Lyl0/l;FLandroidx/compose/ui/Modifier;ZLandroidx/compose/runtime/Composer;II)V
|
||||
|
||||
+ :radiant_after_cover
|
||||
+ :radiant_after_cover # skip target
|
||||
+ invoke-interface {v7}, Landroidx/compose/runtime/Composer;->endReplaceGroup()V # close group
|
||||
+
|
||||
.line 289
|
||||
.line 290
|
||||
.line 291
|
||||
.line 292
|
||||
|
||||
@@ -1,11 +1,37 @@
|
||||
--- a/com/tidal/android/feature/playerscreen/ui/composables/k1.smali
|
||||
+++ b/com/tidal/android/feature/playerscreen/ui/composables/k1.smali
|
||||
@@ -64,7 +64,7 @@
|
||||
--- a/com/tidal/android/feature/playerscreen/ui/composables/o1.smali
|
||||
+++ b/com/tidal/android/feature/playerscreen/ui/composables/o1.smali
|
||||
@@ -64,26 +64,29 @@
|
||||
|
||||
.line 16
|
||||
.line 17
|
||||
- iget v2, p0, Lcom/tidal/android/feature/playerscreen/ui/composables/k1;->a:F
|
||||
+ const/high16 v2, 0x43480000 # hardcode top fade region to 200dp (decouple from contentPadding)
|
||||
- iget v2, p0, Lcom/tidal/android/feature/playerscreen/ui/composables/o1;->a:F
|
||||
+ const/high16 v2, 0x43200000 # 160f start dp
|
||||
|
||||
.line 18
|
||||
.line 19
|
||||
invoke-interface {p1, v2}, Landroidx/compose/ui/unit/Density;->toPx-0680j_4(F)F
|
||||
|
||||
.line 20
|
||||
.line 21
|
||||
.line 22
|
||||
- move-result v3
|
||||
+ move-result v2 # startY in px
|
||||
+
|
||||
+ const/high16 v3, 0x435c0000 # 220f end dp
|
||||
+
|
||||
+ invoke-interface {p1, v3}, Landroidx/compose/ui/unit/Density;->toPx-0680j_4(F)F # dp to px
|
||||
+
|
||||
+ move-result v3 # endY in px
|
||||
|
||||
.line 23
|
||||
const/16 v5, 0x8
|
||||
|
||||
.line 24
|
||||
.line 25
|
||||
const/4 v6, 0x0
|
||||
|
||||
- .line 26
|
||||
- const/4 v2, 0x0
|
||||
-
|
||||
.line 27
|
||||
const/4 v4, 0x0
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
--- 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
|
||||
|
||||
.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
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/com/tidal/android/feature/playerscreen/ui/b0.smali
|
||||
+++ b/com/tidal/android/feature/playerscreen/ui/b0.smali
|
||||
@@ -45,7 +45,7 @@
|
||||
--- a/com/tidal/android/feature/playerscreen/ui/c0.smali
|
||||
+++ b/com/tidal/android/feature/playerscreen/ui/c0.smali
|
||||
@@ -47,7 +47,7 @@
|
||||
|
||||
# virtual methods
|
||||
.method public final invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
|
||||
@@ -9,9 +9,9 @@
|
||||
|
||||
.line 1
|
||||
move-object/from16 v0, p0
|
||||
@@ -460,6 +460,64 @@
|
||||
@@ -461,6 +461,64 @@
|
||||
.line 200
|
||||
invoke-static/range {v2 .. v9}, Lcom/tidal/android/feature/playerscreen/ui/composables/LyricsKt;->a(Lcom/tidal/android/feature/playerscreen/ui/g;Ltl0/l;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/PaddingValues;Ltl0/l;Landroidx/compose/runtime/Composer;II)V
|
||||
invoke-static/range {v2 .. v9}, Lcom/tidal/android/feature/playerscreen/ui/composables/LyricsKt;->a(Lcom/tidal/android/feature/playerscreen/ui/g;Lyl0/l;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/PaddingValues;Lyl0/l;Landroidx/compose/runtime/Composer;II)V
|
||||
|
||||
+ sget-object v17, Lradiant/SpvFactory;->a:Lradiant/SpvFactory; # progress view factory
|
||||
+
|
||||
@@ -29,7 +29,7 @@
|
||||
+
|
||||
+ const/16 v24, 0x0 # synthetic null
|
||||
+
|
||||
+ invoke-static/range {v18 .. v24}, Landroidx/compose/foundation/ClickableKt;->clickable-XHw0xAI$default(Landroidx/compose/ui/Modifier;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Ltl0/a;ILjava/lang/Object;)Landroidx/compose/ui/Modifier; # apply clickable
|
||||
+ invoke-static/range {v18 .. v24}, Landroidx/compose/foundation/ClickableKt;->clickable-XHw0xAI$default(Landroidx/compose/ui/Modifier;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lyl0/a;ILjava/lang/Object;)Landroidx/compose/ui/Modifier; # apply clickable
|
||||
+
|
||||
+ move-result-object v23 # clickable modifier
|
||||
+
|
||||
@@ -69,7 +69,7 @@
|
||||
+
|
||||
+ const/16 v22, 0x4 # default mask
|
||||
+
|
||||
+ invoke-static/range {v17 .. v22}, Landroidx/compose/ui/viewinterop/AndroidView_androidKt;->AndroidView(Ltl0/l;Landroidx/compose/ui/Modifier;Ltl0/l;Landroidx/compose/runtime/Composer;II)V # mount progress pill
|
||||
+ invoke-static/range {v17 .. v22}, Landroidx/compose/ui/viewinterop/AndroidView_androidKt;->AndroidView(Lyl0/l;Landroidx/compose/ui/Modifier;Lyl0/l;Landroidx/compose/runtime/Composer;II)V # mount progress pill
|
||||
+
|
||||
.line 201
|
||||
.line 202
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
# rl-locals: com/tidal/android/feature/playerscreen/ui/PlayerScreenKt.smali e( 79
|
||||
--- a/com/tidal/android/feature/playerscreen/ui/PlayerScreenKt.smali
|
||||
+++ b/com/tidal/android/feature/playerscreen/ui/PlayerScreenKt.smali
|
||||
@@ -4931,7 +4931,11 @@
|
||||
const/4 v10, 0x0
|
||||
@@ -4945,7 +4945,11 @@
|
||||
const/4 v7, 0x0
|
||||
|
||||
.line 226
|
||||
- invoke-static {v10, v9, v4, v2, v7}, Lcom/tidal/android/feature/playerscreen/ui/composables/h1;->a(Landroidx/compose/ui/Modifier;Ltl0/a;ZLandroidx/compose/runtime/Composer;I)V
|
||||
- invoke-static {v7, v9, v4, v2, v10}, Lcom/tidal/android/feature/playerscreen/ui/composables/k1;->a(Landroidx/compose/ui/Modifier;Lyl0/a;ZLandroidx/compose/runtime/Composer;I)V
|
||||
+ const v10, 0x52414448 # empty group key
|
||||
+
|
||||
+ invoke-interface {v2, v10}, Landroidx/compose/runtime/Composer;->startReplaceGroup(I)V # open empty
|
||||
@@ -14,21 +14,21 @@
|
||||
|
||||
.line 227
|
||||
invoke-interface {v2}, Landroidx/compose/runtime/Composer;->endReplaceGroup()V
|
||||
@@ -5838,6 +5838,22 @@
|
||||
@@ -5720,6 +5724,22 @@
|
||||
:cond_51
|
||||
check-cast v4, Ltl0/a;
|
||||
check-cast v4, Lyl0/a;
|
||||
|
||||
const/4 v2, 0x0
|
||||
|
||||
invoke-static {v13, v7, v2, v4}, Lcom/tidal/android/feature/playerscreen/ui/composables/h3;->a(ILandroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;Ltl0/a;)V
|
||||
invoke-static {v13, v7, v2, v4}, Lcom/tidal/android/feature/playerscreen/ui/composables/l3;->a(ILandroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;Lyl0/a;)V
|
||||
+
|
||||
+ new-instance v74, Lc8/j; # lyrics-toggle lambda
|
||||
+ new-instance v74, Lcom/tidal/android/feature/playerscreen/ui/g0; # lyrics toggle lambda
|
||||
+
|
||||
+ move-object/from16 v75, p5 # lambda receiver
|
||||
+ move-object/from16 v75, p5 # action dispatcher
|
||||
+
|
||||
+ const/16 v76, 0x1 # lyrics action
|
||||
+ const/16 v76, 0x0 # lyrics action disc
|
||||
+
|
||||
+ invoke-direct/range {v74 .. v76}, Lc8/j;-><init>(Ljava/lang/Object;I)V # build lambda
|
||||
+ invoke-direct/range {v74 .. v76}, Lcom/tidal/android/feature/playerscreen/ui/g0;-><init>(Ljava/lang/Object;I)V # build lambda
|
||||
+
|
||||
+ const/16 v71, 0x0 # changed flags
|
||||
+
|
||||
@@ -36,4 +36,4 @@
|
||||
+
|
||||
+ const/16 v73, 0x0 # null modifier
|
||||
+
|
||||
+ invoke-static/range {v71 .. v74}, Lradiant/SparkleButton;->a(ILandroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;Ltl0/a;)V # render sparkle button
|
||||
+ invoke-static/range {v71 .. v74}, Lradiant/SparkleButton;->a(ILandroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;Lyl0/a;)V # render sparkle button
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
--- a/com/tidal/android/feature/playerscreen/ui/PlayerScreenKt.smali
|
||||
+++ b/com/tidal/android/feature/playerscreen/ui/PlayerScreenKt.smali
|
||||
@@ -5086,7 +5086,11 @@
|
||||
@@ -5094,7 +5094,11 @@
|
||||
const/4 v13, 0x0
|
||||
|
||||
.line 247
|
||||
- invoke-static {v9, v0, v13, v2, v10}, Lcom/tidal/android/feature/playerscreen/ui/composables/BroadcastButtonKt;->b(Lcom/tidal/android/feature/playerscreen/ui/b;Ltl0/a;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V
|
||||
- invoke-static {v9, v0, v10, v2, v13}, Lcom/tidal/android/feature/playerscreen/ui/composables/BroadcastButtonKt;->b(Lcom/tidal/android/feature/playerscreen/ui/b;Lyl0/a;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V
|
||||
+ const v9, 0x52414244 # empty group key
|
||||
+
|
||||
+ invoke-interface {v2, v9}, Landroidx/compose/runtime/Composer;->startReplaceGroup(I)V # open empty
|
||||
@@ -13,39 +13,38 @@
|
||||
|
||||
.line 248
|
||||
invoke-interface {v2}, Landroidx/compose/runtime/Composer;->endNode()V
|
||||
@@ -5758,17 +5758,19 @@
|
||||
@@ -5770,16 +5774,20 @@
|
||||
.line 335
|
||||
:cond_53
|
||||
- new-instance v4, Landroidx/compose/foundation/text/input/internal/selection/l;
|
||||
- new-instance v4, Lcom/aspiro/wamp/tidalconnect/playback/i;
|
||||
-
|
||||
- const/4 v6, 0x2
|
||||
-
|
||||
- invoke-direct {v4, v11, v6}, Landroidx/compose/foundation/text/input/internal/selection/l;-><init>(Ljava/lang/Object;I)V
|
||||
- invoke-direct {v4, v11, v1}, Lcom/aspiro/wamp/tidalconnect/playback/i;-><init>(Ljava/lang/Object;I)V
|
||||
-
|
||||
- .line 336
|
||||
- invoke-interface {v7, v4}, Landroidx/compose/runtime/Composer;->updateRememberedValue(Ljava/lang/Object;)V
|
||||
-
|
||||
- .line 337
|
||||
- :cond_54
|
||||
- check-cast v4, Ltl0/a;
|
||||
- check-cast v4, Lyl0/a;
|
||||
-
|
||||
- const/4 v2, 0x0
|
||||
-
|
||||
- invoke-static {v13, v7, v2, v4}, Lcom/tidal/android/feature/playerscreen/ui/composables/u4;->a(ILandroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;Ltl0/a;)V
|
||||
+ new-instance v4, Lcom/tidal/android/feature/playerscreen/ui/f0; # connect click lambda
|
||||
- invoke-static {v13, v7, v2, v4}, Lcom/tidal/android/feature/playerscreen/ui/composables/x4;->a(ILandroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;Lyl0/a;)V
|
||||
+ new-instance v4, Lcom/aspiro/wamp/tidalconnect/playback/i; # connect click lambda factory
|
||||
+
|
||||
+ move-object/from16 v6, p5 # action dispatcher
|
||||
+
|
||||
+ const/4 v8, 0x0 # connect-clicked discriminator
|
||||
+ const/4 v8, 0x1 # connect-clicked disc
|
||||
+
|
||||
+ invoke-direct {v4, v6, v8}, Lcom/tidal/android/feature/playerscreen/ui/f0;-><init>(Ljava/lang/Object;I)V # build lambda
|
||||
+ invoke-direct {v4, v6, v8}, Lcom/aspiro/wamp/tidalconnect/playback/i;-><init>(Ljava/lang/Object;I)V # build lambda
|
||||
+
|
||||
+ invoke-interface {v7, v4}, Landroidx/compose/runtime/Composer;->updateRememberedValue(Ljava/lang/Object;)V # cache lambda
|
||||
+
|
||||
+ :cond_54
|
||||
+ check-cast v4, Ltl0/a;
|
||||
+ :cond_54 # cache join
|
||||
+ check-cast v4, Lyl0/a; # cast to Function0
|
||||
+
|
||||
+ iget-object v8, v10, Lcom/tidal/android/feature/playerscreen/ui/r$a;->d:Lcom/tidal/android/feature/playerscreen/ui/b; # broadcast state
|
||||
+
|
||||
+ const/4 v2, 0x0 # changed flags
|
||||
+
|
||||
+ invoke-static {v8, v4, v13, v7, v2}, Lcom/tidal/android/feature/playerscreen/ui/composables/BroadcastButtonKt;->b(Lcom/tidal/android/feature/playerscreen/ui/b;Ltl0/a;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V # render connect button
|
||||
+ invoke-static {v8, v4, v13, v7, v2}, Lcom/tidal/android/feature/playerscreen/ui/composables/BroadcastButtonKt;->b(Lcom/tidal/android/feature/playerscreen/ui/b;Lyl0/a;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V # render connect button
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
--- 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
|
||||
|
||||
.line 67
|
||||
:cond_3
|
||||
+ sget-boolean v6, Lradiant/RLAPILyricsHook;->isRlState:Z # read RL flag
|
||||
+
|
||||
+ if-eqz v6, :radiant_skip # skip if not RL
|
||||
+
|
||||
+ const/4 v5, -0x1 # RL no-match default = -1
|
||||
+
|
||||
+ :radiant_skip
|
||||
if-gez v4, :cond_4
|
||||
|
||||
.line 68
|
||||
@@ -0,0 +1,21 @@
|
||||
--- a/com/tidal/android/feature/playerscreen/ui/PlayerViewModel.smali
|
||||
+++ b/com/tidal/android/feature/playerscreen/ui/PlayerViewModel.smali
|
||||
@@ -1277,7 +1277,9 @@
|
||||
.line 104
|
||||
.line 105
|
||||
check-cast v1, Lcom/aspiro/wamp/model/Track;
|
||||
|
||||
+ invoke-static {v0, v1}, Lradiant/RLAPILyricsHook;->onWampTrack(Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;Lcom/aspiro/wamp/model/Track;)V # RL API lyrics hook
|
||||
+
|
||||
.line 106
|
||||
.line 107
|
||||
invoke-virtual {v1}, Lcom/aspiro/wamp/model/MediaItem;->getId()I
|
||||
@@ -1551,7 +1553,7 @@
|
||||
.line 235
|
||||
.line 236
|
||||
.line 237
|
||||
- if-nez v9, :cond_a
|
||||
+ goto :cond_a # skip TIDAL N=false setter
|
||||
|
||||
.line 238
|
||||
.line 239
|
||||
@@ -1,7 +1,7 @@
|
||||
--- a/com/tidal/android/feature/playerscreen/ui/PlayerScreenKt.smali
|
||||
+++ b/com/tidal/android/feature/playerscreen/ui/PlayerScreenKt.smali
|
||||
@@ -5854,17 +5854,38 @@
|
||||
invoke-static {v13, v7, v2, v4}, Lcom/tidal/android/feature/playerscreen/ui/composables/h3;->a(ILandroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;Ltl0/a;)V
|
||||
@@ -5725,17 +5725,38 @@
|
||||
invoke-static {v13, v7, v2, v4}, Lcom/tidal/android/feature/playerscreen/ui/composables/l3;->a(ILandroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;Lyl0/a;)V
|
||||
+
|
||||
+ iget-boolean v2, v10, Lcom/tidal/android/feature/playerscreen/ui/r$a;->i:Z # hasLyrics flag
|
||||
+
|
||||
@@ -11,13 +11,13 @@
|
||||
+
|
||||
+ invoke-interface {v7, v2}, Landroidx/compose/runtime/Composer;->startReplaceGroup(I)V # open lyrics branch
|
||||
|
||||
new-instance v74, Lc8/j; # lyrics-toggle lambda
|
||||
new-instance v74, Lcom/tidal/android/feature/playerscreen/ui/g0; # lyrics toggle lambda
|
||||
|
||||
move-object/from16 v75, p5 # lambda receiver
|
||||
move-object/from16 v75, p5 # action dispatcher
|
||||
|
||||
const/16 v76, 0x1 # lyrics action
|
||||
const/16 v76, 0x0 # lyrics action disc
|
||||
|
||||
invoke-direct/range {v74 .. v76}, Lc8/j;-><init>(Ljava/lang/Object;I)V # build lambda
|
||||
invoke-direct/range {v74 .. v76}, Lcom/tidal/android/feature/playerscreen/ui/g0;-><init>(Ljava/lang/Object;I)V # build lambda
|
||||
|
||||
const/16 v71, 0x0 # changed flags
|
||||
|
||||
@@ -25,17 +25,17 @@
|
||||
|
||||
const/16 v73, 0x0 # null modifier
|
||||
|
||||
invoke-static/range {v71 .. v74}, Lradiant/SparkleButton;->a(ILandroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;Ltl0/a;)V # render sparkle button
|
||||
invoke-static/range {v71 .. v74}, Lradiant/SparkleButton;->a(ILandroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;Lyl0/a;)V # render sparkle button
|
||||
+
|
||||
+ invoke-interface {v7}, Landroidx/compose/runtime/Composer;->endReplaceGroup()V # close lyrics branch
|
||||
+
|
||||
+ goto :goto_sparkle_done # skip empty branch
|
||||
+
|
||||
+ :cond_sparkle_no_lyrics
|
||||
+ :cond_sparkle_no_lyrics # no-lyrics branch
|
||||
+ const v2, 0x3057f75c # group key (no lyrics)
|
||||
+
|
||||
+ invoke-interface {v7, v2}, Landroidx/compose/runtime/Composer;->startReplaceGroup(I)V # open empty
|
||||
+
|
||||
+ invoke-interface {v7}, Landroidx/compose/runtime/Composer;->endReplaceGroup()V # close empty
|
||||
+
|
||||
+ :goto_sparkle_done
|
||||
+ :goto_sparkle_done # join target
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
--- a/com/tidal/android/feature/playerscreen/ui/PlayerViewModel.smali
|
||||
+++ b/com/tidal/android/feature/playerscreen/ui/PlayerViewModel.smali
|
||||
@@ -1060,9 +1060,13 @@
|
||||
move-object/from16 v0, p0
|
||||
|
||||
.line 2
|
||||
.line 3
|
||||
move-object/from16 v1, p1
|
||||
|
||||
+ const/4 v2, 0x1 # true literal
|
||||
+
|
||||
+ sput-boolean v2, Lradiant/StickyLyrics;->enabled:Z # arm sticky flag
|
||||
+
|
||||
.line 4
|
||||
.line 5
|
||||
invoke-virtual {v0}, Ljava/lang/Object;->getClass()Ljava/lang/Class;
|
||||
@@ -1568,9 +1572,15 @@
|
||||
.line 244
|
||||
.line 245
|
||||
.line 246
|
||||
:cond_a
|
||||
+ iget-object v9, v0, Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;->N:Lkotlinx/coroutines/flow/MutableStateFlow; # N flow
|
||||
+
|
||||
+ sget-object v10, Ljava/lang/Boolean;->TRUE:Ljava/lang/Boolean; # TRUE literal
|
||||
+
|
||||
+ invoke-interface {v9, v10}, Lkotlinx/coroutines/flow/MutableStateFlow;->setValue(Ljava/lang/Object;)V # force N=true
|
||||
+
|
||||
iget-object v9, v0, Lcom/tidal/android/feature/playerscreen/ui/PlayerViewModel;->K:Lkotlinx/coroutines/flow/MutableStateFlow;
|
||||
|
||||
.line 247
|
||||
.line 248
|
||||
iget-object v10, v1, Lcom/tidal/android/tidalapi/domain/model/o;->j:Lcom/tidal/android/tidalapi/domain/model/a;
|
||||
@@ -1,11 +1,11 @@
|
||||
# rl-locals: com/tidal/android/feature/playerscreen/ui/PlayerScreenKt.smali e( 71
|
||||
--- a/com/tidal/android/feature/playerscreen/ui/PlayerScreenKt.smali
|
||||
+++ b/com/tidal/android/feature/playerscreen/ui/PlayerScreenKt.smali
|
||||
@@ -4164,6 +4164,133 @@
|
||||
@@ -4172,6 +4172,133 @@
|
||||
|
||||
invoke-static {v5, v3, v4}, Landroidx/compose/runtime/Updater;->set-impl(Landroidx/compose/runtime/Composer;Ljava/lang/Object;Ltl0/p;)V
|
||||
invoke-static {v5, v3, v4}, Landroidx/compose/runtime/Updater;->set-impl(Landroidx/compose/runtime/Composer;Ljava/lang/Object;Lyl0/p;)V
|
||||
|
||||
+ const v3, 0x52414449 # group key for slot table
|
||||
+ const v3, 0x52414449 # slot table key
|
||||
+
|
||||
+ invoke-interface {v10, v3}, Landroidx/compose/runtime/Composer;->startReplaceGroup(I)V # open group
|
||||
+
|
||||
@@ -13,75 +13,75 @@
|
||||
+
|
||||
+ iget-object v3, v3, Lcom/tidal/android/feature/playerscreen/ui/r$a;->c:Lcom/tidal/android/feature/playerscreen/ui/d; # cover pager
|
||||
+
|
||||
+ iget-object v4, v3, Lcom/tidal/android/feature/playerscreen/ui/d;->a:Lon0/b; # item list
|
||||
+ iget-object v4, v3, Lcom/tidal/android/feature/playerscreen/ui/d;->a:Ltn0/b; # item list
|
||||
+
|
||||
+ iget v5, v3, Lcom/tidal/android/feature/playerscreen/ui/d;->b:I # current index
|
||||
+
|
||||
+ invoke-interface {v4}, Ljava/util/List;->size()I
|
||||
+ invoke-interface {v4}, Ljava/util/List;->size()I # list size
|
||||
+
|
||||
+ move-result v6
|
||||
+ move-result v6 # size value
|
||||
+
|
||||
+ if-le v6, v5, :radiant_skip # index out of bounds -> skip
|
||||
+ if-le v6, v5, :radiant_skip # bounds check
|
||||
+
|
||||
+ if-ltz v5, :radiant_skip
|
||||
+ if-ltz v5, :radiant_skip # negative check
|
||||
+
|
||||
+ invoke-interface {v4, v5}, Ljava/util/List;->get(I)Ljava/lang/Object;
|
||||
+ invoke-interface {v4, v5}, Ljava/util/List;->get(I)Ljava/lang/Object; # current item
|
||||
+
|
||||
+ move-result-object v4
|
||||
+ move-result-object v4 # current item
|
||||
+
|
||||
+ instance-of v6, v4, Lcom/tidal/android/feature/playerscreen/ui/c$a; # only album covers
|
||||
+
|
||||
+ if-eqz v6, :radiant_skip
|
||||
+ if-eqz v6, :radiant_skip # skip non-albums
|
||||
+
|
||||
+ check-cast v4, Lcom/tidal/android/feature/playerscreen/ui/c$a;
|
||||
+ check-cast v4, Lcom/tidal/android/feature/playerscreen/ui/c$a; # narrow type
|
||||
+
|
||||
+ iget v5, v4, Lcom/tidal/android/feature/playerscreen/ui/c$a;->b:I # album id
|
||||
+
|
||||
+ iget-object v4, v4, Lcom/tidal/android/feature/playerscreen/ui/c$a;->c:Ljava/lang/String; # cover uuid
|
||||
+
|
||||
+ new-instance v6, Lcom/tidal/android/feature/playerscreen/ui/composables/p0; # tidal's cover request
|
||||
+ new-instance v6, Lcom/tidal/android/feature/playerscreen/ui/composables/n0; # cover request lambda
|
||||
+
|
||||
+ invoke-direct {v6, v5, v4}, Lcom/tidal/android/feature/playerscreen/ui/composables/p0;-><init>(ILjava/lang/String;)V
|
||||
+ invoke-direct {v6, v5, v4}, Lcom/tidal/android/feature/playerscreen/ui/composables/n0;-><init>(ILjava/lang/String;)V # build request
|
||||
+
|
||||
+ sget-object v5, Landroidx/compose/ui/Modifier;->Companion:Landroidx/compose/ui/Modifier$Companion;
|
||||
+ sget-object v5, Landroidx/compose/ui/Modifier;->Companion:Landroidx/compose/ui/Modifier$Companion; # base modifier
|
||||
+
|
||||
+ const/4 v7, 0x0
|
||||
+ const/4 v7, 0x0 # fraction unused
|
||||
+
|
||||
+ const/4 v8, 0x1
|
||||
+ const/4 v8, 0x1 # default fraction
|
||||
+
|
||||
+ const/4 v3, 0x0
|
||||
+ const/4 v3, 0x0 # synthetic null
|
||||
+
|
||||
+ invoke-static {v5, v7, v8, v3}, Landroidx/compose/foundation/layout/SizeKt;->fillMaxSize$default(Landroidx/compose/ui/Modifier;FILjava/lang/Object;)Landroidx/compose/ui/Modifier; # fill the player root
|
||||
+
|
||||
+ move-result-object v5
|
||||
+ move-result-object v5 # filled modifier
|
||||
+
|
||||
+ const/high16 v7, 0x42b40000 # 90f (blur radius dp)
|
||||
+ const/high16 v7, 0x42b40000 # 90f blur dp
|
||||
+
|
||||
+ invoke-static {v7}, Landroidx/compose/ui/unit/Dp;->constructor-impl(F)F
|
||||
+ invoke-static {v7}, Landroidx/compose/ui/unit/Dp;->constructor-impl(F)F # to Dp
|
||||
+
|
||||
+ move-result v7
|
||||
+ move-result v7 # blur dp value
|
||||
+
|
||||
+ sget-object v8, Landroidx/compose/ui/draw/BlurredEdgeTreatment;->Companion:Landroidx/compose/ui/draw/BlurredEdgeTreatment$Companion;
|
||||
+ sget-object v8, Landroidx/compose/ui/draw/BlurredEdgeTreatment;->Companion:Landroidx/compose/ui/draw/BlurredEdgeTreatment$Companion; # blur edge companion
|
||||
+
|
||||
+ invoke-virtual {v8}, Landroidx/compose/ui/draw/BlurredEdgeTreatment$Companion;->getRectangle---Goahg()Landroidx/compose/ui/graphics/Shape;
|
||||
+ invoke-virtual {v8}, Landroidx/compose/ui/draw/BlurredEdgeTreatment$Companion;->getRectangle---Goahg()Landroidx/compose/ui/graphics/Shape; # rectangle treatment
|
||||
+
|
||||
+ move-result-object v8
|
||||
+ move-result-object v8 # edge shape
|
||||
+
|
||||
+ invoke-static {v5, v7, v8}, Landroidx/compose/ui/draw/BlurKt;->blur-F8QBwvs(Landroidx/compose/ui/Modifier;FLandroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier; # apply blur
|
||||
+
|
||||
+ move-result-object v5
|
||||
+ move-result-object v5 # blurred modifier
|
||||
+
|
||||
+ sget-object v7, Landroidx/compose/ui/layout/ContentScale;->Companion:Landroidx/compose/ui/layout/ContentScale$Companion;
|
||||
+ sget-object v7, Landroidx/compose/ui/layout/ContentScale;->Companion:Landroidx/compose/ui/layout/ContentScale$Companion; # scale companion
|
||||
+
|
||||
+ invoke-virtual {v7}, Landroidx/compose/ui/layout/ContentScale$Companion;->getCrop()Landroidx/compose/ui/layout/ContentScale; # cover-crop scaling
|
||||
+
|
||||
+ move-result-object v7
|
||||
+ move-result-object v7 # crop scale
|
||||
+
|
||||
+ move-object/from16 v61, v6 # request
|
||||
+
|
||||
+ const/16 v62, 0x0 # contentDescription
|
||||
+
|
||||
+ move-object/from16 v63, v5 # modifier (blurred + fillMaxSize)
|
||||
+ move-object/from16 v63, v5 # blurred modifier
|
||||
+
|
||||
+ const/16 v64, 0x0 # colorFilter
|
||||
+
|
||||
@@ -89,47 +89,47 @@
|
||||
+
|
||||
+ move-object/from16 v66, v4 # cover uuid
|
||||
+
|
||||
+ const/16 v67, 0x0
|
||||
+ const/16 v67, 0x0 # null onError
|
||||
+
|
||||
+ move-object/from16 v68, v10 # composer
|
||||
+
|
||||
+ const/16 v69, 0x0
|
||||
+ const/16 v69, 0x0 # changed flags
|
||||
+
|
||||
+ const/16 v70, 0x48
|
||||
+ const/16 v70, 0x48 # default mask
|
||||
+
|
||||
+ invoke-static/range {v61 .. v70}, Lsd0/f;->a(Ltl0/l;Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/ColorFilter;Landroidx/compose/ui/layout/ContentScale;Ljava/lang/Object;Ltl0/a;Landroidx/compose/runtime/Composer;II)V # render blurred cover
|
||||
+ invoke-static/range {v61 .. v70}, Lxd0/f;->a(Lyl0/l;Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/ColorFilter;Landroidx/compose/ui/layout/ContentScale;Ljava/lang/Object;Lyl0/a;Landroidx/compose/runtime/Composer;II)V # render blurred cover
|
||||
+
|
||||
+ sget-object v3, Landroidx/compose/ui/Modifier;->Companion:Landroidx/compose/ui/Modifier$Companion; # scrim chain start
|
||||
+
|
||||
+ const/4 v4, 0x0 # fraction unused
|
||||
+
|
||||
+ const/4 v5, 0x1 # $default mask
|
||||
+ const/4 v5, 0x1 # default mask
|
||||
+
|
||||
+ const/4 v6, 0x0 # null obj
|
||||
+
|
||||
+ invoke-static {v3, v4, v5, v6}, Landroidx/compose/foundation/layout/SizeKt;->fillMaxSize$default(Landroidx/compose/ui/Modifier;FILjava/lang/Object;)Landroidx/compose/ui/Modifier; # fill screen
|
||||
+
|
||||
+ move-result-object v3 # modifier
|
||||
+ move-result-object v3 # fullscreen modifier
|
||||
+
|
||||
+ const v6, -0x80000000 # 0x80000000 = 50% black
|
||||
+ const v6, -0x80000000 # 50% black ARGB
|
||||
+
|
||||
+ invoke-static {v6}, Landroidx/compose/ui/graphics/ColorKt;->Color(I)J # pack ARGB long
|
||||
+ invoke-static {v6}, Landroidx/compose/ui/graphics/ColorKt;->Color(I)J # pack color long
|
||||
+
|
||||
+ move-result-wide v6 # color
|
||||
+ move-result-wide v6 # color long
|
||||
+
|
||||
+ invoke-static {}, Landroidx/compose/ui/graphics/RectangleShapeKt;->getRectangleShape()Landroidx/compose/ui/graphics/Shape; # rect shape
|
||||
+
|
||||
+ move-result-object v4 # shape
|
||||
+ move-result-object v4 # rect shape
|
||||
+
|
||||
+ invoke-static {v3, v6, v7, v4}, Landroidx/compose/foundation/BackgroundKt;->background-bw27NRU(Landroidx/compose/ui/Modifier;JLandroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier; # tint with scrim
|
||||
+
|
||||
+ move-result-object v3 # modifier
|
||||
+ move-result-object v3 # tinted modifier
|
||||
+
|
||||
+ const/4 v4, 0x0 # $changed flags
|
||||
+ const/4 v4, 0x0 # changed flags
|
||||
+
|
||||
+ invoke-static {v3, v10, v4}, Landroidx/compose/foundation/layout/SpacerKt;->Spacer(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V # draw scrim
|
||||
+
|
||||
+ :radiant_skip
|
||||
+ :radiant_skip # skip target
|
||||
+ invoke-interface {v10}, Landroidx/compose/runtime/Composer;->endReplaceGroup()V # close group
|
||||
+
|
||||
.line 138
|
||||
|
||||
Reference in New Issue
Block a user