From 579445423d256e0be98ead52dcd18b414d9a5df0 Mon Sep 17 00:00:00 2001 From: vfsfitvnm Date: Fri, 7 Oct 2022 15:08:44 +0200 Subject: [PATCH] Improve playerBottomSheetState handling --- .../it/vfsfitvnm/vimusic/MainActivity.kt | 40 ++++++++++--------- .../vimusic/ui/screens/player/PlayerView.kt | 1 - 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/MainActivity.kt b/app/src/main/kotlin/it/vfsfitvnm/vimusic/MainActivity.kt index f90712f..0efa01d 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/MainActivity.kt +++ b/app/src/main/kotlin/it/vfsfitvnm/vimusic/MainActivity.kt @@ -59,9 +59,6 @@ import it.vfsfitvnm.vimusic.enums.ThumbnailRoundness import it.vfsfitvnm.vimusic.service.PlayerService import it.vfsfitvnm.vimusic.ui.components.BottomSheetMenu import it.vfsfitvnm.vimusic.ui.components.LocalMenuState -import it.vfsfitvnm.vimusic.ui.components.collapsedAnchor -import it.vfsfitvnm.vimusic.ui.components.dismissedAnchor -import it.vfsfitvnm.vimusic.ui.components.expandedAnchor import it.vfsfitvnm.vimusic.ui.components.rememberBottomSheetState import it.vfsfitvnm.vimusic.ui.screens.albumRoute import it.vfsfitvnm.vimusic.ui.screens.home.HomeScreen @@ -94,10 +91,6 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.withContext class MainActivity : ComponentActivity() { - companion object { - private var alreadyRunning = false - } - private val serviceConnection = object : ServiceConnection { override fun onServiceConnected(name: ComponentName?, service: IBinder?) { if (service is PlayerService.Binder) { @@ -128,11 +121,7 @@ class MainActivity : ComponentActivity() { WindowCompat.setDecorFitsSystemWindows(window, false) - val playerBottomSheetAnchor = when { - intent?.extras?.getBoolean("expandPlayerBottomSheet") == true -> expandedAnchor - alreadyRunning -> collapsedAnchor - else -> dismissedAnchor.also { alreadyRunning = true } - } + val launchedFromNotification = intent?.extras?.getBoolean("expandPlayerBottomSheet") == true setContent { val coroutineScope = rememberCoroutineScope() @@ -309,7 +298,6 @@ class MainActivity : ComponentActivity() { dismissedBound = 0.dp, collapsedBound = Dimensions.collapsedPlayer + paddingValues.calculateBottomPadding(), expandedBound = maxHeight, - initialAnchor = playerBottomSheetAnchor ) val playerAwarePaddingValues = if (playerBottomSheetState.isDismissed) { @@ -342,16 +330,30 @@ class MainActivity : ComponentActivity() { ) DisposableEffect(binder?.player) { - binder?.player?.listener(object : Player.Listener { - override fun onMediaItemTransition( - mediaItem: MediaItem?, - reason: Int - ) { + val player = binder?.player ?: return@DisposableEffect onDispose { } + + if (player.currentMediaItem == null) { + if (!playerBottomSheetState.isDismissed) { + playerBottomSheetState.dismiss() + } + } else { + if (playerBottomSheetState.isDismissed) { + if (launchedFromNotification) { + intent.replaceExtras(Bundle()) + playerBottomSheetState.expandSoft() + } else { + playerBottomSheetState.collapseSoft() + } + } + } + + player.listener(object : Player.Listener { + override fun onMediaItemTransition(mediaItem: MediaItem?, reason: Int) { if (reason == Player.MEDIA_ITEM_TRANSITION_REASON_PLAYLIST_CHANGED && mediaItem != null) { playerBottomSheetState.expand(tween(500)) } } - }) ?: onDispose { } + }) } BottomSheetMenu( diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/player/PlayerView.kt b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/player/PlayerView.kt index fdd78f6..82b8b4d 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/player/PlayerView.kt +++ b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/player/PlayerView.kt @@ -82,7 +82,6 @@ fun PlayerView( val (colorPalette, typography, thumbnailShape) = LocalAppearance.current val binder = LocalPlayerServiceBinder.current - val context = LocalContext.current val configuration = LocalConfiguration.current val layoutDirection = LocalLayoutDirection.current