mirror of
https://github.com/owenlejeune/TVTime.git
synced 2025-11-09 13:22:44 -05:00
refactor auth navigation
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
@@ -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 } )
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 = {}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user