Use setTextOperationUser() in KeyguardPasswordView and RemoteInputView
Android implements many complex text-related operations as per-user out-of-process services. Notable examples are: * InputMethodServices * SpellCheckerService * TextClassifierService * AutofillService For service client processes to connect to the right user's services often the system assumes that a process that runs as user X should connect to services that run as user X. While this approach works for most of cases, there is at least one exception, System UI, which always runs as the primary user (unless the device enables special mode e.g. UserManager.isSplitSystemUser()) no matter who is the current foreground user. In order to deal with this special case, we recently introduced an @hide API TextView#setTextOperationUser() [1] to centralize cross-user special logic inside TextView. With this CL, KeyguardPasswordView and RemoteInputView actually start calling it. Note that TextView#setTextOperationUser() already takes care of IMEs and SpellCheckers hence those two operations start working as expected with this CL. Once TextView#setTextOperationUser() start taking care of other operations such as text classification and clipboard, KeyguardPasswordView and RemoteInputView will be automatically taken care of with no code change. [1]: I6d11e4d6a84570bc2991a8552349e8b216b0d139 401e3d4c Fix: 120744418 Fix: 123043618 Test: atest SystemUITests Test: Manually tested Bug 120744418 scenario as follows. 1. Build and flash an AOSP build 2. adb root 3. adb shell setprop persist.debug.per_profile_ime 1 4. adb reboot 5. Install Test DPC 6. Enable managed profile with Test DPC 7. make -j SoftKeyboard 8. adb install -r $OUT/system/app/SoftKeyboard/SoftKeyboard.apk 9. adb shell ime enable com.example.android.softkeyboard/.SoftKeyboard 10. adb shell ime set com.example.android.softkeyboard/.SoftKeyboard 11. make -j EditTextVariations 12. adb install -r $ANDROID_TARGET_OUT_TESTCASES/EditTextVariations/EditTextVariations.apk 13. adb shell am start --user 0 \ -n com.android.inputmethod.tools.edittextvariations/.EditTextVariations 14. Tap the menu icon on the EditTextVariations then click "Direct Reply" 15. adb shell am start --user 10 \ -n com.android.inputmethod.tools.edittextvariations/.EditTextVariations 16. Tap the menu icon on the EditTextVariations then click "Direct Reply" 17. Open notification shade. 18. Tap reply icon on "Message from UserHandle{0}". 19. Make sure that SoftKeyboard Sample IME is shown. 20. Tap reply icon on "Message from UserHandle{10}". 21. Make sure that AOSP Keyboard is shown. 22. Tap reply icon on "Message from UserHandle{0}" again. 23. Make sure that SoftKeyboard Sample IME is shown again. Test: Manually tested Bug 123043618 scenario as follows. 1. Build and flash an AOSP build 2. Create a secondary user then switch to it. 3. make -j SoftKeyboard 4. adb install -r $OUT/system/app/SoftKeyboard/SoftKeyboard.apk 5. adb shell ime enable com.example.android.softkeyboard/.SoftKeyboard 6. adb shell ime set com.example.android.softkeyboard/.SoftKeyboard 7. make -j EditTextVariations 8. adb install -r $ANDROID_TARGET_OUT_TESTCASES/EditTextVariations/EditTextVariations.apk 9. adb shell am start \ -n com.android.inputmethod.tools.edittextvariations/.EditTextVariations 10. Tap the menu icon on the EditTextVariations then click "Direct Reply" 11. Tap reply icon on "Message from UserHandle{10}". 12. Make sure that SoftKeyboard Sample IME is shown. 13. Type "ggggg" then hit the space key. 14. Make sure that red underline is drawn under "ggggg" 15. Make sure that AndroidSpellCheckerService runs as user 10. Test: Manually tested multi-user scenario with per-profile mode as follows. 1. Build and flash an AOSP build 2. adb root 3. adb shell setprop persist.debug.per_profile_ime 1 4. adb reboot 5. Create a secondary user then switch to it. 6. make -j SoftKeyboard 7. adb install -r $OUT/system/app/SoftKeyboard/SoftKeyboard.apk 8. adb shell ime enable com.example.android.softkeyboard/.SoftKeyboard 9. adb shell ime set com.example.android.softkeyboard/.SoftKeyboard 10. make -j EditTextVariations 11. adb install -r $ANDROID_TARGET_OUT_TESTCASES/EditTextVariations/EditTextVariations.apk 12. adb shell am start \ -n com.android.inputmethod.tools.edittextvariations/.EditTextVariations 13. Tap the menu icon on the EditTextVariations then click "Direct Reply" 14. Tap reply icon on "Message from UserHandle{10}". 15. Make sure that SoftKeyboard Sample IME is shown. 16. Type "ggggg" then hit the space key. 17. Make sure that red underline is drawn under "ggggg" 18. Make sure that AndroidSpellCheckerService runs as user 10. 19. Set up a text screenlock. 20. Turn off the display. 21. Turn on the display. 22. Make sure that SoftKeyboard Sample IME is shown. Change-Id: Ibabe13e5b85e5bb91f9f8af6ec07c395c25c4393
Loading
Please register or sign in to comment