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

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

am 91bab13b: Merge "Transition bars to opaque on user interaction." into klp-dev

* commit '91bab13b':
  Transition bars to opaque on user interaction.
parents f6efa0df 91bab13b
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() {