summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/res/values/colors.xml2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java27
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java52
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java13
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java41
6 files changed, 108 insertions, 33 deletions
diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml
index 04de60fb52b7..5718db292b4c 100644
--- a/packages/SystemUI/res/values/colors.xml
+++ b/packages/SystemUI/res/values/colors.xml
@@ -20,7 +20,7 @@
<drawable name="notification_number_text_color">#ffffffff</drawable>
<drawable name="ticker_background_color">#ff1d1d1d</drawable>
<drawable name="status_bar_background">#ff000000</drawable>
- <color name="status_bar_background_transient">#55000000</color>
+ <color name="status_bar_background_semi_transparent">#55000000</color>
<color name="status_bar_background_transparent">#00000000</color>
<color name="navigation_bar_background_transparent_start">#7f000000</color>
<color name="navigation_bar_background_transparent_end">#00000000</color>
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 199c65a709af..609cdf05bffe 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java
@@ -30,24 +30,24 @@ public class BarTransitions {
private static final boolean DEBUG = false;
public static final int MODE_NORMAL = 0;
- public static final int MODE_TRANSIENT = 1;
+ 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 mTransient;
+ private final Drawable mSemiTransparent;
- private Drawable mTransparent;
+ protected Drawable mTransparent;
private int mMode;
- public BarTransitions(Context context, View target, Drawable transparent) {
+ 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));
- mTransient = new ColorDrawable(res.getColor(R.color.status_bar_background_transient));
- mTransparent = transparent;
+ mSemiTransparent =
+ new ColorDrawable(res.getColor(R.color.status_bar_background_semi_transparent));
}
public void setTransparent(Drawable transparent) {
@@ -58,18 +58,25 @@ public class BarTransitions {
}
public void transitionTo(int mode) {
+ if (mMode == mode) return;
+ int oldMode = mMode;
mMode = mode;
if (!ActivityManager.isHighEndGfx()) return;
- if (DEBUG) Log.d(mTag, "transitionTo " + modeToString(mode));
- Drawable background = mode == MODE_TRANSIENT ? mTransient
- : mode == MODE_TRANSPARENT ? mTransparent
+ if (DEBUG) Log.d(mTag, String.format("transition from %s to %s",
+ modeToString(oldMode), modeToString(mode)));
+ onTransition(oldMode, mMode);
+ }
+
+ protected void onTransition(int oldMode, int newMode) {
+ Drawable background = newMode == MODE_SEMI_TRANSPARENT ? mSemiTransparent
+ : newMode == MODE_TRANSPARENT ? mTransparent
: mOpaque;
mTarget.setBackground(background);
}
public static String modeToString(int mode) {
if (mode == MODE_NORMAL) return "MODE_NORMAL";
- if (mode == MODE_TRANSIENT) return "MODE_TRANSIENT";
+ 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 131713f676a4..4d71c612a2b9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
@@ -47,6 +47,7 @@ import com.android.systemui.R;
import com.android.systemui.statusbar.BaseStatusBar;
import com.android.systemui.statusbar.DelegateViewHelper;
import com.android.systemui.statusbar.policy.DeadZone;
+import com.android.systemui.statusbar.policy.KeyButtonView;
import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -81,9 +82,7 @@ public class NavigationBarView extends LinearLayout {
private DelegateViewHelper mDelegateHelper;
private DeadZone mDeadZone;
- private final BarTransitions mBarTransitions;
- private final Drawable mTransparent;
- private final Drawable mTransparentVertical;
+ private final NavigationBarTransitions mBarTransitions;
// workaround for LayoutTransitions leaving the nav buttons in a weird state (bug 5549288)
final static boolean WORKAROUND_INVALID_LAYOUT = true;
@@ -112,6 +111,43 @@ public class NavigationBarView extends LinearLayout {
}
}
+ private final class NavigationBarTransitions extends BarTransitions {
+
+ private final Drawable mTransparentBottom;
+ private final Drawable mTransparentRight;
+
+ public NavigationBarTransitions(Context context) {
+ super(context, NavigationBarView.this);
+ final Resources res = mContext.getResources();
+ final int[] gradientColors = new int[] {
+ res.getColor(R.color.navigation_bar_background_transparent_start),
+ res.getColor(R.color.navigation_bar_background_transparent_end)
+ };
+ mTransparentBottom = new GradientDrawable(Orientation.BOTTOM_TOP, gradientColors);
+ mTransparentRight = new GradientDrawable(Orientation.RIGHT_LEFT, gradientColors);
+ }
+
+ public void setVertical(boolean isVertical) {
+ mTransparent = isVertical ? mTransparentRight : mTransparentBottom;
+ }
+
+ @Override
+ protected void onTransition(int oldMode, int newMode) {
+ super.onTransition(oldMode, newMode);
+ final float alpha = newMode == MODE_NORMAL ? KeyButtonView.DEFAULT_QUIESCENT_ALPHA : 1f;
+ setKeyButtonViewQuiescentAlpha(getBackButton(), alpha);
+ setKeyButtonViewQuiescentAlpha(getHomeButton(), alpha);
+ setKeyButtonViewQuiescentAlpha(getRecentsButton(), alpha);
+ setKeyButtonViewQuiescentAlpha(getMenuButton(), alpha);
+ }
+
+ private void setKeyButtonViewQuiescentAlpha(View button, float alpha) {
+ if (button instanceof KeyButtonView) {
+ ((KeyButtonView) button).setQuiescentAlpha(alpha);
+ }
+ }
+ }
+
public NavigationBarView(Context context, AttributeSet attrs) {
super(context, attrs);
@@ -130,13 +166,7 @@ public class NavigationBarView extends LinearLayout {
getIcons(res);
- final int[] gradientColors = new int[] {
- res.getColor(R.color.navigation_bar_background_transparent_start),
- res.getColor(R.color.navigation_bar_background_transparent_end)
- };
- mTransparent = new GradientDrawable(Orientation.BOTTOM_TOP, gradientColors);
- mTransparentVertical = new GradientDrawable(Orientation.RIGHT_LEFT, gradientColors);
- mBarTransitions = new BarTransitions(context, this, mTransparent);
+ mBarTransitions = new NavigationBarTransitions(context);
}
public BarTransitions getBarTransitions() {
@@ -423,7 +453,7 @@ public class NavigationBarView extends LinearLayout {
}
setNavigationIconHints(mNavigationIconHints, true);
- mBarTransitions.setTransparent(mVertical ? mTransparentVertical : mTransparent);
+ mBarTransitions.setVertical(mVertical);
}
@Override
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 62be5d64d54d..6e9de6623abb 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -17,7 +17,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_TRANSIENT;
+import static com.android.systemui.statusbar.phone.BarTransitions.MODE_SEMI_TRANSPARENT;
import static com.android.systemui.statusbar.phone.BarTransitions.MODE_TRANSPARENT;
import android.animation.Animator;
@@ -1912,7 +1912,7 @@ public class PhoneStatusBar extends BaseStatusBar {
if (sbMode != -1 || nbMode != -1) {
// update transient bar autohide
- if (sbMode == MODE_TRANSIENT || nbMode == MODE_TRANSIENT) {
+ if (sbMode == MODE_SEMI_TRANSPARENT || nbMode == MODE_SEMI_TRANSPARENT) {
scheduleAutohide();
} else {
cancelAutohide();
@@ -1936,7 +1936,7 @@ public class PhoneStatusBar extends BaseStatusBar {
}
private int barMode(int vis, int transientFlag, int transparentFlag) {
- return (vis & transientFlag) != 0 ? MODE_TRANSIENT
+ return (vis & transientFlag) != 0 ? MODE_SEMI_TRANSPARENT
: (vis & transparentFlag) != 0 ? MODE_TRANSPARENT
: MODE_NORMAL;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java
index ea84c5cfc12c..910d4c4b7199 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java
@@ -46,7 +46,15 @@ public class PhoneStatusBarView extends PanelBar {
PanelView mLastFullyOpenedPanel = null;
PanelView mNotificationPanel, mSettingsPanel;
private boolean mShouldFade;
- private final BarTransitions mBarTransitions;
+ private final StatusBarTransitions mBarTransitions;
+
+ private final class StatusBarTransitions extends BarTransitions {
+ public StatusBarTransitions(Context context) {
+ super(context, PhoneStatusBarView.this);
+ final Resources res = context.getResources();
+ mTransparent = res.getDrawable(R.color.status_bar_background_transparent);
+ }
+ }
public PhoneStatusBarView(Context context, AttributeSet attrs) {
super(context, attrs);
@@ -60,8 +68,7 @@ public class PhoneStatusBarView extends PanelBar {
mSettingsPanelDragzoneFrac = 0f;
}
mFullWidthNotifications = mSettingsPanelDragzoneFrac <= 0f;
- final Drawable transparent = res.getDrawable(R.color.status_bar_background_transparent);
- mBarTransitions = new BarTransitions(context, this, transparent);
+ mBarTransitions = new StatusBarTransitions(context);
}
public BarTransitions getBarTransitions() {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java
index f32595767497..924478cc09e5 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java
@@ -16,6 +16,9 @@
package com.android.systemui.statusbar.policy;
+import android.animation.Animator;
+import android.animation.Animator.AnimatorListener;
+import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.content.Context;
@@ -26,6 +29,7 @@ import android.graphics.drawable.Drawable;
import android.hardware.input.InputManager;
import android.os.SystemClock;
import android.util.AttributeSet;
+import android.util.Log;
import android.view.HapticFeedbackConstants;
import android.view.InputDevice;
import android.view.KeyCharacterMap;
@@ -41,9 +45,10 @@ import com.android.systemui.R;
public class KeyButtonView extends ImageView {
private static final String TAG = "StatusBar.KeyButtonView";
+ private static final boolean DEBUG = false;
final float GLOW_MAX_SCALE_FACTOR = 1.8f;
- final float BUTTON_QUIESCENT_ALPHA = 0.70f;
+ public static final float DEFAULT_QUIESCENT_ALPHA = 0.70f;
long mDownTime;
int mCode;
@@ -51,6 +56,7 @@ public class KeyButtonView extends ImageView {
Drawable mGlowBG;
int mGlowWidth, mGlowHeight;
float mGlowAlpha = 0f, mGlowScale = 1f, mDrawingAlpha = 1f;
+ float mQuiescentAlpha = DEFAULT_QUIESCENT_ALPHA;
boolean mSupportsLongpress = true;
RectF mRect = new RectF(0f,0f,0f,0f);
AnimatorSet mPressedAnim;
@@ -70,6 +76,15 @@ public class KeyButtonView extends ImageView {
}
};
+ private final AnimatorListener mRecoverToQuiescentListener = new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ if (mQuiescentAlpha != mDrawingAlpha) {
+ animateToQuiescent().setDuration(200).start();
+ }
+ }
+ };
+
public KeyButtonView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
@@ -86,7 +101,7 @@ public class KeyButtonView extends ImageView {
mGlowBG = a.getDrawable(R.styleable.KeyButtonView_glowBackground);
if (mGlowBG != null) {
- setDrawingAlpha(BUTTON_QUIESCENT_ALPHA);
+ setDrawingAlpha(mQuiescentAlpha);
mGlowWidth = mGlowBG.getIntrinsicWidth();
mGlowHeight = mGlowBG.getIntrinsicHeight();
}
@@ -118,6 +133,16 @@ public class KeyButtonView extends ImageView {
super.onDraw(canvas);
}
+ public void setQuiescentAlpha(float alpha) {
+ alpha = Math.min(Math.max(alpha, 0), 1);
+ if (alpha == mQuiescentAlpha) return;
+ mQuiescentAlpha = alpha;
+ if (DEBUG) Log.d(TAG, "New quiescent alpha = " + mQuiescentAlpha);
+ if (mGlowBG != null) {
+ setDrawingAlpha(mQuiescentAlpha);
+ }
+ }
+
public float getDrawingAlpha() {
if (mGlowBG == null) return 0;
return mDrawingAlpha;
@@ -172,6 +197,12 @@ public class KeyButtonView extends ImageView {
}
}
+ private ObjectAnimator animateToQuiescent() {
+ ObjectAnimator anim = ObjectAnimator.ofFloat(this, "drawingAlpha", mQuiescentAlpha);
+ anim.addListener(mRecoverToQuiescentListener); // mQuiescentAlpha may change mid-animation
+ return anim;
+ }
+
public void setPressed(boolean pressed) {
if (mGlowBG != null) {
if (pressed != isPressed()) {
@@ -182,8 +213,8 @@ public class KeyButtonView extends ImageView {
if (pressed) {
if (mGlowScale < GLOW_MAX_SCALE_FACTOR)
mGlowScale = GLOW_MAX_SCALE_FACTOR;
- if (mGlowAlpha < BUTTON_QUIESCENT_ALPHA)
- mGlowAlpha = BUTTON_QUIESCENT_ALPHA;
+ if (mGlowAlpha < mQuiescentAlpha)
+ mGlowAlpha = mQuiescentAlpha;
setDrawingAlpha(1f);
as.playTogether(
ObjectAnimator.ofFloat(this, "glowAlpha", 1f),
@@ -194,7 +225,7 @@ public class KeyButtonView extends ImageView {
as.playTogether(
ObjectAnimator.ofFloat(this, "glowAlpha", 0f),
ObjectAnimator.ofFloat(this, "glowScale", 1f),
- ObjectAnimator.ofFloat(this, "drawingAlpha", BUTTON_QUIESCENT_ALPHA)
+ animateToQuiescent()
);
as.setDuration(500);
}