Limit status icons and show etc dots
When <= 5 status icons exist, try to show them all (space permitting).
If > 5 exist, show 4 and etc dots.
Test: visual
Change-Id: I4c09344bee75b3cab6256dd69f11337b9b667b0f
Fixes: 73778753
Fixes: 77660387
Bug: 77822905
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarWifiView.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarWifiView.java
index 62cd16f..0e2714d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarWifiView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarWifiView.java
@@ -16,6 +16,9 @@
package com.android.systemui.statusbar;
+import static com.android.systemui.statusbar.StatusBarIconView.STATE_DOT;
+import static com.android.systemui.statusbar.StatusBarIconView.STATE_HIDDEN;
+import static com.android.systemui.statusbar.StatusBarIconView.STATE_ICON;
import static com.android.systemui.statusbar.policy.DarkIconDispatcher.getTint;
import static com.android.systemui.statusbar.policy.DarkIconDispatcher.isInArea;
@@ -24,11 +27,17 @@
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
+import android.util.Log;
import android.view.ContextThemeWrapper;
+import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
+import android.view.ViewGroup;
+import android.view.ViewGroup.LayoutParams;
+import android.widget.FrameLayout;
import android.widget.ImageView;
+import android.widget.LinearLayout;
import com.android.keyguard.AlphaOptimizedLinearLayout;
import com.android.settingslib.Utils;
import com.android.systemui.R;
@@ -38,10 +47,14 @@
/**
* Start small: StatusBarWifiView will be able to layout from a WifiIconState
*/
-public class StatusBarWifiView extends AlphaOptimizedLinearLayout implements DarkReceiver,
+public class StatusBarWifiView extends FrameLayout implements DarkReceiver,
StatusIconDisplayable {
private static final String TAG = "StatusBarWifiView";
+ /// Used to show etc dots
+ private StatusBarIconView mDotView;
+ /// Contains the main icon layout
+ private LinearLayout mWifiGroup;
private ImageView mWifiIcon;
private ImageView mIn;
private ImageView mOut;
@@ -55,9 +68,12 @@
private ContextThemeWrapper mDarkContext;
private ContextThemeWrapper mLightContext;
- public static StatusBarWifiView fromContext(Context context) {
+ public static StatusBarWifiView fromContext(Context context, String slot) {
LayoutInflater inflater = LayoutInflater.from(context);
- return (StatusBarWifiView) inflater.inflate(R.layout.status_bar_wifi_group, null);
+ StatusBarWifiView v = (StatusBarWifiView) inflater.inflate(R.layout.status_bar_wifi_group, null);
+ v.setSlot(slot);
+ v.init();
+ return v;
}
public StatusBarWifiView(Context context) {
@@ -77,12 +93,6 @@
super(context, attrs, defStyleAttr, defStyleRes);
}
- @Override
- protected void onFinishInflate() {
- super.onFinishInflate();
- init();
- }
-
public void setSlot(String slot) {
mSlot = slot;
}
@@ -93,6 +103,12 @@
mWifiIcon.setImageTintList(list);
mIn.setImageTintList(list);
mOut.setImageTintList(list);
+ mDotView.setDecorColor(color);
+ }
+
+ @Override
+ public void setDecorColor(int color) {
+ mDotView.setDecorColor(color);
}
@Override
@@ -105,18 +121,55 @@
return mState != null && mState.visible;
}
+ @Override
+ public void setVisibleState(int state) {
+ switch (state) {
+ case STATE_ICON:
+ mWifiGroup.setVisibility(View.VISIBLE);
+ mDotView.setVisibility(View.GONE);
+ break;
+ case STATE_DOT:
+ mWifiGroup.setVisibility(View.GONE);
+ mDotView.setVisibility(View.VISIBLE);
+ break;
+ case STATE_HIDDEN:
+ default:
+ setVisibility(View.GONE);
+ break;
+ }
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ int width = MeasureSpec.getSize(widthMeasureSpec);
+ }
+
private void init() {
int dualToneLightTheme = Utils.getThemeAttr(mContext, R.attr.lightIconTheme);
int dualToneDarkTheme = Utils.getThemeAttr(mContext, R.attr.darkIconTheme);
mLightContext = new ContextThemeWrapper(mContext, dualToneLightTheme);
mDarkContext = new ContextThemeWrapper(mContext, dualToneDarkTheme);
+ mWifiGroup = findViewById(R.id.wifi_group);
mWifiIcon = findViewById(R.id.wifi_signal);
mIn = findViewById(R.id.wifi_in);
mOut = findViewById(R.id.wifi_out);
mSignalSpacer = findViewById(R.id.wifi_signal_spacer);
mAirplaneSpacer = findViewById(R.id.wifi_airplane_spacer);
mInoutContainer = findViewById(R.id.inout_container);
+
+ initDotView();
+ }
+
+ private void initDotView() {
+ mDotView = new StatusBarIconView(mContext, mSlot, null);
+ mDotView.setVisibleState(STATE_DOT);
+
+ int width = mContext.getResources().getDimensionPixelSize(R.dimen.status_bar_icon_size);
+ LayoutParams lp = new LayoutParams(width, width);
+ lp.gravity = Gravity.CENTER_VERTICAL | Gravity.START;
+ addView(mDotView, lp);
}
public void applyWifiState(WifiIconState state) {
@@ -186,6 +239,8 @@
}
mIn.setImageTintList(ColorStateList.valueOf(getTint(area, this, tint)));
mOut.setImageTintList(ColorStateList.valueOf(getTint(area, this, tint)));
+ mDotView.setDecorColor(tint);
+ mDotView.setIconColor(tint, false);
}