diff options
author | Jason Monk <jmonk@google.com> | 2014-05-02 17:04:10 -0400 |
---|---|---|
committer | Jason Monk <jmonk@google.com> | 2014-05-07 09:51:58 -0400 |
commit | b605fecd9e4282823af754b3968b21205d64554a (patch) | |
tree | 219c8859230d703550fb69062ab6ab6f30132c8e | |
parent | 1e68fb3c3842bb90ed3f474cef0ddf7116eace0e (diff) | |
download | frameworks_base-b605fecd9e4282823af754b3968b21205d64554a.zip frameworks_base-b605fecd9e4282823af754b3968b21205d64554a.tar.gz frameworks_base-b605fecd9e4282823af754b3968b21205d64554a.tar.bz2 |
Only show IME in navigation bar when it should
Add a flag to indicate that the IME should be shown. This follows
the continuous ime notification boolean, and if there are multiple
input methods to choose from enabled. This way the notification
and navigation button show up under the same circumstances (but
not on the same devices).
Change-Id: Ia6a2253061f1876f4bcc511de48c1078e9d96be5
8 files changed, 35 insertions, 18 deletions
diff --git a/core/java/com/android/internal/statusbar/IStatusBar.aidl b/core/java/com/android/internal/statusbar/IStatusBar.aidl index d1d1a52..75feb5d 100644 --- a/core/java/com/android/internal/statusbar/IStatusBar.aidl +++ b/core/java/com/android/internal/statusbar/IStatusBar.aidl @@ -33,7 +33,8 @@ oneway interface IStatusBar void animateCollapsePanels(); void setSystemUiVisibility(int vis, int mask); void topAppWindowChanged(boolean menuVisible); - void setImeWindowStatus(in IBinder token, int vis, int backDisposition); + void setImeWindowStatus(in IBinder token, int vis, int backDisposition, + boolean showImeSwitcher); void setHardKeyboardStatus(boolean available, boolean enabled); void toggleRecentApps(); void preloadRecentApps(); diff --git a/core/java/com/android/internal/statusbar/IStatusBarService.aidl b/core/java/com/android/internal/statusbar/IStatusBarService.aidl index 6428e15..f754427 100644 --- a/core/java/com/android/internal/statusbar/IStatusBarService.aidl +++ b/core/java/com/android/internal/statusbar/IStatusBarService.aidl @@ -31,7 +31,8 @@ interface IStatusBarService void setIconVisibility(String slot, boolean visible); void removeIcon(String slot); void topAppWindowChanged(boolean menuVisible); - void setImeWindowStatus(in IBinder token, int vis, int backDisposition); + void setImeWindowStatus(in IBinder token, int vis, int backDisposition, + boolean showImeSwitcher); void expandSettingsPanel(); void setCurrentUser(int newUserId); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java index 3e21640..735cd30 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java @@ -298,7 +298,7 @@ public abstract class BaseStatusBar extends SystemUI implements ArrayList<StatusBarNotification> notifications = new ArrayList<StatusBarNotification>(); mCommandQueue = new CommandQueue(this, iconList); - int[] switches = new int[7]; + int[] switches = new int[8]; ArrayList<IBinder> binders = new ArrayList<IBinder>(); try { mBarService.registerStatusBar(mCommandQueue, iconList, notificationKeys, notifications, @@ -313,7 +313,7 @@ public abstract class BaseStatusBar extends SystemUI implements setSystemUiVisibility(switches[1], 0xffffffff); topAppWindowChanged(switches[2] != 0); // StatusBarManagerService has a back up of IME token and it's restored here. - setImeWindowStatus(binders.get(0), switches[3], switches[4]); + setImeWindowStatus(binders.get(0), switches[3], switches[4], switches[7] != 0); setHardKeyboardStatus(switches[5] != 0, switches[6] != 0); // Set up the initial icon state diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java index bbbe8fa..5362af5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java @@ -65,6 +65,8 @@ public class CommandQueue extends IStatusBar.Stub { public static final int FLAG_EXCLUDE_INPUT_METHODS_PANEL = 1 << 3; public static final int FLAG_EXCLUDE_COMPAT_MODE_PANEL = 1 << 4; + private static final String SHOW_IME_SWITCHER_KEY = "showImeSwitcherKey"; + private StatusBarIconList mList; private Callbacks mCallbacks; private Handler mHandler = new H(); @@ -91,7 +93,8 @@ public class CommandQueue extends IStatusBar.Stub { public void animateExpandSettingsPanel(); public void setSystemUiVisibility(int vis, int mask); public void topAppWindowChanged(boolean visible); - public void setImeWindowStatus(IBinder token, int vis, int backDisposition); + public void setImeWindowStatus(IBinder token, int vis, int backDisposition, + boolean showImeSwitcher); public void setHardKeyboardStatus(boolean available, boolean enabled); public void toggleRecentApps(); public void preloadRecentApps(); @@ -190,11 +193,13 @@ public class CommandQueue extends IStatusBar.Stub { } } - public void setImeWindowStatus(IBinder token, int vis, int backDisposition) { + public void setImeWindowStatus(IBinder token, int vis, int backDisposition, + boolean showImeSwitcher) { synchronized (mList) { mHandler.removeMessages(MSG_SHOW_IME_BUTTON); - mHandler.obtainMessage(MSG_SHOW_IME_BUTTON, vis, backDisposition, token) - .sendToTarget(); + Message m = mHandler.obtainMessage(MSG_SHOW_IME_BUTTON, vis, backDisposition, token); + m.getData().putBoolean(SHOW_IME_SWITCHER_KEY, showImeSwitcher); + m.sendToTarget(); } } @@ -298,7 +303,8 @@ public class CommandQueue extends IStatusBar.Stub { mCallbacks.topAppWindowChanged(msg.arg1 != 0); break; case MSG_SHOW_IME_BUTTON: - mCallbacks.setImeWindowStatus((IBinder) msg.obj, msg.arg1, msg.arg2); + mCallbacks.setImeWindowStatus((IBinder) msg.obj, msg.arg1, msg.arg2, + msg.getData().getBoolean(SHOW_IME_SWITCHER_KEY, false)); break; case MSG_SET_HARD_KEYBOARD_STATUS: mCallbacks.setHardKeyboardStatus(msg.arg1 != 0, msg.arg2 != 0); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java index e154b24..d63cf7b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -2211,7 +2211,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode { } @Override - public void setImeWindowStatus(IBinder token, int vis, int backDisposition) { + public void setImeWindowStatus(IBinder token, int vis, int backDisposition, + boolean showImeSwitcher) { boolean imeShown = (vis & InputMethodService.IME_VISIBLE) != 0; int flags = mNavigationIconHints; if ((backDisposition == InputMethodService.BACK_DISPOSITION_WILL_DISMISS) || imeShown) { @@ -2219,7 +2220,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode { } else { flags &= ~NAVIGATION_HINT_BACK_ALT; } - if (imeShown) { + if (showImeSwitcher) { flags |= NAVIGATION_HINT_IME_SHOWN; } else { flags &= ~NAVIGATION_HINT_IME_SHOWN; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java index d615542..4b3d3b0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java @@ -78,7 +78,8 @@ public class TvStatusBar extends BaseStatusBar { } @Override - public void setImeWindowStatus(IBinder token, int vis, int backDisposition) { + public void setImeWindowStatus(IBinder token, int vis, int backDisposition, + boolean showImeSwitcher) { } @Override diff --git a/services/core/java/com/android/server/InputMethodManagerService.java b/services/core/java/com/android/server/InputMethodManagerService.java index 7ed1cc7..10315a7 100644 --- a/services/core/java/com/android/server/InputMethodManagerService.java +++ b/services/core/java/com/android/server/InputMethodManagerService.java @@ -1532,14 +1532,17 @@ public class InputMethodManagerService extends IInputMethodManager.Stub } mImeWindowVis = vis; mBackDisposition = backDisposition; - if (mStatusBar != null) { - mStatusBar.setImeWindowStatus(token, vis, backDisposition); - } final boolean iconVisibility = ((vis & (InputMethodService.IME_ACTIVE)) != 0) && (mWindowManagerService.isHardKeyboardAvailable() || (vis & (InputMethodService.IME_VISIBLE)) != 0); + final boolean needsToShowImeSwitcher = iconVisibility + && needsToShowImeSwitchOngoingNotification(); + if (mStatusBar != null) { + mStatusBar.setImeWindowStatus(token, vis, backDisposition, + needsToShowImeSwitcher); + } final InputMethodInfo imi = mMethodMap.get(mCurMethodId); - if (imi != null && iconVisibility && needsToShowImeSwitchOngoingNotification()) { + if (imi != null && needsToShowImeSwitcher) { // Used to load label final CharSequence title = mRes.getText( com.android.internal.R.string.select_input_method); diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java index 91f796b..63770e7 100644 --- a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java +++ b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java @@ -74,6 +74,7 @@ public class StatusBarManagerService extends IStatusBarService.Stub private boolean mMenuVisible = false; private int mImeWindowVis = 0; private int mImeBackDisposition; + private boolean mShowImeSwitcher; private IBinder mImeToken = null; private int mCurrentUserId; @@ -346,7 +347,8 @@ public class StatusBarManagerService extends IStatusBarService.Stub } @Override - public void setImeWindowStatus(final IBinder token, final int vis, final int backDisposition) { + public void setImeWindowStatus(final IBinder token, final int vis, final int backDisposition, + final boolean showImeSwitcher) { enforceStatusBar(); if (SPEW) { @@ -360,11 +362,12 @@ public class StatusBarManagerService extends IStatusBarService.Stub mImeWindowVis = vis; mImeBackDisposition = backDisposition; mImeToken = token; + mShowImeSwitcher = showImeSwitcher; mHandler.post(new Runnable() { public void run() { if (mBar != null) { try { - mBar.setImeWindowStatus(token, vis, backDisposition); + mBar.setImeWindowStatus(token, vis, backDisposition, showImeSwitcher); } catch (RemoteException ex) { } } @@ -512,6 +515,7 @@ public class StatusBarManagerService extends IStatusBarService.Stub switches[2] = mMenuVisible ? 1 : 0; switches[3] = mImeWindowVis; switches[4] = mImeBackDisposition; + switches[7] = mShowImeSwitcher ? 1 : 0; binders.add(mImeToken); } switches[5] = mWindowManager.isHardKeyboardAvailable() ? 1 : 0; |