commit a5cd9a0f8f4ecf12aaf03a0266c2c49528448098
parent ba8b50ef406fa4dcc14aefedac2c604cd4dac507
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date:   Wed,  1 May 2024 12:28:36 +0200

fix(app/setup): auto skip

Diffstat:
Mapp/src/main/kotlin/me/rhunk/snapenhance/RemoteSideContext.kt | 2+-
Mapp/src/main/kotlin/me/rhunk/snapenhance/ui/setup/screens/SetupScreen.kt | 2+-
Mapp/src/main/kotlin/me/rhunk/snapenhance/ui/setup/screens/impl/MappingsScreen.kt | 56++++++++++++++++++++------------------------------------
Mapp/src/main/kotlin/me/rhunk/snapenhance/ui/setup/screens/impl/PermissionsScreen.kt | 35++++++++++++++++++++++++++---------
Mapp/src/main/kotlin/me/rhunk/snapenhance/ui/setup/screens/impl/SaveFolderScreen.kt | 18++++--------------
Mcommon/src/main/assets/lang/en_US.json | 6++----
6 files changed, 54 insertions(+), 65 deletions(-)

diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/RemoteSideContext.kt b/app/src/main/kotlin/me/rhunk/snapenhance/RemoteSideContext.kt @@ -198,7 +198,7 @@ class RemoteSideContext( } } - if (!sharedPreferences.getBoolean("debug_disable_mapper", false) && (mappings.isMappingsOutdated() || !mappings.isMappingsLoaded)) { + if (!sharedPreferences.getBoolean("debug_disable_mapper", false) && mappings.getSnapchatPackageInfo() != null && mappings.isMappingsOutdated()) { requirements = requirements or Requirements.MAPPINGS } diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/ui/setup/screens/SetupScreen.kt b/app/src/main/kotlin/me/rhunk/snapenhance/ui/setup/screens/SetupScreen.kt @@ -11,7 +11,7 @@ import me.rhunk.snapenhance.RemoteSideContext abstract class SetupScreen { lateinit var context: RemoteSideContext - lateinit var allowNext: (Boolean) -> Unit + lateinit var allowNext: (canGoNext: Boolean) -> Unit lateinit var goNext: () -> Unit lateinit var route: String diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/ui/setup/screens/impl/MappingsScreen.kt b/app/src/main/kotlin/me/rhunk/snapenhance/ui/setup/screens/impl/MappingsScreen.kt @@ -2,10 +2,8 @@ package me.rhunk.snapenhance.ui.setup.screens.impl import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size -import androidx.compose.material3.Button import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Text import androidx.compose.runtime.* import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp @@ -28,52 +26,38 @@ class MappingsScreen : SetupScreen() { }) { remember { AlertDialogs(context.translation) }.InfoDialog(title = infoText!!) { infoText = null + goNext() } } } - fun tryToGenerateMappings() { - //check for snapchat installation - val installationSummary = context.installationSummary - if (installationSummary.snapchatInfo == null) { - throw Exception(context.translation["setup.mappings.generate_failure_no_snapchat"]) - } - with(context.mappings) { - refresh() - } - } - - var hasMappings by remember { mutableStateOf(false) } - - DialogText(text = context.translation["setup.mappings.dialog"]) - if (hasMappings) return - Button(onClick = { - if (isGenerating) return@Button - isGenerating = true + LaunchedEffect(Unit) { coroutineScope.launch(Dispatchers.IO) { + if (isGenerating) return@launch + isGenerating = true runCatching { - tryToGenerateMappings() - allowNext(true) - infoText = context.translation["setup.mappings.generate_success"] - hasMappings = true + if (context.installationSummary.snapchatInfo == null) { + throw Exception(context.translation["setup.mappings.generate_failure_no_snapchat"]) + } + context.mappings.refresh() + goNext() }.onFailure { isGenerating = false infoText = context.translation["setup.mappings.generate_failure"] + "\n\n" + it.message context.log.error("Failed to generate mappings", it) } } - }) { - if (isGenerating) { - CircularProgressIndicator( - modifier = Modifier - .padding() - .size(30.dp), - strokeWidth = 3.dp, - color = MaterialTheme.colorScheme.onPrimary - ) - } else { - Text(text = context.translation["setup.mappings.generate_button"]) - } + } + + if (isGenerating) { + DialogText(text = context.translation["setup.mappings.dialog"]) + CircularProgressIndicator( + modifier = Modifier + .padding() + .size(50.dp), + strokeWidth = 3.dp, + color = MaterialTheme.colorScheme.onPrimary + ) } } } \ No newline at end of file diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/ui/setup/screens/impl/PermissionsScreen.kt b/app/src/main/kotlin/me/rhunk/snapenhance/ui/setup/screens/impl/PermissionsScreen.kt @@ -17,17 +17,16 @@ import androidx.compose.material3.Button import androidx.compose.material3.Icon import androidx.compose.material3.OutlinedCard import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.mutableStateMapOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp +import androidx.lifecycle.Lifecycle +import kotlinx.coroutines.delay import kotlinx.coroutines.launch import me.rhunk.snapenhance.ui.setup.screens.SetupScreen import me.rhunk.snapenhance.ui.util.ActivityLauncherHelper +import me.rhunk.snapenhance.ui.util.OnLifecycleEvent data class PermissionData( val translationKey: String, @@ -125,12 +124,26 @@ class PermissionsScreen : SetupScreen() { ) } - allowNext(permissions.all { perm -> grantedPermissions[perm.translationKey] == true }) - - LaunchedEffect(Unit) { + fun updateState() { permissions.forEach { perm -> grantedPermissions[perm.translationKey] = perm.isPermissionGranted() } + if (permissions.all { perm -> grantedPermissions[perm.translationKey] == true }) { + goNext() + } + } + + OnLifecycleEvent { _, event -> + if (event != Lifecycle.Event.ON_RESUME) return@OnLifecycleEvent + updateState() + coroutineScope.launch { + delay(1000) + updateState() + } + } + + LaunchedEffect(Unit) { + updateState() } DialogText(text = context.translation["setup.permissions.dialog"]) @@ -156,7 +169,11 @@ class PermissionsScreen : SetupScreen() { GrantedIcon() } else { RequestButton { - perm.requestPermission(perm) + if (perm.isPermissionGranted()) { + grantedPermissions[perm.translationKey] = true + } else { + perm.requestPermission(perm) + } } } } diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/ui/setup/screens/impl/SaveFolderScreen.kt b/app/src/main/kotlin/me/rhunk/snapenhance/ui/setup/screens/impl/SaveFolderScreen.kt @@ -9,26 +9,13 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import me.rhunk.snapenhance.ui.setup.screens.SetupScreen import me.rhunk.snapenhance.ui.util.ActivityLauncherHelper -import me.rhunk.snapenhance.ui.util.ObservableMutableState import me.rhunk.snapenhance.ui.util.chooseFolder class SaveFolderScreen : SetupScreen() { - private lateinit var saveFolder: ObservableMutableState<String> - private lateinit var activityLauncherHelper: ActivityLauncherHelper override fun init() { activityLauncherHelper = ActivityLauncherHelper(context.activity!!) - saveFolder = ObservableMutableState( - defaultValue = "", - onChange = { _, newValue -> - if (newValue.isNotBlank()) { - context.config.root.downloader.saveFolder.set(newValue) - context.config.writeConfig() - allowNext(true) - } - } - ) } @Composable @@ -37,7 +24,10 @@ class SaveFolderScreen : SetupScreen() { Spacer(modifier = Modifier.height(16.dp)) Button(onClick = { activityLauncherHelper.chooseFolder { - saveFolder.value = it + if (it.isBlank()) return@chooseFolder + context.config.root.downloader.saveFolder.set(it) + context.config.writeConfig() + goNext() } }) { Text(text = context.translation["setup.dialogs.select_save_folder_button"]) diff --git a/common/src/main/assets/lang/en_US.json b/common/src/main/assets/lang/en_US.json @@ -6,11 +6,9 @@ "select_save_folder_button": "Select Folder" }, "mappings": { - "dialog": "To dynamically support a wide range of Snapchat Versions, mappings are necessary for SnapEnhance to function properly, this should not take more than 5 seconds.", - "generate_button": "Generate", + "dialog": "Generating Mappings, this may take a while ...", "generate_failure_no_snapchat": "SnapEnhance was unable to detect Snapchat, please try reinstalling Snapchat.", - "generate_failure": "An error occurred while trying to generate mappings, please try again.", - "generate_success": "Mappings generated successfully." + "generate_failure": "An error occurred while trying to generate mappings, please try again." }, "permissions": { "dialog": "To continue you need to fit the following requirements:",