Make Controls composable @Stable

This commit is contained in:
vfsfitvnm 2022-08-26 11:04:27 +02:00
parent 82ebda51b6
commit abf6630bf4
2 changed files with 15 additions and 17 deletions

View file

@ -263,7 +263,9 @@ fun PlayerView(
} }
Controls( Controls(
mediaItem = mediaItem, mediaId = mediaItem.mediaId,
title = mediaItem.mediaMetadata.title?.toString(),
artist = mediaItem.mediaMetadata.artist?.toString(),
shouldBePlaying = shouldBePlaying, shouldBePlaying = shouldBePlaying,
position = positionAndDuration.first, position = positionAndDuration.first,
duration = positionAndDuration.second, duration = positionAndDuration.second,
@ -302,7 +304,9 @@ fun PlayerView(
} }
Controls( Controls(
mediaItem = mediaItem, mediaId = mediaItem.mediaId,
title = mediaItem.mediaMetadata.title?.toString(),
artist = mediaItem.mediaMetadata.artist?.toString(),
shouldBePlaying = shouldBePlaying, shouldBePlaying = shouldBePlaying,
position = positionAndDuration.first, position = positionAndDuration.first,
duration = positionAndDuration.second, duration = positionAndDuration.second,

View file

@ -34,12 +34,10 @@ import androidx.compose.ui.res.painterResource
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.C import androidx.media3.common.C
import androidx.media3.common.MediaItem
import androidx.media3.common.Player import androidx.media3.common.Player
import it.vfsfitvnm.vimusic.Database import it.vfsfitvnm.vimusic.Database
import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder
import it.vfsfitvnm.vimusic.R import it.vfsfitvnm.vimusic.R
import it.vfsfitvnm.vimusic.models.Song
import it.vfsfitvnm.vimusic.query import it.vfsfitvnm.vimusic.query
import it.vfsfitvnm.vimusic.ui.components.SeekBar import it.vfsfitvnm.vimusic.ui.components.SeekBar
import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance
@ -53,7 +51,9 @@ import kotlinx.coroutines.flow.distinctUntilChanged
@Composable @Composable
fun Controls( fun Controls(
mediaItem: MediaItem, mediaId: String,
title: String?,
artist: String?,
shouldBePlaying: Boolean, shouldBePlaying: Boolean,
position: Long, position: Long,
duration: Long, duration: Long,
@ -66,12 +66,12 @@ fun Controls(
val repeatMode by rememberRepeatMode(binder.player) val repeatMode by rememberRepeatMode(binder.player)
var scrubbingPosition by remember(mediaItem.mediaId) { var scrubbingPosition by remember(mediaId) {
mutableStateOf<Long?>(null) mutableStateOf<Long?>(null)
} }
val likedAt by remember(mediaItem.mediaId) { val likedAt by remember(mediaId) {
Database.likedAt(mediaItem.mediaId).distinctUntilChanged() Database.likedAt(mediaId).distinctUntilChanged()
}.collectAsState(initial = null, context = Dispatchers.IO) }.collectAsState(initial = null, context = Dispatchers.IO)
val shouldBePlayingTransition = updateTransition(shouldBePlaying, label = "shouldBePlaying") val shouldBePlayingTransition = updateTransition(shouldBePlaying, label = "shouldBePlaying")
@ -94,14 +94,14 @@ fun Controls(
) )
BasicText( BasicText(
text = mediaItem.mediaMetadata.title?.toString() ?: "", text = title ?: "",
style = typography.l.bold, style = typography.l.bold,
maxLines = 1, maxLines = 1,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
BasicText( BasicText(
text = mediaItem.mediaMetadata.artist?.toString() ?: "", text = artist ?: "",
style = typography.s.semiBold.secondary, style = typography.s.semiBold.secondary,
maxLines = 1, maxLines = 1,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
@ -180,13 +180,7 @@ fun Controls(
modifier = Modifier modifier = Modifier
.clickable { .clickable {
query { query {
if (Database.like( Database.like(mediaId, if (likedAt == null) System.currentTimeMillis() else null)
mediaItem.mediaId,
if (likedAt == null) System.currentTimeMillis() else null
) == 0
) {
Database.insert(mediaItem, Song::toggleLike)
}
} }
} }
.weight(1f) .weight(1f)