[#416] Robo test blank screens
* [#416] Robo test blank screens - Solve also debouncing issue on screens navigation - Implemented with navigateJustOnce ext function on NavHostController, which compares actual and final destinations - Add popBackStackJustOnce as an extension function to our navigation too
This commit is contained in:
parent
a88dc36804
commit
59b8ed5798
|
@ -18,6 +18,7 @@ import androidx.compose.ui.Modifier
|
|||
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.navigation.NavHostController
|
||||
import androidx.navigation.NavOptionsBuilder
|
||||
import androidx.navigation.compose.NavHost
|
||||
import androidx.navigation.compose.composable
|
||||
import androidx.navigation.compose.rememberNavController
|
||||
|
@ -152,73 +153,71 @@ class MainActivity : ComponentActivity() {
|
|||
NavHost(navController = navController, startDestination = NAV_HOME) {
|
||||
composable(NAV_HOME) {
|
||||
WrapHome(
|
||||
goScan = { navController.navigate(NAV_SCAN) },
|
||||
goProfile = { navController.navigate(NAV_PROFILE) },
|
||||
goSend = { navController.navigate(NAV_SEND) },
|
||||
goRequest = { navController.navigate(NAV_REQUEST) }
|
||||
goScan = { navController.navigateJustOnce(NAV_SCAN) },
|
||||
goProfile = { navController.navigateJustOnce(NAV_PROFILE) },
|
||||
goSend = { navController.navigateJustOnce(NAV_SEND) },
|
||||
goRequest = { navController.navigateJustOnce(NAV_REQUEST) }
|
||||
)
|
||||
|
||||
WrapCheckForUpdate()
|
||||
}
|
||||
composable(NAV_PROFILE) {
|
||||
WrapProfile(
|
||||
onBack = { navController.popBackStack() },
|
||||
onAddressDetails = { navController.navigate(NAV_WALLET_ADDRESS_DETAILS) },
|
||||
onBack = { navController.popBackStackJustOnce(NAV_PROFILE) },
|
||||
onAddressDetails = { navController.navigateJustOnce(NAV_WALLET_ADDRESS_DETAILS) },
|
||||
onAddressBook = { },
|
||||
onSettings = { navController.navigate(NAV_SETTINGS) },
|
||||
onSettings = { navController.navigateJustOnce(NAV_SETTINGS) },
|
||||
onCoinholderVote = { },
|
||||
onSupport = { navController.navigate(NAV_SUPPORT) },
|
||||
onAbout = { navController.navigate(NAV_ABOUT) }
|
||||
onSupport = { navController.navigateJustOnce(NAV_SUPPORT) },
|
||||
onAbout = { navController.navigateJustOnce(NAV_ABOUT) }
|
||||
)
|
||||
}
|
||||
composable(NAV_WALLET_ADDRESS_DETAILS) {
|
||||
WrapWalletAddresses(
|
||||
goBack = {
|
||||
navController.popBackStack()
|
||||
navController.popBackStackJustOnce(NAV_WALLET_ADDRESS_DETAILS)
|
||||
}
|
||||
)
|
||||
}
|
||||
composable(NAV_SETTINGS) {
|
||||
WrapSettings(
|
||||
goBack = {
|
||||
navController.popBackStack()
|
||||
navController.popBackStackJustOnce(NAV_SETTINGS)
|
||||
},
|
||||
goWalletBackup = {
|
||||
navController.navigate(NAV_SEED)
|
||||
navController.navigateJustOnce(NAV_SEED)
|
||||
}
|
||||
)
|
||||
}
|
||||
composable(NAV_SEED) {
|
||||
WrapSeed(
|
||||
goBack = {
|
||||
navController.popBackStack()
|
||||
navController.popBackStackJustOnce(NAV_SEED)
|
||||
}
|
||||
)
|
||||
}
|
||||
composable(NAV_REQUEST) {
|
||||
WrapRequest(goBack = { navController.popBackStack() })
|
||||
WrapRequest(goBack = { navController.popBackStackJustOnce(NAV_REQUEST) })
|
||||
}
|
||||
composable(NAV_SEND) {
|
||||
WrapSend(goBack = { navController.popBackStack() })
|
||||
WrapSend(goBack = { navController.popBackStackJustOnce(NAV_SEND) })
|
||||
}
|
||||
composable(NAV_SUPPORT) {
|
||||
// Pop back stack won't be right if we deep link into support
|
||||
WrapSupport(goBack = { navController.popBackStack() })
|
||||
WrapSupport(goBack = { navController.popBackStackJustOnce(NAV_SUPPORT) })
|
||||
}
|
||||
composable(NAV_ABOUT) {
|
||||
WrapAbout(goBack = { navController.popBackStack() })
|
||||
WrapAbout(goBack = { navController.popBackStackJustOnce(NAV_ABOUT) })
|
||||
}
|
||||
composable(NAV_SCAN) {
|
||||
WrapScanValidator(
|
||||
onScanValid = {
|
||||
// TODO [#449] https://github.com/zcash/secant-android-wallet/issues/449
|
||||
if (navController.currentDestination?.route == NAV_SCAN) {
|
||||
navController.navigate(NAV_SEND) {
|
||||
popUpTo(NAV_HOME) { inclusive = false }
|
||||
}
|
||||
navController.navigateJustOnce(NAV_SEND) {
|
||||
popUpTo(NAV_HOME) { inclusive = false }
|
||||
}
|
||||
},
|
||||
goBack = { navController.popBackStack() }
|
||||
goBack = { navController.popBackStackJustOnce(NAV_SCAN) }
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -392,3 +391,31 @@ private fun ZecRequest.newShareIntent(context: Context) = runBlocking {
|
|||
type = "text/plain"
|
||||
}
|
||||
}
|
||||
|
||||
private fun NavHostController.navigateJustOnce(
|
||||
route: String,
|
||||
navOptionsBuilder: (NavOptionsBuilder.() -> Unit)? = null
|
||||
) {
|
||||
if (currentDestination?.route == route) {
|
||||
return
|
||||
}
|
||||
|
||||
if (navOptionsBuilder != null) {
|
||||
navigate(route, navOptionsBuilder)
|
||||
} else {
|
||||
navigate(route)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Pops up the current screen from the back stack. Parameter currentRouteToBePopped is meant to be
|
||||
* set only to the current screen so we can easily debounce multiple screen popping from the back stack.
|
||||
*
|
||||
* @param currentRouteToBePopped current screen which should be popped up.
|
||||
*/
|
||||
private fun NavHostController.popBackStackJustOnce(currentRouteToBePopped: String) {
|
||||
if (currentDestination?.route != currentRouteToBePopped) {
|
||||
return
|
||||
}
|
||||
popBackStack()
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue