refactor: remove top bar components from Movie, Series, and Episode screens in the tv ui

This commit is contained in:
2026-04-05 20:02:49 +02:00
parent 69b3933175
commit 9161c23507
7 changed files with 0 additions and 109 deletions

View File

@@ -21,50 +21,11 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import hu.bbara.purefin.common.ui.MediaMetaChip 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.common.ui.components.MediaResumeButton
import hu.bbara.purefin.core.data.navigation.Route
import hu.bbara.purefin.core.model.Episode import hu.bbara.purefin.core.model.Episode
internal const val EpisodePlayButtonTag = "episode-play-button" 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) @OptIn(ExperimentalLayoutApi::class)
@Composable @Composable
internal fun EpisodeHeroSection( internal fun EpisodeHeroSection(

View File

@@ -8,7 +8,6 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
@@ -58,12 +57,6 @@ fun EpisodeScreen(
EpisodeScreenContent( EpisodeScreenContent(
episode = selectedEpisode, episode = selectedEpisode,
seriesTitle = seriesTitle.value, seriesTitle = seriesTitle.value,
topBarShortcut = remember(previousRoute, viewModel) {
episodeTopBarShortcut(
previousRoute = previousRoute,
onSeriesClick = viewModel::onSeriesClick
)
},
onBack = viewModel::onBack, onBack = viewModel::onBack,
onPlay = remember(selectedEpisode.id, navigationManager) { onPlay = remember(selectedEpisode.id, navigationManager) {
{ {
@@ -80,7 +73,6 @@ fun EpisodeScreen(
internal fun EpisodeScreenContent( internal fun EpisodeScreenContent(
episode: Episode, episode: Episode,
seriesTitle: String?, seriesTitle: String?,
topBarShortcut: EpisodeTopBarShortcut?,
onBack: () -> Unit, onBack: () -> Unit,
onPlay: () -> Unit, onPlay: () -> Unit,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
@@ -96,15 +88,6 @@ internal fun EpisodeScreenContent(
heroImageUrl = JellyfinImageHelper.finishImageUrl(episode.imageUrlPrefix, ImageType.PRIMARY), heroImageUrl = JellyfinImageHelper.finishImageUrl(episode.imageUrlPrefix, ImageType.PRIMARY),
resetScrollKey = episode.id, resetScrollKey = episode.id,
modifier = modifier, modifier = modifier,
topBar = {
EpisodeTopBar(
onBack = onBack,
shortcut = topBarShortcut,
backFocusRequester = backFocusRequester,
downFocusRequester = playFocusRequester,
modifier = Modifier.align(Alignment.TopStart)
)
},
heroContent = { heroContent = {
EpisodeHeroSection( EpisodeHeroSection(
episode = episode, episode = episode,

View File

@@ -21,27 +21,11 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import hu.bbara.purefin.common.ui.MediaMetaChip 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.common.ui.components.MediaResumeButton
import hu.bbara.purefin.core.model.Movie import hu.bbara.purefin.core.model.Movie
internal const val MoviePlayButtonTag = "movie-play-button" 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) @OptIn(ExperimentalLayoutApi::class)
@Composable @Composable
internal fun MovieHeroSection( internal fun MovieHeroSection(

View File

@@ -8,7 +8,6 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
@@ -65,14 +64,6 @@ internal fun MovieScreenContent(
heroImageUrl = JellyfinImageHelper.finishImageUrl(movie.imageUrlPrefix, ImageType.PRIMARY), heroImageUrl = JellyfinImageHelper.finishImageUrl(movie.imageUrlPrefix, ImageType.PRIMARY),
resetScrollKey = movie.id, resetScrollKey = movie.id,
modifier = modifier, modifier = modifier,
topBar = {
MovieTopBar(
onBack = onBack,
backFocusRequester = backFocusRequester,
downFocusRequester = playFocusRequester,
modifier = Modifier.align(Alignment.TopStart)
)
},
heroContent = { heroContent = {
MovieHeroSection( MovieHeroSection(
movie = movie, movie = movie,

View File

@@ -55,7 +55,6 @@ import androidx.compose.ui.unit.sp
import androidx.hilt.navigation.compose.hiltViewModel import androidx.hilt.navigation.compose.hiltViewModel
import hu.bbara.purefin.common.ui.MediaCastRow import hu.bbara.purefin.common.ui.MediaCastRow
import hu.bbara.purefin.common.ui.MediaMetaChip 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.MediaProgressBar
import hu.bbara.purefin.common.ui.components.MediaResumeButton import hu.bbara.purefin.common.ui.components.MediaResumeButton
import hu.bbara.purefin.common.ui.components.PurefinAsyncImage 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 SeriesPlayButtonTag = "series-play-button"
internal const val SeriesFirstSeasonTabTag = "series-first-season-tab" 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) @OptIn(ExperimentalLayoutApi::class)
@Composable @Composable
internal fun SeriesMetaChips(series: Series) { internal fun SeriesMetaChips(series: Series) {

View File

@@ -9,7 +9,6 @@ import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
@@ -83,14 +82,6 @@ internal fun SeriesScreenContent(
heroImageUrl = JellyfinImageHelper.finishImageUrl(series.imageUrlPrefix, ImageType.PRIMARY), heroImageUrl = JellyfinImageHelper.finishImageUrl(series.imageUrlPrefix, ImageType.PRIMARY),
resetScrollKey = series.id, resetScrollKey = series.id,
modifier = modifier, modifier = modifier,
topBar = {
SeriesTopBar(
onBack = onBack,
backFocusRequester = backFocusRequester,
downFocusRequester = nextUpEpisode?.let { playFocusRequester } ?: firstContentFocusRequester,
modifier = Modifier.align(Alignment.TopStart)
)
},
heroContent = { heroContent = {
SeriesHeroSection( SeriesHeroSection(
series = series, series = series,

View File

@@ -2,7 +2,6 @@ package hu.bbara.purefin.common.ui.components
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.BoxScope
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.ColumnScope
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer
@@ -31,7 +30,6 @@ internal fun TvMediaDetailScaffold(
resetScrollKey: Any, resetScrollKey: Any,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
heroHeightFraction: Float = 0.48f, heroHeightFraction: Float = 0.48f,
topBar: @Composable BoxScope.() -> Unit,
heroContent: @Composable ColumnScope.() -> Unit, heroContent: @Composable ColumnScope.() -> Unit,
bodyContent: LazyListScope.(Modifier) -> Unit = { _ -> } bodyContent: LazyListScope.(Modifier) -> Unit = { _ -> }
) { ) {
@@ -71,7 +69,6 @@ internal fun TvMediaDetailScaffold(
} }
bodyContent(contentPadding) bodyContent(contentPadding)
} }
topBar()
} }
} }