Use compose RadioGroupDialog

This commit is contained in:
Ensar Sarajčić
2023-10-04 16:24:06 +02:00
parent 9e3b207509
commit 2fd3dc5c77
5 changed files with 63 additions and 39 deletions

View File

@ -18,6 +18,7 @@ import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.compose.setContent import androidx.activity.compose.setContent
import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.result.contract.ActivityResultContracts
import androidx.activity.viewModels import androidx.activity.viewModels
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.AndroidViewModel
@ -25,11 +26,13 @@ import androidx.lifecycle.Lifecycle
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import com.google.android.material.math.MathUtils import com.google.android.material.math.MathUtils
import com.simplemobiletools.commons.compose.alert_dialog.AlertDialogState
import com.simplemobiletools.commons.compose.alert_dialog.rememberAlertDialogState
import com.simplemobiletools.commons.compose.extensions.onEventValue import com.simplemobiletools.commons.compose.extensions.onEventValue
import com.simplemobiletools.commons.compose.theme.AppThemeSurface import com.simplemobiletools.commons.compose.theme.AppThemeSurface
import com.simplemobiletools.commons.dialogs.ConfirmationDialog import com.simplemobiletools.commons.dialogs.ConfirmationDialog
import com.simplemobiletools.commons.dialogs.PermissionRequiredDialog import com.simplemobiletools.commons.dialogs.PermissionRequiredDialog
import com.simplemobiletools.commons.dialogs.RadioGroupDialog import com.simplemobiletools.commons.dialogs.RadioGroupDialogAlertDialog
import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.* import com.simplemobiletools.commons.helpers.*
import com.simplemobiletools.commons.models.FAQItem import com.simplemobiletools.commons.models.FAQItem
@ -42,6 +45,7 @@ import com.simplemobiletools.flashlight.extensions.startAboutActivity
import com.simplemobiletools.flashlight.helpers.* import com.simplemobiletools.flashlight.helpers.*
import com.simplemobiletools.flashlight.screens.* import com.simplemobiletools.flashlight.screens.*
import com.simplemobiletools.flashlight.views.AnimatedSleepTimer import com.simplemobiletools.flashlight.views.AnimatedSleepTimer
import kotlinx.collections.immutable.toImmutableList
import kotlinx.coroutines.flow.* import kotlinx.coroutines.flow.*
import java.util.* import java.util.*
import kotlin.system.exitProcess import kotlin.system.exitProcess
@ -83,6 +87,11 @@ class MainActivity : ComponentActivity() {
} }
) )
val sleepTimerDialogState = rememberAlertDialogState()
sleepTimerDialogState.DialogMember {
SleepTimerRadioDialog(alertDialogState = sleepTimerDialogState)
}
MainScreen( MainScreen(
flashlightButton = { flashlightButton = {
val flashlightActive by viewModel.flashlightOn.collectAsStateWithLifecycle() val flashlightActive by viewModel.flashlightOn.collectAsStateWithLifecycle()
@ -166,7 +175,11 @@ class MainActivity : ComponentActivity() {
showMoreApps = showMoreApps, showMoreApps = showMoreApps,
openSettings = ::launchSettings, openSettings = ::launchSettings,
openAbout = ::launchAbout, openAbout = ::launchAbout,
openSleepTimer = ::showSleepTimer, openSleepTimer = {
showSleepTimerPermission {
sleepTimerDialogState.show()
}
},
moreAppsFromUs = ::launchMoreAppsFromUsIntent moreAppsFromUs = ::launchMoreAppsFromUsIntent
) )
} }
@ -242,18 +255,10 @@ class MainActivity : ComponentActivity() {
} }
} }
private fun showSleepTimer(force: Boolean = false) { @Composable
val alarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager private fun SleepTimerRadioDialog(
if (isSPlus() && !alarmManager.canScheduleExactAlarms() && !force) { alertDialogState: AlertDialogState
PermissionRequiredDialog( ) {
this,
com.simplemobiletools.commons.R.string.allow_alarm_sleep_timer,
positiveActionCallback = { openRequestExactAlarmSettings(baseConfig.appId) },
negativeActionCallback = { showSleepTimer(true) }
)
return
}
val items = ArrayList(listOf(10, 30, 60, 5 * 60, 10 * 60, 30 * 60).map { val items = ArrayList(listOf(10, 30, 60, 5 * 60, 10 * 60, 30 * 60).map {
RadioItem(it, secondsToString(it)) RadioItem(it, secondsToString(it))
}) })
@ -265,17 +270,36 @@ class MainActivity : ComponentActivity() {
items.sortBy { it.id } items.sortBy { it.id }
items.add(RadioItem(-1, getString(R.string.custom))) items.add(RadioItem(-1, getString(R.string.custom)))
RadioGroupDialog(this, items, preferences.lastSleepTimerSeconds) { RadioGroupDialogAlertDialog(
if (it as Int == -1) { alertDialogState = alertDialogState,
SleepTimerCustomDialog(this) { items = items.toImmutableList(),
if (it > 0) { selectedItemId = preferences.lastSleepTimerSeconds,
pickedSleepTimer(it) callback = {
if (it as Int == -1) {
SleepTimerCustomDialog(this) {
if (it > 0) {
pickedSleepTimer(it)
}
} }
} else if (it > 0) {
pickedSleepTimer(it)
} }
} else if (it > 0) {
pickedSleepTimer(it)
} }
)
}
private fun showSleepTimerPermission(callback: () -> Unit) {
val alarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager
if (isSPlus() && !alarmManager.canScheduleExactAlarms()) {
PermissionRequiredDialog(
this,
com.simplemobiletools.commons.R.string.allow_alarm_sleep_timer,
positiveActionCallback = { openRequestExactAlarmSettings(baseConfig.appId) },
negativeActionCallback = { callback() }
)
return
} }
callback()
} }
private fun secondsToString(seconds: Int): String { private fun secondsToString(seconds: Int): String {

View File

@ -25,7 +25,7 @@ import com.simplemobiletools.commons.compose.settings.scaffold.topAppBarColors
import com.simplemobiletools.commons.compose.settings.scaffold.topAppBarInsets import com.simplemobiletools.commons.compose.settings.scaffold.topAppBarInsets
import com.simplemobiletools.commons.compose.settings.scaffold.topAppBarPaddings import com.simplemobiletools.commons.compose.settings.scaffold.topAppBarPaddings
import com.simplemobiletools.commons.compose.theme.AppThemeSurface import com.simplemobiletools.commons.compose.theme.AppThemeSurface
import com.simplemobiletools.commons.compose.theme.Dimens import com.simplemobiletools.commons.compose.theme.SimpleTheme
import com.simplemobiletools.flashlight.R import com.simplemobiletools.flashlight.R
import com.simplemobiletools.flashlight.helpers.AppDimensions import com.simplemobiletools.flashlight.helpers.AppDimensions
import com.simplemobiletools.flashlight.views.AnimatedSleepTimer import com.simplemobiletools.flashlight.views.AnimatedSleepTimer
@ -96,7 +96,7 @@ internal fun FlashlightButton(
Icon( Icon(
modifier = Modifier modifier = Modifier
.size(AppDimensions.mainButtonSize) .size(AppDimensions.mainButtonSize)
.padding(vertical = Dimens.margin.normal) .padding(vertical = SimpleTheme.dimens.margin.large)
.clickable( .clickable(
indication = null, indication = null,
interactionSource = rememberMutableInteractionSource(), interactionSource = rememberMutableInteractionSource(),
@ -115,7 +115,7 @@ internal fun BrightDisplayButton(
Icon( Icon(
modifier = Modifier modifier = Modifier
.size(AppDimensions.smallerButtonSize) .size(AppDimensions.smallerButtonSize)
.padding(vertical = Dimens.margin.normal) .padding(vertical = SimpleTheme.dimens.margin.large)
.clickable( .clickable(
indication = null, indication = null,
interactionSource = rememberMutableInteractionSource(), interactionSource = rememberMutableInteractionSource(),
@ -134,7 +134,7 @@ internal fun SosButton(
) { ) {
Text( Text(
modifier = Modifier modifier = Modifier
.padding(vertical = Dimens.margin.normal) .padding(vertical = SimpleTheme.dimens.margin.large)
.clickable( .clickable(
indication = null, indication = null,
interactionSource = rememberMutableInteractionSource(), interactionSource = rememberMutableInteractionSource(),
@ -155,7 +155,7 @@ internal fun StroboscopeButton(
Icon( Icon(
modifier = Modifier modifier = Modifier
.size(AppDimensions.smallerButtonSize) .size(AppDimensions.smallerButtonSize)
.padding(vertical = Dimens.margin.normal) .padding(vertical = SimpleTheme.dimens.margin.large)
.clickable( .clickable(
indication = null, indication = null,
interactionSource = rememberMutableInteractionSource(), interactionSource = rememberMutableInteractionSource(),
@ -176,12 +176,12 @@ internal fun MainScreenSlidersSection(
stroboscopeBarValue: Float, stroboscopeBarValue: Float,
onStroboscopeBarValueChange: (Float) -> Unit, onStroboscopeBarValueChange: (Float) -> Unit,
) { ) {
val dimens = Dimens val dimens = SimpleTheme.dimens
val sliderModifier = remember { val sliderModifier = remember {
Modifier Modifier
.padding(dimens.margin.activity) .padding(dimens.margin.extraLarge)
.padding(vertical = dimens.margin.medium) .padding(vertical = dimens.margin.medium)
.padding(bottom = dimens.margin.activity) .padding(bottom = dimens.margin.extraLarge)
.size(width = AppDimensions.seekbarWidth, height = AppDimensions.seekbarHeight) .size(width = AppDimensions.seekbarWidth, height = AppDimensions.seekbarHeight)
} }

View File

@ -20,7 +20,7 @@ import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import com.simplemobiletools.commons.compose.extensions.MyDevices import com.simplemobiletools.commons.compose.extensions.MyDevices
import com.simplemobiletools.commons.compose.theme.AppThemeSurface import com.simplemobiletools.commons.compose.theme.AppThemeSurface
import com.simplemobiletools.commons.compose.theme.Dimens import com.simplemobiletools.commons.compose.theme.SimpleTheme
import com.simplemobiletools.commons.extensions.adjustAlpha import com.simplemobiletools.commons.extensions.adjustAlpha
import com.simplemobiletools.flashlight.R import com.simplemobiletools.flashlight.R
import com.simplemobiletools.flashlight.helpers.AppDimensions import com.simplemobiletools.flashlight.helpers.AppDimensions
@ -42,8 +42,8 @@ internal fun WidgetConfigureScreen(
) { ) {
Box( Box(
modifier = Modifier modifier = Modifier
.padding(Dimens.margin.activity) .padding(SimpleTheme.dimens.margin.extraLarge)
.padding(bottom = Dimens.margin.activity) .padding(bottom = SimpleTheme.dimens.margin.extraLarge)
.fillMaxWidth() .fillMaxWidth()
.weight(1f) .weight(1f)
) { ) {
@ -61,7 +61,7 @@ internal fun WidgetConfigureScreen(
Icon( Icon(
modifier = Modifier modifier = Modifier
.size(AppDimensions.widgetColorPickerSize) .size(AppDimensions.widgetColorPickerSize)
.padding(Dimens.margin.tiny) .padding(SimpleTheme.dimens.margin.extraSmall)
.clip(CircleShape) .clip(CircleShape)
.clickable { onColorPressed() }, .clickable { onColorPressed() },
painter = BrushPainter(SolidColor(Color(widgetColor))), painter = BrushPainter(SolidColor(Color(widgetColor))),
@ -73,12 +73,12 @@ internal fun WidgetConfigureScreen(
value = widgetAlpha, value = widgetAlpha,
onValueChange = onSliderChanged, onValueChange = onSliderChanged,
modifier = Modifier modifier = Modifier
.padding(start = Dimens.margin.medium) .padding(start = SimpleTheme.dimens.margin.medium)
.background( .background(
color = colorResource(id = R.color.md_grey_white), color = colorResource(id = R.color.md_grey_white),
shape = MaterialTheme.shapes.extraLarge shape = MaterialTheme.shapes.extraLarge
) )
.padding(horizontal = Dimens.margin.activity) .padding(horizontal = SimpleTheme.dimens.margin.extraLarge)
) )
} }

View File

@ -20,7 +20,7 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.simplemobiletools.commons.compose.extensions.MyDevices import com.simplemobiletools.commons.compose.extensions.MyDevices
import com.simplemobiletools.commons.compose.theme.AppThemeSurface import com.simplemobiletools.commons.compose.theme.AppThemeSurface
import com.simplemobiletools.commons.compose.theme.Dimens import com.simplemobiletools.commons.compose.theme.SimpleTheme
import com.simplemobiletools.flashlight.R import com.simplemobiletools.flashlight.R
@Composable @Composable
@ -40,7 +40,7 @@ internal fun SleepTimer(
Text( Text(
modifier = Modifier modifier = Modifier
.align(Alignment.CenterVertically) .align(Alignment.CenterVertically)
.padding(horizontal = Dimens.margin.normal), .padding(horizontal = SimpleTheme.dimens.margin.large),
text = stringResource(id = R.string.sleep_timer), text = stringResource(id = R.string.sleep_timer),
color = MaterialTheme.colorScheme.onSurface color = MaterialTheme.colorScheme.onSurface
) )
@ -52,7 +52,7 @@ internal fun SleepTimer(
IconButton( IconButton(
modifier = Modifier modifier = Modifier
.align(Alignment.CenterVertically) .align(Alignment.CenterVertically)
.padding(Dimens.margin.medium), .padding(SimpleTheme.dimens.margin.medium),
onClick = onCloseClick onClick = onCloseClick
) { ) {
Icon( Icon(

View File

@ -6,7 +6,7 @@ androidx-customView = "1.2.0-alpha02"
androidx-customViewPooling = "1.0.0" androidx-customViewPooling = "1.0.0"
androidx-lifecycle = "2.7.0-alpha02" androidx-lifecycle = "2.7.0-alpha02"
#Simple tools #Simple tools
simple-commons = "b7dd6ad428" simple-commons = "8495734e71"
#Compose #Compose
composeActivity = "1.8.0-rc01" composeActivity = "1.8.0-rc01"
compose = "1.6.0-alpha06" compose = "1.6.0-alpha06"