refactor auth navigation

This commit is contained in:
Owen LeJeune
2023-06-01 18:20:13 -04:00
parent 5c5a931673
commit 20390b0d50
4 changed files with 29 additions and 40 deletions

View File

@@ -1,6 +1,7 @@
package com.owenlejeune.tvtime package com.owenlejeune.tvtime
import android.os.Bundle import android.os.Bundle
import android.util.Log
import androidx.activity.compose.setContent import androidx.activity.compose.setContent
import androidx.compose.animation.rememberSplineBasedDecay import androidx.compose.animation.rememberSplineBasedDecay
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.*
@@ -39,6 +40,7 @@ import com.owenlejeune.tvtime.ui.screens.SearchScreen
import com.owenlejeune.tvtime.ui.screens.main.* import com.owenlejeune.tvtime.ui.screens.main.*
import com.owenlejeune.tvtime.ui.theme.TVTimeTheme import com.owenlejeune.tvtime.ui.theme.TVTimeTheme
import com.owenlejeune.tvtime.utils.KeyboardManager import com.owenlejeune.tvtime.utils.KeyboardManager
import com.owenlejeune.tvtime.utils.NavConstants
import com.owenlejeune.tvtime.utils.SessionManager import com.owenlejeune.tvtime.utils.SessionManager
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
@@ -55,12 +57,7 @@ class MainActivity : MonetCompatActivity() {
SessionManager.initialize() SessionManager.initialize()
} }
var mainNavStartRoute = BottomNavItem.SortedItems[0].route val mainNavStartRoute = BottomNavItem.SortedItems[0].route
intent.data?.let {
when (it.host) {
getString(R.string.intent_route_auth_return) -> mainNavStartRoute = BottomNavItem.SIGN_IN_PART_2_ROUTE
}
}
lifecycleScope.launchWhenCreated { lifecycleScope.launchWhenCreated {
monet.awaitMonetReady() monet.awaitMonetReady()
@@ -179,7 +176,7 @@ class MainActivity : MonetCompatActivity() {
NavigationBar { NavigationBar {
BottomNavItem.SortedItems.forEach { item -> BottomNavItem.SortedItems.forEach { item ->
val isSelected = currentRoute == item.route || item.alternateRoutes.contains(currentRoute ?: "") val isSelected = currentRoute == item.route
NavigationBarItem( NavigationBarItem(
modifier = Modifier modifier = Modifier
.padding(4.dp) .padding(4.dp)
@@ -215,11 +212,7 @@ class MainActivity : MonetCompatActivity() {
private fun navigateToRoute(navController: NavController, route: String) { private fun navigateToRoute(navController: NavController, route: String) {
navController.navigate(route) { navController.navigate(route) {
navController.graph.startDestinationRoute?.let { screenRoute -> popUpTo(route)
popUpTo(screenRoute) {
saveState = true
}
}
launchSingleTop = true launchSingleTop = true
restoreState = true restoreState = true
} }
@@ -295,7 +288,7 @@ class MainActivity : MonetCompatActivity() {
NavigationRail { NavigationRail {
Spacer(modifier = Modifier.weight(1f)) Spacer(modifier = Modifier.weight(1f))
BottomNavItem.SortedItems.forEachIndexed { index, item -> BottomNavItem.SortedItems.forEachIndexed { index, item ->
val isSelected = currentRoute == item.route || item.alternateRoutes.contains(currentRoute ?: "") val isSelected = currentRoute == item.route
NavigationRailItem( NavigationRailItem(
icon = { Icon(painter = painterResource(id = item.icon), contentDescription = null) }, icon = { Icon(painter = painterResource(id = item.icon), contentDescription = null) },
label = { if (preferences.showBottomTabLabels) Text(item.name) }, label = { if (preferences.showBottomTabLabels) Text(item.name) },
@@ -360,14 +353,6 @@ class MainActivity : MonetCompatActivity() {
} }
} }
private object NavConstants {
const val ID_KEY = "id_key"
const val TYPE_KEY = "type_key"
const val SETTINGS_KEY = "settings_key"
const val SEARCH_ID_KEY = "search_key"
const val SEARCH_TITLE_KEY = "search_title_key"
}
@Composable @Composable
private fun MainNavigationRoutes( private fun MainNavigationRoutes(
startDestination: String = MainNavItem.MainView.route, startDestination: String = MainNavItem.MainView.route,

View File

@@ -11,8 +11,7 @@ sealed class BottomNavItem(
val icon: Int, val icon: Int,
val route: String, val route: String,
private val orderGetter: (AppPreferences) -> Int, private val orderGetter: (AppPreferences) -> Int,
private val orderSetter: (AppPreferences, Int) -> Unit, private val orderSetter: (AppPreferences, Int) -> Unit
val alternateRoutes: List<String> = emptyList()
): KoinComponent { ): KoinComponent {
private val appPreferences: AppPreferences by inject() private val appPreferences: AppPreferences by inject()
@@ -25,8 +24,6 @@ sealed class BottomNavItem(
companion object { companion object {
const val SIGN_IN_PART_2_ROUTE = "sign_in_part_two_route"
val SortedItems val SortedItems
get() = Items.filter { it.order > -1 }.sortedBy { it.order }.ifEmpty { Items } get() = Items.filter { it.order > -1 }.sortedBy { it.order }.ifEmpty { Items }
@@ -46,7 +43,7 @@ sealed class BottomNavItem(
object Movies: BottomNavItem(R.string.nav_movies_title, R.drawable.ic_movie, "movies_route", { it.moviesTabPosition }, { p, i -> p.moviesTabPosition = i } ) object Movies: BottomNavItem(R.string.nav_movies_title, R.drawable.ic_movie, "movies_route", { it.moviesTabPosition }, { p, i -> p.moviesTabPosition = i } )
object TV: BottomNavItem(R.string.nav_tv_title, R.drawable.ic_tv, "tv_route", { it.tvTabPosition }, { p, i -> p.tvTabPosition = i } ) object TV: BottomNavItem(R.string.nav_tv_title, R.drawable.ic_tv, "tv_route", { it.tvTabPosition }, { p, i -> p.tvTabPosition = i } )
object Account: BottomNavItem(R.string.nav_account_title, R.drawable.ic_person, "account_route", { it.accountTabPosition }, { p, i -> p.accountTabPosition = i }, listOf(SIGN_IN_PART_2_ROUTE) ) object Account: BottomNavItem(R.string.nav_account_title, R.drawable.ic_person, "account_route", { it.accountTabPosition }, { p, i -> p.accountTabPosition = i } )
object People: BottomNavItem(R.string.nav_people_title, R.drawable.ic_face, "people_route", { it.peopleTabPosition }, { p, i -> p.peopleTabPosition = i } ) object People: BottomNavItem(R.string.nav_people_title, R.drawable.ic_face, "people_route", { it.peopleTabPosition }, { p, i -> p.peopleTabPosition = i } )
} }

View File

@@ -1,5 +1,6 @@
package com.owenlejeune.tvtime.ui.navigation package com.owenlejeune.tvtime.ui.navigation
import android.util.Log
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.RowScope
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
@@ -10,13 +11,10 @@ import androidx.navigation.NavType
import androidx.navigation.compose.NavHost import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable import androidx.navigation.compose.composable
import androidx.navigation.navArgument import androidx.navigation.navArgument
import androidx.navigation.navDeepLink
import com.owenlejeune.tvtime.ui.screens.main.MediaViewType import com.owenlejeune.tvtime.ui.screens.main.MediaViewType
import com.owenlejeune.tvtime.ui.screens.main.* import com.owenlejeune.tvtime.ui.screens.main.*
import com.owenlejeune.tvtime.utils.NavConstants
object NavConstants {
const val ID_KEY = "id_key"
const val TYPE_KEY = "type_key"
}
@Composable @Composable
fun MainNavGraph( fun MainNavGraph(
@@ -47,20 +45,18 @@ fun MainNavGraph(
fab = fab fab = fab
) )
} }
composable(BottomNavItem.Account.route) { composable(
AccountTab( route = BottomNavItem.Account.route,
appBarTitle = appBarTitle, deepLinks = listOf(
appNavController = appNavController, navDeepLink { uriPattern = "app://tvtime.auth.{${NavConstants.ACCOUNT_KEY}}" }
appBarActions = appBarActions
) )
fab.value = {} ) {
} val deepLink = it.arguments?.getString(NavConstants.ACCOUNT_KEY)
composable(BottomNavItem.SIGN_IN_PART_2_ROUTE) {
AccountTab( AccountTab(
appBarTitle = appBarTitle, appBarTitle = appBarTitle,
appNavController = appNavController, appNavController = appNavController,
appBarActions = appBarActions, appBarActions = appBarActions,
doSignInPartTwo = true doSignInPartTwo = deepLink == NavConstants.AUTH_REDIRECT_PAGE
) )
fab.value = {} fab.value = {}
} }

View File

@@ -0,0 +1,11 @@
package com.owenlejeune.tvtime.utils
object NavConstants {
const val ID_KEY = "id_key"
const val TYPE_KEY = "type_key"
const val SETTINGS_KEY = "settings_key"
const val SEARCH_ID_KEY = "search_key"
const val SEARCH_TITLE_KEY = "search_title_key"
const val ACCOUNT_KEY = "account_key"
const val AUTH_REDIRECT_PAGE = "return"
}