feat(swipe to queue): add to playlist action + both directions for queue track removal + options UI rework

This commit is contained in:
Se7en-dev committed 2026-09-03 11:36:22 +02:00
1 parent 2cb51576df
commit 49693ca36b
36 files changed
+953 -151

No files matched your search

@@ -471,25 +471,27 @@
"radiant/swipe/SuggestionsResolver.smali" "radiant/swipe/SuggestionsResolver.smali"
], ],
"title": "Swipe to Queue", "title": "Swipe to Queue",
"description": "Swipe on tracks/albums/playlists to add them to the play queue", "description": "Swipe on tracks/albums/playlists to add them to the play queue (and more actions)",
"default": false, "default": false,
"advancedOptions": [ "advancedOptions": [
{ {
"type": "choice", "type": "choice",
"key": "left_action", "key": "left_action",
"title": "Left Swipe Action", "title": "Left Swipe Action",
"description": "Choose the action for a left swipe",
"entries": [ "entries": [
"Disabled", "Disabled",
"Play next", "Play next",
"Add to queue" "Add to queue",
"Add to playlist"
], ],
"values": [ "values": [
"0x0", "0x0",
"0x1", "0x1",
"0x2" "0x2",
"0x3"
], ],
"defaultIndex": 2, "defaultIndex": 2,
"inline": true,
"distinctFrom": "right_action", "distinctFrom": "right_action",
"token": "RL_SWIPE_TO_QUEUE_LEFT_ACTION" "token": "RL_SWIPE_TO_QUEUE_LEFT_ACTION"
}, },
@@ -497,18 +499,20 @@
"type": "choice", "type": "choice",
"key": "right_action", "key": "right_action",
"title": "Right Swipe Action", "title": "Right Swipe Action",
"description": "Choose the action for a right swipe",
"entries": [ "entries": [
"Disabled", "Disabled",
"Play next", "Play next",
"Add to queue" "Add to queue",
"Add to playlist"
], ],
"values": [ "values": [
"0x0", "0x0",
"0x1", "0x1",
"0x2" "0x2",
"0x3"
], ],
"defaultIndex": 0, "defaultIndex": 0,
"inline": true,
"distinctFrom": "left_action", "distinctFrom": "left_action",
"token": "RL_SWIPE_TO_QUEUE_RIGHT_ACTION" "token": "RL_SWIPE_TO_QUEUE_RIGHT_ACTION"
}, },
@@ -516,11 +520,10 @@
"type": "choice", "type": "choice",
"key": "remove_direction", "key": "remove_direction",
"title": "Remove Track from Queue", "title": "Remove Track from Queue",
"description": "Choose the swipe direction used to remove items from the play queue",
"entries": [ "entries": [
"Left swipe", "Left swipe",
"Right swipe", "Right swipe",
"Both" "Both directions"
], ],
"values": [ "values": [
"0x4", "0x4",
@@ -528,6 +531,8 @@
"0xc" "0xc"
], ],
"defaultIndex": 0, "defaultIndex": 0,
"forceDropdown": true,
"inline": true,
"token": "RL_SWIPE_TO_QUEUE_REMOVE_DIRECTION" "token": "RL_SWIPE_TO_QUEUE_REMOVE_DIRECTION"
}, },
{ {
@@ -543,6 +548,13 @@
"title": "Play Next Color", "title": "Play Next Color",
"default": -14408663, "default": -14408663,
"token": "RL_SWIPE_TO_QUEUE_PLAY_NEXT_COLOR" "token": "RL_SWIPE_TO_QUEUE_PLAY_NEXT_COLOR"
},
{
"type": "color",
"key": "add_to_playlist_color",
"title": "Add to Playlist Color",
"default": -14408663,
"token": "RL_SWIPE_TO_QUEUE_ADD_TO_PLAYLIST_COLOR"
} }
] ]
}, },
@@ -3,26 +3,49 @@ package com.meowarex.rlmobile.ui.components.radiant
import androidx.compose.animation.animateColorAsState import androidx.compose.animation.animateColorAsState
import androidx.compose.animation.core.animateDpAsState import androidx.compose.animation.core.animateDpAsState
import androidx.compose.animation.core.animateFloatAsState import androidx.compose.animation.core.animateFloatAsState
import androidx.compose.animation.core.FastOutSlowInEasing
import androidx.compose.animation.core.MutableTransitionState
import androidx.compose.animation.core.animateFloat
import androidx.compose.animation.core.rememberTransition
import androidx.compose.animation.core.tween
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.border import androidx.compose.foundation.border
import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.interaction.collectIsFocusedAsState import androidx.compose.foundation.interaction.collectIsFocusedAsState
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.*
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.text.BasicTextField import androidx.compose.foundation.text.BasicTextField
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.* import androidx.compose.material3.*
import androidx.compose.runtime.* import androidx.compose.runtime.*
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.draw.rotate
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.SolidColor
import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.layout.onSizeChanged
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.semantics.Role import androidx.compose.ui.semantics.Role
import androidx.compose.ui.semantics.role
import androidx.compose.ui.semantics.selected
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.input.VisualTransformation import androidx.compose.ui.text.input.VisualTransformation
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.DpOffset
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Popup
import androidx.compose.ui.window.PopupProperties
import com.meowarex.rlmobile.R
import com.meowarex.rlmobile.ui.theme.* import com.meowarex.rlmobile.ui.theme.*
/** /**
@@ -113,6 +136,151 @@ fun RadiantTextField(
} }
} }
/**
* Dropdown
*/
@Composable
fun RadiantDropdown(
options: List<String>,
selectedIndex: Int,
onSelect: (Int) -> Unit,
modifier: Modifier = Modifier,
enabled: Boolean = true,
disabledIndices: Set<Int> = emptySet(),
) {
var expanded by rememberSaveable { mutableStateOf(false) }
val visibilityState = remember { MutableTransitionState(false) }
visibilityState.targetState = expanded
val transition = rememberTransition(visibilityState, label = "Dropdown")
val progress by transition.animateFloat(
transitionSpec = { tween(durationMillis = 160, easing = FastOutSlowInEasing) },
label = "DropdownProgress",
) {
if (it) 1f else 0f
}
val scheme = MaterialTheme.colorScheme
val selectedLabel = options.getOrNull(selectedIndex).orEmpty()
val shape = if (radiantStyle.native) MaterialTheme.shapes.extraSmall else RoundedCornerShape(16.dp)
var anchorWidthPx by remember { mutableIntStateOf(0) }
val anchorWidth = with(LocalDensity.current) { anchorWidthPx.toDp() }
val positionProvider = MenuDefaults.rememberDropdownMenuPopupPositionProvider(
dropdownMenuAnchorPosition = MenuAnchorPosition.Below,
offset = DpOffset(0.dp, 6.dp),
)
Box(modifier = modifier.fillMaxWidth()) {
Row(
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(12.dp),
modifier = Modifier
.fillMaxWidth()
.onSizeChanged { anchorWidthPx = it.width }
.background(scheme.surfaceContainerLowest.copy(alpha = 0.8f), shape)
.then(
if (radiantStyle.native) Modifier.border(1.dp, scheme.outline, shape)
else Modifier.border(
RadiantDesign.Hairline,
hairlineBrush(scheme.onSurface, RadiantDesign.BORDER_ALPHA * 1.5f),
shape,
)
)
.clip(shape)
.clickable(enabled = enabled, role = Role.Button) { expanded = !expanded }
.alpha(if (enabled) 1f else 0.45f)
.heightIn(min = 52.dp)
.padding(horizontal = 16.dp, vertical = 10.dp),
) {
Text(
text = selectedLabel,
style = MaterialTheme.typography.bodyLarge,
color = scheme.onSurface,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
modifier = Modifier.weight(1f),
)
Icon(
painter = painterResource(R.drawable.ic_arrow_down_small),
contentDescription = null,
modifier = Modifier.rotate(180f * progress),
)
}
if (
anchorWidthPx > 0 &&
(visibilityState.currentState || visibilityState.targetState || transition.isRunning)
) {
Popup(
popupPositionProvider = positionProvider,
onDismissRequest = { expanded = false },
properties = PopupProperties(focusable = true),
) {
Surface(
modifier = Modifier
.width(anchorWidth)
.graphicsLayer {
alpha = progress
scaleX = 0.92f + 0.08f * progress
scaleY = 0.92f + 0.08f * progress
transformOrigin = positionProvider.transformOrigin
},
shape = shape,
color = scheme.surfaceContainer,
tonalElevation = 0.dp,
shadowElevation = 8.dp,
border = BorderStroke(
RadiantDesign.Hairline,
scheme.onSurface.copy(alpha = RadiantDesign.BORDER_ALPHA * 2f),
),
) {
Column(
modifier = Modifier
.heightIn(max = 320.dp)
.verticalScroll(rememberScrollState())
.padding(vertical = 6.dp),
) {
options.forEachIndexed { index, option ->
val selected = index == selectedIndex
val itemEnabled = enabled && index !in disabledIndices
DropdownMenuItem(
text = {
Text(
text = option,
style = MaterialTheme.typography.bodyLarge,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
)
},
trailingIcon = {
RadiantRadio(
selected = selected,
onClick = null,
enabled = itemEnabled,
)
},
enabled = itemEnabled,
onClick = {
onSelect(index)
expanded = false
},
modifier = Modifier
.padding(horizontal = 6.dp, vertical = 2.dp)
.clip(RoundedCornerShape(12.dp))
.semantics {
this.selected = selected
role = Role.RadioButton
}
.then(
if (selected) Modifier.background(scheme.primary.copy(alpha = 0.1f))
else Modifier
),
)
}
}
}
}
}
}
}
/** /**
* Slider. (i prefer the old on tbh so i reverted it back <3) * Slider. (i prefer the old on tbh so i reverted it back <3)
*/ */
@@ -33,11 +33,13 @@ import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.meowarex.rlmobile.R import com.meowarex.rlmobile.R
import com.meowarex.rlmobile.ui.components.radiant.RadiantDropdown
import com.meowarex.rlmobile.ui.legacy.components.ResetToDefaultButton import com.meowarex.rlmobile.ui.legacy.components.ResetToDefaultButton
import com.meowarex.rlmobile.ui.screens.patchopts.OptionLock import com.meowarex.rlmobile.ui.screens.patchopts.OptionLock
import com.meowarex.rlmobile.ui.screens.patchopts.OptionSpec import com.meowarex.rlmobile.ui.screens.patchopts.OptionSpec
import com.meowarex.rlmobile.ui.screens.patchopts.PatchOptionState import com.meowarex.rlmobile.ui.screens.patchopts.PatchOptionState
import com.meowarex.rlmobile.ui.screens.patchopts.hiddenForVariant import com.meowarex.rlmobile.ui.screens.patchopts.hiddenForVariant
import com.meowarex.rlmobile.ui.screens.patchopts.isInline
import com.meowarex.rlmobile.ui.screens.patchopts.optionLock import com.meowarex.rlmobile.ui.screens.patchopts.optionLock
import com.meowarex.rlmobile.ui.screens.patchopts.PatchSpec import com.meowarex.rlmobile.ui.screens.patchopts.PatchSpec
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@@ -103,12 +105,12 @@ fun PatchAdvancedOptionsSheet(
val parentKeys = patch.advancedOptions val parentKeys = patch.advancedOptions
.filterIsInstance<OptionSpec.Toggle>() .filterIsInstance<OptionSpec.Toggle>()
.filter { !it.inline } .filter { !it.isInline }
.map { it.key } .map { it.key }
.toSet() .toSet()
val sheetOptions = patch.advancedOptions.filter { option -> val sheetOptions = patch.advancedOptions.filter { option ->
when { when {
option is OptionSpec.Toggle && option.inline -> false option.isInline -> false
option is OptionSpec.Toggle && option.requiresOption in parentKeys -> false option is OptionSpec.Toggle && option.requiresOption in parentKeys -> false
// Options belonging to another variant are hidden, not greyed out. // Options belonging to another variant are hidden, not greyed out.
option.hiddenForVariant(selectedVariant) -> false option.hiddenForVariant(selectedVariant) -> false
@@ -121,7 +123,7 @@ fun PatchAdvancedOptionsSheet(
is OptionSpec.Toggle -> { is OptionSpec.Toggle -> {
val toggleOn = state.toggle(patch, option) val toggleOn = state.toggle(patch, option)
val gatedChoices = patch.advancedOptions.filterIsInstance<OptionSpec.Choice>() val gatedChoices = patch.advancedOptions.filterIsInstance<OptionSpec.Choice>()
.filter { it.requiresOption == option.key } .filter { it.requiresOption == option.key && !it.isInline }
val gatedToggles = patch.advancedOptions.filterIsInstance<OptionSpec.Toggle>() val gatedToggles = patch.advancedOptions.filterIsInstance<OptionSpec.Toggle>()
.filter { it.requiresOption == option.key && !it.inline } .filter { it.requiresOption == option.key && !it.inline }
val hasSubOptions = gatedChoices.isNotEmpty() || gatedToggles.isNotEmpty() val hasSubOptions = gatedChoices.isNotEmpty() || gatedToggles.isNotEmpty()
@@ -164,6 +166,7 @@ fun PatchAdvancedOptionsSheet(
key(choice.key) { key(choice.key) {
ChoiceOptionRow( ChoiceOptionRow(
title = choice.title, title = choice.title,
description = choice.description,
entries = choice.entries, entries = choice.entries,
selectedIndex = state.choice(patch, choice), selectedIndex = state.choice(patch, choice),
forceDropdown = choice.forceDropdown, forceDropdown = choice.forceDropdown,
@@ -208,6 +211,7 @@ fun PatchAdvancedOptionsSheet(
if (option.requiresOption == null) { if (option.requiresOption == null) {
ChoiceOptionRow( ChoiceOptionRow(
title = option.title, title = option.title,
description = option.description,
entries = option.entries, entries = option.entries,
selectedIndex = state.choice(patch, option), selectedIndex = state.choice(patch, option),
forceDropdown = option.forceDropdown, forceDropdown = option.forceDropdown,
@@ -387,11 +391,12 @@ private fun snapToNearestStep(
} }
@Composable @Composable
private fun ChoiceOptionRow( internal fun ChoiceOptionRow(
entries: List<String>, entries: List<String>,
selectedIndex: Int, selectedIndex: Int,
onSelect: (Int) -> Unit, onSelect: (Int) -> Unit,
title: String = "", title: String = "",
description: String = "",
forceDropdown: Boolean = false, forceDropdown: Boolean = false,
disabledIndices: Set<Int> = emptySet(), disabledIndices: Set<Int> = emptySet(),
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
@@ -399,48 +404,28 @@ private fun ChoiceOptionRow(
Column( Column(
modifier = modifier.fillMaxWidth(), modifier = modifier.fillMaxWidth(),
verticalArrangement = Arrangement.spacedBy(6.dp), verticalArrangement = Arrangement.spacedBy(6.dp),
horizontalAlignment = Alignment.CenterHorizontally, horizontalAlignment = Alignment.Start,
) { ) {
if (title.isNotEmpty()) { if (title.isNotEmpty()) {
Text( Text(
text = title, text = title,
style = MaterialTheme.typography.labelMedium, style = MaterialTheme.typography.titleSmall,
)
}
if (description.isNotEmpty()) {
Text(
text = description,
style = MaterialTheme.typography.bodySmall,
color = MaterialTheme.colorScheme.onSurfaceVariant, color = MaterialTheme.colorScheme.onSurfaceVariant,
textAlign = TextAlign.Center,
) )
} }
if (forceDropdown || entries.size > 3) { if (forceDropdown || entries.size > 3) {
var expanded by rememberSaveable { mutableStateOf(false) } RadiantDropdown(
val selectedLabel = entries.getOrNull(selectedIndex).orEmpty() options = entries,
selectedIndex = selectedIndex,
Box(modifier = Modifier.fillMaxWidth()) { onSelect = onSelect,
OutlinedButton( disabledIndices = disabledIndices,
onClick = { expanded = true }, )
modifier = Modifier.fillMaxWidth(),
) {
Text(
text = selectedLabel,
maxLines = 1,
overflow = TextOverflow.Ellipsis,
)
}
DropdownMenu(
expanded = expanded,
onDismissRequest = { expanded = false },
modifier = Modifier.fillMaxWidth(),
) {
entries.forEachIndexed { index, entry ->
DropdownMenuItem(
text = { Text(entry) },
enabled = index !in disabledIndices,
onClick = {
onSelect(index)
expanded = false
},
)
}
}
}
return@Column return@Column
} }
SingleChoiceSegmentedButtonRow(modifier = Modifier.fillMaxWidth()) { SingleChoiceSegmentedButtonRow(modifier = Modifier.fillMaxWidth()) {
@@ -36,6 +36,8 @@ import com.meowarex.rlmobile.ui.screens.patchopts.PatchOptions
import com.meowarex.rlmobile.ui.screens.patchopts.PatchSpec import com.meowarex.rlmobile.ui.screens.patchopts.PatchSpec
import com.meowarex.rlmobile.ui.screens.patchopts.effectiveVariants import com.meowarex.rlmobile.ui.screens.patchopts.effectiveVariants
import com.meowarex.rlmobile.ui.screens.patchopts.resolveVariantIndex import com.meowarex.rlmobile.ui.screens.patchopts.resolveVariantIndex
import com.meowarex.rlmobile.ui.screens.patchopts.conflictingChoices
import com.meowarex.rlmobile.ui.screens.patchopts.isInline
private data class LockInfo(val patch: PatchSpec, val lock: PatchLock) private data class LockInfo(val patch: PatchSpec, val lock: PatchLock)
@@ -131,11 +133,9 @@ fun PatchSelectionAccordion(
val checked = isEnabled(patch) val checked = isEnabled(patch)
val lock = lockState(patch) val lock = lockState(patch)
val inlineToggles = patch.advancedOptions val inlineOptions = patch.advancedOptions.filter { it.isInline }
.filterIsInstance<OptionSpec.Toggle>() val hasSheetOptions = patch.advancedOptions.any { !it.isInline }
.filter { it.inline } val hasSettings = patch.variants.isNotEmpty() || inlineOptions.isNotEmpty() || hasSheetOptions
val hasSheetOptions = patch.advancedOptions.any { it !is OptionSpec.Toggle || !it.inline }
val hasSettings = patch.variants.isNotEmpty() || inlineToggles.isNotEmpty() || hasSheetOptions
// When a patch is enabled and has settings show a carded view of the settings // When a patch is enabled and has settings show a carded view of the settings
val carded = checked && hasSettings val carded = checked && hasSettings
@@ -191,16 +191,41 @@ fun PatchSelectionAccordion(
) )
} }
for (option in inlineToggles) key(option.key) { for (option in inlineOptions) key(option.key) {
val show = option.requiresVariant == null || when (option) {
option.requiresVariant == resolvedVariant is OptionSpec.Toggle -> {
if (show) { val show = option.requiresVariant == null ||
InlineToggleRow( option.requiresVariant == resolvedVariant
title = option.title, if (show) {
description = option.description, InlineToggleRow(
checked = optionState.toggle(patch, option), title = option.title,
onCheckedChange = { optionState.setToggle(patch, option, it) }, description = option.description,
) checked = optionState.toggle(patch, option),
onCheckedChange = { optionState.setToggle(patch, option, it) },
)
}
}
is OptionSpec.Choice -> {
val requiredToggle = option.requiresOption?.let { key ->
patch.advancedOptions.filterIsInstance<OptionSpec.Toggle>()
.firstOrNull { it.key == key }
}
if (requiredToggle == null || optionState.toggle(patch, requiredToggle)) {
ChoiceOptionRow(
title = option.title,
description = option.description,
entries = option.entries,
selectedIndex = optionState.choice(patch, option),
forceDropdown = option.forceDropdown,
disabledIndices = patch.conflictingChoices(option)
.map { optionState.choice(patch, it) }
.filter { it != 0 }
.toSet(),
onSelect = { optionState.setChoice(patch, option, it) },
)
}
}
else -> Unit
} }
} }
@@ -195,10 +195,9 @@ class PatchOptionsModel(
} }
fun isAdvancedModified(spec: PatchSpec): Boolean = spec.advancedOptions.any { option -> fun isAdvancedModified(spec: PatchSpec): Boolean = spec.advancedOptions.any { option ->
if (option.isInline) return@any false
when (option) { when (option) {
// inline toggles sit next to the variant picker, not in the sheet, so they is OptionSpec.Toggle -> toggleValue(spec, option) != option.default
// must not light up the sheet's "modified" dot
is OptionSpec.Toggle -> !option.inline && toggleValue(spec, option) != option.default
is OptionSpec.Slider -> sliderValue(spec, option) != option.default is OptionSpec.Slider -> sliderValue(spec, option) != option.default
is OptionSpec.Choice -> choiceValue(spec, option) != option.defaultIndex is OptionSpec.Choice -> choiceValue(spec, option) != option.defaultIndex
is OptionSpec.Color -> colorValue(spec, option) != option.default is OptionSpec.Color -> colorValue(spec, option) != option.default
@@ -206,12 +205,17 @@ class PatchOptionsModel(
} }
fun resetAdvanced(spec: PatchSpec) { fun resetAdvanced(spec: PatchSpec) {
val prefix = "${spec.id}/" val advancedOptions = spec.advancedOptions.filter { !it.isInline }
optionBools = optionBools.filterKeys { !it.startsWith(prefix) } val boolKeys = advancedOptions.filterIsInstance<OptionSpec.Toggle>().map { keyOf(spec, it) }.toSet()
optionFloats = optionFloats.filterKeys { !it.startsWith(prefix) } val floatKeys = advancedOptions.filterIsInstance<OptionSpec.Slider>().map { keyOf(spec, it) }.toSet()
val intKeys = advancedOptions.filter { it is OptionSpec.Choice || it is OptionSpec.Color }
.map { keyOf(spec, it) }
.toSet()
optionBools = optionBools.filterKeys { it !in boolKeys }
optionFloats = optionFloats.filterKeys { it !in floatKeys }
optionInts = normalizeChoiceSelections( optionInts = normalizeChoiceSelections(
specs = listOf(spec), specs = listOf(spec),
values = optionInts.filterKeys { !it.startsWith(prefix) }, values = optionInts.filterKeys { it !in intKeys },
) )
} }
@@ -126,6 +126,8 @@ sealed interface OptionSpec {
val values: List<String> = emptyList(), val values: List<String> = emptyList(),
val requiresOption: String? = null, val requiresOption: String? = null,
val forceDropdown: Boolean = false, val forceDropdown: Boolean = false,
/** Render inline in the patch card instead of inside the advanced sheet */
val inline: Boolean = false,
val distinctFrom: String? = null, val distinctFrom: String? = null,
val token: String? = null, val token: String? = null,
) : OptionSpec ) : OptionSpec
@@ -143,6 +145,13 @@ sealed interface OptionSpec {
) : OptionSpec ) : OptionSpec
} }
val OptionSpec.isInline: Boolean
get() = when (this) {
is OptionSpec.Toggle -> inline
is OptionSpec.Choice -> inline
is OptionSpec.Slider, is OptionSpec.Color -> false
}
@Serializable @Serializable
enum class EncodeKind { enum class EncodeKind {
@SerialName("floatBits") @SerialName("floatBits")
@@ -32,6 +32,7 @@ import androidx.compose.ui.unit.dp
import com.meowarex.rlmobile.R import com.meowarex.rlmobile.R
import com.meowarex.rlmobile.ui.components.radiant.RadiantButton import com.meowarex.rlmobile.ui.components.radiant.RadiantButton
import com.meowarex.rlmobile.ui.components.radiant.RadiantDialog import com.meowarex.rlmobile.ui.components.radiant.RadiantDialog
import com.meowarex.rlmobile.ui.components.radiant.RadiantDropdown
import com.meowarex.rlmobile.ui.components.radiant.RadiantButtonSize import com.meowarex.rlmobile.ui.components.radiant.RadiantButtonSize
import com.meowarex.rlmobile.ui.components.radiant.RadiantButtonStyle import com.meowarex.rlmobile.ui.components.radiant.RadiantButtonStyle
import com.meowarex.rlmobile.ui.components.radiant.RadiantIconButton import com.meowarex.rlmobile.ui.components.radiant.RadiantIconButton
@@ -45,6 +46,7 @@ import com.meowarex.rlmobile.ui.screens.patchopts.OptionSpec
import com.meowarex.rlmobile.ui.screens.patchopts.PatchOptionState import com.meowarex.rlmobile.ui.screens.patchopts.PatchOptionState
import com.meowarex.rlmobile.ui.screens.patchopts.conflictingChoices import com.meowarex.rlmobile.ui.screens.patchopts.conflictingChoices
import com.meowarex.rlmobile.ui.screens.patchopts.hiddenForVariant import com.meowarex.rlmobile.ui.screens.patchopts.hiddenForVariant
import com.meowarex.rlmobile.ui.screens.patchopts.isInline
import com.meowarex.rlmobile.ui.screens.patchopts.optionLock import com.meowarex.rlmobile.ui.screens.patchopts.optionLock
import com.meowarex.rlmobile.ui.screens.patchopts.PatchSpec import com.meowarex.rlmobile.ui.screens.patchopts.PatchSpec
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@@ -110,12 +112,12 @@ fun PatchAdvancedOptionsSheet(
val parentKeys = patch.advancedOptions val parentKeys = patch.advancedOptions
.filterIsInstance<OptionSpec.Toggle>() .filterIsInstance<OptionSpec.Toggle>()
.filter { !it.inline } .filter { !it.isInline }
.map { it.key } .map { it.key }
.toSet() .toSet()
val sheetOptions = patch.advancedOptions.filter { option -> val sheetOptions = patch.advancedOptions.filter { option ->
when { when {
option is OptionSpec.Toggle && option.inline -> false option.isInline -> false
option is OptionSpec.Toggle && option.requiresOption in parentKeys -> false option is OptionSpec.Toggle && option.requiresOption in parentKeys -> false
// Options belonging to another variant are hidden, not greyed out. // Options belonging to another variant are hidden, not greyed out.
option.hiddenForVariant(selectedVariant) -> false option.hiddenForVariant(selectedVariant) -> false
@@ -128,7 +130,7 @@ fun PatchAdvancedOptionsSheet(
is OptionSpec.Toggle -> { is OptionSpec.Toggle -> {
val toggleOn = state.toggle(patch, option) val toggleOn = state.toggle(patch, option)
val gatedChoices = patch.advancedOptions.filterIsInstance<OptionSpec.Choice>() val gatedChoices = patch.advancedOptions.filterIsInstance<OptionSpec.Choice>()
.filter { it.requiresOption == option.key } .filter { it.requiresOption == option.key && !it.isInline }
val gatedToggles = patch.advancedOptions.filterIsInstance<OptionSpec.Toggle>() val gatedToggles = patch.advancedOptions.filterIsInstance<OptionSpec.Toggle>()
.filter { it.requiresOption == option.key && !it.inline } .filter { it.requiresOption == option.key && !it.inline }
val hasSubOptions = gatedChoices.isNotEmpty() || gatedToggles.isNotEmpty() val hasSubOptions = gatedChoices.isNotEmpty() || gatedToggles.isNotEmpty()
@@ -171,6 +173,7 @@ fun PatchAdvancedOptionsSheet(
key(choice.key) { key(choice.key) {
ChoiceOptionRow( ChoiceOptionRow(
title = choice.title, title = choice.title,
description = choice.description,
entries = choice.entries, entries = choice.entries,
selectedIndex = state.choice(patch, choice), selectedIndex = state.choice(patch, choice),
forceDropdown = choice.forceDropdown, forceDropdown = choice.forceDropdown,
@@ -215,6 +218,7 @@ fun PatchAdvancedOptionsSheet(
if (option.requiresOption == null) { if (option.requiresOption == null) {
ChoiceOptionRow( ChoiceOptionRow(
title = option.title, title = option.title,
description = option.description,
entries = option.entries, entries = option.entries,
selectedIndex = state.choice(patch, option), selectedIndex = state.choice(patch, option),
forceDropdown = option.forceDropdown, forceDropdown = option.forceDropdown,
@@ -388,11 +392,12 @@ private fun snapToNearestStep(
} }
@Composable @Composable
private fun ChoiceOptionRow( internal fun ChoiceOptionRow(
entries: List<String>, entries: List<String>,
selectedIndex: Int, selectedIndex: Int,
onSelect: (Int) -> Unit, onSelect: (Int) -> Unit,
title: String = "", title: String = "",
description: String = "",
forceDropdown: Boolean = false, forceDropdown: Boolean = false,
disabledIndices: Set<Int> = emptySet(), disabledIndices: Set<Int> = emptySet(),
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
@@ -400,44 +405,28 @@ private fun ChoiceOptionRow(
Column( Column(
modifier = modifier.fillMaxWidth(), modifier = modifier.fillMaxWidth(),
verticalArrangement = Arrangement.spacedBy(6.dp), verticalArrangement = Arrangement.spacedBy(6.dp),
horizontalAlignment = Alignment.CenterHorizontally, horizontalAlignment = Alignment.Start,
) { ) {
if (title.isNotEmpty()) { if (title.isNotEmpty()) {
Text( Text(
text = title, text = title,
style = MaterialTheme.typography.labelMedium, style = MaterialTheme.typography.titleSmall,
)
}
if (description.isNotEmpty()) {
Text(
text = description,
style = MaterialTheme.typography.bodySmall,
color = MaterialTheme.colorScheme.onSurfaceVariant, color = MaterialTheme.colorScheme.onSurfaceVariant,
textAlign = TextAlign.Center,
) )
} }
if (forceDropdown || entries.size > 3) { if (forceDropdown || entries.size > 3) {
var expanded by rememberSaveable { mutableStateOf(false) } RadiantDropdown(
val selectedLabel = entries.getOrNull(selectedIndex).orEmpty() options = entries,
selectedIndex = selectedIndex,
Box(modifier = Modifier.fillMaxWidth()) { onSelect = onSelect,
RadiantButton( disabledIndices = disabledIndices,
text = selectedLabel, )
onClick = { expanded = true },
style = RadiantButtonStyle.Ghost,
fillWidth = true,
)
DropdownMenu(
expanded = expanded,
onDismissRequest = { expanded = false },
modifier = Modifier.fillMaxWidth(),
) {
entries.forEachIndexed { index, entry ->
DropdownMenuItem(
text = { Text(entry) },
enabled = index !in disabledIndices,
onClick = {
onSelect(index)
expanded = false
},
)
}
}
}
return@Column return@Column
} }
RadiantSegmented( RadiantSegmented(
@@ -33,6 +33,8 @@ import com.meowarex.rlmobile.ui.components.radiant.RadiantDialog
import com.meowarex.rlmobile.ui.theme.radiantSurface import com.meowarex.rlmobile.ui.theme.radiantSurface
import com.meowarex.rlmobile.ui.theme.glassSurface import com.meowarex.rlmobile.ui.theme.glassSurface
import com.meowarex.rlmobile.ui.screens.patchopts.OptionSpec import com.meowarex.rlmobile.ui.screens.patchopts.OptionSpec
import com.meowarex.rlmobile.ui.screens.patchopts.conflictingChoices
import com.meowarex.rlmobile.ui.screens.patchopts.isInline
import com.meowarex.rlmobile.ui.screens.patchopts.PatchLock import com.meowarex.rlmobile.ui.screens.patchopts.PatchLock
import com.meowarex.rlmobile.ui.screens.patchopts.PatchOptionState import com.meowarex.rlmobile.ui.screens.patchopts.PatchOptionState
import com.meowarex.rlmobile.ui.screens.patchopts.PatchOptions import com.meowarex.rlmobile.ui.screens.patchopts.PatchOptions
@@ -134,11 +136,9 @@ fun PatchSelectionAccordion(
val checked = isEnabled(patch) val checked = isEnabled(patch)
val lock = lockState(patch) val lock = lockState(patch)
val inlineToggles = patch.advancedOptions val inlineOptions = patch.advancedOptions.filter { it.isInline }
.filterIsInstance<OptionSpec.Toggle>() val hasSheetOptions = patch.advancedOptions.any { !it.isInline }
.filter { it.inline } val hasSettings = patch.variants.isNotEmpty() || inlineOptions.isNotEmpty() || hasSheetOptions
val hasSheetOptions = patch.advancedOptions.any { it !is OptionSpec.Toggle || !it.inline }
val hasSettings = patch.variants.isNotEmpty() || inlineToggles.isNotEmpty() || hasSheetOptions
// When a patch is enabled and has settings show a carded view of the settings // When a patch is enabled and has settings show a carded view of the settings
val carded = checked && hasSettings val carded = checked && hasSettings
@@ -189,16 +189,41 @@ fun PatchSelectionAccordion(
) )
} }
for (option in inlineToggles) key(option.key) { for (option in inlineOptions) key(option.key) {
val show = option.requiresVariant == null || when (option) {
option.requiresVariant == resolvedVariant is OptionSpec.Toggle -> {
if (show) { val show = option.requiresVariant == null ||
InlineToggleRow( option.requiresVariant == resolvedVariant
title = option.title, if (show) {
description = option.description, InlineToggleRow(
checked = optionState.toggle(patch, option), title = option.title,
onCheckedChange = { optionState.setToggle(patch, option, it) }, description = option.description,
) checked = optionState.toggle(patch, option),
onCheckedChange = { optionState.setToggle(patch, option, it) },
)
}
}
is OptionSpec.Choice -> {
val requiredToggle = option.requiresOption?.let { key ->
patch.advancedOptions.filterIsInstance<OptionSpec.Toggle>()
.firstOrNull { it.key == key }
}
if (requiredToggle == null || optionState.toggle(patch, requiredToggle)) {
ChoiceOptionRow(
title = option.title,
description = option.description,
entries = option.entries,
selectedIndex = optionState.choice(patch, option),
forceDropdown = option.forceDropdown,
disabledIndices = patch.conflictingChoices(option)
.map { optionState.choice(patch, it) }
.filter { it != 0 }
.toSet(),
onSelect = { optionState.setChoice(patch, option, it) },
)
}
}
else -> Unit
} }
} }
@@ -12,6 +12,10 @@
.field private final addIcon:Landroid/graphics/drawable/Drawable; .field private final addIcon:Landroid/graphics/drawable/Drawable;
.field private final addToPlaylistBackground:Landroid/graphics/drawable/ColorDrawable;
.field private final addToPlaylistIcon:Landroid/graphics/drawable/Drawable;
.field private final playNextBackground:Landroid/graphics/drawable/ColorDrawable; .field private final playNextBackground:Landroid/graphics/drawable/ColorDrawable;
.field private final playNextIcon:Landroid/graphics/drawable/Drawable; .field private final playNextIcon:Landroid/graphics/drawable/Drawable;
@@ -81,6 +85,14 @@
iput-object v1, p0, Lradiant/SwipeToQueue;->playNextBackground:Landroid/graphics/drawable/ColorDrawable; iput-object v1, p0, Lradiant/SwipeToQueue;->playNextBackground:Landroid/graphics/drawable/ColorDrawable;
new-instance v1, Landroid/graphics/drawable/ColorDrawable;
const v2, __RL_SWIPE_TO_QUEUE_ADD_TO_PLAYLIST_COLOR__
invoke-direct {v1, v2}, Landroid/graphics/drawable/ColorDrawable;-><init>(I)V
iput-object v1, p0, Lradiant/SwipeToQueue;->addToPlaylistBackground:Landroid/graphics/drawable/ColorDrawable;
sget v1, Lcom/aspiro/wamp/R$drawable;->ic_add_to_queue_last: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; invoke-virtual {v0, v1}, Landroid/content/Context;->getDrawable(I)Landroid/graphics/drawable/Drawable;
@@ -123,6 +135,29 @@
:store_play_next_icon :store_play_next_icon
iput-object v0, p0, Lradiant/SwipeToQueue;->playNextIcon:Landroid/graphics/drawable/Drawable; iput-object v0, p0, Lradiant/SwipeToQueue;->playNextIcon: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_add_to_playlist:I
invoke-virtual {v0, v1}, Landroid/content/Context;->getDrawable(I)Landroid/graphics/drawable/Drawable;
move-result-object v0
if-eqz v0, :store_add_to_playlist_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_add_to_playlist_icon
iput-object v0, p0, Lradiant/SwipeToQueue;->addToPlaylistIcon:Landroid/graphics/drawable/Drawable;
return-void return-void
.end method .end method
@@ -343,6 +378,15 @@
goto :background_ready goto :background_ready
:add_background :add_background
const/4 v9, 0x3
if-ne v8, v9, :add_to_queue_background
iget-object v6, p0, Lradiant/SwipeToQueue;->addToPlaylistBackground:Landroid/graphics/drawable/ColorDrawable;
goto :background_ready
:add_to_queue_background
iget-object v6, p0, Lradiant/SwipeToQueue;->addBackground:Landroid/graphics/drawable/ColorDrawable; iget-object v6, p0, Lradiant/SwipeToQueue;->addBackground:Landroid/graphics/drawable/ColorDrawable;
:background_ready :background_ready
@@ -474,6 +518,15 @@
goto :icon_ready goto :icon_ready
:draw_add_icon :draw_add_icon
const/4 v9, 0x3
if-ne v8, v9, :draw_add_to_queue_icon
iget-object v6, p0, Lradiant/SwipeToQueue;->addToPlaylistIcon:Landroid/graphics/drawable/Drawable;
goto :icon_ready
:draw_add_to_queue_icon
iget-object v6, p0, Lradiant/SwipeToQueue;->addIcon:Landroid/graphics/drawable/Drawable; iget-object v6, p0, Lradiant/SwipeToQueue;->addIcon:Landroid/graphics/drawable/Drawable;
:icon_ready :icon_ready
@@ -50,6 +50,10 @@
iget-object v2, p0, Lradiant/swipe/AlbumItemQueueAction;->moduleId:Ljava/lang/String; iget-object v2, p0, Lradiant/swipe/AlbumItemQueueAction;->moduleId:Ljava/lang/String;
const/4 v3, 0x3
if-eq p1, v3, :active_queue
invoke-static {}, Lradiant/swipe/QueueExecutor;->hasActiveQueue()Z invoke-static {}, Lradiant/swipe/QueueExecutor;->hasActiveQueue()Z
move-result v3 move-result v3
@@ -168,12 +172,21 @@
const/4 v8, 0x1 const/4 v8, 0x1
if-ne p1, v8, :append_track if-ne p1, v8, :check_add_to_playlist
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 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 goto :done
:check_add_to_playlist
const/4 v8, 0x3
if-ne p1, v8, :append_track
invoke-static {v3, v7, v5, v6}, Lradiant/swipe/QueueExecutor;->addToPlaylistTrack(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)V
goto :done
:append_track :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 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
@@ -158,12 +158,21 @@
const/4 v2, 0x1 const/4 v2, 0x1
if-ne v0, v2, :append if-ne v0, v2, :check_add_to_playlist
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 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 goto :done
:check_add_to_playlist
const/4 v2, 0x3
if-ne v0, v2, :append
invoke-static {v1, v7, v8, v9}, Lradiant/swipe/QueueExecutor;->addToPlaylistTrack(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)V
goto :done
:append :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 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
@@ -44,6 +44,10 @@
iget-wide v1, p0, Lradiant/swipe/ArtistTrackCreditsQueueAction;->trackId:J iget-wide v1, p0, Lradiant/swipe/ArtistTrackCreditsQueueAction;->trackId:J
const/4 v0, 0x3
if-eq p1, v0, :active_queue
invoke-static {}, Lradiant/swipe/QueueExecutor;->hasActiveQueue()Z invoke-static {}, Lradiant/swipe/QueueExecutor;->hasActiveQueue()Z
move-result v0 move-result v0
@@ -173,6 +173,10 @@
if-eqz v5, :done if-eqz v5, :done
const/4 v1, 0x3
if-eq p1, v1, :queue_event
const/4 v1, 0x4 const/4 v1, 0x4
if-ne v5, v1, :queue_event if-ne v5, v1, :queue_event
@@ -17,7 +17,7 @@
if-lt v0, v1, :done if-lt v0, v1, :done
const/4 v1, 0x2 const/4 v1, 0x3
if-gt v0, v1, :done if-gt v0, v1, :done
@@ -168,12 +168,19 @@
check-cast v3, Lh40/p; check-cast v3, Lh40/p;
iget v0, p1, Lradiant/swipe/ComposeSearchQueueEvent;->action:I
const/4 v1, 0x3
if-eq v0, v1, :queue_track
invoke-static {}, Lradiant/swipe/QueueExecutor;->hasActiveQueue()Z invoke-static {}, Lradiant/swipe/QueueExecutor;->hasActiveQueue()Z
move-result v0 move-result v0
if-eqz v0, :play_track if-eqz v0, :play_track
:queue_track
invoke-static {v3}, Lie0/i;->a(Lh40/p;)Lcom/aspiro/wamp/model/Track; invoke-static {v3}, Lie0/i;->a(Lh40/p;)Lcom/aspiro/wamp/model/Track;
move-result-object v9 move-result-object v9
@@ -212,12 +219,21 @@
const/4 v1, 0x1 const/4 v1, 0x1
if-ne v0, v1, :append_track if-ne v0, v1, :check_add_track_to_playlist
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 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 goto :done
:check_add_track_to_playlist
const/4 v1, 0x3
if-ne v0, v1, :append_track
invoke-static {v8, v9, v7, v4}, Lradiant/swipe/QueueExecutor;->addToPlaylistTrack(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)V
goto :done
:append_track :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 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
@@ -262,12 +278,21 @@
const/4 v1, 0x1 const/4 v1, 0x1
if-ne v0, v1, :append_album if-ne v0, v1, :check_add_album_to_playlist
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; 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 goto :done
:check_add_album_to_playlist
const/4 v1, 0x3
if-ne v0, v1, :append_album
invoke-static {v8, v9, v7, v5, v6}, Lradiant/swipe/QueueExecutor;->addToPlaylistAlbum(Landroid/content/Context;Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)V
goto :done
:append_album :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; 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;
@@ -288,12 +313,21 @@
const/4 v1, 0x1 const/4 v1, 0x1
if-ne v0, v1, :append_playlist if-ne v0, v1, :check_add_playlist_to_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 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 goto :done
:check_add_playlist_to_playlist
const/4 v1, 0x3
if-ne v0, v1, :append_playlist
invoke-static {v8, v9, v7, v5}, Lradiant/swipe/QueueExecutor;->addToPlaylistPlaylist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V
goto :done
:append_playlist :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 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
@@ -310,12 +344,21 @@
const/4 v1, 0x1 const/4 v1, 0x1
if-ne v0, v1, :append_mix if-ne v0, v1, :check_add_mix_to_playlist
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; 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 goto :done
:check_add_mix_to_playlist
const/4 v1, 0x3
if-ne v0, v1, :append_mix
invoke-static {v8, v9, v7, v5, v6}, Lradiant/swipe/QueueExecutor;->addToPlaylistMix(Landroid/content/Context;Lcom/aspiro/wamp/mix/model/Mix;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)V
goto :done
:append_mix :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; 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;
@@ -119,6 +119,15 @@
goto :color_ready goto :color_ready
:add_color :add_color
const/4 v12, 0x3
if-ne v11, v12, :add_to_queue_color
const v11, __RL_SWIPE_TO_QUEUE_ADD_TO_PLAYLIST_COLOR__
goto :color_ready
:add_to_queue_color
const v11, __RL_SWIPE_TO_QUEUE_ADD_COLOR__ const v11, __RL_SWIPE_TO_QUEUE_ADD_COLOR__
:color_ready :color_ready
@@ -138,6 +147,15 @@
goto :icon_ready goto :icon_ready
:add_icon :add_icon
const/4 v12, 0x3
if-ne v11, v12, :add_to_queue_icon
iget-object v11, v5, Lradiant/swipe/ComposeSwipeState;->addToPlaylistIcon:Landroid/graphics/drawable/Drawable;
goto :icon_ready
:add_to_queue_icon
iget-object v11, v5, Lradiant/swipe/ComposeSwipeState;->addIcon:Landroid/graphics/drawable/Drawable; iget-object v11, v5, Lradiant/swipe/ComposeSwipeState;->addIcon:Landroid/graphics/drawable/Drawable;
:icon_ready :icon_ready
@@ -33,6 +33,8 @@
.field addIcon:Landroid/graphics/drawable/Drawable; .field addIcon:Landroid/graphics/drawable/Drawable;
.field addToPlaylistIcon:Landroid/graphics/drawable/Drawable;
.field playNextIcon:Landroid/graphics/drawable/Drawable; .field playNextIcon:Landroid/graphics/drawable/Drawable;
@@ -659,6 +661,25 @@
:store_play_next_icon :store_play_next_icon
iput-object v1, p0, Lradiant/swipe/ComposeSwipeState;->playNextIcon:Landroid/graphics/drawable/Drawable; iput-object v1, p0, Lradiant/swipe/ComposeSwipeState;->playNextIcon:Landroid/graphics/drawable/Drawable;
sget v1, Lcom/aspiro/wamp/R$drawable;->ic_add_to_playlist:I
invoke-virtual {v0, v1}, Landroid/content/Context;->getDrawable(I)Landroid/graphics/drawable/Drawable;
move-result-object v1
if-eqz v1, :store_add_to_playlist_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_add_to_playlist_icon
iput-object v1, p0, Lradiant/swipe/ComposeSwipeState;->addToPlaylistIcon:Landroid/graphics/drawable/Drawable;
:context_ready :context_ready
if-eqz p1, :enabled_ready if-eqz p1, :enabled_ready
@@ -17,7 +17,7 @@
if-lt v4, v5, :done if-lt v4, v5, :done
const/4 v5, 0x2 const/4 v5, 0x3
if-gt v4, v5, :done if-gt v4, v5, :done
@@ -186,12 +186,21 @@
const/4 v1, 0x1 const/4 v1, 0x1
if-ne v0, v1, :append_album if-ne v0, v1, :check_add_album_to_playlist
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; 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 goto :done
:check_add_album_to_playlist
const/4 v1, 0x3
if-ne v0, v1, :append_album
invoke-static {v5, v12, v10, v9, v6}, Lradiant/swipe/QueueExecutor;->addToPlaylistAlbum(Landroid/content/Context;Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)V
goto :done
:append_album :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; 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;
@@ -218,12 +227,21 @@
const/4 v1, 0x1 const/4 v1, 0x1
if-ne v0, v1, :append_mix if-ne v0, v1, :check_add_mix_to_playlist
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; 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 goto :done
:check_add_mix_to_playlist
const/4 v1, 0x3
if-ne v0, v1, :append_mix
invoke-static {v5, v12, v10, v9, v6}, Lradiant/swipe/QueueExecutor;->addToPlaylistMix(Landroid/content/Context;Lcom/aspiro/wamp/mix/model/Mix;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)V
goto :done
:append_mix :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; 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;
@@ -244,12 +262,21 @@
const/4 v1, 0x1 const/4 v1, 0x1
if-ne v0, v1, :append_playlist if-ne v0, v1, :check_add_playlist_to_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 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 goto :done
:check_add_playlist_to_playlist
const/4 v1, 0x3
if-ne v0, v1, :append_playlist
invoke-static {v5, v12, v10, v9}, Lradiant/swipe/QueueExecutor;->addToPlaylistPlaylist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V
goto :done
:append_playlist :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 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
@@ -283,12 +310,21 @@
const/4 v1, 0x1 const/4 v1, 0x1
if-ne v0, v1, :append_track if-ne v0, v1, :check_add_track_to_playlist
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 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 goto :done
:check_add_track_to_playlist
const/4 v1, 0x3
if-ne v0, v1, :append_track
invoke-static {v5, v12, v10, v11}, Lradiant/swipe/QueueExecutor;->addToPlaylistTrack(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)V
goto :done
:append_track :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 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
@@ -309,7 +345,7 @@
if-lt v0, v1, :done if-lt v0, v1, :done
const/4 v1, 0x2 const/4 v1, 0x3
if-gt v0, v1, :done if-gt v0, v1, :done
@@ -430,12 +466,21 @@
const/4 v1, 0x1 const/4 v1, 0x1
if-ne v0, v1, :append_playlist if-ne v0, v1, :check_add_playlist_to_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 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 goto :done
:check_add_playlist_to_playlist
const/4 v1, 0x3
if-ne v0, v1, :append_playlist
invoke-static {v6, v4, v8, v7}, Lradiant/swipe/QueueExecutor;->addToPlaylistPlaylist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V
goto :done
:append_playlist :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 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
@@ -456,7 +501,7 @@
if-lt v4, v5, :done if-lt v4, v5, :done
const/4 v5, 0x2 const/4 v5, 0x3
if-gt v4, v5, :done if-gt v4, v5, :done
@@ -625,12 +670,21 @@
const/4 v1, 0x1 const/4 v1, 0x1
if-ne v0, v1, :append_album if-ne v0, v1, :check_add_album_to_playlist
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; 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 goto :done
:check_add_album_to_playlist
const/4 v1, 0x3
if-ne v0, v1, :append_album
invoke-static {v5, v12, v10, v9, v6}, Lradiant/swipe/QueueExecutor;->addToPlaylistAlbum(Landroid/content/Context;Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)V
goto :done
:append_album :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; 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;
@@ -657,12 +711,21 @@
const/4 v1, 0x1 const/4 v1, 0x1
if-ne v0, v1, :append_mix if-ne v0, v1, :check_add_mix_to_playlist
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; 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 goto :done
:check_add_mix_to_playlist
const/4 v1, 0x3
if-ne v0, v1, :append_mix
invoke-static {v5, v12, v10, v9, v6}, Lradiant/swipe/QueueExecutor;->addToPlaylistMix(Landroid/content/Context;Lcom/aspiro/wamp/mix/model/Mix;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)V
goto :done
:append_mix :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; 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;
@@ -683,12 +746,21 @@
const/4 v1, 0x1 const/4 v1, 0x1
if-ne v0, v1, :append_playlist if-ne v0, v1, :check_add_playlist_to_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 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 goto :done
:check_add_playlist_to_playlist
const/4 v1, 0x3
if-ne v0, v1, :append_playlist
invoke-static {v5, v12, v10, v9}, Lradiant/swipe/QueueExecutor;->addToPlaylistPlaylist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V
goto :done
:append_playlist :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 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
@@ -722,12 +794,21 @@
const/4 v1, 0x1 const/4 v1, 0x1
if-ne v0, v1, :append_track if-ne v0, v1, :check_add_track_to_playlist
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 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 goto :done
:check_add_track_to_playlist
const/4 v1, 0x3
if-ne v0, v1, :append_track
invoke-static {v5, v12, v10, v11}, Lradiant/swipe/QueueExecutor;->addToPlaylistTrack(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)V
goto :done
:append_track :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 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
@@ -166,12 +166,21 @@
const/4 v2, 0x1 const/4 v2, 0x1
if-ne v0, v2, :append if-ne v0, v2, :check_add_to_playlist
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 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 goto :done
:check_add_to_playlist
const/4 v2, 0x3
if-ne v0, v2, :append
invoke-static {v1, v7, v8, v9}, Lradiant/swipe/QueueExecutor;->addToPlaylistTrack(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)V
goto :done
:append :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 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
@@ -44,6 +44,10 @@
iget-wide v1, p0, Lradiant/swipe/DynamicTrackQueueAction;->trackId:J iget-wide v1, p0, Lradiant/swipe/DynamicTrackQueueAction;->trackId:J
const/4 v0, 0x3
if-eq p1, v0, :active_queue
invoke-static {}, Lradiant/swipe/QueueExecutor;->hasActiveQueue()Z invoke-static {}, Lradiant/swipe/QueueExecutor;->hasActiveQueue()Z
move-result v0 move-result v0
@@ -525,6 +525,10 @@
if-eqz v1, :done if-eqz v1, :done
const/4 v2, 0x3
if-eq v8, v2, :append
invoke-static {}, Lradiant/swipe/QueueExecutor;->hasActiveQueue()Z invoke-static {}, Lradiant/swipe/QueueExecutor;->hasActiveQueue()Z
move-result v2 move-result v2
@@ -626,12 +630,21 @@
const/4 v0, 0x1 const/4 v0, 0x1
if-ne v8, v0, :append_track if-ne v8, v0, :check_add_to_playlist
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 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 goto :done
:check_add_to_playlist
const/4 v0, 0x3
if-ne v8, v0, :append_track
invoke-static {v5, v1, v3, v4}, Lradiant/swipe/QueueExecutor;->addToPlaylistTrack(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)V
goto :done
:append_track :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 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
@@ -410,6 +410,10 @@
check-cast v7, Lcom/aspiro/wamp/model/Playlist; check-cast v7, Lcom/aspiro/wamp/model/Playlist;
const/4 v0, 0x3
if-eq p0, v0, :add_to_playlist_playlist
const/4 v0, 0x1 const/4 v0, 0x1
if-ne p0, v0, :append_playlist if-ne p0, v0, :append_playlist
@@ -423,6 +427,11 @@
goto :done goto :done
:add_to_playlist_playlist
invoke-static {v3, v7, p1, v5}, Lradiant/swipe/QueueExecutor;->addToPlaylistPlaylist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V
goto :done
:collection :collection
iget-object v6, v2, La80/c;->b:Lx40/a; iget-object v6, v2, La80/c;->b:Lx40/a;
@@ -438,6 +447,10 @@
check-cast v7, Lcom/aspiro/wamp/model/Album; check-cast v7, Lcom/aspiro/wamp/model/Album;
const/4 v0, 0x3
if-eq p0, v0, :add_to_playlist_album
const/4 v0, 0x1 const/4 v0, 0x1
if-ne p0, v0, :append_album if-ne p0, v0, :append_album
@@ -455,9 +468,18 @@
goto :retain goto :retain
:add_to_playlist_album
invoke-static {v3, v7, p1, v5, v6}, Lradiant/swipe/QueueExecutor;->addToPlaylistAlbum(Landroid/content/Context;Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)V
goto :done
:queue_mix :queue_mix
check-cast v7, Lcom/aspiro/wamp/mix/model/Mix; check-cast v7, Lcom/aspiro/wamp/mix/model/Mix;
const/4 v0, 0x3
if-eq p0, v0, :add_to_playlist_mix
const/4 v0, 0x1 const/4 v0, 0x1
if-ne p0, v0, :append_mix if-ne p0, v0, :append_mix
@@ -473,6 +495,13 @@
move-result-object v7 move-result-object v7
goto :retain
:add_to_playlist_mix
invoke-static {v3, v7, p1, v5, v6}, Lradiant/swipe/QueueExecutor;->addToPlaylistMix(Landroid/content/Context;Lcom/aspiro/wamp/mix/model/Mix;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)V
goto :done
:retain :retain
if-eqz v7, :done if-eqz v7, :done
@@ -162,6 +162,10 @@
iget-object p0, v1, Lfd/c;->c:Lcom/tidal/android/navigation/NavigationInfo; iget-object p0, v1, Lfd/c;->c:Lcom/tidal/android/navigation/NavigationInfo;
const/4 v1, 0x3
if-eq v6, v1, :add_to_playlist
const/4 v1, 0x1 const/4 v1, 0x1
if-ne v6, v1, :append if-ne v6, v1, :append
@@ -177,6 +181,13 @@
move-result-object p1 move-result-object p1
goto :retain
:add_to_playlist
invoke-static {v3, v4, v5, p0, v2}, Lradiant/swipe/QueueExecutor;->addToPlaylistAlbum(Landroid/content/Context;Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)V
goto :done
:retain :retain
if-eqz p1, :done if-eqz p1, :done
@@ -198,6 +198,10 @@
iget-object p0, v1, Lpe/f;->b:Lcom/tidal/android/navigation/NavigationInfo; iget-object p0, v1, Lpe/f;->b:Lcom/tidal/android/navigation/NavigationInfo;
const/4 v1, 0x3
if-eq v7, v1, :add_to_playlist
const/4 v1, 0x1 const/4 v1, 0x1
if-ne v7, v1, :append if-ne v7, v1, :append
@@ -213,6 +217,13 @@
move-result-object p1 move-result-object p1
goto :retain
:add_to_playlist
invoke-static {v3, v4, v5, p0, v2}, Lradiant/swipe/QueueExecutor;->addToPlaylistMix(Landroid/content/Context;Lcom/aspiro/wamp/mix/model/Mix;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)V
goto :done
:retain :retain
if-eqz p1, :done if-eqz p1, :done
@@ -189,6 +189,10 @@
iget-object p0, v1, Lhf/c;->d:Lcom/tidal/android/navigation/NavigationInfo; iget-object p0, v1, Lhf/c;->d:Lcom/tidal/android/navigation/NavigationInfo;
const/4 v0, 0x3
if-eq v5, v0, :add_to_playlist
const/4 v0, 0x1 const/4 v0, 0x1
if-ne v5, v0, :append if-ne v5, v0, :append
@@ -200,6 +204,11 @@
:append :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 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
goto :done
:add_to_playlist
invoke-static {v2, v3, v4, p0}, Lradiant/swipe/QueueExecutor;->addToPlaylistPlaylist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V
:done :done
return-void return-void
.end method .end method
@@ -260,10 +260,15 @@
check-cast v2, Lcom/aspiro/wamp/playlist/ui/items/PlaylistItemCollectionView; check-cast v2, Lcom/aspiro/wamp/playlist/ui/items/PlaylistItemCollectionView;
if-eqz v2, :done if-eqz v2, :done
const/4 v3, 0x3
if-eq v8, v3, :build_source
invoke-static {}, Lradiant/swipe/QueueExecutor;->hasActiveQueue()Z invoke-static {}, Lradiant/swipe/QueueExecutor;->hasActiveQueue()Z
move-result v3 move-result v3
if-eqz v3, :play if-eqz v3, :play
:build_source
instance-of v3, v0, Lcom/aspiro/wamp/playlist/viewmodel/item/SuggestedTrackViewModel; instance-of v3, v0, Lcom/aspiro/wamp/playlist/viewmodel/item/SuggestedTrackViewModel;
if-eqz v3, :append_member if-eqz v3, :append_member
@@ -303,6 +308,10 @@
:append :append
invoke-virtual {v2}, Landroid/view/View;->getContext()Landroid/content/Context; invoke-virtual {v2}, Landroid/view/View;->getContext()Landroid/content/Context;
move-result-object v3 move-result-object v3
const/4 v0, 0x3
if-eq v8, v0, :add_to_playlist
const/4 v0, 0x1 const/4 v0, 0x1
if-ne v8, v0, :append_track if-ne v8, v0, :append_track
@@ -315,6 +324,10 @@
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 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 goto :done
:add_to_playlist
invoke-static {v3, v1, v6, v7}, Lradiant/swipe/QueueExecutor;->addToPlaylistTrack(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)V
goto :done
:play :play
iget-object v3, v2, Lcom/aspiro/wamp/playlist/ui/items/PlaylistItemCollectionView;->c:Lcom/aspiro/wamp/playlist/ui/items/a; iget-object v3, v2, Lcom/aspiro/wamp/playlist/ui/items/PlaylistItemCollectionView;->c:Lcom/aspiro/wamp/playlist/ui/items/a;
if-eqz v3, :done if-eqz v3, :done
@@ -39,6 +39,132 @@
return-object p0 return-object p0
.end method .end method
.method public static addToPlaylistAlbum(Landroid/content/Context;Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)V
.locals 2
if-eqz p1, :done
if-eqz p2, :done
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 v0, p4, Lh4/a;->b:Lo3/a$a;
if-eqz v0, :done
invoke-interface {v0, 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 v0
if-eqz v0, :done
iget-object v0, v0, Lo3/a;->l:Lcom/aspiro/wamp/module/album/AlbumProvider;
if-eqz v0, :done
new-instance v1, Lc3/h;
invoke-direct {v1, p1, v0, p2, p3}, Lc3/h;-><init>(Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/module/album/AlbumProvider;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V
invoke-virtual {v1, p0}, Lc3/h;->b(Landroidx/fragment/app/FragmentActivity;)V
:done
return-void
.end method
.method public static addToPlaylistMix(Landroid/content/Context;Lcom/aspiro/wamp/mix/model/Mix;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)V
.locals 1
if-eqz p1, :done
if-eqz p2, :done
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 v0, p4, Lh4/a;->h:Lu3/a$a;
if-eqz v0, :done
invoke-interface {v0, 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 v0
if-eqz v0, :done
iget-object v0, v0, Lu3/a;->j:Lj3/k$a;
if-eqz v0, :done
invoke-interface {v0, p1, p2, p3}, Lj3/k$a;->a(Lcom/aspiro/wamp/mix/model/Mix;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)Lj3/k;
move-result-object v0
if-eqz v0, :done
invoke-virtual {v0, p0}, Lj3/k;->b(Landroidx/fragment/app/FragmentActivity;)V
:done
return-void
.end method
.method public static addToPlaylistPlaylist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V
.locals 1
if-eqz p1, :done
if-eqz p2, :done
invoke-static {p0}, Lradiant/swipe/QueueExecutor;->activity(Landroid/content/Context;)Landroidx/fragment/app/FragmentActivity;
move-result-object p0
if-eqz p0, :done
new-instance v0, Lcom/aspiro/wamp/contextmenu/item/playlist/f;
invoke-direct {v0, p1, p2, p3}, Lcom/aspiro/wamp/contextmenu/item/playlist/f;-><init>(Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V
invoke-virtual {v0, p0}, Lcom/aspiro/wamp/contextmenu/item/playlist/f;->b(Landroidx/fragment/app/FragmentActivity;)V
:done
return-void
.end method
.method public static addToPlaylistTrack(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)V
.locals 1
if-eqz p1, :done
if-eqz p2, :done
invoke-static {p0}, Lradiant/swipe/QueueExecutor;->activity(Landroid/content/Context;)Landroidx/fragment/app/FragmentActivity;
move-result-object p0
if-eqz p0, :done
new-instance v0, Lm3/d;
invoke-direct {v0, p1, p2, p3}, Lm3/d;-><init>(Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)V
invoke-virtual {v0, p0}, Lm3/d;->b(Landroidx/fragment/app/FragmentActivity;)V
:done
return-void
.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; .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 .locals 8
@@ -9,6 +9,8 @@
.field public static final ACTION_ADD_TO_QUEUE:I = 0x2 .field public static final ACTION_ADD_TO_QUEUE:I = 0x2
.field public static final ACTION_ADD_TO_PLAYLIST:I = 0x3
# instance fields # instance fields
.field public action:I .field public action:I
@@ -162,6 +162,10 @@
iget-object p0, v1, Lld/c;->c:Lcom/tidal/android/navigation/NavigationInfo; iget-object p0, v1, Lld/c;->c:Lcom/tidal/android/navigation/NavigationInfo;
const/4 v1, 0x3
if-eq v6, v1, :add_to_playlist
const/4 v1, 0x1 const/4 v1, 0x1
if-ne v6, v1, :append if-ne v6, v1, :append
@@ -177,6 +181,13 @@
move-result-object p1 move-result-object p1
goto :retain
:add_to_playlist
invoke-static {v3, v4, v5, p0, v2}, Lradiant/swipe/QueueExecutor;->addToPlaylistAlbum(Landroid/content/Context;Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)V
goto :done
:retain :retain
if-eqz p1, :done if-eqz p1, :done
@@ -193,6 +193,10 @@
iget-object p0, v1, Lzf/c;->c:Lcom/tidal/android/navigation/NavigationInfo; iget-object p0, v1, Lzf/c;->c:Lcom/tidal/android/navigation/NavigationInfo;
const/4 v0, 0x3
if-eq v6, v0, :add_to_playlist
const/4 v0, 0x1 const/4 v0, 0x1
if-ne v6, v0, :append if-ne v6, v0, :append
@@ -204,6 +208,11 @@
:append :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 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
goto :done
:add_to_playlist
invoke-static {v2, v3, v4, p0}, Lradiant/swipe/QueueExecutor;->addToPlaylistPlaylist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V
:done :done
return-void return-void
.end method .end method
@@ -319,6 +319,10 @@
iget v2, p1, Lradiant/swipe/QueueRequest;->action:I iget v2, p1, Lradiant/swipe/QueueRequest;->action:I
const/4 v3, 0x3
if-eq v2, v3, :track_action
const/4 v3, 0x1 const/4 v3, 0x1
if-ne v2, v3, :default_action if-ne v2, v3, :default_action
@@ -329,6 +333,7 @@
if-eqz v2, :default_action if-eqz v2, :default_action
:track_action
invoke-virtual {v0}, Lcom/aspiro/wamp/model/SuggestedMediaItem$SuggestedTrack;->getMediaItem()Lcom/aspiro/wamp/model/Track; invoke-virtual {v0}, Lcom/aspiro/wamp/model/SuggestedMediaItem$SuggestedTrack;->getMediaItem()Lcom/aspiro/wamp/model/Track;
move-result-object v2 move-result-object v2
@@ -375,10 +380,21 @@
move-result-object v0 move-result-object v0
iget p1, p1, Lradiant/swipe/QueueRequest;->action:I
const/4 v3, 0x3
if-eq p1, v3, :add_to_playlist
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 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 goto :done
:add_to_playlist
invoke-static {v0, v2, v4, v6}, Lradiant/swipe/QueueExecutor;->addToPlaylistTrack(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)V
goto :done
:default_action :default_action
iget p1, p1, Lradiant/swipe/QueueRequest;->position:I iget p1, p1, Lradiant/swipe/QueueRequest;->position:I
@@ -237,6 +237,8 @@
move-object v5, v0 move-object v5, v0
check-cast v5, Lbm/k; check-cast v5, Lbm/k;
iget-object v6, v5, Lbm/k;->a:Lcom/aspiro/wamp/model/Track; iget-object v6, v5, Lbm/k;->a:Lcom/aspiro/wamp/model/Track;
const/4 v7, 0x3
if-eq v8, v7, :append_track
invoke-static {}, Lradiant/swipe/QueueExecutor;->hasActiveQueue()Z invoke-static {}, Lradiant/swipe/QueueExecutor;->hasActiveQueue()Z
move-result v7 move-result v7
if-nez v7, :append_track if-nez v7, :append_track
@@ -273,6 +275,10 @@
invoke-virtual {p1, v6}, Lcom/aspiro/wamp/playqueue/source/model/Source;->addSourceItem(Lcom/aspiro/wamp/model/MediaItem;)V 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; invoke-virtual {v1}, Landroidx/fragment/app/Fragment;->getContext()Landroid/content/Context;
move-result-object v0 move-result-object v0
const/4 v2, 0x3
if-eq v8, v2, :add_to_playlist_track
const/4 v2, 0x1 const/4 v2, 0x1
if-ne v8, v2, :queue_append_track if-ne v8, v2, :queue_append_track
@@ -285,6 +291,10 @@
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 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 goto :done
:add_to_playlist_track
invoke-static {v0, v6, v3, p1}, Lradiant/swipe/QueueExecutor;->addToPlaylistTrack(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)V
goto :done
:album :album
instance-of v5, v0, Lbm/a; instance-of v5, v0, Lbm/a;
if-eqz v5, :playlist if-eqz v5, :playlist
@@ -296,6 +306,10 @@
iget-object v6, v0, Lbm/a;->a:Lcom/aspiro/wamp/model/Album; iget-object v6, v0, Lbm/a;->a:Lcom/aspiro/wamp/model/Album;
invoke-virtual {v1}, Landroidx/fragment/app/Fragment;->getContext()Landroid/content/Context; invoke-virtual {v1}, Landroidx/fragment/app/Fragment;->getContext()Landroid/content/Context;
move-result-object v7 move-result-object v7
const/4 v0, 0x3
if-eq v8, v0, :add_to_playlist_album
const/4 v0, 0x1 const/4 v0, 0x1
if-ne v8, v0, :append_album if-ne v8, v0, :append_album
@@ -312,6 +326,10 @@
invoke-virtual {v1, v0}, Lio/reactivex/disposables/CompositeDisposable;->add(Lio/reactivex/disposables/Disposable;)Z invoke-virtual {v1, v0}, Lio/reactivex/disposables/CompositeDisposable;->add(Lio/reactivex/disposables/Disposable;)Z
goto :done goto :done
:add_to_playlist_album
invoke-static {v7, v6, v3, v4, v5}, Lradiant/swipe/QueueExecutor;->addToPlaylistAlbum(Landroid/content/Context;Lcom/aspiro/wamp/model/Album;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)V
goto :done
:playlist :playlist
instance-of v5, v0, Lbm/g; instance-of v5, v0, Lbm/g;
if-eqz v5, :mix if-eqz v5, :mix
@@ -319,6 +337,10 @@
iget-object v5, v0, Lbm/g;->a:Lcom/aspiro/wamp/model/Playlist; iget-object v5, v0, Lbm/g;->a:Lcom/aspiro/wamp/model/Playlist;
invoke-virtual {v1}, Landroidx/fragment/app/Fragment;->getContext()Landroid/content/Context; invoke-virtual {v1}, Landroidx/fragment/app/Fragment;->getContext()Landroid/content/Context;
move-result-object v6 move-result-object v6
const/4 v0, 0x3
if-eq v8, v0, :add_to_playlist_playlist
const/4 v0, 0x1 const/4 v0, 0x1
if-ne v8, v0, :append_playlist if-ne v8, v0, :append_playlist
@@ -331,6 +353,10 @@
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 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 goto :done
:add_to_playlist_playlist
invoke-static {v6, v5, v3, v4}, Lradiant/swipe/QueueExecutor;->addToPlaylistPlaylist(Landroid/content/Context;Lcom/aspiro/wamp/model/Playlist;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;)V
goto :done
:mix :mix
instance-of v5, v0, Lbm/f; instance-of v5, v0, Lbm/f;
if-eqz v5, :done if-eqz v5, :done
@@ -342,6 +368,10 @@
iget-object v6, v0, Lbm/f;->a:Lcom/aspiro/wamp/mix/model/Mix; iget-object v6, v0, Lbm/f;->a:Lcom/aspiro/wamp/mix/model/Mix;
invoke-virtual {v1}, Landroidx/fragment/app/Fragment;->getContext()Landroid/content/Context; invoke-virtual {v1}, Landroidx/fragment/app/Fragment;->getContext()Landroid/content/Context;
move-result-object v7 move-result-object v7
const/4 v0, 0x3
if-eq v8, v0, :add_to_playlist_mix
const/4 v0, 0x1 const/4 v0, 0x1
if-ne v8, v0, :append_mix if-ne v8, v0, :append_mix
@@ -357,6 +387,11 @@
iget-object v1, v1, Lcom/aspiro/wamp/search/v2/UnifiedSearchView;->g:Lio/reactivex/disposables/CompositeDisposable; iget-object v1, v1, Lcom/aspiro/wamp/search/v2/UnifiedSearchView;->g:Lio/reactivex/disposables/CompositeDisposable;
invoke-virtual {v1, v0}, Lio/reactivex/disposables/CompositeDisposable;->add(Lio/reactivex/disposables/Disposable;)Z invoke-virtual {v1, v0}, Lio/reactivex/disposables/CompositeDisposable;->add(Lio/reactivex/disposables/Disposable;)Z
goto :done
:add_to_playlist_mix
invoke-static {v7, v6, v3, v4, v5}, Lradiant/swipe/QueueExecutor;->addToPlaylistMix(Landroid/content/Context;Lcom/aspiro/wamp/mix/model/Mix;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/tidal/android/navigation/NavigationInfo;Lh4/a;)V
:done :done
return-void return-void
.end method .end method
@@ -213,6 +213,10 @@
if-eqz v5, :done if-eqz v5, :done
const/4 v1, 0x3
if-eq p1, v1, :queue_event
const/4 v1, 0x4 const/4 v1, 0x4
if-ne v5, v1, :queue_event if-ne v5, v1, :queue_event
@@ -103,12 +103,21 @@
const/4 v0, 0x1 const/4 v0, 0x1
if-ne p4, v0, :append if-ne p4, v0, :check_add_to_playlist
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 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 goto :done
:check_add_to_playlist
const/4 v0, 0x3
if-ne p4, v0, :append
invoke-static {p1, v3, v4, v9}, Lradiant/swipe/QueueExecutor;->addToPlaylistTrack(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)V
goto :done
:append :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 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
@@ -40,12 +40,17 @@
iget-wide v1, p0, Lradiant/swipe/ViewAllTrackQueueAction;->trackId:J iget-wide v1, p0, Lradiant/swipe/ViewAllTrackQueueAction;->trackId:J
const/4 v3, 0x3
if-eq p1, v3, :queue_event
invoke-static {}, Lradiant/swipe/QueueExecutor;->hasActiveQueue()Z invoke-static {}, Lradiant/swipe/QueueExecutor;->hasActiveQueue()Z
move-result v3 move-result v3
if-eqz v3, :play_existing if-eqz v3, :play_existing
:queue_event
iget-object v3, p0, Lradiant/swipe/ViewAllTrackQueueAction;->context:Landroid/content/Context; iget-object v3, p0, Lradiant/swipe/ViewAllTrackQueueAction;->context:Landroid/content/Context;
if-eqz v3, :done if-eqz v3, :done
+21 -9
View File
@@ -471,25 +471,27 @@
"radiant/swipe/SuggestionsResolver.smali" "radiant/swipe/SuggestionsResolver.smali"
], ],
"title": "Swipe to Queue", "title": "Swipe to Queue",
"description": "Swipe on tracks/albums/playlists to add them to the play queue", "description": "Swipe on tracks/albums/playlists to add them to the play queue (and more actions)",
"default": false, "default": false,
"advancedOptions": [ "advancedOptions": [
{ {
"type": "choice", "type": "choice",
"key": "left_action", "key": "left_action",
"title": "Left Swipe Action", "title": "Left Swipe Action",
"description": "Choose the action for a left swipe",
"entries": [ "entries": [
"Disabled", "Disabled",
"Play next", "Play next",
"Add to queue" "Add to queue",
"Add to playlist"
], ],
"values": [ "values": [
"0x0", "0x0",
"0x1", "0x1",
"0x2" "0x2",
"0x3"
], ],
"defaultIndex": 2, "defaultIndex": 2,
"inline": true,
"distinctFrom": "right_action", "distinctFrom": "right_action",
"token": "RL_SWIPE_TO_QUEUE_LEFT_ACTION" "token": "RL_SWIPE_TO_QUEUE_LEFT_ACTION"
}, },
@@ -497,18 +499,20 @@
"type": "choice", "type": "choice",
"key": "right_action", "key": "right_action",
"title": "Right Swipe Action", "title": "Right Swipe Action",
"description": "Choose the action for a right swipe",
"entries": [ "entries": [
"Disabled", "Disabled",
"Play next", "Play next",
"Add to queue" "Add to queue",
"Add to playlist"
], ],
"values": [ "values": [
"0x0", "0x0",
"0x1", "0x1",
"0x2" "0x2",
"0x3"
], ],
"defaultIndex": 0, "defaultIndex": 0,
"inline": true,
"distinctFrom": "left_action", "distinctFrom": "left_action",
"token": "RL_SWIPE_TO_QUEUE_RIGHT_ACTION" "token": "RL_SWIPE_TO_QUEUE_RIGHT_ACTION"
}, },
@@ -516,11 +520,10 @@
"type": "choice", "type": "choice",
"key": "remove_direction", "key": "remove_direction",
"title": "Remove Track from Queue", "title": "Remove Track from Queue",
"description": "Choose the swipe direction used to remove items from the play queue",
"entries": [ "entries": [
"Left swipe", "Left swipe",
"Right swipe", "Right swipe",
"Both" "Both directions"
], ],
"values": [ "values": [
"0x4", "0x4",
@@ -528,6 +531,8 @@
"0xc" "0xc"
], ],
"defaultIndex": 0, "defaultIndex": 0,
"forceDropdown": true,
"inline": true,
"token": "RL_SWIPE_TO_QUEUE_REMOVE_DIRECTION" "token": "RL_SWIPE_TO_QUEUE_REMOVE_DIRECTION"
}, },
{ {
@@ -543,6 +548,13 @@
"title": "Play Next Color", "title": "Play Next Color",
"default": -14408663, "default": -14408663,
"token": "RL_SWIPE_TO_QUEUE_PLAY_NEXT_COLOR" "token": "RL_SWIPE_TO_QUEUE_PLAY_NEXT_COLOR"
},
{
"type": "color",
"key": "add_to_playlist_color",
"title": "Add to Playlist Color",
"default": -14408663,
"token": "RL_SWIPE_TO_QUEUE_ADD_TO_PLAYLIST_COLOR"
} }
] ]
}, },
+13 -2
View File
@@ -1,6 +1,6 @@
--- a/com/aspiro/wamp/mycollection/subpages/favoritetracks/FavoriteTracksFragment.smali --- a/com/aspiro/wamp/mycollection/subpages/favoritetracks/FavoriteTracksFragment.smali
+++ b/com/aspiro/wamp/mycollection/subpages/favoritetracks/FavoriteTracksFragment.smali +++ b/com/aspiro/wamp/mycollection/subpages/favoritetracks/FavoriteTracksFragment.smali
@@ -107,6 +107,143 @@ @@ -107,6 +107,154 @@
.end method .end method
@@ -102,6 +102,10 @@
+ +
+ move-object v2, p2 + move-object v2, p2
+ +
+ const/4 p1, 0x3
+
+ if-eq p3, p1, :rl_favorite_add_to_playlist
+
+ const/4 p1, 0x1 + const/4 p1, 0x1
+ +
+ if-ne p3, p1, :rl_favorite_append + if-ne p3, p1, :rl_favorite_append
@@ -123,6 +127,13 @@
+ +
+ move-result v0 + move-result v0
+ +
+ goto :rl_favorite_result
+
+ :rl_favorite_add_to_playlist
+ invoke-static {v1, v2, v3, v4}, Lradiant/swipe/QueueExecutor;->addToPlaylistTrack(Landroid/content/Context;Lcom/aspiro/wamp/model/Track;Lcom/aspiro/wamp/eventtracking/model/ContextualMetadata;Lcom/aspiro/wamp/playqueue/source/model/Source;)V
+
+ goto :done
+
+ :rl_favorite_result + :rl_favorite_result
+ +
+ if-nez v0, :done + if-nez v0, :done
@@ -144,7 +155,7 @@
# virtual methods # virtual methods
.method public final M()Ln8/b; .method public final M()Ln8/b;
.locals 1 .locals 1
@@ -2265,9 +2437,16 @@ @@ -2265,9 +2448,16 @@
iput-object p0, p1, Lo4/g;->e:Lo4/g$e; iput-object p0, p1, Lo4/g;->e:Lo4/g$e;
.line 224 .line 224