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