From 9161c235079e6a6cadc08a9674a93dcc5791e3aa Mon Sep 17 00:00:00 2001 From: Barnabas Balogh Date: Sun, 5 Apr 2026 20:02:49 +0200 Subject: [PATCH] refactor: remove top bar components from Movie, Series, and Episode screens in the tv ui --- .../app/content/episode/EpisodeComponents.kt | 39 ------------------- .../app/content/episode/EpisodeScreen.kt | 17 -------- .../app/content/movie/MovieComponents.kt | 16 -------- .../purefin/app/content/movie/MovieScreen.kt | 9 ----- .../app/content/series/SeriesComponents.kt | 16 -------- .../app/content/series/SeriesScreen.kt | 9 ----- .../common/ui/components/MediaDetailShell.kt | 3 -- 7 files changed, 109 deletions(-) diff --git a/app-tv/src/main/java/hu/bbara/purefin/app/content/episode/EpisodeComponents.kt b/app-tv/src/main/java/hu/bbara/purefin/app/content/episode/EpisodeComponents.kt index 31d21ca8..d7f4e0c2 100644 --- a/app-tv/src/main/java/hu/bbara/purefin/app/content/episode/EpisodeComponents.kt +++ b/app-tv/src/main/java/hu/bbara/purefin/app/content/episode/EpisodeComponents.kt @@ -21,50 +21,11 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import hu.bbara.purefin.common.ui.MediaMetaChip -import hu.bbara.purefin.common.ui.components.MediaDetailsTopBar -import hu.bbara.purefin.common.ui.components.MediaDetailsTopBarShortcut import hu.bbara.purefin.common.ui.components.MediaResumeButton -import hu.bbara.purefin.core.data.navigation.Route import hu.bbara.purefin.core.model.Episode internal const val EpisodePlayButtonTag = "episode-play-button" -internal sealed interface EpisodeTopBarShortcut { - val label: String - val onClick: () -> Unit - - data class Series(override val onClick: () -> Unit) : EpisodeTopBarShortcut { - override val label: String = "Series" - } -} - -internal fun episodeTopBarShortcut( - previousRoute: Route?, - onSeriesClick: () -> Unit -): EpisodeTopBarShortcut? { - return when (previousRoute) { - Route.Home -> EpisodeTopBarShortcut.Series(onClick = onSeriesClick) - else -> null - } -} - -@Composable -internal fun EpisodeTopBar( - onBack: () -> Unit, - shortcut: EpisodeTopBarShortcut? = null, - modifier: Modifier = Modifier, - backFocusRequester: FocusRequester? = null, - downFocusRequester: FocusRequester? = null -) { - MediaDetailsTopBar( - onBack = onBack, - shortcut = shortcut?.let { MediaDetailsTopBarShortcut(label = it.label, onClick = it.onClick) }, - modifier = modifier, - backFocusRequester = backFocusRequester, - downFocusRequester = downFocusRequester - ) -} - @OptIn(ExperimentalLayoutApi::class) @Composable internal fun EpisodeHeroSection( diff --git a/app-tv/src/main/java/hu/bbara/purefin/app/content/episode/EpisodeScreen.kt b/app-tv/src/main/java/hu/bbara/purefin/app/content/episode/EpisodeScreen.kt index 676b28cf..16a89381 100644 --- a/app-tv/src/main/java/hu/bbara/purefin/app/content/episode/EpisodeScreen.kt +++ b/app-tv/src/main/java/hu/bbara/purefin/app/content/episode/EpisodeScreen.kt @@ -8,7 +8,6 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.remember -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.unit.dp @@ -58,12 +57,6 @@ fun EpisodeScreen( EpisodeScreenContent( episode = selectedEpisode, seriesTitle = seriesTitle.value, - topBarShortcut = remember(previousRoute, viewModel) { - episodeTopBarShortcut( - previousRoute = previousRoute, - onSeriesClick = viewModel::onSeriesClick - ) - }, onBack = viewModel::onBack, onPlay = remember(selectedEpisode.id, navigationManager) { { @@ -80,7 +73,6 @@ fun EpisodeScreen( internal fun EpisodeScreenContent( episode: Episode, seriesTitle: String?, - topBarShortcut: EpisodeTopBarShortcut?, onBack: () -> Unit, onPlay: () -> Unit, modifier: Modifier = Modifier, @@ -96,15 +88,6 @@ internal fun EpisodeScreenContent( heroImageUrl = JellyfinImageHelper.finishImageUrl(episode.imageUrlPrefix, ImageType.PRIMARY), resetScrollKey = episode.id, modifier = modifier, - topBar = { - EpisodeTopBar( - onBack = onBack, - shortcut = topBarShortcut, - backFocusRequester = backFocusRequester, - downFocusRequester = playFocusRequester, - modifier = Modifier.align(Alignment.TopStart) - ) - }, heroContent = { EpisodeHeroSection( episode = episode, diff --git a/app-tv/src/main/java/hu/bbara/purefin/app/content/movie/MovieComponents.kt b/app-tv/src/main/java/hu/bbara/purefin/app/content/movie/MovieComponents.kt index afa4647a..f3be526d 100644 --- a/app-tv/src/main/java/hu/bbara/purefin/app/content/movie/MovieComponents.kt +++ b/app-tv/src/main/java/hu/bbara/purefin/app/content/movie/MovieComponents.kt @@ -21,27 +21,11 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import hu.bbara.purefin.common.ui.MediaMetaChip -import hu.bbara.purefin.common.ui.components.MediaDetailsTopBar import hu.bbara.purefin.common.ui.components.MediaResumeButton import hu.bbara.purefin.core.model.Movie internal const val MoviePlayButtonTag = "movie-play-button" -@Composable -internal fun MovieTopBar( - onBack: () -> Unit, - modifier: Modifier = Modifier, - backFocusRequester: FocusRequester? = null, - downFocusRequester: FocusRequester? = null -) { - MediaDetailsTopBar( - onBack = onBack, - modifier = modifier, - backFocusRequester = backFocusRequester, - downFocusRequester = downFocusRequester - ) -} - @OptIn(ExperimentalLayoutApi::class) @Composable internal fun MovieHeroSection( diff --git a/app-tv/src/main/java/hu/bbara/purefin/app/content/movie/MovieScreen.kt b/app-tv/src/main/java/hu/bbara/purefin/app/content/movie/MovieScreen.kt index 78e669d4..e1be4600 100644 --- a/app-tv/src/main/java/hu/bbara/purefin/app/content/movie/MovieScreen.kt +++ b/app-tv/src/main/java/hu/bbara/purefin/app/content/movie/MovieScreen.kt @@ -8,7 +8,6 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.remember -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.unit.dp @@ -65,14 +64,6 @@ internal fun MovieScreenContent( heroImageUrl = JellyfinImageHelper.finishImageUrl(movie.imageUrlPrefix, ImageType.PRIMARY), resetScrollKey = movie.id, modifier = modifier, - topBar = { - MovieTopBar( - onBack = onBack, - backFocusRequester = backFocusRequester, - downFocusRequester = playFocusRequester, - modifier = Modifier.align(Alignment.TopStart) - ) - }, heroContent = { MovieHeroSection( movie = movie, diff --git a/app-tv/src/main/java/hu/bbara/purefin/app/content/series/SeriesComponents.kt b/app-tv/src/main/java/hu/bbara/purefin/app/content/series/SeriesComponents.kt index 0de02f26..cbf4ae4a 100644 --- a/app-tv/src/main/java/hu/bbara/purefin/app/content/series/SeriesComponents.kt +++ b/app-tv/src/main/java/hu/bbara/purefin/app/content/series/SeriesComponents.kt @@ -55,7 +55,6 @@ import androidx.compose.ui.unit.sp import androidx.hilt.navigation.compose.hiltViewModel import hu.bbara.purefin.common.ui.MediaCastRow import hu.bbara.purefin.common.ui.MediaMetaChip -import hu.bbara.purefin.common.ui.components.MediaDetailsTopBar import hu.bbara.purefin.common.ui.components.MediaProgressBar import hu.bbara.purefin.common.ui.components.MediaResumeButton import hu.bbara.purefin.common.ui.components.PurefinAsyncImage @@ -71,21 +70,6 @@ import org.jellyfin.sdk.model.api.ImageType internal const val SeriesPlayButtonTag = "series-play-button" internal const val SeriesFirstSeasonTabTag = "series-first-season-tab" -@Composable -internal fun SeriesTopBar( - onBack: () -> Unit, - modifier: Modifier = Modifier, - backFocusRequester: FocusRequester? = null, - downFocusRequester: FocusRequester? = null -) { - MediaDetailsTopBar( - onBack = onBack, - modifier = modifier, - backFocusRequester = backFocusRequester, - downFocusRequester = downFocusRequester - ) -} - @OptIn(ExperimentalLayoutApi::class) @Composable internal fun SeriesMetaChips(series: Series) { diff --git a/app-tv/src/main/java/hu/bbara/purefin/app/content/series/SeriesScreen.kt b/app-tv/src/main/java/hu/bbara/purefin/app/content/series/SeriesScreen.kt index 874e16f4..9c34875f 100644 --- a/app-tv/src/main/java/hu/bbara/purefin/app/content/series/SeriesScreen.kt +++ b/app-tv/src/main/java/hu/bbara/purefin/app/content/series/SeriesScreen.kt @@ -9,7 +9,6 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.unit.dp @@ -83,14 +82,6 @@ internal fun SeriesScreenContent( heroImageUrl = JellyfinImageHelper.finishImageUrl(series.imageUrlPrefix, ImageType.PRIMARY), resetScrollKey = series.id, modifier = modifier, - topBar = { - SeriesTopBar( - onBack = onBack, - backFocusRequester = backFocusRequester, - downFocusRequester = nextUpEpisode?.let { playFocusRequester } ?: firstContentFocusRequester, - modifier = Modifier.align(Alignment.TopStart) - ) - }, heroContent = { SeriesHeroSection( series = series, diff --git a/app-tv/src/main/java/hu/bbara/purefin/common/ui/components/MediaDetailShell.kt b/app-tv/src/main/java/hu/bbara/purefin/common/ui/components/MediaDetailShell.kt index cacf6cd7..e384261a 100644 --- a/app-tv/src/main/java/hu/bbara/purefin/common/ui/components/MediaDetailShell.kt +++ b/app-tv/src/main/java/hu/bbara/purefin/common/ui/components/MediaDetailShell.kt @@ -2,7 +2,6 @@ package hu.bbara.purefin.common.ui.components import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.BoxScope import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.Spacer @@ -31,7 +30,6 @@ internal fun TvMediaDetailScaffold( resetScrollKey: Any, modifier: Modifier = Modifier, heroHeightFraction: Float = 0.48f, - topBar: @Composable BoxScope.() -> Unit, heroContent: @Composable ColumnScope.() -> Unit, bodyContent: LazyListScope.(Modifier) -> Unit = { _ -> } ) { @@ -71,7 +69,6 @@ internal fun TvMediaDetailScaffold( } bodyContent(contentPadding) } - topBar() } }