Compare commits

...
10 Commits
Author SHA1 Message Date
meoware.exe 28cd296283 Merge pull request #77 from meowarex/dev
WIP | Syllable AI [RL API]
2026-08-11 20:26:40 +10:00
meowarex ba9bba2030 WIP | Syllable AI [RL API] 2026-08-11 07:57:30 +00:00
meowarex d44d833334 Gestures Rewrite 2026-08-11 03:22:28 +00:00
meoware.exe 8d06cea14d Merge pull request #76 from meowarex/dev
1.0 Release <3
2026-08-10 17:00:52 +10:00
meoware.exe b9baef4478 1.0 Release <3 2026-08-10 17:00:22 +10:00
meoware.exe 8fc0241611 Merge pull request #75 from meowarex/dev
Syllable Level Lyrics <3
2026-08-10 03:20:25 +10:00
meowarex a648e1a97c Syllable Level Lyrics <3 2026-08-09 17:11:50 +00:00
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
41 changed files with 5857 additions and 1216 deletions
@@ -32,11 +32,87 @@
"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 (Syllable Level & Higher Quality)",
"default": false,
"defaultVariantIndex": 0,
"variants": [
{
"title": "Line",
"fileNames": []
},
{
"title": "Word",
"fileNames": [
"lyrics-rl-api-word.patch"
]
},
{
"title": "Syllable",
"fileNames": [
"lyrics-rl-api-syllable.patch"
]
}
],
"extensionFiles": [
"radiant/RLAPILyricsHook.smali",
"radiant/RLAPILyricsWorker.smali",
"radiant/IsrcCache.smali",
"radiant/WordLyrics.smali",
"radiant/WordLyricsTick.smali",
"radiant/SylBrush.smali",
"radiant/SylLayout.smali"
],
"advancedOptions": [
{
"type": "toggle",
"key": "romanize",
"title": "Romanization",
"description": "Return a romanized transcription and show that instead of the original script",
"default": false,
"token": "RL_ROMANIZE",
"inline": true
},
{
"type": "toggle",
"key": "synthesize",
"title": "WIP | AI Generate Syllables",
"description": "[Only works with API results] - Generates Syllable timings from Line timings using a self trained AI model ",
"default": false,
"inline": true,
"token": "RL_SYNTHESIZE"
},
{
"type": "toggle",
"key": "context_aware",
"title": "Context Aware Lyrics",
"description": "Display voice context cues (adlibs and duet singers get displayed seperately)",
"default": true,
"token": "RL_CTX_ON"
},
{
"type": "choice",
"key": "context_aware_mode",
"title": "Show",
"description": "",
"entries": [
"Adlibs",
"Singers",
"Both"
],
"values": [
"0x1",
"0x2",
"0x3"
],
"defaultIndex": 0,
"requiresOption": "context_aware",
"token": "RL_CTX"
}
]
},
{
"id": "PlayerBackdrop",
@@ -144,7 +220,7 @@
"type": "toggle",
"key": "cover_everywhere",
"title": "Cover Everywhere - WIP",
"description": "Applies TIDAL's player 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": [
@@ -303,15 +379,19 @@
"description": "Adds swipe up gesture to the mini-player to reopen the player",
"default": true,
"fileNames": [
"mini-player-gestures.patch"
"mini-player-up-gesture.patch",
"player-swipe-gesture.patch",
"lyrics-gesture-scroll-guard.patch"
],
"extensionFiles": [
"radiant/MiniPlayerGestures.smali",
"radiant/MiniPlayerGestures$Gesture.smali",
"radiant/MiniPlayerGestures$FeedbackLayer.smali",
"radiant/MiniPlayerGestures$FeedbackResetAnimator.smali",
"radiant/MiniPlayerGestures$RootGesture.smali",
"radiant/MiniPlayerGestures$ApplyPending.smali"
"radiant/gestures/MiniPlayerGestures.smali",
"radiant/gestures/MiniPlayerGestures$Gesture.smali",
"radiant/gestures/MiniPlayerGestures$FeedbackLayer.smali",
"radiant/gestures/MiniPlayerGestures$FeedbackResetAnimator.smali",
"radiant/gestures/MiniPlayerGestures$RootGesture.smali",
"radiant/gestures/MiniPlayerGestures$ApplyPending.smali",
"radiant/gestures/LyricsDrag.smali",
"radiant/gestures/LyricsDrag$Guard.smali"
]
},
{
@@ -338,14 +418,14 @@
"default": false,
"requiresOption": "gestures",
"fileNames": [
"mini-player-gestures-left-right.patch"
"mini-player-left-right-gesture.patch"
],
"extensionFiles": [
"radiant/MiniPlayerTrackGestures.smali",
"radiant/MiniPlayerTrackGestures$Gesture.smali",
"radiant/MiniPlayerTrackGestures$OffsetLayer.smali",
"radiant/MiniPlayerTrackGestures$ResetAnimator.smali",
"radiant/MiniPlayerTrackGestures$TextDraw.smali",
"radiant/gestures/MiniPlayerTrackGestures.smali",
"radiant/gestures/MiniPlayerTrackGestures$Gesture.smali",
"radiant/gestures/MiniPlayerTrackGestures$OffsetLayer.smali",
"radiant/gestures/MiniPlayerTrackGestures$ResetAnimator.smali",
"radiant/gestures/MiniPlayerTrackGestures$TextDraw.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)
@@ -190,7 +190,9 @@ class PatchOptionsModel(
fun isAdvancedModified(spec: PatchSpec): Boolean = spec.advancedOptions.any { option ->
when (option) {
is OptionSpec.Toggle -> toggleValue(spec, option) != option.default
// inline toggles sit next to the variant picker, not in the sheet, so they
// must not light up the sheet's "modified" dot
is OptionSpec.Toggle -> !option.inline && toggleValue(spec, option) != option.default
is OptionSpec.Slider -> sliderValue(spec, option) != option.default
is OptionSpec.Choice -> choiceValue(spec, option) != option.defaultIndex
is OptionSpec.Color -> colorValue(spec, option) != option.default
@@ -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,
+2 -1
View File
@@ -15,7 +15,8 @@ Every Patch & Integration can be disabled/enabled & adjusted exactly how you wan
- Keeps lyrics controls visible
- One-handed player controls
- Redesigned mini-player with gestures
- Syllable Level lyrics (SoonTM)
- Word Level Lyrics (Word by Word) <3
- Syllable Level Lyrics (Syllable by Syllable) <3
### Integrations
+1 -1
View File
@@ -1,5 +1,5 @@
{
"tidalVersionCode": 10004,
"tidalApkUrl": "https://github.com/meowarex/rl-mobile/releases/download/latest/tidal-stock.apk",
"patchesVersion": "0.11.1"
"patchesVersion": "1.1.2"
}
+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
@@ -1,521 +0,0 @@
.class public final Lradiant/MiniPlayerGestures$Gesture;
.super Ljava/lang/Object;
.implements Lam0/l;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lradiant/MiniPlayerGestures;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x19
name = "Gesture"
.end annotation
# instance fields
.field public final a:Lam0/l;
# Y at ACTION_DOWN
.field public b:F
# Last Y seen (on this pointer stream)
.field public c:F
# True while this listener owns an active pointer stream
.field public d:Z
# True when sheet drag has started
.field public e:Z
.field public final f:Landroidx/compose/material3/SheetState;
.field public g:F
# X at ACTION_DOWN
.field public i:F
# True once horizontal movement wins (prevents later vertical start)
.field public j:Z
# Drag option enabled
.field public final k:Z
# direct methods
.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:Lam0/l;
iput-object p2, p0, Lradiant/MiniPlayerGestures$Gesture;->f:Landroidx/compose/material3/SheetState;
iput-boolean p3, p0, Lradiant/MiniPlayerGestures$Gesture;->k:Z
return-void
.end method
.method private static dp(F)F
.locals 1
invoke-static {}, Landroid/content/res/Resources;->getSystem()Landroid/content/res/Resources;
move-result-object v0
invoke-virtual {v0}, Landroid/content/res/Resources;->getDisplayMetrics()Landroid/util/DisplayMetrics;
move-result-object v0
iget v0, v0, Landroid/util/DisplayMetrics;->density:F
mul-float/2addr p0, v0
return p0
.end method
.method private dragSheet(FJ)V
.locals 1
iget-object v0, p0, Lradiant/MiniPlayerGestures$Gesture;->f:Landroidx/compose/material3/SheetState;
invoke-static {v0, p1, p2, p3}, Lradiant/MiniPlayerGestures;->updateDragTimed(Landroidx/compose/material3/SheetState;FJ)V
return-void
.end method
.method private finishSheet(F)V
.locals 2
iget-object v0, p0, Lradiant/MiniPlayerGestures$Gesture;->f:Landroidx/compose/material3/SheetState;
iget-object v1, p0, Lradiant/MiniPlayerGestures$Gesture;->a:Lam0/l;
invoke-static {v0, v1, p1}, Lradiant/MiniPlayerGestures;->finishDrag(Landroidx/compose/material3/SheetState;Lam0/l;F)V
return-void
.end method
.method private openPlayer()V
.locals 2
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}, Lam0/l;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
return-void
.end method
.method private reset()V
.locals 1
const/4 v0, 0x0
iput-boolean v0, p0, Lradiant/MiniPlayerGestures$Gesture;->d:Z
iput-boolean v0, p0, Lradiant/MiniPlayerGestures$Gesture;->e:Z
iput-boolean v0, p0, Lradiant/MiniPlayerGestures$Gesture;->j:Z
const/4 v0, 0x0
iput v0, p0, Lradiant/MiniPlayerGestures$Gesture;->i:F
iput v0, p0, Lradiant/MiniPlayerGestures$Gesture;->g:F
return-void
.end method
.method private startSheet(FJ)V
.locals 2
# empty player guard
invoke-static {}, Lradiant/MiniPlayerGestures;->hasMiniPlayerMedia()Z
move-result v0
if-nez v0, :start_guard
return-void
:start_guard
# avoid starting twice
iget-boolean v0, p0, Lradiant/MiniPlayerGestures$Gesture;->e:Z
if-eqz v0, :start
return-void
:start
const/4 v0, 0x1
iput-boolean v0, p0, Lradiant/MiniPlayerGestures$Gesture;->e:Z
iget-boolean v0, p0, Lradiant/MiniPlayerGestures$Gesture;->k:Z
if-eqz v0, :done
iget-object v1, p0, Lradiant/MiniPlayerGestures$Gesture;->f:Landroidx/compose/material3/SheetState;
iget v0, p0, Lradiant/MiniPlayerGestures$Gesture;->b:F
invoke-static {v1, p1, v0, p2, p3}, Lradiant/MiniPlayerGestures;->beginDrag(Landroidx/compose/material3/SheetState;FFJ)V
invoke-direct {p0}, Lradiant/MiniPlayerGestures$Gesture;->openPlayer()V
:done
return-void
.end method
# virtual methods
# Listens for MotionEvents
.method public final invoke(Landroid/view/MotionEvent;)Lkotlin/u;
.locals 11
invoke-virtual {p1}, Landroid/view/MotionEvent;->getActionMasked()I
move-result v0
if-eqz v0, :down
const/4 v1, 0x1
if-eq v0, v1, :up
const/4 v1, 0x2
if-eq v0, v1, :move
const/4 v1, 0x3
if-eq v0, v1, :cancel
goto :done
# ACTION_DOWN
:down
invoke-static {}, Lradiant/MiniPlayerGestures;->resetGestureLock()V
invoke-static {p1}, Lradiant/MiniPlayerGestures;->beginMotion(Landroid/view/MotionEvent;)V
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
move-result v0
iput v0, p0, Lradiant/MiniPlayerGestures$Gesture;->b:F
iput v0, p0, Lradiant/MiniPlayerGestures$Gesture;->c:F
const/4 v0, 0x1
iput-boolean v0, p0, Lradiant/MiniPlayerGestures$Gesture;->d:Z
const/4 v0, 0x0
iput-boolean v0, p0, Lradiant/MiniPlayerGestures$Gesture;->e:Z
const/4 v0, 0x0
iput v0, p0, Lradiant/MiniPlayerGestures$Gesture;->g:F
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawX()F
move-result v0
iput v0, p0, Lradiant/MiniPlayerGestures$Gesture;->i:F
const/4 v0, 0x0
iput-boolean v0, p0, Lradiant/MiniPlayerGestures$Gesture;->j:Z
iget v0, p0, Lradiant/MiniPlayerGestures$Gesture;->b:F
invoke-static {v0}, Lradiant/MiniPlayerGestures;->beginSwipeGesture(F)V
:skip_feedback_down
goto :done
# ACTION_MOVE
:move
iget-boolean v0, p0, Lradiant/MiniPlayerGestures$Gesture;->d:Z
if-eqz v0, :done
invoke-static {p1}, Lradiant/MiniPlayerGestures;->trackMotion(Landroid/view/MotionEvent;)V
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
move-result v0
invoke-virtual {p1}, Landroid/view/MotionEvent;->getEventTime()J
move-result-wide v5
iget v1, p0, Lradiant/MiniPlayerGestures$Gesture;->c:F
sub-float v1, v0, v1
iput v1, p0, Lradiant/MiniPlayerGestures$Gesture;->g:F
iget v2, p0, Lradiant/MiniPlayerGestures$Gesture;->b:F
sub-float v2, v0, v2
iget-boolean v3, p0, Lradiant/MiniPlayerGestures$Gesture;->e:Z
if-eqz v3, :maybe_start
invoke-static {}, Lradiant/MiniPlayerGestures;->suppressHorizontalGestures()V
iget-boolean v3, p0, Lradiant/MiniPlayerGestures$Gesture;->k:Z
if-eqz v3, :feedback_active
invoke-direct {p0, v2, v5, v6}, Lradiant/MiniPlayerGestures$Gesture;->dragSheet(FJ)V
:feedback_active
invoke-static {v2}, Lradiant/MiniPlayerGestures;->setSwipeFeedbackFromDrag(F)V
goto :store_last
:maybe_start
iget-boolean v3, p0, Lradiant/MiniPlayerGestures$Gesture;->j:Z
if-eqz v3, :axis_check
goto :store_last
:axis_check
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawX()F
move-result v7
iget v8, p0, Lradiant/MiniPlayerGestures$Gesture;->i:F
sub-float/2addr v7, v8
invoke-static {v7}, Ljava/lang/Math;->abs(F)F
move-result v7
invoke-static {v2}, Ljava/lang/Math;->abs(F)F
move-result v8
const/high16 v9, 0x40c00000 # 6.0f axis deadzone
invoke-static {v9}, Lradiant/MiniPlayerGestures$Gesture;->dp(F)F
move-result v9
invoke-static {}, Lradiant/MiniPlayerGestures;->isHorizontalGestureLocked()Z
move-result v10
if-eqz v10, :horizontal_check
const/4 v10, 0x0
invoke-static {v10}, Lradiant/MiniPlayerGestures;->setSwipeFeedbackDirect(F)V
goto :store_last
:horizontal_check
cmpg-float v10, v7, v9
if-gez v10, :horizontal_dominance
goto :vertical_check
:horizontal_dominance
const v10, 0x3f8ccccd # 1.1f
mul-float/2addr v10, v8
cmpg-float v10, v7, v10
if-gez v10, :horizontal_wins
goto :vertical_check
:horizontal_wins
invoke-static {}, Lradiant/MiniPlayerGestures;->lockHorizontalGesture()Z
move-result v10
if-eqz v10, :store_last
const/4 v10, 0x1
iput-boolean v10, p0, Lradiant/MiniPlayerGestures$Gesture;->j:Z
const/4 v10, 0x0
invoke-static {v10}, Lradiant/MiniPlayerGestures;->setSwipeFeedbackDirect(F)V
goto :store_last
# At least 16dp up to open the player
:vertical_check
neg-float v9, v9
cmpg-float v10, v2, v9
if-lez v10, :vertical_dominance
invoke-static {v2}, Lradiant/MiniPlayerGestures;->setSwipeFeedbackFromDrag(F)V
goto :store_last
:vertical_dominance
const v10, 0x3f8ccccd # 1.1f -> early vertical axis lock
mul-float/2addr v7, v10
cmpl-float v10, v8, v7
if-gtz v10, :begin
goto :store_last
:begin
invoke-static {}, Lradiant/MiniPlayerGestures;->lockVerticalGesture()Z
move-result v10
if-eqz v10, :store_last
invoke-direct {p0, v2, v5, v6}, Lradiant/MiniPlayerGestures$Gesture;->startSheet(FJ)V
iget-boolean v10, p0, Lradiant/MiniPlayerGestures$Gesture;->e:Z
if-eqz v10, :store_last
invoke-static {}, Lradiant/MiniPlayerGestures;->suppressHorizontalGestures()V
iget-boolean v10, p0, Lradiant/MiniPlayerGestures$Gesture;->k:Z
if-eqz v10, :feedback_begin
invoke-direct {p0, v2, v5, v6}, Lradiant/MiniPlayerGestures$Gesture;->dragSheet(FJ)V
:feedback_begin
invoke-static {v2}, Lradiant/MiniPlayerGestures;->setSwipeFeedbackFromDrag(F)V
:store_last
iput v0, p0, Lradiant/MiniPlayerGestures$Gesture;->c:F
goto :done
# ACTION_UP
:up
iget-boolean v0, p0, Lradiant/MiniPlayerGestures$Gesture;->d:Z
if-eqz v0, :done
iget-boolean v0, p0, Lradiant/MiniPlayerGestures$Gesture;->e:Z
if-eqz v0, :up_no_drag
iget-boolean v0, p0, Lradiant/MiniPlayerGestures$Gesture;->k:Z
if-eqz v0, :open_simple
invoke-static {p1}, Lradiant/MiniPlayerGestures;->trackMotion(Landroid/view/MotionEvent;)V
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
move-result v0
invoke-virtual {p1}, Landroid/view/MotionEvent;->getEventTime()J
move-result-wide v5
iget-object v1, p0, Lradiant/MiniPlayerGestures$Gesture;->f:Landroidx/compose/material3/SheetState;
invoke-static {v1, v0, v5, v6}, Lradiant/MiniPlayerGestures;->updateDragToYTimed(Landroidx/compose/material3/SheetState;FJ)V
invoke-static {v1}, Lradiant/MiniPlayerGestures;->releaseVelocity(Landroidx/compose/material3/SheetState;)F
move-result v0
invoke-direct {p0, v0}, Lradiant/MiniPlayerGestures$Gesture;->finishSheet(F)V
invoke-static {}, Lradiant/MiniPlayerGestures;->animateSwipeFeedbackReset()V
goto :finish
:up_no_drag
invoke-static {}, Lradiant/MiniPlayerGestures;->animateSwipeFeedbackReset()V
goto :finish
:open_simple
invoke-static {}, Lradiant/MiniPlayerGestures;->suppressHorizontalGestures()V
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
move-result v0
iget-object v1, p0, Lradiant/MiniPlayerGestures$Gesture;->a:Lam0/l;
invoke-static {v1, v0}, Lradiant/MiniPlayerGestures;->completeSimpleSwipe(Lam0/l;F)Z
invoke-static {}, Lradiant/MiniPlayerGestures;->animateSwipeFeedbackReset()V
:finish
invoke-direct {p0}, Lradiant/MiniPlayerGestures$Gesture;->reset()V
goto :done
# ACTION_CANCEL
:cancel
iget-boolean v0, p0, Lradiant/MiniPlayerGestures$Gesture;->e:Z
if-eqz v0, :cancel_no_active
invoke-static {}, Lradiant/MiniPlayerGestures;->animateSwipeFeedbackReset()V
iget-object v0, p0, Lradiant/MiniPlayerGestures$Gesture;->f:Landroidx/compose/material3/SheetState;
iget-object v1, p0, Lradiant/MiniPlayerGestures$Gesture;->a:Lam0/l;
invoke-static {v0, v1}, Lradiant/MiniPlayerGestures;->cancelDrag(Landroidx/compose/material3/SheetState;Lam0/l;)V
goto :cancel_reset
:cancel_no_active
invoke-static {}, Lradiant/MiniPlayerGestures;->animateSwipeFeedbackReset()V
:cancel_reset
invoke-direct {p0}, Lradiant/MiniPlayerGestures$Gesture;->reset()V
:done
sget-object p1, Lkotlin/u;->a:Lkotlin/u;
return-object p1
.end method
.method public bridge synthetic invoke(Ljava/lang/Object;)Ljava/lang/Object;
.locals 0
check-cast p1, Landroid/view/MotionEvent;
invoke-virtual {p0, p1}, Lradiant/MiniPlayerGestures$Gesture;->invoke(Landroid/view/MotionEvent;)Lkotlin/u;
move-result-object p1
return-object p1
.end method
@@ -1,178 +0,0 @@
.class public final Lradiant/MiniPlayerGestures$RootGesture;
.super Ljava/lang/Object;
.implements Lam0/l;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lradiant/MiniPlayerGestures;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x19
name = "RootGesture"
.end annotation
# instance fields
.field public final a:Lam0/l;
.field public final b:Landroidx/compose/material3/SheetState;
# direct methods
.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:Lam0/l;
iput-object p2, p0, Lradiant/MiniPlayerGestures$RootGesture;->b:Landroidx/compose/material3/SheetState;
return-void
.end method
# virtual methods
.method public final invoke(Landroid/view/MotionEvent;)Lkotlin/u;
.locals 6
iget-object v0, p0, Lradiant/MiniPlayerGestures$RootGesture;->b:Landroidx/compose/material3/SheetState;
invoke-virtual {p1}, Landroid/view/MotionEvent;->getActionMasked()I
move-result v1
invoke-static {v0}, Lradiant/MiniPlayerGestures;->isDragging(Landroidx/compose/material3/SheetState;)Z
move-result v2
if-eqz v2, :maybe_reset_only
const/4 v2, 0x1
if-eq v1, v2, :up
const/4 v2, 0x2
if-eq v1, v2, :move
const/4 v2, 0x3
if-eq v1, v2, :cancel
goto :done
:maybe_reset_only
const/4 v2, 0x1
if-eq v1, v2, :simple_up
const/4 v2, 0x3
if-eq v1, v2, :reset_only
const/4 v2, 0x2
if-eq v1, v2, :simple_move
goto :done
:reset_only
invoke-static {}, Lradiant/MiniPlayerGestures;->resetGestureLock()V
invoke-static {}, Lradiant/MiniPlayerGestures;->animateSwipeFeedbackReset()V
goto :done
:simple_move
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
move-result v1
invoke-static {v1}, Lradiant/MiniPlayerGestures;->updateSimpleSwipe(F)Z
goto :done
:simple_up
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
move-result v1
iget-object v2, p0, Lradiant/MiniPlayerGestures$RootGesture;->a:Lam0/l;
invoke-static {v2, v1}, Lradiant/MiniPlayerGestures;->completeSimpleSwipe(Lam0/l;F)Z
invoke-static {}, Lradiant/MiniPlayerGestures;->animateSwipeFeedbackReset()V
goto :done
# ACTION_MOVE
:move
invoke-static {p1}, Lradiant/MiniPlayerGestures;->trackMotion(Landroid/view/MotionEvent;)V
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
move-result v2
invoke-virtual {p1}, Landroid/view/MotionEvent;->getEventTime()J
move-result-wide v4
invoke-static {v0, v2, v4, v5}, Lradiant/MiniPlayerGestures;->updateDragToYTimed(Landroidx/compose/material3/SheetState;FJ)V
goto :done
# ACTION_UP
:up
invoke-static {p1}, Lradiant/MiniPlayerGestures;->trackMotion(Landroid/view/MotionEvent;)V
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
move-result v1
invoke-virtual {p1}, Landroid/view/MotionEvent;->getEventTime()J
move-result-wide v4
invoke-static {v0, v1, v4, v5}, Lradiant/MiniPlayerGestures;->updateDragToYTimed(Landroidx/compose/material3/SheetState;FJ)V
invoke-static {v0}, Lradiant/MiniPlayerGestures;->releaseVelocity(Landroidx/compose/material3/SheetState;)F
move-result v1
iget-object v2, p0, Lradiant/MiniPlayerGestures$RootGesture;->a:Lam0/l;
invoke-static {v0, v2, v1}, Lradiant/MiniPlayerGestures;->finishDrag(Landroidx/compose/material3/SheetState;Lam0/l;F)V
invoke-static {}, Lradiant/MiniPlayerGestures;->animateSwipeFeedbackReset()V
goto :done
# ACTION_CANCEL
:cancel
iget-object v2, p0, Lradiant/MiniPlayerGestures$RootGesture;->a:Lam0/l;
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/u;->a:Lkotlin/u;
return-object p1
.end method
.method public bridge synthetic invoke(Ljava/lang/Object;)Ljava/lang/Object;
.locals 0
check-cast p1, Landroid/view/MotionEvent;
invoke-virtual {p0, p1}, Lradiant/MiniPlayerGestures$RootGesture;->invoke(Landroid/view/MotionEvent;)Lkotlin/u;
move-result-object p1
return-object p1
.end method
@@ -156,13 +156,27 @@
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
+288 -11
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
@@ -43,6 +45,8 @@
if-eqz v0, :done
invoke-static {}, Lradiant/WordLyrics;->clear()V
const/4 v0, 0x0
sput-object v0, Lradiant/RLAPILyricsHook;->currentKey:Ljava/lang/String;
@@ -114,6 +118,99 @@
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
@@ -136,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
@@ -154,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
@@ -347,11 +448,7 @@
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;
invoke-static {v4}, Lradiant/WordLyrics;->lineText(Lorg/json/JSONObject;)Ljava/lang/String;
move-result-object v5
@@ -393,20 +490,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
@@ -424,10 +669,38 @@
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;
invoke-static {}, Lradiant/WordLyrics;->romanizeOn()Z
move-result v0
if-eqz v0, :no_romanize
const-string v0, "&romanize=true"
invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
:no_romanize
const-string v0, "&platform=rl-mobile"
invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-static {}, Lradiant/WordLyrics;->synthesizeOn()Z
move-result v0
if-eqz v0, :no_synthesize
const-string v0, "&synthesize=true"
invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
:no_synthesize
invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v2
@@ -479,6 +752,8 @@
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
@@ -536,6 +811,8 @@
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;->O:Lkotlinx/coroutines/flow/MutableStateFlow;
+59
View File
@@ -0,0 +1,59 @@
.class public final Lradiant/SylBrush;
.super Landroidx/compose/ui/graphics/ShaderBrush;
# Paints the syllable wipe gradient
# x0 = wipe edge, x1 = end of the soft trail
# instance state
.field public final x0:F
.field public final x1:F
.field public final c0:I
.field public final c1:I
.method public constructor <init>(FFII)V
.locals 0
invoke-direct {p0}, Landroidx/compose/ui/graphics/ShaderBrush;-><init>()V
iput p1, p0, Lradiant/SylBrush;->x0:F
iput p2, p0, Lradiant/SylBrush;->x1:F
iput p3, p0, Lradiant/SylBrush;->c0:I
iput p4, p0, Lradiant/SylBrush;->c1:I
return-void
.end method
# Gradient across the whole line
.method public createShader-uvyYCjk(J)Landroid/graphics/Shader;
.locals 8
new-instance v0, Landroid/graphics/LinearGradient;
iget v1, p0, Lradiant/SylBrush;->x0:F
const/4 v2, 0x0
iget v3, p0, Lradiant/SylBrush;->x1:F
const/4 v4, 0x0
iget v5, p0, Lradiant/SylBrush;->c0:I
iget v6, p0, Lradiant/SylBrush;->c1:I
sget-object v7, Landroid/graphics/Shader$TileMode;->CLAMP:Landroid/graphics/Shader$TileMode;
invoke-direct/range {v0 .. v7}, Landroid/graphics/LinearGradient;-><init>(FFFFIILandroid/graphics/Shader$TileMode;)V
return-object v0
.end method
+264
View File
@@ -0,0 +1,264 @@
.class public final Lradiant/SylLayout;
.super Ljava/lang/Object;
# interfaces
.implements Lam0/l;
# Remembers where each line's glyphs landed
# static state
.field public static cbs:[Lradiant/SylLayout;
.field public static layouts:[Landroidx/compose/ui/text/TextLayoutResult;
# instance state
.field public final idx:I
.method public constructor <init>(I)V
.locals 0
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
iput p1, p0, Lradiant/SylLayout;->idx:I
return-void
.end method
# One reusable callback per line
.method public static cb(I)Lam0/l;
.locals 5
if-gez p0, :have_idx
const/4 p0, 0x0
:have_idx
sget-object v0, Lradiant/SylLayout;->cbs:[Lradiant/SylLayout;
if-eqz v0, :grow
array-length v1, v0
if-gt v1, p0, :have_arr
:grow
add-int/lit8 v1, p0, 0x1
const/16 v2, 0x40
if-ge v1, v2, :cap_ok
const/16 v1, 0x40
:cap_ok
if-nez v0, :copy
new-array v0, v1, [Lradiant/SylLayout;
goto :store_arr
:copy
invoke-static {v0, v1}, Ljava/util/Arrays;->copyOf([Ljava/lang/Object;I)[Ljava/lang/Object;
move-result-object v0
check-cast v0, [Lradiant/SylLayout;
:store_arr
sput-object v0, Lradiant/SylLayout;->cbs:[Lradiant/SylLayout;
:have_arr
aget-object v1, v0, p0
if-nez v1, :ret
new-instance v1, Lradiant/SylLayout;
invoke-direct {v1, p0}, Lradiant/SylLayout;-><init>(I)V
aput-object v1, v0, p0
:ret
return-object v1
.end method
.method public static get(I)Landroidx/compose/ui/text/TextLayoutResult;
.locals 2
if-ltz p0, :none
sget-object v0, Lradiant/SylLayout;->layouts:[Landroidx/compose/ui/text/TextLayoutResult;
if-eqz v0, :none
array-length v1, v0
if-ge p0, v1, :none
aget-object v0, v0, p0
return-object v0
:none
const/4 v0, 0x0
return-object v0
.end method
# Forget the layouts on track change
.method public static reset()V
.locals 1
const/4 v0, 0x0
sput-object v0, Lradiant/SylLayout;->layouts:[Landroidx/compose/ui/text/TextLayoutResult;
return-void
.end method
# Font size in pixels
.method public static em(Landroidx/compose/ui/text/TextLayoutResult;)F
.locals 8
invoke-virtual {p0}, Landroidx/compose/ui/text/TextLayoutResult;->getLayoutInput()Landroidx/compose/ui/text/TextLayoutInput;
move-result-object v0
invoke-virtual {v0}, Landroidx/compose/ui/text/TextLayoutInput;->getStyle()Landroidx/compose/ui/text/TextStyle;
move-result-object v1
invoke-virtual {v1}, Landroidx/compose/ui/text/TextStyle;->getFontSize-XSAIIZE()J
move-result-wide v1
# Only Sp converts to pixels
invoke-static {v1, v2}, Landroidx/compose/ui/unit/TextUnit;->getType-UIouoOA(J)J
move-result-wide v3
sget-object v5, Landroidx/compose/ui/unit/TextUnitType;->Companion:Landroidx/compose/ui/unit/TextUnitType$Companion;
invoke-virtual {v5}, Landroidx/compose/ui/unit/TextUnitType$Companion;->getSp-UIouoOA()J
move-result-wide v5
invoke-static {v3, v4, v5, v6}, Landroidx/compose/ui/unit/TextUnitType;->equals-impl0(JJ)Z
move-result v3
if-eqz v3, :fallback
invoke-virtual {v0}, Landroidx/compose/ui/text/TextLayoutInput;->getDensity()Landroidx/compose/ui/unit/Density;
move-result-object v0
invoke-interface {v0, v1, v2}, Landroidx/compose/ui/unit/Density;->toPx--R2X_6o(J)F
move-result v0
const/4 v1, 0x0
cmpg-float v1, v0, v1
if-lez v1, :fallback
return v0
:fallback
# No font size, guess from the line box
const/4 v0, 0x0
invoke-virtual {p0, v0}, Landroidx/compose/ui/text/TextLayoutResult;->getLineBottom(I)F
move-result v1
const/4 v0, 0x0
invoke-virtual {p0, v0}, Landroidx/compose/ui/text/TextLayoutResult;->getLineTop(I)F
move-result v2
sub-float/2addr v1, v2
const/4 v0, 0x0
cmpg-float v0, v1, v0
if-lez v0, :default_em
const v0, 0x3f4ccccd # 0.8f
mul-float/2addr v0, v1
return v0
:default_em
const/high16 v0, 0x42200000 # 40.0f
return v0
.end method
# virtual methods
.method public invoke(Ljava/lang/Object;)Ljava/lang/Object;
.locals 4
iget v0, p0, Lradiant/SylLayout;->idx:I
if-ltz v0, :ret
instance-of v1, p1, Landroidx/compose/ui/text/TextLayoutResult;
if-eqz v1, :ret
sget-object v1, Lradiant/SylLayout;->layouts:[Landroidx/compose/ui/text/TextLayoutResult;
if-eqz v1, :grow
array-length v2, v1
if-gt v2, v0, :store
:grow
add-int/lit8 v2, v0, 0x1
const/16 v3, 0x40
if-ge v2, v3, :cap_ok
const/16 v2, 0x40
:cap_ok
if-nez v1, :copy
new-array v1, v2, [Landroidx/compose/ui/text/TextLayoutResult;
goto :store
:copy
invoke-static {v1, v2}, Ljava/util/Arrays;->copyOf([Ljava/lang/Object;I)[Ljava/lang/Object;
move-result-object v1
check-cast v1, [Landroidx/compose/ui/text/TextLayoutResult;
:store
sput-object v1, Lradiant/SylLayout;->layouts:[Landroidx/compose/ui/text/TextLayoutResult;
check-cast p1, Landroidx/compose/ui/text/TextLayoutResult;
aput-object p1, v1, v0
:ret
sget-object v0, Lkotlin/u;->a:Lkotlin/u;
return-object v0
.end method
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
@@ -0,0 +1,53 @@
.class public final Lradiant/gestures/LyricsDrag$Guard;
.super Ljava/lang/Object;
# interfaces
.implements Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;
# Blocks leftover scroll from the sheet
# static state
.field public static final INSTANCE:Lradiant/gestures/LyricsDrag$Guard;
.method static constructor <clinit>()V
.locals 1
new-instance v0, Lradiant/gestures/LyricsDrag$Guard;
invoke-direct {v0}, Lradiant/gestures/LyricsDrag$Guard;-><init>()V
sput-object v0, Lradiant/gestures/LyricsDrag$Guard;->INSTANCE:Lradiant/gestures/LyricsDrag$Guard;
return-void
.end method
.method private constructor <init>()V
.locals 0
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
# virtual methods
# Consume what the list didn't use
.method public onPostScroll-DzOQY0M(JJI)J
.locals 0
return-wide p3
.end method
.method public onPostFling-RZ2iAVY(JJLkotlin/coroutines/e;)Ljava/lang/Object;
.locals 2
invoke-static {p3, p4}, Landroidx/compose/ui/unit/Velocity;->box-impl(J)Landroidx/compose/ui/unit/Velocity;
move-result-object v0
return-object v0
.end method
@@ -0,0 +1,28 @@
.class public final Lradiant/gestures/LyricsDrag;
.super Ljava/lang/Object;
# Stops lyrics scroll dismissing the player
.method private constructor <init>()V
.locals 0
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
# Stop leftover scroll reaching the sheet
.method public static wrap(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
.locals 2
sget-object v0, Lradiant/gestures/LyricsDrag$Guard;->INSTANCE:Lradiant/gestures/LyricsDrag$Guard;
const/4 v1, 0x0
invoke-static {p0, v0, v1}, Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierKt;->nestedScroll(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)Landroidx/compose/ui/Modifier;
move-result-object p0
return-object p0
.end method
@@ -1,10 +1,10 @@
.class public final Lradiant/MiniPlayerGestures$ApplyPending;
.class public final Lradiant/gestures/MiniPlayerGestures$ApplyPending;
.super Ljava/lang/Object;
.implements Ljava/lang/Runnable;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lradiant/MiniPlayerGestures;
value = Lradiant/gestures/MiniPlayerGestures;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
@@ -25,9 +25,9 @@
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
iput-object p1, p0, Lradiant/MiniPlayerGestures$ApplyPending;->a:Landroidx/compose/material3/SheetState;
iput-object p1, p0, Lradiant/gestures/MiniPlayerGestures$ApplyPending;->a:Landroidx/compose/material3/SheetState;
iput p2, p0, Lradiant/MiniPlayerGestures$ApplyPending;->b:I
iput p2, p0, Lradiant/gestures/MiniPlayerGestures$ApplyPending;->b:I
return-void
.end method
@@ -39,23 +39,23 @@
.method public final run()V
.locals 3
iget-object v0, p0, Lradiant/MiniPlayerGestures$ApplyPending;->a:Landroidx/compose/material3/SheetState;
iget-object v0, p0, Lradiant/gestures/MiniPlayerGestures$ApplyPending;->a:Landroidx/compose/material3/SheetState;
invoke-static {v0}, Lradiant/MiniPlayerGestures;->applyPendingDrag(Landroidx/compose/material3/SheetState;)V
invoke-static {v0}, Lradiant/gestures/MiniPlayerGestures;->applyPendingDrag(Landroidx/compose/material3/SheetState;)V
iget v1, p0, Lradiant/MiniPlayerGestures$ApplyPending;->b:I
iget v1, p0, Lradiant/gestures/MiniPlayerGestures$ApplyPending;->b:I
add-int/lit8 v1, v1, -0x1
if-lez v1, :done
invoke-static {v0}, Lradiant/MiniPlayerGestures;->needsApply(Landroidx/compose/material3/SheetState;)Z
invoke-static {v0}, Lradiant/gestures/MiniPlayerGestures;->needsApply(Landroidx/compose/material3/SheetState;)Z
move-result v2
if-eqz v2, :done
invoke-static {v0, v1}, Lradiant/MiniPlayerGestures;->scheduleApply(Landroidx/compose/material3/SheetState;I)V
invoke-static {v0, v1}, Lradiant/gestures/MiniPlayerGestures;->scheduleApply(Landroidx/compose/material3/SheetState;I)V
:done
return-void
@@ -1,11 +1,11 @@
.class public final Lradiant/MiniPlayerGestures$FeedbackLayer;
.class public final Lradiant/gestures/MiniPlayerGestures$FeedbackLayer;
.super Ljava/lang/Object;
.implements Lam0/l;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lradiant/MiniPlayerGestures;
value = Lradiant/gestures/MiniPlayerGestures;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
@@ -15,18 +15,18 @@
# static fields
.field public static final INSTANCE:Lradiant/MiniPlayerGestures$FeedbackLayer;
.field public static final INSTANCE:Lradiant/gestures/MiniPlayerGestures$FeedbackLayer;
# direct methods
.method static constructor <clinit>()V
.locals 1
new-instance v0, Lradiant/MiniPlayerGestures$FeedbackLayer;
new-instance v0, Lradiant/gestures/MiniPlayerGestures$FeedbackLayer;
invoke-direct {v0}, Lradiant/MiniPlayerGestures$FeedbackLayer;-><init>()V
invoke-direct {v0}, Lradiant/gestures/MiniPlayerGestures$FeedbackLayer;-><init>()V
sput-object v0, Lradiant/MiniPlayerGestures$FeedbackLayer;->INSTANCE:Lradiant/MiniPlayerGestures$FeedbackLayer;
sput-object v0, Lradiant/gestures/MiniPlayerGestures$FeedbackLayer;->INSTANCE:Lradiant/gestures/MiniPlayerGestures$FeedbackLayer;
return-void
.end method
@@ -44,7 +44,7 @@
.method public final invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)Lkotlin/u;
.locals 1
sget-object v0, Lradiant/MiniPlayerGestures;->v:Landroidx/compose/runtime/MutableFloatState;
sget-object v0, Lradiant/gestures/MiniPlayerGestures;->v:Landroidx/compose/runtime/MutableFloatState;
invoke-interface {v0}, Landroidx/compose/runtime/MutableFloatState;->getFloatValue()F
@@ -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/u;
invoke-virtual {p0, p1}, Lradiant/gestures/MiniPlayerGestures$FeedbackLayer;->invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)Lkotlin/u;
move-result-object p1
@@ -1,11 +1,11 @@
.class public final Lradiant/MiniPlayerGestures$FeedbackResetAnimator;
.class public final Lradiant/gestures/MiniPlayerGestures$FeedbackResetAnimator;
.super Ljava/lang/Object;
.implements Landroid/animation/ValueAnimator$AnimatorUpdateListener;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lradiant/MiniPlayerGestures;
value = Lradiant/gestures/MiniPlayerGestures;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
@@ -41,7 +41,7 @@
move-result v1
invoke-static {v1}, Lradiant/MiniPlayerGestures;->setSwipeFeedbackDirect(F)V
invoke-static {v1}, Lradiant/gestures/MiniPlayerGestures;->setSwipeFeedbackDirect(F)V
invoke-virtual {v0}, Landroid/animation/ValueAnimator;->getAnimatedFraction()F
@@ -53,7 +53,7 @@
if-gez v1, :done
invoke-static {v0}, Lradiant/MiniPlayerGestures;->clearSwipeFeedbackAnimator(Landroid/animation/ValueAnimator;)V
invoke-static {v0}, Lradiant/gestures/MiniPlayerGestures;->clearSwipeFeedbackAnimator(Landroid/animation/ValueAnimator;)V
:done
return-void
@@ -0,0 +1,521 @@
.class public final Lradiant/gestures/MiniPlayerGestures$Gesture;
.super Ljava/lang/Object;
.implements Lam0/l;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lradiant/gestures/MiniPlayerGestures;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x19
name = "Gesture"
.end annotation
# instance fields
.field public final a:Lam0/l;
# Y at ACTION_DOWN
.field public b:F
# Last Y seen (on this pointer stream)
.field public c:F
# True while this listener owns an active pointer stream
.field public d:Z
# True when sheet drag has started
.field public e:Z
.field public final f:Landroidx/compose/material3/SheetState;
.field public g:F
# X at ACTION_DOWN
.field public i:F
# True once horizontal movement wins (prevents later vertical start)
.field public j:Z
# Drag option enabled
.field public final k:Z
# direct methods
.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/gestures/MiniPlayerGestures$Gesture;->a:Lam0/l;
iput-object p2, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->f:Landroidx/compose/material3/SheetState;
iput-boolean p3, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->k:Z
return-void
.end method
.method private static dp(F)F
.locals 1
invoke-static {}, Landroid/content/res/Resources;->getSystem()Landroid/content/res/Resources;
move-result-object v0
invoke-virtual {v0}, Landroid/content/res/Resources;->getDisplayMetrics()Landroid/util/DisplayMetrics;
move-result-object v0
iget v0, v0, Landroid/util/DisplayMetrics;->density:F
mul-float/2addr p0, v0
return p0
.end method
.method private dragSheet(FJ)V
.locals 1
iget-object v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->f:Landroidx/compose/material3/SheetState;
invoke-static {v0, p1, p2, p3}, Lradiant/gestures/MiniPlayerGestures;->updateDragTimed(Landroidx/compose/material3/SheetState;FJ)V
return-void
.end method
.method private finishSheet(F)V
.locals 2
iget-object v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->f:Landroidx/compose/material3/SheetState;
iget-object v1, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->a:Lam0/l;
invoke-static {v0, v1, p1}, Lradiant/gestures/MiniPlayerGestures;->finishDrag(Landroidx/compose/material3/SheetState;Lam0/l;F)V
return-void
.end method
.method private openPlayer()V
.locals 2
iget-object v0, p0, Lradiant/gestures/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}, Lam0/l;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
return-void
.end method
.method private reset()V
.locals 1
const/4 v0, 0x0
iput-boolean v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->d:Z
iput-boolean v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->e:Z
iput-boolean v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->j:Z
const/4 v0, 0x0
iput v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->i:F
iput v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->g:F
return-void
.end method
.method private startSheet(FJ)V
.locals 2
# empty player guard
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->hasMiniPlayerMedia()Z
move-result v0
if-nez v0, :start_guard
return-void
:start_guard
# avoid starting twice
iget-boolean v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->e:Z
if-eqz v0, :start
return-void
:start
const/4 v0, 0x1
iput-boolean v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->e:Z
iget-boolean v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->k:Z
if-eqz v0, :done
iget-object v1, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->f:Landroidx/compose/material3/SheetState;
iget v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->b:F
invoke-static {v1, p1, v0, p2, p3}, Lradiant/gestures/MiniPlayerGestures;->beginDrag(Landroidx/compose/material3/SheetState;FFJ)V
invoke-direct {p0}, Lradiant/gestures/MiniPlayerGestures$Gesture;->openPlayer()V
:done
return-void
.end method
# virtual methods
# Listens for MotionEvents
.method public final invoke(Landroid/view/MotionEvent;)Lkotlin/u;
.locals 11
invoke-virtual {p1}, Landroid/view/MotionEvent;->getActionMasked()I
move-result v0
if-eqz v0, :down
const/4 v1, 0x1
if-eq v0, v1, :up
const/4 v1, 0x2
if-eq v0, v1, :move
const/4 v1, 0x3
if-eq v0, v1, :cancel
goto :done
# ACTION_DOWN
:down
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->resetGestureLock()V
invoke-static {p1}, Lradiant/gestures/MiniPlayerGestures;->beginMotion(Landroid/view/MotionEvent;)V
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
move-result v0
iput v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->b:F
iput v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->c:F
const/4 v0, 0x1
iput-boolean v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->d:Z
const/4 v0, 0x0
iput-boolean v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->e:Z
const/4 v0, 0x0
iput v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->g:F
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawX()F
move-result v0
iput v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->i:F
const/4 v0, 0x0
iput-boolean v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->j:Z
iget v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->b:F
invoke-static {v0}, Lradiant/gestures/MiniPlayerGestures;->beginSwipeGesture(F)V
:skip_feedback_down
goto :done
# ACTION_MOVE
:move
iget-boolean v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->d:Z
if-eqz v0, :done
invoke-static {p1}, Lradiant/gestures/MiniPlayerGestures;->trackMotion(Landroid/view/MotionEvent;)V
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
move-result v0
invoke-virtual {p1}, Landroid/view/MotionEvent;->getEventTime()J
move-result-wide v5
iget v1, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->c:F
sub-float v1, v0, v1
iput v1, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->g:F
iget v2, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->b:F
sub-float v2, v0, v2
iget-boolean v3, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->e:Z
if-eqz v3, :maybe_start
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->suppressHorizontalGestures()V
iget-boolean v3, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->k:Z
if-eqz v3, :feedback_active
invoke-direct {p0, v2, v5, v6}, Lradiant/gestures/MiniPlayerGestures$Gesture;->dragSheet(FJ)V
:feedback_active
invoke-static {v2}, Lradiant/gestures/MiniPlayerGestures;->setSwipeFeedbackFromDrag(F)V
goto :store_last
:maybe_start
iget-boolean v3, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->j:Z
if-eqz v3, :axis_check
goto :store_last
:axis_check
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawX()F
move-result v7
iget v8, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->i:F
sub-float/2addr v7, v8
invoke-static {v7}, Ljava/lang/Math;->abs(F)F
move-result v7
invoke-static {v2}, Ljava/lang/Math;->abs(F)F
move-result v8
const/high16 v9, 0x40c00000 # 6.0f axis deadzone
invoke-static {v9}, Lradiant/gestures/MiniPlayerGestures$Gesture;->dp(F)F
move-result v9
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->isHorizontalGestureLocked()Z
move-result v10
if-eqz v10, :horizontal_check
const/4 v10, 0x0
invoke-static {v10}, Lradiant/gestures/MiniPlayerGestures;->setSwipeFeedbackDirect(F)V
goto :store_last
:horizontal_check
cmpg-float v10, v7, v9
if-gez v10, :horizontal_dominance
goto :vertical_check
:horizontal_dominance
const v10, 0x3f8ccccd # 1.1f
mul-float/2addr v10, v8
cmpg-float v10, v7, v10
if-gez v10, :horizontal_wins
goto :vertical_check
:horizontal_wins
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->lockHorizontalGesture()Z
move-result v10
if-eqz v10, :store_last
const/4 v10, 0x1
iput-boolean v10, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->j:Z
const/4 v10, 0x0
invoke-static {v10}, Lradiant/gestures/MiniPlayerGestures;->setSwipeFeedbackDirect(F)V
goto :store_last
# At least 16dp up to open the player
:vertical_check
neg-float v9, v9
cmpg-float v10, v2, v9
if-lez v10, :vertical_dominance
invoke-static {v2}, Lradiant/gestures/MiniPlayerGestures;->setSwipeFeedbackFromDrag(F)V
goto :store_last
:vertical_dominance
const v10, 0x3f8ccccd # 1.1f -> early vertical axis lock
mul-float/2addr v7, v10
cmpl-float v10, v8, v7
if-gtz v10, :begin
goto :store_last
:begin
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->lockVerticalGesture()Z
move-result v10
if-eqz v10, :store_last
invoke-direct {p0, v2, v5, v6}, Lradiant/gestures/MiniPlayerGestures$Gesture;->startSheet(FJ)V
iget-boolean v10, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->e:Z
if-eqz v10, :store_last
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->suppressHorizontalGestures()V
iget-boolean v10, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->k:Z
if-eqz v10, :feedback_begin
invoke-direct {p0, v2, v5, v6}, Lradiant/gestures/MiniPlayerGestures$Gesture;->dragSheet(FJ)V
:feedback_begin
invoke-static {v2}, Lradiant/gestures/MiniPlayerGestures;->setSwipeFeedbackFromDrag(F)V
:store_last
iput v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->c:F
goto :done
# ACTION_UP
:up
iget-boolean v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->d:Z
if-eqz v0, :done
iget-boolean v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->e:Z
if-eqz v0, :up_no_drag
iget-boolean v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->k:Z
if-eqz v0, :open_simple
invoke-static {p1}, Lradiant/gestures/MiniPlayerGestures;->trackMotion(Landroid/view/MotionEvent;)V
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
move-result v0
invoke-virtual {p1}, Landroid/view/MotionEvent;->getEventTime()J
move-result-wide v5
iget-object v1, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->f:Landroidx/compose/material3/SheetState;
invoke-static {v1, v0, v5, v6}, Lradiant/gestures/MiniPlayerGestures;->updateDragToYTimed(Landroidx/compose/material3/SheetState;FJ)V
invoke-static {v1}, Lradiant/gestures/MiniPlayerGestures;->releaseVelocity(Landroidx/compose/material3/SheetState;)F
move-result v0
invoke-direct {p0, v0}, Lradiant/gestures/MiniPlayerGestures$Gesture;->finishSheet(F)V
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->animateSwipeFeedbackReset()V
goto :finish
:up_no_drag
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->animateSwipeFeedbackReset()V
goto :finish
:open_simple
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->suppressHorizontalGestures()V
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
move-result v0
iget-object v1, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->a:Lam0/l;
invoke-static {v1, v0}, Lradiant/gestures/MiniPlayerGestures;->completeSimpleSwipe(Lam0/l;F)Z
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->animateSwipeFeedbackReset()V
:finish
invoke-direct {p0}, Lradiant/gestures/MiniPlayerGestures$Gesture;->reset()V
goto :done
# ACTION_CANCEL
:cancel
iget-boolean v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->e:Z
if-eqz v0, :cancel_no_active
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->animateSwipeFeedbackReset()V
iget-object v0, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->f:Landroidx/compose/material3/SheetState;
iget-object v1, p0, Lradiant/gestures/MiniPlayerGestures$Gesture;->a:Lam0/l;
invoke-static {v0, v1}, Lradiant/gestures/MiniPlayerGestures;->cancelDrag(Landroidx/compose/material3/SheetState;Lam0/l;)V
goto :cancel_reset
:cancel_no_active
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->animateSwipeFeedbackReset()V
:cancel_reset
invoke-direct {p0}, Lradiant/gestures/MiniPlayerGestures$Gesture;->reset()V
:done
sget-object p1, Lkotlin/u;->a:Lkotlin/u;
return-object p1
.end method
.method public bridge synthetic invoke(Ljava/lang/Object;)Ljava/lang/Object;
.locals 0
check-cast p1, Landroid/view/MotionEvent;
invoke-virtual {p0, p1}, Lradiant/gestures/MiniPlayerGestures$Gesture;->invoke(Landroid/view/MotionEvent;)Lkotlin/u;
move-result-object p1
return-object p1
.end method
@@ -0,0 +1,178 @@
.class public final Lradiant/gestures/MiniPlayerGestures$RootGesture;
.super Ljava/lang/Object;
.implements Lam0/l;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lradiant/gestures/MiniPlayerGestures;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x19
name = "RootGesture"
.end annotation
# instance fields
.field public final a:Lam0/l;
.field public final b:Landroidx/compose/material3/SheetState;
# direct methods
.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/gestures/MiniPlayerGestures$RootGesture;->a:Lam0/l;
iput-object p2, p0, Lradiant/gestures/MiniPlayerGestures$RootGesture;->b:Landroidx/compose/material3/SheetState;
return-void
.end method
# virtual methods
.method public final invoke(Landroid/view/MotionEvent;)Lkotlin/u;
.locals 6
iget-object v0, p0, Lradiant/gestures/MiniPlayerGestures$RootGesture;->b:Landroidx/compose/material3/SheetState;
invoke-virtual {p1}, Landroid/view/MotionEvent;->getActionMasked()I
move-result v1
invoke-static {v0}, Lradiant/gestures/MiniPlayerGestures;->isDragging(Landroidx/compose/material3/SheetState;)Z
move-result v2
if-eqz v2, :maybe_reset_only
const/4 v2, 0x1
if-eq v1, v2, :up
const/4 v2, 0x2
if-eq v1, v2, :move
const/4 v2, 0x3
if-eq v1, v2, :cancel
goto :done
:maybe_reset_only
const/4 v2, 0x1
if-eq v1, v2, :simple_up
const/4 v2, 0x3
if-eq v1, v2, :reset_only
const/4 v2, 0x2
if-eq v1, v2, :simple_move
goto :done
:reset_only
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->resetGestureLock()V
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->animateSwipeFeedbackReset()V
goto :done
:simple_move
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
move-result v1
invoke-static {v1}, Lradiant/gestures/MiniPlayerGestures;->updateSimpleSwipe(F)Z
goto :done
:simple_up
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
move-result v1
iget-object v2, p0, Lradiant/gestures/MiniPlayerGestures$RootGesture;->a:Lam0/l;
invoke-static {v2, v1}, Lradiant/gestures/MiniPlayerGestures;->completeSimpleSwipe(Lam0/l;F)Z
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->animateSwipeFeedbackReset()V
goto :done
# ACTION_MOVE
:move
invoke-static {p1}, Lradiant/gestures/MiniPlayerGestures;->trackMotion(Landroid/view/MotionEvent;)V
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
move-result v2
invoke-virtual {p1}, Landroid/view/MotionEvent;->getEventTime()J
move-result-wide v4
invoke-static {v0, v2, v4, v5}, Lradiant/gestures/MiniPlayerGestures;->updateDragToYTimed(Landroidx/compose/material3/SheetState;FJ)V
goto :done
# ACTION_UP
:up
invoke-static {p1}, Lradiant/gestures/MiniPlayerGestures;->trackMotion(Landroid/view/MotionEvent;)V
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
move-result v1
invoke-virtual {p1}, Landroid/view/MotionEvent;->getEventTime()J
move-result-wide v4
invoke-static {v0, v1, v4, v5}, Lradiant/gestures/MiniPlayerGestures;->updateDragToYTimed(Landroidx/compose/material3/SheetState;FJ)V
invoke-static {v0}, Lradiant/gestures/MiniPlayerGestures;->releaseVelocity(Landroidx/compose/material3/SheetState;)F
move-result v1
iget-object v2, p0, Lradiant/gestures/MiniPlayerGestures$RootGesture;->a:Lam0/l;
invoke-static {v0, v2, v1}, Lradiant/gestures/MiniPlayerGestures;->finishDrag(Landroidx/compose/material3/SheetState;Lam0/l;F)V
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->animateSwipeFeedbackReset()V
goto :done
# ACTION_CANCEL
:cancel
iget-object v2, p0, Lradiant/gestures/MiniPlayerGestures$RootGesture;->a:Lam0/l;
invoke-static {v0, v2}, Lradiant/gestures/MiniPlayerGestures;->cancelDrag(Landroidx/compose/material3/SheetState;Lam0/l;)V
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->animateSwipeFeedbackReset()V
:done
sget-object p1, Lkotlin/u;->a:Lkotlin/u;
return-object p1
.end method
.method public bridge synthetic invoke(Ljava/lang/Object;)Ljava/lang/Object;
.locals 0
check-cast p1, Landroid/view/MotionEvent;
invoke-virtual {p0, p1}, Lradiant/gestures/MiniPlayerGestures$RootGesture;->invoke(Landroid/view/MotionEvent;)Lkotlin/u;
move-result-object p1
return-object p1
.end method
@@ -1,11 +1,11 @@
.class public final Lradiant/MiniPlayerTrackGestures$Gesture;
.class public final Lradiant/gestures/MiniPlayerTrackGestures$Gesture;
.super Ljava/lang/Object;
.implements Lam0/l;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lradiant/MiniPlayerTrackGestures;
value = Lradiant/gestures/MiniPlayerTrackGestures;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
@@ -24,7 +24,7 @@
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
iput-object p1, p0, Lradiant/MiniPlayerTrackGestures$Gesture;->a:Lam0/l;
iput-object p1, p0, Lradiant/gestures/MiniPlayerTrackGestures$Gesture;->a:Lam0/l;
return-void
.end method
@@ -32,7 +32,7 @@
.method private nextTrack()V
.locals 2
iget-object v0, p0, Lradiant/MiniPlayerTrackGestures$Gesture;->a:Lam0/l;
iget-object v0, p0, Lradiant/gestures/MiniPlayerTrackGestures$Gesture;->a:Lam0/l;
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
@@ -44,7 +44,7 @@
.method private previousTrack()V
.locals 2
iget-object v0, p0, Lradiant/MiniPlayerTrackGestures$Gesture;->a:Lam0/l;
iget-object v0, p0, Lradiant/gestures/MiniPlayerTrackGestures$Gesture;->a:Lam0/l;
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
@@ -86,7 +86,7 @@
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
move-result v1
invoke-static {v0, v1}, Lradiant/MiniPlayerTrackGestures;->beginDrag(FF)V
invoke-static {v0, v1}, Lradiant/gestures/MiniPlayerTrackGestures;->beginDrag(FF)V
goto :done
# ACTION_MOVE
@@ -97,7 +97,7 @@
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
move-result v1
invoke-static {v0, v1}, Lradiant/MiniPlayerTrackGestures;->moveDrag(FF)V
invoke-static {v0, v1}, Lradiant/gestures/MiniPlayerTrackGestures;->moveDrag(FF)V
goto :done
# ACTION_UP
@@ -108,7 +108,7 @@
invoke-virtual {p1}, Landroid/view/MotionEvent;->getRawY()F
move-result v1
invoke-static {v0, v1}, Lradiant/MiniPlayerTrackGestures;->finishDrag(FF)I
invoke-static {v0, v1}, Lradiant/gestures/MiniPlayerTrackGestures;->finishDrag(FF)I
move-result v0
@@ -117,19 +117,19 @@
# Negative result = swipe left -> next. Positive result = swipe right -> previous
if-gez v0, :previous
invoke-static {}, Lradiant/MiniPlayerTrackGestures;->suppressTapOpen()V
invoke-direct {p0}, Lradiant/MiniPlayerTrackGestures$Gesture;->nextTrack()V
invoke-static {}, Lradiant/gestures/MiniPlayerTrackGestures;->suppressTapOpen()V
invoke-direct {p0}, Lradiant/gestures/MiniPlayerTrackGestures$Gesture;->nextTrack()V
goto :done
:previous
invoke-static {}, Lradiant/MiniPlayerTrackGestures;->suppressTapOpen()V
invoke-direct {p0}, Lradiant/MiniPlayerTrackGestures$Gesture;->previousTrack()V
invoke-static {}, Lradiant/gestures/MiniPlayerTrackGestures;->suppressTapOpen()V
invoke-direct {p0}, Lradiant/gestures/MiniPlayerTrackGestures$Gesture;->previousTrack()V
goto :done
# ACTION_CANCEL
:cancel
invoke-static {}, Lradiant/MiniPlayerTrackGestures;->cancelDrag()V
invoke-static {}, Lradiant/gestures/MiniPlayerTrackGestures;->cancelDrag()V
:done
sget-object p1, Lkotlin/u;->a:Lkotlin/u;
@@ -142,7 +142,7 @@
check-cast p1, Landroid/view/MotionEvent;
invoke-virtual {p0, p1}, Lradiant/MiniPlayerTrackGestures$Gesture;->invoke(Landroid/view/MotionEvent;)Lkotlin/u;
invoke-virtual {p0, p1}, Lradiant/gestures/MiniPlayerTrackGestures$Gesture;->invoke(Landroid/view/MotionEvent;)Lkotlin/u;
move-result-object p1
@@ -1,11 +1,11 @@
.class public final Lradiant/MiniPlayerTrackGestures$OffsetLayer;
.class public final Lradiant/gestures/MiniPlayerTrackGestures$OffsetLayer;
.super Ljava/lang/Object;
.implements Lam0/l;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lradiant/MiniPlayerTrackGestures;
value = Lradiant/gestures/MiniPlayerTrackGestures;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
@@ -15,18 +15,18 @@
# static fields
.field public static final INSTANCE:Lradiant/MiniPlayerTrackGestures$OffsetLayer;
.field public static final INSTANCE:Lradiant/gestures/MiniPlayerTrackGestures$OffsetLayer;
# direct methods
.method static constructor <clinit>()V
.locals 1
new-instance v0, Lradiant/MiniPlayerTrackGestures$OffsetLayer;
new-instance v0, Lradiant/gestures/MiniPlayerTrackGestures$OffsetLayer;
invoke-direct {v0}, Lradiant/MiniPlayerTrackGestures$OffsetLayer;-><init>()V
invoke-direct {v0}, Lradiant/gestures/MiniPlayerTrackGestures$OffsetLayer;-><init>()V
sput-object v0, Lradiant/MiniPlayerTrackGestures$OffsetLayer;->INSTANCE:Lradiant/MiniPlayerTrackGestures$OffsetLayer;
sput-object v0, Lradiant/gestures/MiniPlayerTrackGestures$OffsetLayer;->INSTANCE:Lradiant/gestures/MiniPlayerTrackGestures$OffsetLayer;
return-void
.end method
@@ -44,7 +44,7 @@
.method public final invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)Lkotlin/u;
.locals 1
sget-object v0, Lradiant/MiniPlayerTrackGestures;->b:Landroidx/compose/runtime/MutableFloatState;
sget-object v0, Lradiant/gestures/MiniPlayerTrackGestures;->b:Landroidx/compose/runtime/MutableFloatState;
invoke-interface {v0}, Landroidx/compose/runtime/MutableFloatState;->getFloatValue()F
@@ -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/u;
invoke-virtual {p0, p1}, Lradiant/gestures/MiniPlayerTrackGestures$OffsetLayer;->invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)Lkotlin/u;
move-result-object p1
@@ -1,11 +1,11 @@
.class public final Lradiant/MiniPlayerTrackGestures$ResetAnimator;
.class public final Lradiant/gestures/MiniPlayerTrackGestures$ResetAnimator;
.super Ljava/lang/Object;
.implements Landroid/animation/ValueAnimator$AnimatorUpdateListener;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lradiant/MiniPlayerTrackGestures;
value = Lradiant/gestures/MiniPlayerTrackGestures;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
@@ -40,7 +40,7 @@
move-result v1
invoke-static {v1}, Lradiant/MiniPlayerTrackGestures;->setDragOffsetDirect(F)V
invoke-static {v1}, Lradiant/gestures/MiniPlayerTrackGestures;->setDragOffsetDirect(F)V
invoke-virtual {v0}, Landroid/animation/ValueAnimator;->getAnimatedFraction()F
@@ -52,7 +52,7 @@
if-gez v1, :done
invoke-static {v0}, Lradiant/MiniPlayerTrackGestures;->clearResetAnimator(Landroid/animation/ValueAnimator;)V
invoke-static {v0}, Lradiant/gestures/MiniPlayerTrackGestures;->clearResetAnimator(Landroid/animation/ValueAnimator;)V
:done
@@ -1,11 +1,11 @@
.class public final Lradiant/MiniPlayerTrackGestures$TextDraw;
.class public final Lradiant/gestures/MiniPlayerTrackGestures$TextDraw;
.super Ljava/lang/Object;
.implements Lam0/l;
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lradiant/MiniPlayerTrackGestures;
value = Lradiant/gestures/MiniPlayerTrackGestures;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
@@ -15,18 +15,18 @@
# static fields
.field public static final INSTANCE:Lradiant/MiniPlayerTrackGestures$TextDraw;
.field public static final INSTANCE:Lradiant/gestures/MiniPlayerTrackGestures$TextDraw;
# direct methods
.method static constructor <clinit>()V
.locals 1
new-instance v0, Lradiant/MiniPlayerTrackGestures$TextDraw;
new-instance v0, Lradiant/gestures/MiniPlayerTrackGestures$TextDraw;
invoke-direct {v0}, Lradiant/MiniPlayerTrackGestures$TextDraw;-><init>()V
invoke-direct {v0}, Lradiant/gestures/MiniPlayerTrackGestures$TextDraw;-><init>()V
sput-object v0, Lradiant/MiniPlayerTrackGestures$TextDraw;->INSTANCE:Lradiant/MiniPlayerTrackGestures$TextDraw;
sput-object v0, Lradiant/gestures/MiniPlayerTrackGestures$TextDraw;->INSTANCE:Lradiant/gestures/MiniPlayerTrackGestures$TextDraw;
return-void
.end method
@@ -44,7 +44,7 @@
.method public final invoke(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)Lkotlin/u;
.locals 12
sget-object v0, Lradiant/MiniPlayerTrackGestures;->b:Landroidx/compose/runtime/MutableFloatState;
sget-object v0, Lradiant/gestures/MiniPlayerTrackGestures;->b:Landroidx/compose/runtime/MutableFloatState;
invoke-interface {v0}, Landroidx/compose/runtime/MutableFloatState;->getFloatValue()F
@@ -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/u;
invoke-virtual {p0, p1}, Lradiant/gestures/MiniPlayerTrackGestures$TextDraw;->invoke(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)Lkotlin/u;
move-result-object p1
@@ -1,4 +1,4 @@
.class public final Lradiant/MiniPlayerTrackGestures;
.class public final Lradiant/gestures/MiniPlayerTrackGestures;
.super Ljava/lang/Object;
@@ -32,7 +32,7 @@
move-result-object v0
sput-object v0, Lradiant/MiniPlayerTrackGestures;->b:Landroidx/compose/runtime/MutableFloatState;
sput-object v0, Lradiant/gestures/MiniPlayerTrackGestures;->b:Landroidx/compose/runtime/MutableFloatState;
return-void
.end method
@@ -48,7 +48,7 @@
.method public static animateReset()V
.locals 7
sget-object v0, Lradiant/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
sget-object v0, Lradiant/gestures/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
if-eqz v0, :read_offset
@@ -56,10 +56,10 @@
const/4 v0, 0x0
sput-object v0, Lradiant/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
sput-object v0, Lradiant/gestures/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
:read_offset
sget-object v0, Lradiant/MiniPlayerTrackGestures;->b:Landroidx/compose/runtime/MutableFloatState;
sget-object v0, Lradiant/gestures/MiniPlayerTrackGestures;->b:Landroidx/compose/runtime/MutableFloatState;
invoke-interface {v0}, Landroidx/compose/runtime/MutableFloatState;->getFloatValue()F
@@ -105,20 +105,20 @@
invoke-virtual {v1, v0}, Landroid/animation/ValueAnimator;->setInterpolator(Landroid/animation/TimeInterpolator;)V
new-instance v0, Lradiant/MiniPlayerTrackGestures$ResetAnimator;
new-instance v0, Lradiant/gestures/MiniPlayerTrackGestures$ResetAnimator;
invoke-direct {v0}, Lradiant/MiniPlayerTrackGestures$ResetAnimator;-><init>()V
invoke-direct {v0}, Lradiant/gestures/MiniPlayerTrackGestures$ResetAnimator;-><init>()V
invoke-virtual {v1, v0}, Landroid/animation/ValueAnimator;->addUpdateListener(Landroid/animation/ValueAnimator$AnimatorUpdateListener;)V
sput-object v1, Lradiant/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
sput-object v1, Lradiant/gestures/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
invoke-virtual {v1}, Landroid/animation/ValueAnimator;->start()V
return-void
:snap_zero
invoke-static {v3}, Lradiant/MiniPlayerTrackGestures;->setDragOffsetDirect(F)V
invoke-static {v3}, Lradiant/gestures/MiniPlayerTrackGestures;->setDragOffsetDirect(F)V
return-void
.end method
@@ -126,21 +126,21 @@
.method public static beginDrag(FF)V
.locals 2
invoke-static {}, Lradiant/MiniPlayerGestures;->resetGestureLock()V
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->resetGestureLock()V
sput p0, Lradiant/MiniPlayerTrackGestures;->e:F
sput p0, Lradiant/gestures/MiniPlayerTrackGestures;->e:F
sput p1, Lradiant/MiniPlayerTrackGestures;->f:F
sput p1, Lradiant/gestures/MiniPlayerTrackGestures;->f:F
const/4 v0, 0x1
sput-boolean v0, Lradiant/MiniPlayerTrackGestures;->g:Z
sput-boolean v0, Lradiant/gestures/MiniPlayerTrackGestures;->g:Z
const/4 v0, 0x0
sput-boolean v0, Lradiant/MiniPlayerTrackGestures;->h:Z
sput-boolean v0, Lradiant/gestures/MiniPlayerTrackGestures;->h:Z
sget-object v0, Lradiant/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
sget-object v0, Lradiant/gestures/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
if-eqz v0, :zero
@@ -148,12 +148,12 @@
const/4 v0, 0x0
sput-object v0, Lradiant/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
sput-object v0, Lradiant/gestures/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
:zero
const/4 v0, 0x0
invoke-static {v0}, Lradiant/MiniPlayerTrackGestures;->setDragOffsetDirect(F)V
invoke-static {v0}, Lradiant/gestures/MiniPlayerTrackGestures;->setDragOffsetDirect(F)V
return-void
.end method
@@ -163,11 +163,11 @@
const/4 v0, 0x0
sput-boolean v0, Lradiant/MiniPlayerTrackGestures;->g:Z
sput-boolean v0, Lradiant/gestures/MiniPlayerTrackGestures;->g:Z
sput-boolean v0, Lradiant/MiniPlayerTrackGestures;->h:Z
sput-boolean v0, Lradiant/gestures/MiniPlayerTrackGestures;->h:Z
invoke-static {}, Lradiant/MiniPlayerTrackGestures;->animateReset()V
invoke-static {}, Lradiant/gestures/MiniPlayerTrackGestures;->animateReset()V
return-void
.end method
@@ -175,13 +175,13 @@
.method public static clearResetAnimator(Landroid/animation/ValueAnimator;)V
.locals 1
sget-object v0, Lradiant/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
sget-object v0, Lradiant/gestures/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
if-ne v0, p0, :done
const/4 v0, 0x0
sput-object v0, Lradiant/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
sput-object v0, Lradiant/gestures/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
:done
return-void
@@ -190,7 +190,7 @@
.method public static finishDrag(FF)I
.locals 5
invoke-static {}, Lradiant/MiniPlayerGestures;->isAnyDragging()Z
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->isAnyDragging()Z
move-result v0
@@ -198,17 +198,17 @@
const/4 v0, 0x0
sput-boolean v0, Lradiant/MiniPlayerTrackGestures;->g:Z
sput-boolean v0, Lradiant/gestures/MiniPlayerTrackGestures;->g:Z
sput-boolean v0, Lradiant/MiniPlayerTrackGestures;->h:Z
sput-boolean v0, Lradiant/gestures/MiniPlayerTrackGestures;->h:Z
invoke-static {}, Lradiant/MiniPlayerTrackGestures;->animateReset()V
invoke-static {}, Lradiant/gestures/MiniPlayerTrackGestures;->animateReset()V
return v0
:check_active
sget-boolean v0, Lradiant/MiniPlayerTrackGestures;->g:Z
sget-boolean v0, Lradiant/gestures/MiniPlayerTrackGestures;->g:Z
if-nez v0, :active
@@ -219,26 +219,26 @@
:active
const/4 v0, 0x0
sput-boolean v0, Lradiant/MiniPlayerTrackGestures;->g:Z
sput-boolean v0, Lradiant/gestures/MiniPlayerTrackGestures;->g:Z
sget-boolean v1, Lradiant/MiniPlayerTrackGestures;->h:Z
sget-boolean v1, Lradiant/gestures/MiniPlayerTrackGestures;->h:Z
sput-boolean v0, Lradiant/MiniPlayerTrackGestures;->h:Z
sput-boolean v0, Lradiant/gestures/MiniPlayerTrackGestures;->h:Z
sget v2, Lradiant/MiniPlayerTrackGestures;->e:F
sget v2, Lradiant/gestures/MiniPlayerTrackGestures;->e:F
sub-float/2addr p0, v2
sget v2, Lradiant/MiniPlayerTrackGestures;->f:F
sget v2, Lradiant/gestures/MiniPlayerTrackGestures;->f:F
sub-float/2addr p1, v2
if-eqz v1, :reset
invoke-static {}, Lradiant/MiniPlayerTrackGestures;->suppressTapOpen()V
invoke-static {}, Lradiant/gestures/MiniPlayerTrackGestures;->suppressTapOpen()V
:reset
invoke-static {}, Lradiant/MiniPlayerTrackGestures;->animateReset()V
invoke-static {}, Lradiant/gestures/MiniPlayerTrackGestures;->animateReset()V
invoke-static {p0}, Ljava/lang/Math;->abs(F)F
@@ -246,7 +246,7 @@
const/high16 v2, 0x42400000 # 48.0f -> at least 48dp horizontal swipe
invoke-static {v2}, Lradiant/MiniPlayerTrackGestures;->dp(F)F
invoke-static {v2}, Lradiant/gestures/MiniPlayerTrackGestures;->dp(F)F
move-result v2
@@ -291,11 +291,11 @@
.method public static moveDrag(FF)V
.locals 6
sget-boolean v0, Lradiant/MiniPlayerTrackGestures;->g:Z
sget-boolean v0, Lradiant/gestures/MiniPlayerTrackGestures;->g:Z
if-eqz v0, :done
invoke-static {}, Lradiant/MiniPlayerGestures;->isAnyDragging()Z
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->isAnyDragging()Z
move-result v0
@@ -303,20 +303,20 @@
const/4 v0, 0x0
sput-boolean v0, Lradiant/MiniPlayerTrackGestures;->g:Z
sput-boolean v0, Lradiant/gestures/MiniPlayerTrackGestures;->g:Z
sput-boolean v0, Lradiant/MiniPlayerTrackGestures;->h:Z
sput-boolean v0, Lradiant/gestures/MiniPlayerTrackGestures;->h:Z
invoke-static {}, Lradiant/MiniPlayerTrackGestures;->animateReset()V
invoke-static {}, Lradiant/gestures/MiniPlayerTrackGestures;->animateReset()V
goto :done
:move_continue
sget v0, Lradiant/MiniPlayerTrackGestures;->e:F
sget v0, Lradiant/gestures/MiniPlayerTrackGestures;->e:F
sub-float/2addr p0, v0
sget v0, Lradiant/MiniPlayerTrackGestures;->f:F
sget v0, Lradiant/gestures/MiniPlayerTrackGestures;->f:F
sub-float/2addr p1, v0
@@ -328,13 +328,13 @@
move-result v1
sget-boolean v2, Lradiant/MiniPlayerTrackGestures;->h:Z
sget-boolean v2, Lradiant/gestures/MiniPlayerTrackGestures;->h:Z
if-nez v2, :publish
const/high16 v2, 0x40c00000 # 6.0f dp dead zone
invoke-static {v2}, Lradiant/MiniPlayerTrackGestures;->dp(F)F
invoke-static {v2}, Lradiant/gestures/MiniPlayerTrackGestures;->dp(F)F
move-result v2
@@ -356,7 +356,7 @@
goto :done
:accept
invoke-static {}, Lradiant/MiniPlayerGestures;->lockHorizontalGesture()Z
invoke-static {}, Lradiant/gestures/MiniPlayerGestures;->lockHorizontalGesture()Z
move-result v2
@@ -364,16 +364,16 @@
const/4 v2, 0x1
sput-boolean v2, Lradiant/MiniPlayerTrackGestures;->h:Z
sput-boolean v2, Lradiant/gestures/MiniPlayerTrackGestures;->h:Z
:publish
const/4 v2, 0x0
invoke-static {v2}, Lradiant/MiniPlayerGestures;->setSwipeFeedbackDirect(F)V
invoke-static {v2}, Lradiant/gestures/MiniPlayerGestures;->setSwipeFeedbackDirect(F)V
invoke-static {}, Lradiant/MiniPlayerTrackGestures;->suppressTapOpen()V
invoke-static {}, Lradiant/gestures/MiniPlayerTrackGestures;->suppressTapOpen()V
invoke-static {p0}, Lradiant/MiniPlayerTrackGestures;->setDragOffset(F)V
invoke-static {p0}, Lradiant/gestures/MiniPlayerTrackGestures;->setDragOffset(F)V
:done
return-void
@@ -381,11 +381,11 @@
:cancel_locked
const/4 v0, 0x0
sput-boolean v0, Lradiant/MiniPlayerTrackGestures;->g:Z
sput-boolean v0, Lradiant/gestures/MiniPlayerTrackGestures;->g:Z
sput-boolean v0, Lradiant/MiniPlayerTrackGestures;->h:Z
sput-boolean v0, Lradiant/gestures/MiniPlayerTrackGestures;->h:Z
invoke-static {}, Lradiant/MiniPlayerTrackGestures;->animateReset()V
invoke-static {}, Lradiant/gestures/MiniPlayerTrackGestures;->animateReset()V
goto :done
.end method
@@ -417,7 +417,7 @@
move-result-object p0
sget-object v0, Lradiant/MiniPlayerTrackGestures$OffsetLayer;->INSTANCE:Lradiant/MiniPlayerTrackGestures$OffsetLayer;
sget-object v0, Lradiant/gestures/MiniPlayerTrackGestures$OffsetLayer;->INSTANCE:Lradiant/gestures/MiniPlayerTrackGestures$OffsetLayer;
invoke-static {p0, v0}, Landroidx/compose/ui/graphics/GraphicsLayerModifierKt;->graphicsLayer(Landroidx/compose/ui/Modifier;Lam0/l;)Landroidx/compose/ui/Modifier;
@@ -429,7 +429,7 @@
.method public static textFeedbackModifier(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
.locals 1
sget-object v0, Lradiant/MiniPlayerTrackGestures$TextDraw;->INSTANCE:Lradiant/MiniPlayerTrackGestures$TextDraw; # text clip on right only
sget-object v0, Lradiant/gestures/MiniPlayerTrackGestures$TextDraw;->INSTANCE:Lradiant/gestures/MiniPlayerTrackGestures$TextDraw; # text clip on right only
invoke-static {p0, v0}, Landroidx/compose/ui/draw/DrawModifierKt;->drawWithContent(Landroidx/compose/ui/Modifier;Lam0/l;)Landroidx/compose/ui/Modifier;
@@ -441,7 +441,7 @@
.method public static onRenderedItem(Ljava/lang/Object;)V
.locals 2
sget-object v0, Lradiant/MiniPlayerTrackGestures;->d:Ljava/lang/Object;
sget-object v0, Lradiant/gestures/MiniPlayerTrackGestures;->d:Ljava/lang/Object;
if-eqz v0, :store_initial
@@ -451,14 +451,14 @@
if-nez v1, :done
sput-object p0, Lradiant/MiniPlayerTrackGestures;->d:Ljava/lang/Object;
sput-object p0, Lradiant/gestures/MiniPlayerTrackGestures;->d:Ljava/lang/Object;
invoke-static {}, Lradiant/MiniPlayerTrackGestures;->animateReset()V
invoke-static {}, Lradiant/gestures/MiniPlayerTrackGestures;->animateReset()V
return-void
:store_initial
sput-object p0, Lradiant/MiniPlayerTrackGestures;->d:Ljava/lang/Object;
sput-object p0, Lradiant/gestures/MiniPlayerTrackGestures;->d:Ljava/lang/Object;
:done
return-void
@@ -467,7 +467,7 @@
.method public static consumeTapOpenSuppression()Z
.locals 5
sget-wide v0, Lradiant/MiniPlayerTrackGestures;->a:J
sget-wide v0, Lradiant/gestures/MiniPlayerTrackGestures;->a:J
const-wide/16 v2, 0x0
@@ -480,7 +480,7 @@
return v0
:check_time
sput-wide v2, Lradiant/MiniPlayerTrackGestures;->a:J
sput-wide v2, Lradiant/gestures/MiniPlayerTrackGestures;->a:J
invoke-static {}, Landroid/os/SystemClock;->uptimeMillis()J
@@ -511,7 +511,7 @@
add-long/2addr v0, v2
sput-wide v0, Lradiant/MiniPlayerTrackGestures;->a:J
sput-wide v0, Lradiant/gestures/MiniPlayerTrackGestures;->a:J
return-void
.end method
@@ -519,7 +519,7 @@
.method public static setDragOffset(F)V
.locals 5
sget-object v0, Lradiant/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
sget-object v0, Lradiant/gestures/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
if-eqz v0, :rubber_band
@@ -527,7 +527,7 @@
const/4 v0, 0x0
sput-object v0, Lradiant/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
sput-object v0, Lradiant/gestures/MiniPlayerTrackGestures;->c:Landroid/animation/ValueAnimator;
:rubber_band
invoke-static {p0}, Ljava/lang/Math;->abs(F)F
@@ -536,7 +536,7 @@
const/high16 v1, 0x42800000 # 64.0f dp free travel
invoke-static {v1}, Lradiant/MiniPlayerTrackGestures;->dp(F)F
invoke-static {v1}, Lradiant/gestures/MiniPlayerTrackGestures;->dp(F)F
move-result v1
@@ -575,7 +575,7 @@
:publish
invoke-static {p0}, Lradiant/MiniPlayerTrackGestures;->setDragOffsetDirect(F)V
invoke-static {p0}, Lradiant/gestures/MiniPlayerTrackGestures;->setDragOffsetDirect(F)V
return-void
.end method
@@ -583,7 +583,7 @@
.method public static setDragOffsetDirect(F)V
.locals 1
sget-object v0, Lradiant/MiniPlayerTrackGestures;->b:Landroidx/compose/runtime/MutableFloatState;
sget-object v0, Lradiant/gestures/MiniPlayerTrackGestures;->b:Landroidx/compose/runtime/MutableFloatState;
invoke-interface {v0, p0}, Landroidx/compose/runtime/MutableFloatState;->setFloatValue(F)V
@@ -593,9 +593,9 @@
.method public static trackModifier(Landroidx/compose/ui/Modifier;Lam0/l;)Landroidx/compose/ui/Modifier;
.locals 1
new-instance v0, Lradiant/MiniPlayerTrackGestures$Gesture;
new-instance v0, Lradiant/gestures/MiniPlayerTrackGestures$Gesture;
invoke-direct {v0, p1}, Lradiant/MiniPlayerTrackGestures$Gesture;-><init>(Lam0/l;)V
invoke-direct {v0, p1}, Lradiant/gestures/MiniPlayerTrackGestures$Gesture;-><init>(Lam0/l;)V
invoke-static {p0, v0}, Landroidx/compose/ui/input/pointer/PointerInteropFilter_androidKt;->motionEventSpy(Landroidx/compose/ui/Modifier;Lam0/l;)Landroidx/compose/ui/Modifier;
@@ -0,0 +1,13 @@
--- a/com/tidal/android/feature/playerscreen/ui/composables/LyricsKt.smali
+++ b/com/tidal/android/feature/playerscreen/ui/composables/LyricsKt.smali
@@ -6107,6 +6107,10 @@
move-object v15, v10
+ invoke-static {v15}, Lradiant/gestures/LyricsDrag;->wrap(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; # lyrics own their scroll
+
+ move-result-object v15
+
.line 61
invoke-static/range {v15 .. v27}, Landroidx/compose/foundation/lazy/LazyDslKt;->LazyColumn(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/layout/PaddingValues;ZLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/foundation/gestures/FlingBehavior;ZLandroidx/compose/foundation/OverscrollEffect;Lam0/l;Landroidx/compose/runtime/Composer;II)V
@@ -4,7 +4,7 @@
move-result-object v6
+ invoke-static {v6, v1}, Lradiant/MiniPlayerTrackGestures;->trackModifier(Landroidx/compose/ui/Modifier;Lam0/l;)Landroidx/compose/ui/Modifier; # attach horizontal swipe listener
+ invoke-static {v6, v1}, Lradiant/gestures/MiniPlayerTrackGestures;->trackModifier(Landroidx/compose/ui/Modifier;Lam0/l;)Landroidx/compose/ui/Modifier; # attach horizontal swipe listener
+
+ move-result-object v6
+
@@ -15,7 +15,7 @@
.line 56
iget-object v11, v0, Lcom/tidal/android/feature/appscaffold/ui/t;->b:Lcom/tidal/android/feature/appscaffold/ui/q;
+ invoke-static {v11}, Lradiant/MiniPlayerTrackGestures;->onRenderedItem(Ljava/lang/Object;)V # reset stale drag offset if track metadata changes mid-gesture
+ invoke-static {v11}, Lradiant/gestures/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;
@@ -24,7 +24,7 @@
move-result-object v6
+ invoke-static {v6}, Lradiant/MiniPlayerTrackGestures;->feedbackModifier(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; # move the whole cover container with horizontal swipe
+ invoke-static {v6}, Lradiant/gestures/MiniPlayerTrackGestures;->feedbackModifier(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; # move the whole cover container with horizontal swipe
+
+ move-result-object v6
+
@@ -35,7 +35,7 @@
move-result-object v5
+ invoke-static {v5}, Lradiant/MiniPlayerTrackGestures;->textFeedbackModifier(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; # move title/artist
+ invoke-static {v5}, Lradiant/gestures/MiniPlayerTrackGestures;->textFeedbackModifier(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; # move title/artist
+
+ move-result-object v5
+
@@ -107,7 +107,7 @@
.method public final invoke()Ljava/lang/Object;
.locals 2
+ invoke-static {}, Lradiant/MiniPlayerTrackGestures;->consumeTapOpenSuppression()Z # skip open-player if a horizontal skip-swipe just happened
+ invoke-static {}, Lradiant/gestures/MiniPlayerTrackGestures;->consumeTapOpenSuppression()Z # skip open-player if a horizontal skip-swipe just happened
+
+ move-result v0
+
@@ -0,0 +1,76 @@
# rl-locals: com/tidal/android/feature/appscaffold/ui/composable/i.smali b( 52
--- a/com/tidal/android/feature/appscaffold/ui/composable/i.smali
+++ b/com/tidal/android/feature/appscaffold/ui/composable/i.smali
@@ -1691,6 +1691,14 @@
move-result-object v24
+ move-object/from16 v49, p5 # gesture expand lambda (AppScaffold Function1 param)
+
+ move-object/from16 v50, v24 # SheetState
+
+ const/16 v51, __RL_MINI_PLAYER_SWIPE_UP_DRAG__ # Enable Drag option
+
+ invoke-static/range {v49 .. v51}, Lradiant/gestures/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;
--- a/com/tidal/android/feature/appscaffold/ui/composable/MiniPlayerKt.smali
+++ b/com/tidal/android/feature/appscaffold/ui/composable/MiniPlayerKt.smali
@@ -712,6 +712,22 @@
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/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
+
+ if-ne v5, v6, :rl_has_media # prevent swipe up when nothing playing
+
+ const/4 v5, 0x0
+
+ goto :rl_set_media
+
+ :rl_has_media
+ const/4 v5, 0x1
+
+ :rl_set_media
+ invoke-static {v5}, Lradiant/gestures/MiniPlayerGestures;->setHasMiniPlayerMedia(Z)V
+
invoke-virtual {v1}, Ljava/lang/Object;->getClass()Ljava/lang/Class;
const v4, -0x571456a1
@@ -1215,6 +1231,10 @@
move-result-object v6
+ invoke-static {v6}, Lradiant/gestures/MiniPlayerGestures;->trackAreaModifier(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; # attach swipe up listener
+
+ move-result-object v6
+
.line 38
sget-object v21, Landroidx/compose/ui/Alignment;->Companion:Landroidx/compose/ui/Alignment$Companion;
@@ -1390,6 +1410,10 @@
move-result-object v6
+ invoke-static {v6}, Lradiant/gestures/MiniPlayerGestures;->feedbackModifier(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; # move cover (swipe up feedback)
+
+ move-result-object v6
+
.line 63
invoke-virtual/range {v22 .. v22}, Lcom/squareup/ui/market/core/theme/MarketStylesheet$c;->p0()Lf20/a;
@@ -1501,6 +1525,10 @@
move-result-object v5
+ invoke-static {v5}, Lradiant/gestures/MiniPlayerGestures;->feedbackModifier(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; # move title/artist (swipe up feedback)
+
+ move-result-object v5
+
.line 72
invoke-virtual/range {v32 .. v32}, Landroidx/compose/foundation/layout/Arrangement;->getTop()Landroidx/compose/foundation/layout/Arrangement$Vertical;
@@ -0,0 +1,55 @@
--- a/androidx/compose/material3/ModalBottomSheetKt$ModalBottomSheet$4$1.smali
+++ b/androidx/compose/material3/ModalBottomSheetKt$ModalBottomSheet$4$1.smali
@@ -212,6 +212,12 @@
.line 24
iget-object p1, p0, Landroidx/compose/material3/ModalBottomSheetKt$ModalBottomSheet$4$1;->$sheetState:Landroidx/compose/material3/SheetState;
+ invoke-static {p1}, Lradiant/gestures/MiniPlayerGestures;->suppressAutoShow(Landroidx/compose/material3/SheetState;)Z # avoid Material3 show() taking over manual drag
+
+ move-result v1
+
+ if-nez v1, :skip_show
+
.line 25
.line 26
iput v2, p0, Landroidx/compose/material3/ModalBottomSheetKt$ModalBottomSheet$4$1;->label:I
@@ -232,6 +238,7 @@
.line 34
return-object v0
+ :skip_show
.line 35
:cond_2
:goto_0
--- a/androidx/compose/material3/ModalBottomSheetKt.smali
+++ b/androidx/compose/material3/ModalBottomSheetKt.smali
@@ -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, Lam0/l; # to Function1
+
+ invoke-static {v13, v14}, Lradiant/gestures/MiniPlayerGestures;->setSettleCallback(Landroidx/compose/material3/SheetState;Lam0/l;)V # reuse native settle animation on release
+
move-object/from16 v32, v12
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 @@
const/4 v2, 0x0
.line 16
- const/16 v3, 0x12c
+ const/16 v3, 0x64 # 100ms
.line 17
.line 18
+17 -17
View File
@@ -17,23 +17,7 @@
+
+ sget-object v18, Landroidx/compose/ui/Modifier;->Companion:Landroidx/compose/ui/Modifier$Companion; # base modifier
+
+ const/16 v19, 0x0 # clickable enabled=true default
+
+ const/16 v20, 0x0 # null role
+
+ const/16 v21, 0x0 # null onClickLabel
+
+ sget-object v22, Lradiant/NoOp;->a:Lradiant/NoOp; # swallow taps
+
+ const/16 v23, 0xe # default-flag bitmask
+
+ 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;Lam0/a;ILjava/lang/Object;)Landroidx/compose/ui/Modifier; # apply clickable
+
+ move-result-object v23 # clickable modifier
+
+ move-object/from16 v0, v23 # mod to low reg
+ move-object/from16 v0, v18 # mod to low reg
+
+ const/4 v1, 0x0 # ignored fraction
+
@@ -59,6 +43,22 @@
+
+ invoke-static/range {v23 .. v25}, Landroidx/compose/foundation/layout/PaddingKt;->padding-VpY3zN4(Landroidx/compose/ui/Modifier;FF)Landroidx/compose/ui/Modifier; # apply padding
+
+ move-result-object v18 # sized modifier
+
+ const/16 v19, 0x0 # clickable enabled=true default
+
+ const/16 v20, 0x0 # null onClickLabel
+
+ const/16 v21, 0x0 # null role
+
+ sget-object v22, Lradiant/NoOp;->a:Lradiant/NoOp; # block taps
+
+ const/16 v23, 0xe # default-flag bitmask
+
+ 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;Lam0/a;ILjava/lang/Object;)Landroidx/compose/ui/Modifier; # taps stop at the pill
+
+ move-result-object v18 # final modifier
+
+ const/16 v19, 0x0 # null update lambda
+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
+24 -4
View File
@@ -1,16 +1,36 @@
--- a/com/tidal/android/feature/playerscreen/ui/PlayerViewModel$observeLyricsProgress$1$a.smali
+++ b/com/tidal/android/feature/playerscreen/ui/PlayerViewModel$observeLyricsProgress$1$a.smali
@@ -191,6 +191,13 @@
@@ -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
@@ -203,6 +212,10 @@
.line 71
:goto_1
+ invoke-static {v5}, Lradiant/WordLyrics;->primaryLine(I)I # stick to the first overlapping line
+
+ move-result v5
+
iget v4, v2, Lcom/tidal/android/feature/playerscreen/ui/g$c;->c:I
.line 72
+80
View File
@@ -0,0 +1,80 @@
--- a/com/tidal/android/feature/playerscreen/ui/composables/f2.smali
+++ b/com/tidal/android/feature/playerscreen/ui/composables/f2.smali
@@ -932,7 +932,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
@@ -1158,6 +1158,8 @@
.line 100
check-cast v1, Lcom/tidal/android/feature/playerscreen/ui/f;
+ move/16 v33, v2 # lazy item index
+
.line 101
.line 102
const v3, 0x6b82e849
@@ -1646,6 +1648,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 # TIDALs active line
+
+ iget-object v4, v1, Lcom/tidal/android/feature/playerscreen/ui/f;->a:Ljava/lang/String;
+
+ move-object/16 v35, v4 # plain line text
+
+ iget-wide v4, v0, Lcom/tidal/android/feature/playerscreen/ui/composables/f2;->d:J
+
+ move-wide/16 v36, v4 # sung colour
+
+ iget-wide v4, v0, Lcom/tidal/android/feature/playerscreen/ui/composables/f2;->e:J
+
+ move-wide/16 v38, v4 # unsung colour
+
+ invoke-static/range {v33 .. v39}, Lradiant/WordLyrics;->renderSyl(IILjava/lang/String;JJ)Landroidx/compose/ui/text/AnnotatedString;
+
+ move-result-object v3 # syllable-wiped line
+
.line 332
.line 333
invoke-interface {v2}, Landroidx/compose/runtime/State;->getValue()Ljava/lang/Object;
@@ -1672,7 +1694,7 @@
.line 344
.line 345
- const v27, 0xfff8
+ const v27, 0x7ff8 # $default: pass onTextLayout
.line 346
.line 347
@@ -1727,7 +1749,13 @@
.line 369
.line 370
- const/16 v22, 0x0
+ move/from16 v1, v33 # line index
+
+ invoke-static {v1}, Lradiant/SylLayout;->cb(I)Lam0/l; # per-line layout capture
+
+ move-result-object v1
+
+ move-object/from16 v22, v1 # onTextLayout
.line 371
.line 372
@@ -1743,7 +1771,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
+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
+96 -16
View File
@@ -32,11 +32,87 @@
"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 (Syllable Level & Higher Quality)",
"default": false,
"defaultVariantIndex": 0,
"variants": [
{
"title": "Line",
"fileNames": []
},
{
"title": "Word",
"fileNames": [
"lyrics-rl-api-word.patch"
]
},
{
"title": "Syllable",
"fileNames": [
"lyrics-rl-api-syllable.patch"
]
}
],
"extensionFiles": [
"radiant/RLAPILyricsHook.smali",
"radiant/RLAPILyricsWorker.smali",
"radiant/IsrcCache.smali",
"radiant/WordLyrics.smali",
"radiant/WordLyricsTick.smali",
"radiant/SylBrush.smali",
"radiant/SylLayout.smali"
],
"advancedOptions": [
{
"type": "toggle",
"key": "romanize",
"title": "Romanization",
"description": "Return a romanized transcription and show that instead of the original script",
"default": false,
"token": "RL_ROMANIZE",
"inline": true
},
{
"type": "toggle",
"key": "synthesize",
"title": "WIP | AI Generate Syllables",
"description": "[Only works with API results] - Generates Syllable timings from Line timings using a self trained AI model ",
"default": false,
"inline": true,
"token": "RL_SYNTHESIZE"
},
{
"type": "toggle",
"key": "context_aware",
"title": "Context Aware Lyrics",
"description": "Display voice context cues (adlibs and duet singers get displayed seperately)",
"default": true,
"token": "RL_CTX_ON"
},
{
"type": "choice",
"key": "context_aware_mode",
"title": "Show",
"description": "",
"entries": [
"Adlibs",
"Singers",
"Both"
],
"values": [
"0x1",
"0x2",
"0x3"
],
"defaultIndex": 0,
"requiresOption": "context_aware",
"token": "RL_CTX"
}
]
},
{
"id": "PlayerBackdrop",
@@ -303,15 +379,19 @@
"description": "Adds swipe up gesture to the mini-player to reopen the player",
"default": true,
"fileNames": [
"mini-player-gestures.patch"
"mini-player-up-gesture.patch",
"player-swipe-gesture.patch",
"lyrics-gesture-scroll-guard.patch"
],
"extensionFiles": [
"radiant/MiniPlayerGestures.smali",
"radiant/MiniPlayerGestures$Gesture.smali",
"radiant/MiniPlayerGestures$FeedbackLayer.smali",
"radiant/MiniPlayerGestures$FeedbackResetAnimator.smali",
"radiant/MiniPlayerGestures$RootGesture.smali",
"radiant/MiniPlayerGestures$ApplyPending.smali"
"radiant/gestures/MiniPlayerGestures.smali",
"radiant/gestures/MiniPlayerGestures$Gesture.smali",
"radiant/gestures/MiniPlayerGestures$FeedbackLayer.smali",
"radiant/gestures/MiniPlayerGestures$FeedbackResetAnimator.smali",
"radiant/gestures/MiniPlayerGestures$RootGesture.smali",
"radiant/gestures/MiniPlayerGestures$ApplyPending.smali",
"radiant/gestures/LyricsDrag.smali",
"radiant/gestures/LyricsDrag$Guard.smali"
]
},
{
@@ -338,14 +418,14 @@
"default": false,
"requiresOption": "gestures",
"fileNames": [
"mini-player-gestures-left-right.patch"
"mini-player-left-right-gesture.patch"
],
"extensionFiles": [
"radiant/MiniPlayerTrackGestures.smali",
"radiant/MiniPlayerTrackGestures$Gesture.smali",
"radiant/MiniPlayerTrackGestures$OffsetLayer.smali",
"radiant/MiniPlayerTrackGestures$ResetAnimator.smali",
"radiant/MiniPlayerTrackGestures$TextDraw.smali",
"radiant/gestures/MiniPlayerTrackGestures.smali",
"radiant/gestures/MiniPlayerTrackGestures$Gesture.smali",
"radiant/gestures/MiniPlayerTrackGestures$OffsetLayer.smali",
"radiant/gestures/MiniPlayerTrackGestures$ResetAnimator.smali",
"radiant/gestures/MiniPlayerTrackGestures$TextDraw.smali",
"com/tidal/android/feature/appscaffold/ui/r$c.smali"
]
}
-131
View File
@@ -1,131 +0,0 @@
# rl-locals: com/tidal/android/feature/appscaffold/ui/composable/i.smali b( 52
--- a/com/tidal/android/feature/appscaffold/ui/composable/i.smali
+++ b/com/tidal/android/feature/appscaffold/ui/composable/i.smali
@@ -1691,6 +1691,14 @@
move-result-object v24
+ move-object/from16 v49, p5 # gesture expand lambda (AppScaffold Function1 param)
+
+ move-object/from16 v50, v24 # SheetState
+
+ const/16 v51, __RL_MINI_PLAYER_SWIPE_UP_DRAG__ # Enable Drag option
+
+ 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;
--- a/com/tidal/android/feature/appscaffold/ui/composable/MiniPlayerKt.smali
+++ b/com/tidal/android/feature/appscaffold/ui/composable/MiniPlayerKt.smali
@@ -712,6 +712,22 @@
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/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
+
+ if-ne v5, v6, :rl_has_media # prevent swipe up when nothing playing
+
+ const/4 v5, 0x0
+
+ goto :rl_set_media
+
+ :rl_has_media
+ const/4 v5, 0x1
+
+ :rl_set_media
+ invoke-static {v5}, Lradiant/MiniPlayerGestures;->setHasMiniPlayerMedia(Z)V
+
invoke-virtual {v1}, Ljava/lang/Object;->getClass()Ljava/lang/Class;
const v4, -0x571456a1
@@ -1215,6 +1231,10 @@
move-result-object v6
+ invoke-static {v6}, Lradiant/MiniPlayerGestures;->trackAreaModifier(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; # attach swipe up listener
+
+ move-result-object v6
+
.line 38
sget-object v21, Landroidx/compose/ui/Alignment;->Companion:Landroidx/compose/ui/Alignment$Companion;
@@ -1390,6 +1410,10 @@
move-result-object v6
+ invoke-static {v6}, Lradiant/MiniPlayerGestures;->feedbackModifier(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; # move cover (swipe up feedback)
+
+ move-result-object v6
+
.line 63
invoke-virtual/range {v22 .. v22}, Lcom/squareup/ui/market/core/theme/MarketStylesheet$c;->p0()Lf20/a;
@@ -1501,6 +1525,10 @@
move-result-object v5
+ invoke-static {v5}, Lradiant/MiniPlayerGestures;->feedbackModifier(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; # move title/artist (swipe up feedback)
+
+ move-result-object v5
+
.line 72
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
@@ -212,6 +212,12 @@
.line 24
iget-object p1, p0, Landroidx/compose/material3/ModalBottomSheetKt$ModalBottomSheet$4$1;->$sheetState:Landroidx/compose/material3/SheetState;
+ invoke-static {p1}, Lradiant/MiniPlayerGestures;->suppressAutoShow(Landroidx/compose/material3/SheetState;)Z # avoid Material3 show() taking over manual drag
+
+ move-result v1
+
+ if-nez v1, :skip_show
+
.line 25
.line 26
iput v2, p0, Landroidx/compose/material3/ModalBottomSheetKt$ModalBottomSheet$4$1;->label:I
@@ -232,6 +238,7 @@
.line 34
return-object v0
+ :skip_show
.line 35
:cond_2
:goto_0
--- a/androidx/compose/material3/ModalBottomSheetKt.smali
+++ b/androidx/compose/material3/ModalBottomSheetKt.smali
@@ -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, Lam0/l; # to Function1
+
+ 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, 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 @@
const/4 v2, 0x0
.line 16
- const/16 v3, 0x12c
+ const/16 v3, 0x64 # 100ms
.line 17
.line 18