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

Commit d896a407 authored by John Spurlock's avatar John Spurlock Committed by Android Git Automerger
Browse files

am f016a912: Merge "Ensure IME windows always appear north of the nav bar." into klp-dev

* commit 'f016a912':
  Ensure IME windows always appear north of the nav bar.
parents 20bed3b1 f016a912
Loading
Loading
Loading
Loading
+1 −5
Original line number Diff line number Diff line
@@ -1102,11 +1102,7 @@ public abstract class BaseStatusBar extends SystemUI implements
        return km.inKeyguardRestrictedInputMode();
    }

    public void suspendAutohide() {
        // hook for subclasses
    }

    public void resumeAutohide() {
    public void setInteracting(boolean interacting) {
        // hook for subclasses
    }

+2 −2
Original line number Diff line number Diff line
@@ -86,9 +86,9 @@ public class DelegateViewHelper {
        }

        if (action == MotionEvent.ACTION_DOWN) {
            mBar.suspendAutohide();
            mBar.setInteracting(true);
        } else if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) {
            mBar.resumeAutohide();
            mBar.setInteracting(false);
        }

        mDelegateView.getLocationOnScreen(mTempPoint);
+0 −11
Original line number Diff line number Diff line
@@ -64,17 +64,6 @@ public class BarTransitions {
        return mMode;
    }

    public void setTransparent(Drawable transparent) {
        mTransparent = transparent;
        if (mMode == MODE_TRANSPARENT) {
            transitionTo(MODE_TRANSPARENT);
        }
    }

    public void transitionTo(int mode) {
        transitionTo(mode, false);
    }

    public void transitionTo(int mode, boolean animate) {
        if (mMode == mode) return;
        int oldMode = mMode;
+10 −0
Original line number Diff line number Diff line
@@ -112,9 +112,11 @@ public class NavigationBarView extends LinearLayout {
    }

    private final class NavigationBarTransitions extends BarTransitions {
        private static final boolean ENABLE_GRADIENT = false;  // until we can smooth transition

        private final Drawable mTransparentBottom;
        private final Drawable mTransparentRight;
        private final int mTransparentColor;

        public NavigationBarTransitions(Context context) {
            super(context, NavigationBarView.this);
@@ -125,12 +127,20 @@ public class NavigationBarView extends LinearLayout {
            };
            mTransparentBottom = new GradientDrawable(Orientation.BOTTOM_TOP, gradientColors);
            mTransparentRight = new GradientDrawable(Orientation.RIGHT_LEFT, gradientColors);
            mTransparentColor = res.getColor(R.color.status_bar_background_transparent);
        }

        public void setVertical(boolean isVertical) {
            if (!ENABLE_GRADIENT) return;
            mTransparent = isVertical ? mTransparentRight : mTransparentBottom;
        }

        @Override
        protected Integer getBackgroundColor(int mode) {
            if (!ENABLE_GRADIENT && mode == MODE_TRANSPARENT) return mTransparentColor;
            return super.getBackgroundColor(mode);
        }

        @Override
        protected void onTransition(int oldMode, int newMode, boolean animate) {
            super.onTransition(oldMode, newMode, animate);
+70 −37
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.systemui.statusbar.phone;

import static android.app.StatusBarManager.NAVIGATION_HINT_BACK_ALT;
import static android.app.StatusBarManager.WINDOW_STATE_SHOWING;
import static android.app.StatusBarManager.windowStateToString;
import static com.android.systemui.statusbar.phone.BarTransitions.MODE_OPAQUE;
import static com.android.systemui.statusbar.phone.BarTransitions.MODE_SEMI_TRANSPARENT;
@@ -170,7 +172,7 @@ public class PhoneStatusBar extends BaseStatusBar {

    StatusBarWindowView mStatusBarWindow;
    PhoneStatusBarView mStatusBarView;
    private int mStatusBarWindowState;
    private int mStatusBarWindowState = WINDOW_STATE_SHOWING;

    int mPixelFormat;
    Object mQueueLock = new Object();
@@ -234,7 +236,7 @@ public class PhoneStatusBar extends BaseStatusBar {

    // on-screen navigation buttons
    private NavigationBarView mNavigationBarView = null;
    private int mNavigationBarWindowState;
    private int mNavigationBarWindowState = WINDOW_STATE_SHOWING;

    // the tracker view
    int mTrackingPosition; // the position of the top of the tracking view.
@@ -312,7 +314,10 @@ public class PhoneStatusBar extends BaseStatusBar {
        }
    };

    private boolean mInteracting;
    private boolean mAutohideSuspended;
    private int mStatusBarMode;
    private int mNavigationBarMode;

    private final Runnable mAutohide = new Runnable() {
        @Override
@@ -1394,7 +1399,7 @@ public class PhoneStatusBar extends BaseStatusBar {

        visibilityChanged(true);

        suspendAutohide();
        setInteracting(true);
    }

    public void animateCollapsePanels() {
@@ -1678,8 +1683,7 @@ public class PhoneStatusBar extends BaseStatusBar {
            mPostCollapseCleanup = null;
        }

        // Reschedule suspended auto-hide if necessary
        resumeAutohide();
        setInteracting(false);
    }

    /**
@@ -1826,7 +1830,7 @@ public class PhoneStatusBar extends BaseStatusBar {
            hideCling();
        }

        suspendAutohide();
        setInteracting(true);
        return false;
    }

@@ -1843,11 +1847,12 @@ public class PhoneStatusBar extends BaseStatusBar {
        if (mNavigationBarView != null) {
            mNavigationBarView.setNavigationIconHints(hints);
        }
        checkBarModes();
    }

    @Override // CommandQueue
    public void setWindowState(int window, int state) {
        boolean showing = state == StatusBarManager.WINDOW_STATE_SHOWING;
        boolean showing = state == WINDOW_STATE_SHOWING;
        if (mStatusBarWindow != null
                && window == StatusBarManager.WINDOW_STATUS_BAR
                && mStatusBarWindowState != state) {
@@ -1898,17 +1903,28 @@ public class PhoneStatusBar extends BaseStatusBar {
            }

            // update status bar mode
            int sbMode = updateBarMode(oldVal, newVal, mStatusBarView.getBarTransitions(),
                    View.STATUS_BAR_TRANSIENT, View.SYSTEM_UI_FLAG_TRANSPARENT_STATUS,
                    mStatusBarWindowState);
            final int sbMode = computeBarMode(oldVal, newVal, mStatusBarView.getBarTransitions(),
                    View.STATUS_BAR_TRANSIENT, View.SYSTEM_UI_FLAG_TRANSPARENT_STATUS);

            // update navigation bar mode
            int nbMode = mNavigationBarView == null ? -1 : updateBarMode(
            final int nbMode = mNavigationBarView == null ? -1 : computeBarMode(
                    oldVal, newVal, mNavigationBarView.getBarTransitions(),
                    View.NAVIGATION_BAR_TRANSIENT, View.SYSTEM_UI_FLAG_TRANSPARENT_NAVIGATION,
                    mNavigationBarWindowState);

            if (sbMode != -1 || nbMode != -1) {
                    View.NAVIGATION_BAR_TRANSIENT, View.SYSTEM_UI_FLAG_TRANSPARENT_NAVIGATION);
            final boolean sbModeChanged = sbMode != -1;
            final boolean nbModeChanged = nbMode != -1;
            boolean checkBarModes = false;
            if (sbModeChanged && sbMode != mStatusBarMode) {
                mStatusBarMode = sbMode;
                checkBarModes = true;
            }
            if (nbModeChanged && nbMode != mNavigationBarMode) {
                mNavigationBarMode = nbMode;
                checkBarModes = true;
            }
            if (checkBarModes) {
                checkBarModes();
            }
            if (sbModeChanged || nbModeChanged) {
                // update transient bar autohide
                if (sbMode == MODE_SEMI_TRANSPARENT || nbMode == MODE_SEMI_TRANSPARENT) {
                    scheduleAutohide();
@@ -1935,15 +1951,13 @@ public class PhoneStatusBar extends BaseStatusBar {
        return mStatusBarView.getBarTransitions().getMode();
    }

    private int updateBarMode(int oldVis, int newVis, BarTransitions transitions,
            int transientFlag, int transparentFlag, int windowState) {
    private int computeBarMode(int oldVis, int newVis, BarTransitions transitions,
            int transientFlag, int transparentFlag) {
        final int oldMode = barMode(oldVis, transientFlag, transparentFlag);
        final int newMode = barMode(newVis, transientFlag, transparentFlag);
        if (oldMode == newMode) {
            return -1; // no mode change
        }
        final boolean animate = windowState == StatusBarManager.WINDOW_STATE_SHOWING;
        transitions.transitionTo(newMode, animate);
        return newMode;
    }

@@ -1953,35 +1967,49 @@ public class PhoneStatusBar extends BaseStatusBar {
                : MODE_OPAQUE;
    }

    private final Runnable mResumeSemiTransparent = new Runnable() {
    private void checkBarModes() {
        checkBarMode(mStatusBarMode, mStatusBarWindowState, mStatusBarView.getBarTransitions());
        if (mNavigationBarView != null) {
            checkBarMode(mNavigationBarMode,
                    mNavigationBarWindowState, mNavigationBarView.getBarTransitions());
        }
    }

    private void checkBarMode(int mode, int windowState, BarTransitions transitions) {
        final boolean imeVisible = (mNavigationIconHints & NAVIGATION_HINT_BACK_ALT) != 0;
        final int finalMode = imeVisible || mInteracting ? MODE_OPAQUE : mode;
        final boolean animate = windowState == WINDOW_STATE_SHOWING;
        transitions.transitionTo(finalMode, animate);
    }

    private final Runnable mCheckBarModes = new Runnable() {
        @Override
        public void run() {
            if ((mSystemUiVisibility & STATUS_OR_NAV_TRANSIENT) != 0) {
                animateTransitionTo(BarTransitions.MODE_SEMI_TRANSPARENT);
            }
            checkBarModes();
        }};

    @Override
    public void resumeAutohide() {
        if (mAutohideSuspended) {
            scheduleAutohide();
            mHandler.postDelayed(mResumeSemiTransparent, 500); // longer than home -> launcher
    public void setInteracting(boolean interacting) {
        mInteracting = interacting;
        if (mInteracting) {
            suspendAutohide();
        } else {
            resumeSuspendedAutohide();
        }
        checkBarModes();
    }

    private void animateTransitionTo(int newMode) {
        mStatusBarView.getBarTransitions().transitionTo(newMode, true /*animate*/);
        if (mNavigationBarView != null) {
            mNavigationBarView.getBarTransitions().transitionTo(newMode, true /*animate*/);
    private void resumeSuspendedAutohide() {
        if (mAutohideSuspended) {
            scheduleAutohide();
            mHandler.postDelayed(mCheckBarModes, 500); // longer than home -> launcher
        }
    }

    @Override
    public void suspendAutohide() {
    private void suspendAutohide() {
        mHandler.removeCallbacks(mAutohide);
        mHandler.removeCallbacks(mResumeSemiTransparent);
        mHandler.removeCallbacks(mCheckBarModes);
        mAutohideSuspended = (mSystemUiVisibility & STATUS_OR_NAV_TRANSIENT) != 0;
        animateTransitionTo(BarTransitions.MODE_OPAQUE);
    }

    private void cancelAutohide() {
@@ -2087,8 +2115,8 @@ public class PhoneStatusBar extends BaseStatusBar {
            || ((vis & InputMethodService.IME_VISIBLE) != 0);

        mCommandQueue.setNavigationIconHints(
                altBack ? (mNavigationIconHints | StatusBarManager.NAVIGATION_HINT_BACK_ALT)
                        : (mNavigationIconHints & ~StatusBarManager.NAVIGATION_HINT_BACK_ALT));
                altBack ? (mNavigationIconHints | NAVIGATION_HINT_BACK_ALT)
                        : (mNavigationIconHints & ~NAVIGATION_HINT_BACK_ALT));
        if (mQS != null) mQS.setImeWindowStatus(vis > 0);
    }

@@ -2186,12 +2214,17 @@ public class PhoneStatusBar extends BaseStatusBar {
                    + " scroll " + mScrollView.getScrollX() + "," + mScrollView.getScrollY());
        }

        pw.print("  mInteracting="); pw.println(mInteracting);
        pw.print("  mStatusBarWindowState=");
        pw.println(windowStateToString(mStatusBarWindowState));
        pw.print("  mStatusBarMode=");
        pw.println(BarTransitions.modeToString(mStatusBarMode));
        dumpBarTransitions(pw, "mStatusBarView", mStatusBarView.getBarTransitions());
        if (mNavigationBarView != null) {
            pw.print("  mNavigationBarWindowState=");
            pw.println(windowStateToString(mNavigationBarWindowState));
            pw.print("  mNavigationBarMode=");
            pw.println(BarTransitions.modeToString(mNavigationBarMode));
            dumpBarTransitions(pw, "mNavigationBarView", mNavigationBarView.getBarTransitions());
        }

Loading