diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/screens/install/InstallModel.kt b/app/src/main/kotlin/com/aliucord/manager/ui/screens/install/InstallModel.kt index 43e539d..1a2c779 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/screens/install/InstallModel.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/screens/install/InstallModel.kt @@ -18,6 +18,7 @@ import com.aliucord.manager.installer.steps.base.Step import com.aliucord.manager.installer.steps.base.StepState import com.aliucord.manager.installer.steps.install.InstallStep import com.aliucord.manager.manager.PathManager +import com.aliucord.manager.manager.PreferencesManager import com.aliucord.manager.ui.screens.installopts.InstallOptions import com.aliucord.manager.ui.util.toUnsafeImmutable import com.aliucord.manager.util.* @@ -33,11 +34,14 @@ class InstallModel( private val application: Application, private val paths: PathManager, private val options: InstallOptions, + private val prefs: PreferencesManager, ) : StateScreenModel(InstallScreenState.Pending) { private var startTime: Date? = null private var installJob: Job? = null private var stepRunner: StepRunner? = null + val devMode get() = prefs.devMode + var installSteps by mutableStateOf>?>(null) private set diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/screens/install/InstallScreen.kt b/app/src/main/kotlin/com/aliucord/manager/ui/screens/install/InstallScreen.kt index e67807b..d7b5b01 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/screens/install/InstallScreen.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/screens/install/InstallScreen.kt @@ -66,7 +66,12 @@ class InstallScreen(private val data: InstallOptions) : Screen, Parcelable { LaunchedEffect(state) { if (state is InstallScreenState.CloseScreen) - navigator.back(currentActivity = null) + navigator.popUntilRoot() + } + + // Go home directly if install was successful + BackHandler(state is InstallScreenState.Success) { + navigator.popUntilRoot() } // Prevent screen from turning off while working @@ -81,7 +86,7 @@ class InstallScreen(private val data: InstallOptions) : Screen, Parcelable { // Only show exit warning if currently working val onTryExit: () -> Unit = remember { { - if (state == InstallScreenState.Working) { + if (state == InstallScreenState.Working && !model.devMode) { showAbortWarning = true } else { navigator.back(currentActivity = null) diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/screens/installopts/InstallOptionsScreen.kt b/app/src/main/kotlin/com/aliucord/manager/ui/screens/installopts/InstallOptionsScreen.kt index e569616..7ee20fe 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/screens/installopts/InstallOptionsScreen.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/screens/installopts/InstallOptionsScreen.kt @@ -28,6 +28,7 @@ import com.aliucord.manager.ui.screens.installopts.components.options.TextInstal import com.aliucord.manager.ui.util.* import com.aliucord.manager.util.isIgnoringBatteryOptimizations import com.aliucord.manager.util.requestNoBatteryOptimizations +import kotlinx.coroutines.delay class InstallOptionsScreen( private val supportedVersion: DiscordVersion = DiscordVersion.None, @@ -41,6 +42,10 @@ class InstallOptionsScreen( val model = getScreenModel() LaunchedEffect(Unit) { + // Ensure that when popping this screen off the stack that permission requests don't get triggered + // The coroutine context local to this screen gets cancelled and never continues after the delay() + delay(1000) + InstallNotifications.requestPermissions(context) if (!context.isIgnoringBatteryOptimizations()) @@ -132,7 +137,7 @@ class InstallOptionsScreen( FilledTonalButton( enabled = model.isConfigValid, - onClick = { navigator replace InstallScreen(model.generateConfig()) }, + onClick = { navigator.push(InstallScreen(model.generateConfig())) }, colors = ButtonDefaults.filledTonalButtonColors( contentColor = MaterialTheme.colorScheme.primary, ),