@@ -4,6 +4,7 @@ import android.text.InputType
44import androidx.compose.runtime.getValue
55import androidx.compose.runtime.mutableStateOf
66import androidx.compose.runtime.setValue
7+ import androidx.compose.runtime.snapshotFlow
78import io.github.sds100.keymapper.base.R
89import io.github.sds100.keymapper.base.actions.pinchscreen.PinchPickCoordinateResult
910import io.github.sds100.keymapper.base.actions.swipescreen.SwipePickCoordinateResult
@@ -29,13 +30,17 @@ import io.github.sds100.keymapper.system.volume.DndMode
2930import io.github.sds100.keymapper.system.volume.RingerMode
3031import io.github.sds100.keymapper.system.volume.VolumeStream
3132import kotlinx.coroutines.CoroutineScope
33+ import kotlinx.coroutines.ExperimentalCoroutinesApi
3234import kotlinx.coroutines.flow.MutableStateFlow
3335import kotlinx.coroutines.flow.collectLatest
36+ import kotlinx.coroutines.flow.filterNotNull
3437import kotlinx.coroutines.flow.first
38+ import kotlinx.coroutines.flow.flatMapLatest
3539import kotlinx.coroutines.flow.update
3640import kotlinx.coroutines.launch
3741import kotlinx.serialization.json.Json
3842
43+ @OptIn(ExperimentalCoroutinesApi ::class )
3944class CreateActionDelegate (
4045 private val coroutineScope : CoroutineScope ,
4146 private val useCase : CreateActionUseCase ,
@@ -67,6 +72,22 @@ class CreateActionDelegate(
6772 }
6873 }
6974 }
75+
76+ coroutineScope.launch {
77+ snapshotFlow { modifySettingActionBottomSheetState?.settingType }
78+ .filterNotNull()
79+ .flatMapLatest { settingType ->
80+ val permission = useCase.getRequiredPermissionForSettingType(settingType)
81+ useCase.isPermissionGrantedFlow(permission)
82+ }
83+ .collectLatest { isGranted ->
84+ modifySettingActionBottomSheetState =
85+ modifySettingActionBottomSheetState?.copy(
86+ isPermissionGranted = isGranted,
87+ testResult = null ,
88+ )
89+ }
90+ }
7091 }
7192
7293 fun onDoneConfigEnableFlashlightClick () {
@@ -214,12 +235,18 @@ class CreateActionDelegate(
214235
215236 fun onSelectSettingType (settingType : SettingType ) {
216237 modifySettingActionBottomSheetState =
217- modifySettingActionBottomSheetState?.copy(settingType = settingType)
238+ modifySettingActionBottomSheetState?.copy(
239+ settingType = settingType,
240+ testResult = null ,
241+ )
218242 }
219243
220244 fun onSettingKeyChange (key : String ) {
221245 modifySettingActionBottomSheetState =
222- modifySettingActionBottomSheetState?.copy(settingKey = key)
246+ modifySettingActionBottomSheetState?.copy(
247+ settingKey = key,
248+ testResult = null ,
249+ )
223250 }
224251
225252 fun onChooseExistingSettingClick () {
@@ -233,6 +260,7 @@ class CreateActionDelegate(
233260 settingType = setting.settingType,
234261 settingKey = setting.key,
235262 value = setting.currentValue ? : " " ,
263+ testResult = null ,
236264 )
237265 }
238266 }
@@ -242,6 +270,22 @@ class CreateActionDelegate(
242270 modifySettingActionBottomSheetState?.copy(value = value)
243271 }
244272
273+ fun onTestModifySettingClick () {
274+ val state = modifySettingActionBottomSheetState ? : return
275+
276+ coroutineScope.launch {
277+ val result = useCase.setSettingValue(state.settingType, state.settingKey, state.value)
278+ modifySettingActionBottomSheetState =
279+ modifySettingActionBottomSheetState?.copy(testResult = result)
280+ }
281+ }
282+
283+ fun onRequestModifySettingPermission () {
284+ val state = modifySettingActionBottomSheetState ? : return
285+ val permission = useCase.getRequiredPermissionForSettingType(state.settingType)
286+ useCase.requestPermission(permission)
287+ }
288+
245289 suspend fun editAction (oldData : ActionData ) {
246290 if (! oldData.isEditable()) {
247291 throw IllegalArgumentException (" This action ${oldData.javaClass.name} can't be edited!" )
0 commit comments