mirror of
https://github.com/SimpleMobileTools/Simple-Flashlight.git
synced 2025-06-05 21:59:19 +02:00
Use compose RadioGroupDialog
This commit is contained in:
@ -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 {
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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(
|
||||||
|
@ -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"
|
||||||
|
Reference in New Issue
Block a user