summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSeigo Nonaka <nona@google.com>2015-04-15 18:31:32 +0900
committerSeigo Nonaka <nona@google.com>2015-04-24 13:17:03 -0700
commit98d88028ae449fccfa8bace0d4ed3e34f6290658 (patch)
tree959d136d508b6bd47bae48b57193eee4e2239c3b
parent7defaef1bfc05757652d3a5d00d35090397e7f3e (diff)
downloadframeworks_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.java10
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();
}