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

Commit 91bab13b authored by John Spurlock's avatar John Spurlock Committed by Android (Google) Code Review
Browse files

Merge "Transition bars to opaque on user interaction." into klp-dev

parents 9bf6f5b0 3b139a9e
Loading
Loading
Loading
Loading
+40 −15
Original line number Original line Diff line number Diff line
@@ -16,6 +16,9 @@


package com.android.systemui.statusbar.phone;
package com.android.systemui.statusbar.phone;


import android.animation.ArgbEvaluator;
import android.animation.ValueAnimator;
import android.animation.ValueAnimator.AnimatorUpdateListener;
import android.app.ActivityManager;
import android.app.ActivityManager;
import android.content.Context;
import android.content.Context;
import android.content.res.Resources;
import android.content.res.Resources;
@@ -29,25 +32,31 @@ import com.android.systemui.R;
public class BarTransitions {
public class BarTransitions {
    private static final boolean DEBUG = false;
    private static final boolean DEBUG = false;


    public static final int MODE_NORMAL = 0;
    public static final int MODE_OPAQUE = 0;
    public static final int MODE_SEMI_TRANSPARENT = 1;
    public static final int MODE_SEMI_TRANSPARENT = 1;
    public static final int MODE_TRANSPARENT = 2;
    public static final int MODE_TRANSPARENT = 2;


    private final String mTag;
    private final String mTag;
    private final View mTarget;
    private final View mTarget;
    private final Drawable mOpaque;
    private final int mOpaque;
    private final Drawable mSemiTransparent;
    private final int mSemiTransparent;


    protected Drawable mTransparent;
    protected Drawable mTransparent;
    private int mMode;
    private int mMode;


