From f36dc741e961ae2f7324c8d32f54b8b19d2e8c37 Mon Sep 17 00:00:00 2001 From: Owen LeJeune Date: Sun, 11 Jun 2023 17:17:38 -0400 Subject: [PATCH] refactor navigation code --- .../tvtime/ui/components/MediaViews.kt | 2 +- .../owenlejeune/tvtime/ui/components/Menus.kt | 2 +- .../tvtime/ui/components/Widgets.kt | 2 +- .../tvtime/ui/navigation/AppNavigation.kt | 22 +++++++++++++------ .../ui/navigation/HomeScreenNavigation.kt | 2 +- .../tvtime/ui/screens/AccountScreen.kt | 2 +- .../tvtime/ui/screens/ListDetailScreen.kt | 2 +- .../tvtime/ui/screens/MediaDetailScreen.kt | 4 ++-- .../tvtime/ui/screens/PeopleDetailScreen.kt | 4 ++-- .../tvtime/ui/screens/SettingsScreen.kt | 2 +- .../tvtime/ui/screens/tabs/MediaTab.kt | 2 +- .../tvtime/ui/screens/tabs/PeopleTab.kt | 2 +- 12 files changed, 28 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/com/owenlejeune/tvtime/ui/components/MediaViews.kt b/app/src/main/java/com/owenlejeune/tvtime/ui/components/MediaViews.kt index ca0756c..c46b541 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/ui/components/MediaViews.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/ui/components/MediaViews.kt @@ -45,7 +45,7 @@ fun MediaResultCard( .clickable( onClick = { appNavController.navigate( - "${AppNavItem.DetailView.route}/${mediaViewType}/${id}" + AppNavItem.DetailView.withArgs(mediaViewType, id) ) } ) diff --git a/app/src/main/java/com/owenlejeune/tvtime/ui/components/Menus.kt b/app/src/main/java/com/owenlejeune/tvtime/ui/components/Menus.kt index 5612647..4063573 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/ui/components/Menus.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/ui/components/Menus.kt @@ -186,7 +186,7 @@ fun ProfileMenuOverlay( } else { SessionManager.signInPart1(context) { appNavController.navigate( - AppNavItem.WebLinkView.route.plus("/$it") + AppNavItem.WebLinkView.withArgs(it) ) } } diff --git a/app/src/main/java/com/owenlejeune/tvtime/ui/components/Widgets.kt b/app/src/main/java/com/owenlejeune/tvtime/ui/components/Widgets.kt index 22c9ebe..cd1d5ce 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/ui/components/Widgets.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/ui/components/Widgets.kt @@ -210,7 +210,7 @@ fun SearchView( fab: MutableState<@Composable () -> Unit>, preferences: AppPreferences = KoinJavaComponent.get(AppPreferences::class.java) ) { - val route = "${AppNavItem.SearchView.route}/${mediaType.ordinal}/$title" + val route = AppNavItem.SearchView.withArgs(mediaType, title) if (preferences.showSearchBar) { SearchBar( placeholder = title diff --git a/app/src/main/java/com/owenlejeune/tvtime/ui/navigation/AppNavigation.kt b/app/src/main/java/com/owenlejeune/tvtime/ui/navigation/AppNavigation.kt index c078903..52eeb04 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/ui/navigation/AppNavigation.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/ui/navigation/AppNavigation.kt @@ -90,9 +90,9 @@ fun AppNavigationHost( SettingsScreen(appNavController = appNavController) } composable( - route = AppNavItem.SearchView.route.plus("/{${NavConstants.SEARCH_ID_KEY}}/{${NavConstants.SEARCH_TITLE_KEY}}"), + route = AppNavItem.SearchView.route.plus("?searchType={${NavConstants.SEARCH_ID_KEY}}&pageTitle={${NavConstants.SEARCH_TITLE_KEY}}"), arguments = listOf( - navArgument(NavConstants.SEARCH_ID_KEY) { type = NavType.IntType }, + navArgument(NavConstants.SEARCH_ID_KEY) { type = NavType.EnumType(MediaViewType::class.java) }, navArgument(NavConstants.SEARCH_TITLE_KEY) { type = NavType.StringType } ) ) { @@ -104,7 +104,7 @@ fun AppNavigationHost( ) } else { Pair( - MediaViewType[arguments.getInt(NavConstants.SEARCH_ID_KEY)], + arguments.getSerializable(NavConstants.SEARCH_ID_KEY) as MediaViewType, arguments.getString(NavConstants.SEARCH_TITLE_KEY) ?: "" ) } @@ -152,10 +152,18 @@ sealed class AppNavItem(val route: String) { } object MainView: AppNavItem("main_route") - object DetailView: AppNavItem("detail_route") - object SettingsView: AppNavItem("settings_route") - object SearchView: AppNavItem("search_route") - object WebLinkView: AppNavItem("web_link_route") + object DetailView: AppNavItem("detail_route") { + fun withArgs(type: MediaViewType, id: Int) = route.plus("/${type}/${id}") + } + object SettingsView: AppNavItem("settings_route") { + fun withArgs(page: String) = route.plus("/$page") + } + object SearchView: AppNavItem("search_route") { + fun withArgs(searchType: MediaViewType, pageTitle: String) = route.plus("?searchType=$searchType&pageTitle=$pageTitle") + } + object WebLinkView: AppNavItem("web_link_route") { + fun withArgs(url: String) = route.plus("/$url") + } object AccountView: AppNavItem("account_route") object AboutView: AppNavItem("about_route") diff --git a/app/src/main/java/com/owenlejeune/tvtime/ui/navigation/HomeScreenNavigation.kt b/app/src/main/java/com/owenlejeune/tvtime/ui/navigation/HomeScreenNavigation.kt index 945a517..0494139 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/ui/navigation/HomeScreenNavigation.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/ui/navigation/HomeScreenNavigation.kt @@ -10,7 +10,7 @@ import androidx.navigation.compose.composable import com.owenlejeune.tvtime.R import com.owenlejeune.tvtime.preferences.AppPreferences import com.owenlejeune.tvtime.ui.screens.AccountViewContent -import com.owenlejeune.tvtime.ui.screens.new.tabs.MediaTab +import com.owenlejeune.tvtime.ui.screens.tabs.MediaTab import com.owenlejeune.tvtime.utils.types.MediaViewType import com.owenlejeune.tvtime.ui.screens.tabs.PeopleTab import com.owenlejeune.tvtime.utils.ResourceUtils diff --git a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/AccountScreen.kt b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/AccountScreen.kt index 8370562..ca0af59 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/AccountScreen.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/AccountScreen.kt @@ -305,7 +305,7 @@ fun RecommendedAccountTabContent( lazyPagingItems = mediaListItems, onClick = { id -> appNavController.navigate( - "${AppNavItem.DetailView.route}/${mediaViewType}/${id}" + AppNavItem.DetailView.withArgs(mediaViewType, id) ) } ) diff --git a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/ListDetailScreen.kt b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/ListDetailScreen.kt index c303410..59dce50 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/ListDetailScreen.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/ListDetailScreen.kt @@ -459,7 +459,7 @@ private fun ListItemView( .clickable( onClick = { appNavController.navigate( - "${AppNavItem.DetailView.route}/${listItem.mediaType}/${listItem.id}" + AppNavItem.DetailView.withArgs(listItem.mediaType, listItem.id) ) } ) diff --git a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/MediaDetailScreen.kt b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/MediaDetailScreen.kt index 19696ae..adf6a9c 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/MediaDetailScreen.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/MediaDetailScreen.kt @@ -1138,7 +1138,7 @@ private fun CastCrewCard(appNavController: NavController, person: Person) { subtitleTextColor = MaterialTheme.colorScheme.onSecondary, onItemClicked = { appNavController.navigate( - "${AppNavItem.DetailView.route}/${MediaViewType.PERSON}/${person.id}" + AppNavItem.DetailView.withArgs(MediaViewType.PERSON, person.id) ) } ) @@ -1184,7 +1184,7 @@ fun SimilarContentCard( imageUrl = TmdbUtils.getFullPosterPath(content), onItemClicked = { appNavController.navigate( - "${AppNavItem.DetailView.route}/${mediaType}/${content.id}" + AppNavItem.DetailView.withArgs(mediaType, content.id) ) }, placeholder = Icons.Filled.Movie diff --git a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/PeopleDetailScreen.kt b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/PeopleDetailScreen.kt index 7ee534c..6a6d964 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/PeopleDetailScreen.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/PeopleDetailScreen.kt @@ -127,7 +127,7 @@ fun PersonDetailScreen( onItemClicked = { personId?.let { appNavController.navigate( - "${AppNavItem.DetailView.route}/${content.mediaType}/${content.id}" + AppNavItem.DetailView.withArgs(content.mediaType, content.id) ) } } @@ -173,7 +173,7 @@ fun PersonDetailScreen( onItemClicked = { personId?.let { appNavController.navigate( - "${AppNavItem.DetailView.route}/${content.mediaType}/${content.id}" + AppNavItem.DetailView.withArgs(content.mediaType, content.id) ) } } diff --git a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/SettingsScreen.kt b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/SettingsScreen.kt index 94fffa3..54e44b9 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/SettingsScreen.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/SettingsScreen.kt @@ -188,7 +188,7 @@ private fun TopLevelSettingsCard( .wrapContentHeight() .clickable( onClick = { - appNavController.navigate("${AppNavItem.SettingsView.route}/${settingsView.route}") + appNavController.navigate(AppNavItem.SettingsView.withArgs(settingsView.route)) } ) ) { diff --git a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/tabs/MediaTab.kt b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/tabs/MediaTab.kt index c961914..57471d5 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/tabs/MediaTab.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/tabs/MediaTab.kt @@ -73,7 +73,7 @@ fun MediaTabContent(appNavController: NavHostController, mediaType: MediaViewTyp lazyPagingItems = mediaListItems, onClick = { id -> appNavController.navigate( - "${AppNavItem.DetailView.route}/${mediaType}/${id}" + AppNavItem.DetailView.withArgs(mediaType, id) ) } ) diff --git a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/tabs/PeopleTab.kt b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/tabs/PeopleTab.kt index e9684c1..444c1a8 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/tabs/PeopleTab.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/tabs/PeopleTab.kt @@ -43,7 +43,7 @@ fun PeopleTab( }, onClick = { id -> appNavController.navigate( - "${AppNavItem.DetailView.route}/${MediaViewType.PERSON}/${id}" + AppNavItem.DetailView.withArgs(MediaViewType.PERSON, id) ) } )