Merge "Request layout if visiblity (thus, size) changes"
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarMobileView.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarMobileView.java
index 6ee3189..3c52e8c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarMobileView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarMobileView.java
@@ -126,20 +126,21 @@
}
public void applyMobileState(MobileIconState state) {
+ boolean requestLayout = false;
if (state == null) {
+ requestLayout = getVisibility() != View.GONE;
setVisibility(View.GONE);
mState = null;
- return;
- }
-
- if (mState == null) {
+ } else if (mState == null) {
+ requestLayout = true;
mState = state.copy();
initViewState();
- return;
+ } else if (!mState.equals(state)) {
+ requestLayout = updateState(state.copy());
}
- if (!mState.equals(state)) {
- updateState(state.copy());
+ if (requestLayout) {
+ requestLayout();
}
}
@@ -162,20 +163,24 @@
mMobileRoaming.setVisibility(mState.roaming ? View.VISIBLE : View.GONE);
mMobileRoamingSpace.setVisibility(mState.roaming ? View.VISIBLE : View.GONE);
mIn.setVisibility(mState.activityIn ? View.VISIBLE : View.GONE);
- mOut.setVisibility(mState.activityIn ? View.VISIBLE : View.GONE);
+ mOut.setVisibility(mState.activityOut ? View.VISIBLE : View.GONE);
mInoutContainer.setVisibility((mState.activityIn || mState.activityOut)
? View.VISIBLE : View.GONE);
}
- private void updateState(MobileIconState state) {
+ private boolean updateState(MobileIconState state) {
+ boolean needsLayout = false;
+
setContentDescription(state.contentDescription);
if (mState.visible != state.visible) {
mMobileGroup.setVisibility(state.visible ? View.VISIBLE : View.GONE);
+ needsLayout = true;
}
if (mState.strengthId != state.strengthId) {
mMobileDrawable.setLevel(state.strengthId);
}
if (mState.typeId != state.typeId) {
+ needsLayout |= state.typeId == 0 || mState.typeId == 0;
if (state.typeId != 0) {
mMobileType.setContentDescription(state.typeContentDescription);
mMobileType.setImageResource(state.typeId);
@@ -188,11 +193,16 @@
mMobileRoaming.setVisibility(state.roaming ? View.VISIBLE : View.GONE);
mMobileRoamingSpace.setVisibility(state.roaming ? View.VISIBLE : View.GONE);
mIn.setVisibility(state.activityIn ? View.VISIBLE : View.GONE);
- mOut.setVisibility(state.activityIn ? View.VISIBLE : View.GONE);
+ mOut.setVisibility(state.activityOut ? View.VISIBLE : View.GONE);
mInoutContainer.setVisibility((state.activityIn || state.activityOut)
? View.VISIBLE : View.GONE);
+ needsLayout |= state.roaming != mState.roaming
+ || state.activityIn != mState.activityIn
+ || state.activityOut != mState.activityOut;
+
mState = state;
+ return needsLayout;
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarWifiView.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarWifiView.java
index 513cd32..f3fc99e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarWifiView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarWifiView.java
@@ -191,23 +191,26 @@
}
public void applyWifiState(WifiIconState state) {
+ boolean requestLayout = false;
+
if (state == null) {
+ requestLayout = getVisibility() != View.GONE;
setVisibility(View.GONE);
mState = null;
- return;
- }
-
- if (mState == null) {
+ } else if (mState == null) {
+ requestLayout = true;
mState = state.copy();
initViewState();
+ } else if (!mState.equals(state)) {
+ requestLayout = updateState(state.copy());
}
- if (!mState.equals(state)) {
- updateState(state.copy());
+ if (requestLayout) {
+ requestLayout();
}
}
- private void updateState(WifiIconState state) {
+ private boolean updateState(WifiIconState state) {
setContentDescription(state.contentDescription);
if (mState.resId != state.resId && state.resId >= 0) {
NeutralGoodDrawable drawable = NeutralGoodDrawable
@@ -222,11 +225,17 @@
(state.activityIn || state.activityOut) ? View.VISIBLE : View.GONE);
mAirplaneSpacer.setVisibility(state.airplaneSpacerVisible ? View.VISIBLE : View.GONE);
mSignalSpacer.setVisibility(state.signalSpacerVisible ? View.VISIBLE : View.GONE);
+
+ boolean needsLayout = state.activityIn != mState.activityIn
+ ||state.activityOut != mState.activityOut;
+
if (mState.visible != state.visible) {
+ needsLayout |= true;
setVisibility(state.visible ? View.VISIBLE : View.GONE);
}
mState = state;
+ return needsLayout;
}
private void initViewState() {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DemoStatusIcons.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DemoStatusIcons.java
index e0e991b..e052e53 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DemoStatusIcons.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DemoStatusIcons.java
@@ -203,7 +203,7 @@
v.set(icon);
v.setStaticDrawableColor(mColor);
v.setDecorColor(mColor);
- addView(v, 0, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, mIconSize));
+ addView(v, 0, createLayoutParams());
}
public void addDemoWifiView(WifiIconState state) {
@@ -223,7 +223,7 @@
mWifiView = view;
mWifiView.applyWifiState(state);
mWifiView.setStaticDrawableColor(mColor);
- addView(view, viewIndex);
+ addView(view, viewIndex, createLayoutParams());
}
public void updateWifiState(WifiIconState state) {
@@ -244,7 +244,7 @@
// mobile always goes at the end
mMobileViews.add(view);
- addView(view, getChildCount());
+ addView(view, getChildCount(), createLayoutParams());
}
public void updateMobileState(MobileIconState state) {
@@ -290,6 +290,10 @@
return null;
}
+ private LayoutParams createLayoutParams() {
+ return new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, mIconSize);
+ }
+
@Override
public void onDarkChanged(Rect area, float darkIntensity, int tint) {
setColor(DarkIconDispatcher.getTint(area, mStatusIcons, tint));