diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 5f8997ff..75680efc 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -126,6 +126,8 @@ dependencies {
Lib.Androidx.list.forEach(::api)
Lib.Androidx.Compose.list.forEach(::api)
+ Lib.Androidx.Navigation.list.forEach(::api)
+
Lib.ThirdParty.list.forEach(::api)
Lib.Accompanist.list.forEach(::api)
Lib.Google.list.forEach(::api)
diff --git a/app/src/main/java/com/mutualmobile/praxis/di/NavigationModule.kt b/app/src/main/java/com/mutualmobile/praxis/di/NavigationModule.kt
index e0e88fc1..cf5b6214 100755
--- a/app/src/main/java/com/mutualmobile/praxis/di/NavigationModule.kt
+++ b/app/src/main/java/com/mutualmobile/praxis/di/NavigationModule.kt
@@ -1,7 +1,7 @@
package com.mutualmobile.praxis.di
-import com.mutualmobile.praxis.navigator.ComposeNavigator
-import com.mutualmobile.praxis.navigator.composenavigator.PraxisCloneComposeNavigator
+import com.mutualmobile.praxis.navigator.AbsComposeNavigator
+import com.mutualmobile.praxis.navigator.navigators.PraxisComposeNavigator
import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn
@@ -14,5 +14,5 @@ abstract class NavigationModule {
@Binds
@Singleton
- abstract fun provideComposeNavigator(praxisComposeNavigator: PraxisCloneComposeNavigator): ComposeNavigator
+ abstract fun provideComposeNavigator(praxisComposeNavigator: PraxisComposeNavigator): AbsComposeNavigator
}
diff --git a/app/src/main/java/com/mutualmobile/praxis/root/OnboardingActivity.kt b/app/src/main/java/com/mutualmobile/praxis/root/OnboardingActivity.kt
index 243107ab..babfc17b 100644
--- a/app/src/main/java/com/mutualmobile/praxis/root/OnboardingActivity.kt
+++ b/app/src/main/java/com/mutualmobile/praxis/root/OnboardingActivity.kt
@@ -10,7 +10,7 @@ import androidx.navigation.compose.NavHost
import androidx.navigation.compose.rememberNavController
import com.google.accompanist.insets.ProvideWindowInsets
import dagger.hilt.android.AndroidEntryPoint
-import com.mutualmobile.praxis.navigator.ComposeNavigator
+import com.mutualmobile.praxis.navigator.AbsComposeNavigator
import com.mutualmobile.praxis.navigator.PraxisRoute
import com.mutualmobile.praxis.uionboarding.nav.onboardingNavigation
import com.praxis.feat.authentication.nav.authNavGraph
@@ -20,7 +20,7 @@ import javax.inject.Inject
class OnboardingActivity : AppCompatActivity() {
@Inject
- lateinit var composeNavigator: ComposeNavigator
+ lateinit var absComposeNavigator: AbsComposeNavigator
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -31,7 +31,7 @@ class OnboardingActivity : AppCompatActivity() {
val navController = rememberNavController()
LaunchedEffect(Unit) {
- composeNavigator.handleNavigationCommands(navController)
+ absComposeNavigator.handleNavigationCommands(navController)
}
ProvideWindowInsets(windowInsetsAnimationsEnabled = true) {
@@ -40,7 +40,7 @@ class OnboardingActivity : AppCompatActivity() {
startDestination = PraxisRoute.OnBoarding.name,
) {
onboardingNavigation(
- composeNavigator = composeNavigator,
+ absComposeNavigator = absComposeNavigator,
)
authNavGraph()
}
diff --git a/app/src/main/res/layout/main.xml b/app/src/main/res/layout/main.xml
new file mode 100644
index 00000000..d16c2b28
--- /dev/null
+++ b/app/src/main/res/layout/main.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/view_random_photos.xml b/app/src/main/res/layout/view_random_photos.xml
deleted file mode 100644
index a6946780..00000000
--- a/app/src/main/res/layout/view_random_photos.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/buildSrc/src/main/kotlin/Dependencies.kt b/buildSrc/src/main/kotlin/Dependencies.kt
index 81a3a66c..48bade68 100644
--- a/buildSrc/src/main/kotlin/Dependencies.kt
+++ b/buildSrc/src/main/kotlin/Dependencies.kt
@@ -56,6 +56,22 @@ object Lib {
SPLASH_SCREEN_API
)
+ object Navigation {
+ private const val nav_version = "2.4.1"
+
+ // Kotlin
+ private const val NAV_FRAGMENT = "androidx.navigation:navigation-fragment-ktx:$nav_version"
+ private const val NAV_UI_KTX = "androidx.navigation:navigation-ui-ktx:$nav_version"
+
+ // Feature module Support
+ private const val NAV_DYNAMIC_MODULES =
+ "androidx.navigation:navigation-dynamic-features-fragment:$nav_version"
+ private const val COMPOSE_NAVIGATION = "androidx.navigation:navigation-compose:2.5.0-alpha01"
+
+ val list = listOf(NAV_FRAGMENT, NAV_UI_KTX, NAV_DYNAMIC_MODULES, COMPOSE_NAVIGATION)
+
+ }
+
object Compose {
private const val ACTIVITY_COMPOSE = "androidx.activity:activity-compose:${composeVersion}"
private const val CONSTRAINT_LAYOUT_COMPOSE =
@@ -66,7 +82,6 @@ object Lib {
private const val COMPOSE_MATERIAL = "androidx.compose.material:material:${composeVersion}"
private const val COMPOSE_TOOLING = "androidx.compose.ui:ui-tooling-preview:${composeVersion}"
private const val COMPOSE_DEBUG_TOOLING = "androidx.compose.ui:ui-tooling:${composeVersion}"
- private const val COMPOSE_NAVIGATION = "androidx.navigation:navigation-compose:2.5.0-alpha01"
val list = listOf(
CONSTRAINT_LAYOUT_COMPOSE,
@@ -76,7 +91,6 @@ object Lib {
COMPOSE_MATERIAL,
COMPOSE_TOOLING,
COMPOSE_DEBUG_TOOLING,
- COMPOSE_NAVIGATION,
)
}
}
diff --git a/common/build.gradle.kts b/common/build.gradle.kts
index e9bdb2fd..292e1051 100644
--- a/common/build.gradle.kts
+++ b/common/build.gradle.kts
@@ -35,6 +35,7 @@ dependencies {
Lib.Androidx.list.forEach(::implementation)
Lib.Androidx.Compose.list.forEach(::implementation)
+ Lib.Androidx.Navigation.list.forEach(::implementation)
Lib.ThirdParty.list.forEach(::implementation)
Lib.Accompanist.list.forEach(::implementation)
Lib.Google.list.forEach(::implementation)
diff --git a/commonui/build.gradle.kts b/commonui/build.gradle.kts
index 73940cf7..49952713 100644
--- a/commonui/build.gradle.kts
+++ b/commonui/build.gradle.kts
@@ -47,6 +47,7 @@ dependencies {
Lib.Androidx.list.forEach(::implementation)
Lib.Androidx.Compose.list.forEach(::implementation)
+ Lib.Androidx.Navigation.list.forEach(::implementation)
Lib.ThirdParty.list.forEach(::implementation)
Lib.Accompanist.list.forEach(::implementation)
Lib.Google.list.forEach(::implementation)
diff --git a/commonui/src/main/res/navigation/app_nav_graph.xml b/commonui/src/main/res/navigation/app_nav_graph.xml
new file mode 100644
index 00000000..9dbe92b2
--- /dev/null
+++ b/commonui/src/main/res/navigation/app_nav_graph.xml
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/navigator/build.gradle.kts b/navigator/build.gradle.kts
index fe83c7e6..fb9fd937 100644
--- a/navigator/build.gradle.kts
+++ b/navigator/build.gradle.kts
@@ -46,6 +46,7 @@ dependencies {
Lib.Androidx.list.forEach(::implementation)
Lib.Androidx.Compose.list.forEach(::implementation)
+ Lib.Androidx.Navigation.list.forEach(::implementation)
Lib.ThirdParty.list.forEach(::implementation)
Lib.Accompanist.list.forEach(::implementation)
Lib.Google.list.forEach(::implementation)
diff --git a/navigator/src/main/java/com/mutualmobile/praxis/navigator/NavigationCommand.kt b/navigator/src/main/java/com/mutualmobile/praxis/navigator/NavigationCommand.kt
index 2c0b51bb..05e8e700 100644
--- a/navigator/src/main/java/com/mutualmobile/praxis/navigator/NavigationCommand.kt
+++ b/navigator/src/main/java/com/mutualmobile/praxis/navigator/NavigationCommand.kt
@@ -17,4 +17,16 @@ sealed class ComposeNavigationCommand : NavigationCommand() {
) : ComposeNavigationCommand()
data class PopUpToRoute(val route: String, val inclusive: Boolean) : ComposeNavigationCommand()
-}
\ No newline at end of file
+}
+
+sealed class FragmentNavigationCommand : NavigationCommand() {
+ data class NavigateToFragmentDestination(val destination: Int, val options: NavOptions? = null) : FragmentNavigationCommand()
+ data class NavigateUpWithResult(
+ val key: String,
+ val result: T,
+ val destination: Int? = null
+ ) : FragmentNavigationCommand()
+
+ data class PopUpToDestination(val destination: Int, val inclusive: Boolean) : FragmentNavigationCommand()
+
+}
diff --git a/navigator/src/main/java/com/mutualmobile/praxis/navigator/Navigator.kt b/navigator/src/main/java/com/mutualmobile/praxis/navigator/Navigator.kt
index 4c4d7fbe..bd14d081 100644
--- a/navigator/src/main/java/com/mutualmobile/praxis/navigator/Navigator.kt
+++ b/navigator/src/main/java/com/mutualmobile/praxis/navigator/Navigator.kt
@@ -21,7 +21,7 @@ abstract class Navigator {
}
-abstract class ComposeNavigator : Navigator() {
+abstract class AbsComposeNavigator : Navigator() {
abstract fun navigate(route: String, optionsBuilder: (NavOptionsBuilder.() -> Unit)? = null)
abstract fun observeResult(key: String, route: String? = null): Flow
abstract fun navigateBackWithResult(key: String, result: T, route: String?)
@@ -31,8 +31,8 @@ abstract class ComposeNavigator : Navigator() {
suspend fun handleNavigationCommands(navController: NavController) {
navigationCommands
- .onSubscription { this@ComposeNavigator.navControllerFlow.value = navController }
- .onCompletion { this@ComposeNavigator.navControllerFlow.value = null }
+ .onSubscription { this@AbsComposeNavigator.navControllerFlow.value = navController }
+ .onCompletion { this@AbsComposeNavigator.navControllerFlow.value = null }
.collect { navController.handleComposeNavigationCommand(it) }
}
@@ -72,8 +72,66 @@ abstract class ComposeNavigator : Navigator() {
}
}
+abstract class AbsFragmentNavigatior : Navigator() {
+ abstract fun navigateFragment(
+ destination: Int,
+ optionsBuilder: (NavOptionsBuilder.() -> Unit)? = null
+ )
+
+ abstract fun observeResult(key: String, destination: Int? = null): Flow
+ abstract fun navigateBackWithResult(key: String, result: T, destination: Int?)
+
+ abstract fun popUpTo(destination: Int, inclusive: Boolean)
+ abstract fun navigateAndClearBackStack(destination: Int)
+
+ suspend fun handleNavigationCommands(navController: NavController) {
+ navigationCommands
+ .onSubscription { this@AbsFragmentNavigatior.navControllerFlow.value = navController }
+ .onCompletion { this@AbsFragmentNavigatior.navControllerFlow.value = null }
+ .collect { navController.handleFragmentNavigationCommand(it) }
+ }
+
+ private fun NavController.handleFragmentNavigationCommand(navigationCommand: NavigationCommand) {
+ when (navigationCommand) {
+ NavigationCommand.NavigateUp -> navigateUp()
+ is FragmentNavigationCommand.NavigateUpWithResult<*> -> {
+ navUpWithResult(navigationCommand)
+ }
+ is FragmentNavigationCommand.NavigateToFragmentDestination -> navigate(
+ navigationCommand.destination,
+ null,
+ navigationCommand.options
+ )
+ is FragmentNavigationCommand.PopUpToDestination -> {
+ popBackStack(
+ navigationCommand.destination,
+ navigationCommand.inclusive
+ )
+ }
+ else -> {
+ throw RuntimeException("can't handle this with FragmentNavGraphNavigator")
+ }
+ }
+ }
+
+ private fun NavController.navUpWithResult(navigationCommand: FragmentNavigationCommand.NavigateUpWithResult<*>) {
+ val backStackEntry =
+ navigationCommand.destination?.let { getBackStackEntry(it) }
+ ?: previousBackStackEntry
+ backStackEntry?.savedStateHandle?.set(
+ navigationCommand.key,
+ navigationCommand.result
+ )
+
+ navigationCommand.destination?.let {
+ popBackStack(it, false)
+ } ?: run {
+ navigateUp()
+ }
+ }
+}
+
-@OptIn(DelicateCoroutinesApi::class)
fun LiveData.asFlow(): Flow = flow {
val channel = Channel(Channel.CONFLATED)
val observer = Observer {
diff --git a/navigator/src/main/java/com/mutualmobile/praxis/navigator/composenavigator/ComposeNavigator.kt b/navigator/src/main/java/com/mutualmobile/praxis/navigator/navigators/ComposeNavigator.kt
similarity index 90%
rename from navigator/src/main/java/com/mutualmobile/praxis/navigator/composenavigator/ComposeNavigator.kt
rename to navigator/src/main/java/com/mutualmobile/praxis/navigator/navigators/ComposeNavigator.kt
index 4fcebd70..0681b31a 100644
--- a/navigator/src/main/java/com/mutualmobile/praxis/navigator/composenavigator/ComposeNavigator.kt
+++ b/navigator/src/main/java/com/mutualmobile/praxis/navigator/navigators/ComposeNavigator.kt
@@ -1,15 +1,15 @@
-package com.mutualmobile.praxis.navigator.composenavigator
+package com.mutualmobile.praxis.navigator.navigators
import androidx.navigation.NavOptionsBuilder
import androidx.navigation.navOptions
import com.mutualmobile.praxis.navigator.ComposeNavigationCommand
-import com.mutualmobile.praxis.navigator.ComposeNavigator
+import com.mutualmobile.praxis.navigator.AbsComposeNavigator
import com.mutualmobile.praxis.navigator.asFlow
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.*
import javax.inject.Inject
-class PraxisCloneComposeNavigator @Inject constructor(): ComposeNavigator() {
+class PraxisComposeNavigator @Inject constructor(): AbsComposeNavigator() {
override fun navigate(route: String, optionsBuilder: (NavOptionsBuilder.() -> Unit)?) {
val options = optionsBuilder?.let { navOptions(it) }
diff --git a/navigator/src/main/java/com/mutualmobile/praxis/navigator/navigators/PraxisFragmentNavigator.kt b/navigator/src/main/java/com/mutualmobile/praxis/navigator/navigators/PraxisFragmentNavigator.kt
new file mode 100644
index 00000000..98f43d84
--- /dev/null
+++ b/navigator/src/main/java/com/mutualmobile/praxis/navigator/navigators/PraxisFragmentNavigator.kt
@@ -0,0 +1,65 @@
+package com.mutualmobile.praxis.navigator.navigators
+
+import androidx.navigation.NavOptionsBuilder
+import androidx.navigation.navOptions
+import com.mutualmobile.praxis.navigator.AbsFragmentNavigatior
+import com.mutualmobile.praxis.navigator.FragmentNavigationCommand
+import com.mutualmobile.praxis.navigator.asFlow
+import kotlinx.coroutines.flow.*
+import javax.inject.Inject
+
+class PraxisFragmentNavigator @Inject constructor() : AbsFragmentNavigatior() {
+
+ override fun navigateFragment(destination: Int, optionsBuilder: (NavOptionsBuilder.() -> Unit)?) {
+ val options = optionsBuilder?.let { navOptions(it) }
+ navigationCommands.tryEmit(
+ FragmentNavigationCommand.NavigateToFragmentDestination(
+ destination,
+ options
+ )
+ )
+ }
+
+ override fun navigateAndClearBackStack(destination: Int) {
+ navigationCommands.tryEmit(
+ FragmentNavigationCommand.NavigateToFragmentDestination(
+ destination,
+ navOptions {
+ popUpTo(0)
+ })
+ )
+ }
+
+ override fun popUpTo(destination: Int, inclusive: Boolean) {
+ navigationCommands.tryEmit(FragmentNavigationCommand.PopUpToDestination(destination, inclusive))
+ }
+
+ override fun navigateBackWithResult(key: String, result: T, destination: Int?) {
+ navigationCommands.tryEmit(
+ FragmentNavigationCommand.NavigateUpWithResult(
+ key = key,
+ result = result,
+ destination = destination
+ )
+ )
+ }
+
+ override fun observeResult(key: String, destination: Int?): Flow {
+ return navControllerFlow
+ .filterNotNull()
+ .flatMapLatest { navController ->
+ val backStackEntry = destination?.let { navController.getBackStackEntry(it) }
+ ?: navController.currentBackStackEntry
+
+ backStackEntry?.savedStateHandle?.let { savedStateHandle ->
+ savedStateHandle.getLiveData(key)
+ .asFlow()
+ .filter { it != null }
+ .onEach {
+ // Nullify the result to avoid resubmitting it
+ savedStateHandle.set(key, null)
+ }
+ } ?: emptyFlow()
+ }
+ }
+}
\ No newline at end of file
diff --git a/ui-authentication/build.gradle.kts b/ui-authentication/build.gradle.kts
index f976ad7b..4e21435a 100644
--- a/ui-authentication/build.gradle.kts
+++ b/ui-authentication/build.gradle.kts
@@ -66,6 +66,7 @@ dependencies {
Lib.Androidx.list.forEach(::implementation)
Lib.Androidx.Compose.list.forEach(::implementation)
+ Lib.Androidx.Navigation.list.forEach(::implementation)
Lib.ThirdParty.list.forEach(::implementation)
Lib.Accompanist.list.forEach(::implementation)
Lib.Google.list.forEach(::implementation)
diff --git a/ui-authentication/src/main/java/com/praxis/feat/authentication/vm/AuthVM.kt b/ui-authentication/src/main/java/com/praxis/feat/authentication/vm/AuthVM.kt
index ecb1eaf1..08a59387 100644
--- a/ui-authentication/src/main/java/com/praxis/feat/authentication/vm/AuthVM.kt
+++ b/ui-authentication/src/main/java/com/praxis/feat/authentication/vm/AuthVM.kt
@@ -4,7 +4,7 @@ import android.net.Uri
import androidx.lifecycle.*
import com.mutualmobile.praxis.domain.model.StreamingFile
import com.mutualmobile.praxis.domain.usecases.FetchRandomPhotoUseCase
-import com.mutualmobile.praxis.navigator.ComposeNavigator
+import com.mutualmobile.praxis.navigator.AbsComposeNavigator
import com.mutualmobile.praxis.navigator.NavigationKeys
import com.mutualmobile.praxis.navigator.PraxisScreen
import com.praxis.feat.authentication.ui.exceptions.FormValidationFailed
@@ -19,7 +19,7 @@ import javax.inject.Inject
@HiltViewModel
class AuthVM @Inject constructor(
private val savedStateHandle: SavedStateHandle,
- private val composeNavigator: ComposeNavigator,
+ private val absComposeNavigator: AbsComposeNavigator,
private val fetchPhotoUseCase: FetchRandomPhotoUseCase
) : ViewModel() {
@@ -66,7 +66,7 @@ class AuthVM @Inject constructor(
}
private fun observePasswordReset() {
- composeNavigator.observeResult(NavigationKeys.ForgotPassword).onStart {
+ absComposeNavigator.observeResult(NavigationKeys.ForgotPassword).onStart {
val message = savedStateHandle.get(NavigationKeys.ForgotPassword)
message?.let {
emit(it)
@@ -88,7 +88,7 @@ class AuthVM @Inject constructor(
}
fun navigateForgotPassword() {
- composeNavigator.navigate(PraxisScreen.ForgotPassword.route)
+ absComposeNavigator.navigate(PraxisScreen.ForgotPassword.route)
}
fun logout() {
diff --git a/ui-authentication/src/main/java/com/praxis/feat/authentication/vm/ForgotPasswordVM.kt b/ui-authentication/src/main/java/com/praxis/feat/authentication/vm/ForgotPasswordVM.kt
index 1b9cb21c..01d6fbe2 100644
--- a/ui-authentication/src/main/java/com/praxis/feat/authentication/vm/ForgotPasswordVM.kt
+++ b/ui-authentication/src/main/java/com/praxis/feat/authentication/vm/ForgotPasswordVM.kt
@@ -2,18 +2,18 @@ package com.praxis.feat.authentication.vm
import androidx.compose.runtime.mutableStateOf
import androidx.lifecycle.ViewModel
-import com.mutualmobile.praxis.navigator.ComposeNavigator
+import com.mutualmobile.praxis.navigator.AbsComposeNavigator
import com.mutualmobile.praxis.navigator.NavigationKeys
import com.mutualmobile.praxis.navigator.PraxisScreen
import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject
@HiltViewModel
-class ForgotPasswordVM @Inject constructor(private val navigator: ComposeNavigator) : ViewModel() {
+class ForgotPasswordVM @Inject constructor(private val navigatorAbs: AbsComposeNavigator) : ViewModel() {
var email = mutableStateOf("")
fun navigateBack() {
- navigator.navigateBackWithResult(
+ navigatorAbs.navigateBackWithResult(
NavigationKeys.ForgotPassword, "Reset Password Done!",
PraxisScreen.Auth.route
)
diff --git a/ui-authentication/src/test/java/com/praxis/feat/authentication/vm/AuthVMTest.kt b/ui-authentication/src/test/java/com/praxis/feat/authentication/vm/AuthVMTest.kt
index cedb7586..6aa9fcfa 100644
--- a/ui-authentication/src/test/java/com/praxis/feat/authentication/vm/AuthVMTest.kt
+++ b/ui-authentication/src/test/java/com/praxis/feat/authentication/vm/AuthVMTest.kt
@@ -2,7 +2,7 @@ package com.praxis.feat.authentication.vm
import androidx.lifecycle.SavedStateHandle
import app.cash.turbine.test
-import com.mutualmobile.praxis.navigator.ComposeNavigator
+import com.mutualmobile.praxis.navigator.AbsComposeNavigator
import com.praxis.feat.authentication.ui.model.LoginForm
import io.mockk.MockKAnnotations
import io.mockk.coEvery
@@ -18,7 +18,7 @@ import org.junit.Test
class AuthVMTest {
@MockK
- lateinit var navigator: ComposeNavigator
+ lateinit var navigatorAbs: AbsComposeNavigator
@MockK
private lateinit var savedStateHandle: SavedStateHandle
@@ -41,14 +41,14 @@ class AuthVMTest {
runTest {
launch {
coEvery {
- navigator.observeResult(any())
+ navigatorAbs.observeResult(any())
} returns emptyFlow()
coEvery {
savedStateHandle.get(any())
} returns ""
- authVM = AuthVM(savedStateHandle, navigator)
+ authVM = AuthVM(savedStateHandle, navigatorAbs)
authVM.formUiState.test {
assert(awaitItem() is AuthVM.UiState.Empty)
@@ -67,14 +67,14 @@ class AuthVMTest {
runTest {
launch {
coEvery {
- navigator.observeResult(any())
+ navigatorAbs.observeResult(any())
} returns emptyFlow()
coEvery {
savedStateHandle.get(any())
} returns ""
- authVM = AuthVM(savedStateHandle, navigator)
+ authVM = AuthVM(savedStateHandle, navigatorAbs)
authVM.credentials.value = LoginForm("anmol@gmail.com", "sdkfkjkjfdsjkfds")
authVM.formUiState.test {
diff --git a/ui-onboarding/build.gradle.kts b/ui-onboarding/build.gradle.kts
index ced77d9d..a201c546 100644
--- a/ui-onboarding/build.gradle.kts
+++ b/ui-onboarding/build.gradle.kts
@@ -67,6 +67,7 @@ dependencies {
Lib.Androidx.list.forEach(::implementation)
Lib.Androidx.Compose.list.forEach(::implementation)
+ Lib.Androidx.Navigation.list.forEach(::implementation)
Lib.ThirdParty.list.forEach(::implementation)
Lib.Accompanist.list.forEach(::implementation)
Lib.Google.list.forEach(::implementation)
diff --git a/ui-onboarding/src/main/java/com/mutualmobile/praxis/uionboarding/compose/CommonInputUI.kt b/ui-onboarding/src/main/java/com/mutualmobile/praxis/uionboarding/compose/CommonInputUI.kt
index 65592eb2..4f58e355 100644
--- a/ui-onboarding/src/main/java/com/mutualmobile/praxis/uionboarding/compose/CommonInputUI.kt
+++ b/ui-onboarding/src/main/java/com/mutualmobile/praxis/uionboarding/compose/CommonInputUI.kt
@@ -16,13 +16,12 @@ import com.mutualmobile.praxis.commonui.theme.PraxisSurface
import com.mutualmobile.praxis.commonui.theme.PraxisTheme
import com.mutualmobile.praxis.commonui.theme.PraxisColorProvider
import com.mutualmobile.praxis.commonui.theme.PraxisTypography
-import com.mutualmobile.praxis.navigator.ComposeNavigator
+import com.mutualmobile.praxis.navigator.AbsComposeNavigator
import com.mutualmobile.praxis.navigator.PraxisRoute
-import com.mutualmobile.praxis.navigator.PraxisScreen
@Composable
fun CommonInputUI(
- composeNavigator: ComposeNavigator,
+ absComposeNavigator: AbsComposeNavigator,
TopView: @Composable (modifier: Modifier) -> Unit,
subtitleText: String
) {
@@ -68,7 +67,7 @@ fun CommonInputUI(
bottom.linkTo(parent.bottom)
start.linkTo(parent.start)
end.linkTo(parent.end)
- }, composeNavigator)
+ }, absComposeNavigator)
}
}
}
@@ -78,10 +77,10 @@ fun CommonInputUI(
}
@Composable
-fun NextButton(modifier: Modifier = Modifier, composeNavigator: ComposeNavigator) {
+fun NextButton(modifier: Modifier = Modifier, absComposeNavigator: AbsComposeNavigator) {
Button(
onClick = {
- composeNavigator.navigate(PraxisRoute.Auth.name) {
+ absComposeNavigator.navigate(PraxisRoute.Auth.name) {
this.popUpTo(PraxisRoute.OnBoarding.name) {
this.inclusive = true
}
diff --git a/ui-onboarding/src/main/java/com/mutualmobile/praxis/uionboarding/compose/GettingStarted.kt b/ui-onboarding/src/main/java/com/mutualmobile/praxis/uionboarding/compose/GettingStarted.kt
index 270d36b0..8c7bd977 100644
--- a/ui-onboarding/src/main/java/com/mutualmobile/praxis/uionboarding/compose/GettingStarted.kt
+++ b/ui-onboarding/src/main/java/com/mutualmobile/praxis/uionboarding/compose/GettingStarted.kt
@@ -20,12 +20,12 @@ import androidx.compose.ui.unit.dp
import com.google.accompanist.insets.statusBarsPadding
import com.google.accompanist.systemuicontroller.rememberSystemUiController
import com.mutualmobile.praxis.commonui.theme.*
-import com.mutualmobile.praxis.navigator.ComposeNavigator
+import com.mutualmobile.praxis.navigator.AbsComposeNavigator
import com.mutualmobile.praxis.navigator.PraxisScreen
import com.mutualmobile.praxis.uionboarding.R
@Composable
-fun GettingStartedUI(composeNavigator: ComposeNavigator) {
+fun GettingStartedUI(absComposeNavigator: AbsComposeNavigator) {
PraxisTheme {
val scaffoldState = rememberScaffoldState()
val sysUiController = rememberSystemUiController()
@@ -58,7 +58,7 @@ fun GettingStartedUI(composeNavigator: ComposeNavigator) {
IntroText(modifier = Modifier.padding(top = 12.dp))
CenterImage()
Spacer(Modifier.padding(8.dp))
- GetStartedButton(composeNavigator)
+ GetStartedButton(absComposeNavigator)
}
}
@@ -101,7 +101,7 @@ private fun ImageEnterTransition() = expandIn(
@OptIn(ExperimentalAnimationApi::class)
@Composable
-private fun GetStartedButton(composeNavigator: ComposeNavigator) {
+private fun GetStartedButton(absComposeNavigator: AbsComposeNavigator) {
var expanded by remember { mutableStateOf(false) }
LaunchedEffect(Unit) {
@@ -115,7 +115,7 @@ private fun GetStartedButton(composeNavigator: ComposeNavigator) {
) {
Button(
onClick = {
- composeNavigator.navigate(PraxisScreen.SkipTypingScreen.name)
+ absComposeNavigator.navigate(PraxisScreen.SkipTypingScreen.name)
},
Modifier
.fillMaxWidth()
diff --git a/ui-onboarding/src/main/java/com/mutualmobile/praxis/uionboarding/compose/ScreenInputUI.kt b/ui-onboarding/src/main/java/com/mutualmobile/praxis/uionboarding/compose/ScreenInputUI.kt
index 11751dd1..0514e148 100644
--- a/ui-onboarding/src/main/java/com/mutualmobile/praxis/uionboarding/compose/ScreenInputUI.kt
+++ b/ui-onboarding/src/main/java/com/mutualmobile/praxis/uionboarding/compose/ScreenInputUI.kt
@@ -3,14 +3,14 @@ package com.mutualmobile.praxis.uionboarding.compose
import androidx.compose.runtime.*
import androidx.compose.ui.res.stringResource
import com.mutualmobile.praxis.commonui.theme.PraxisTheme
-import com.mutualmobile.praxis.navigator.ComposeNavigator
+import com.mutualmobile.praxis.navigator.AbsComposeNavigator
import com.mutualmobile.praxis.uionboarding.R
@Composable
-fun EmailAddressInputUI(composeNavigator: ComposeNavigator) {
+fun EmailAddressInputUI(absComposeNavigator: AbsComposeNavigator) {
PraxisTheme() {
CommonInputUI(
- composeNavigator,
+ absComposeNavigator,
{ modifier ->
EmailInputView(modifier)
},
@@ -20,10 +20,10 @@ fun EmailAddressInputUI(composeNavigator: ComposeNavigator) {
}
@Composable
-fun WorkspaceInputUI(composeNavigator: ComposeNavigator) {
+fun WorkspaceInputUI(absComposeNavigator: AbsComposeNavigator) {
PraxisTheme() {
CommonInputUI(
- composeNavigator,
+ absComposeNavigator,
{
WorkspaceInputView(it)
},
diff --git a/ui-onboarding/src/main/java/com/mutualmobile/praxis/uionboarding/compose/SkipTypingScreen.kt b/ui-onboarding/src/main/java/com/mutualmobile/praxis/uionboarding/compose/SkipTypingScreen.kt
index 15e9e023..213fb5dd 100644
--- a/ui-onboarding/src/main/java/com/mutualmobile/praxis/uionboarding/compose/SkipTypingScreen.kt
+++ b/ui-onboarding/src/main/java/com/mutualmobile/praxis/uionboarding/compose/SkipTypingScreen.kt
@@ -22,12 +22,12 @@ import com.google.accompanist.insets.statusBarsPadding
import com.google.accompanist.systemuicontroller.rememberSystemUiController
import com.mutualmobile.praxis.commonui.material.PraxisSurfaceAppBar
import com.mutualmobile.praxis.commonui.theme.*
-import com.mutualmobile.praxis.navigator.ComposeNavigator
+import com.mutualmobile.praxis.navigator.AbsComposeNavigator
import com.mutualmobile.praxis.navigator.PraxisScreen
import com.mutualmobile.praxis.uionboarding.R
@Composable
-fun SkipTypingUI(composeNavigator: ComposeNavigator) {
+fun SkipTypingUI(absComposeNavigator: AbsComposeNavigator) {
PraxisTheme() {
val scaffoldState = rememberScaffoldState()
val sysUiController = rememberSystemUiController()
@@ -46,7 +46,7 @@ fun SkipTypingUI(composeNavigator: ComposeNavigator) {
},
navigationIcon = {
IconButton(onClick = {
- composeNavigator.navigateUp()
+ absComposeNavigator.navigateUp()
}) {
Icon(
imageVector = Icons.Filled.Clear,
@@ -84,9 +84,9 @@ fun SkipTypingUI(composeNavigator: ComposeNavigator) {
TitleSubtitleText()
Spacer(Modifier.padding(8.dp))
Column {
- EmailMeMagicLink(composeNavigator)
+ EmailMeMagicLink(absComposeNavigator)
Box(modifier = Modifier.height(12.dp))
- IWillSignInManually(composeNavigator)
+ IWillSignInManually(absComposeNavigator)
}
}
@@ -101,10 +101,10 @@ fun SkipTypingUI(composeNavigator: ComposeNavigator) {
}
@Composable
-fun EmailMeMagicLink(composeNavigator: ComposeNavigator) {
+fun EmailMeMagicLink(absComposeNavigator: AbsComposeNavigator) {
OutlinedButton(
onClick = {
- composeNavigator.navigate(PraxisScreen.EmailAddressInputUI.name)
+ absComposeNavigator.navigate(PraxisScreen.EmailAddressInputUI.name)
},
border = BorderStroke(1.dp, color = Color.White),
colors = ButtonDefaults.buttonColors(backgroundColor = Color.Transparent),
@@ -120,10 +120,10 @@ fun EmailMeMagicLink(composeNavigator: ComposeNavigator) {
}
@Composable
-private fun IWillSignInManually(composeNavigator: ComposeNavigator) {
+private fun IWillSignInManually(absComposeNavigator: AbsComposeNavigator) {
Button(
onClick = {
- composeNavigator.navigate(PraxisScreen.WorkspaceInputUI.name)
+ absComposeNavigator.navigate(PraxisScreen.WorkspaceInputUI.name)
},
Modifier
.fillMaxWidth()
diff --git a/ui-onboarding/src/main/java/com/mutualmobile/praxis/uionboarding/nav/OnboardingNavigation.kt b/ui-onboarding/src/main/java/com/mutualmobile/praxis/uionboarding/nav/OnboardingNavigation.kt
index fd6f075e..8ac0ce43 100644
--- a/ui-onboarding/src/main/java/com/mutualmobile/praxis/uionboarding/nav/OnboardingNavigation.kt
+++ b/ui-onboarding/src/main/java/com/mutualmobile/praxis/uionboarding/nav/OnboardingNavigation.kt
@@ -4,7 +4,7 @@ package com.mutualmobile.praxis.uionboarding.nav
import androidx.navigation.NavGraphBuilder
import androidx.navigation.compose.composable
import androidx.navigation.navigation
-import com.mutualmobile.praxis.navigator.ComposeNavigator
+import com.mutualmobile.praxis.navigator.AbsComposeNavigator
import com.mutualmobile.praxis.navigator.PraxisRoute
import com.mutualmobile.praxis.navigator.PraxisScreen
import com.mutualmobile.praxis.uionboarding.compose.EmailAddressInputUI
@@ -13,23 +13,23 @@ import com.mutualmobile.praxis.uionboarding.compose.SkipTypingUI
import com.mutualmobile.praxis.uionboarding.compose.WorkspaceInputUI
fun NavGraphBuilder.onboardingNavigation(
- composeNavigator: ComposeNavigator,
+ absComposeNavigator: AbsComposeNavigator,
) {
navigation(
startDestination = PraxisScreen.GettingStarted.name,
route = PraxisRoute.OnBoarding.name
) {
composable(PraxisScreen.GettingStarted.name) {
- GettingStartedUI(composeNavigator)
+ GettingStartedUI(absComposeNavigator)
}
composable(PraxisScreen.SkipTypingScreen.name) {
- SkipTypingUI(composeNavigator)
+ SkipTypingUI(absComposeNavigator)
}
composable(PraxisScreen.WorkspaceInputUI.name) {
- WorkspaceInputUI(composeNavigator)
+ WorkspaceInputUI(absComposeNavigator)
}
composable(PraxisScreen.EmailAddressInputUI.name) {
- EmailAddressInputUI(composeNavigator)
+ EmailAddressInputUI(absComposeNavigator)
}
}