feat: enhance WatchStateIndicator to include started state and update usage in SeriesComponents

This commit is contained in:
2026-02-04 10:18:38 +01:00
parent d5027047ce
commit 0ebd5c5afe
3 changed files with 24 additions and 8 deletions

View File

@@ -256,14 +256,14 @@ private fun EpisodeCard(
) )
} }
WatchStateIndicator( WatchStateIndicator(
episode.watched, watched = episode.watched,
started = (episode.progress ?: 0.0) > 0.0,
modifier = Modifier modifier = Modifier
.align(Alignment.TopEnd) .align(Alignment.TopEnd)
.padding(8.dp) .padding(8.dp)
) )
} }
Column( Column(
//verticalArrangement = Arrangement.spacedBy(2.dp)
) { ) {
Text( Text(
text = episode.title, text = episode.title,

View File

@@ -66,7 +66,11 @@ data class PosterItem(
BaseItemKind.SERIES -> series!!.heroImageUrl BaseItemKind.SERIES -> series!!.heroImageUrl
else -> throw IllegalArgumentException("Invalid type: $type") else -> throw IllegalArgumentException("Invalid type: $type")
} }
fun watched() = when (type) {
BaseItemKind.MOVIE -> movie!!.watched
BaseItemKind.EPISODE -> episode!!.watched
else -> throw IllegalArgumentException("Invalid type: $type")
}
} }
data class HomeNavItem( data class HomeNavItem(

View File

@@ -22,16 +22,22 @@ import androidx.compose.ui.unit.dp
@Composable @Composable
fun WatchStateIndicator( fun WatchStateIndicator(
watched: Boolean, watched: Boolean,
started: Boolean,
watchedColor: Color = MaterialTheme.colorScheme.onPrimary, watchedColor: Color = MaterialTheme.colorScheme.onPrimary,
watchedBackgroundColor: Color = MaterialTheme.colorScheme.primary, watchedBackgroundColor: Color = MaterialTheme.colorScheme.primary,
unwatchedColor: Color = MaterialTheme.colorScheme.onSecondary, startedColor: Color = MaterialTheme.colorScheme.onSecondary,
unwatchedBackgroundColor: Color = MaterialTheme.colorScheme.secondary, startedBackgroundColor: Color = MaterialTheme.colorScheme.secondary,
size: Int = 24, size: Int = 24,
modifier: Modifier = Modifier modifier: Modifier = Modifier
) { ) {
val foregroundColor = if (watched) watchedColor.copy(alpha = 0.8f) else unwatchedColor.copy(alpha = 0.3f)
val backgroundColor = if (watched) watchedBackgroundColor.copy(alpha = 0.8f) else unwatchedBackgroundColor.copy(alpha = 0.3f) if (watched.not() && started.not()) {
val borderColor = if (watched) watchedBackgroundColor.copy(alpha = 0.8f) else unwatchedBackgroundColor.copy(alpha = 0.8f) return
}
val foregroundColor = if (watched) watchedColor.copy(alpha = 0.8f) else startedColor.copy(alpha = 0.3f)
val backgroundColor = if (watched) watchedBackgroundColor.copy(alpha = 0.8f) else startedBackgroundColor.copy(alpha = 0.3f)
val borderColor = if (watched) watchedBackgroundColor.copy(alpha = 0.8f) else startedBackgroundColor.copy(alpha = 0.8f)
Box( Box(
@@ -61,9 +67,15 @@ private fun WatchStateIndicatorPreview() {
Column() { Column() {
WatchStateIndicator( WatchStateIndicator(
watched = false, watched = false,
started = false
) )
WatchStateIndicator( WatchStateIndicator(
watched = true, watched = true,
started = false
)
WatchStateIndicator(
watched = false,
started = true
) )
} }
} }