From 8c29f681c5d1e9c36adf4f38dc6fc223207fee38 Mon Sep 17 00:00:00 2001 From: Barnabas Balogh Date: Thu, 22 Jan 2026 19:50:57 +0100 Subject: [PATCH] refactor: Replace MediaActionButtons with individual MediaActionButton components in Episode, Movie, and Series screens --- .../app/content/episode/EpisodeComponents.kt | 21 ++++++- .../app/content/movie/MovieComponents.kt | 23 ++++++- .../app/content/series/SeriesComponents.kt | 25 +++++--- .../common/ui/MediaDetailComponents.kt | 63 ------------------- .../common/ui/components/MediaActionButton.kt | 35 +++++++++++ 5 files changed, 93 insertions(+), 74 deletions(-) create mode 100644 app/src/main/java/hu/bbara/purefin/common/ui/components/MediaActionButton.kt diff --git a/app/src/main/java/hu/bbara/purefin/app/content/episode/EpisodeComponents.kt b/app/src/main/java/hu/bbara/purefin/app/content/episode/EpisodeComponents.kt index 93e39f9..58cd4c0 100644 --- a/app/src/main/java/hu/bbara/purefin/app/content/episode/EpisodeComponents.kt +++ b/app/src/main/java/hu/bbara/purefin/app/content/episode/EpisodeComponents.kt @@ -10,9 +10,12 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.statusBarsPadding +import androidx.compose.foundation.layout.width import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Add import androidx.compose.material.icons.outlined.ArrowBack import androidx.compose.material.icons.outlined.Cast +import androidx.compose.material.icons.outlined.Download import androidx.compose.material.icons.outlined.MoreVert import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text @@ -22,11 +25,11 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import hu.bbara.purefin.common.ui.MediaActionButtons import hu.bbara.purefin.common.ui.MediaCastMember import hu.bbara.purefin.common.ui.MediaCastRow import hu.bbara.purefin.common.ui.MediaGhostIconButton import hu.bbara.purefin.common.ui.MediaMetaChip +import hu.bbara.purefin.common.ui.components.MediaActionButton import hu.bbara.purefin.common.ui.components.MediaPlaybackSettings import hu.bbara.purefin.common.ui.toMediaDetailColors @@ -105,7 +108,21 @@ internal fun EpisodeDetails( ) Spacer(modifier = Modifier.height(24.dp)) - MediaActionButtons(colors = colors) + Row() { + MediaActionButton( + backgroundColor = MaterialTheme.colorScheme.secondary, + iconColor = MaterialTheme.colorScheme.onSecondary, + icon = Icons.Outlined.Add, + height = 48.dp + ) + Spacer(modifier = Modifier.width(12.dp)) + MediaActionButton( + backgroundColor = MaterialTheme.colorScheme.secondary, + iconColor = MaterialTheme.colorScheme.onSecondary, + icon = Icons.Outlined.Download, + height = 48.dp + ) + } Spacer(modifier = Modifier.height(24.dp)) MediaPlaybackSettings( diff --git a/app/src/main/java/hu/bbara/purefin/app/content/movie/MovieComponents.kt b/app/src/main/java/hu/bbara/purefin/app/content/movie/MovieComponents.kt index cc758fa..5900394 100644 --- a/app/src/main/java/hu/bbara/purefin/app/content/movie/MovieComponents.kt +++ b/app/src/main/java/hu/bbara/purefin/app/content/movie/MovieComponents.kt @@ -10,9 +10,12 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.statusBarsPadding +import androidx.compose.foundation.layout.width import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Add import androidx.compose.material.icons.outlined.ArrowBack import androidx.compose.material.icons.outlined.Cast +import androidx.compose.material.icons.outlined.Download import androidx.compose.material.icons.outlined.MoreVert import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text @@ -22,11 +25,11 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import hu.bbara.purefin.common.ui.MediaActionButtons import hu.bbara.purefin.common.ui.MediaCastMember import hu.bbara.purefin.common.ui.MediaCastRow import hu.bbara.purefin.common.ui.MediaGhostIconButton import hu.bbara.purefin.common.ui.MediaMetaChip +import hu.bbara.purefin.common.ui.components.MediaActionButton import hu.bbara.purefin.common.ui.components.MediaPlaybackSettings import hu.bbara.purefin.common.ui.toMediaDetailColors @@ -113,7 +116,23 @@ internal fun MovieDetails( ) Spacer(modifier = Modifier.height(24.dp)) - MediaActionButtons(colors = colors) + + + Row() { + MediaActionButton( + backgroundColor = MaterialTheme.colorScheme.secondary, + iconColor = MaterialTheme.colorScheme.onSecondary, + icon = Icons.Outlined.Add, + height = 32.dp + ) + Spacer(modifier = Modifier.width(12.dp)) + MediaActionButton( + backgroundColor = MaterialTheme.colorScheme.secondary, + iconColor = MaterialTheme.colorScheme.onSecondary, + icon = Icons.Outlined.Download, + height = 32.dp + ) + } Spacer(modifier = Modifier.height(28.dp)) Text( diff --git a/app/src/main/java/hu/bbara/purefin/app/content/series/SeriesComponents.kt b/app/src/main/java/hu/bbara/purefin/app/content/series/SeriesComponents.kt index 7f8c477..9c1a3df 100644 --- a/app/src/main/java/hu/bbara/purefin/app/content/series/SeriesComponents.kt +++ b/app/src/main/java/hu/bbara/purefin/app/content/series/SeriesComponents.kt @@ -25,8 +25,10 @@ import androidx.compose.foundation.lazy.items import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Add import androidx.compose.material.icons.outlined.ArrowBack import androidx.compose.material.icons.outlined.Cast +import androidx.compose.material.icons.outlined.Download import androidx.compose.material.icons.outlined.MoreVert import androidx.compose.material.icons.outlined.PlayCircle import androidx.compose.material3.Icon @@ -45,11 +47,11 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.hilt.navigation.compose.hiltViewModel import coil3.compose.AsyncImage -import hu.bbara.purefin.common.ui.MediaActionButtons import hu.bbara.purefin.common.ui.MediaCastMember import hu.bbara.purefin.common.ui.MediaCastRow import hu.bbara.purefin.common.ui.MediaGhostIconButton import hu.bbara.purefin.common.ui.MediaMetaChip +import hu.bbara.purefin.common.ui.components.MediaActionButton import hu.bbara.purefin.common.ui.components.MediaHero import hu.bbara.purefin.common.ui.toMediaDetailColors @@ -118,12 +120,21 @@ internal fun SeriesMetaChips(series: SeriesUiModel) { @Composable internal fun SeriesActionButtons(modifier: Modifier = Modifier) { val colors = rememberSeriesColors().toMediaDetailColors() - MediaActionButtons( - colors = colors, - modifier = modifier, - height = 44.dp, - textSize = 13.sp - ) + Row() { + MediaActionButton( + backgroundColor = MaterialTheme.colorScheme.secondary, + iconColor = MaterialTheme.colorScheme.onSecondary, + icon = Icons.Outlined.Add, + height = 32.dp + ) + Spacer(modifier = Modifier.width(12.dp)) + MediaActionButton( + backgroundColor = MaterialTheme.colorScheme.secondary, + iconColor = MaterialTheme.colorScheme.onSecondary, + icon = Icons.Outlined.Download, + height = 32.dp + ) + } } @Composable diff --git a/app/src/main/java/hu/bbara/purefin/common/ui/MediaDetailComponents.kt b/app/src/main/java/hu/bbara/purefin/common/ui/MediaDetailComponents.kt index f5cbf99..9591f6b 100644 --- a/app/src/main/java/hu/bbara/purefin/common/ui/MediaDetailComponents.kt +++ b/app/src/main/java/hu/bbara/purefin/common/ui/MediaDetailComponents.kt @@ -7,11 +7,9 @@ import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues -import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.aspectRatio import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size @@ -23,8 +21,6 @@ import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.PlayArrow -import androidx.compose.material.icons.outlined.Add -import androidx.compose.material.icons.outlined.Download import androidx.compose.material.icons.outlined.Person import androidx.compose.material3.Icon import androidx.compose.material3.Text @@ -151,65 +147,6 @@ fun MediaMetaChip( } } -@Composable -fun MediaActionButtons( - colors: MediaDetailColors, - modifier: Modifier = Modifier, - height: Dp = 48.dp, - textSize: TextUnit = 14.sp, - watchlistIcon: ImageVector = Icons.Outlined.Add, - downloadIcon: ImageVector = Icons.Outlined.Download -) { - Row( - modifier = modifier - .fillMaxWidth() - .padding(top = 4.dp), - horizontalArrangement = Arrangement.spacedBy(12.dp) - ) { - MediaActionButton( - colors = colors, - text = "Watchlist", - icon = watchlistIcon, - modifier = Modifier.weight(1f), - height = height, - textSize = textSize - ) - MediaActionButton( - colors = colors, - text = "Download", - icon = downloadIcon, - modifier = Modifier.weight(1f), - height = height, - textSize = textSize - ) - } -} - -@Composable -private fun MediaActionButton( - colors: MediaDetailColors, - text: String, - icon: ImageVector, - modifier: Modifier = Modifier, - height: Dp, - textSize: TextUnit -) { - Row( - modifier = modifier - .height(height) - .clip(RoundedCornerShape(12.dp)) - .background(colors.surfaceAlt.copy(alpha = 0.6f)) - .border(1.dp, colors.surfaceBorder, RoundedCornerShape(12.dp)) - .clickable { }, - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.Center - ) { - Icon(imageVector = icon, contentDescription = null, tint = colors.textPrimary) - Spacer(modifier = Modifier.width(8.dp)) - Text(text = text, color = colors.textPrimary, fontSize = textSize, fontWeight = FontWeight.Bold) - } -} - data class MediaCastMember( val name: String, val role: String, diff --git a/app/src/main/java/hu/bbara/purefin/common/ui/components/MediaActionButton.kt b/app/src/main/java/hu/bbara/purefin/common/ui/components/MediaActionButton.kt new file mode 100644 index 0000000..c6bc2fa --- /dev/null +++ b/app/src/main/java/hu/bbara/purefin/common/ui/components/MediaActionButton.kt @@ -0,0 +1,35 @@ +package hu.bbara.purefin.common.ui.components + +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material3.Icon +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.unit.Dp + +@Composable +fun MediaActionButton( + backgroundColor: Color, + iconColor: Color, + icon: ImageVector, + modifier: Modifier = Modifier, + height: Dp, +) { + Box( + modifier = modifier + .size(height) + .clip(CircleShape) + .background(backgroundColor.copy(alpha = 0.6f)) + .clickable { }, + contentAlignment = Alignment.Center + ) { + Icon(imageVector = icon, contentDescription = null, tint = iconColor) + } +} \ No newline at end of file