mirror of
https://github.com/wgtunnel/android.git
synced 2026-07-03 14:07:49 +02:00
fix: pop backstack crash in certain scenarios
This commit is contained in:
@@ -55,7 +55,6 @@ import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
|
||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.lifecycle.viewmodel.navigation3.rememberViewModelStoreNavEntryDecorator
|
||||
import androidx.navigation3.runtime.NavKey
|
||||
import androidx.navigation3.runtime.entryProvider
|
||||
import androidx.navigation3.runtime.rememberNavBackStack
|
||||
import androidx.navigation3.runtime.rememberSaveableStateHolderNavEntryDecorator
|
||||
@@ -185,10 +184,12 @@ class MainActivity : AppCompatActivity() {
|
||||
var previousRoute by remember { mutableStateOf<Route?>(null) }
|
||||
|
||||
val navController =
|
||||
rememberNavController<NavKey>(backStack, uiState.isLocationDisclosureShown) {
|
||||
previousKey ->
|
||||
previousRoute = previousKey as? Route
|
||||
}
|
||||
rememberNavController(
|
||||
backStack,
|
||||
uiState.isLocationDisclosureShown,
|
||||
onChange = { previousKey -> previousRoute = previousKey as? Route },
|
||||
onExitApp = { finish() },
|
||||
)
|
||||
|
||||
val vpnActivity =
|
||||
rememberLauncherForActivityResult(
|
||||
|
||||
+6
-4
@@ -7,6 +7,7 @@ class NavController(
|
||||
private val backStack: NavBackStack<NavKey>,
|
||||
private val isDisclosureShown: Boolean,
|
||||
private val onChange: (previous: NavKey?) -> Unit = {},
|
||||
private val onExitApp: () -> Unit = {},
|
||||
) {
|
||||
fun push(route: NavKey) {
|
||||
onChange(currentRoute)
|
||||
@@ -14,12 +15,13 @@ class NavController(
|
||||
}
|
||||
|
||||
fun pop(): Boolean {
|
||||
if (currentRoute != null) {
|
||||
onChange(currentRoute)
|
||||
backStack.removeLastOrNull()
|
||||
if (!canPop) {
|
||||
onExitApp()
|
||||
return true
|
||||
}
|
||||
return false
|
||||
onChange(currentRoute)
|
||||
backStack.removeLastOrNull()
|
||||
return true
|
||||
}
|
||||
|
||||
fun popUpTo(route: NavKey) {
|
||||
|
||||
+4
-3
@@ -7,12 +7,13 @@ import androidx.navigation3.runtime.NavKey
|
||||
import com.zaneschepke.wireguardautotunnel.ui.navigation.NavController
|
||||
|
||||
@Composable
|
||||
fun <T : NavKey> rememberNavController(
|
||||
fun rememberNavController(
|
||||
backStack: NavBackStack<NavKey>,
|
||||
isDisclosureShown: Boolean,
|
||||
onChange: (NavKey?) -> Unit = {},
|
||||
onExitApp: () -> Unit = {},
|
||||
): NavController {
|
||||
return remember(backStack, onChange, isDisclosureShown) {
|
||||
NavController(backStack, isDisclosureShown, onChange)
|
||||
return remember(backStack, isDisclosureShown, onChange, onExitApp) {
|
||||
NavController(backStack, isDisclosureShown, onChange, onExitApp)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user