From fc2710fc01a60e398df18e3be24dfebc48dea11a Mon Sep 17 00:00:00 2001 From: Owen LeJeune Date: Wed, 16 Feb 2022 17:10:18 -0500 Subject: [PATCH] extract some strings --- .../owenlejeune/tvtime/TvTimeApplication.kt | 4 +++- .../owenlejeune/tvtime/di/modules/modules.kt | 5 +++++ .../tvtime/ui/navigation/BottomNavItem.kt | 17 ++++++++++++----- .../tvtime/ui/navigation/Routes.kt | 19 ++++++++++--------- .../owenlejeune/tvtime/utils/ResourceUtils.kt | 11 +++++++++++ .../com/owenlejeune/tvtime/utils/TmdbUtils.kt | 12 ++++++------ app/src/main/res/values/strings.xml | 4 ++++ 7 files changed, 51 insertions(+), 21 deletions(-) create mode 100644 app/src/main/java/com/owenlejeune/tvtime/utils/ResourceUtils.kt diff --git a/app/src/main/java/com/owenlejeune/tvtime/TvTimeApplication.kt b/app/src/main/java/com/owenlejeune/tvtime/TvTimeApplication.kt index 427e63b..9e9bfc0 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/TvTimeApplication.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/TvTimeApplication.kt @@ -2,6 +2,7 @@ package com.owenlejeune.tvtime import android.app.Application import com.facebook.stetho.Stetho +import com.owenlejeune.tvtime.di.modules.appModule import com.owenlejeune.tvtime.di.modules.networkModule import com.owenlejeune.tvtime.di.modules.preferencesModule import org.koin.android.ext.koin.androidContext @@ -22,7 +23,8 @@ class TvTimeApplication: Application() { androidContext(this@TvTimeApplication) modules( networkModule, - preferencesModule + preferencesModule, + appModule ) } diff --git a/app/src/main/java/com/owenlejeune/tvtime/di/modules/modules.kt b/app/src/main/java/com/owenlejeune/tvtime/di/modules/modules.kt index 8305ffb..00306db 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/di/modules/modules.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/di/modules/modules.kt @@ -3,6 +3,7 @@ package com.owenlejeune.tvtime.di.modules import com.owenlejeune.tvtime.BuildConfig import com.owenlejeune.tvtime.api.* import com.owenlejeune.tvtime.preferences.AppPreferences +import com.owenlejeune.tvtime.utils.ResourceUtils import org.koin.dsl.module val networkModule = module { @@ -13,4 +14,8 @@ val networkModule = module { val preferencesModule = module { single { AppPreferences(get()) } +} + +val appModule = module { + factory { ResourceUtils(get()) } } \ No newline at end of file diff --git a/app/src/main/java/com/owenlejeune/tvtime/ui/navigation/BottomNavItem.kt b/app/src/main/java/com/owenlejeune/tvtime/ui/navigation/BottomNavItem.kt index 256e5b8..62ab5bc 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/ui/navigation/BottomNavItem.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/ui/navigation/BottomNavItem.kt @@ -1,8 +1,15 @@ package com.owenlejeune.tvtime.ui.navigation import com.owenlejeune.tvtime.R +import com.owenlejeune.tvtime.utils.ResourceUtils +import org.koin.core.component.KoinComponent +import org.koin.core.component.inject -sealed class BottomNavItem(val name: String, val icon: Int, val route: String) { +sealed class BottomNavItem(stringRes: Int, val icon: Int, val route: String): KoinComponent { + + private val resourceUtils: ResourceUtils by inject() + + val name = resourceUtils.getString(stringRes) companion object { val Items = listOf(Movies, TV, Favourites, Settings) @@ -18,9 +25,9 @@ sealed class BottomNavItem(val name: String, val icon: Int, val route: String) { } } - object Movies: BottomNavItem("Movies", R.drawable.ic_movie, "movies_route") - object TV: BottomNavItem("TV", R.drawable.ic_tv, "tv_route") - object Favourites: BottomNavItem("Favourites", R.drawable.ic_favorite, "favourites_route") - object Settings: BottomNavItem("Settings", R.drawable.ic_settings, "settings_route") + object Movies: BottomNavItem(R.string.nav_movies_title, R.drawable.ic_movie, "movies_route") + object TV: BottomNavItem(R.string.nav_tv_title, R.drawable.ic_tv, "tv_route") + object Favourites: BottomNavItem(R.string.nav_favourites_title, R.drawable.ic_favorite, "favourites_route") + object Settings: BottomNavItem(R.string.nav_settings_title, R.drawable.ic_settings, "settings_route") } diff --git a/app/src/main/java/com/owenlejeune/tvtime/ui/navigation/Routes.kt b/app/src/main/java/com/owenlejeune/tvtime/ui/navigation/Routes.kt index 997ac11..fdb81d0 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/ui/navigation/Routes.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/ui/navigation/Routes.kt @@ -1,18 +1,14 @@ package com.owenlejeune.tvtime.ui.navigation -import androidx.compose.foundation.isSystemInDarkTheme -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf -import androidx.compose.ui.graphics.Color import androidx.navigation.NavController import androidx.navigation.NavHostController import androidx.navigation.NavType import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.navArgument -import com.google.accompanist.systemuicontroller.rememberSystemUiController import com.owenlejeune.tvtime.ui.screens.DetailView import com.owenlejeune.tvtime.ui.screens.DetailViewType import com.owenlejeune.tvtime.ui.screens.MainAppView @@ -21,6 +17,11 @@ import com.owenlejeune.tvtime.ui.screens.tabs.MoviesTab import com.owenlejeune.tvtime.ui.screens.tabs.SettingsTab import com.owenlejeune.tvtime.ui.screens.tabs.TvTab +object NavConstants { + const val ID_KEY = "id_key" + const val TYPE_KEY = "type_key" +} + @Composable fun MainNavigationRoutes(navController: NavHostController, displayUnderStatusBar: MutableState = mutableStateOf(false)) { NavHost(navController = navController, startDestination = MainNavItem.MainView.route) { @@ -29,18 +30,18 @@ fun MainNavigationRoutes(navController: NavHostController, displayUnderStatusBar MainAppView(appNavController = navController) } composable( - MainNavItem.DetailView.route.plus("/{TYPE_KEY}/{ID_KEY}"), + MainNavItem.DetailView.route.plus("/{${NavConstants.TYPE_KEY}}/{${NavConstants.ID_KEY}}"), arguments = listOf( - navArgument("ID_KEY") { type = NavType.IntType }, - navArgument("TYPE_KEY") { type = NavType.EnumType(DetailViewType::class.java) } + navArgument(NavConstants.ID_KEY) { type = NavType.IntType }, + navArgument(NavConstants.TYPE_KEY) { type = NavType.EnumType(DetailViewType::class.java) } ) ) { navBackStackEntry -> displayUnderStatusBar.value = true val args = navBackStackEntry.arguments DetailView( appNavController = navController, - itemId = args?.getInt("ID_KEY"), - type = args?.getSerializable("TYPE_KEY") as DetailViewType + itemId = args?.getInt(NavConstants.ID_KEY), + type = args?.getSerializable(NavConstants.TYPE_KEY) as DetailViewType ) } } diff --git a/app/src/main/java/com/owenlejeune/tvtime/utils/ResourceUtils.kt b/app/src/main/java/com/owenlejeune/tvtime/utils/ResourceUtils.kt new file mode 100644 index 0000000..fe9d2c3 --- /dev/null +++ b/app/src/main/java/com/owenlejeune/tvtime/utils/ResourceUtils.kt @@ -0,0 +1,11 @@ +package com.owenlejeune.tvtime.utils + +import android.content.Context + +class ResourceUtils(private val context: Context) { + + fun getString(stringRes: Int): String { + return context.getString(stringRes) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/owenlejeune/tvtime/utils/TmdbUtils.kt b/app/src/main/java/com/owenlejeune/tvtime/utils/TmdbUtils.kt index e1dad6f..9591954 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/utils/TmdbUtils.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/utils/TmdbUtils.kt @@ -9,6 +9,8 @@ object TmdbUtils { private const val BACKDROP_BASE = "https://www.themoviedb.org/t/p/original" private const val PERSON_BASE = "https://www.themoviedb.org/t/p/w600_and_h900_bestv2" + private const val DEF_REGION = "US" + fun getFullPosterPath(posterPath: String?): String? { return posterPath?.let { "https://image.tmdb.org/t/p/original${posterPath}" } } @@ -93,11 +95,10 @@ object TmdbUtils { return "" } - val defRegion = "US" val currentRegion = Locale.current.language val certifications = HashMap() releases.releaseDates.forEach { releaseDateResult -> - if (releaseDateResult.region == currentRegion || releaseDateResult.region == defRegion) { + if (releaseDateResult.region == currentRegion || releaseDateResult.region == DEF_REGION) { val cert = releaseDateResult.releaseDates.firstOrNull { it.certification.isNotEmpty() } if (cert != null) { certifications[releaseDateResult.region] = cert.certification @@ -105,7 +106,7 @@ object TmdbUtils { } } if (certifications.isNotEmpty()) { - return certifications[currentRegion] ?: certifications[defRegion] ?: "" + return certifications[currentRegion] ?: certifications[DEF_REGION] ?: "" } return "" } @@ -115,16 +116,15 @@ object TmdbUtils { return "" } - val defRegion = "US" val currentRegion = Locale.current.language val certifications = HashMap() contentRatings.results.forEach { contentRating -> - if (contentRating.language == currentRegion || contentRating.language == defRegion) { + if (contentRating.language == currentRegion || contentRating.language == DEF_REGION) { certifications[contentRating.language] = contentRating.rating } } if (certifications.isNotEmpty()) { - return certifications[currentRegion] ?: certifications[defRegion] ?: "" + return certifications[currentRegion] ?: certifications[DEF_REGION] ?: "" } return "" } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7fbb77d..0170aa5 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,3 +1,7 @@ TVTime + Movies + TV + Favourites + Settings \ No newline at end of file