From 8ba070b23bb27c212d529259b43d3b9a63f2e176 Mon Sep 17 00:00:00 2001 From: rushiiMachine <33725716+rushiiMachine@users.noreply.github.com> Date: Wed, 7 Feb 2024 11:41:05 -0800 Subject: [PATCH] fix: proper exit flow from install screen - Refresh install list when returning to home screen - Fix auto-exiting successful install screen --- .../com/aliucord/manager/ui/screens/home/HomeModel.kt | 6 ++++-- .../com/aliucord/manager/ui/screens/home/HomeScreen.kt | 10 +++++++++- .../manager/ui/screens/install/InstallModel.kt | 2 +- .../manager/ui/screens/install/InstallScreen.kt | 4 ++-- gradle/libs.versions.toml | 3 +++ 5 files changed, 19 insertions(+), 6 deletions(-) diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/screens/home/HomeModel.kt b/app/src/main/kotlin/com/aliucord/manager/ui/screens/home/HomeModel.kt index e524a13..d6997d4 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/screens/home/HomeModel.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/screens/home/HomeModel.kt @@ -36,7 +36,7 @@ class HomeModel( private set init { - fetchInstallations() + // fetchInstallations() is called from UI fetchSupportedVersion() } @@ -94,7 +94,9 @@ class HomeModel( return dangerousMobileDataStates.contains(telephony.dataState) } - private fun fetchInstallations() = screenModelScope.launchBlock { + fun fetchInstallations() = screenModelScope.launchBlock { + installations = InstallsState.Fetching + try { val packageManager = application.packageManager diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/screens/home/HomeScreen.kt b/app/src/main/kotlin/com/aliucord/manager/ui/screens/home/HomeScreen.kt index 36b4d04..7e4e84f 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/screens/home/HomeScreen.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/screens/home/HomeScreen.kt @@ -20,6 +20,7 @@ import androidx.compose.ui.text.SpanStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.withStyle import androidx.compose.ui.unit.dp +import androidx.lifecycle.compose.LifecycleResumeEffect import cafe.adriel.voyager.core.screen.Screen import cafe.adriel.voyager.koin.getScreenModel import cafe.adriel.voyager.navigator.LocalNavigator @@ -43,12 +44,19 @@ class HomeScreen : Screen { val navigator = LocalNavigator.currentOrThrow val model = getScreenModel() + // Refresh installations list when the screen changes or activity resumes + LifecycleResumeEffect { + model.fetchInstallations() + + onPauseOrDispose {} + } + var showNetworkWarningDialog by remember { mutableStateOf(false) } var showInstallerDialog by remember { mutableStateOf(false) } val onClickInstall: () -> Unit = remember { { - if ((model.installations as? InstallsState.Fetched)?.data?.isNotEmpty() == false) { + if ((model.installations as? InstallsState.Fetched)?.data?.isNotEmpty() == true) { model.showMultiInstallToast() } else if (model.isNetworkDangerous()) { showNetworkWarningDialog = true 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 951cff0..80252f8 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 @@ -84,7 +84,7 @@ class InstallModel( mutableState.value = InstallScreenState.Success // Wait 20s before returning to Home - delay(20_000) + delay(5000) mutableState.value = InstallScreenState.CloseScreen } 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 9cfcc3b..3822d16 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 @@ -38,8 +38,8 @@ class InstallScreen : Screen { val model = getScreenModel() val state = model.state.collectAsState() - LaunchedEffect(model.state) { - if (model.state.value is InstallScreenState.CloseScreen) + LaunchedEffect(state.value) { + if (state.value is InstallScreenState.CloseScreen) navigator.back(currentActivity = null) } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c113c3a..8870c82 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -4,6 +4,7 @@ agp = "8.2.1" androidx-activity = "1.8.2" androidx-core = "1.12.0" androidx-splashscreen = "1.0.1" +androidx-lifecycle = "2.7.0" apksig = "7.4.2" axml = "1.0.1" bouncycastle = "1.70" @@ -27,6 +28,7 @@ accompanist-systemUiController = { module = "com.google.accompanist:accompanist- # AndroidX androidx-activity = { module = "androidx.activity:activity-compose", version.ref = "androidx-activity" } +androidx-lifecycle = { module = "androidx.lifecycle:lifecycle-runtime-compose", version.ref = "androidx-lifecycle" } androidx-core = { module = "androidx.core:core-ktx", version.ref = "androidx-core" } androidx-splashscreen = { module = "androidx.core:core-splashscreen", version.ref = "androidx-splashscreen" } @@ -77,6 +79,7 @@ accompanist = [ androidx = [ "androidx-core", "androidx-activity", + "androidx-lifecycle", "androidx-splashscreen", ] compose = [