@@ -22,6 +22,7 @@ import io.github.sds100.keymapper.system.camera.CameraLens
2222import io.github.sds100.keymapper.system.intents.IntentExtraModel
2323import io.github.sds100.keymapper.system.intents.IntentTarget
2424import io.github.sds100.keymapper.system.network.HttpMethod
25+ import io.github.sds100.keymapper.system.settings.SettingType
2526import io.github.sds100.keymapper.system.volume.DndMode
2627import io.github.sds100.keymapper.system.volume.RingerMode
2728import io.github.sds100.keymapper.system.volume.VolumeStream
@@ -50,6 +51,8 @@ object ActionDataEntityMapper {
5051
5152 ActionEntity .Type .INTERACT_UI_ELEMENT -> ActionId .INTERACT_UI_ELEMENT
5253 ActionEntity .Type .SHELL_COMMAND -> ActionId .SHELL_COMMAND
54+ ActionEntity .Type .MODIFY_SETTING -> ActionId .MODIFY_SETTING
55+ ActionEntity .Type .CREATE_NOTIFICATION -> ActionId .CREATE_NOTIFICATION
5356 }
5457
5558 return when (actionId) {
@@ -560,6 +563,25 @@ object ActionDataEntityMapper {
560563 ActionId .SHOW_POWER_MENU -> ActionData .ShowPowerMenu
561564 ActionId .DISMISS_MOST_RECENT_NOTIFICATION -> ActionData .DismissLastNotification
562565 ActionId .DISMISS_ALL_NOTIFICATIONS -> ActionData .DismissAllNotifications
566+ ActionId .CREATE_NOTIFICATION -> {
567+ val title =
568+ entity.extras.getData(ActionEntity .EXTRA_NOTIFICATION_TITLE ).valueOrNull()
569+ ? : return null
570+
571+ val text = entity.data.takeIf { it.isNotBlank() }
572+ ? : return null
573+
574+ val timeoutMs = entity.extras.getData(
575+ ActionEntity .EXTRA_NOTIFICATION_TIMEOUT ,
576+ ).valueOrNull()
577+ ?.toLongOrNull()
578+
579+ ActionData .CreateNotification (
580+ title = title,
581+ text = text,
582+ timeoutMs = timeoutMs,
583+ )
584+ }
563585 ActionId .ANSWER_PHONE_CALL -> ActionData .AnswerCall
564586 ActionId .END_PHONE_CALL -> ActionData .EndCall
565587 ActionId .DEVICE_CONTROLS -> ActionData .DeviceControls
@@ -727,6 +749,26 @@ object ActionDataEntityMapper {
727749
728750 ActionId .FORCE_STOP_APP -> ActionData .ForceStopApp
729751 ActionId .CLEAR_RECENT_APP -> ActionData .ClearRecentApp
752+
753+ ActionId .MODIFY_SETTING -> {
754+ val value = entity.extras.getData(ActionEntity .EXTRA_SETTING_VALUE )
755+ .valueOrNull() ? : return null
756+
757+ val settingTypeString = entity.extras.getData(ActionEntity .EXTRA_SETTING_TYPE )
758+ .valueOrNull() ? : " SYSTEM" // Default to SYSTEM for backward compatibility
759+
760+ val settingType = try {
761+ SettingType .valueOf(settingTypeString)
762+ } catch (_: IllegalArgumentException ) {
763+ SettingType .SYSTEM
764+ }
765+
766+ ActionData .ModifySetting (
767+ settingType = settingType,
768+ settingKey = entity.data,
769+ value = value,
770+ )
771+ }
730772 }
731773 }
732774
@@ -753,6 +795,8 @@ object ActionDataEntityMapper {
753795 is ActionData .Sound -> ActionEntity .Type .SOUND
754796 is ActionData .InteractUiElement -> ActionEntity .Type .INTERACT_UI_ELEMENT
755797 is ActionData .ShellCommand -> ActionEntity .Type .SHELL_COMMAND
798+ is ActionData .ModifySetting -> ActionEntity .Type .MODIFY_SETTING
799+ is ActionData .CreateNotification -> ActionEntity .Type .CREATE_NOTIFICATION
756800 else -> ActionEntity .Type .SYSTEM_ACTION
757801 }
758802
@@ -823,12 +867,14 @@ object ActionDataEntityMapper {
823867 data.command.toByteArray(),
824868 Base64 .DEFAULT ,
825869 ).trim() // Trim to remove trailing newline added by Base64.DEFAULT
870+ is ActionData .CreateNotification -> data.text
826871 is ActionData .HttpRequest -> SYSTEM_ACTION_ID_MAP [data.id]!!
827872 is ActionData .ControlMediaForApp .Rewind -> SYSTEM_ACTION_ID_MAP [data.id]!!
828873 is ActionData .ControlMediaForApp .Stop -> SYSTEM_ACTION_ID_MAP [data.id]!!
829874 is ActionData .ControlMedia .Rewind -> SYSTEM_ACTION_ID_MAP [data.id]!!
830875 is ActionData .ControlMedia .Stop -> SYSTEM_ACTION_ID_MAP [data.id]!!
831876 is ActionData .GoBack -> SYSTEM_ACTION_ID_MAP [data.id]!!
877+ is ActionData .ModifySetting -> data.settingKey
832878 else -> SYSTEM_ACTION_ID_MAP [data.id]!!
833879 }
834880
@@ -1109,6 +1155,18 @@ object ActionDataEntityMapper {
11091155 EntityExtra (ActionEntity .EXTRA_SHELL_COMMAND_TIMEOUT , data.timeoutMillis.toString()),
11101156 )
11111157
1158+ is ActionData .ModifySetting -> listOf (
1159+ EntityExtra (ActionEntity .EXTRA_SETTING_VALUE , data.value),
1160+ EntityExtra (ActionEntity .EXTRA_SETTING_TYPE , data.settingType.name),
1161+ )
1162+
1163+ is ActionData .CreateNotification -> buildList {
1164+ add(EntityExtra (ActionEntity .EXTRA_NOTIFICATION_TITLE , data.title))
1165+ data.timeoutMs?.let {
1166+ add(EntityExtra (ActionEntity .EXTRA_NOTIFICATION_TIMEOUT , it.toString()))
1167+ }
1168+ }
1169+
11121170 else -> emptyList()
11131171 }
11141172
@@ -1287,5 +1345,7 @@ object ActionDataEntityMapper {
12871345 ActionId .HTTP_REQUEST to " http_request" ,
12881346 ActionId .FORCE_STOP_APP to " force_stop_app" ,
12891347 ActionId .CLEAR_RECENT_APP to " clear_recent_app" ,
1348+
1349+ ActionId .MODIFY_SETTING to " modify_setting" ,
12901350 )
12911351}
0 commit comments