diff options
author | Seigo Nonaka <nona@google.com> | 2015-04-15 18:31:32 +0900 |
---|---|---|
committer | Seigo Nonaka <nona@google.com> | 2015-04-24 13:17:03 -0700 |
commit | 98d88028ae449fccfa8bace0d4ed3e34f6290658 (patch) | |
tree | 959d136d508b6bd47bae48b57193eee4e2239c3b | |
parent | 7defaef1bfc05757652d3a5d00d35090397e7f3e (diff) | |
download | frameworks_base-98d88028ae449fccfa8bace0d4ed3e34f6290658.zip frameworks_base-98d88028ae449fccfa8bace0d4ed3e34f6290658.tar.gz frameworks_base-98d88028ae449fccfa8bace0d4ed3e34f6290658.tar.bz2 |
Notify IME visibility when showWindow is called.
To change the back icon, need to notify IME visibility to the
InputMethodManagerService when guest IME service calls showWindow().
IME can call showWindow() if it want to show software input, but it
doesn't send IME_VISIBLE state to the InputMethodManagerService,
hence the arrow icon is different from what we expect. This
typically happens when Latin IME shows Emoji panel by left-alt keys.
Bug: 20318050
Change-Id: I0ec2c71ad9bc3b7e9259d9180375d9062fc7e154
-rw-r--r-- | core/java/android/inputmethodservice/InputMethodService.java | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/core/java/android/inputmethodservice/InputMethodService.java b/core/java/android/inputmethodservice/InputMethodService.java index 481fc2f..1b57055 100644 --- a/core/java/android/inputmethodservice/InputMethodService.java +++ b/core/java/android/inputmethodservice/InputMethodService.java @@ -1440,7 +1440,8 @@ public class InputMethodService extends AbstractInputMethodService { void showWindowInner(boolean showInput) { boolean doShowInput = false; - boolean wasVisible = mWindowVisible; + final int previousImeWindowStatus = + (mWindowVisible ? IME_ACTIVE : 0) | (isInputViewShown() ? IME_VISIBLE : 0); mWindowVisible = true; if (!mShowInputRequested) { if (mInputStarted) { @@ -1485,9 +1486,12 @@ public class InputMethodService extends AbstractInputMethodService { startExtractingText(false); } - if (!wasVisible) { + final int nextImeWindowStatus = IME_ACTIVE | (isInputViewShown() ? IME_VISIBLE : 0); + if (previousImeWindowStatus != nextImeWindowStatus) { + mImm.setImeWindowStatus(mToken, nextImeWindowStatus, mBackDisposition); + } + if ((previousImeWindowStatus & IME_ACTIVE) == 0) { if (DEBUG) Log.v(TAG, "showWindow: showing!"); - mImm.setImeWindowStatus(mToken, IME_ACTIVE, mBackDisposition); onWindowShown(); mWindow.show(); } |