Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java +40 −15 Original line number Original line Diff line number Diff line Loading @@ -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; Loading @@ -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) { Loading @@ -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); Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java +3 −3 Original line number Original line Diff line number Diff line Loading @@ -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); Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +11 −2 Original line number Original line Diff line number Diff line Loading @@ -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; Loading Loading @@ -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*/); } } } } Loading @@ -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() { Loading Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java +40 −15 Original line number Original line Diff line number Diff line Loading @@ -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; Loading @@ -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) { Loading @@ -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); Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java +3 −3 Original line number Original line Diff line number Diff line Loading @@ -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); Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +11 −2 Original line number Original line Diff line number Diff line Loading @@ -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; Loading Loading @@ -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*/); } } } } Loading @@ -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() { Loading