    private final AnimatorUpdateListener mBackgroundColorListener = new AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator animator) {
            mTarget.setBackgroundColor((Integer) animator.getAnimatedValue());
        }
    };

    public BarTransitions(Context context, View target) {
    public BarTransitions(Context context, View target) {
        mTag = "BarTransitions." + target.getClass().getSimpleName();
        mTag = "BarTransitions." + target.getClass().getSimpleName();
        mTarget = target;
        mTarget = target;
        final Resources res = context.getResources();
        final Resources res = context.getResources();
        mOpaque = new ColorDrawable(res.getColor(R.drawable.status_bar_background));
        mOpaque = res.getColor(R.drawable.status_bar_background);
        mSemiTransparent =
        mSemiTransparent = res.getColor(R.color.status_bar_background_semi_transparent);
                new ColorDrawable(res.getColor(R.color.status_bar_background_semi_transparent));
    }
    }


    public void setTransparent(Drawable transparent) {
    public void setTransparent(Drawable transparent) {
@@ -58,24 +67,40 @@ public class BarTransitions {
    }
    }


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

    public void transitionTo(int mode, boolean animate) {
        if (mMode == mode) return;
        if (mMode == mode) return;
        int oldMode = mMode;
        int oldMode = mMode;
        mMode = mode;
        mMode = mode;
        if (!ActivityManager.isHighEndGfx()) return;
        if (!ActivityManager.isHighEndGfx()) return;
        if (DEBUG) Log.d(mTag, String.format("transition from %s to %s",
        if (DEBUG) Log.d(mTag, modeToString(oldMode) + " -> " + modeToString(mode));
                modeToString(oldMode), modeToString(mode)));
        onTransition(oldMode, mMode, animate);
        onTransition(oldMode, mMode);
    }

    protected void onTransition(int oldMode, int newMode, boolean animate) {
        if (animate && oldMode == MODE_SEMI_TRANSPARENT && newMode == MODE_OPAQUE) {
            startColorAnimation(mSemiTransparent, mOpaque);
        } else if (animate && oldMode == MODE_OPAQUE && newMode == MODE_SEMI_TRANSPARENT) {
            startColorAnimation(mOpaque, mSemiTransparent);
        } else if (newMode == MODE_OPAQUE || newMode == MODE_SEMI_TRANSPARENT) {
            mTarget.setBackgroundColor(newMode == MODE_OPAQUE ? mOpaque : mSemiTransparent);
        } else {
            mTarget.setBackground(newMode == MODE_TRANSPARENT? mTransparent
                    : newMode == MODE_SEMI_TRANSPARENT ? new ColorDrawable(mSemiTransparent)
                    : new ColorDrawable(mOpaque));
        }
    }
    }


    protected void onTransition(int oldMode, int newMode) {
    private void startColorAnimation(int from, int to) {
        Drawable background = newMode == MODE_SEMI_TRANSPARENT ? mSemiTransparent
        ValueAnimator anim = ValueAnimator.ofObject(new ArgbEvaluator(), from, to);
                : newMode == MODE_TRANSPARENT ? mTransparent
        anim.addUpdateListener(mBackgroundColorListener);
                : mOpaque;
        anim.start();
        mTarget.setBackground(background);
    }
    }


    public static String modeToString(int mode) {
    public static String modeToString(int mode) {
        if (mode == MODE_NORMAL) return "MODE_NORMAL";
        if (mode == MODE_OPAQUE) return "MODE_OPAQUE";
        if (mode == MODE_SEMI_TRANSPARENT) return "MODE_SEMI_TRANSPARENT";
        if (mode == MODE_SEMI_TRANSPARENT) return "MODE_SEMI_TRANSPARENT";
        if (mode == MODE_TRANSPARENT) return "MODE_TRANSPARENT";
        if (mode == MODE_TRANSPARENT) return "MODE_TRANSPARENT";
        throw new IllegalArgumentException("Unknown mode " + mode);
        throw new IllegalArgumentException("Unknown mode " + mode);
+3 −3
Original line number Original line Diff line number Diff line
@@ -132,9 +132,9 @@ public class NavigationBarView extends LinearLayout {
        }
        }


        @Override
        @Override
        protected void onTransition(int oldMode, int newMode) {
        protected void onTransition(int oldMode, int newMode, boolean animate) {
            super.onTransition(oldMode, newMode);
            super.onTransition(oldMode, newMode, animate);
            final float alpha = newMode == MODE_NORMAL ? KeyButtonView.DEFAULT_QUIESCENT_ALPHA : 1f;
            final float alpha = newMode == MODE_OPAQUE ? KeyButtonView.DEFAULT_QUIESCENT_ALPHA : 1f;
            setKeyButtonViewQuiescentAlpha(getBackButton(), alpha);
            setKeyButtonViewQuiescentAlpha(getBackButton(), alpha);
            setKeyButtonViewQuiescentAlpha(getHomeButton(), alpha);
            setKeyButtonViewQuiescentAlpha(getHomeButton(), alpha);
            setKeyButtonViewQuiescentAlpha(getRecentsButton(), alpha);
            setKeyButtonViewQuiescentAlpha(getRecentsButton(), alpha);
+11 −2
Original line number Original line Diff line number Diff line
@@ -16,7 +16,7 @@


package com.android.systemui.statusbar.phone;
package com.android.systemui.statusbar.phone;


import static com.android.systemui.statusbar.phone.BarTransitions.MODE_NORMAL;
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;
import static com.android.systemui.statusbar.phone.BarTransitions.MODE_TRANSPARENT;
import static com.android.systemui.statusbar.phone.BarTransitions.MODE_TRANSPARENT;


@@ -1938,13 +1938,21 @@ public class PhoneStatusBar extends BaseStatusBar {
    private int barMode(int vis, int transientFlag, int transparentFlag) {
    private int barMode(int vis, int transientFlag, int transparentFlag) {
        return (vis & transientFlag) != 0 ? MODE_SEMI_TRANSPARENT
        return (vis & transientFlag) != 0 ? MODE_SEMI_TRANSPARENT
                : (vis & transparentFlag) != 0 ? MODE_TRANSPARENT
                : (vis & transparentFlag) != 0 ? MODE_TRANSPARENT
                : MODE_NORMAL;
                : MODE_OPAQUE;
    }
    }


    @Override
    @Override
    public void resumeAutohide() {
    public void resumeAutohide() {
        if (mAutohideSuspended) {
        if (mAutohideSuspended) {
            scheduleAutohide();
            scheduleAutohide();
            animateTransitionTo(BarTransitions.MODE_SEMI_TRANSPARENT);
        }
    }

    private void animateTransitionTo(int newMode) {
        mStatusBarView.getBarTransitions().transitionTo(newMode, true /*animate*/);
        if (mNavigationBarView != null) {
            mNavigationBarView.getBarTransitions().transitionTo(newMode, true /*animate*/);
        }
        }
    }
    }


@@ -1952,6 +1960,7 @@ public class PhoneStatusBar extends BaseStatusBar {
    public void suspendAutohide() {
    public void suspendAutohide() {
        mHandler.removeCallbacks(mAutohide);
        mHandler.removeCallbacks(mAutohide);
        mAutohideSuspended = 0 != (mSystemUiVisibility & STATUS_OR_NAV_TRANSIENT);
        mAutohideSuspended = 0 != (mSystemUiVisibility & STATUS_OR_NAV_TRANSIENT);
        animateTransitionTo(BarTransitions.MODE_OPAQUE);
    }
    }


    private void cancelAutohide() {
    private void cancelAutohide() {