Skip to content

Commit 913bb8a

Browse files
authored
Merge pull request #2111 from keymapperorg/claude/affectionate-einstein-lEt25
#2045 Add 'Perform IME action' action (Android 13+)
2 parents 2e63fa6 + 5b48de9 commit 913bb8a

10 files changed

Lines changed: 36 additions & 0 deletions

File tree

base/src/main/java/io/github/sds100/keymapper/base/actions/ActionData.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -833,6 +833,11 @@ sealed class ActionData : Comparable<ActionData> {
833833
override val id = ActionId.SHOW_KEYBOARD_PICKER
834834
}
835835

836+
@Serializable
837+
data object PerformImeAction : ActionData() {
838+
override val id = ActionId.PERFORM_IME_ACTION
839+
}
840+
836841
@Serializable
837842
data object CopyText : ActionData() {
838843
override val id = ActionId.TEXT_COPY

base/src/main/java/io/github/sds100/keymapper/base/actions/ActionDataEntityMapper.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -545,6 +545,7 @@ object ActionDataEntityMapper {
545545
ActionId.SHOW_KEYBOARD -> ActionData.ShowKeyboard
546546
ActionId.HIDE_KEYBOARD -> ActionData.HideKeyboard
547547
ActionId.SHOW_KEYBOARD_PICKER -> ActionData.ShowKeyboardPicker
548+
ActionId.PERFORM_IME_ACTION -> ActionData.PerformImeAction
548549
ActionId.TEXT_CUT -> ActionData.CutText
549550
ActionId.TEXT_COPY -> ActionData.CopyText
550551
ActionId.TEXT_PASTE -> ActionData.PasteText
@@ -1322,6 +1323,7 @@ object ActionDataEntityMapper {
13221323
ActionId.SHOW_KEYBOARD to "show_keyboard",
13231324
ActionId.HIDE_KEYBOARD to "hide_keyboard",
13241325
ActionId.SHOW_KEYBOARD_PICKER to "show_keyboard_picker",
1326+
ActionId.PERFORM_IME_ACTION to "perform_ime_action",
13251327
ActionId.TEXT_CUT to "text_cut",
13261328
ActionId.TEXT_COPY to "text_copy",
13271329
ActionId.TEXT_PASTE to "text_paste",

base/src/main/java/io/github/sds100/keymapper/base/actions/ActionId.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ enum class ActionId {
125125
SHOW_KEYBOARD,
126126
HIDE_KEYBOARD,
127127
SHOW_KEYBOARD_PICKER,
128+
PERFORM_IME_ACTION,
128129

129130
SWITCH_KEYBOARD,
130131

base/src/main/java/io/github/sds100/keymapper/base/actions/ActionUiHelper.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -595,6 +595,7 @@ class ActionUiHelper(
595595
ActionData.SelectWordAtCursor -> getString(R.string.action_select_word_at_cursor)
596596
ActionData.ShowKeyboard -> getString(R.string.action_show_keyboard)
597597
ActionData.ShowKeyboardPicker -> getString(R.string.action_show_keyboard_picker)
598+
ActionData.PerformImeAction -> getString(R.string.action_perform_ime_action)
598599
ActionData.ShowPowerMenu -> getString(R.string.action_show_power_menu)
599600

600601
ActionData.StatusBar.Collapse -> getString(R.string.action_collapse_status_bar)

base/src/main/java/io/github/sds100/keymapper/base/actions/ActionUtils.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,7 @@ object ActionUtils {
225225
ActionId.HIDE_KEYBOARD -> ActionCategory.KEYBOARD
226226
ActionId.SHOW_KEYBOARD_PICKER -> ActionCategory.KEYBOARD
227227
ActionId.SELECT_WORD_AT_CURSOR -> ActionCategory.KEYBOARD
228+
ActionId.PERFORM_IME_ACTION -> ActionCategory.KEYBOARD
228229
ActionId.SWITCH_KEYBOARD -> ActionCategory.KEYBOARD
229230
ActionId.LOCK_DEVICE -> ActionCategory.INTERFACE
230231
ActionId.POWER_ON_OFF_DEVICE -> ActionCategory.INTERFACE
@@ -424,6 +425,8 @@ object ActionUtils {
424425

425426
ActionId.SELECT_WORD_AT_CURSOR -> R.string.action_select_word_at_cursor
426427

428+
ActionId.PERFORM_IME_ACTION -> R.string.action_perform_ime_action
429+
427430
ActionId.SWITCH_KEYBOARD -> R.string.action_switch_keyboard
428431

429432
ActionId.TOGGLE_AIRPLANE_MODE -> R.string.action_toggle_airplane_mode
@@ -599,6 +602,7 @@ object ActionUtils {
599602
ActionId.TEXT_COPY -> R.drawable.ic_content_copy
600603
ActionId.TEXT_PASTE -> R.drawable.ic_content_paste
601604
ActionId.SELECT_WORD_AT_CURSOR -> null
605+
ActionId.PERFORM_IME_ACTION -> null
602606
ActionId.SWITCH_KEYBOARD -> R.drawable.ic_outline_keyboard_24
603607
ActionId.TOGGLE_AIRPLANE_MODE -> R.drawable.ic_outline_airplanemode_active_24
604608
ActionId.ENABLE_AIRPLANE_MODE -> R.drawable.ic_outline_airplanemode_active_24
@@ -677,6 +681,8 @@ object ActionUtils {
677681
ActionId.SELECT_WORD_AT_CURSOR,
678682
-> Build.VERSION_CODES.JELLY_BEAN_MR2
679683

684+
ActionId.PERFORM_IME_ACTION -> Build.VERSION_CODES.TIRAMISU
685+
680686
ActionId.SHOW_POWER_MENU -> Build.VERSION_CODES.LOLLIPOP
681687

682688
ActionId.DEVICE_CONTROLS -> Build.VERSION_CODES.S
@@ -1029,6 +1035,7 @@ object ActionUtils {
10291035
ActionId.TEXT_COPY -> Icons.Rounded.ContentCopy
10301036
ActionId.TEXT_PASTE -> Icons.Rounded.ContentPaste
10311037
ActionId.SELECT_WORD_AT_CURSOR -> KeyMapperIcons.MatchWord
1038+
ActionId.PERFORM_IME_ACTION -> Icons.Outlined.Keyboard
10321039
ActionId.SWITCH_KEYBOARD -> Icons.Outlined.Keyboard
10331040
ActionId.TOGGLE_AIRPLANE_MODE -> Icons.Outlined.AirplanemodeActive
10341041
ActionId.ENABLE_AIRPLANE_MODE -> Icons.Outlined.AirplanemodeActive

base/src/main/java/io/github/sds100/keymapper/base/actions/CreateActionDelegate.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1066,6 +1066,8 @@ class CreateActionDelegate(
10661066

10671067
ActionId.SHOW_KEYBOARD_PICKER -> return ActionData.ShowKeyboardPicker
10681068

1069+
ActionId.PERFORM_IME_ACTION -> return ActionData.PerformImeAction
1070+
10691071
ActionId.TEXT_CUT -> return ActionData.CutText
10701072

10711073
ActionId.TEXT_COPY -> return ActionData.CopyText

base/src/main/java/io/github/sds100/keymapper/base/actions/PerformActionsUseCase.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -764,6 +764,15 @@ class PerformActionsUseCaseImpl @AssistedInject constructor(
764764
result = inputMethodAdapter.showImePicker(fromForeground = false)
765765
}
766766

767+
is ActionData.PerformImeAction -> {
768+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
769+
service.performImeAction()
770+
result = Success(Unit)
771+
} else {
772+
result = SdkVersionTooLow(minSdk = Build.VERSION_CODES.TIRAMISU)
773+
}
774+
}
775+
767776
is ActionData.CutText -> {
768777
result = service.performActionOnNode({ it.isFocused }) {
769778
AccessibilityNodeAction(AccessibilityNodeInfo.ACTION_CUT)

base/src/main/java/io/github/sds100/keymapper/base/system/accessibility/BaseAccessibilityService.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -569,4 +569,8 @@ abstract class BaseAccessibilityService :
569569
null,
570570
)
571571
}
572+
573+
override fun performImeAction() {
574+
inputMethod?.currentInputConnection?.performEditorAction(EditorInfo.IME_ACTION_UNSPECIFIED)
575+
}
572576
}

base/src/main/java/io/github/sds100/keymapper/base/system/accessibility/IAccessibilityService.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,4 +66,7 @@ interface IAccessibilityService : SwitchImeInterface {
6666

6767
@RequiresApi(Build.VERSION_CODES.TIRAMISU)
6868
fun injectText(text: String)
69+
70+
@RequiresApi(Build.VERSION_CODES.TIRAMISU)
71+
fun performImeAction()
6972
}

base/src/main/res/values/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1074,6 +1074,8 @@
10741074

10751075
<string name="action_show_keyboard_picker">Show keyboard picker</string>
10761076

1077+
<string name="action_perform_ime_action">Keyboard enter/send</string>
1078+
10771079
<string name="action_switch_keyboard">Switch keyboard</string>
10781080
<string name="action_switch_keyboard_formatted">Switch to %s</string>
10791081

0 commit comments

Comments
 (0)