Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b605fecd authored by Jason Monk's avatar Jason Monk
Browse files

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
parent 1e68fb3c
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -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();
+2 −1
Original line number Diff line number Diff line
@@ -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);

+2 −2
Original line number Diff line number Diff line
@@ -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
+11 −5
Original line number Diff line number Diff line
@@ -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);
+3 −2
Original line number Diff line number Diff line
@@ -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;
Loading