Tweak Player UI code
This commit is contained in:
parent
f7f65c44a7
commit
21dec9cd05
3 changed files with 78 additions and 87 deletions
|
@ -63,7 +63,7 @@ import it.vfsfitvnm.vimusic.ui.components.LocalMenuState
|
||||||
import it.vfsfitvnm.vimusic.ui.components.rememberBottomSheetState
|
import it.vfsfitvnm.vimusic.ui.components.rememberBottomSheetState
|
||||||
import it.vfsfitvnm.vimusic.ui.screens.albumRoute
|
import it.vfsfitvnm.vimusic.ui.screens.albumRoute
|
||||||
import it.vfsfitvnm.vimusic.ui.screens.home.HomeScreen
|
import it.vfsfitvnm.vimusic.ui.screens.home.HomeScreen
|
||||||
import it.vfsfitvnm.vimusic.ui.screens.player.PlayerView
|
import it.vfsfitvnm.vimusic.ui.screens.player.Player
|
||||||
import it.vfsfitvnm.vimusic.ui.screens.playlistRoute
|
import it.vfsfitvnm.vimusic.ui.screens.playlistRoute
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.Appearance
|
import it.vfsfitvnm.vimusic.ui.styling.Appearance
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
||||||
|
@ -323,7 +323,7 @@ class MainActivity : ComponentActivity() {
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
PlayerView(
|
Player(
|
||||||
layoutState = playerBottomSheetState,
|
layoutState = playerBottomSheetState,
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.align(Alignment.BottomCenter)
|
.align(Alignment.BottomCenter)
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
package it.vfsfitvnm.vimusic.ui.screens.player
|
package it.vfsfitvnm.vimusic.ui.screens.player
|
||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.res.Configuration
|
|
||||||
import android.media.audiofx.AudioEffect
|
import android.media.audiofx.AudioEffect
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.activity.compose.LocalActivityResultRegistryOwner
|
import androidx.activity.compose.LocalActivityResultRegistryOwner
|
||||||
|
@ -39,7 +38,6 @@ import androidx.compose.ui.draw.clip
|
||||||
import androidx.compose.ui.draw.drawBehind
|
import androidx.compose.ui.draw.drawBehind
|
||||||
import androidx.compose.ui.geometry.Offset
|
import androidx.compose.ui.geometry.Offset
|
||||||
import androidx.compose.ui.layout.ContentScale
|
import androidx.compose.ui.layout.ContentScale
|
||||||
import androidx.compose.ui.platform.LocalConfiguration
|
|
||||||
import androidx.compose.ui.platform.LocalContext
|
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
|
||||||
|
@ -61,6 +59,7 @@ import it.vfsfitvnm.vimusic.ui.styling.Dimensions
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.collapsedPlayerProgressBar
|
import it.vfsfitvnm.vimusic.ui.styling.collapsedPlayerProgressBar
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.px
|
import it.vfsfitvnm.vimusic.ui.styling.px
|
||||||
|
import it.vfsfitvnm.vimusic.utils.isLandscape
|
||||||
import it.vfsfitvnm.vimusic.utils.rememberMediaItem
|
import it.vfsfitvnm.vimusic.utils.rememberMediaItem
|
||||||
import it.vfsfitvnm.vimusic.utils.rememberPositionAndDuration
|
import it.vfsfitvnm.vimusic.utils.rememberPositionAndDuration
|
||||||
import it.vfsfitvnm.vimusic.utils.rememberShouldBePlaying
|
import it.vfsfitvnm.vimusic.utils.rememberShouldBePlaying
|
||||||
|
@ -74,7 +73,7 @@ import kotlin.math.absoluteValue
|
||||||
@ExperimentalFoundationApi
|
@ExperimentalFoundationApi
|
||||||
@ExperimentalAnimationApi
|
@ExperimentalAnimationApi
|
||||||
@Composable
|
@Composable
|
||||||
fun PlayerView(
|
fun Player(
|
||||||
layoutState: BottomSheetState,
|
layoutState: BottomSheetState,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
) {
|
) {
|
||||||
|
@ -82,7 +81,6 @@ fun PlayerView(
|
||||||
|
|
||||||
val (colorPalette, typography, thumbnailShape) = LocalAppearance.current
|
val (colorPalette, typography, thumbnailShape) = LocalAppearance.current
|
||||||
val binder = LocalPlayerServiceBinder.current
|
val binder = LocalPlayerServiceBinder.current
|
||||||
val configuration = LocalConfiguration.current
|
|
||||||
val layoutDirection = LocalLayoutDirection.current
|
val layoutDirection = LocalLayoutDirection.current
|
||||||
|
|
||||||
binder?.player ?: return
|
binder?.player ?: return
|
||||||
|
@ -225,18 +223,43 @@ fun PlayerView(
|
||||||
layoutState.expandedBound
|
layoutState.expandedBound
|
||||||
)
|
)
|
||||||
|
|
||||||
when (configuration.orientation) {
|
val containerModifier = Modifier
|
||||||
Configuration.ORIENTATION_LANDSCAPE -> {
|
|
||||||
Row(
|
|
||||||
verticalAlignment = Alignment.CenterVertically,
|
|
||||||
modifier = Modifier
|
|
||||||
.background(colorPalette.background1)
|
.background(colorPalette.background1)
|
||||||
.padding(
|
.padding(
|
||||||
top = 32.dp + paddingValues.calculateTopPadding(),
|
top = paddingValues.calculateTopPadding(),
|
||||||
start = paddingValues.calculateStartPadding(layoutDirection),
|
start = paddingValues.calculateStartPadding(layoutDirection),
|
||||||
end = paddingValues.calculateEndPadding(layoutDirection),
|
end = paddingValues.calculateEndPadding(layoutDirection),
|
||||||
bottom = playerBottomSheetState.collapsedBound
|
bottom = playerBottomSheetState.collapsedBound
|
||||||
)
|
)
|
||||||
|
|
||||||
|
val thumbnailContent: @Composable (modifier: Modifier) -> Unit = { modifier ->
|
||||||
|
Thumbnail(
|
||||||
|
isShowingLyrics = isShowingLyrics,
|
||||||
|
onShowLyrics = { isShowingLyrics = it },
|
||||||
|
isShowingStatsForNerds = isShowingStatsForNerds,
|
||||||
|
onShowStatsForNerds = { isShowingStatsForNerds = it },
|
||||||
|
nestedScrollConnectionProvider = layoutState::nestedScrollConnection,
|
||||||
|
modifier = modifier
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
val controlsContent: @Composable (modifier: Modifier) -> Unit = { modifier ->
|
||||||
|
Controls(
|
||||||
|
mediaId = mediaItem.mediaId,
|
||||||
|
title = mediaItem.mediaMetadata.title?.toString(),
|
||||||
|
artist = mediaItem.mediaMetadata.artist?.toString(),
|
||||||
|
shouldBePlaying = shouldBePlaying,
|
||||||
|
position = positionAndDuration.first,
|
||||||
|
duration = positionAndDuration.second,
|
||||||
|
modifier = modifier
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isLandscape) {
|
||||||
|
Row(
|
||||||
|
verticalAlignment = Alignment.CenterVertically,
|
||||||
|
modifier = containerModifier
|
||||||
|
.padding(top = 32.dp)
|
||||||
) {
|
) {
|
||||||
Box(
|
Box(
|
||||||
contentAlignment = Alignment.Center,
|
contentAlignment = Alignment.Center,
|
||||||
|
@ -244,67 +267,37 @@ fun PlayerView(
|
||||||
.weight(0.66f)
|
.weight(0.66f)
|
||||||
.padding(bottom = 16.dp)
|
.padding(bottom = 16.dp)
|
||||||
) {
|
) {
|
||||||
Thumbnail(
|
thumbnailContent(
|
||||||
isShowingLyrics = isShowingLyrics,
|
|
||||||
onShowLyrics = { isShowingLyrics = it },
|
|
||||||
isShowingStatsForNerds = isShowingStatsForNerds,
|
|
||||||
onShowStatsForNerds = { isShowingStatsForNerds = it },
|
|
||||||
nestedScrollConnectionProvider = layoutState::nestedScrollConnection,
|
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.padding(horizontal = 16.dp)
|
.padding(horizontal = 16.dp)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
Controls(
|
controlsContent(
|
||||||
mediaId = mediaItem.mediaId,
|
|
||||||
title = mediaItem.mediaMetadata.title?.toString(),
|
|
||||||
artist = mediaItem.mediaMetadata.artist?.toString(),
|
|
||||||
shouldBePlaying = shouldBePlaying,
|
|
||||||
position = positionAndDuration.first,
|
|
||||||
duration = positionAndDuration.second,
|
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.padding(vertical = 8.dp)
|
.padding(vertical = 8.dp)
|
||||||
.fillMaxHeight()
|
.fillMaxHeight()
|
||||||
.weight(1f)
|
.weight(1f)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
|
|
||||||
else -> {
|
|
||||||
Column(
|
Column(
|
||||||
horizontalAlignment = Alignment.CenterHorizontally,
|
horizontalAlignment = Alignment.CenterHorizontally,
|
||||||
modifier = Modifier
|
modifier = containerModifier
|
||||||
.background(colorPalette.background1)
|
.padding(top = 54.dp)
|
||||||
.padding(
|
|
||||||
top = 54.dp + paddingValues.calculateTopPadding(),
|
|
||||||
start = paddingValues.calculateStartPadding(layoutDirection),
|
|
||||||
end = paddingValues.calculateEndPadding(layoutDirection),
|
|
||||||
bottom = playerBottomSheetState.collapsedBound
|
|
||||||
)
|
|
||||||
) {
|
) {
|
||||||
Box(
|
Box(
|
||||||
contentAlignment = Alignment.Center,
|
contentAlignment = Alignment.Center,
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.weight(1.25f)
|
.weight(1.25f)
|
||||||
) {
|
) {
|
||||||
Thumbnail(
|
thumbnailContent(
|
||||||
isShowingLyrics = isShowingLyrics,
|
|
||||||
onShowLyrics = { isShowingLyrics = it },
|
|
||||||
isShowingStatsForNerds = isShowingStatsForNerds,
|
|
||||||
onShowStatsForNerds = { isShowingStatsForNerds = it },
|
|
||||||
nestedScrollConnectionProvider = layoutState::nestedScrollConnection,
|
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.padding(horizontal = 32.dp, vertical = 8.dp)
|
.padding(horizontal = 32.dp, vertical = 8.dp)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
Controls(
|
controlsContent(
|
||||||
mediaId = mediaItem.mediaId,
|
|
||||||
title = mediaItem.mediaMetadata.title?.toString(),
|
|
||||||
artist = mediaItem.mediaMetadata.artist?.toString(),
|
|
||||||
shouldBePlaying = shouldBePlaying,
|
|
||||||
position = positionAndDuration.first,
|
|
||||||
duration = positionAndDuration.second,
|
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.padding(vertical = 8.dp)
|
.padding(vertical = 8.dp)
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
|
@ -312,9 +305,9 @@ fun PlayerView(
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
PlayerBottomSheet(
|
|
||||||
|
Queue(
|
||||||
layoutState = playerBottomSheetState,
|
layoutState = playerBottomSheetState,
|
||||||
content = {
|
content = {
|
||||||
Row(
|
Row(
|
|
@ -72,7 +72,7 @@ import kotlinx.coroutines.launch
|
||||||
@ExperimentalFoundationApi
|
@ExperimentalFoundationApi
|
||||||
@ExperimentalAnimationApi
|
@ExperimentalAnimationApi
|
||||||
@Composable
|
@Composable
|
||||||
fun PlayerBottomSheet(
|
fun Queue(
|
||||||
backgroundColorProvider: () -> Color,
|
backgroundColorProvider: () -> Color,
|
||||||
layoutState: BottomSheetState,
|
layoutState: BottomSheetState,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
|
@ -120,9 +120,7 @@ fun PlayerBottomSheet(
|
||||||
val reorderingState = rememberReorderingState(
|
val reorderingState = rememberReorderingState(
|
||||||
lazyListState = rememberLazyListState(initialFirstVisibleItemIndex = mediaItemIndex),
|
lazyListState = rememberLazyListState(initialFirstVisibleItemIndex = mediaItemIndex),
|
||||||
key = windows,
|
key = windows,
|
||||||
onDragEnd = { fromIndex, toIndex ->
|
onDragEnd = binder.player::moveMediaItem,
|
||||||
binder.player.moveMediaItem(fromIndex, toIndex)
|
|
||||||
},
|
|
||||||
extraItemCount = 0
|
extraItemCount = 0
|
||||||
)
|
)
|
||||||
|
|
Loading…
Add table
Reference in a new issue