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

Commit d547e9d0 authored by Danny Baumann's avatar Danny Baumann Committed by Gerrit Code Review
Browse files

Fix glitch appearing when using translucent system bars in landscape.

Before: http://i.imgur.com/zJCjCvx.png
After: http://i.imgur.com/v563Shz.png

Change-Id: I0580ced6dcd614239ea0815bc9943c9bbe86eb99
parent d7cfbbe8
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -239,6 +239,13 @@
            systemui:orientation="vertical"
            android:layout_gravity="top"
            />

        <View
            android:id="@+id/status_bar_blocker"
            android:layout_width="match_parent"
            android:layout_height="@*android:dimen/status_bar_height"
            android:alpha="0"
            />
    </FrameLayout>

    <!-- not used -->
+6 −0
Original line number Diff line number Diff line
@@ -38,6 +38,8 @@ public final class NavigationBarTransitions extends BarTransitions {
    private final NavigationBarView mView;
    private final IStatusBarService mBarService;

    private View mStatusBarBlocker;

    private boolean mLightsOut;
    private boolean mVertical;
    private boolean mLeftIfVertical;
@@ -53,6 +55,7 @@ public final class NavigationBarTransitions extends BarTransitions {
    }

    public void init(boolean isVertical) {
        mStatusBarBlocker = mView.findViewById(R.id.status_bar_blocker);
        setVertical(isVertical);
        applyModeBackground(-1, getMode(), false /*animate*/);
        applyMode(getMode(), false /*animate*/, true /*force*/);
@@ -112,6 +115,9 @@ public final class NavigationBarTransitions extends BarTransitions {

        // apply to lights out
        applyLightsOut(mode == MODE_LIGHTS_OUT, animate, force);

        final boolean isTranslucent = mode != MODE_OPAQUE && mode != MODE_LIGHTS_OUT;
        fadeContent(mStatusBarBlocker, isTranslucent ? 1f : 0f);
    }

    private void setKeyButtonViewQuiescentAlpha(ButtonInfo info, float alpha, boolean animate) {
+27 −0
Original line number Diff line number Diff line
@@ -111,6 +111,7 @@ public class NavigationBarView extends LinearLayout {
    private DelegateViewHelper mDelegateHelper;
    private DeadZone mDeadZone;
    private final NavigationBarTransitions mBarTransitions;
    private StatusBarBlockerTransitions mStatusBarBlockerTransitions;

    private boolean mHasCmKeyguard = false;
    private boolean mModLockDisabled = true;
@@ -292,6 +293,10 @@ public class NavigationBarView extends LinearLayout {
        return mBarTransitions;
    }

    public BarTransitions getStatusBarBlockerTransitions() {
        return mStatusBarBlockerTransitions;
    }

    public void setDelegateView(View view) {
        mDelegateHelper.setDelegateView(view);
    }
@@ -403,6 +408,7 @@ public class NavigationBarView extends LinearLayout {
        mThemedResources = res;
        getIcons(mThemedResources);
        mBarTransitions.updateResources(res);
        mStatusBarBlockerTransitions.updateResources(res);
        for (int i = 0; i < mRotatedViews.length; i++) {
            ViewGroup container = (ViewGroup) mRotatedViews[i];
            if (container != null) {
@@ -670,6 +676,9 @@ public class NavigationBarView extends LinearLayout {
        mRotatedViews[Configuration.ORIENTATION_LANDSCAPE] = findViewById(R.id.rot90);
        mCurrentView = mRotatedViews[mContext.getResources().getConfiguration().orientation];

        mStatusBarBlockerTransitions = new StatusBarBlockerTransitions(
                findViewById(R.id.status_bar_blocker));

        watchForAccessibilityChanges();
    }

@@ -763,6 +772,7 @@ public class NavigationBarView extends LinearLayout {

        // force the low profile & disabled states into compliance
        mBarTransitions.init(mVertical);
        mStatusBarBlockerTransitions.init();
        setDisabledFlags(mDisabledFlags, true /* force */);
        setMenuVisibility(mShowMenu, true /* force */);

@@ -987,4 +997,21 @@ public class NavigationBarView extends LinearLayout {
            setNavigationIconHints(mNavigationIconHints, true);
        }
    }

    private static class StatusBarBlockerTransitions extends BarTransitions {
        public StatusBarBlockerTransitions(View statusBarBlocker) {
            super(statusBarBlocker, R.drawable.status_background,
                    R.color.status_bar_background_opaque,
                    R.color.status_bar_background_semi_transparent);
        }

        public void init() {
            applyModeBackground(-1, getMode(), false /*animate*/);
        }

        @Override
        protected void onTransition(int oldMode, int newMode, boolean animate) {
            super.onTransition(oldMode, newMode, animate);
        }
    }
}
+15 −6
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ 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;
import static com.android.systemui.statusbar.phone.BarTransitions.MODE_TRANSLUCENT;
import static com.android.systemui.statusbar.phone.BarTransitions.MODE_TRANSPARENT;
import static com.android.systemui.statusbar.phone.BarTransitions.MODE_LIGHTS_OUT;

import android.animation.Animator;
@@ -2487,6 +2488,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
            if (!showing) {
                mStatusBarView.collapseAllPanels(false);
            }
            checkBarModes();
        }
        if (mNavigationBarView != null
                && window == StatusBarManager.WINDOW_NAVIGATION_BAR
@@ -2603,22 +2605,25 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
            // if dual panels are expandable, force the status bar opaque on any interaction
            sbMode = MODE_OPAQUE;
        }
        checkBarMode(sbMode, mStatusBarWindowState, mStatusBarView.getBarTransitions());
        boolean animateSb = shouldAnimateBarTransition(sbMode, mStatusBarWindowState);
        mStatusBarView.getBarTransitions().transitionTo(sbMode, animateSb);
        if (mNavigationBarView != null) {
            checkBarMode(mNavigationBarMode,
                    mNavigationBarWindowState, mNavigationBarView.getBarTransitions());
            mNavigationBarView.getBarTransitions().transitionTo(mNavigationBarMode,
                    shouldAnimateBarTransition(mNavigationBarMode, mNavigationBarWindowState));
            int sbbMode = mStatusBarWindowState == WINDOW_STATE_HIDDEN ? MODE_TRANSPARENT : sbMode;
            mNavigationBarView.getStatusBarBlockerTransitions().transitionTo(sbbMode, animateSb);
        }
    }

    private void checkBarMode(int mode, int windowState, BarTransitions transitions) {
        final boolean anim = (mScreenOn == null || mScreenOn) && windowState != WINDOW_STATE_HIDDEN;
        transitions.transitionTo(mode, anim);
    private boolean shouldAnimateBarTransition(int mode, int windowState) {
        return (mScreenOn == null || mScreenOn) && windowState != WINDOW_STATE_HIDDEN;
    }

    private void finishBarAnimations() {
        mStatusBarView.getBarTransitions().finishAnimations();
        if (mNavigationBarView != null) {
            mNavigationBarView.getBarTransitions().finishAnimations();
            mNavigationBarView.getStatusBarBlockerTransitions().finishAnimations();
        }
    }

@@ -2850,6 +2855,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
            pw.print("  mNavigationBarMode=");
            pw.println(BarTransitions.modeToString(mNavigationBarMode));
            dumpBarTransitions(pw, "mNavigationBarView", mNavigationBarView.getBarTransitions());
            dumpBarTransitions(pw, "mStatusBarBlocker",
                    mNavigationBarView.getStatusBarBlockerTransitions());
        }

        pw.print("  mNavigationBarView=");
@@ -3639,6 +3646,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
                }
                if (mNavigationBarView != null) {
                    mNavigationBarView.getBarTransitions().transitionTo(barMode, animate);
                    mNavigationBarView.getStatusBarBlockerTransitions().transitionTo(
                            barMode, animate);
                }
            }
        }