mirror of
https://github.com/SimpleMobileTools/Simple-Flashlight.git
synced 2025-02-16 11:50:47 +01:00
Use compose RadioGroupDialog
This commit is contained in:
parent
9e3b207509
commit
2fd3dc5c77
@ -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 {
|
||||
|
@ -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)
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -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(
|
||||
|
@ -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"
|
||||
|
Loading…
x
Reference in New Issue
Block a user