diff --git a/app/src/main/java/io/github/sds100/keymapper/actions/ActionData.kt b/app/src/main/java/io/github/sds100/keymapper/actions/ActionData.kt index df15dbdd2c..e12dc24722 100644 --- a/app/src/main/java/io/github/sds100/keymapper/actions/ActionData.kt +++ b/app/src/main/java/io/github/sds100/keymapper/actions/ActionData.kt @@ -647,4 +647,9 @@ sealed class ActionData { object EndCall : ActionData() { override val id: ActionId = ActionId.END_PHONE_CALL } + + @Serializable + object DeviceControls : ActionData() { + override val id: ActionId = ActionId.DEVICE_CONTROLS + } } diff --git a/app/src/main/java/io/github/sds100/keymapper/actions/ActionDataEntityMapper.kt b/app/src/main/java/io/github/sds100/keymapper/actions/ActionDataEntityMapper.kt index 8d0cf03157..0926342cff 100644 --- a/app/src/main/java/io/github/sds100/keymapper/actions/ActionDataEntityMapper.kt +++ b/app/src/main/java/io/github/sds100/keymapper/actions/ActionDataEntityMapper.kt @@ -15,7 +15,6 @@ import io.github.sds100.keymapper.util.getKey import io.github.sds100.keymapper.util.success import io.github.sds100.keymapper.util.then import io.github.sds100.keymapper.util.valueOrNull -import kotlinx.serialization.decodeFromString import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json import splitties.bitflags.hasFlag @@ -482,6 +481,7 @@ object ActionDataEntityMapper { ActionId.DISMISS_ALL_NOTIFICATIONS -> ActionData.DismissAllNotifications ActionId.ANSWER_PHONE_CALL -> ActionData.AnswerCall ActionId.END_PHONE_CALL -> ActionData.EndCall + ActionId.DEVICE_CONTROLS -> ActionData.DeviceControls } } @@ -806,5 +806,6 @@ object ActionDataEntityMapper { ActionId.ANSWER_PHONE_CALL to "answer_phone_call", ActionId.END_PHONE_CALL to "end_phone_call", + ActionId.DEVICE_CONTROLS to "device_controls", ) } diff --git a/app/src/main/java/io/github/sds100/keymapper/actions/ActionId.kt b/app/src/main/java/io/github/sds100/keymapper/actions/ActionId.kt index 50d0d541a1..891403ad3c 100644 --- a/app/src/main/java/io/github/sds100/keymapper/actions/ActionId.kt +++ b/app/src/main/java/io/github/sds100/keymapper/actions/ActionId.kt @@ -127,4 +127,5 @@ enum class ActionId { ANSWER_PHONE_CALL, END_PHONE_CALL, + DEVICE_CONTROLS, } diff --git a/app/src/main/java/io/github/sds100/keymapper/actions/ActionUtils.kt b/app/src/main/java/io/github/sds100/keymapper/actions/ActionUtils.kt index 661db51551..190246d645 100644 --- a/app/src/main/java/io/github/sds100/keymapper/actions/ActionUtils.kt +++ b/app/src/main/java/io/github/sds100/keymapper/actions/ActionUtils.kt @@ -157,6 +157,7 @@ object ActionUtils { ActionId.DISMISS_MOST_RECENT_NOTIFICATION -> ActionCategory.NOTIFICATIONS ActionId.DISMISS_ALL_NOTIFICATIONS -> ActionCategory.NOTIFICATIONS + ActionId.DEVICE_CONTROLS -> ActionCategory.APPS } @StringRes @@ -267,6 +268,7 @@ object ActionUtils { ActionId.DISMISS_ALL_NOTIFICATIONS -> R.string.action_dismiss_all_notifications ActionId.ANSWER_PHONE_CALL -> R.string.action_answer_call ActionId.END_PHONE_CALL -> R.string.action_end_call + ActionId.DEVICE_CONTROLS -> R.string.action_device_controls } @DrawableRes @@ -378,6 +380,7 @@ object ActionUtils { ActionId.DISMISS_ALL_NOTIFICATIONS -> R.drawable.ic_baseline_clear_all_24 ActionId.ANSWER_PHONE_CALL -> R.drawable.ic_outline_call_24 ActionId.END_PHONE_CALL -> R.drawable.ic_outline_call_end_24 + ActionId.DEVICE_CONTROLS -> R.drawable.ic_home_automation } fun getMinApi(id: ActionId): Int = when (id) { @@ -412,6 +415,7 @@ object ActionUtils { -> Build.VERSION_CODES.JELLY_BEAN_MR2 ActionId.SHOW_POWER_MENU -> Build.VERSION_CODES.LOLLIPOP + ActionId.DEVICE_CONTROLS -> Build.VERSION_CODES.S else -> Constants.MIN_API } diff --git a/app/src/main/java/io/github/sds100/keymapper/actions/BaseActionUiHelper.kt b/app/src/main/java/io/github/sds100/keymapper/actions/BaseActionUiHelper.kt index e73c5fd24d..42bbb4570e 100644 --- a/app/src/main/java/io/github/sds100/keymapper/actions/BaseActionUiHelper.kt +++ b/app/src/main/java/io/github/sds100/keymapper/actions/BaseActionUiHelper.kt @@ -456,6 +456,8 @@ abstract class BaseActionUiHelper, A : Action>( ActionData.AnswerCall -> getString(R.string.action_answer_call) ActionData.EndCall -> getString(R.string.action_end_call) + + ActionData.DeviceControls -> getString(R.string.action_device_controls) } override fun getIcon(action: ActionData): IconInfo? = when (action) { diff --git a/app/src/main/java/io/github/sds100/keymapper/actions/CreateActionViewModel.kt b/app/src/main/java/io/github/sds100/keymapper/actions/CreateActionViewModel.kt index 65792769ed..81d4b63882 100644 --- a/app/src/main/java/io/github/sds100/keymapper/actions/CreateActionViewModel.kt +++ b/app/src/main/java/io/github/sds100/keymapper/actions/CreateActionViewModel.kt @@ -596,6 +596,7 @@ class CreateActionViewModelImpl( ActionId.DISMISS_ALL_NOTIFICATIONS -> return ActionData.DismissAllNotifications ActionId.ANSWER_PHONE_CALL -> return ActionData.AnswerCall ActionId.END_PHONE_CALL -> return ActionData.EndCall + ActionId.DEVICE_CONTROLS -> return ActionData.DeviceControls } } } diff --git a/app/src/main/java/io/github/sds100/keymapper/actions/PerformActionsUseCase.kt b/app/src/main/java/io/github/sds100/keymapper/actions/PerformActionsUseCase.kt index f418d7eebb..b714887e09 100644 --- a/app/src/main/java/io/github/sds100/keymapper/actions/PerformActionsUseCase.kt +++ b/app/src/main/java/io/github/sds100/keymapper/actions/PerformActionsUseCase.kt @@ -27,6 +27,7 @@ import io.github.sds100.keymapper.system.inputmethod.InputKeyModel import io.github.sds100.keymapper.system.inputmethod.InputMethodAdapter import io.github.sds100.keymapper.system.inputmethod.KeyMapperImeMessenger import io.github.sds100.keymapper.system.intents.IntentAdapter +import io.github.sds100.keymapper.system.intents.IntentTarget import io.github.sds100.keymapper.system.keyevents.KeyEventUtils import io.github.sds100.keymapper.system.lock.LockScreenAdapter import io.github.sds100.keymapper.system.media.MediaAdapter @@ -786,6 +787,14 @@ class PerformActionsUseCaseImpl( phoneAdapter.endCall() result = success() } + + ActionData.DeviceControls -> { + result = intentAdapter.send( + IntentTarget.ACTIVITY, + uri = "#Intent;action=android.intent.action.MAIN;package=com.android.systemui;component=com.android.systemui/.controls.ui.ControlsActivity;end", + extras = emptyList(), + ) + } } when (result) { diff --git a/app/src/main/res/drawable/ic_home_automation.xml b/app/src/main/res/drawable/ic_home_automation.xml new file mode 100644 index 0000000000..6c892f5a47 --- /dev/null +++ b/app/src/main/res/drawable/ic_home_automation.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5ff6871c3c..d8f483e38f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1266,6 +1266,7 @@ Play sound Dismiss most recent notification Dismiss all notifications + Device controls screen