refactor navigation code

This commit is contained in:
Owen LeJeune
2023-06-11 17:17:38 -04:00
parent 97d7fbd841
commit f36dc741e9
12 changed files with 28 additions and 20 deletions

View File

@@ -45,7 +45,7 @@ fun MediaResultCard(
.clickable( .clickable(
onClick = { onClick = {
appNavController.navigate( appNavController.navigate(
"${AppNavItem.DetailView.route}/${mediaViewType}/${id}" AppNavItem.DetailView.withArgs(mediaViewType, id)
) )
} }
) )

View File

@@ -186,7 +186,7 @@ fun ProfileMenuOverlay(
} else { } else {
SessionManager.signInPart1(context) { SessionManager.signInPart1(context) {
appNavController.navigate( appNavController.navigate(
AppNavItem.WebLinkView.route.plus("/$it") AppNavItem.WebLinkView.withArgs(it)
) )
} }
} }

View File

@@ -210,7 +210,7 @@ fun SearchView(
fab: MutableState<@Composable () -> Unit>, fab: MutableState<@Composable () -> Unit>,
preferences: AppPreferences = KoinJavaComponent.get(AppPreferences::class.java) 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) { if (preferences.showSearchBar) {
SearchBar( SearchBar(
placeholder = title placeholder = title

View File

@@ -90,9 +90,9 @@ fun AppNavigationHost(
SettingsScreen(appNavController = appNavController) SettingsScreen(appNavController = appNavController)
} }
composable( 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( 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 } navArgument(NavConstants.SEARCH_TITLE_KEY) { type = NavType.StringType }
) )
) { ) {
@@ -104,7 +104,7 @@ fun AppNavigationHost(
) )
} else { } else {
Pair( Pair(
MediaViewType[arguments.getInt(NavConstants.SEARCH_ID_KEY)], arguments.getSerializable(NavConstants.SEARCH_ID_KEY) as MediaViewType,
arguments.getString(NavConstants.SEARCH_TITLE_KEY) ?: "" arguments.getString(NavConstants.SEARCH_TITLE_KEY) ?: ""
) )
} }
@@ -152,10 +152,18 @@ sealed class AppNavItem(val route: String) {
} }
object MainView: AppNavItem("main_route") object MainView: AppNavItem("main_route")
object DetailView: AppNavItem("detail_route") object DetailView: AppNavItem("detail_route") {
object SettingsView: AppNavItem("settings_route") fun withArgs(type: MediaViewType, id: Int) = route.plus("/${type}/${id}")
object SearchView: AppNavItem("search_route") }
object WebLinkView: AppNavItem("web_link_route") 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 AccountView: AppNavItem("account_route")
object AboutView: AppNavItem("about_route") object AboutView: AppNavItem("about_route")

View File

@@ -10,7 +10,7 @@ import androidx.navigation.compose.composable
import com.owenlejeune.tvtime.R import com.owenlejeune.tvtime.R
import com.owenlejeune.tvtime.preferences.AppPreferences import com.owenlejeune.tvtime.preferences.AppPreferences
import com.owenlejeune.tvtime.ui.screens.AccountViewContent 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.utils.types.MediaViewType
import com.owenlejeune.tvtime.ui.screens.tabs.PeopleTab import com.owenlejeune.tvtime.ui.screens.tabs.PeopleTab
import com.owenlejeune.tvtime.utils.ResourceUtils import com.owenlejeune.tvtime.utils.ResourceUtils

View File

@@ -305,7 +305,7 @@ fun RecommendedAccountTabContent(
lazyPagingItems = mediaListItems, lazyPagingItems = mediaListItems,
onClick = { id -> onClick = { id ->
appNavController.navigate( appNavController.navigate(
"${AppNavItem.DetailView.route}/${mediaViewType}/${id}" AppNavItem.DetailView.withArgs(mediaViewType, id)
) )
} }
) )

View File

@@ -459,7 +459,7 @@ private fun ListItemView(
.clickable( .clickable(
onClick = { onClick = {
appNavController.navigate( appNavController.navigate(
"${AppNavItem.DetailView.route}/${listItem.mediaType}/${listItem.id}" AppNavItem.DetailView.withArgs(listItem.mediaType, listItem.id)
) )
} }
) )

View File

@@ -1138,7 +1138,7 @@ private fun CastCrewCard(appNavController: NavController, person: Person) {
subtitleTextColor = MaterialTheme.colorScheme.onSecondary, subtitleTextColor = MaterialTheme.colorScheme.onSecondary,
onItemClicked = { onItemClicked = {
appNavController.navigate( 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), imageUrl = TmdbUtils.getFullPosterPath(content),
onItemClicked = { onItemClicked = {
appNavController.navigate( appNavController.navigate(
"${AppNavItem.DetailView.route}/${mediaType}/${content.id}" AppNavItem.DetailView.withArgs(mediaType, content.id)
) )
}, },
placeholder = Icons.Filled.Movie placeholder = Icons.Filled.Movie

View File

@@ -127,7 +127,7 @@ fun PersonDetailScreen(
onItemClicked = { onItemClicked = {
personId?.let { personId?.let {
appNavController.navigate( appNavController.navigate(
"${AppNavItem.DetailView.route}/${content.mediaType}/${content.id}" AppNavItem.DetailView.withArgs(content.mediaType, content.id)
) )
} }
} }
@@ -173,7 +173,7 @@ fun PersonDetailScreen(
onItemClicked = { onItemClicked = {
personId?.let { personId?.let {
appNavController.navigate( appNavController.navigate(
"${AppNavItem.DetailView.route}/${content.mediaType}/${content.id}" AppNavItem.DetailView.withArgs(content.mediaType, content.id)
) )
} }
} }

View File

@@ -188,7 +188,7 @@ private fun TopLevelSettingsCard(
.wrapContentHeight() .wrapContentHeight()
.clickable( .clickable(
onClick = { onClick = {
appNavController.navigate("${AppNavItem.SettingsView.route}/${settingsView.route}") appNavController.navigate(AppNavItem.SettingsView.withArgs(settingsView.route))
} }
) )
) { ) {

View File

@@ -73,7 +73,7 @@ fun MediaTabContent(appNavController: NavHostController, mediaType: MediaViewTyp
lazyPagingItems = mediaListItems, lazyPagingItems = mediaListItems,
onClick = { id -> onClick = { id ->
appNavController.navigate( appNavController.navigate(
"${AppNavItem.DetailView.route}/${mediaType}/${id}" AppNavItem.DetailView.withArgs(mediaType, id)
) )
} }
) )

View File

@@ -43,7 +43,7 @@ fun PeopleTab(
}, },
onClick = { id -> onClick = { id ->
appNavController.navigate( appNavController.navigate(
"${AppNavItem.DetailView.route}/${MediaViewType.PERSON}/${id}" AppNavItem.DetailView.withArgs(MediaViewType.PERSON, id)
) )
} }
) )