Skip to content
Commit 1f9a3cbe authored by Yohei Yukawa's avatar Yohei Yukawa
Browse files

IMMS should preserve enabled/selected IMEs upon boot

This is a follow up CL to my refactoring CL [1], which unintentionally
changed the condition to reset default enabled IMEs when the device
boots up.

Previously, InputMethodManagerService (IMMS) resets default enabled
IMEs upon device boot only for the first boot scenario, by checking
whether Settings.Secure.DEFAULT_INPUT_METHOD is already set or not.

My refactoring CL accidentally replaced that check with unconditional
"true", which means now IMMS always resets default enabled IMEs every
time the device boots up.  This behavior change is of course
unintentional but has no effect after the user unlocks the device
because IMMS also discard all the settings change made while
UserManager.isUserUnlocked() returns false [2].  Hence the above
behavior change is completely hidden on direct-boot disabled devices,
where the system behaves as if the user unlocked the device
immediately after the boot is completed.  The behavior change is
observable only on direct-boot devices.

Anyway, IMMS should try to do its best to keep the last used IME and
user selected IMEs even in user locked state as long as those IMEs
are compatible with direct-boot.  This CL revives the previous
behavior by adding the same condition check again.

 [1]: I5b37c450db4b25b3e635b6d634293a34eec8b9d4
      7924782c
 [2]: Ifa2225070bf8223f8964cf063c86889e312c5e9a
      ed4952ad

Fixes: 67093433
Fixes: 67491290
Test: Manually verified as follows
      1. Check out AOSP master
      2. Build an OS image for a direct-boot aware device then
         flash it.
      3. Open
            development/samples/SoftKeyboard/AndroidManifest.xml
         then add
            android:directBootAware="true"
         to the IME service.
      4. Open
            development/samples/SoftKeyboard/res/xml/method.xml
         then add
            android:isAsciiCapable="true"
         to "en_US" IME subtype.
      5. tapas SoftKeyboard
      6. make -j
      7. adb install -r $OUT/system/app/SoftKeyboard/SoftKeyboard.apk
      8. Open system settings:
           System -> Languages & input -> Virtual keyboard
	     -> Manage keyboards
      9. Enable Sample Soft keyboard
     10. Disable Android Keyboard (AOSP)
     11. Open system settings:
           Security -> Screen lock -> Password
         then set up a device password "aaaa".
     12. Reboot the device.
     13. Make sure that
          * Sample Soft keyboard is shown in the unlock screen.
          * AOSP Keyboard is not enabled in the unlock screen.
Change-Id: Id624d577d941245cca944498dc6935eb364865cf
parent 9009eabb
Loading
Loading
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment