Tweak code
This commit is contained in:
@@ -45,7 +45,6 @@ import it.vfsfitvnm.vimusic.models.Playlist
|
|||||||
import it.vfsfitvnm.vimusic.models.SongPlaylistMap
|
import it.vfsfitvnm.vimusic.models.SongPlaylistMap
|
||||||
import it.vfsfitvnm.vimusic.query
|
import it.vfsfitvnm.vimusic.query
|
||||||
import it.vfsfitvnm.vimusic.transaction
|
import it.vfsfitvnm.vimusic.transaction
|
||||||
import it.vfsfitvnm.vimusic.ui.components.LocalMenuState
|
|
||||||
import it.vfsfitvnm.vimusic.ui.screens.albumRoute
|
import it.vfsfitvnm.vimusic.ui.screens.albumRoute
|
||||||
import it.vfsfitvnm.vimusic.ui.screens.artistRoute
|
import it.vfsfitvnm.vimusic.ui.screens.artistRoute
|
||||||
import it.vfsfitvnm.vimusic.ui.screens.viewPlaylistsRoute
|
import it.vfsfitvnm.vimusic.ui.screens.viewPlaylistsRoute
|
||||||
@@ -62,9 +61,9 @@ import kotlinx.coroutines.flow.flowOf
|
|||||||
@ExperimentalAnimationApi
|
@ExperimentalAnimationApi
|
||||||
@Composable
|
@Composable
|
||||||
fun InFavoritesMediaItemMenu(
|
fun InFavoritesMediaItemMenu(
|
||||||
|
onDismiss: () -> Unit,
|
||||||
song: DetailedSong,
|
song: DetailedSong,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
onDismiss: (() -> Unit)? = null
|
|
||||||
) {
|
) {
|
||||||
NonQueuedMediaItemMenu(
|
NonQueuedMediaItemMenu(
|
||||||
mediaItem = song.asMediaItem,
|
mediaItem = song.asMediaItem,
|
||||||
@@ -81,11 +80,10 @@ fun InFavoritesMediaItemMenu(
|
|||||||
@ExperimentalAnimationApi
|
@ExperimentalAnimationApi
|
||||||
@Composable
|
@Composable
|
||||||
fun InHistoryMediaItemMenu(
|
fun InHistoryMediaItemMenu(
|
||||||
|
onDismiss: () -> Unit,
|
||||||
song: DetailedSong,
|
song: DetailedSong,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier
|
||||||
onDismiss: (() -> Unit)? = null
|
|
||||||
) {
|
) {
|
||||||
val menuState = LocalMenuState.current
|
|
||||||
val binder = LocalPlayerServiceBinder.current
|
val binder = LocalPlayerServiceBinder.current
|
||||||
|
|
||||||
var isHiding by remember {
|
var isHiding by remember {
|
||||||
@@ -97,7 +95,7 @@ fun InHistoryMediaItemMenu(
|
|||||||
text = "Do you really hide this song? Its playback time and cache will be wiped.\nThis action is irreversible.",
|
text = "Do you really hide this song? Its playback time and cache will be wiped.\nThis action is irreversible.",
|
||||||
onDismiss = { isHiding = false },
|
onDismiss = { isHiding = false },
|
||||||
onConfirm = {
|
onConfirm = {
|
||||||
(onDismiss ?: menuState::hide).invoke()
|
onDismiss()
|
||||||
query {
|
query {
|
||||||
// Not sure we can to this here
|
// Not sure we can to this here
|
||||||
binder?.cache?.removeResource(song.id)
|
binder?.cache?.removeResource(song.id)
|
||||||
@@ -118,11 +116,11 @@ fun InHistoryMediaItemMenu(
|
|||||||
@ExperimentalAnimationApi
|
@ExperimentalAnimationApi
|
||||||
@Composable
|
@Composable
|
||||||
fun InPlaylistMediaItemMenu(
|
fun InPlaylistMediaItemMenu(
|
||||||
|
onDismiss: () -> Unit,
|
||||||
playlistId: Long,
|
playlistId: Long,
|
||||||
positionInPlaylist: Int,
|
positionInPlaylist: Int,
|
||||||
song: DetailedSong,
|
song: DetailedSong,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier
|
||||||
onDismiss: (() -> Unit)? = null
|
|
||||||
) {
|
) {
|
||||||
NonQueuedMediaItemMenu(
|
NonQueuedMediaItemMenu(
|
||||||
mediaItem = song.asMediaItem,
|
mediaItem = song.asMediaItem,
|
||||||
@@ -140,19 +138,18 @@ fun InPlaylistMediaItemMenu(
|
|||||||
@ExperimentalAnimationApi
|
@ExperimentalAnimationApi
|
||||||
@Composable
|
@Composable
|
||||||
fun NonQueuedMediaItemMenu(
|
fun NonQueuedMediaItemMenu(
|
||||||
|
onDismiss: () -> Unit,
|
||||||
mediaItem: MediaItem,
|
mediaItem: MediaItem,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
onDismiss: (() -> Unit)? = null,
|
|
||||||
onRemoveFromPlaylist: (() -> Unit)? = null,
|
onRemoveFromPlaylist: (() -> Unit)? = null,
|
||||||
onHideFromDatabase: (() -> Unit)? = null,
|
onHideFromDatabase: (() -> Unit)? = null,
|
||||||
onRemoveFromFavorites: (() -> Unit)? = null,
|
onRemoveFromFavorites: (() -> Unit)? = null,
|
||||||
) {
|
) {
|
||||||
val menuState = LocalMenuState.current
|
|
||||||
val binder = LocalPlayerServiceBinder.current
|
val binder = LocalPlayerServiceBinder.current
|
||||||
|
|
||||||
BaseMediaItemMenu(
|
BaseMediaItemMenu(
|
||||||
mediaItem = mediaItem,
|
mediaItem = mediaItem,
|
||||||
onDismiss = onDismiss ?: menuState::hide,
|
onDismiss = onDismiss,
|
||||||
onStartRadio = {
|
onStartRadio = {
|
||||||
binder?.stopRadio()
|
binder?.stopRadio()
|
||||||
binder?.player?.forcePlay(mediaItem)
|
binder?.player?.forcePlay(mediaItem)
|
||||||
@@ -175,17 +172,16 @@ fun NonQueuedMediaItemMenu(
|
|||||||
@ExperimentalAnimationApi
|
@ExperimentalAnimationApi
|
||||||
@Composable
|
@Composable
|
||||||
fun QueuedMediaItemMenu(
|
fun QueuedMediaItemMenu(
|
||||||
|
onDismiss: () -> Unit,
|
||||||
mediaItem: MediaItem,
|
mediaItem: MediaItem,
|
||||||
indexInQueue: Int?,
|
indexInQueue: Int?,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier
|
||||||
onDismiss: (() -> Unit)? = null
|
|
||||||
) {
|
) {
|
||||||
val menuState = LocalMenuState.current
|
|
||||||
val binder = LocalPlayerServiceBinder.current
|
val binder = LocalPlayerServiceBinder.current
|
||||||
|
|
||||||
BaseMediaItemMenu(
|
BaseMediaItemMenu(
|
||||||
mediaItem = mediaItem,
|
mediaItem = mediaItem,
|
||||||
onDismiss = onDismiss ?: menuState::hide,
|
onDismiss = onDismiss,
|
||||||
onRemoveFromQueue = if (indexInQueue != null) ({
|
onRemoveFromQueue = if (indexInQueue != null) ({
|
||||||
binder?.player?.removeMediaItem(indexInQueue)
|
binder?.player?.removeMediaItem(indexInQueue)
|
||||||
}) else null,
|
}) else null,
|
||||||
@@ -196,11 +192,11 @@ fun QueuedMediaItemMenu(
|
|||||||
@ExperimentalAnimationApi
|
@ExperimentalAnimationApi
|
||||||
@Composable
|
@Composable
|
||||||
fun BaseMediaItemMenu(
|
fun BaseMediaItemMenu(
|
||||||
mediaItem: MediaItem,
|
|
||||||
onDismiss: () -> Unit,
|
onDismiss: () -> Unit,
|
||||||
|
mediaItem: MediaItem,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
onGoToEqualizer: (() -> Unit)? = null,
|
onGoToEqualizer: (() -> Unit)? = null,
|
||||||
onSetSleepTimer: (() -> Unit)? = null,
|
onShowSleepTimer: (() -> Unit)? = null,
|
||||||
onStartRadio: (() -> Unit)? = null,
|
onStartRadio: (() -> Unit)? = null,
|
||||||
onPlayNext: (() -> Unit)? = null,
|
onPlayNext: (() -> Unit)? = null,
|
||||||
onEnqueue: (() -> Unit)? = null,
|
onEnqueue: (() -> Unit)? = null,
|
||||||
@@ -215,7 +211,7 @@ fun BaseMediaItemMenu(
|
|||||||
mediaItem = mediaItem,
|
mediaItem = mediaItem,
|
||||||
onDismiss = onDismiss,
|
onDismiss = onDismiss,
|
||||||
onGoToEqualizer = onGoToEqualizer,
|
onGoToEqualizer = onGoToEqualizer,
|
||||||
onSetSleepTimer = onSetSleepTimer,
|
onShowSleepTimer = onShowSleepTimer,
|
||||||
onStartRadio = onStartRadio,
|
onStartRadio = onStartRadio,
|
||||||
onPlayNext = onPlayNext,
|
onPlayNext = onPlayNext,
|
||||||
onEnqueue = onEnqueue,
|
onEnqueue = onEnqueue,
|
||||||
@@ -256,11 +252,11 @@ fun BaseMediaItemMenu(
|
|||||||
@ExperimentalAnimationApi
|
@ExperimentalAnimationApi
|
||||||
@Composable
|
@Composable
|
||||||
fun MediaItemMenu(
|
fun MediaItemMenu(
|
||||||
mediaItem: MediaItem,
|
|
||||||
onDismiss: () -> Unit,
|
onDismiss: () -> Unit,
|
||||||
|
mediaItem: MediaItem,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
onGoToEqualizer: (() -> Unit)? = null,
|
onGoToEqualizer: (() -> Unit)? = null,
|
||||||
onSetSleepTimer: (() -> Unit)? = null,
|
onShowSleepTimer: (() -> Unit)? = null,
|
||||||
onStartRadio: (() -> Unit)? = null,
|
onStartRadio: (() -> Unit)? = null,
|
||||||
onPlayNext: (() -> Unit)? = null,
|
onPlayNext: (() -> Unit)? = null,
|
||||||
onEnqueue: (() -> Unit)? = null,
|
onEnqueue: (() -> Unit)? = null,
|
||||||
@@ -413,7 +409,8 @@ fun MediaItemMenu(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
onSetSleepTimer?.let {
|
// TODO: find solution to this shit
|
||||||
|
onShowSleepTimer?.let {
|
||||||
val binder = LocalPlayerServiceBinder.current
|
val binder = LocalPlayerServiceBinder.current
|
||||||
val (colorPalette, typography) = LocalAppearance.current
|
val (colorPalette, typography) = LocalAppearance.current
|
||||||
|
|
||||||
@@ -432,17 +429,15 @@ fun MediaItemMenu(
|
|||||||
confirmText = "Stop",
|
confirmText = "Stop",
|
||||||
onDismiss = {
|
onDismiss = {
|
||||||
isShowingSleepTimerDialog = false
|
isShowingSleepTimerDialog = false
|
||||||
|
onDismiss()
|
||||||
},
|
},
|
||||||
onConfirm = {
|
onConfirm = {
|
||||||
binder?.cancelSleepTimer()
|
binder?.cancelSleepTimer()
|
||||||
|
onDismiss()
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
DefaultDialog(
|
DefaultDialog(onDismiss = { isShowingSleepTimerDialog = false }) {
|
||||||
onDismiss = {
|
|
||||||
isShowingSleepTimerDialog = false
|
|
||||||
}
|
|
||||||
) {
|
|
||||||
var amount by remember {
|
var amount by remember {
|
||||||
mutableStateOf(1)
|
mutableStateOf(1)
|
||||||
}
|
}
|
||||||
@@ -514,7 +509,10 @@ fun MediaItemMenu(
|
|||||||
) {
|
) {
|
||||||
DialogTextButton(
|
DialogTextButton(
|
||||||
text = "Cancel",
|
text = "Cancel",
|
||||||
onClick = { isShowingSleepTimerDialog = false }
|
onClick = {
|
||||||
|
isShowingSleepTimerDialog = false
|
||||||
|
onDismiss()
|
||||||
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
DialogTextButton(
|
DialogTextButton(
|
||||||
@@ -523,6 +521,7 @@ fun MediaItemMenu(
|
|||||||
onClick = {
|
onClick = {
|
||||||
binder?.startSleepTimer(amount * 10 * 60 * 1000L)
|
binder?.startSleepTimer(amount * 10 * 60 * 1000L)
|
||||||
isShowingSleepTimerDialog = false
|
isShowingSleepTimerDialog = false
|
||||||
|
onDismiss()
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -117,7 +117,10 @@ fun AlbumSongs(
|
|||||||
.combinedClickable(
|
.combinedClickable(
|
||||||
onLongClick = {
|
onLongClick = {
|
||||||
menuState.display {
|
menuState.display {
|
||||||
NonQueuedMediaItemMenu(mediaItem = song.asMediaItem)
|
NonQueuedMediaItemMenu(
|
||||||
|
onDismiss = menuState::hide,
|
||||||
|
mediaItem = song.asMediaItem,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onClick = {
|
onClick = {
|
||||||
|
|||||||
@@ -102,12 +102,18 @@ fun ArtistLocalSongs(
|
|||||||
.combinedClickable(
|
.combinedClickable(
|
||||||
onLongClick = {
|
onLongClick = {
|
||||||
menuState.display {
|
menuState.display {
|
||||||
NonQueuedMediaItemMenu(mediaItem = song.asMediaItem)
|
NonQueuedMediaItemMenu(
|
||||||
|
onDismiss = menuState::hide,
|
||||||
|
mediaItem = song.asMediaItem,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onClick = {
|
onClick = {
|
||||||
binder?.stopRadio()
|
binder?.stopRadio()
|
||||||
binder?.player?.forcePlayAtIndex(songs.map(DetailedSong::asMediaItem), index)
|
binder?.player?.forcePlayAtIndex(
|
||||||
|
songs.map(DetailedSong::asMediaItem),
|
||||||
|
index
|
||||||
|
)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -125,7 +125,10 @@ fun ArtistOverview(
|
|||||||
.combinedClickable(
|
.combinedClickable(
|
||||||
onLongClick = {
|
onLongClick = {
|
||||||
menuState.display {
|
menuState.display {
|
||||||
NonQueuedMediaItemMenu(mediaItem = song.asMediaItem)
|
NonQueuedMediaItemMenu(
|
||||||
|
onDismiss = menuState::hide,
|
||||||
|
mediaItem = song.asMediaItem,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onClick = {
|
onClick = {
|
||||||
|
|||||||
@@ -284,7 +284,10 @@ fun ArtistScreen(browseId: String) {
|
|||||||
.combinedClickable(
|
.combinedClickable(
|
||||||
onLongClick = {
|
onLongClick = {
|
||||||
menuState.display {
|
menuState.display {
|
||||||
NonQueuedMediaItemMenu(mediaItem = song.asMediaItem)
|
NonQueuedMediaItemMenu(
|
||||||
|
onDismiss = menuState::hide,
|
||||||
|
mediaItem = song.asMediaItem,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onClick = {
|
onClick = {
|
||||||
|
|||||||
@@ -116,8 +116,14 @@ fun BuiltInPlaylistSongs(builtInPlaylist: BuiltInPlaylist) {
|
|||||||
onLongClick = {
|
onLongClick = {
|
||||||
menuState.display {
|
menuState.display {
|
||||||
when (builtInPlaylist) {
|
when (builtInPlaylist) {
|
||||||
BuiltInPlaylist.Favorites -> InFavoritesMediaItemMenu(song = song)
|
BuiltInPlaylist.Favorites -> InFavoritesMediaItemMenu(
|
||||||
BuiltInPlaylist.Offline -> InHistoryMediaItemMenu(song = song)
|
song = song,
|
||||||
|
onDismiss = menuState::hide
|
||||||
|
)
|
||||||
|
BuiltInPlaylist.Offline -> InHistoryMediaItemMenu(
|
||||||
|
song = song,
|
||||||
|
onDismiss = menuState::hide
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -168,12 +168,18 @@ fun HomeSongs() {
|
|||||||
.combinedClickable(
|
.combinedClickable(
|
||||||
onLongClick = {
|
onLongClick = {
|
||||||
menuState.display {
|
menuState.display {
|
||||||
InHistoryMediaItemMenu(song = song)
|
InHistoryMediaItemMenu(
|
||||||
|
song = song,
|
||||||
|
onDismiss = menuState::hide
|
||||||
|
)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onClick = {
|
onClick = {
|
||||||
binder?.stopRadio()
|
binder?.stopRadio()
|
||||||
binder?.player?.forcePlayAtIndex(items.map(DetailedSong::asMediaItem), index)
|
binder?.player?.forcePlayAtIndex(
|
||||||
|
items.map(DetailedSong::asMediaItem),
|
||||||
|
index
|
||||||
|
)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
.animateItemPlacement()
|
.animateItemPlacement()
|
||||||
|
|||||||
@@ -138,7 +138,10 @@ fun QuickPicks(
|
|||||||
.combinedClickable(
|
.combinedClickable(
|
||||||
onLongClick = {
|
onLongClick = {
|
||||||
menuState.display {
|
menuState.display {
|
||||||
NonQueuedMediaItemMenu(mediaItem = song.asMediaItem)
|
NonQueuedMediaItemMenu(
|
||||||
|
onDismiss = menuState::hide,
|
||||||
|
mediaItem = song.asMediaItem,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onClick = {
|
onClick = {
|
||||||
@@ -168,7 +171,10 @@ fun QuickPicks(
|
|||||||
.combinedClickable(
|
.combinedClickable(
|
||||||
onLongClick = {
|
onLongClick = {
|
||||||
menuState.display {
|
menuState.display {
|
||||||
NonQueuedMediaItemMenu(mediaItem = song.asMediaItem)
|
NonQueuedMediaItemMenu(
|
||||||
|
onDismiss = menuState::hide,
|
||||||
|
mediaItem = song.asMediaItem,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onClick = {
|
onClick = {
|
||||||
|
|||||||
@@ -172,13 +172,13 @@ fun LocalPlaylistSongs(
|
|||||||
transaction {
|
transaction {
|
||||||
runBlocking(Dispatchers.IO) {
|
runBlocking(Dispatchers.IO) {
|
||||||
withContext(Dispatchers.IO) {
|
withContext(Dispatchers.IO) {
|
||||||
Innertube.playlistPage(BrowseBody(browseId = browseId))?.completed()
|
Innertube.playlistPage(BrowseBody(browseId = browseId))
|
||||||
|
?.completed()
|
||||||
}
|
}
|
||||||
}?.getOrNull()?.let { remotePlaylist ->
|
}?.getOrNull()?.let { remotePlaylist ->
|
||||||
Database.clearPlaylist(playlistId)
|
Database.clearPlaylist(playlistId)
|
||||||
|
|
||||||
remotePlaylist.
|
remotePlaylist.songsPage
|
||||||
songsPage
|
|
||||||
?.items
|
?.items
|
||||||
?.map(Innertube.SongItem::asMediaItem)
|
?.map(Innertube.SongItem::asMediaItem)
|
||||||
?.onEach(Database::insert)
|
?.onEach(Database::insert)
|
||||||
@@ -240,12 +240,14 @@ fun LocalPlaylistSongs(
|
|||||||
InPlaylistMediaItemMenu(
|
InPlaylistMediaItemMenu(
|
||||||
playlistId = playlistId,
|
playlistId = playlistId,
|
||||||
positionInPlaylist = index,
|
positionInPlaylist = index,
|
||||||
song = song
|
song = song,
|
||||||
|
onDismiss = menuState::hide
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onClick = {
|
onClick = {
|
||||||
playlistWithSongs?.songs?.map(DetailedSong::asMediaItem)
|
playlistWithSongs?.songs
|
||||||
|
?.map(DetailedSong::asMediaItem)
|
||||||
?.let { mediaItems ->
|
?.let { mediaItems ->
|
||||||
binder?.stopRadio()
|
binder?.stopRadio()
|
||||||
binder?.player?.forcePlayAtIndex(mediaItems, index)
|
binder?.player?.forcePlayAtIndex(mediaItems, index)
|
||||||
|
|||||||
@@ -210,7 +210,8 @@ fun PlayerBottomSheet(
|
|||||||
menuState.display {
|
menuState.display {
|
||||||
QueuedMediaItemMenu(
|
QueuedMediaItemMenu(
|
||||||
mediaItem = window.mediaItem,
|
mediaItem = window.mediaItem,
|
||||||
indexInQueue = if (isPlayingThisMediaItem) null else window.firstPeriodIndex
|
indexInQueue = if (isPlayingThisMediaItem) null else window.firstPeriodIndex,
|
||||||
|
onDismiss = menuState::hide
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -268,7 +269,10 @@ fun PlayerBottomSheet(
|
|||||||
text = "${windows.size} songs",
|
text = "${windows.size} songs",
|
||||||
style = typography.xxs.medium,
|
style = typography.xxs.medium,
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.background(color = colorPalette.background1, shape = RoundedCornerShape(16.dp))
|
.background(
|
||||||
|
color = colorPalette.background1,
|
||||||
|
shape = RoundedCornerShape(16.dp)
|
||||||
|
)
|
||||||
.align(Alignment.CenterStart)
|
.align(Alignment.CenterStart)
|
||||||
.padding(all = 8.dp)
|
.padding(all = 8.dp)
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -44,11 +44,13 @@ import androidx.compose.ui.platform.LocalContext
|
|||||||
import androidx.compose.ui.platform.LocalLayoutDirection
|
import androidx.compose.ui.platform.LocalLayoutDirection
|
||||||
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 androidx.media3.common.MediaItem
|
||||||
import androidx.media3.common.Player
|
import androidx.media3.common.Player
|
||||||
import coil.compose.AsyncImage
|
import coil.compose.AsyncImage
|
||||||
import it.vfsfitvnm.route.OnGlobalRoute
|
import it.vfsfitvnm.route.OnGlobalRoute
|
||||||
import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder
|
import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder
|
||||||
import it.vfsfitvnm.vimusic.R
|
import it.vfsfitvnm.vimusic.R
|
||||||
|
import it.vfsfitvnm.vimusic.service.PlayerService
|
||||||
import it.vfsfitvnm.vimusic.ui.components.BottomSheet
|
import it.vfsfitvnm.vimusic.ui.components.BottomSheet
|
||||||
import it.vfsfitvnm.vimusic.ui.components.BottomSheetState
|
import it.vfsfitvnm.vimusic.ui.components.BottomSheetState
|
||||||
import it.vfsfitvnm.vimusic.ui.components.LocalMenuState
|
import it.vfsfitvnm.vimusic.ui.components.LocalMenuState
|
||||||
@@ -219,7 +221,10 @@ fun PlayerView(
|
|||||||
}
|
}
|
||||||
|
|
||||||
val paddingValues = WindowInsets.navigationBars.asPaddingValues()
|
val paddingValues = WindowInsets.navigationBars.asPaddingValues()
|
||||||
val playerBottomSheetState = rememberBottomSheetState(64.dp + paddingValues.calculateBottomPadding(), layoutState.expandedBound)
|
val playerBottomSheetState = rememberBottomSheetState(
|
||||||
|
64.dp + paddingValues.calculateBottomPadding(),
|
||||||
|
layoutState.expandedBound
|
||||||
|
)
|
||||||
|
|
||||||
when (configuration.orientation) {
|
when (configuration.orientation) {
|
||||||
Configuration.ORIENTATION_LANDSCAPE -> {
|
Configuration.ORIENTATION_LANDSCAPE -> {
|
||||||
@@ -265,6 +270,7 @@ fun PlayerView(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
else -> {
|
else -> {
|
||||||
Column(
|
Column(
|
||||||
horizontalAlignment = Alignment.CenterHorizontally,
|
horizontalAlignment = Alignment.CenterHorizontally,
|
||||||
@@ -325,50 +331,10 @@ fun PlayerView(
|
|||||||
color = colorPalette.text,
|
color = colorPalette.text,
|
||||||
onClick = {
|
onClick = {
|
||||||
menuState.display {
|
menuState.display {
|
||||||
val resultRegistryOwner =
|
PlayerMenu(
|
||||||
LocalActivityResultRegistryOwner.current
|
onDismiss = menuState::hide,
|
||||||
|
|
||||||
BaseMediaItemMenu(
|
|
||||||
mediaItem = mediaItem,
|
mediaItem = mediaItem,
|
||||||
onStartRadio = {
|
binder = binder
|
||||||
binder.stopRadio()
|
|
||||||
binder.player.seamlessPlay(mediaItem)
|
|
||||||
binder.setupRadio(
|
|
||||||
NavigationEndpoint.Endpoint.Watch(videoId = mediaItem.mediaId)
|
|
||||||
)
|
|
||||||
},
|
|
||||||
onGoToEqualizer = {
|
|
||||||
val intent =
|
|
||||||
Intent(AudioEffect.ACTION_DISPLAY_AUDIO_EFFECT_CONTROL_PANEL).apply {
|
|
||||||
putExtra(
|
|
||||||
AudioEffect.EXTRA_AUDIO_SESSION,
|
|
||||||
binder.player.audioSessionId
|
|
||||||
)
|
|
||||||
putExtra(
|
|
||||||
AudioEffect.EXTRA_PACKAGE_NAME,
|
|
||||||
context.packageName
|
|
||||||
)
|
|
||||||
putExtra(
|
|
||||||
AudioEffect.EXTRA_CONTENT_TYPE,
|
|
||||||
AudioEffect.CONTENT_TYPE_MUSIC
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (intent.resolveActivity(context.packageManager) != null) {
|
|
||||||
val contract =
|
|
||||||
ActivityResultContracts.StartActivityForResult()
|
|
||||||
|
|
||||||
resultRegistryOwner?.activityResultRegistry
|
|
||||||
?.register("", contract) {}
|
|
||||||
?.launch(intent)
|
|
||||||
} else {
|
|
||||||
Toast
|
|
||||||
.makeText(context, "No equalizer app found!", Toast.LENGTH_SHORT)
|
|
||||||
.show()
|
|
||||||
}
|
|
||||||
},
|
|
||||||
onSetSleepTimer = {},
|
|
||||||
onDismiss = menuState::hide
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -389,3 +355,41 @@ fun PlayerView(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ExperimentalAnimationApi
|
||||||
|
@Composable
|
||||||
|
private fun PlayerMenu(
|
||||||
|
binder: PlayerService.Binder,
|
||||||
|
mediaItem: MediaItem,
|
||||||
|
onDismiss: () -> Unit
|
||||||
|
) {
|
||||||
|
val context = LocalContext.current
|
||||||
|
val resultRegistryOwner = LocalActivityResultRegistryOwner.current
|
||||||
|
|
||||||
|
BaseMediaItemMenu(
|
||||||
|
mediaItem = mediaItem,
|
||||||
|
onStartRadio = {
|
||||||
|
binder.stopRadio()
|
||||||
|
binder.player.seamlessPlay(mediaItem)
|
||||||
|
binder.setupRadio(NavigationEndpoint.Endpoint.Watch(videoId = mediaItem.mediaId))
|
||||||
|
},
|
||||||
|
onGoToEqualizer = {
|
||||||
|
val intent = Intent(AudioEffect.ACTION_DISPLAY_AUDIO_EFFECT_CONTROL_PANEL).apply {
|
||||||
|
putExtra(AudioEffect.EXTRA_AUDIO_SESSION, binder.player.audioSessionId)
|
||||||
|
putExtra(AudioEffect.EXTRA_PACKAGE_NAME, context.packageName)
|
||||||
|
putExtra(AudioEffect.EXTRA_CONTENT_TYPE, AudioEffect.CONTENT_TYPE_MUSIC)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (intent.resolveActivity(context.packageManager) != null) {
|
||||||
|
val contract = ActivityResultContracts.StartActivityForResult()
|
||||||
|
|
||||||
|
resultRegistryOwner?.activityResultRegistry
|
||||||
|
?.register("", contract) {}?.launch(intent)
|
||||||
|
} else {
|
||||||
|
Toast.makeText(context, "No equalizer app found!", Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onShowSleepTimer = {},
|
||||||
|
onDismiss = onDismiss
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|||||||
@@ -199,7 +199,10 @@ fun PlaylistSongList(
|
|||||||
.combinedClickable(
|
.combinedClickable(
|
||||||
onLongClick = {
|
onLongClick = {
|
||||||
menuState.display {
|
menuState.display {
|
||||||
NonQueuedMediaItemMenu(mediaItem = song.asMediaItem)
|
NonQueuedMediaItemMenu(
|
||||||
|
onDismiss = menuState::hide,
|
||||||
|
mediaItem = song.asMediaItem,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onClick = {
|
onClick = {
|
||||||
|
|||||||
@@ -110,7 +110,10 @@ fun LocalSongSearch(
|
|||||||
.combinedClickable(
|
.combinedClickable(
|
||||||
onLongClick = {
|
onLongClick = {
|
||||||
menuState.display {
|
menuState.display {
|
||||||
InHistoryMediaItemMenu(song = song)
|
InHistoryMediaItemMenu(
|
||||||
|
song = song,
|
||||||
|
onDismiss = menuState::hide
|
||||||
|
)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onClick = {
|
onClick = {
|
||||||
|
|||||||
@@ -124,7 +124,10 @@ fun SearchResultScreen(query: String, onSearchAgain: () -> Unit) {
|
|||||||
.combinedClickable(
|
.combinedClickable(
|
||||||
onLongClick = {
|
onLongClick = {
|
||||||
menuState.display {
|
menuState.display {
|
||||||
NonQueuedMediaItemMenu(mediaItem = song.asMediaItem)
|
NonQueuedMediaItemMenu(
|
||||||
|
onDismiss = menuState::hide,
|
||||||
|
mediaItem = song.asMediaItem,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onClick = {
|
onClick = {
|
||||||
@@ -246,7 +249,10 @@ fun SearchResultScreen(query: String, onSearchAgain: () -> Unit) {
|
|||||||
.combinedClickable(
|
.combinedClickable(
|
||||||
onLongClick = {
|
onLongClick = {
|
||||||
menuState.display {
|
menuState.display {
|
||||||
NonQueuedMediaItemMenu(mediaItem = video.asMediaItem)
|
NonQueuedMediaItemMenu(
|
||||||
|
mediaItem = video.asMediaItem,
|
||||||
|
onDismiss = menuState::hide
|
||||||
|
)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onClick = {
|
onClick = {
|
||||||
|
|||||||
Reference in New Issue
Block a user