summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Evan Laird <evanlaird@google.com> 2018-05-04 16:14:00 -0400
committer Evan Laird <evanlaird@google.com> 2018-05-07 11:26:34 -0400
commit150701d41f6e766b07265798c4dd9b5fc78e02cc (patch)
tree2722cc3e93d55c096af5c2c0f7420b75bf342d14
parent91a14dec3ccaae0156a1754c6ca13062cadc61a6 (diff)
Show up to 8 icons before eliding; fix animations
Show up to 8 (including battery) system icons, and after 8 show 7 icons and only 1 etc dot Test: visual Change-Id: I4c1eeb2bd6afd9d5a1aed3358919f0d29ef2a084 Fixes: 79165032
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/StatusBarMobileView.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/StatusBarWifiView.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/StatusIconDisplayable.java1
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusIconContainer.java62
4 files changed, 61 insertions, 12 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarMobileView.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarMobileView.java
index 5748ec9beef8..19980a221576 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarMobileView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarMobileView.java
@@ -211,6 +211,11 @@ public class StatusBarMobileView extends AlphaOptimizedLinearLayout implements D
//TODO: May not be needed. Mobile is always expected to be visible (not a dot)
}
+ @Override
+ public int getVisibleState() {
+ return 0;
+ }
+
@VisibleForTesting
public MobileIconState getState() {
return mState;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarWifiView.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarWifiView.java
index c3b4fdd07bab..ca00a5aed6d2 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarWifiView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarWifiView.java
@@ -146,6 +146,11 @@ public class StatusBarWifiView extends FrameLayout implements DarkReceiver,
}
}
+ @Override
+ public int getVisibleState() {
+ return mVisibleState;
+ }
+
private void init() {
int dualToneLightTheme = Utils.getThemeAttr(mContext, R.attr.lightIconTheme);
int dualToneDarkTheme = Utils.getThemeAttr(mContext, R.attr.darkIconTheme);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusIconDisplayable.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusIconDisplayable.java
index 6383816ead31..b831b8657be3 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusIconDisplayable.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusIconDisplayable.java
@@ -23,6 +23,7 @@ public interface StatusIconDisplayable extends DarkReceiver {
void setStaticDrawableColor(int color);
void setDecorColor(int color);
void setVisibleState(int state);
+ int getVisibleState();
boolean isIconVisible();
default boolean isIconBlocked() {
return false;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusIconContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusIconContainer.java
index 8398879b9c07..4538977f7a6f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusIconContainer.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusIconContainer.java
@@ -30,12 +30,12 @@ import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
-import android.view.ViewGroup;
import com.android.keyguard.AlphaOptimizedLinearLayout;
import com.android.systemui.R;
import com.android.systemui.statusbar.StatusIconDisplayable;
+import com.android.systemui.statusbar.stack.AnimationFilter;
+import com.android.systemui.statusbar.stack.AnimationProperties;
import com.android.systemui.statusbar.stack.ViewState;
-import java.lang.ref.WeakReference;
import java.util.ArrayList;
/**
@@ -50,8 +50,8 @@ public class StatusIconContainer extends AlphaOptimizedLinearLayout {
private static final boolean DEBUG = false;
private static final boolean DEBUG_OVERFLOW = false;
// Max 5 status icons including battery
- private static final int MAX_ICONS = 4;
- private static final int MAX_DOTS = 3;
+ private static final int MAX_ICONS = 7;
+ private static final int MAX_DOTS = 1;
private int mDotPadding;
private int mStaticDotDiameter;
@@ -97,7 +97,7 @@ public class StatusIconContainer extends AlphaOptimizedLinearLayout {
mDotPadding = getResources().getDimensionPixelSize(R.dimen.overflow_icon_dot_padding);
int radius = getResources().getDimensionPixelSize(R.dimen.overflow_dot_radius);
mStaticDotDiameter = 2 * radius;
- mUnderflowWidth = mIconDotFrameWidth + 2 * (mStaticDotDiameter + mDotPadding);
+ mUnderflowWidth = mIconDotFrameWidth + (MAX_DOTS - 1) * (mStaticDotDiameter + mDotPadding);
}
@Override
@@ -193,6 +193,7 @@ public class StatusIconContainer extends AlphaOptimizedLinearLayout {
public void onViewAdded(View child) {
super.onViewAdded(child);
StatusIconState vs = new StatusIconState();
+ vs.justAdded = true;
child.setTag(R.id.status_bar_view_state_tag, vs);
}
@@ -212,7 +213,6 @@ public class StatusIconContainer extends AlphaOptimizedLinearLayout {
float contentStart = getPaddingStart();
int childCount = getChildCount();
// Underflow === don't show content until that index
- int firstUnderflowIndex = -1;
if (DEBUG) android.util.Log.d(TAG, "calculateIconTranslations: start=" + translationX
+ " width=" + width + " underflow=" + mNeedsUnderflow);
@@ -235,13 +235,13 @@ public class StatusIconContainer extends AlphaOptimizedLinearLayout {
translationX -= getViewTotalWidth(child);
}
- // Show either 1-4 dots, or 3 dots + overflow
+ // Show either 1-MAX_ICONS icons, or (MAX_ICONS - 1) icons + overflow
int totalVisible = mLayoutStates.size();
int maxVisible = totalVisible <= MAX_ICONS ? MAX_ICONS : MAX_ICONS - 1;
mUnderflowStart = 0;
int visible = 0;
- firstUnderflowIndex = -1;
+ int firstUnderflowIndex = -1;
for (int i = totalVisible - 1; i >= 0; i--) {
StatusIconState state = mLayoutStates.get(i);
// Allow room for underflow if we found we need it in onMeasure
@@ -324,14 +324,52 @@ public class StatusIconContainer extends AlphaOptimizedLinearLayout {
public static class StatusIconState extends ViewState {
/// StatusBarIconView.STATE_*
public int visibleState = STATE_ICON;
+ public boolean justAdded = true;
@Override
public void applyToView(View view) {
- if (view instanceof StatusIconDisplayable) {
- StatusIconDisplayable icon = (StatusIconDisplayable) view;
- icon.setVisibleState(visibleState);
+ if (!(view instanceof StatusIconDisplayable)) {
+ return;
+ }
+ StatusIconDisplayable icon = (StatusIconDisplayable) view;
+ AnimationProperties animationProperties = null;
+ boolean animate = false;
+
+ if (justAdded) {
+ super.applyToView(view);
+ animationProperties = ADD_ICON_PROPERTIES;
+ animate = true;
+ } else if (icon.getVisibleState() != visibleState) {
+ animationProperties = DOT_ANIMATION_PROPERTIES;
+ animate = true;
+ }
+
+ icon.setVisibleState(visibleState);
+ if (animate) {
+ animateTo(view, animationProperties);
+ } else {
+ super.applyToView(view);
}
- super.applyToView(view);
+
+ justAdded = false;
}
}
+
+ private static final AnimationProperties ADD_ICON_PROPERTIES = new AnimationProperties() {
+ private AnimationFilter mAnimationFilter = new AnimationFilter().animateAlpha();
+
+ @Override
+ public AnimationFilter getAnimationFilter() {
+ return mAnimationFilter;
+ }
+ }.setDuration(200).setDelay(50);
+
+ private static final AnimationProperties DOT_ANIMATION_PROPERTIES = new AnimationProperties() {
+ private AnimationFilter mAnimationFilter = new AnimationFilter().animateX();
+
+ @Override
+ public AnimationFilter getAnimationFilter() {
+ return mAnimationFilter;
+ }
+ }.setDuration(200);
}