From 2605f6b3f40d4e8a8459e2d1e4f862a78d80f180 Mon Sep 17 00:00:00 2001 From: Owen LeJeune Date: Thu, 3 Mar 2022 14:38:18 -0500 Subject: [PATCH] add tagline to details --- .../tvtime/api/tmdb/model/Status.kt | 23 ++++--- .../tvtime/ui/screens/DetailView.kt | 69 +++++++++++-------- app/src/main/res/values/strings.xml | 27 ++++++-- 3 files changed, 73 insertions(+), 46 deletions(-) diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/model/Status.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/model/Status.kt index d1694de..1c11709 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/model/Status.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/model/Status.kt @@ -1,26 +1,27 @@ package com.owenlejeune.tvtime.api.tmdb.model import com.google.gson.annotations.SerializedName +import com.owenlejeune.tvtime.R -enum class Status { +enum class Status(val stringRes: Int) { @SerializedName("Rumoured") - RUMOURED, + RUMOURED(R.string.status_rumoured), @SerializedName("Planned") - PLANNED, + PLANNED(R.string.status_planned), @SerializedName("In Production") - IN_PRODUCTION, + IN_PRODUCTION(R.string.status_in_production), @SerializedName("Post Production") - POST_PRODUCTION, + POST_PRODUCTION(R.string.status_post_production), @SerializedName("Released") - RELEASED, + RELEASED(R.string.status_released), @SerializedName("Canceled") - CANCELED, + CANCELED(R.string.status_canceled), @SerializedName("Returning Series") - RETURNING_SERIES, + RETURNING_SERIES(R.string.status_returning_series), @SerializedName("Ended") - ENDED, + ENDED(R.string.status_ended), @SerializedName("Pilot") - PILOT, + PILOT(R.string.status_pilot), @SerializedName("Active") - ACTIVE + ACTIVE(R.string.status_active) } \ No newline at end of file diff --git a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/DetailView.kt b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/DetailView.kt index 2e42c57..8c08fbd 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/DetailView.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/DetailView.kt @@ -20,6 +20,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow @@ -412,8 +413,8 @@ private fun ContentColumn( MiscTvDetails(mediaItem = mediaItem, service as TvService) } - if (mediaItem.value?.overview?.isNotEmpty() == true) { - OverviewCard(itemId = itemId!!, mediaItem.value!!.overview!!, service) + if (itemId != null && mediaItem.value != null) { + OverviewCard(itemId = itemId, mediaItem.value!!, service) } CastCard(itemId = itemId, service = service, appNavController = appNavController) @@ -664,41 +665,51 @@ private fun RatingDialog(showDialog: MutableState, onValueConfirmed: (F } @Composable -private fun OverviewCard(itemId: Int, overview: String, service: DetailService, modifier: Modifier = Modifier) { +private fun OverviewCard(itemId: Int, mediaItem: DetailedItem, service: DetailService, modifier: Modifier = Modifier) { val keywordResponse = remember { mutableStateOf(null) } if (keywordResponse.value == null) { fetchKeywords(itemId, service, keywordResponse) } val context = LocalContext.current - ContentCard( - modifier = modifier - ) { - Column( - modifier = Modifier - .fillMaxWidth() - .wrapContentHeight() - .padding(vertical = 12.dp, horizontal = 16.dp), - verticalArrangement = Arrangement.spacedBy(8.dp) + mediaItem.overview?.let { overview -> + ContentCard( + modifier = modifier ) { - Text( - text = overview, - color = MaterialTheme.colorScheme.onSurfaceVariant, - style = MaterialTheme.typography.bodyMedium - ) - - - keywordResponse.value?.keywords?.let { keywords -> - val names = keywords.map { it.name } - ChipGroup( - chips = names, - chipStyle = ChipStyle.Rounded, - onSelectedChanged = { chip -> - if (service is MoviesService) { -// Toast.makeText(context, chip, Toast.LENGTH_SHORT).show() - } - } + Column( + modifier = Modifier + .fillMaxWidth() + .wrapContentHeight() + .padding(vertical = 12.dp, horizontal = 16.dp), + verticalArrangement = Arrangement.spacedBy(8.dp) + ) { + mediaItem.tagline?.let { tagline -> + Text( + text = tagline, + color = MaterialTheme.colorScheme.onSurfaceVariant, + style = MaterialTheme.typography.bodyLarge, + fontStyle = FontStyle.Italic + ) + } + Text( + text = overview, + color = MaterialTheme.colorScheme.onSurfaceVariant, + style = MaterialTheme.typography.bodyMedium ) + + + keywordResponse.value?.keywords?.let { keywords -> + val names = keywords.map { it.name } + ChipGroup( + chips = names, + chipStyle = ChipStyle.Rounded, + onSelectedChanged = { chip -> + if (service is MoviesService) { +// Toast.makeText(context, chip, Toast.LENGTH_SHORT).show() + } + } + ) + } } } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5c4ef46..806957d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -12,8 +12,13 @@ Upcoming Airing Today On The Air + Account + Rated Movies + Rated TV Shows + Rated TV Episodes + People - + Cast Recommended Videos @@ -48,14 +53,24 @@ Teasers Behind the Scenes Featurettes + Back Search Icon + Add a Rating Submit rating + Cancel - Account - Rated Movies - Rated TV Shows - Rated TV Episodes - People + + + Rumoured + Planned + In Production + Post Production + Released + Canceled + Returning Series + Ended + Pilot + Active \ No newline at end of file