feat: Rename screen and component classes for TV context

This commit is contained in:
2026-04-09 19:01:16 +02:00
parent 512f7bbb5b
commit 313a971684
10 changed files with 41 additions and 41 deletions

View File

@@ -31,7 +31,7 @@ class EpisodeScreenContentTest {
fun episodeScreenContent_showsSeriesContext_andFocusesPlayButton() {
composeRule.setContent {
AppTheme {
EpisodeScreenContent(
TvEpisodeScreenContent(
episode = sampleEpisode(progress = 63.0),
seriesTitle = "Severance",
onPlay = {}
@@ -55,7 +55,7 @@ class EpisodeScreenContentTest {
fun episodeScreenContent_hidesSeriesShortcut_whenShortcutUiIsUnavailable() {
composeRule.setContent {
AppTheme {
EpisodeScreenContent(
TvEpisodeScreenContent(
episode = sampleEpisode(progress = null),
seriesTitle = "Severance",
onPlay = {}
@@ -77,7 +77,7 @@ class EpisodeScreenContentTest {
composeRule.setContent {
AppTheme {
EpisodeScreenContent(
TvEpisodeScreenContent(
episode = sampleEpisode(progress = 63.0),
seriesTitle = "Severance",
onPlay = { playCount++ }

View File

@@ -31,7 +31,7 @@ class MovieScreenContentTest {
fun movieScreenContent_focusesPlayButton() {
composeRule.setContent {
AppTheme {
MovieScreenContent(
TvMovieScreenContent(
movie = sampleMovie(progress = 42.0),
onPlay = {}
)
@@ -54,7 +54,7 @@ class MovieScreenContentTest {
composeRule.setContent {
AppTheme {
MovieScreenContent(
TvMovieScreenContent(
movie = sampleMovie(progress = 42.0),
onPlay = { playCount++ }
)

View File

@@ -31,7 +31,7 @@ class SeriesScreenContentTest {
fun seriesScreenContent_focusesPrimaryAction_whenNextUpExists() {
composeRule.setContent {
AppTheme {
SeriesScreenContent(
TvSeriesScreenContent(
series = sampleSeriesWithEpisodes(),
onPlayEpisode = {}
)
@@ -54,7 +54,7 @@ class SeriesScreenContentTest {
fun seriesScreenContent_focusesFirstSeason_whenNoPlayableEpisodeExists() {
composeRule.setContent {
AppTheme {
SeriesScreenContent(
TvSeriesScreenContent(
series = sampleSeriesWithoutEpisodes(),
onPlayEpisode = {}
)
@@ -76,7 +76,7 @@ class SeriesScreenContentTest {
composeRule.setContent {
AppTheme {
SeriesScreenContent(
TvSeriesScreenContent(
series = sampleSeriesWithEpisodes(),
onPlayEpisode = { playCount++ }
)

View File

@@ -28,7 +28,7 @@ internal const val EpisodePlayButtonTag = "episode-play-button"
@OptIn(ExperimentalLayoutApi::class)
@Composable
internal fun EpisodeHeroSection(
internal fun TvEpisodeHeroSection(
episode: Episode,
seriesTitle: String?,
onPlay: () -> Unit,

View File

@@ -20,15 +20,15 @@ import hu.bbara.purefin.common.ui.components.MediaDetailPlaybackSection
import hu.bbara.purefin.common.ui.components.MediaDetailSectionTitle
import hu.bbara.purefin.common.ui.components.TvMediaDetailBodyBox
import hu.bbara.purefin.common.ui.components.TvMediaDetailScaffold
import hu.bbara.purefin.core.data.navigation.LocalNavigationManager
import hu.bbara.purefin.core.data.navigation.Route
import hu.bbara.purefin.common.ui.components.tvMediaDetailBackgroundImageUrl
import hu.bbara.purefin.core.data.navigation.EpisodeDto
import hu.bbara.purefin.core.data.navigation.LocalNavigationManager
import hu.bbara.purefin.core.data.navigation.Route
import hu.bbara.purefin.core.model.Episode
import hu.bbara.purefin.feature.shared.content.episode.EpisodeScreenViewModel
@Composable
fun EpisodeScreen(
fun TvEpisodeScreen(
episode: EpisodeDto,
viewModel: EpisodeScreenViewModel = hiltViewModel(),
modifier: Modifier = Modifier
@@ -52,7 +52,7 @@ fun EpisodeScreen(
return
}
EpisodeScreenContent(
TvEpisodeScreenContent(
episode = selectedEpisode,
seriesTitle = seriesTitle.value,
onPlay = remember(selectedEpisode.id, navigationManager) {
@@ -67,7 +67,7 @@ fun EpisodeScreen(
}
@Composable
internal fun EpisodeScreenContent(
internal fun TvEpisodeScreenContent(
episode: Episode,
seriesTitle: String?,
onPlay: () -> Unit,
@@ -89,7 +89,7 @@ internal fun EpisodeScreenContent(
backgroundImageUrl = tvMediaDetailBackgroundImageUrl(episode.imageUrlPrefix),
modifier = it
) {
EpisodeHeroSection(
TvEpisodeHeroSection(
episode = episode,
seriesTitle = seriesTitle,
onPlay = onPlay,

View File

@@ -28,7 +28,7 @@ internal const val MoviePlayButtonTag = "movie-play-button"
@OptIn(ExperimentalLayoutApi::class)
@Composable
internal fun MovieHeroSection(
internal fun TvMovieHeroSection(
movie: Movie,
onPlay: () -> Unit,
playFocusRequester: FocusRequester,

View File

@@ -26,7 +26,7 @@ import hu.bbara.purefin.core.model.Movie
import hu.bbara.purefin.feature.shared.content.movie.MovieScreenViewModel
@Composable
fun MovieScreen(
fun TvMovieScreen(
movie: MovieDto, viewModel: MovieScreenViewModel = hiltViewModel(), modifier: Modifier = Modifier
) {
LaunchedEffect(movie.id) {
@@ -36,7 +36,7 @@ fun MovieScreen(
val movieItem = viewModel.movie.collectAsState()
if (movieItem.value != null) {
MovieScreenContent(
TvMovieScreenContent(
movie = movieItem.value!!,
onPlay = viewModel::onPlay,
modifier = modifier
@@ -47,7 +47,7 @@ fun MovieScreen(
}
@Composable
internal fun MovieScreenContent(
internal fun TvMovieScreenContent(
movie: Movie,
onPlay: () -> Unit,
modifier: Modifier = Modifier,
@@ -68,7 +68,7 @@ internal fun MovieScreenContent(
backgroundImageUrl = tvMediaDetailBackgroundImageUrl(movie.imageUrlPrefix),
modifier = it
) {
MovieHeroSection(
TvMovieHeroSection(
movie = movie,
onPlay = onPlay,
playFocusRequester = playFocusRequester,

View File

@@ -72,7 +72,7 @@ internal const val SeriesFirstSeasonTabTag = "series-first-season-tab"
@OptIn(ExperimentalLayoutApi::class)
@Composable
internal fun SeriesMetaChips(series: Series) {
internal fun TvSeriesMetaChips(series: Series) {
val scheme = MaterialTheme.colorScheme
FlowRow(
horizontalArrangement = Arrangement.spacedBy(8.dp),
@@ -84,7 +84,7 @@ internal fun SeriesMetaChips(series: Series) {
}
@Composable
internal fun SeasonTabs(
internal fun TvSeasonTabs(
seasons: List<Season>,
selectedSeason: Season?,
modifier: Modifier = Modifier,
@@ -99,7 +99,7 @@ internal fun SeasonTabs(
horizontalArrangement = Arrangement.spacedBy(20.dp)
) {
seasons.forEachIndexed { index, season ->
SeasonTab(
TvSeasonTab(
name = season.name,
isSelected = season == selectedSeason,
onSelect = { onSelect(season) },
@@ -124,7 +124,7 @@ internal fun SeasonTabs(
}
@Composable
private fun SeasonTab(
private fun TvSeasonTab(
name: String,
isSelected: Boolean,
onSelect: () -> Unit,
@@ -160,7 +160,7 @@ private fun SeasonTab(
}
@Composable
internal fun EpisodeCarousel(episodes: List<Episode>, modifier: Modifier = Modifier) {
internal fun TvEpisodeCarousel(episodes: List<Episode>, modifier: Modifier = Modifier) {
val listState = rememberLazyListState()
LaunchedEffect(episodes) {
@@ -178,13 +178,13 @@ internal fun EpisodeCarousel(episodes: List<Episode>, modifier: Modifier = Modif
horizontalArrangement = Arrangement.spacedBy(16.dp)
) {
items(episodes) { episode ->
EpisodeCard(episode = episode)
TvEpisodeCard(episode = episode)
}
}
}
@Composable
internal fun SeriesHeroSection(
internal fun TvSeriesHeroSection(
series: Series,
nextUpEpisode: Episode?,
onPlayEpisode: (Episode) -> Unit,
@@ -210,7 +210,7 @@ internal fun SeriesHeroSection(
overflow = TextOverflow.Ellipsis
)
Spacer(modifier = Modifier.height(18.dp))
SeriesMetaChips(series = series)
TvSeriesMetaChips(series = series)
Spacer(modifier = Modifier.height(24.dp))
if (nextUpEpisode != null) {
Text(
@@ -262,7 +262,7 @@ internal fun SeriesHeroSection(
}
@Composable
private fun EpisodeCard(
private fun TvEpisodeCard(
viewModel: SeriesViewModel = hiltViewModel(),
episode: Episode
) {

View File

@@ -29,7 +29,7 @@ import hu.bbara.purefin.feature.shared.content.series.SeriesViewModel
import org.jellyfin.sdk.model.UUID
@Composable
fun SeriesScreen(
fun TvSeriesScreen(
series: SeriesDto,
modifier: Modifier = Modifier,
viewModel: SeriesViewModel = hiltViewModel()
@@ -42,7 +42,7 @@ fun SeriesScreen(
val seriesData = series.value
if (seriesData != null && seriesData.seasons.isNotEmpty()) {
SeriesScreenContent(
TvSeriesScreenContent(
series = seriesData,
onPlayEpisode = viewModel::onPlayEpisode,
modifier = modifier
@@ -53,7 +53,7 @@ fun SeriesScreen(
}
@Composable
internal fun SeriesScreenContent(
internal fun TvSeriesScreenContent(
series: Series,
onPlayEpisode: (UUID) -> Unit,
modifier: Modifier = Modifier,
@@ -81,7 +81,7 @@ internal fun SeriesScreenContent(
backgroundImageUrl = tvMediaDetailBackgroundImageUrl(series.imageUrlPrefix),
modifier = it
) {
SeriesHeroSection(
TvSeriesHeroSection(
series = series,
nextUpEpisode = nextUpEpisode,
onPlayEpisode = { onPlayEpisode(it.id) },
@@ -103,7 +103,7 @@ internal fun SeriesScreenContent(
}
}
item {
SeasonTabs(
TvSeasonTabs(
seasons = series.seasons,
selectedSeason = selectedSeason,
firstItemFocusRequester = firstContentFocusRequester,
@@ -114,7 +114,7 @@ internal fun SeriesScreenContent(
}
item {
Spacer(modifier = Modifier.height(20.dp))
EpisodeCarousel(
TvEpisodeCarousel(
episodes = selectedSeason.episodes,
modifier = it
)

View File

@@ -1,9 +1,9 @@
package hu.bbara.purefin.tv.navigation
import androidx.navigation3.runtime.EntryProviderScope
import hu.bbara.purefin.app.content.episode.EpisodeScreen
import hu.bbara.purefin.app.content.movie.MovieScreen
import hu.bbara.purefin.app.content.series.SeriesScreen
import hu.bbara.purefin.app.content.episode.TvEpisodeScreen
import hu.bbara.purefin.app.content.movie.TvMovieScreen
import hu.bbara.purefin.app.content.series.TvSeriesScreen
import hu.bbara.purefin.core.data.navigation.LocalNavigationManager
import hu.bbara.purefin.core.data.navigation.Route
import hu.bbara.purefin.login.ui.LoginScreen
@@ -25,19 +25,19 @@ fun EntryProviderScope<Route>.tvLoginSection() {
fun EntryProviderScope<Route>.tvMovieSection() {
entry<Route.MovieRoute> { route ->
MovieScreen(movie = route.item)
TvMovieScreen(movie = route.item)
}
}
fun EntryProviderScope<Route>.tvSeriesSection() {
entry<Route.SeriesRoute> { route ->
SeriesScreen(series = route.item)
TvSeriesScreen(series = route.item)
}
}
fun EntryProviderScope<Route>.tvEpisodeSection() {
entry<Route.EpisodeRoute> { route ->
EpisodeScreen(episode = route.item)
TvEpisodeScreen(episode = route.item)
}
}