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

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.topAppBarPaddings
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.helpers.AppDimensions
import com.simplemobiletools.flashlight.views.AnimatedSleepTimer
@ -96,7 +96,7 @@ internal fun FlashlightButton(
Icon(
modifier = Modifier
.size(AppDimensions.mainButtonSize)
.padding(vertical = Dimens.margin.normal)
.padding(vertical = SimpleTheme.dimens.margin.large)
.clickable(
indication = null,
interactionSource = rememberMutableInteractionSource(),
@ -115,7 +115,7 @@ internal fun BrightDisplayButton(
Icon(
modifier = Modifier
.size(AppDimensions.smallerButtonSize)
.padding(vertical = Dimens.margin.normal)
.padding(vertical = SimpleTheme.dimens.margin.large)
.clickable(
indication = null,
interactionSource = rememberMutableInteractionSource(),
@ -134,7 +134,7 @@ internal fun SosButton(
) {
Text(
modifier = Modifier
.padding(vertical = Dimens.margin.normal)
.padding(vertical = SimpleTheme.dimens.margin.large)
.clickable(
indication = null,
interactionSource = rememberMutableInteractionSource(),
@ -155,7 +155,7 @@ internal fun StroboscopeButton(
Icon(
modifier = Modifier
.size(AppDimensions.smallerButtonSize)
.padding(vertical = Dimens.margin.normal)
.padding(vertical = SimpleTheme.dimens.margin.large)
.clickable(
indication = null,
interactionSource = rememberMutableInteractionSource(),
@ -176,12 +176,12 @@ internal fun MainScreenSlidersSection(
stroboscopeBarValue: Float,
onStroboscopeBarValueChange: (Float) -> Unit,
) {
val dimens = Dimens
val dimens = SimpleTheme.dimens
val sliderModifier = remember {
Modifier
.padding(dimens.margin.activity)
.padding(dimens.margin.extraLarge)
.padding(vertical = dimens.margin.medium)
.padding(bottom = dimens.margin.activity)
.padding(bottom = dimens.margin.extraLarge)
.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 com.simplemobiletools.commons.compose.extensions.MyDevices
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.flashlight.R
import com.simplemobiletools.flashlight.helpers.AppDimensions
@ -42,8 +42,8 @@ internal fun WidgetConfigureScreen(
) {
Box(
modifier = Modifier
.padding(Dimens.margin.activity)
.padding(bottom = Dimens.margin.activity)
.padding(SimpleTheme.dimens.margin.extraLarge)
.padding(bottom = SimpleTheme.dimens.margin.extraLarge)
.fillMaxWidth()
.weight(1f)
) {
@ -61,7 +61,7 @@ internal fun WidgetConfigureScreen(
Icon(
modifier = Modifier
.size(AppDimensions.widgetColorPickerSize)
.padding(Dimens.margin.tiny)
.padding(SimpleTheme.dimens.margin.extraSmall)
.clip(CircleShape)
.clickable { onColorPressed() },
painter = BrushPainter(SolidColor(Color(widgetColor))),
@ -73,12 +73,12 @@ internal fun WidgetConfigureScreen(
value = widgetAlpha,
onValueChange = onSliderChanged,
modifier = Modifier
.padding(start = Dimens.margin.medium)
.padding(start = SimpleTheme.dimens.margin.medium)
.background(
color = colorResource(id = R.color.md_grey_white),
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 com.simplemobiletools.commons.compose.extensions.MyDevices
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
@Composable
@ -40,7 +40,7 @@ internal fun SleepTimer(
Text(
modifier = Modifier
.align(Alignment.CenterVertically)
.padding(horizontal = Dimens.margin.normal),
.padding(horizontal = SimpleTheme.dimens.margin.large),
text = stringResource(id = R.string.sleep_timer),
color = MaterialTheme.colorScheme.onSurface
)
@ -52,7 +52,7 @@ internal fun SleepTimer(
IconButton(
modifier = Modifier
.align(Alignment.CenterVertically)
.padding(Dimens.margin.medium),
.padding(SimpleTheme.dimens.margin.medium),
onClick = onCloseClick
) {
Icon(

View File

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