Move notifyUserAction() to IInputMethodPrivilegedOperations
This CL re-implements the way to propagate user action on an IME to InputMethodManagerService (IMMS) so that we can dynamically update IME Subtype rotation list discussed as requested in Bug 7043015. It turns out that my previous CLs [1][2][3][4] are unnecessarily complex because I tried to monitor user behavior in the IME client process rather than in the IME process. In the end, I ended up introducing a sequence number protocol for the sake of performance with a ton of complexity. This could have been implemented in a much safer and simpler way by sending user action signals from the IME process to IMMS, because A. IME already knows when it switches to a new subtype. IME needs to send a signal only once per subtype change. There is no need to use sequence counter. B. Malicious IME client is unable to disturb IME rotation list by sending a fake signal because the IPC endpoint is no longer exposed to IME client processes. In case there remain some applitations that still call this hidden API via reflection without gracefully handling exceptions, this CL keeps InputMethodManager.notifyUserAction() as a stub method so as not to break such applications. [1]: I11ed9a767588f8080753cd9bce011dac7db579ad d7443c83 [2]: I7f3e13a7226ef0dceee82b67e8a0d8536f7e9807 2a6a8d2fbb063c84e388c185402c4ca788618c72 [3]: I19ad8542659bc092b92ee13eb9f1d68ddd4b815a b56c6c721fc01fba8e36632d8e28f5123831abc5 [4]: I03fa436df0a5e348b3f93170aab3a8ac5a7e1677 c21ccc151631663d71230a3c1c756d94b575ab9e Bug: 113177698 Fix: 114159783 Test: Manually verified as follows 1. Build and flush aosp_taimen-userdebug 2. make -j SoftKeyboard 3. adb install -r $OUT/system/app/SoftKeyboard/SoftKeyboard.apk 4. adb shell ime enable com.example.android.softkeyboard/.SoftKeyboard 5. Open AOSP Keyboard settings 6. Enable "English (US)", "French", and "German" 7. Open SoftKeyboard settings 8. Enable "English (United States)", "English (GB)" 9. Open the Dialer app and tap the top edit field. 10. Make sure that the IME layout rotation order when tapping the globe key will be updated only when you tap the keyboard to enter some character. 11. Also confirm it with "adb shell dumpsys input_method" by checking "mSwitchingController:" section there. Change-Id: Icc1f9c7f530f0144ecfd460e86114e109ae0044e
Loading
Please register or sign in to comment