feat(NetworkWarningDialog): add option to never show again

This commit is contained in:
rushiiMachine 2025-05-31 20:53:38 -07:00
parent 4d1b21acf0
commit 89dee2ab0b
No known key found for this signature in database
GPG key ID: DCBE5952BB3B6420
5 changed files with 56 additions and 17 deletions

View file

@ -12,4 +12,5 @@ class PreferencesManager(preferences: SharedPreferences) : BasePreferenceManager
var devMode by booleanPreference("dev_mode", false) var devMode by booleanPreference("dev_mode", false)
var installer by enumPreference<InstallerSetting>("installer", InstallerSetting.PM) var installer by enumPreference<InstallerSetting>("installer", InstallerSetting.PM)
var keepPatchedApks by booleanPreference("keep_patched_apks", false) var keepPatchedApks by booleanPreference("keep_patched_apks", false)
var showNetworkWarning by booleanPreference("show_network_warning", true)
} }

View file

@ -1,8 +1,12 @@
package com.aliucord.manager.ui.components.dialogs package com.aliucord.manager.ui.components.dialogs
import androidx.compose.foundation.layout.size import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.*
import androidx.compose.material3.* import androidx.compose.material3.*
import androidx.compose.runtime.Composable import androidx.compose.runtime.*
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
@ -13,41 +17,69 @@ import com.aliucord.manager.R
@Composable @Composable
fun NetworkWarningDialog( fun NetworkWarningDialog(
onConfirm: () -> Unit, onConfirm: (neverShow: Boolean) -> Unit,
onDismiss: () -> Unit, onDismiss: (neverShow: Boolean) -> Unit,
) { ) {
val interactionSource = remember(::MutableInteractionSource)
var neverShow by rememberSaveable { mutableStateOf(false) }
val rememberedNeverShow by rememberUpdatedState(neverShow)
AlertDialog( AlertDialog(
onDismissRequest = onDismiss, onDismissRequest = { onDismiss(rememberedNeverShow) },
properties = DialogProperties( properties = DialogProperties(
dismissOnClickOutside = false, dismissOnClickOutside = false,
), ),
confirmButton = { confirmButton = {
FilledTonalButton( FilledTonalButton(
onClick = onConfirm, onClick = { onConfirm(rememberedNeverShow) },
colors = ButtonDefaults.filledTonalButtonColors( colors = ButtonDefaults.filledTonalButtonColors(
containerColor = MaterialTheme.colorScheme.error, containerColor = MaterialTheme.colorScheme.error,
contentColor = MaterialTheme.colorScheme.onError, contentColor = MaterialTheme.colorScheme.onError,
), ),
) { ) {
Text(stringResource(R.string.action_confirm)) Text(stringResource(R.string.action_continue))
} }
}, },
dismissButton = { dismissButton = {
TextButton( TextButton(
onClick = onDismiss, onClick = { onDismiss(rememberedNeverShow) },
colors = ButtonDefaults.textButtonColors( colors = ButtonDefaults.textButtonColors(
contentColor = MaterialTheme.colorScheme.onErrorContainer contentColor = MaterialTheme.colorScheme.onErrorContainer
), ),
) { ) {
Text(stringResource(R.string.action_cancel)) Text(stringResource(R.string.navigation_back))
} }
}, },
title = { Text(stringResource(R.string.network_warning_title)) }, title = { Text(stringResource(R.string.network_warning_title)) },
text = { text = {
Text( Column(
text = stringResource(R.string.network_warning_body), verticalArrangement = Arrangement.spacedBy(12.dp),
textAlign = TextAlign.Center, horizontalAlignment = Alignment.CenterHorizontally,
) ) {
Text(
text = stringResource(R.string.network_warning_body),
textAlign = TextAlign.Center,
)
Row(
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier
.clickable(
interactionSource = interactionSource,
indication = null,
onClick = { neverShow = !rememberedNeverShow },
)
.padding(end = 16.dp)
) {
Checkbox(
checked = neverShow,
onCheckedChange = { neverShow = it },
interactionSource = interactionSource,
)
Text(stringResource(R.string.network_warning_disable))
}
}
}, },
icon = { icon = {
Icon( Icon(

View file

@ -53,9 +53,10 @@ class PatchOptionsModel(
var showNetworkWarningDialog by mutableStateOf(!alreadyShownNetworkWarning && isNetworkDangerous()) var showNetworkWarningDialog by mutableStateOf(!alreadyShownNetworkWarning && isNetworkDangerous())
private set private set
fun hideNetworkWarning() { fun hideNetworkWarning(neverShow: Boolean) {
showNetworkWarningDialog = false showNetworkWarningDialog = false
alreadyShownNetworkWarning = true alreadyShownNetworkWarning = true
prefs.showNetworkWarning = !neverShow
} }
// ---------- Config generation ---------- // ---------- Config generation ----------
@ -133,6 +134,9 @@ class PatchOptionsModel(
init { init {
screenModelScope.launch { fetchPkgNameState() } screenModelScope.launch { fetchPkgNameState() }
if (!prefs.showNetworkWarning)
showNetworkWarningDialog = false
} }
companion object { companion object {

View file

@ -66,8 +66,8 @@ class PatchOptionsScreen(
if (model.showNetworkWarningDialog) { if (model.showNetworkWarningDialog) {
NetworkWarningDialog( NetworkWarningDialog(
onConfirm = model::hideNetworkWarning, onConfirm = model::hideNetworkWarning,
onDismiss = { onDismiss = { neverShow ->
model.hideNetworkWarning() model.hideNetworkWarning(neverShow)
navigator.pop() navigator.pop()
}, },
) )

View file

@ -10,6 +10,7 @@
<string name="action_cancel">Cancel</string> <string name="action_cancel">Cancel</string>
<string name="action_retry">Retry</string> <string name="action_retry">Retry</string>
<string name="action_continue">Continue</string>
<string name="action_retry_install">Retry installation</string> <string name="action_retry_install">Retry installation</string>
<string name="action_open_error_log">Open error log</string> <string name="action_open_error_log">Open error log</string>
<string name="action_apply">Apply</string> <string name="action_apply">Apply</string>
@ -80,7 +81,8 @@
<string name="network_load_fail">Failed to load</string> <string name="network_load_fail">Failed to load</string>
<string name="network_warning_title">Metered network</string> <string name="network_warning_title">Metered network</string>
<string name="network_warning_body">It appears you are connected to mobile data or a potentially metered network. In order to continue with the installation, several hundred megabytes could be downloaded. Are you sure you want to continue?</string> <string name="network_warning_body">It appears you are connected to mobile data or a potentially metered network. Continuing with the installation may result in several hundred megabytes being downloaded. Are you sure you want to continue?</string>
<string name="network_warning_disable">Don\'t show this again</string>
<string name="version_supported">Supported version:</string> <string name="version_supported">Supported version:</string>
<string name="version_none">None</string> <string name="version_none">None</string>