feat: confirmation dialog
This commit is contained in:
parent
631dd63448
commit
9f4979ce9d
|
@ -4,13 +4,19 @@ import android.annotation.SuppressLint
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import androidx.activity.ComponentActivity
|
import androidx.activity.ComponentActivity
|
||||||
import androidx.activity.compose.setContent
|
import androidx.activity.compose.setContent
|
||||||
import androidx.compose.runtime.derivedStateOf
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.material3.AlertDialog
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.material3.MaterialTheme
|
||||||
|
import androidx.compose.material3.Text
|
||||||
|
import androidx.compose.material3.TextButton
|
||||||
|
import androidx.compose.runtime.*
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.res.stringResource
|
||||||
|
import androidx.compose.ui.window.DialogProperties
|
||||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||||
import com.simplemobiletools.commons.compose.extensions.enableEdgeToEdgeSimple
|
import com.simplemobiletools.commons.compose.extensions.enableEdgeToEdgeSimple
|
||||||
import com.simplemobiletools.commons.compose.theme.AppThemeSurface
|
import com.simplemobiletools.commons.compose.theme.AppThemeSurface
|
||||||
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
|
import com.simplemobiletools.commons.compose.theme.Shapes
|
||||||
import com.simplemobiletools.commons.extensions.getAppIconColors
|
import com.simplemobiletools.commons.extensions.getAppIconColors
|
||||||
import com.simplemobiletools.commons.extensions.toggleAppIconColor
|
import com.simplemobiletools.commons.extensions.toggleAppIconColor
|
||||||
import com.simplemobiletools.commons.helpers.isTiramisuPlus
|
import com.simplemobiletools.commons.helpers.isTiramisuPlus
|
||||||
|
@ -20,6 +26,8 @@ import com.simplemobiletools.thankyou.extensions.config
|
||||||
import com.simplemobiletools.thankyou.extensions.launchChangeAppLanguageIntent
|
import com.simplemobiletools.thankyou.extensions.launchChangeAppLanguageIntent
|
||||||
import com.simplemobiletools.thankyou.extensions.startCustomizationActivity
|
import com.simplemobiletools.thankyou.extensions.startCustomizationActivity
|
||||||
import com.simplemobiletools.thankyou.screens.SettingsScreen
|
import com.simplemobiletools.thankyou.screens.SettingsScreen
|
||||||
|
import com.simplemobiletools.thankyou.screens.alert_dialog.AlertDialogState
|
||||||
|
import com.simplemobiletools.thankyou.screens.alert_dialog.rememberAlertDialogState
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
import kotlin.system.exitProcess
|
import kotlin.system.exitProcess
|
||||||
|
|
||||||
|
@ -35,13 +43,16 @@ class SettingsActivity : ComponentActivity() {
|
||||||
AppThemeSurface {
|
AppThemeSurface {
|
||||||
val wasUseEnglishToggledFlow by preferences.wasUseEnglishToggledFlow.collectAsStateWithLifecycle(preferences.wasUseEnglishToggled)
|
val wasUseEnglishToggledFlow by preferences.wasUseEnglishToggledFlow.collectAsStateWithLifecycle(preferences.wasUseEnglishToggled)
|
||||||
val useEnglishFlow by preferences.useEnglishFlow.collectAsStateWithLifecycle(preferences.useEnglish)
|
val useEnglishFlow by preferences.useEnglishFlow.collectAsStateWithLifecycle(preferences.useEnglish)
|
||||||
val hideLauncherIconFlow by preferences.hideLauncherIconFlow.collectAsStateWithLifecycle(preferences.useEnglish)
|
val hideLauncherIconFlow by preferences.hideLauncherIconFlow.collectAsStateWithLifecycle(preferences.hideLauncherIcon)
|
||||||
val displayLanguage = remember { Locale.getDefault().displayLanguage }
|
val displayLanguage = remember { Locale.getDefault().displayLanguage }
|
||||||
val isUseEnglishEnabled by remember(wasUseEnglishToggledFlow) {
|
val isUseEnglishEnabled by remember(wasUseEnglishToggledFlow) {
|
||||||
derivedStateOf {
|
derivedStateOf {
|
||||||
(wasUseEnglishToggledFlow || Locale.getDefault().language != "en") && !isTiramisuPlus()
|
(wasUseEnglishToggledFlow || Locale.getDefault().language != "en") && !isTiramisuPlus()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
val alertDialogState = rememberAlertDialogState()
|
||||||
|
ConfirmationDialog(alertDialogState)
|
||||||
|
|
||||||
SettingsScreen(
|
SettingsScreen(
|
||||||
displayLanguage = displayLanguage,
|
displayLanguage = displayLanguage,
|
||||||
isUseEnglishEnabled = isUseEnglishEnabled,
|
isUseEnglishEnabled = isUseEnglishEnabled,
|
||||||
|
@ -53,13 +64,11 @@ class SettingsActivity : ComponentActivity() {
|
||||||
onSetupLanguagePress = ::launchChangeAppLanguageIntent,
|
onSetupLanguagePress = ::launchChangeAppLanguageIntent,
|
||||||
isHidingLauncherIcon = hideLauncherIconFlow,
|
isHidingLauncherIcon = hideLauncherIconFlow,
|
||||||
hideLauncherIconClick = { isChecked ->
|
hideLauncherIconClick = { isChecked ->
|
||||||
preferences.hideLauncherIcon = isChecked
|
|
||||||
if (isChecked) {
|
if (isChecked) {
|
||||||
toggleHideLauncherIcon()
|
alertDialogState.show()
|
||||||
} else {
|
} else {
|
||||||
ConfirmationDialog(this, "", R.string.hide_launcher_icon_explanation, R.string.ok, R.string.cancel) {
|
toggleHideLauncherIcon()
|
||||||
toggleHideLauncherIcon()
|
preferences.hideLauncherIcon = false
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
customizeColors = ::startCustomizationActivity,
|
customizeColors = ::startCustomizationActivity,
|
||||||
|
@ -69,6 +78,41 @@ class SettingsActivity : ComponentActivity() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
private fun ConfirmationDialog(alertDialogState: AlertDialogState) {
|
||||||
|
alertDialogState.DialogMember {
|
||||||
|
AlertDialog(
|
||||||
|
modifier = Modifier.fillMaxWidth(0.9f),
|
||||||
|
properties = DialogProperties(usePlatformDefaultWidth = false),
|
||||||
|
onDismissRequest = alertDialogState::hide,
|
||||||
|
confirmButton = {
|
||||||
|
TextButton(onClick = {
|
||||||
|
alertDialogState.hide()
|
||||||
|
preferences.hideLauncherIcon = true
|
||||||
|
toggleHideLauncherIcon()
|
||||||
|
}) {
|
||||||
|
Text(text = stringResource(id = R.string.ok))
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dismissButton = {
|
||||||
|
TextButton(onClick = {
|
||||||
|
alertDialogState.hide()
|
||||||
|
preferences.hideLauncherIcon = false
|
||||||
|
}) {
|
||||||
|
Text(text = stringResource(id = R.string.cancel))
|
||||||
|
}
|
||||||
|
},
|
||||||
|
shape = Shapes.large,
|
||||||
|
text = {
|
||||||
|
Text(
|
||||||
|
text = stringResource(id = R.string.hide_launcher_icon_explanation),
|
||||||
|
color = MaterialTheme.colorScheme.onSurface
|
||||||
|
)
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun toggleHideLauncherIcon() {
|
private fun toggleHideLauncherIcon() {
|
||||||
val appId = BuildConfig.APPLICATION_ID
|
val appId = BuildConfig.APPLICATION_ID
|
||||||
getAppIconColors().forEachIndexed { index, color ->
|
getAppIconColors().forEachIndexed { index, color ->
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
package com.simplemobiletools.thankyou.screens.alert_dialog
|
||||||
|
|
||||||
|
import androidx.compose.runtime.*
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun rememberAlertDialogState(
|
||||||
|
isShownInitially: Boolean = false
|
||||||
|
) = remember { AlertDialogState(isShownInitially) }
|
||||||
|
|
||||||
|
@Stable
|
||||||
|
class AlertDialogState(isShownInitially: Boolean = false) {
|
||||||
|
var isShown by mutableStateOf(isShownInitially)
|
||||||
|
private set
|
||||||
|
|
||||||
|
fun show() {
|
||||||
|
isShown = true
|
||||||
|
}
|
||||||
|
|
||||||
|
fun hide() {
|
||||||
|
isShown = false
|
||||||
|
}
|
||||||
|
|
||||||
|
fun toggle() {
|
||||||
|
isShown = !isShown
|
||||||
|
}
|
||||||
|
|
||||||
|
fun changeValue(predicate: Boolean) {
|
||||||
|
isShown = predicate
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun DialogMember(
|
||||||
|
content: @Composable () -> Unit
|
||||||
|
) {
|
||||||
|
if (isShown) {
|
||||||
|
content()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue