From 973580e23050d48cf67631671afca28652693495 Mon Sep 17 00:00:00 2001 From: Se7en-dev Date: Mon, 31 Aug 2026 15:18:29 +0200 Subject: [PATCH] feat(swipe to queue): left swipe + configurable actions + play next --- .../app/src/main/assets/patches-manifest.json | 67 ++++- .../ui/components/radiant/RadiantInputs.kt | 12 +- .../components/PatchAdvancedOptionsSheet.kt | 24 +- .../ui/screens/patchopts/PatchOptionsModel.kt | 19 +- .../ui/screens/patchopts/PatchSpec.kt | 38 +++ .../components/PatchAdvancedOptionsSheet.kt | 25 +- patches/extension/radiant/SwipeToQueue.smali | 202 ++++++++++++--- .../radiant/swipe/AlbumItemQueueAction.smali | 23 +- .../swipe/ArtistTrackCreditsQueue.smali | 11 + .../swipe/ArtistTrackCreditsQueueAction.smali | 24 +- .../swipe/ArtistTrackCreditsQueueEvent.smali | 6 +- .../swipe/CompactGridMediaQueueAction.smali | 26 +- .../radiant/swipe/ComposeSearchQueue.smali | 54 ++++ .../swipe/ComposeSearchQueueAction.smali | 16 +- .../swipe/ComposeSearchQueueEvent.smali | 6 +- .../radiant/swipe/ComposeSwipeAction.smali | 3 + .../swipe/ComposeSwipeState$Draw.smali | 48 +++- .../radiant/swipe/ComposeSwipeState.smali | 92 ++++--- .../radiant/swipe/DynamicMediaQueue.smali | 129 ++++++++++ .../swipe/DynamicMediaQueueEvent.smali | 6 +- .../radiant/swipe/DynamicTrackQueue.smali | 11 + .../swipe/DynamicTrackQueueAction.smali | 24 +- .../swipe/DynamicTrackQueueEvent.smali | 6 +- .../radiant/swipe/DynamicTrackResolver.smali | 15 +- .../swipe/FavoriteTracksResolver.smali | 4 +- .../radiant/swipe/FeedResolver.smali | 33 +++ .../radiant/swipe/MyAlbumsResolver.smali | 18 +- .../swipe/MyMixesAndRadioResolver.smali | 20 +- .../radiant/swipe/MyPlaylistsResolver.smali | 15 +- .../radiant/swipe/PlaylistItemsResolver.smali | 13 +- .../swipe/PublicPlaylistQueueAction.smali | 20 +- .../radiant/swipe/QueueExecutor.smali | 239 ++++++++++++++++++ .../radiant/swipe/QueueRequest.smali | 9 + .../radiant/swipe/SearchAlbumsResolver.smali | 18 +- .../swipe/SearchPlaylistsResolver.smali | 17 +- .../radiant/swipe/SuggestionsResolver.smali | 71 +++++- .../radiant/swipe/UnifiedSearchResolver.smali | 40 ++- .../swipe/VerticalMediaQueueAction.smali | 26 +- .../radiant/swipe/ViewAllTrackQueue.smali | 51 +++- .../swipe/ViewAllTrackQueueAction.smali | 16 +- patches/manifest.json | 67 ++++- patches/swipe-to-queue.patch | 37 ++- 42 files changed, 1426 insertions(+), 175 deletions(-) diff --git a/Manager/app/src/main/assets/patches-manifest.json b/Manager/app/src/main/assets/patches-manifest.json index b72add9..c6f2076 100644 --- a/Manager/app/src/main/assets/patches-manifest.json +++ b/Manager/app/src/main/assets/patches-manifest.json @@ -476,26 +476,75 @@ "advancedOptions": [ { "type": "choice", - "key": "swipe_direction", - "title": "Swipe Direction", - "description": "Choose direction of the swipe gesture", + "key": "left_action", + "title": "Left Swipe Action", + "description": "Choose the action for a left swipe", "entries": [ - "Left", - "Right" + "Disabled", + "Play next", + "Add to queue" + ], + "values": [ + "0x0", + "0x1", + "0x2" + ], + "defaultIndex": 2, + "distinctFrom": "right_action", + "token": "RL_SWIPE_TO_QUEUE_LEFT_ACTION" + }, + { + "type": "choice", + "key": "right_action", + "title": "Right Swipe Action", + "description": "Choose the action for a right swipe", + "entries": [ + "Disabled", + "Play next", + "Add to queue" + ], + "values": [ + "0x0", + "0x1", + "0x2" + ], + "defaultIndex": 0, + "distinctFrom": "left_action", + "token": "RL_SWIPE_TO_QUEUE_RIGHT_ACTION" + }, + { + "type": "choice", + "key": "remove_direction", + "title": "Remove Track from Queue", + "description": "Choose the swipe direction used to remove items from the play queue", + "entries": [ + "Left swipe", + "Right swipe", + "Both" ], "values": [ "0x4", - "0x8" + "0x8", + "0xc" ], "defaultIndex": 0, - "token": "RL_SWIPE_TO_QUEUE_DIRECTION" + "token": "RL_SWIPE_TO_QUEUE_REMOVE_DIRECTION" }, { "type": "color", "key": "background_color", - "title": "Background Color", + "title": "Add to Queue Color", + "default": -14748953, + "defaultLabel": "Cyan", + "token": "RL_SWIPE_TO_QUEUE_ADD_COLOR" + }, + { + "type": "color", + "key": "play_next_color", + "title": "Play Next Color", "default": -14749031, - "token": "RL_SWIPE_TO_QUEUE_COLOR" + "defaultLabel": "Green", + "token": "RL_SWIPE_TO_QUEUE_PLAY_NEXT_COLOR" } ] }, diff --git a/Manager/app/src/main/kotlin/com/meowarex/rlmobile/ui/components/radiant/RadiantInputs.kt b/Manager/app/src/main/kotlin/com/meowarex/rlmobile/ui/components/radiant/RadiantInputs.kt index d6119f9..ac57eba 100644 --- a/Manager/app/src/main/kotlin/com/meowarex/rlmobile/ui/components/radiant/RadiantInputs.kt +++ b/Manager/app/src/main/kotlin/com/meowarex/rlmobile/ui/components/radiant/RadiantInputs.kt @@ -161,6 +161,7 @@ fun RadiantSegmented( onSelect: (Int) -> Unit, modifier: Modifier = Modifier, enabled: Boolean = true, + disabledIndices: Set = emptySet(), ) { if (radiantStyle.native) { SingleChoiceSegmentedButtonRow(modifier = modifier.fillMaxWidth()) { @@ -168,7 +169,7 @@ fun RadiantSegmented( SegmentedButton( selected = index == selectedIndex, onClick = { onSelect(index) }, - enabled = enabled, + enabled = enabled && index !in disabledIndices, shape = SegmentedButtonDefaults.itemShape(index = index, count = options.size), icon = {}, label = { Text(text = label, maxLines = 1) }, @@ -196,6 +197,7 @@ fun RadiantSegmented( ) { options.forEachIndexed { index, label -> val selected = index == selectedIndex + val segmentEnabled = enabled && index !in disabledIndices val pillShape = RoundedCornerShape(13.dp) val alpha by animateFloatAsState( targetValue = if (selected) 1f else 0f, @@ -218,7 +220,7 @@ fun RadiantSegmented( } else Modifier ) .clickable( - enabled = enabled, + enabled = segmentEnabled, role = Role.RadioButton, onClick = { onSelect(index) }, ), @@ -226,7 +228,11 @@ fun RadiantSegmented( Text( text = label, style = MaterialTheme.typography.labelLarge, - color = if (selected) scheme.onPrimary else scheme.onSurfaceVariant, + color = when { + selected -> scheme.onPrimary + segmentEnabled -> scheme.onSurfaceVariant + else -> scheme.onSurface.copy(alpha = 0.38f) + }, maxLines = 1, ) } diff --git a/Manager/app/src/main/kotlin/com/meowarex/rlmobile/ui/legacy/screens/patchopts/components/PatchAdvancedOptionsSheet.kt b/Manager/app/src/main/kotlin/com/meowarex/rlmobile/ui/legacy/screens/patchopts/components/PatchAdvancedOptionsSheet.kt index a01827d..58df3bc 100644 --- a/Manager/app/src/main/kotlin/com/meowarex/rlmobile/ui/legacy/screens/patchopts/components/PatchAdvancedOptionsSheet.kt +++ b/Manager/app/src/main/kotlin/com/meowarex/rlmobile/ui/legacy/screens/patchopts/components/PatchAdvancedOptionsSheet.kt @@ -166,6 +166,11 @@ fun PatchAdvancedOptionsSheet( title = choice.title, entries = choice.entries, selectedIndex = state.choice(patch, choice), + forceDropdown = choice.forceDropdown, + disabledIndices = patch.conflictingChoices(choice) + .map { state.choice(patch, it) } + .filter { it != 0 } + .toSet(), onSelect = { state.setChoice(patch, choice, it) }, ) } @@ -205,6 +210,11 @@ fun PatchAdvancedOptionsSheet( title = option.title, entries = option.entries, selectedIndex = state.choice(patch, option), + forceDropdown = option.forceDropdown, + disabledIndices = patch.conflictingChoices(option) + .map { state.choice(patch, it) } + .filter { it != 0 } + .toSet(), onSelect = { state.setChoice(patch, option, it) }, ) } @@ -213,6 +223,7 @@ fun PatchAdvancedOptionsSheet( title = option.title, color = state.color(patch, option), defaultColor = option.default, + manifestDefaultLabel = option.defaultLabel, onColorChange = { state.setColor(patch, option, it) }, ) } @@ -382,6 +393,8 @@ private fun ChoiceOptionRow( selectedIndex: Int, onSelect: (Int) -> Unit, title: String = "", + forceDropdown: Boolean = false, + disabledIndices: Set = emptySet(), modifier: Modifier = Modifier, ) { Column( @@ -397,7 +410,7 @@ private fun ChoiceOptionRow( textAlign = TextAlign.Center, ) } - if (entries.size > 3) { + if (forceDropdown || entries.size > 3) { var expanded by rememberSaveable { mutableStateOf(false) } val selectedLabel = entries.getOrNull(selectedIndex).orEmpty() @@ -420,6 +433,7 @@ private fun ChoiceOptionRow( entries.forEachIndexed { index, entry -> DropdownMenuItem( text = { Text(entry) }, + enabled = index !in disabledIndices, onClick = { onSelect(index) expanded = false @@ -435,6 +449,7 @@ private fun ChoiceOptionRow( SegmentedButton( selected = index == selectedIndex, onClick = { onSelect(index) }, + enabled = index !in disabledIndices, shape = SegmentedButtonDefaults.itemShape(index = index, count = entries.size), icon = {}, label = { @@ -457,17 +472,16 @@ private fun ColorOptionRow( title: String, color: Int, defaultColor: Int, + manifestDefaultLabel: String?, onColorChange: (Int) -> Unit, ) { var showPicker by rememberSaveable { mutableStateOf(false) } val selectedColor = color.withOpaqueAlpha() val materialYouColor = MaterialTheme.colorScheme.primary.toArgb().withOpaqueAlpha() val opaqueDefault = defaultColor.withOpaqueAlpha() - val defaultLabel = if (opaqueDefault == TIDAL_GREEN) { + val defaultLabel = manifestDefaultLabel ?: if (opaqueDefault == TIDAL_GREEN) { stringResource(R.string.patch_color_green) - } else { - stringResource(R.string.patch_waze_color_waze_default) - } + } else stringResource(R.string.patch_waze_color_waze_default) val presets = listOf( defaultLabel, stringResource(R.string.patch_waze_color_tidal_cyan), diff --git a/Manager/app/src/main/kotlin/com/meowarex/rlmobile/ui/screens/patchopts/PatchOptionsModel.kt b/Manager/app/src/main/kotlin/com/meowarex/rlmobile/ui/screens/patchopts/PatchOptionsModel.kt index 8231ba1..80a7e50 100644 --- a/Manager/app/src/main/kotlin/com/meowarex/rlmobile/ui/screens/patchopts/PatchOptionsModel.kt +++ b/Manager/app/src/main/kotlin/com/meowarex/rlmobile/ui/screens/patchopts/PatchOptionsModel.kt @@ -179,7 +179,12 @@ class PatchOptionsModel( fun setChoiceValue(spec: PatchSpec, option: OptionSpec.Choice, index: Int) { if (index !in option.entries.indices) return - optionInts = optionInts + (keyOf(spec, option) to index) + val selectedKey = keyOf(spec, option) + optionInts = normalizeChoiceSelections( + specs = listOf(spec), + values = optionInts + (selectedKey to index), + preferredKey = selectedKey, + ) } fun colorValue(spec: PatchSpec, option: OptionSpec.Color): Int = @@ -204,7 +209,14 @@ class PatchOptionsModel( val prefix = "${spec.id}/" optionBools = optionBools.filterKeys { !it.startsWith(prefix) } optionFloats = optionFloats.filterKeys { !it.startsWith(prefix) } - optionInts = optionInts.filterKeys { !it.startsWith(prefix) } + optionInts = normalizeChoiceSelections( + specs = listOf(spec), + values = optionInts.filterKeys { !it.startsWith(prefix) }, + ) + } + + private fun normalizeChoiceSelections(specs: List) { + optionInts = normalizeChoiceSelections(specs, optionInts) } val optionState: PatchOptionState = PatchOptionState( @@ -282,6 +294,7 @@ class PatchOptionsModel( val loaded = if (component == null) builtinSpecs else loadManifestSpecs(component) ?: builtinSpecs mainThread { specs = loaded + normalizeChoiceSelections(loaded) validatePatchSelection() specsLoading = false } @@ -351,6 +364,7 @@ class PatchOptionsModel( ?: loadCachedReleaseManifestSpecs() ?: builtinSpecs mainThread { specs = loaded + normalizeChoiceSelections(loaded) validatePatchSelection() specsLoading = false } @@ -415,6 +429,7 @@ class PatchOptionsModel( } init { + normalizeChoiceSelections(specs) validatePatchSelection() screenModelScope.launchBlock { fetchPkgNameState() } // Default source is the latest release's manifest; custom selections drive themselves. diff --git a/Manager/app/src/main/kotlin/com/meowarex/rlmobile/ui/screens/patchopts/PatchSpec.kt b/Manager/app/src/main/kotlin/com/meowarex/rlmobile/ui/screens/patchopts/PatchSpec.kt index 3b945e6..806030e 100644 --- a/Manager/app/src/main/kotlin/com/meowarex/rlmobile/ui/screens/patchopts/PatchSpec.kt +++ b/Manager/app/src/main/kotlin/com/meowarex/rlmobile/ui/screens/patchopts/PatchSpec.kt @@ -125,6 +125,8 @@ sealed interface OptionSpec { val defaultIndex: Int = 0, val values: List = emptyList(), val requiresOption: String? = null, + val forceDropdown: Boolean = false, + val distinctFrom: String? = null, val token: String? = null, ) : OptionSpec @@ -136,6 +138,7 @@ sealed interface OptionSpec { override val title: String = "", override val description: String = "", val default: Int = 0, + val defaultLabel: String? = null, /** Placeholder name (without the surrounding `__`) baked into the `.patch`/extension files. */ val token: String? = null, ) : OptionSpec @@ -231,6 +234,41 @@ val OptionSpec.variantGate: Int? fun OptionSpec.hiddenForVariant(selectedVariant: Int): Boolean = variantGate.let { it != null && it != selectedVariant } +fun PatchSpec.conflictingChoices(option: OptionSpec.Choice): List = + advancedOptions.filterIsInstance().filter { other -> + other.key != option.key && + (option.distinctFrom == other.key || other.distinctFrom == option.key) + } + +internal fun normalizeChoiceSelections( + specs: List, + values: Map, + preferredKey: String? = null, +): Map { + val normalized = values.toMutableMap() + for (spec in specs) { + val choices = spec.advancedOptions.filterIsInstance() + fun fullKey(option: OptionSpec.Choice) = "${spec.id}/${option.key}" + fun selected(option: OptionSpec.Choice): Int = + (normalized[fullKey(option)] ?: option.defaultIndex) + .coerceIn(0, option.entries.lastIndex.coerceAtLeast(0)) + + for (leftIndex in choices.indices) { + val left = choices[leftIndex] + for (rightIndex in leftIndex + 1 until choices.size) { + val right = choices[rightIndex] + if (left.distinctFrom != right.key && right.distinctFrom != left.key) continue + val selected = selected(left) + if (selected == 0 || selected != selected(right)) continue + + val loser = if (preferredKey == fullKey(right)) left else right + normalized[fullKey(loser)] = 0 + } + } + } + return if (normalized == values) values else normalized +} + sealed interface OptionLock { data object Free : OptionLock data class NeedsVariant(val title: String) : OptionLock diff --git a/Manager/app/src/main/kotlin/com/meowarex/rlmobile/ui/screens/patchopts/components/PatchAdvancedOptionsSheet.kt b/Manager/app/src/main/kotlin/com/meowarex/rlmobile/ui/screens/patchopts/components/PatchAdvancedOptionsSheet.kt index 3b929c8..2778e83 100644 --- a/Manager/app/src/main/kotlin/com/meowarex/rlmobile/ui/screens/patchopts/components/PatchAdvancedOptionsSheet.kt +++ b/Manager/app/src/main/kotlin/com/meowarex/rlmobile/ui/screens/patchopts/components/PatchAdvancedOptionsSheet.kt @@ -43,6 +43,7 @@ import com.meowarex.rlmobile.ui.components.ResetToDefaultButton import com.meowarex.rlmobile.ui.screens.patchopts.OptionLock import com.meowarex.rlmobile.ui.screens.patchopts.OptionSpec import com.meowarex.rlmobile.ui.screens.patchopts.PatchOptionState +import com.meowarex.rlmobile.ui.screens.patchopts.conflictingChoices import com.meowarex.rlmobile.ui.screens.patchopts.hiddenForVariant import com.meowarex.rlmobile.ui.screens.patchopts.optionLock import com.meowarex.rlmobile.ui.screens.patchopts.PatchSpec @@ -172,6 +173,11 @@ fun PatchAdvancedOptionsSheet( title = choice.title, entries = choice.entries, selectedIndex = state.choice(patch, choice), + forceDropdown = choice.forceDropdown, + disabledIndices = patch.conflictingChoices(choice) + .map { state.choice(patch, it) } + .filter { it != 0 } + .toSet(), onSelect = { state.setChoice(patch, choice, it) }, ) } @@ -211,6 +217,11 @@ fun PatchAdvancedOptionsSheet( title = option.title, entries = option.entries, selectedIndex = state.choice(patch, option), + forceDropdown = option.forceDropdown, + disabledIndices = patch.conflictingChoices(option) + .map { state.choice(patch, it) } + .filter { it != 0 } + .toSet(), onSelect = { state.setChoice(patch, option, it) }, ) } @@ -219,6 +230,7 @@ fun PatchAdvancedOptionsSheet( title = option.title, color = state.color(patch, option), defaultColor = option.default, + manifestDefaultLabel = option.defaultLabel, onColorChange = { state.setColor(patch, option, it) }, ) } @@ -382,6 +394,8 @@ private fun ChoiceOptionRow( selectedIndex: Int, onSelect: (Int) -> Unit, title: String = "", + forceDropdown: Boolean = false, + disabledIndices: Set = emptySet(), modifier: Modifier = Modifier, ) { Column( @@ -397,7 +411,7 @@ private fun ChoiceOptionRow( textAlign = TextAlign.Center, ) } - if (entries.size > 3) { + if (forceDropdown || entries.size > 3) { var expanded by rememberSaveable { mutableStateOf(false) } val selectedLabel = entries.getOrNull(selectedIndex).orEmpty() @@ -416,6 +430,7 @@ private fun ChoiceOptionRow( entries.forEachIndexed { index, entry -> DropdownMenuItem( text = { Text(entry) }, + enabled = index !in disabledIndices, onClick = { onSelect(index) expanded = false @@ -430,6 +445,7 @@ private fun ChoiceOptionRow( options = entries, selectedIndex = selectedIndex, onSelect = onSelect, + disabledIndices = disabledIndices, ) } } @@ -439,17 +455,16 @@ private fun ColorOptionRow( title: String, color: Int, defaultColor: Int, + manifestDefaultLabel: String?, onColorChange: (Int) -> Unit, ) { var showPicker by rememberSaveable { mutableStateOf(false) } val selectedColor = color.withOpaqueAlpha() val materialYouColor = MaterialTheme.colorScheme.primary.toArgb().withOpaqueAlpha() val opaqueDefault = defaultColor.withOpaqueAlpha() - val defaultLabel = if (opaqueDefault == TIDAL_GREEN) { + val defaultLabel = manifestDefaultLabel ?: if (opaqueDefault == TIDAL_GREEN) { stringResource(R.string.patch_color_green) - } else { - stringResource(R.string.patch_waze_color_waze_default) - } + } else stringResource(R.string.patch_waze_color_waze_default) val presets = listOf( defaultLabel, stringResource(R.string.patch_waze_color_tidal_cyan), diff --git a/patches/extension/radiant/SwipeToQueue.smali b/patches/extension/radiant/SwipeToQueue.smali index 36f1b08..ec60872 100644 --- a/patches/extension/radiant/SwipeToQueue.smali +++ b/patches/extension/radiant/SwipeToQueue.smali @@ -8,9 +8,13 @@ # instance fields -.field private final background:Landroid/graphics/drawable/ColorDrawable; +.field private final addBackground:Landroid/graphics/drawable/ColorDrawable; -.field private final icon:Landroid/graphics/drawable/Drawable; +.field private final addIcon:Landroid/graphics/drawable/Drawable; + +.field private final playNextBackground:Landroid/graphics/drawable/ColorDrawable; + +.field private final playNextIcon:Landroid/graphics/drawable/Drawable; .field private pendingRequest:Lradiant/swipe/QueueRequest; @@ -32,12 +36,26 @@ .end method .method private constructor (Landroidx/recyclerview/widget/RecyclerView;Lradiant/swipe/QueueRowResolver;)V - .locals 3 + .locals 4 const/4 v0, 0x0 - # ItemTouchHelper.LEFT (0x4) or ItemTouchHelper.RIGHT (0x8) - const/16 v1, __RL_SWIPE_TO_QUEUE_DIRECTION__ + const/4 v1, 0x0 + + const/16 v2, __RL_SWIPE_TO_QUEUE_LEFT_ACTION__ + + if-eqz v2, :check_right + + or-int/lit8 v1, v1, 0x4 + + :check_right + const/16 v2, __RL_SWIPE_TO_QUEUE_RIGHT_ACTION__ + + if-eqz v2, :directions_ready + + or-int/lit8 v1, v1, 0x8 + + :directions_ready invoke-direct {p0, v0, v1}, Landroidx/recyclerview/widget/ItemTouchHelper$SimpleCallback;->(II)V @@ -49,11 +67,19 @@ new-instance v1, Landroid/graphics/drawable/ColorDrawable; - const v2, __RL_SWIPE_TO_QUEUE_COLOR__ + const v2, __RL_SWIPE_TO_QUEUE_ADD_COLOR__ invoke-direct {v1, v2}, Landroid/graphics/drawable/ColorDrawable;->(I)V - iput-object v1, p0, Lradiant/SwipeToQueue;->background:Landroid/graphics/drawable/ColorDrawable; + iput-object v1, p0, Lradiant/SwipeToQueue;->addBackground:Landroid/graphics/drawable/ColorDrawable; + + new-instance v1, Landroid/graphics/drawable/ColorDrawable; + + const v2, __RL_SWIPE_TO_QUEUE_PLAY_NEXT_COLOR__ + + invoke-direct {v1, v2}, Landroid/graphics/drawable/ColorDrawable;->(I)V + + iput-object v1, p0, Lradiant/SwipeToQueue;->playNextBackground:Landroid/graphics/drawable/ColorDrawable; sget v1, Lcom/aspiro/wamp/R$drawable;->ic_add_to_queue_last:I @@ -72,7 +98,30 @@ invoke-virtual {v0, v1}, Landroid/graphics/drawable/Drawable;->setTint(I)V :store_icon - iput-object v0, p0, Lradiant/SwipeToQueue;->icon:Landroid/graphics/drawable/Drawable; + iput-object v0, p0, Lradiant/SwipeToQueue;->addIcon:Landroid/graphics/drawable/Drawable; + + invoke-virtual {p1}, Landroid/view/View;->getContext()Landroid/content/Context; + + move-result-object v0 + + sget v1, Lcom/aspiro/wamp/R$drawable;->ic_play_next:I + + invoke-virtual {v0, v1}, Landroid/content/Context;->getDrawable(I)Landroid/graphics/drawable/Drawable; + + move-result-object v0 + + if-eqz v0, :store_play_next_icon + + invoke-virtual {v0}, Landroid/graphics/drawable/Drawable;->mutate()Landroid/graphics/drawable/Drawable; + + move-result-object v0 + + const/4 v1, -0x1 + + invoke-virtual {v0, v1}, Landroid/graphics/drawable/Drawable;->setTint(I)V + + :store_play_next_icon + iput-object v0, p0, Lradiant/SwipeToQueue;->playNextIcon:Landroid/graphics/drawable/Drawable; return-void .end method @@ -135,7 +184,7 @@ .end method .method public getSwipeDirs(Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)I - .locals 2 + .locals 3 iget-object v0, p0, Lradiant/SwipeToQueue;->pendingRequest:Lradiant/swipe/QueueRequest; @@ -149,7 +198,22 @@ if-eqz v0, :not_swipeable - const/16 v0, __RL_SWIPE_TO_QUEUE_DIRECTION__ + const/4 v0, 0x0 + + const/16 v1, __RL_SWIPE_TO_QUEUE_LEFT_ACTION__ + + if-eqz v1, :check_right + + or-int/lit8 v0, v0, 0x4 + + :check_right + const/16 v1, __RL_SWIPE_TO_QUEUE_RIGHT_ACTION__ + + if-eqz v1, :directions_ready + + or-int/lit8 v0, v0, 0x8 + + :directions_ready return v0 @@ -176,22 +240,26 @@ int-to-float v0, v0 - const/16 v8, __RL_SWIPE_TO_QUEUE_DIRECTION__ - - const/4 v9, 0x4 - - if-ne v8, v9, :expect_right - cmpg-float v8, v11, v0 - if-gez v8, :wrong_direction + if-ltz v8, :left_action - goto :clear_active - - :expect_right cmpl-float v8, v11, v0 - if-lez v8, :wrong_direction + if-gtz v8, :right_action + + goto :wrong_direction + + :left_action + const/16 v8, __RL_SWIPE_TO_QUEUE_LEFT_ACTION__ + + goto :action_ready + + :right_action + const/16 v8, __RL_SWIPE_TO_QUEUE_RIGHT_ACTION__ + + :action_ready + if-eqz v8, :wrong_direction goto :clear_active @@ -217,11 +285,13 @@ move-result v4 - const/16 v8, __RL_SWIPE_TO_QUEUE_DIRECTION__ + const/4 v8, 0x0 - const/4 v9, 0x4 + int-to-float v8, v8 - if-ne v8, v9, :right_bounds + cmpg-float v8, v11, v8 + + if-gez v8, :right_bounds invoke-virtual {v0}, Landroid/view/View;->getRight()I @@ -248,7 +318,34 @@ if-lez v5, :done - iget-object v6, p0, Lradiant/SwipeToQueue;->background:Landroid/graphics/drawable/ColorDrawable; + const/4 v8, 0x0 + + int-to-float v8, v8 + + cmpg-float v8, v11, v8 + + if-ltz v8, :draw_left_background + + const/16 v8, __RL_SWIPE_TO_QUEUE_RIGHT_ACTION__ + + goto :background_action_ready + + :draw_left_background + const/16 v8, __RL_SWIPE_TO_QUEUE_LEFT_ACTION__ + + :background_action_ready + const/4 v9, 0x1 + + if-ne v8, v9, :add_background + + iget-object v6, p0, Lradiant/SwipeToQueue;->playNextBackground:Landroid/graphics/drawable/ColorDrawable; + + goto :background_ready + + :add_background + iget-object v6, p0, Lradiant/SwipeToQueue;->addBackground:Landroid/graphics/drawable/ColorDrawable; + + :background_ready invoke-virtual {v6, v2, v3, v1, v4}, Landroid/graphics/drawable/Drawable;->setBounds(IIII)V @@ -280,6 +377,24 @@ if-eqz v10, :draw_alpha + const/4 v9, 0x0 + + int-to-float v9, v9 + + cmpg-float v9, v11, v9 + + if-ltz v9, :stamp_left_action + + const/16 v9, __RL_SWIPE_TO_QUEUE_RIGHT_ACTION__ + + goto :stamp_action + + :stamp_left_action + const/16 v9, __RL_SWIPE_TO_QUEUE_LEFT_ACTION__ + + :stamp_action + iput v9, v10, Lradiant/swipe/QueueRequest;->action:I + iput-object v10, p0, Lradiant/SwipeToQueue;->pendingRequest:Lradiant/swipe/QueueRequest; # HapticFeedbackConstants.CLOCK_TICK @@ -334,7 +449,34 @@ :draw_background invoke-virtual {v6, p1}, Landroid/graphics/drawable/ColorDrawable;->draw(Landroid/graphics/Canvas;)V - iget-object v6, p0, Lradiant/SwipeToQueue;->icon:Landroid/graphics/drawable/Drawable; + const/4 v8, 0x0 + + int-to-float v8, v8 + + cmpg-float v8, v11, v8 + + if-ltz v8, :draw_left_icon + + const/16 v8, __RL_SWIPE_TO_QUEUE_RIGHT_ACTION__ + + goto :icon_action_ready + + :draw_left_icon + const/16 v8, __RL_SWIPE_TO_QUEUE_LEFT_ACTION__ + + :icon_action_ready + const/4 v9, 0x1 + + if-ne v8, v9, :draw_add_icon + + iget-object v6, p0, Lradiant/SwipeToQueue;->playNextIcon:Landroid/graphics/drawable/Drawable; + + goto :icon_ready + + :draw_add_icon + iget-object v6, p0, Lradiant/SwipeToQueue;->addIcon:Landroid/graphics/drawable/Drawable; + + :icon_ready if-eqz v6, :done @@ -357,11 +499,13 @@ div-int/lit8 v9, v9, 0x2 - const/16 v10, __RL_SWIPE_TO_QUEUE_DIRECTION__ + const/4 v10, 0x0 - const/4 v11, 0x4 + int-to-float v10, v10 - if-ne v10, v11, :right_icon + cmpg-float v10, v11, v10 + + if-gez v10, :right_icon sub-int v10, v1, v9 diff --git a/patches/extension/radiant/swipe/AlbumItemQueueAction.smali b/patches/extension/radiant/swipe/AlbumItemQueueAction.smali index b598eda..d575081 100644 --- a/patches/extension/radiant/swipe/AlbumItemQueueAction.smali +++ b/patches/extension/radiant/swipe/AlbumItemQueueAction.smali @@ -41,7 +41,7 @@ # virtual methods -.method public invoke()Ljava/lang/Object; +.method public invoke(I)Ljava/lang/Object; .locals 10 iget-object v0, p0, Lradiant/swipe/AlbumItemQueueAction;->callback:Lu5/b$a$a; @@ -166,6 +166,15 @@ invoke-virtual {v6, v7}, Lcom/aspiro/wamp/playqueue/source/model/Source;->addSourceItem(Lcom/aspiro/wamp/model/MediaItem;)V + const/4 v8, 0x1 + + if-ne p1, v8, :append_track + + invoke-static {v3, v7, v5, v6}, Lradiant/swipe/QueueExecutor;->playNextTrack(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z + + goto :done + + :append_track invoke-static {v3, v7, v5, v6}, Lradiant/swipe/QueueExecutor;->track(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z :done @@ -174,6 +183,18 @@ return-object v0 .end method +.method public invoke()Ljava/lang/Object; + .locals 1 + + const/4 v0, 0x2 + + invoke-virtual {p0, v0}, Lradiant/swipe/AlbumItemQueueAction;->invoke(I)Ljava/lang/Object; + + move-result-object v0 + + return-object v0 +.end method + .method public setContext(Landroid/content/Context;)V .locals 0 diff --git a/patches/extension/radiant/swipe/ArtistTrackCreditsQueue.smali b/patches/extension/radiant/swipe/ArtistTrackCreditsQueue.smali index 044963a..380603a 100644 --- a/patches/extension/radiant/swipe/ArtistTrackCreditsQueue.smali +++ b/patches/extension/radiant/swipe/ArtistTrackCreditsQueue.smali @@ -154,6 +154,17 @@ invoke-virtual {v9, v7}, Lcom/aspiro/wamp/playqueue/source/model/Source;->addSourceItem(Lcom/aspiro/wamp/model/MediaItem;)V + iget v0, p1, Lradiant/swipe/ArtistTrackCreditsQueueEvent;->action:I + + const/4 v2, 0x1 + + if-ne v0, v2, :append + + invoke-static {v1, v7, v8, v9}, Lradiant/swipe/QueueExecutor;->playNextTrack(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z + + goto :done + + :append invoke-static {v1, v7, v8, v9}, Lradiant/swipe/QueueExecutor;->track(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z :done diff --git a/patches/extension/radiant/swipe/ArtistTrackCreditsQueueAction.smali b/patches/extension/radiant/swipe/ArtistTrackCreditsQueueAction.smali index 2d51fef..655da85 100644 --- a/patches/extension/radiant/swipe/ArtistTrackCreditsQueueAction.smali +++ b/patches/extension/radiant/swipe/ArtistTrackCreditsQueueAction.smali @@ -39,8 +39,8 @@ # virtual methods -.method public invoke()Ljava/lang/Object; - .locals 7 +.method public invoke(I)Ljava/lang/Object; + .locals 8 iget-wide v1, p0, Lradiant/swipe/ArtistTrackCreditsQueueAction;->trackId:J @@ -73,12 +73,14 @@ iget-wide v4, p0, Lradiant/swipe/ArtistTrackCreditsQueueAction;->trackId:J - invoke-direct/range {v0 .. v5}, Lradiant/swipe/ArtistTrackCreditsQueueEvent;->(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;J)V + move v6, p1 + + invoke-direct/range {v0 .. v6}, Lradiant/swipe/ArtistTrackCreditsQueueEvent;->(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;JI)V :emit - iget-object v6, p0, Lradiant/swipe/ArtistTrackCreditsQueueAction;->callback:Lam0/l; + iget-object v7, p0, Lradiant/swipe/ArtistTrackCreditsQueueAction;->callback:Lam0/l; - invoke-interface {v6, v0}, Lam0/l;->invoke(Ljava/lang/Object;)Ljava/lang/Object; + invoke-interface {v7, v0}, Lam0/l;->invoke(Ljava/lang/Object;)Ljava/lang/Object; :done sget-object v0, Lkotlin/u;->a:Lkotlin/u; @@ -86,6 +88,18 @@ return-object v0 .end method +.method public invoke()Ljava/lang/Object; + .locals 1 + + const/4 v0, 0x2 + + invoke-virtual {p0, v0}, Lradiant/swipe/ArtistTrackCreditsQueueAction;->invoke(I)Ljava/lang/Object; + + move-result-object v0 + + return-object v0 +.end method + .method public setContext(Landroid/content/Context;)V .locals 0 diff --git a/patches/extension/radiant/swipe/ArtistTrackCreditsQueueEvent.smali b/patches/extension/radiant/swipe/ArtistTrackCreditsQueueEvent.smali index 4c3c696..58272fc 100644 --- a/patches/extension/radiant/swipe/ArtistTrackCreditsQueueEvent.smali +++ b/patches/extension/radiant/swipe/ArtistTrackCreditsQueueEvent.smali @@ -7,6 +7,8 @@ # instance fields +.field public final action:I + .field public final context:Landroid/content/Context; .field public final moduleUuid:Ljava/lang/String; @@ -17,7 +19,7 @@ # direct methods -.method public constructor (Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;J)V +.method public constructor (Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;JI)V .locals 0 invoke-direct {p0}, Ljava/lang/Object;->()V @@ -30,5 +32,7 @@ iput-wide p4, p0, Lradiant/swipe/ArtistTrackCreditsQueueEvent;->trackId:J + iput p6, p0, Lradiant/swipe/ArtistTrackCreditsQueueEvent;->action:I + return-void .end method diff --git a/patches/extension/radiant/swipe/CompactGridMediaQueueAction.smali b/patches/extension/radiant/swipe/CompactGridMediaQueueAction.smali index 30575e3..c5ce95e 100644 --- a/patches/extension/radiant/swipe/CompactGridMediaQueueAction.smali +++ b/patches/extension/radiant/swipe/CompactGridMediaQueueAction.smali @@ -158,12 +158,12 @@ # virtual methods -.method public invoke()Ljava/lang/Object; - .locals 7 +.method public invoke(I)Ljava/lang/Object; + .locals 8 - iget-object v6, p0, Lradiant/swipe/CompactGridMediaQueueAction;->callback:Lam0/l; + iget-object v7, p0, Lradiant/swipe/CompactGridMediaQueueAction;->callback:Lam0/l; - if-eqz v6, :done + if-eqz v7, :done iget-object v4, p0, Lradiant/swipe/CompactGridMediaQueueAction;->itemId:Ljava/lang/String; @@ -198,12 +198,14 @@ iget-object v3, p0, Lradiant/swipe/CompactGridMediaQueueAction;->moduleUuid:Ljava/lang/String; - invoke-direct/range {v0 .. v5}, Lradiant/swipe/DynamicMediaQueueEvent;->(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V + move v6, p1 + + invoke-direct/range {v0 .. v6}, Lradiant/swipe/DynamicMediaQueueEvent;->(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;II)V move-object v1, v0 :emit - invoke-interface {v6, v1}, Lam0/l;->invoke(Ljava/lang/Object;)Ljava/lang/Object; + invoke-interface {v7, v1}, Lam0/l;->invoke(Ljava/lang/Object;)Ljava/lang/Object; :done sget-object v0, Lkotlin/u;->a:Lkotlin/u; @@ -211,6 +213,18 @@ return-object v0 .end method +.method public invoke()Ljava/lang/Object; + .locals 1 + + const/4 v0, 0x2 + + invoke-virtual {p0, v0}, Lradiant/swipe/CompactGridMediaQueueAction;->invoke(I)Ljava/lang/Object; + + move-result-object v0 + + return-object v0 +.end method + .method public setContext(Landroid/content/Context;)V .locals 0 diff --git a/patches/extension/radiant/swipe/ComposeSearchQueue.smali b/patches/extension/radiant/swipe/ComposeSearchQueue.smali index 1f20e8c..ee0c6c1 100644 --- a/patches/extension/radiant/swipe/ComposeSearchQueue.smali +++ b/patches/extension/radiant/swipe/ComposeSearchQueue.smali @@ -11,6 +11,16 @@ if-eqz p1, :done + iget v0, p1, Lradiant/swipe/ComposeSearchQueueEvent;->action:I + + const/4 v1, 0x1 + + if-lt v0, v1, :done + + const/4 v1, 0x2 + + if-gt v0, v1, :done + iget-object v8, p1, Lradiant/swipe/ComposeSearchQueueEvent;->context:Landroid/content/Context; if-eqz v8, :done @@ -198,6 +208,17 @@ invoke-virtual {v4, v9}, Lcom/aspiro/wamp/playqueue/source/model/Source;->addSourceItem(Lcom/aspiro/wamp/model/MediaItem;)V + iget v0, p1, Lradiant/swipe/ComposeSearchQueueEvent;->action:I + + const/4 v1, 0x1 + + if-ne v0, v1, :append_track + + invoke-static {v8, v9, v7, v4}, Lradiant/swipe/QueueExecutor;->playNextTrack(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z + + goto :done + + :append_track invoke-static {v8, v9, v7, v4}, Lradiant/swipe/QueueExecutor;->track(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z goto :done @@ -237,6 +258,17 @@ move-result-object v9 + iget v0, p1, Lradiant/swipe/ComposeSearchQueueEvent;->action:I + + const/4 v1, 0x1 + + if-ne v0, v1, :append_album + + invoke-static {v8, v9, v7, v5, v6}, Lradiant/swipe/QueueExecutor;->playNextAlbum(Landroid/content/Context;Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; + + goto :done + + :append_album invoke-static {v8, v9, v7, v5, v6}, Lradiant/swipe/QueueExecutor;->album(Landroid/content/Context;Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; goto :done @@ -252,6 +284,17 @@ move-result-object v9 + iget v0, p1, Lradiant/swipe/ComposeSearchQueueEvent;->action:I + + const/4 v1, 0x1 + + if-ne v0, v1, :append_playlist + + invoke-static {v8, v9, v7, v5}, Lradiant/swipe/QueueExecutor;->playNextPlaylist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V + + goto :done + + :append_playlist invoke-static {v8, v9, v7, v5}, Lradiant/swipe/QueueExecutor;->playlist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V goto :done @@ -263,6 +306,17 @@ move-result-object v9 + iget v0, p1, Lradiant/swipe/ComposeSearchQueueEvent;->action:I + + const/4 v1, 0x1 + + if-ne v0, v1, :append_mix + + invoke-static {v8, v9, v7, v5, v6}, Lradiant/swipe/QueueExecutor;->playNextMix(Landroid/content/Context;Lcom/aspiro/wamp/mix/model/Mix;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; + + goto :done + + :append_mix invoke-static {v8, v9, v7, v5, v6}, Lradiant/swipe/QueueExecutor;->mix(Landroid/content/Context;Lcom/aspiro/wamp/mix/model/Mix;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; :done diff --git a/patches/extension/radiant/swipe/ComposeSearchQueueAction.smali b/patches/extension/radiant/swipe/ComposeSearchQueueAction.smali index 1b2ccf9..c1a9e54 100644 --- a/patches/extension/radiant/swipe/ComposeSearchQueueAction.smali +++ b/patches/extension/radiant/swipe/ComposeSearchQueueAction.smali @@ -180,7 +180,7 @@ # virtual methods -.method public invoke()Ljava/lang/Object; +.method public invoke(I)Ljava/lang/Object; .locals 4 iget-object v0, p0, Lradiant/swipe/ComposeSearchQueueAction;->callback:Lam0/l; @@ -201,7 +201,7 @@ new-instance p0, Lradiant/swipe/ComposeSearchQueueEvent; - invoke-direct {p0, v1, v2, v3}, Lradiant/swipe/ComposeSearchQueueEvent;->(Landroid/content/Context;Ljava/lang/String;I)V + invoke-direct {p0, v1, v2, v3, p1}, Lradiant/swipe/ComposeSearchQueueEvent;->(Landroid/content/Context;Ljava/lang/String;II)V invoke-interface {v0, p0}, Lam0/l;->invoke(Ljava/lang/Object;)Ljava/lang/Object; @@ -211,6 +211,18 @@ return-object v0 .end method +.method public invoke()Ljava/lang/Object; + .locals 1 + + const/4 v0, 0x2 + + invoke-virtual {p0, v0}, Lradiant/swipe/ComposeSearchQueueAction;->invoke(I)Ljava/lang/Object; + + move-result-object v0 + + return-object v0 +.end method + .method public setContext(Landroid/content/Context;)V .locals 0 diff --git a/patches/extension/radiant/swipe/ComposeSearchQueueEvent.smali b/patches/extension/radiant/swipe/ComposeSearchQueueEvent.smali index c5eeeed..4ef90be 100644 --- a/patches/extension/radiant/swipe/ComposeSearchQueueEvent.smali +++ b/patches/extension/radiant/swipe/ComposeSearchQueueEvent.smali @@ -17,6 +17,8 @@ # instance fields +.field public final action:I + .field public final context:Landroid/content/Context; .field public final id:Ljava/lang/String; @@ -25,7 +27,7 @@ # direct methods -.method public constructor (Landroid/content/Context;Ljava/lang/String;I)V +.method public constructor (Landroid/content/Context;Ljava/lang/String;II)V .locals 0 invoke-direct {p0}, Ljava/lang/Object;->()V @@ -36,5 +38,7 @@ iput p3, p0, Lradiant/swipe/ComposeSearchQueueEvent;->type:I + iput p4, p0, Lradiant/swipe/ComposeSearchQueueEvent;->action:I + return-void .end method diff --git a/patches/extension/radiant/swipe/ComposeSwipeAction.smali b/patches/extension/radiant/swipe/ComposeSwipeAction.smali index afd97e3..36ff8fd 100644 --- a/patches/extension/radiant/swipe/ComposeSwipeAction.smali +++ b/patches/extension/radiant/swipe/ComposeSwipeAction.smali @@ -10,5 +10,8 @@ .method public abstract invoke()Ljava/lang/Object; .end method +.method public abstract invoke(I)Ljava/lang/Object; +.end method + .method public abstract setContext(Landroid/content/Context;)V .end method diff --git a/patches/extension/radiant/swipe/ComposeSwipeState$Draw.smali b/patches/extension/radiant/swipe/ComposeSwipeState$Draw.smali index 0b043d0..3398b27 100644 --- a/patches/extension/radiant/swipe/ComposeSwipeState$Draw.smali +++ b/patches/extension/radiant/swipe/ComposeSwipeState$Draw.smali @@ -82,11 +82,9 @@ move-result v8 - const/16 v9, __RL_SWIPE_TO_QUEUE_DIRECTION__ + cmpg-float v9, v6, v1 - const/4 v10, 0x4 - - if-ne v9, v10, :right_exposure + if-gez v9, :right_exposure add-float v9, v3, v6 @@ -108,11 +106,41 @@ :exposure_ready invoke-virtual {v7, v9, v1, v10, v4}, Landroid/graphics/Canvas;->clipRect(FFFF)Z - iget v11, v5, Lradiant/swipe/ComposeSwipeState;->backgroundColor:I + invoke-virtual {v5, v6}, Lradiant/swipe/ComposeSwipeState;->actionForOffset(F)I + + move-result v11 + + const/4 v12, 0x1 + + if-ne v11, v12, :add_color + + const v11, __RL_SWIPE_TO_QUEUE_PLAY_NEXT_COLOR__ + + goto :color_ready + + :add_color + const v11, __RL_SWIPE_TO_QUEUE_ADD_COLOR__ + + :color_ready invoke-virtual {v7, v11}, Landroid/graphics/Canvas;->drawColor(I)V - iget-object v11, v5, Lradiant/swipe/ComposeSwipeState;->icon:Landroid/graphics/drawable/Drawable; + invoke-virtual {v5, v6}, Lradiant/swipe/ComposeSwipeState;->actionForOffset(F)I + + move-result v11 + + const/4 v12, 0x1 + + if-ne v11, v12, :add_icon + + iget-object v11, v5, Lradiant/swipe/ComposeSwipeState;->playNextIcon:Landroid/graphics/drawable/Drawable; + + goto :icon_ready + + :add_icon + iget-object v11, v5, Lradiant/swipe/ComposeSwipeState;->addIcon:Landroid/graphics/drawable/Drawable; + + :icon_ready if-eqz v11, :background_done @@ -134,11 +162,13 @@ move-result v14 - const/16 v15, __RL_SWIPE_TO_QUEUE_DIRECTION__ + const/4 v15, 0x0 - const/4 v1, 0x4 + int-to-float v15, v15 - if-ne v15, v1, :right_icon + cmpg-float v15, v6, v15 + + if-gez v15, :right_icon int-to-float v1, v12 diff --git a/patches/extension/radiant/swipe/ComposeSwipeState.smali b/patches/extension/radiant/swipe/ComposeSwipeState.smali index be5e69b..19adcd5 100644 --- a/patches/extension/radiant/swipe/ComposeSwipeState.smali +++ b/patches/extension/radiant/swipe/ComposeSwipeState.smali @@ -31,9 +31,9 @@ .field final draw:Lradiant/swipe/ComposeSwipeState$Draw; -.field icon:Landroid/graphics/drawable/Drawable; +.field addIcon:Landroid/graphics/drawable/Drawable; -.field backgroundColor:I +.field playNextIcon:Landroid/graphics/drawable/Drawable; # direct methods @@ -135,6 +135,36 @@ # virtual methods +.method actionForOffset(F)I + .locals 2 + + const/4 v0, 0x0 + + int-to-float v0, v0 + + cmpg-float v1, p1, v0 + + if-ltz v1, :left + + cmpl-float p1, p1, v0 + + if-gtz p1, :right + + const/4 p1, 0x0 + + return p1 + + :left + const/16 p1, __RL_SWIPE_TO_QUEUE_LEFT_ACTION__ + + return p1 + + :right + const/16 p1, __RL_SWIPE_TO_QUEUE_RIGHT_ACTION__ + + return p1 +.end method + .method animateReset()V .locals 7 @@ -336,14 +366,14 @@ move-result v0 - invoke-virtual {p0, v0}, Lradiant/swipe/ComposeSwipeState;->isCorrectDirection(F)Z + invoke-virtual {p0, v0}, Lradiant/swipe/ComposeSwipeState;->actionForOffset(F)I - move-result v0 + move-result v2 goto :complete_ready :not_complete - const/4 v0, 0x0 + const/4 v2, 0x0 :complete_ready const/4 v1, 0x0 @@ -358,7 +388,7 @@ invoke-virtual {p0}, Lradiant/swipe/ComposeSwipeState;->animateReset()V - if-eqz v0, :done + if-eqz v2, :done invoke-static {}, Lradiant/swipe/ComposeTapGuard;->suppressAfterSwipe()V @@ -366,7 +396,7 @@ if-eqz v0, :done - invoke-interface {v0}, Lradiant/swipe/ComposeSwipeAction;->invoke()Ljava/lang/Object; + invoke-interface {v0, v2}, Lradiant/swipe/ComposeSwipeAction;->invoke(I)Ljava/lang/Object; goto :done @@ -380,28 +410,13 @@ .end method .method isCorrectDirection(F)Z - .locals 3 + .locals 1 - const/16 v0, __RL_SWIPE_TO_QUEUE_DIRECTION__ + invoke-virtual {p0, p1}, Lradiant/swipe/ComposeSwipeState;->actionForOffset(F)I - const/4 v1, 0x4 + move-result v0 - const/4 v2, 0x0 - - if-ne v0, v1, :expect_right - - cmpg-float v0, p1, v2 - - if-gez v0, :wrong - - const/4 v0, 0x1 - - return v0 - - :expect_right - cmpl-float v0, p1, v2 - - if-lez v0, :wrong + if-eqz v0, :wrong const/4 v0, 0x1 @@ -606,10 +621,6 @@ :load_resources iput-object v0, p0, Lradiant/swipe/ComposeSwipeState;->context:Landroid/content/Context; - const v1, __RL_SWIPE_TO_QUEUE_COLOR__ - - iput v1, p0, Lradiant/swipe/ComposeSwipeState;->backgroundColor:I - sget v1, Lcom/aspiro/wamp/R$drawable;->ic_add_to_queue_last:I invoke-virtual {v0, v1}, Landroid/content/Context;->getDrawable(I)Landroid/graphics/drawable/Drawable; @@ -627,7 +638,26 @@ invoke-virtual {v1, v2}, Landroid/graphics/drawable/Drawable;->setTint(I)V :store_icon - iput-object v1, p0, Lradiant/swipe/ComposeSwipeState;->icon:Landroid/graphics/drawable/Drawable; + iput-object v1, p0, Lradiant/swipe/ComposeSwipeState;->addIcon:Landroid/graphics/drawable/Drawable; + + sget v1, Lcom/aspiro/wamp/R$drawable;->ic_play_next:I + + invoke-virtual {v0, v1}, Landroid/content/Context;->getDrawable(I)Landroid/graphics/drawable/Drawable; + + move-result-object v1 + + if-eqz v1, :store_play_next_icon + + invoke-virtual {v1}, Landroid/graphics/drawable/Drawable;->mutate()Landroid/graphics/drawable/Drawable; + + move-result-object v1 + + const/4 v2, -0x1 + + invoke-virtual {v1, v2}, Landroid/graphics/drawable/Drawable;->setTint(I)V + + :store_play_next_icon + iput-object v1, p0, Lradiant/swipe/ComposeSwipeState;->playNextIcon:Landroid/graphics/drawable/Drawable; :context_ready if-eqz p1, :enabled_ready diff --git a/patches/extension/radiant/swipe/DynamicMediaQueue.smali b/patches/extension/radiant/swipe/DynamicMediaQueue.smali index e0e1ca5..d363405 100644 --- a/patches/extension/radiant/swipe/DynamicMediaQueue.smali +++ b/patches/extension/radiant/swipe/DynamicMediaQueue.smali @@ -11,6 +11,16 @@ if-eqz p1, :done + iget v4, p1, Lradiant/swipe/DynamicMediaQueueEvent;->action:I + + const/4 v5, 0x1 + + if-lt v4, v5, :done + + const/4 v5, 0x2 + + if-gt v4, v5, :done + iget-object v0, p1, Lradiant/swipe/DynamicMediaQueueEvent;->pageId:Ljava/lang/String; iget-object v1, p1, Lradiant/swipe/DynamicMediaQueueEvent;->moduleUuid:Ljava/lang/String; @@ -172,6 +182,17 @@ if-eqz v6, :done + iget v0, p1, Lradiant/swipe/DynamicMediaQueueEvent;->action:I + + const/4 v1, 0x1 + + if-ne v0, v1, :append_album + + invoke-static {v5, v12, v10, v9, v6}, Lradiant/swipe/QueueExecutor;->playNextAlbum(Landroid/content/Context;Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; + + goto :done + + :append_album invoke-static {v5, v12, v10, v9, v6}, Lradiant/swipe/QueueExecutor;->album(Landroid/content/Context;Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; goto :done @@ -193,6 +214,17 @@ if-eqz v6, :done + iget v0, p1, Lradiant/swipe/DynamicMediaQueueEvent;->action:I + + const/4 v1, 0x1 + + if-ne v0, v1, :append_mix + + invoke-static {v5, v12, v10, v9, v6}, Lradiant/swipe/QueueExecutor;->playNextMix(Landroid/content/Context;Lcom/aspiro/wamp/mix/model/Mix;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; + + goto :done + + :append_mix invoke-static {v5, v12, v10, v9, v6}, Lradiant/swipe/QueueExecutor;->mix(Landroid/content/Context;Lcom/aspiro/wamp/mix/model/Mix;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; goto :done @@ -208,6 +240,17 @@ move-result-object v12 + iget v0, p1, Lradiant/swipe/DynamicMediaQueueEvent;->action:I + + const/4 v1, 0x1 + + if-ne v0, v1, :append_playlist + + invoke-static {v5, v12, v10, v9}, Lradiant/swipe/QueueExecutor;->playNextPlaylist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V + + goto :done + + :append_playlist invoke-static {v5, v12, v10, v9}, Lradiant/swipe/QueueExecutor;->playlist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V goto :done @@ -236,6 +279,17 @@ invoke-virtual {v11, v12}, Lcom/aspiro/wamp/playqueue/source/model/Source;->addSourceItem(Lcom/aspiro/wamp/model/MediaItem;)V + iget v0, p1, Lradiant/swipe/DynamicMediaQueueEvent;->action:I + + const/4 v1, 0x1 + + if-ne v0, v1, :append_track + + invoke-static {v5, v12, v10, v11}, Lradiant/swipe/QueueExecutor;->playNextTrack(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z + + goto :done + + :append_track invoke-static {v5, v12, v10, v11}, Lradiant/swipe/QueueExecutor;->track(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z :done @@ -249,6 +303,16 @@ if-eqz p1, :done + iget v0, p1, Lradiant/swipe/DynamicMediaQueueEvent;->action:I + + const/4 v1, 0x1 + + if-lt v0, v1, :done + + const/4 v1, 0x2 + + if-gt v0, v1, :done + iget v0, p1, Lradiant/swipe/DynamicMediaQueueEvent;->mediaType:I const/4 v1, 0x3 @@ -362,6 +426,17 @@ move-result-object v4 + iget v0, p1, Lradiant/swipe/DynamicMediaQueueEvent;->action:I + + const/4 v1, 0x1 + + if-ne v0, v1, :append_playlist + + invoke-static {v6, v4, v8, v7}, Lradiant/swipe/QueueExecutor;->playNextPlaylist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V + + goto :done + + :append_playlist invoke-static {v6, v4, v8, v7}, Lradiant/swipe/QueueExecutor;->playlist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V :done @@ -375,6 +450,16 @@ if-eqz p1, :done + iget v4, p1, Lradiant/swipe/DynamicMediaQueueEvent;->action:I + + const/4 v5, 0x1 + + if-lt v4, v5, :done + + const/4 v5, 0x2 + + if-gt v4, v5, :done + iget-object v0, p1, Lradiant/swipe/DynamicMediaQueueEvent;->pageId:Ljava/lang/String; iget-object v1, p1, Lradiant/swipe/DynamicMediaQueueEvent;->moduleUuid:Ljava/lang/String; @@ -536,6 +621,17 @@ if-eqz v6, :done + iget v0, p1, Lradiant/swipe/DynamicMediaQueueEvent;->action:I + + const/4 v1, 0x1 + + if-ne v0, v1, :append_album + + invoke-static {v5, v12, v10, v9, v6}, Lradiant/swipe/QueueExecutor;->playNextAlbum(Landroid/content/Context;Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; + + goto :done + + :append_album invoke-static {v5, v12, v10, v9, v6}, Lradiant/swipe/QueueExecutor;->album(Landroid/content/Context;Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; goto :done @@ -557,6 +653,17 @@ if-eqz v6, :done + iget v0, p1, Lradiant/swipe/DynamicMediaQueueEvent;->action:I + + const/4 v1, 0x1 + + if-ne v0, v1, :append_mix + + invoke-static {v5, v12, v10, v9, v6}, Lradiant/swipe/QueueExecutor;->playNextMix(Landroid/content/Context;Lcom/aspiro/wamp/mix/model/Mix;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; + + goto :done + + :append_mix invoke-static {v5, v12, v10, v9, v6}, Lradiant/swipe/QueueExecutor;->mix(Landroid/content/Context;Lcom/aspiro/wamp/mix/model/Mix;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; goto :done @@ -572,6 +679,17 @@ move-result-object v12 + iget v0, p1, Lradiant/swipe/DynamicMediaQueueEvent;->action:I + + const/4 v1, 0x1 + + if-ne v0, v1, :append_playlist + + invoke-static {v5, v12, v10, v9}, Lradiant/swipe/QueueExecutor;->playNextPlaylist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V + + goto :done + + :append_playlist invoke-static {v5, v12, v10, v9}, Lradiant/swipe/QueueExecutor;->playlist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V goto :done @@ -600,6 +718,17 @@ invoke-virtual {v11, v12}, Lcom/aspiro/wamp/playqueue/source/model/Source;->addSourceItem(Lcom/aspiro/wamp/model/MediaItem;)V + iget v0, p1, Lradiant/swipe/DynamicMediaQueueEvent;->action:I + + const/4 v1, 0x1 + + if-ne v0, v1, :append_track + + invoke-static {v5, v12, v10, v11}, Lradiant/swipe/QueueExecutor;->playNextTrack(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z + + goto :done + + :append_track invoke-static {v5, v12, v10, v11}, Lradiant/swipe/QueueExecutor;->track(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z :done diff --git a/patches/extension/radiant/swipe/DynamicMediaQueueEvent.smali b/patches/extension/radiant/swipe/DynamicMediaQueueEvent.smali index a8d662f..0881ddd 100644 --- a/patches/extension/radiant/swipe/DynamicMediaQueueEvent.smali +++ b/patches/extension/radiant/swipe/DynamicMediaQueueEvent.smali @@ -8,6 +8,8 @@ # instance fields +.field public final action:I + .field public final context:Landroid/content/Context; .field public final itemId:Ljava/lang/String; @@ -20,7 +22,7 @@ # direct methods -.method public constructor (Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V +.method public constructor (Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;II)V .locals 0 invoke-direct {p0}, Ljava/lang/Object;->()V @@ -35,5 +37,7 @@ iput p5, p0, Lradiant/swipe/DynamicMediaQueueEvent;->mediaType:I + iput p6, p0, Lradiant/swipe/DynamicMediaQueueEvent;->action:I + return-void .end method diff --git a/patches/extension/radiant/swipe/DynamicTrackQueue.smali b/patches/extension/radiant/swipe/DynamicTrackQueue.smali index 5042d46..5dc629d 100644 --- a/patches/extension/radiant/swipe/DynamicTrackQueue.smali +++ b/patches/extension/radiant/swipe/DynamicTrackQueue.smali @@ -162,6 +162,17 @@ invoke-virtual {v9, v7}, Lcom/aspiro/wamp/playqueue/source/model/Source;->addSourceItem(Lcom/aspiro/wamp/model/MediaItem;)V + iget v0, p1, Lradiant/swipe/DynamicTrackQueueEvent;->action:I + + const/4 v2, 0x1 + + if-ne v0, v2, :append + + invoke-static {v1, v7, v8, v9}, Lradiant/swipe/QueueExecutor;->playNextTrack(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z + + goto :done + + :append invoke-static {v1, v7, v8, v9}, Lradiant/swipe/QueueExecutor;->track(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z :done diff --git a/patches/extension/radiant/swipe/DynamicTrackQueueAction.smali b/patches/extension/radiant/swipe/DynamicTrackQueueAction.smali index a138a82..d4a8b8b 100644 --- a/patches/extension/radiant/swipe/DynamicTrackQueueAction.smali +++ b/patches/extension/radiant/swipe/DynamicTrackQueueAction.smali @@ -39,8 +39,8 @@ # virtual methods -.method public invoke()Ljava/lang/Object; - .locals 7 +.method public invoke(I)Ljava/lang/Object; + .locals 8 iget-wide v1, p0, Lradiant/swipe/DynamicTrackQueueAction;->trackId:J @@ -73,12 +73,14 @@ iget-wide v4, p0, Lradiant/swipe/DynamicTrackQueueAction;->trackId:J - invoke-direct/range {v0 .. v5}, Lradiant/swipe/DynamicTrackQueueEvent;->(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;J)V + move v6, p1 + + invoke-direct/range {v0 .. v6}, Lradiant/swipe/DynamicTrackQueueEvent;->(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;JI)V :emit - iget-object v6, p0, Lradiant/swipe/DynamicTrackQueueAction;->callback:Lam0/l; + iget-object v7, p0, Lradiant/swipe/DynamicTrackQueueAction;->callback:Lam0/l; - invoke-interface {v6, v0}, Lam0/l;->invoke(Ljava/lang/Object;)Ljava/lang/Object; + invoke-interface {v7, v0}, Lam0/l;->invoke(Ljava/lang/Object;)Ljava/lang/Object; :done sget-object v0, Lkotlin/u;->a:Lkotlin/u; @@ -86,6 +88,18 @@ return-object v0 .end method +.method public invoke()Ljava/lang/Object; + .locals 1 + + const/4 v0, 0x2 + + invoke-virtual {p0, v0}, Lradiant/swipe/DynamicTrackQueueAction;->invoke(I)Ljava/lang/Object; + + move-result-object v0 + + return-object v0 +.end method + .method public setContext(Landroid/content/Context;)V .locals 0 diff --git a/patches/extension/radiant/swipe/DynamicTrackQueueEvent.smali b/patches/extension/radiant/swipe/DynamicTrackQueueEvent.smali index e666ca6..ab1ef10 100644 --- a/patches/extension/radiant/swipe/DynamicTrackQueueEvent.smali +++ b/patches/extension/radiant/swipe/DynamicTrackQueueEvent.smali @@ -7,6 +7,8 @@ # instance fields +.field public final action:I + .field public final context:Landroid/content/Context; .field public final moduleUuid:Ljava/lang/String; @@ -17,7 +19,7 @@ # direct methods -.method public constructor (Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;J)V +.method public constructor (Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;JI)V .locals 0 invoke-direct {p0}, Ljava/lang/Object;->()V @@ -30,5 +32,7 @@ iput-wide p4, p0, Lradiant/swipe/DynamicTrackQueueEvent;->trackId:J + iput p6, p0, Lradiant/swipe/DynamicTrackQueueEvent;->action:I + return-void .end method diff --git a/patches/extension/radiant/swipe/DynamicTrackResolver.smali b/patches/extension/radiant/swipe/DynamicTrackResolver.smali index 354fe10..c6f1cdc 100644 --- a/patches/extension/radiant/swipe/DynamicTrackResolver.smali +++ b/patches/extension/radiant/swipe/DynamicTrackResolver.smali @@ -472,7 +472,9 @@ # virtual methods .method public execute(Lradiant/swipe/QueueRequest;)V - .locals 8 + .locals 9 + + iget v8, p1, Lradiant/swipe/QueueRequest;->action:I iget-object v0, p1, Lradiant/swipe/QueueRequest;->media:Ljava/lang/Object; @@ -506,7 +508,7 @@ invoke-virtual {v1, v2}, Lradiant/swipe/AlbumItemQueueAction;->setContext(Landroid/content/Context;)V - invoke-virtual {v1}, Lradiant/swipe/AlbumItemQueueAction;->invoke()Ljava/lang/Object; + invoke-virtual {v1, v8}, Lradiant/swipe/AlbumItemQueueAction;->invoke(I)Ljava/lang/Object; return-void @@ -622,6 +624,15 @@ move-result-object v5 + const/4 v0, 0x1 + + if-ne v8, v0, :append_track + + invoke-static {v5, v1, v3, v4}, Lradiant/swipe/QueueExecutor;->playNextTrack(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z + + goto :done + + :append_track invoke-static {v5, v1, v3, v4}, Lradiant/swipe/QueueExecutor;->track(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z :done diff --git a/patches/extension/radiant/swipe/FavoriteTracksResolver.smali b/patches/extension/radiant/swipe/FavoriteTracksResolver.smali index 87bbd2b..b1ea2bc 100644 --- a/patches/extension/radiant/swipe/FavoriteTracksResolver.smali +++ b/patches/extension/radiant/swipe/FavoriteTracksResolver.smali @@ -63,7 +63,9 @@ check-cast v2, Lcom/aspiro/wamp/model/FavoriteTrack; - invoke-virtual {v0, v1, v2}, Lcom/aspiro/wamp/mycollection/subpages/favoritetracks/FavoriteTracksFragment;->Z(ILcom/aspiro/wamp/model/FavoriteTrack;)V + iget p1, p1, Lradiant/swipe/QueueRequest;->action:I + + invoke-virtual {v0, v1, v2, p1}, Lcom/aspiro/wamp/mycollection/subpages/favoritetracks/FavoriteTracksFragment;->Z(ILcom/aspiro/wamp/model/FavoriteTrack;I)V :done return-void diff --git a/patches/extension/radiant/swipe/FeedResolver.smali b/patches/extension/radiant/swipe/FeedResolver.smali index 74569f5..70def93 100644 --- a/patches/extension/radiant/swipe/FeedResolver.smali +++ b/patches/extension/radiant/swipe/FeedResolver.smali @@ -333,6 +333,8 @@ iget-object v1, p0, Lradiant/swipe/FeedResolver;->fragment:Ljava/lang/ref/WeakReference; + iget p0, p1, Lradiant/swipe/QueueRequest;->action:I + invoke-virtual {v1}, Ljava/lang/ref/Reference;->get()Ljava/lang/Object; move-result-object v1 @@ -408,6 +410,15 @@ check-cast v7, Lcom/aspiro/wamp/model/Playlist; + const/4 v0, 0x1 + + if-ne p0, v0, :append_playlist + + invoke-static {v3, v7, p1, v5}, Lradiant/swipe/QueueExecutor;->playNextPlaylist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V + + goto :done + + :append_playlist invoke-static {v3, v7, p1, v5}, Lradiant/swipe/QueueExecutor;->playlist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V goto :done @@ -427,6 +438,17 @@ check-cast v7, Lcom/aspiro/wamp/model/Album; + const/4 v0, 0x1 + + if-ne p0, v0, :append_album + + invoke-static {v3, v7, p1, v5, v6}, Lradiant/swipe/QueueExecutor;->playNextAlbum(Landroid/content/Context;Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; + + move-result-object v7 + + goto :retain + + :append_album invoke-static {v3, v7, p1, v5, v6}, Lradiant/swipe/QueueExecutor;->album(Landroid/content/Context;Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; move-result-object v7 @@ -436,6 +458,17 @@ :queue_mix check-cast v7, Lcom/aspiro/wamp/mix/model/Mix; + const/4 v0, 0x1 + + if-ne p0, v0, :append_mix + + invoke-static {v3, v7, p1, v5, v6}, Lradiant/swipe/QueueExecutor;->playNextMix(Landroid/content/Context;Lcom/aspiro/wamp/mix/model/Mix;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; + + move-result-object v7 + + goto :retain + + :append_mix invoke-static {v3, v7, p1, v5, v6}, Lradiant/swipe/QueueExecutor;->mix(Landroid/content/Context;Lcom/aspiro/wamp/mix/model/Mix;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; move-result-object v7 diff --git a/patches/extension/radiant/swipe/MyAlbumsResolver.smali b/patches/extension/radiant/swipe/MyAlbumsResolver.smali index 274aa7b..2f0f60c 100644 --- a/patches/extension/radiant/swipe/MyAlbumsResolver.smali +++ b/patches/extension/radiant/swipe/MyAlbumsResolver.smali @@ -122,6 +122,8 @@ .method public execute(Lradiant/swipe/QueueRequest;)V .locals 7 + iget v6, p1, Lradiant/swipe/QueueRequest;->action:I + invoke-direct {p0, p1}, Lradiant/swipe/MyAlbumsResolver;->current(Lradiant/swipe/QueueRequest;)Lzc/a; move-result-object p1 @@ -158,12 +160,24 @@ iget-object v5, v1, Lfd/c;->d:Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata; - iget-object v6, v1, Lfd/c;->c:Lcom/tidal/android/navigation/NavigationInfo; + iget-object p0, v1, Lfd/c;->c:Lcom/tidal/android/navigation/NavigationInfo; - invoke-static {v3, v4, v5, v6, v2}, Lradiant/swipe/QueueExecutor;->album(Landroid/content/Context;Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; + const/4 v1, 0x1 + + if-ne v6, v1, :append + + invoke-static {v3, v4, v5, p0, v2}, Lradiant/swipe/QueueExecutor;->playNextAlbum(Landroid/content/Context;Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; move-result-object p1 + goto :retain + + :append + invoke-static {v3, v4, v5, p0, v2}, Lradiant/swipe/QueueExecutor;->album(Landroid/content/Context;Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; + + move-result-object p1 + + :retain if-eqz p1, :done iget-object v0, v0, Lcom/aspiro/wamp/mycollection/subpages/albums/myalbums/MyAlbumsView;->j:Lio/reactivex/disposables/CompositeDisposable; diff --git a/patches/extension/radiant/swipe/MyMixesAndRadioResolver.smali b/patches/extension/radiant/swipe/MyMixesAndRadioResolver.smali index bfd52de..d2c651e 100644 --- a/patches/extension/radiant/swipe/MyMixesAndRadioResolver.smali +++ b/patches/extension/radiant/swipe/MyMixesAndRadioResolver.smali @@ -152,7 +152,9 @@ # virtual methods .method public execute(Lradiant/swipe/QueueRequest;)V - .locals 7 + .locals 8 + + iget v7, p1, Lradiant/swipe/QueueRequest;->action:I invoke-direct {p0, p1}, Lradiant/swipe/MyMixesAndRadioResolver;->current(Lradiant/swipe/QueueRequest;)Lve/a; @@ -194,12 +196,24 @@ invoke-direct {v5, v6}, Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;->(Ljava/lang/String;)V - iget-object v6, v1, Lpe/f;->b:Lcom/tidal/android/navigation/NavigationInfo; + iget-object p0, v1, Lpe/f;->b:Lcom/tidal/android/navigation/NavigationInfo; - invoke-static {v3, v4, v5, v6, v2}, Lradiant/swipe/QueueExecutor;->mix(Landroid/content/Context;Lcom/aspiro/wamp/mix/model/Mix;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; + const/4 v1, 0x1 + + if-ne v7, v1, :append + + invoke-static {v3, v4, v5, p0, v2}, Lradiant/swipe/QueueExecutor;->playNextMix(Landroid/content/Context;Lcom/aspiro/wamp/mix/model/Mix;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; move-result-object p1 + goto :retain + + :append + invoke-static {v3, v4, v5, p0, v2}, Lradiant/swipe/QueueExecutor;->mix(Landroid/content/Context;Lcom/aspiro/wamp/mix/model/Mix;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; + + move-result-object p1 + + :retain if-eqz p1, :done iget-object v0, v0, Lcom/aspiro/wamp/mycollection/subpages/mixesandradios/MyMixesAndRadioView;->h:Lio/reactivex/disposables/CompositeDisposable; diff --git a/patches/extension/radiant/swipe/MyPlaylistsResolver.smali b/patches/extension/radiant/swipe/MyPlaylistsResolver.smali index a436c07..26733d7 100644 --- a/patches/extension/radiant/swipe/MyPlaylistsResolver.smali +++ b/patches/extension/radiant/swipe/MyPlaylistsResolver.smali @@ -157,6 +157,8 @@ .method public execute(Lradiant/swipe/QueueRequest;)V .locals 6 + iget v5, p1, Lradiant/swipe/QueueRequest;->action:I + invoke-direct {p0, p1}, Lradiant/swipe/MyPlaylistsResolver;->current(Lradiant/swipe/QueueRequest;)Lcf/b; move-result-object p1 @@ -185,9 +187,18 @@ iget-object v4, v1, Lhf/c;->e:Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata; - iget-object v5, v1, Lhf/c;->d:Lcom/tidal/android/navigation/NavigationInfo; + iget-object p0, v1, Lhf/c;->d:Lcom/tidal/android/navigation/NavigationInfo; - invoke-static {v2, v3, v4, v5}, Lradiant/swipe/QueueExecutor;->playlist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V + const/4 v0, 0x1 + + if-ne v5, v0, :append + + invoke-static {v2, v3, v4, p0}, Lradiant/swipe/QueueExecutor;->playNextPlaylist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V + + goto :done + + :append + invoke-static {v2, v3, v4, p0}, Lradiant/swipe/QueueExecutor;->playlist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V :done return-void diff --git a/patches/extension/radiant/swipe/PlaylistItemsResolver.smali b/patches/extension/radiant/swipe/PlaylistItemsResolver.smali index a88b44b..cbfe02e 100644 --- a/patches/extension/radiant/swipe/PlaylistItemsResolver.smali +++ b/patches/extension/radiant/swipe/PlaylistItemsResolver.smali @@ -243,7 +243,9 @@ # virtual methods .method public execute(Lradiant/swipe/QueueRequest;)V - .locals 8 + .locals 9 + + iget v8, p1, Lradiant/swipe/QueueRequest;->action:I invoke-direct {p0, p1}, Lradiant/swipe/PlaylistItemsResolver;->current(Lradiant/swipe/QueueRequest;)Ljava/lang/Object; move-result-object v0 @@ -301,6 +303,15 @@ :append invoke-virtual {v2}, Landroid/view/View;->getContext()Landroid/content/Context; move-result-object v3 + const/4 v0, 0x1 + + if-ne v8, v0, :append_track + + invoke-static {v3, v1, v6, v7}, Lradiant/swipe/QueueExecutor;->playNextTrack(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z + + goto :done + + :append_track invoke-static {v3, v1, v6, v7}, Lradiant/swipe/QueueExecutor;->track(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z goto :done diff --git a/patches/extension/radiant/swipe/PublicPlaylistQueueAction.smali b/patches/extension/radiant/swipe/PublicPlaylistQueueAction.smali index ce5764f..30a4e17 100644 --- a/patches/extension/radiant/swipe/PublicPlaylistQueueAction.smali +++ b/patches/extension/radiant/swipe/PublicPlaylistQueueAction.smali @@ -39,8 +39,8 @@ # virtual methods -.method public invoke()Ljava/lang/Object; - .locals 6 +.method public invoke(I)Ljava/lang/Object; + .locals 7 iget-object v0, p0, Lradiant/swipe/PublicPlaylistQueueAction;->callback:Lam0/l; @@ -62,7 +62,9 @@ const/4 v5, 0x3 - invoke-direct/range {v0 .. v5}, Lradiant/swipe/DynamicMediaQueueEvent;->(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V + move v6, p1 + + invoke-direct/range {v0 .. v6}, Lradiant/swipe/DynamicMediaQueueEvent;->(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;II)V iget-object v1, p0, Lradiant/swipe/PublicPlaylistQueueAction;->callback:Lam0/l; @@ -74,6 +76,18 @@ return-object v0 .end method +.method public invoke()Ljava/lang/Object; + .locals 1 + + const/4 v0, 0x2 + + invoke-virtual {p0, v0}, Lradiant/swipe/PublicPlaylistQueueAction;->invoke(I)Ljava/lang/Object; + + move-result-object v0 + + return-object v0 +.end method + .method public setContext(Landroid/content/Context;)V .locals 0 diff --git a/patches/extension/radiant/swipe/QueueExecutor.smali b/patches/extension/radiant/swipe/QueueExecutor.smali index 2d39530..5d74e8b 100644 --- a/patches/extension/radiant/swipe/QueueExecutor.smali +++ b/patches/extension/radiant/swipe/QueueExecutor.smali @@ -4,6 +4,41 @@ # direct methods +.method private static activity(Landroid/content/Context;)Landroidx/fragment/app/FragmentActivity; + .locals 1 + + :unwrap + instance-of v0, p0, Landroidx/fragment/app/FragmentActivity; + + if-nez v0, :ready + + instance-of v0, p0, Landroid/content/ContextWrapper; + + if-eqz v0, :invalid + + check-cast p0, Landroid/content/ContextWrapper; + + invoke-virtual {p0}, Landroid/content/ContextWrapper;->getBaseContext()Landroid/content/Context; + + move-result-object v0 + + if-eq v0, p0, :invalid + + move-object p0, v0 + + goto :unwrap + + :ready + check-cast p0, Landroidx/fragment/app/FragmentActivity; + + return-object p0 + + :invalid + const/4 p0, 0x0 + + return-object p0 +.end method + .method public static album(Landroid/content/Context;Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; .locals 8 @@ -304,6 +339,210 @@ return-void .end method +.method public static playNextAlbum(Landroid/content/Context;Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; + .locals 3 + + const/4 v0, 0x0 + + if-eqz p1, :done + + invoke-static {}, Lradiant/swipe/QueueExecutor;->hasActiveQueue()Z + + move-result v1 + + if-eqz v1, :play + + if-eqz p4, :done + + invoke-static {p0}, Lradiant/swipe/QueueExecutor;->activity(Landroid/content/Context;)Landroidx/fragment/app/FragmentActivity; + + move-result-object p0 + + if-eqz p0, :done + + iget-object v1, p4, Lh4/a;->b:Lo3/a$a; + + invoke-interface {v1, p1, p2, p3}, Lo3/a$a;->a(Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)Lo3/a; + + move-result-object v1 + + iget-object v1, v1, Lo3/a;->d:Lc3/l$a; + + invoke-interface {v1, p1, p2, p3}, Lc3/l$a;->a(Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)Lc3/l; + + move-result-object p1 + + invoke-virtual {p1, p0}, Lc3/l;->b(Landroidx/fragment/app/FragmentActivity;)V + + goto :done + + :play + invoke-static {p0, p1, p2, p3, p4}, Lradiant/swipe/QueueExecutor;->album(Landroid/content/Context;Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; + + move-result-object v0 + + :done + return-object v0 +.end method + +.method public static playNextMix(Landroid/content/Context;Lcom/aspiro/wamp/mix/model/Mix;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; + .locals 2 + + const/4 v0, 0x0 + + if-eqz p1, :done + + invoke-static {}, Lradiant/swipe/QueueExecutor;->hasActiveQueue()Z + + move-result v1 + + if-eqz v1, :play + + if-eqz p4, :done + + invoke-static {p0}, Lradiant/swipe/QueueExecutor;->activity(Landroid/content/Context;)Landroidx/fragment/app/FragmentActivity; + + move-result-object p0 + + if-eqz p0, :done + + iget-object v1, p4, Lh4/a;->h:Lu3/a$a; + + invoke-interface {v1, p1, p2, p3}, Lu3/a$a;->a(Lcom/aspiro/wamp/mix/model/Mix;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)Lu3/a; + + move-result-object v1 + + iget-object v1, v1, Lu3/a;->d:Lj3/q$a; + + invoke-interface {v1, p1, p2, p3}, Lj3/q$a;->a(Lcom/aspiro/wamp/mix/model/Mix;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)Lj3/q; + + move-result-object p1 + + invoke-virtual {p1, p0}, Lj3/q;->b(Landroidx/fragment/app/FragmentActivity;)V + + goto :done + + :play + invoke-static {p0, p1, p2, p3, p4}, Lradiant/swipe/QueueExecutor;->mix(Landroid/content/Context;Lcom/aspiro/wamp/mix/model/Mix;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; + + move-result-object v0 + + :done + return-object v0 +.end method + +.method public static playNextPlaylist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V + .locals 2 + + if-eqz p1, :done + + invoke-virtual {p1}, Lcom/aspiro/wamp/model/Playlist;->getNumberOfItems()I + + move-result v0 + + if-lez v0, :done + + invoke-static {}, Lradiant/swipe/QueueExecutor;->hasActiveQueue()Z + + move-result v0 + + if-eqz v0, :play + + invoke-static {p0}, Lradiant/swipe/QueueExecutor;->activity(Landroid/content/Context;)Landroidx/fragment/app/FragmentActivity; + + move-result-object p0 + + if-eqz p0, :done + + invoke-static {}, Lcom/aspiro/wamp/App$a;->a()Lcom/aspiro/wamp/App; + + move-result-object v0 + + invoke-virtual {v0}, Lcom/aspiro/wamp/App;->e()Le5/c; + + move-result-object v0 + + check-cast v0, Le5/z$n2; + + iget-object v0, v0, Le5/z$n2;->v8:Ldagger/internal/f; + + invoke-interface {v0}, Lql0/a;->get()Ljava/lang/Object; + + move-result-object v0 + + check-cast v0, Lcom/aspiro/wamp/contextmenu/item/playlist/u$a; + + invoke-interface {v0, p1, p2, p3}, Lcom/aspiro/wamp/contextmenu/item/playlist/u$a;->a(Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)Lcom/aspiro/wamp/contextmenu/item/playlist/u; + + move-result-object p1 + + invoke-virtual {p1, p0}, Lcom/aspiro/wamp/contextmenu/item/playlist/u;->b(Landroidx/fragment/app/FragmentActivity;)V + + goto :done + + :play + invoke-static {p0, p1, p2, p3}, Lradiant/swipe/QueueExecutor;->playlist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V + + :done + return-void +.end method + +.method public static playNextTrack(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z + .locals 2 + + const/4 v0, 0x0 + + if-eqz p1, :done + + invoke-static {}, Lradiant/swipe/QueueExecutor;->hasActiveQueue()Z + + move-result v1 + + if-eqz v1, :play + + invoke-static {p0}, Lradiant/swipe/QueueExecutor;->activity(Landroid/content/Context;)Landroidx/fragment/app/FragmentActivity; + + move-result-object p0 + + if-eqz p0, :done + + invoke-static {}, Lcom/aspiro/wamp/App$a;->a()Lcom/aspiro/wamp/App; + + move-result-object v1 + + invoke-virtual {v1}, Lcom/aspiro/wamp/App;->e()Le5/c; + + move-result-object v1 + + check-cast v1, Le5/z$n2; + + iget-object v1, v1, Le5/z$n2;->K9:Ldagger/internal/f; + + invoke-interface {v1}, Lql0/a;->get()Ljava/lang/Object; + + move-result-object v1 + + check-cast v1, Lm3/i$a; + + invoke-interface {v1, p1, p2, p3}, Lm3/i$a;->a(Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Lm3/i; + + move-result-object p1 + + invoke-virtual {p1, p0}, Lm3/i;->b(Landroidx/fragment/app/FragmentActivity;)V + + const/4 v0, 0x1 + + goto :done + + :play + invoke-static {p0, p1, p2, p3}, Lradiant/swipe/QueueExecutor;->track(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z + + move-result v0 + + :done + return v0 +.end method + .method public static track(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z .locals 2 diff --git a/patches/extension/radiant/swipe/QueueRequest.smali b/patches/extension/radiant/swipe/QueueRequest.smali index 566ba23..4b9d9a6 100644 --- a/patches/extension/radiant/swipe/QueueRequest.smali +++ b/patches/extension/radiant/swipe/QueueRequest.smali @@ -2,8 +2,17 @@ .super Ljava/lang/Object; .source "QueueRequest.smali" +# static fields +.field public static final ACTION_NONE:I = 0x0 + +.field public static final ACTION_PLAY_NEXT:I = 0x1 + +.field public static final ACTION_ADD_TO_QUEUE:I = 0x2 + # instance fields +.field public action:I + .field public final id:I .field public final media:Ljava/lang/Object; diff --git a/patches/extension/radiant/swipe/SearchAlbumsResolver.smali b/patches/extension/radiant/swipe/SearchAlbumsResolver.smali index 28920bf..75766cb 100644 --- a/patches/extension/radiant/swipe/SearchAlbumsResolver.smali +++ b/patches/extension/radiant/swipe/SearchAlbumsResolver.smali @@ -122,6 +122,8 @@ .method public execute(Lradiant/swipe/QueueRequest;)V .locals 7 + iget v6, p1, Lradiant/swipe/QueueRequest;->action:I + invoke-direct {p0, p1}, Lradiant/swipe/SearchAlbumsResolver;->current(Lradiant/swipe/QueueRequest;)Lzc/a; move-result-object p1 @@ -158,12 +160,24 @@ iget-object v5, v1, Lld/c;->d:Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata; - iget-object v6, v1, Lld/c;->c:Lcom/tidal/android/navigation/NavigationInfo; + iget-object p0, v1, Lld/c;->c:Lcom/tidal/android/navigation/NavigationInfo; - invoke-static {v3, v4, v5, v6, v2}, Lradiant/swipe/QueueExecutor;->album(Landroid/content/Context;Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; + const/4 v1, 0x1 + + if-ne v6, v1, :append + + invoke-static {v3, v4, v5, p0, v2}, Lradiant/swipe/QueueExecutor;->playNextAlbum(Landroid/content/Context;Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; move-result-object p1 + goto :retain + + :append + invoke-static {v3, v4, v5, p0, v2}, Lradiant/swipe/QueueExecutor;->album(Landroid/content/Context;Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; + + move-result-object p1 + + :retain if-eqz p1, :done iget-object v0, v0, Lcom/aspiro/wamp/mycollection/subpages/albums/search/SearchAlbumsView;->g:Lio/reactivex/disposables/CompositeDisposable; diff --git a/patches/extension/radiant/swipe/SearchPlaylistsResolver.smali b/patches/extension/radiant/swipe/SearchPlaylistsResolver.smali index 2c31db2..f5e496e 100644 --- a/patches/extension/radiant/swipe/SearchPlaylistsResolver.smali +++ b/patches/extension/radiant/swipe/SearchPlaylistsResolver.smali @@ -155,7 +155,9 @@ # virtual methods .method public execute(Lradiant/swipe/QueueRequest;)V - .locals 6 + .locals 7 + + iget v6, p1, Lradiant/swipe/QueueRequest;->action:I invoke-direct {p0, p1}, Lradiant/swipe/SearchPlaylistsResolver;->current(Lradiant/swipe/QueueRequest;)Lcf/b; @@ -189,9 +191,18 @@ invoke-direct {v4, v5}, Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;->(Ljava/lang/String;)V - iget-object v5, v1, Lzf/c;->c:Lcom/tidal/android/navigation/NavigationInfo; + iget-object p0, v1, Lzf/c;->c:Lcom/tidal/android/navigation/NavigationInfo; - invoke-static {v2, v3, v4, v5}, Lradiant/swipe/QueueExecutor;->playlist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V + const/4 v0, 0x1 + + if-ne v6, v0, :append + + invoke-static {v2, v3, v4, p0}, Lradiant/swipe/QueueExecutor;->playNextPlaylist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V + + goto :done + + :append + invoke-static {v2, v3, v4, p0}, Lradiant/swipe/QueueExecutor;->playlist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V :done return-void diff --git a/patches/extension/radiant/swipe/SuggestionsResolver.smali b/patches/extension/radiant/swipe/SuggestionsResolver.smali index 5c214e3..599c249 100644 --- a/patches/extension/radiant/swipe/SuggestionsResolver.smali +++ b/patches/extension/radiant/swipe/SuggestionsResolver.smali @@ -303,7 +303,7 @@ # virtual methods .method public execute(Lradiant/swipe/QueueRequest;)V - .locals 4 + .locals 7 invoke-direct {p0, p1}, Lradiant/swipe/SuggestionsResolver;->current(Lradiant/swipe/QueueRequest;)Lcom/aspiro/wamp/model/SuggestedMediaItem$SuggestedTrack; @@ -311,18 +311,75 @@ if-eqz v0, :done - iget-object v0, p0, Lradiant/swipe/SuggestionsResolver;->host:Ljava/lang/ref/WeakReference; - - invoke-virtual {v0}, Ljava/lang/ref/Reference;->get()Ljava/lang/Object; - - move-result-object v0 - invoke-direct {p0}, Lradiant/swipe/SuggestionsResolver;->viewModel()Lcom/aspiro/wamp/nowplaying/view/suggestions/l; move-result-object v1 if-eqz v1, :done + iget v2, p1, Lradiant/swipe/QueueRequest;->action:I + + const/4 v3, 0x1 + + if-ne v2, v3, :default_action + + invoke-static {}, Lradiant/swipe/QueueExecutor;->hasActiveQueue()Z + + move-result v2 + + if-eqz v2, :default_action + + invoke-virtual {v0}, Lcom/aspiro/wamp/model/SuggestedMediaItem$SuggestedTrack;->getMediaItem()Lcom/aspiro/wamp/model/Track; + + move-result-object v2 + + invoke-virtual {v2}, Lcom/aspiro/wamp/model/MediaItem;->getId()I + + move-result v3 + + invoke-static {v3}, Ljava/lang/String;->valueOf(I)Ljava/lang/String; + + move-result-object v3 + + new-instance v4, Lcom/aspiro/wamp/model/MediaItemParent; + + invoke-direct {v4, v2}, Lcom/aspiro/wamp/model/MediaItemParent;->(Lcom/aspiro/wamp/model/MediaItem;)V + + invoke-static {v4}, Lkotlin/collections/u;->h(Ljava/lang/Object;)Ljava/util/List; + + move-result-object v4 + + check-cast v1, Lcom/aspiro/wamp/nowplaying/view/suggestions/a1; + + iget-object v5, v1, Lcom/aspiro/wamp/nowplaying/view/suggestions/a1;->j:Lcom/tidal/android/navigation/NavigationInfo; + + invoke-static {v3, v4, v5}, Lcom/aspiro/wamp/playqueue/source/model/b;->p(Ljava/lang/String;Ljava/util/List;Lcom/tidal/android/navigation/NavigationInfo;)Lcom/aspiro/wamp/playqueue/source/model/ItemSource; + + move-result-object v6 + + new-instance v4, Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata; + + const-string v3, "suggestions" + + invoke-direct {v4, v3}, Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;->(Ljava/lang/String;)V + + iget-object v0, p0, Lradiant/swipe/SuggestionsResolver;->host:Ljava/lang/ref/WeakReference; + + invoke-virtual {v0}, Ljava/lang/ref/Reference;->get()Ljava/lang/Object; + + move-result-object v0 + + check-cast v0, Landroidx/fragment/app/Fragment; + + invoke-virtual {v0}, Landroidx/fragment/app/Fragment;->getContext()Landroid/content/Context; + + move-result-object v0 + + invoke-static {v0, v2, v4, v6}, Lradiant/swipe/QueueExecutor;->playNextTrack(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z + + goto :done + + :default_action iget p1, p1, Lradiant/swipe/QueueRequest;->position:I invoke-static {}, Lradiant/swipe/QueueExecutor;->hasActiveQueue()Z diff --git a/patches/extension/radiant/swipe/UnifiedSearchResolver.smali b/patches/extension/radiant/swipe/UnifiedSearchResolver.smali index 96c01f0..8fbaa22 100644 --- a/patches/extension/radiant/swipe/UnifiedSearchResolver.smali +++ b/patches/extension/radiant/swipe/UnifiedSearchResolver.smali @@ -212,7 +212,9 @@ # virtual methods .method public execute(Lradiant/swipe/QueueRequest;)V - .locals 8 + .locals 9 + + iget v8, p1, Lradiant/swipe/QueueRequest;->action:I invoke-direct {p0, p1}, Lradiant/swipe/UnifiedSearchResolver;->current(Lradiant/swipe/QueueRequest;)Ljava/lang/Object; move-result-object v0 @@ -271,6 +273,15 @@ invoke-virtual {p1, v6}, Lcom/aspiro/wamp/playqueue/source/model/Source;->addSourceItem(Lcom/aspiro/wamp/model/MediaItem;)V invoke-virtual {v1}, Landroidx/fragment/app/Fragment;->getContext()Landroid/content/Context; move-result-object v0 + const/4 v2, 0x1 + + if-ne v8, v2, :queue_append_track + + invoke-static {v0, v6, v3, p1}, Lradiant/swipe/QueueExecutor;->playNextTrack(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z + + goto :done + + :queue_append_track invoke-static {v0, v6, v3, p1}, Lradiant/swipe/QueueExecutor;->track(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z goto :done @@ -285,6 +296,15 @@ iget-object v6, v0, Lbm/a;->a:Lcom/aspiro/wamp/model/Album; invoke-virtual {v1}, Landroidx/fragment/app/Fragment;->getContext()Landroid/content/Context; move-result-object v7 + const/4 v0, 0x1 + + if-ne v8, v0, :append_album + + invoke-static {v7, v6, v3, v4, v5}, Lradiant/swipe/QueueExecutor;->playNextAlbum(Landroid/content/Context;Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; + + goto :done + + :append_album invoke-static {v7, v6, v3, v4, v5}, Lradiant/swipe/QueueExecutor;->album(Landroid/content/Context;Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; move-result-object v0 if-eqz v0, :done @@ -299,6 +319,15 @@ iget-object v5, v0, Lbm/g;->a:Lcom/aspiro/wamp/model/Playlist; invoke-virtual {v1}, Landroidx/fragment/app/Fragment;->getContext()Landroid/content/Context; move-result-object v6 + const/4 v0, 0x1 + + if-ne v8, v0, :append_playlist + + invoke-static {v6, v5, v3, v4}, Lradiant/swipe/QueueExecutor;->playNextPlaylist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V + + goto :done + + :append_playlist invoke-static {v6, v5, v3, v4}, Lradiant/swipe/QueueExecutor;->playlist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V goto :done @@ -313,6 +342,15 @@ iget-object v6, v0, Lbm/f;->a:Lcom/aspiro/wamp/mix/model/Mix; invoke-virtual {v1}, Landroidx/fragment/app/Fragment;->getContext()Landroid/content/Context; move-result-object v7 + const/4 v0, 0x1 + + if-ne v8, v0, :append_mix + + invoke-static {v7, v6, v3, v4, v5}, Lradiant/swipe/QueueExecutor;->playNextMix(Landroid/content/Context;Lcom/aspiro/wamp/mix/model/Mix;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; + + goto :done + + :append_mix invoke-static {v7, v6, v3, v4, v5}, Lradiant/swipe/QueueExecutor;->mix(Landroid/content/Context;Lcom/aspiro/wamp/mix/model/Mix;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)Lio/reactivex/disposables/Disposable; move-result-object v0 if-eqz v0, :done diff --git a/patches/extension/radiant/swipe/VerticalMediaQueueAction.smali b/patches/extension/radiant/swipe/VerticalMediaQueueAction.smali index 8ebf84f..bd8cd53 100644 --- a/patches/extension/radiant/swipe/VerticalMediaQueueAction.smali +++ b/patches/extension/radiant/swipe/VerticalMediaQueueAction.smali @@ -198,12 +198,12 @@ # virtual methods -.method public invoke()Ljava/lang/Object; - .locals 7 +.method public invoke(I)Ljava/lang/Object; + .locals 8 - iget-object v6, p0, Lradiant/swipe/VerticalMediaQueueAction;->callback:Lam0/l; + iget-object v7, p0, Lradiant/swipe/VerticalMediaQueueAction;->callback:Lam0/l; - if-eqz v6, :done + if-eqz v7, :done iget-object v4, p0, Lradiant/swipe/VerticalMediaQueueAction;->itemId:Ljava/lang/String; @@ -245,12 +245,14 @@ iget-object v3, p0, Lradiant/swipe/VerticalMediaQueueAction;->moduleUuid:Ljava/lang/String; - invoke-direct/range {v0 .. v5}, Lradiant/swipe/DynamicMediaQueueEvent;->(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V + move v6, p1 + + invoke-direct/range {v0 .. v6}, Lradiant/swipe/DynamicMediaQueueEvent;->(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;II)V move-object v1, v0 :emit - invoke-interface {v6, v1}, Lam0/l;->invoke(Ljava/lang/Object;)Ljava/lang/Object; + invoke-interface {v7, v1}, Lam0/l;->invoke(Ljava/lang/Object;)Ljava/lang/Object; :done sget-object v0, Lkotlin/u;->a:Lkotlin/u; @@ -258,6 +260,18 @@ return-object v0 .end method +.method public invoke()Ljava/lang/Object; + .locals 1 + + const/4 v0, 0x2 + + invoke-virtual {p0, v0}, Lradiant/swipe/VerticalMediaQueueAction;->invoke(I)Ljava/lang/Object; + + move-result-object v0 + + return-object v0 +.end method + .method public setContext(Landroid/content/Context;)V .locals 0 diff --git a/patches/extension/radiant/swipe/ViewAllTrackQueue.smali b/patches/extension/radiant/swipe/ViewAllTrackQueue.smali index 8c63dfe..c38d57f 100644 --- a/patches/extension/radiant/swipe/ViewAllTrackQueue.smali +++ b/patches/extension/radiant/swipe/ViewAllTrackQueue.smali @@ -8,7 +8,7 @@ # direct methods -.method public static handle(Lcom/tidal/android/feature/viewall/ui/ViewAllScreenViewModel;Landroid/content/Context;J)V +.method public static handle(Lcom/tidal/android/feature/viewall/ui/ViewAllScreenViewModel;Landroid/content/Context;JI)V .locals 10 if-eqz p0, :done @@ -101,6 +101,15 @@ invoke-virtual {v9, v3}, Lcom/aspiro/wamp/playqueue/source/model/Source;->addSourceItem(Lcom/aspiro/wamp/model/MediaItem;)V + const/4 v0, 0x1 + + if-ne p4, v0, :append + + invoke-static {p1, v3, v4, v9}, Lradiant/swipe/QueueExecutor;->playNextTrack(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z + + goto :done + + :append invoke-static {p1, v3, v4, v9}, Lradiant/swipe/QueueExecutor;->track(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z :done @@ -108,7 +117,7 @@ .end method .method public static handleEvent(Lcom/tidal/android/feature/viewall/ui/ViewAllScreenViewModel;Lcom/tidal/android/feature/viewall/ui/e;)Z - .locals 5 + .locals 6 instance-of v0, p1, Lcom/tidal/android/feature/viewall/ui/e$c; @@ -138,15 +147,39 @@ move-result-object v0 + const/16 v1, 0x3a + + invoke-virtual {v0, v1}, Ljava/lang/String;->indexOf(I)I + + move-result v1 + + if-lez v1, :not_handled + + const/4 v2, 0x0 + + invoke-virtual {v0, v2, v1}, Ljava/lang/String;->substring(II)Ljava/lang/String; + + move-result-object v2 + + invoke-static {v2}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I + + move-result v4 + + add-int/lit8 v1, v1, 0x1 + + invoke-virtual {v0, v1}, Ljava/lang/String;->substring(I)Ljava/lang/String; + + move-result-object v0 + invoke-static {v0}, Ljava/lang/Long;->parseLong(Ljava/lang/String;)J move-result-wide v1 sget-object v3, Lradiant/swipe/ViewAllTrackQueue;->context:Ljava/lang/ref/WeakReference; - const/4 v4, 0x0 + const/4 v5, 0x0 - sput-object v4, Lradiant/swipe/ViewAllTrackQueue;->context:Ljava/lang/ref/WeakReference; + sput-object v5, Lradiant/swipe/ViewAllTrackQueue;->context:Ljava/lang/ref/WeakReference; if-eqz v3, :handled @@ -156,7 +189,7 @@ check-cast v3, Landroid/content/Context; - invoke-static {p0, v3, v1, v2}, Lradiant/swipe/ViewAllTrackQueue;->handle(Lcom/tidal/android/feature/viewall/ui/ViewAllScreenViewModel;Landroid/content/Context;J)V + invoke-static {p0, v3, v1, v2, v4}, Lradiant/swipe/ViewAllTrackQueue;->handle(Lcom/tidal/android/feature/viewall/ui/ViewAllScreenViewModel;Landroid/content/Context;JI)V :handled const/4 v0, 0x1 @@ -169,7 +202,7 @@ return v0 .end method -.method public static marker(J)Ljava/lang/String; +.method public static marker(JI)Ljava/lang/String; .locals 2 new-instance v0, Ljava/lang/StringBuilder; @@ -178,6 +211,12 @@ invoke-direct {v0, v1}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V + invoke-virtual {v0, p2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; + + const/16 v1, 0x3a + + invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder; + invoke-virtual {v0, p0, p1}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder; invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; diff --git a/patches/extension/radiant/swipe/ViewAllTrackQueueAction.smali b/patches/extension/radiant/swipe/ViewAllTrackQueueAction.smali index cf8dee1..9dfa506 100644 --- a/patches/extension/radiant/swipe/ViewAllTrackQueueAction.smali +++ b/patches/extension/radiant/swipe/ViewAllTrackQueueAction.smali @@ -31,7 +31,7 @@ # virtual methods -.method public invoke()Ljava/lang/Object; +.method public invoke(I)Ljava/lang/Object; .locals 5 iget-object v0, p0, Lradiant/swipe/ViewAllTrackQueueAction;->callback:Lam0/l; @@ -52,7 +52,7 @@ invoke-static {v3}, Lradiant/swipe/ViewAllTrackQueue;->setContext(Landroid/content/Context;)V - invoke-static {v1, v2}, Lradiant/swipe/ViewAllTrackQueue;->marker(J)Ljava/lang/String; + invoke-static {v1, v2, p1}, Lradiant/swipe/ViewAllTrackQueue;->marker(JI)Ljava/lang/String; move-result-object v3 @@ -80,6 +80,18 @@ return-object v0 .end method +.method public invoke()Ljava/lang/Object; + .locals 1 + + const/4 v0, 0x2 + + invoke-virtual {p0, v0}, Lradiant/swipe/ViewAllTrackQueueAction;->invoke(I)Ljava/lang/Object; + + move-result-object v0 + + return-object v0 +.end method + .method public setContext(Landroid/content/Context;)V .locals 0 diff --git a/patches/manifest.json b/patches/manifest.json index b72add9..c6f2076 100644 --- a/patches/manifest.json +++ b/patches/manifest.json @@ -476,26 +476,75 @@ "advancedOptions": [ { "type": "choice", - "key": "swipe_direction", - "title": "Swipe Direction", - "description": "Choose direction of the swipe gesture", + "key": "left_action", + "title": "Left Swipe Action", + "description": "Choose the action for a left swipe", "entries": [ - "Left", - "Right" + "Disabled", + "Play next", + "Add to queue" + ], + "values": [ + "0x0", + "0x1", + "0x2" + ], + "defaultIndex": 2, + "distinctFrom": "right_action", + "token": "RL_SWIPE_TO_QUEUE_LEFT_ACTION" + }, + { + "type": "choice", + "key": "right_action", + "title": "Right Swipe Action", + "description": "Choose the action for a right swipe", + "entries": [ + "Disabled", + "Play next", + "Add to queue" + ], + "values": [ + "0x0", + "0x1", + "0x2" + ], + "defaultIndex": 0, + "distinctFrom": "left_action", + "token": "RL_SWIPE_TO_QUEUE_RIGHT_ACTION" + }, + { + "type": "choice", + "key": "remove_direction", + "title": "Remove Track from Queue", + "description": "Choose the swipe direction used to remove items from the play queue", + "entries": [ + "Left swipe", + "Right swipe", + "Both" ], "values": [ "0x4", - "0x8" + "0x8", + "0xc" ], "defaultIndex": 0, - "token": "RL_SWIPE_TO_QUEUE_DIRECTION" + "token": "RL_SWIPE_TO_QUEUE_REMOVE_DIRECTION" }, { "type": "color", "key": "background_color", - "title": "Background Color", + "title": "Add to Queue Color", + "default": -14748953, + "defaultLabel": "Cyan", + "token": "RL_SWIPE_TO_QUEUE_ADD_COLOR" + }, + { + "type": "color", + "key": "play_next_color", + "title": "Play Next Color", "default": -14749031, - "token": "RL_SWIPE_TO_QUEUE_COLOR" + "defaultLabel": "Green", + "token": "RL_SWIPE_TO_QUEUE_PLAY_NEXT_COLOR" } ] }, diff --git a/patches/swipe-to-queue.patch b/patches/swipe-to-queue.patch index fe4e1e6..3eedd77 100644 --- a/patches/swipe-to-queue.patch +++ b/patches/swipe-to-queue.patch @@ -1,6 +1,6 @@ --- a/com/aspiro/wamp/mycollection/subpages/favoritetracks/FavoriteTracksFragment.smali +++ b/com/aspiro/wamp/mycollection/subpages/favoritetracks/FavoriteTracksFragment.smali -@@ -107,6 +107,124 @@ +@@ -107,6 +107,143 @@ .end method @@ -54,7 +54,7 @@ + return v0 +.end method + -+.method public final Z(ILcom/aspiro/wamp/model/FavoriteTrack;)V ++.method public final Z(ILcom/aspiro/wamp/model/FavoriteTrack;I)V + .locals 6 + + move v5, p1 @@ -102,10 +102,29 @@ + + move-object v2, p2 + ++ const/4 p1, 0x1 ++ ++ if-ne p3, p1, :rl_favorite_append ++ ++ invoke-static {}, Lradiant/swipe/QueueExecutor;->hasActiveQueue()Z ++ move-result p1 ++ if-nez p1, :rl_favorite_play_next ++ const/4 v0, 0x0 ++ goto :rl_favorite_result ++ :rl_favorite_play_next ++ invoke-static {v1, v2, v3, v4}, Lradiant/swipe/QueueExecutor;->playNextTrack(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z ++ ++ move-result v0 ++ ++ goto :rl_favorite_result ++ ++ :rl_favorite_append + invoke-virtual/range {v0 .. v4}, Lh4/a;->q(Landroidx/fragment/app/FragmentActivity;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)Z + + move-result v0 + ++ :rl_favorite_result ++ + if-nez v0, :done + + # if nothing is playing, call row click handler to play the track directly instead of adding it to queue @@ -125,7 +144,7 @@ # virtual methods .method public final M()Ln8/b; .locals 1 -@@ -2265,9 +2418,16 @@ +@@ -2265,9 +2437,16 @@ iput-object p0, p1, Lo4/g;->e:Lo4/g$e; .line 224 @@ -334,7 +353,7 @@ .line 32 .line 33 - const/4 v1, 0x4 -+ const/16 v1, __RL_SWIPE_TO_QUEUE_DIRECTION__ ++ const/16 v1, __RL_SWIPE_TO_QUEUE_REMOVE_DIRECTION__ .line 34 :cond_1 @@ -393,7 +412,7 @@ --- a/com/aspiro/wamp/mycollection/subpages/albums/search/SearchAlbumsView.smali +++ b/com/aspiro/wamp/mycollection/subpages/albums/search/SearchAlbumsView.smali -@@ -1176,6 +1176,8 @@ +@@ -1176,8 +1176,10 @@ .line 69 .line 70 .line 71 @@ -406,7 +425,7 @@ .line 74 --- a/com/aspiro/wamp/playlist/ui/fragment/PlaylistFragment.smali +++ b/com/aspiro/wamp/playlist/ui/fragment/PlaylistFragment.smali -@@ -5193,6 +5193,8 @@ +@@ -5193,8 +5193,10 @@ .line 127 .line 128 .line 129 @@ -419,7 +438,7 @@ .line 132 --- a/com/aspiro/wamp/search/v2/UnifiedSearchView.smali +++ b/com/aspiro/wamp/search/v2/UnifiedSearchView.smali -@@ -1596,6 +1596,8 @@ +@@ -1596,8 +1596,10 @@ .line 60 .line 61 .line 62 @@ -432,7 +451,7 @@ .line 65 --- a/com/aspiro/wamp/mycollection/subpages/playlists/searchplaylists/SearchPlaylistsView.smali +++ b/com/aspiro/wamp/mycollection/subpages/playlists/searchplaylists/SearchPlaylistsView.smali -@@ -1204,6 +1204,8 @@ +@@ -1204,8 +1204,10 @@ .line 69 .line 70 .line 71 @@ -458,7 +477,7 @@ .line 41 --- a/com/aspiro/wamp/nowplaying/view/suggestions/o0.smali +++ b/com/aspiro/wamp/nowplaying/view/suggestions/o0.smali -@@ -876,8 +876,10 @@ +@@ -876,7 +876,9 @@ .line 96 invoke-virtual {v0, p2}, Landroidx/recyclerview/widget/RecyclerView;->setAdapter(Landroidx/recyclerview/widget/RecyclerView$Adapter;)V