summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Spurlock <jspurlock@google.com>2013-08-19 14:34:26 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2013-08-19 14:34:27 +0000
commit91bab13b00f49a38b4aab18bceb3c8b9877e723c (patch)
tree8e56ed6ead4504c7e2aa8b86a2ac9aef3a0e1d62
parent9bf6f5b05abc1fa26fe873554de4ee16c8e855ac (diff)
parent3b139a9ed06fdaad694ca97b8f99e7038007a054 (diff)
downloadframeworks_base-91bab13b00f49a38b4aab18bceb3c8b9877e723c.zip
frameworks_base-91bab13b00f49a38b4aab18bceb3c8b9877e723c.tar.gz
frameworks_base-91bab13b00f49a38b4aab18bceb3c8b9877e723c.tar.bz2
Merge "Transition bars to opaque on user interaction." into klp-dev
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java55
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java13
3 files changed, 54 insertions, 20 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java
index 609cdf0..e40c4e5 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java
@@ -16,6 +16,9 @@
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.content.Context;
import android.content.res.Resources;
@@ -29,25 +32,31 @@ import com.android.systemui.R;
public class BarTransitions {
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_TRANSPARENT = 2;
private final String mTag;
private final View mTarget;
- private final Drawable mOpaque;
- private final Drawable mSemiTransparent;
+ private final int mOpaque;
+ private final int mSemiTransparent;
protected Drawable mTransparent;
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) {
mTag = "BarTransitions." + target.getClass().getSimpleName();
mTarget = target;
final Resources res = context.getResources();
- mOpaque = new ColorDrawable(res.getColor(R.drawable.status_bar_background));
- mSemiTransparent =
- new ColorDrawable(res.getColor(R.color.status_bar_background_semi_transparent));
+ mOpaque = res.getColor(R.drawable.status_bar_background);
+ mSemiTransparent = res.getColor(R.color.status_bar_background_semi_transparent);
}
public void setTransparent(Drawable transparent) {
@@ -58,24 +67,40 @@ public class BarTransitions {
}
public void transitionTo(int mode) {
+ transitionTo(mode, false);
+ }
+
+ public void transitionTo(int mode, boolean animate) {
if (mMode == mode) return;
int oldMode = mMode;
mMode = mode;
if (!ActivityManager.isHighEndGfx()) return;
- if (DEBUG) Log.d(mTag, String.format("transition from %s to %s",
- modeToString(oldMode), modeToString(mode)));
- onTransition(oldMode, mMode);
+ if (DEBUG) Log.d(mTag, modeToString(oldMode) + " -> " + modeToString(mode));
+ onTransition(oldMode, mMode, animate);
+ }
+
+ 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) {
- Drawable background = newMode == MODE_SEMI_TRANSPARENT ? mSemiTransparent
- : newMode == MODE_TRANSPARENT ? mTransparent
- : mOpaque;
- mTarget.setBackground(background);
+ private void startColorAnimation(int from, int to) {
+ ValueAnimator anim = ValueAnimator.ofObject(new ArgbEvaluator(), from, to);
+ anim.addUpdateListener(mBackgroundColorListener);
+ anim.start();
}
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_TRANSPARENT) return "MODE_TRANSPARENT";
throw new IllegalArgumentException("Unknown mode " + mode);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
index 4d71c61..62f8596 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
@@ -132,9 +132,9 @@ public class NavigationBarView extends LinearLayout {
}
@Override
- protected void onTransition(int oldMode, int newMode) {
- super.onTransition(oldMode, newMode);
- final float alpha = newMode == MODE_NORMAL ? KeyButtonView.DEFAULT_QUIESCENT_ALPHA : 1f;
+ protected void onTransition(int oldMode, int newMode, boolean animate) {
+ super.onTransition(oldMode, newMode, animate);
+ final float alpha = newMode == MODE_OPAQUE ? KeyButtonView.DEFAULT_QUIESCENT_ALPHA : 1f;
setKeyButtonViewQuiescentAlpha(getBackButton(), alpha);
setKeyButtonViewQuiescentAlpha(getHomeButton(), alpha);
setKeyButtonViewQuiescentAlpha(getRecentsButton(), alpha);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index 6e9de66..cc5e6ea 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -16,7 +16,7 @@
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_TRANSPARENT;
@@ -1938,13 +1938,21 @@ public class PhoneStatusBar extends BaseStatusBar {
private int barMode(int vis, int transientFlag, int transparentFlag) {
return (vis & transientFlag) != 0 ? MODE_SEMI_TRANSPARENT
: (vis & transparentFlag) != 0 ? MODE_TRANSPARENT
- : MODE_NORMAL;
+ : MODE_OPAQUE;
}
@Override
public void resumeAutohide() {
if (mAutohideSuspended) {
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() {
mHandler.removeCallbacks(mAutohide);
mAutohideSuspended = 0 != (mSystemUiVisibility & STATUS_OR_NAV_TRANSIENT);
+ animateTransitionTo(BarTransitions.MODE_OPAQUE);
}
private void cancelAutohide() {