From 5d54bdeb5d950cf8d04e2dc06bb484d90c224a91 Mon Sep 17 00:00:00 2001 From: rushiiMachine <33725716+rushiiMachine@users.noreply.github.com> Date: Tue, 23 Jan 2024 23:43:06 -0800 Subject: [PATCH] feat: install abort warning dialog Based on Wing's version in Vendetta Manager --- .../dialogs/InstallerAbortDialog.kt | 52 +++++++++++++++++++ .../manager/ui/screens/about/AboutScreen.kt | 2 +- .../ui/screens/install/InstallScreen.kt | 29 ++++++++++- app/src/main/res/values/strings.xml | 5 ++ 4 files changed, 85 insertions(+), 3 deletions(-) create mode 100644 app/src/main/kotlin/com/aliucord/manager/ui/components/dialogs/InstallerAbortDialog.kt diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/components/dialogs/InstallerAbortDialog.kt b/app/src/main/kotlin/com/aliucord/manager/ui/components/dialogs/InstallerAbortDialog.kt new file mode 100644 index 00000000..89f56115 --- /dev/null +++ b/app/src/main/kotlin/com/aliucord/manager/ui/components/dialogs/InstallerAbortDialog.kt @@ -0,0 +1,52 @@ +package com.aliucord.manager.ui.components.dialogs + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Warning +import androidx.compose.material3.* +import androidx.compose.runtime.Composable +import androidx.compose.ui.res.stringResource +import com.aliucord.manager.R + +@Composable +fun InstallerAbortDialog( + onConfirm: () -> Unit, + onDismiss: () -> Unit, +) { + AlertDialog( + onDismissRequest = onDismiss, + confirmButton = { + FilledTonalButton( + onClick = onConfirm, + colors = ButtonDefaults.filledTonalButtonColors( + containerColor = MaterialTheme.colorScheme.error, + contentColor = MaterialTheme.colorScheme.onError, + ), + ) { + Text(stringResource(R.string.action_exit_anyways)) + } + }, + dismissButton = { + TextButton( + onClick = onDismiss, + colors = ButtonDefaults.textButtonColors( + contentColor = MaterialTheme.colorScheme.onErrorContainer + ), + ) { + Text(stringResource(R.string.action_cancel)) + } + }, + title = { + Text(stringResource(R.string.installer_abort_title)) + }, + text = { + Text(stringResource(R.string.installer_abort_body)) + }, + icon = { + Icon(Icons.Filled.Warning, contentDescription = null) + }, + containerColor = MaterialTheme.colorScheme.errorContainer, + iconContentColor = MaterialTheme.colorScheme.onErrorContainer, + titleContentColor = MaterialTheme.colorScheme.onErrorContainer, + textContentColor = MaterialTheme.colorScheme.onErrorContainer + ) +} diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/screens/about/AboutScreen.kt b/app/src/main/kotlin/com/aliucord/manager/ui/screens/about/AboutScreen.kt index 2d2b1db8..f7339a12 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/screens/about/AboutScreen.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/screens/about/AboutScreen.kt @@ -161,7 +161,7 @@ private fun MainContributors(modifier: Modifier = Modifier) { ) { UserEntry("Vendicated", "the ven") UserEntry("Juby210", "Fox") - UserEntry("rushii", "explod", "DiamondMiner88") + UserEntry("rushii", "explod", "rushiiMachine") } } 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 9362c51e..4e45d5c9 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 @@ -6,6 +6,7 @@ package com.aliucord.manager.ui.screens.install import android.os.Parcelable +import androidx.activity.compose.BackHandler import androidx.compose.foundation.* import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.RoundedCornerShape @@ -15,6 +16,7 @@ import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.unit.dp @@ -26,6 +28,7 @@ import com.aliucord.manager.R import com.aliucord.manager.ui.components.BackButton import com.aliucord.manager.ui.components.back import com.aliucord.manager.ui.components.dialogs.DownloadMethod +import com.aliucord.manager.ui.components.dialogs.InstallerAbortDialog import com.aliucord.manager.ui.components.installer.InstallGroup import com.aliucord.manager.ui.components.installer.InstallStatus import com.aliucord.manager.ui.screens.install.InstallModel.InstallStepGroup @@ -58,13 +61,35 @@ class InstallScreen(val data: InstallData) : Screen { expandedGroup = model.currentStep?.group } + // Exit warning dialog + var showAbortWarning by remember { mutableStateOf(false) } + if (showAbortWarning) { + InstallerAbortDialog( + onDismiss = { showAbortWarning = false }, + onConfirm = { + navigator.back(currentActivity = null) + model.clearCache() + }, + ) + } else { + BackHandler { + showAbortWarning = true + } + } + Scaffold( topBar = { TopAppBar( title = { Text(stringResource(R.string.installer)) }, navigationIcon = { - // TODO: add confirm to exit dialog to button as well as BackHandler - BackButton() + IconButton( + onClick = { showAbortWarning = true }, + ) { + Icon( + painter = painterResource(R.drawable.ic_back), + contentDescription = stringResource(R.string.navigation_back), + ) + } } ) } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8c457cc4..989b48f4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -9,6 +9,7 @@ Website Installer + Cancel Retry Apply Confirm @@ -27,6 +28,7 @@ Expand Copied! Cleared cache! + Exit anyways Grant Permissions In order for Aliucord Manager to function, file permissions are required. Since shared data is stored in ~/Aliucord, permissions are required in order to access it. @@ -125,6 +127,9 @@ Failed Queued + Really exit? + Are you sure you really want to abort an in-progress installation? Cached files will be cleared to avoid corruption. + A new update has been released for Aliucord Manager! It may be required in order to function properly. Would you like to update? Update to %1$s