Support rotary IME

- Let OEM specify a rotary IME. When specified, automatically switch
  IMEs when the user switches modes. Use an overlay to reliably detect
  the transition to touch mode.
- Move focus to the IME when it opens. Leave the editable field
  focused.
- Return focus to the editable field when the user closes the IME or
  nudges back up.
- Close the IME when the user navigates away from the editable field.

Bug: 131421840
Bug: 154777887
Test: atest CarRotaryControllerRoboTests
Change-Id: Id04aa785d6bc90047502f69ad4196334790d4b82
8 files changed
tree: 0d12c4a3663d2cfb3c053e151dce34bbe6e572a9
  1. res/
  2. src/
  3. tests/
  4. Android.bp
  5. AndroidManifest.xml
  6. OWNERS
  7. readme.md
readme.md

Car rotary service

Building

make CarRotaryController -j64

Enable/disable RotaryService

To enable, run:

adb shell settings put secure enabled_accessibility_services com.android.car.rotary/com.android.car.rotary.RotaryService

To disable, run:

adb shell settings delete secure enabled_accessibility_services

Inject events

Inject RotaryEvent

To rotate the controller counter-clockwise, run:

adb shell cmd car_service inject-rotary

For clockwise, run:

adb shell cmd car_service inject-rotary -c true

To rotate the controller multiple times (100 ms ago and 50 ms ago), run:

adb shell cmd car_service inject-rotary -dt 100 50

Inject KeyEvent

To nudge the controller up, run:

adb shell cmd car_service inject-key 280

Use KeyCode 280 for nudge up, 281 for nudge down,282 for nudge left,283 for nudge right.

To click the controller center button, run:

adb shell cmd car_service inject-key 23