From 1fa93c40735fecf187900fd598f2fd3cbffb6393 Mon Sep 17 00:00:00 2001 From: Owen LeJeune Date: Wed, 16 Feb 2022 17:34:18 -0500 Subject: [PATCH] include initial support for more languages --- .../owenlejeune/tvtime/api/tmdb/TmdbClient.kt | 13 ++++++++++- .../extensions/InterceptorExtensions.kt | 6 +++-- .../tvtime/ui/screens/DetailView.kt | 22 +++++++++++++------ app/src/main/res/values-fr/strings.xml | 9 ++++++++ app/src/main/res/values/strings.xml | 1 + 5 files changed, 41 insertions(+), 10 deletions(-) create mode 100644 app/src/main/res/values-fr/strings.xml diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/TmdbClient.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/TmdbClient.kt index b2d45df..876603e 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/TmdbClient.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/TmdbClient.kt @@ -1,5 +1,6 @@ package com.owenlejeune.tvtime.api.tmdb +import androidx.compose.ui.text.intl.Locale import com.owenlejeune.tvtime.BuildConfig import com.owenlejeune.tvtime.api.Client import com.owenlejeune.tvtime.api.QueryParam @@ -14,6 +15,8 @@ class TmdbClient: KoinComponent { companion object { const val BASE_URL = "https://api.themoviedb.org/3/" + + private val SUPPORTED_LANGUAGES = listOf("en", "fr") } private val client: Client by inject { parametersOf(BASE_URL) } @@ -34,7 +37,15 @@ class TmdbClient: KoinComponent { override fun intercept(chain: Interceptor.Chain): Response { val apiParam = QueryParam("api_key", BuildConfig.TMDB_ApiKey) - val request = chain.addQueryParams(apiParam) + val locale = Locale.current + val languageParam = if (SUPPORTED_LANGUAGES.contains(locale.language)) { + val languageCode = "${locale.language}-${locale.region}" + QueryParam("language", languageCode) + } else { + null + } + + val request = chain.addQueryParams(apiParam, languageParam) return chain.proceed(request) } diff --git a/app/src/main/java/com/owenlejeune/tvtime/extensions/InterceptorExtensions.kt b/app/src/main/java/com/owenlejeune/tvtime/extensions/InterceptorExtensions.kt index 17982d8..1425c80 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/extensions/InterceptorExtensions.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/extensions/InterceptorExtensions.kt @@ -4,13 +4,15 @@ import com.owenlejeune.tvtime.api.QueryParam import okhttp3.Interceptor import okhttp3.Request -fun Interceptor.Chain.addQueryParams(vararg queryParams: QueryParam): Request { +fun Interceptor.Chain.addQueryParams(vararg queryParams: QueryParam?): Request { val original = request() val originalHttpUrl = original.url() val urlBuilder = originalHttpUrl.newBuilder() queryParams.forEach { param -> - urlBuilder.addQueryParameter(param.key, param.param) + if (param != null) { + urlBuilder.addQueryParameter(param.key, param.param) + } } val url = urlBuilder.build() 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 8b220dc..5f9963c 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 @@ -19,6 +19,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.constraintlayout.compose.ConstraintLayout @@ -318,14 +319,21 @@ private fun CastCard(itemId: Int?, service: DetailService) { backgroundColor = MaterialTheme.colorScheme.primary, elevation = 8.dp ) { - LazyRow(modifier = Modifier - .fillMaxSize() - .padding(12.dp) - ) { - items(castAndCrew.value?.cast?.size ?: 0) { i -> - val castMember = castAndCrew.value!!.cast[i] + Column(modifier = Modifier.fillMaxSize()) { + Text( + text = stringResource(R.string.cast_label), + style = MaterialTheme.typography.titleLarge, + modifier = Modifier.padding(start = 12.dp, top = 12.dp) + ) + LazyRow(modifier = Modifier + .fillMaxWidth() + .padding(12.dp) + ) { + items(castAndCrew.value?.cast?.size ?: 0) { i -> + val castMember = castAndCrew.value!!.cast[i] - CastCrewCard(person = castMember) + CastCrewCard(person = castMember) + } } } } diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml new file mode 100644 index 0000000..484f1a7 --- /dev/null +++ b/app/src/main/res/values-fr/strings.xml @@ -0,0 +1,9 @@ + + + TVTime + Films + Télé + Favoris + Réglages + Acteurs + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0170aa5..d8e2c74 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -4,4 +4,5 @@ TV Favourites Settings + Cast \ No newline at end of file