mirror of
https://github.com/bbara04/Purefin.git
synced 2026-07-23 19:26:50 +00:00
feat: Rename screen and component classes for TV context
This commit is contained in:
@@ -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++ }
|
||||
|
||||
@@ -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++ }
|
||||
)
|
||||
|
||||
@@ -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++ }
|
||||
)
|
||||
|
||||
@@ -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,
|
||||
@@ -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,
|
||||
@@ -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,
|
||||
@@ -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,
|
||||
@@ -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
|
||||
) {
|
||||
@@ -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
|
||||
)
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user