diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/MainActivity.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/MainActivity.kt index 441d848a..3e6e338b 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/MainActivity.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/MainActivity.kt @@ -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(null) } val navController = - rememberNavController(backStack, uiState.isLocationDisclosureShown) { - previousKey -> - previousRoute = previousKey as? Route - } + rememberNavController( + backStack, + uiState.isLocationDisclosureShown, + onChange = { previousKey -> previousRoute = previousKey as? Route }, + onExitApp = { finish() }, + ) val vpnActivity = rememberLauncherForActivityResult( diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/navigation/NavController.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/navigation/NavController.kt index 0dece988..ebf11824 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/navigation/NavController.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/navigation/NavController.kt @@ -7,6 +7,7 @@ class NavController( private val backStack: NavBackStack, 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) { diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/navigation/functions/rememberNavController.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/navigation/functions/rememberNavController.kt index 3cee1b0f..0d48df00 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/navigation/functions/rememberNavController.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/navigation/functions/rememberNavController.kt @@ -7,12 +7,13 @@ import androidx.navigation3.runtime.NavKey import com.zaneschepke.wireguardautotunnel.ui.navigation.NavController @Composable -fun rememberNavController( +fun rememberNavController( backStack: NavBackStack, 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) } }