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 Original line Diff line number Diff line
@@ -1102,11 +1102,7 @@ public abstract class BaseStatusBar extends SystemUI implements
        return km.inKeyguardRestrictedInputMode();
        return km.inKeyguardRestrictedInputMode();
    }
    }


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

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


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


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


        mDelegateView.getLocationOnScreen(mTempPoint);
        mDelegateView.getLocationOnScreen(mTempPoint);
+0 −11
Original line number Original line Diff line number Diff line
@@ -64,17 +64,6 @@ public class BarTransitions {
        return mMode;
        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) {
    public void transitionTo(int mode, boolean animate) {
        if (mMode == mode) return;
        if (mMode == mode) return;
        int oldMode = mMode;
        int oldMode = mMode;
+10 −0
Original line number Original line Diff line number Diff line
@@ -112,9 +112,11 @@ public class NavigationBarView extends LinearLayout {
    }
    }


    private final class NavigationBarTransitions extends BarTransitions {
    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 mTransparentBottom;
        private final Drawable mTransparentRight;
        private final Drawable mTransparentRight;
        private final int mTransparentColor;


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


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


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

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


package com.android.systemui.statusbar.phone;
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 android.app.StatusBarManager.windowStateToString;
import static com.android.systemui.statusbar.phone.BarTransitions.MODE_OPAQUE;
import static com.android.systemui.statusbar.phone.BarTransitions.MODE_OPAQUE;
import static com.android.systemui.statusbar.phone.BarTransitions.MODE_SEMI_TRANSPARENT;
import static com.android.systemui.statusbar.phone.BarTransitions.MODE_SEMI_TRANSPARENT;
@@ -170,7 +172,7 @@ public class PhoneStatusBar extends BaseStatusBar {


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


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


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


    // the tracker view
    // the tracker view
    int mTrackingPosition; // the position of the top of the tracking 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 boolean mAutohideSuspended;
    private int mStatusBarMode;
    private int mNavigationBarMode;


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


        visibilityChanged(true);
        visibilityChanged(true);


        suspendAutohide();
        setInteracting(true);
    }
    }


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


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


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


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


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


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


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


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

            final boolean nbModeChanged = nbMode != -1;
            if (sbMode != -1 || 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
                // update transient bar autohide
                if (sbMode == MODE_SEMI_TRANSPARENT || nbMode == MODE_SEMI_TRANSPARENT) {
                if (sbMode == MODE_SEMI_TRANSPARENT || nbMode == MODE_SEMI_TRANSPARENT) {
                    scheduleAutohide();
                    scheduleAutohide();
@@ -1935,15 +1951,13 @@ public class PhoneStatusBar extends BaseStatusBar {
        return mStatusBarView.getBarTransitions().getMode();
        return mStatusBarView.getBarTransitions().getMode();
    }
    }


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


@@ -1953,35 +1967,49 @@ public class PhoneStatusBar extends BaseStatusBar {
                : MODE_OPAQUE;
                : 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
        @Override
        public void run() {
        public void run() {
            if ((mSystemUiVisibility & STATUS_OR_NAV_TRANSIENT) != 0) {
            checkBarModes();
                animateTransitionTo(BarTransitions.MODE_SEMI_TRANSPARENT);
            }
        }};
        }};


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


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


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


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


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


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


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


Loading