mirror of
https://github.com/bbara04/Purefin.git
synced 2026-07-24 03:36:51 +00:00
refactor: remove top bar components from Movie, Series, and Episode screens in the tv ui
This commit is contained in:
@@ -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(
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user