From 61b82f1ba7f86acb7b5603ebdae291f2fc8f0cb7 Mon Sep 17 00:00:00 2001 From: Alex Gabor Date: Sat, 2 Apr 2022 11:37:35 +0300 Subject: [PATCH] Refactor navigation event --- app/build.gradle | 2 +- .../test/showcase/ui/AuthComposeInstrumentedTest.kt | 4 +--- .../test/showcase/compose/screen/AppNavigation.kt | 9 ++++----- .../showcase/compose/screen/auth/AuthScreenState.kt | 13 +++++++------ gradlescripts/versions.gradle | 4 ++-- 5 files changed, 15 insertions(+), 17 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 4655d31..52d50d4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -135,7 +135,7 @@ dependencies { androidTestImplementation "androidx.test.espresso:espresso-contrib:$testing_espresso_version" androidTestImplementation "androidx.compose.ui:ui-test-junit4:$androidx_compose" testImplementation "androidx.compose.ui:ui-test-junit4:$androidx_compose" -// debugImplementation "androidx.compose.ui:ui-test-manifest:$androidx_compose" + debugImplementation "androidx.compose.ui:ui-test-manifest:$androidx_compose" androidTestImplementation project(':mockserver') androidTestImplementation "androidx.arch.core:core-testing:$testing_androidx_arch_core_version" androidTestRuntimeOnly "org.junit.vintage:junit-vintage-engine:$testing_junit5_version" diff --git a/app/src/androidTest/java/org/fnives/test/showcase/ui/AuthComposeInstrumentedTest.kt b/app/src/androidTest/java/org/fnives/test/showcase/ui/AuthComposeInstrumentedTest.kt index 1600cb4..2cedceb 100644 --- a/app/src/androidTest/java/org/fnives/test/showcase/ui/AuthComposeInstrumentedTest.kt +++ b/app/src/androidTest/java/org/fnives/test/showcase/ui/AuthComposeInstrumentedTest.kt @@ -1,10 +1,8 @@ package org.fnives.test.showcase.ui -import androidx.compose.ui.test.junit4.createAndroidComposeRule import androidx.compose.ui.test.junit4.createComposeRule import androidx.test.ext.junit.runners.AndroidJUnit4 import org.fnives.test.showcase.R -import org.fnives.test.showcase.compose.ComposeActivity import org.fnives.test.showcase.compose.screen.AppNavigation import org.fnives.test.showcase.core.integration.fake.FakeUserDataLocalStorage import org.fnives.test.showcase.core.login.IsUserLoggedInUseCase @@ -24,7 +22,7 @@ import org.koin.test.KoinTest class AuthComposeInstrumentedTest : KoinTest { @get:Rule - val composeTestRule = createAndroidComposeRule() + val composeTestRule = createComposeRule() private val mockServerScenarioSetupTestRule = MockServerScenarioSetupResetingTestRule(networkSynchronizationTestRule = ComposeNetworkSynchronizationTestRule(composeTestRule)) private val mockServerScenarioSetup get() = mockServerScenarioSetupTestRule.mockServerScenarioSetup diff --git a/app/src/main/java/org/fnives/test/showcase/compose/screen/AppNavigation.kt b/app/src/main/java/org/fnives/test/showcase/compose/screen/AppNavigation.kt index 7b11bef..2c1f7cb 100644 --- a/app/src/main/java/org/fnives/test/showcase/compose/screen/AppNavigation.kt +++ b/app/src/main/java/org/fnives/test/showcase/compose/screen/AppNavigation.kt @@ -34,11 +34,10 @@ fun AppNavigation(isUserLogeInUseCase: IsUserLoggedInUseCase = get()) { ) { composable("Splash") { SplashScreen() } composable("Auth") { - val authState = rememberAuthScreenState() - AuthScreen(Modifier.testTag(AppNavigationTag.AuthScreen), authState) - if (authState.navigateToHome?.consume() != null) { - navController.navigate("Home") - } + AuthScreen(modifier = Modifier.testTag(AppNavigationTag.AuthScreen), + authScreenState = rememberAuthScreenState( + onLoginSuccess = { navController.navigate("Home") } + )) } composable("Home") { HomeScreen( diff --git a/app/src/main/java/org/fnives/test/showcase/compose/screen/auth/AuthScreenState.kt b/app/src/main/java/org/fnives/test/showcase/compose/screen/auth/AuthScreenState.kt index 83ea9c6..92ce536 100644 --- a/app/src/main/java/org/fnives/test/showcase/compose/screen/auth/AuthScreenState.kt +++ b/app/src/main/java/org/fnives/test/showcase/compose/screen/auth/AuthScreenState.kt @@ -1,26 +1,29 @@ package org.fnives.test.showcase.compose.screen.auth import androidx.compose.runtime.* +import androidx.compose.ui.platform.AndroidUiDispatcher import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import org.fnives.test.showcase.core.login.LoginUseCase import org.fnives.test.showcase.model.auth.LoginCredentials import org.fnives.test.showcase.model.auth.LoginStatus import org.fnives.test.showcase.model.shared.Answer -import org.fnives.test.showcase.ui.shared.Event import org.koin.androidx.compose.get @Composable fun rememberAuthScreenState( - stateScope: CoroutineScope = rememberCoroutineScope(), + stateScope: CoroutineScope = rememberCoroutineScope { Dispatchers.Main }, loginUseCase: LoginUseCase = get(), + onLoginSuccess: () -> Unit = {}, ): AuthScreenState { - return remember { AuthScreenState(stateScope, loginUseCase) } + return remember { AuthScreenState(stateScope, loginUseCase, onLoginSuccess) } } class AuthScreenState( private val stateScope: CoroutineScope, private val loginUseCase: LoginUseCase, + private val onLoginSuccess: () -> Unit = {}, ) { var username by mutableStateOf("") @@ -31,8 +34,6 @@ class AuthScreenState( private set var error by mutableStateOf(null) private set - var navigateToHome by mutableStateOf?>(null) - private set fun onUsernameChanged(username: String) { this.username = username @@ -62,7 +63,7 @@ class AuthScreenState( private fun processLoginStatus(loginStatus: LoginStatus) { when (loginStatus) { - LoginStatus.SUCCESS -> navigateToHome = Event(Unit) + LoginStatus.SUCCESS -> onLoginSuccess() LoginStatus.INVALID_CREDENTIALS -> error = ErrorType.INVALID_CREDENTIALS LoginStatus.INVALID_USERNAME -> error = ErrorType.UNSUPPORTED_USERNAME LoginStatus.INVALID_PASSWORD -> error = ErrorType.UNSUPPORTED_PASSWORD diff --git a/gradlescripts/versions.gradle b/gradlescripts/versions.gradle index c22bee4..29b40ff 100644 --- a/gradlescripts/versions.gradle +++ b/gradlescripts/versions.gradle @@ -9,8 +9,8 @@ project.ext { activity_ktx_version = "1.4.0" androidx_navigation = "2.4.0" - androidx_compose = "1.1.0-rc03" - google_accompanist = "0.20.3" + androidx_compose = "1.1.0" + google_accompanist = "0.23.1" coroutines_version = "1.6.0" turbine_version = "0.7.0"