diff options
| author | 2018-05-10 23:44:33 +0000 | |
|---|---|---|
| committer | 2018-05-10 23:44:33 +0000 | |
| commit | bb6ec002635c23c3911c5bcb43de1a8a385afe28 (patch) | |
| tree | 3ef906a19acbe306730f9d0270e1e47a962ad7ad | |
| parent | dca90312ace209ca405d63ccec26431944e5edc8 (diff) | |
| parent | 97ae20c5d841a244369dba5decaa3ab994cdad33 (diff) | |
Merge "Allow mobile status bar icon to overflow" into pi-dev
5 files changed, 124 insertions, 74 deletions
diff --git a/packages/SystemUI/res/layout/status_bar_mobile_signal_group.xml b/packages/SystemUI/res/layout/status_bar_mobile_signal_group.xml index c8a554467ceb..7931dfe74587 100644 --- a/packages/SystemUI/res/layout/status_bar_mobile_signal_group.xml +++ b/packages/SystemUI/res/layout/status_bar_mobile_signal_group.xml @@ -21,62 +21,70 @@ xmlns:systemui="http://schemas.android.com/apk/res-auto" android:id="@+id/mobile_combo" android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center_vertical" - android:paddingStart="2dp" - android:orientation="horizontal"> - <FrameLayout - android:id="@+id/inout_container" - android:layout_height="17dp" + android:layout_height="match_parent" + android:gravity="center_vertical" > + + <com.android.keyguard.AlphaOptimizedLinearLayout + android:id="@+id/mobile_group" android:layout_width="wrap_content" - android:layout_gravity="center_vertical"> - <ImageView - android:id="@+id/mobile_in" - android:layout_height="wrap_content" + android:layout_height="match_parent" + android:gravity="center_vertical" + android:paddingStart="2dp" + android:orientation="horizontal" > + + <FrameLayout + android:id="@+id/inout_container" + android:layout_height="17dp" android:layout_width="wrap_content" - android:src="@drawable/ic_activity_down" - android:visibility="gone" - android:paddingEnd="2dp" - /> + android:layout_gravity="center_vertical"> + <ImageView + android:id="@+id/mobile_in" + android:layout_height="wrap_content" + android:layout_width="wrap_content" + android:src="@drawable/ic_activity_down" + android:visibility="gone" + android:paddingEnd="2dp" + /> + <ImageView + android:id="@+id/mobile_out" + android:layout_height="wrap_content" + android:layout_width="wrap_content" + android:src="@drawable/ic_activity_up" + android:paddingEnd="2dp" + android:visibility="gone" + /> + </FrameLayout> <ImageView - android:id="@+id/mobile_out" + android:id="@+id/mobile_type" android:layout_height="wrap_content" android:layout_width="wrap_content" - android:src="@drawable/ic_activity_up" - android:paddingEnd="2dp" + android:layout_gravity="center_vertical" + android:paddingEnd="1dp" + android:visibility="gone" /> + <Space + android:id="@+id/mobile_roaming_space" + android:layout_height="match_parent" + android:layout_width="@dimen/roaming_icon_start_padding" android:visibility="gone" /> - </FrameLayout> - <ImageView - android:id="@+id/mobile_type" - android:layout_height="wrap_content" - android:layout_width="wrap_content" - android:layout_gravity="center_vertical" - android:paddingEnd="1dp" - android:visibility="gone" /> - <Space - android:id="@+id/mobile_roaming_space" - android:layout_height="match_parent" - android:layout_width="@dimen/roaming_icon_start_padding" - android:visibility="gone" - /> - <FrameLayout - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center_vertical"> - <com.android.systemui.statusbar.AnimatedImageView - android:id="@+id/mobile_signal" - android:layout_height="wrap_content" - android:layout_width="wrap_content" - systemui:hasOverlappingRendering="false" - /> - <ImageView - android:id="@+id/mobile_roaming" + <FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content" - android:src="@drawable/stat_sys_roaming" - android:contentDescription="@string/data_connection_roaming" - android:visibility="gone" /> - </FrameLayout> + android:layout_gravity="center_vertical"> + <com.android.systemui.statusbar.AnimatedImageView + android:id="@+id/mobile_signal" + android:layout_height="wrap_content" + android:layout_width="wrap_content" + systemui:hasOverlappingRendering="false" + /> + <ImageView + android:id="@+id/mobile_roaming" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:src="@drawable/stat_sys_roaming" + android:contentDescription="@string/data_connection_roaming" + android:visibility="gone" /> + </FrameLayout> + </com.android.keyguard.AlphaOptimizedLinearLayout> </com.android.systemui.statusbar.StatusBarMobileView> diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarMobileView.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarMobileView.java index 19980a221576..04c500fc8f6a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarMobileView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarMobileView.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,10 +27,14 @@ import android.content.res.ColorStateList; import android.graphics.Color; import android.graphics.Rect; import android.util.AttributeSet; +import android.util.Log; +import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; +import android.widget.FrameLayout; import android.widget.ImageView; +import android.widget.LinearLayout; import com.android.internal.annotations.VisibleForTesting; import com.android.keyguard.AlphaOptimizedLinearLayout; import com.android.settingslib.graph.SignalDrawable; @@ -35,10 +42,14 @@ import com.android.systemui.R; import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.MobileIconState; import com.android.systemui.statusbar.policy.DarkIconDispatcher.DarkReceiver; -public class StatusBarMobileView extends AlphaOptimizedLinearLayout implements DarkReceiver, +public class StatusBarMobileView extends FrameLayout implements DarkReceiver, StatusIconDisplayable { private static final String TAG = "StatusBarMobileView"; + /// Used to show etc dots + private StatusBarIconView mDotView; + /// The main icon view + private LinearLayout mMobileGroup; private String mSlot; private MobileIconState mState; private SignalDrawable mMobileDrawable; @@ -47,12 +58,17 @@ public class StatusBarMobileView extends AlphaOptimizedLinearLayout implements D private ImageView mOut; private ImageView mMobile, mMobileType, mMobileRoaming; private View mMobileRoamingSpace; + private int mVisibleState = -1; - public static StatusBarMobileView fromContext(Context context) { + public static StatusBarMobileView fromContext(Context context, String slot) { LayoutInflater inflater = LayoutInflater.from(context); - - return (StatusBarMobileView) + StatusBarMobileView v = (StatusBarMobileView) inflater.inflate(R.layout.status_bar_mobile_signal_group, null); + + v.setSlot(slot); + v.init(); + v.setVisibleState(STATE_ICON); + return v; } public StatusBarMobileView(Context context) { @@ -72,14 +88,8 @@ public class StatusBarMobileView extends AlphaOptimizedLinearLayout implements D super(context, attrs, defStyleAttr, defStyleRes); } - @Override - protected void onFinishInflate() { - super.onFinishInflate(); - - init(); - } - private void init() { + mMobileGroup = findViewById(R.id.mobile_group); mMobile = findViewById(R.id.mobile_signal); mMobileType = findViewById(R.id.mobile_type); mMobileRoaming = findViewById(R.id.mobile_roaming); @@ -90,6 +100,18 @@ public class StatusBarMobileView extends AlphaOptimizedLinearLayout implements D mMobileDrawable = new SignalDrawable(getContext()); mMobile.setImageDrawable(mMobileDrawable); + + 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 applyMobileState(MobileIconState state) { @@ -113,9 +135,9 @@ public class StatusBarMobileView extends AlphaOptimizedLinearLayout implements D private void initViewState() { setContentDescription(mState.contentDescription); if (!mState.visible) { - setVisibility(View.GONE); + mMobileGroup.setVisibility(View.GONE); } else { - setVisibility(View.VISIBLE); + mMobileGroup.setVisibility(View.VISIBLE); } mMobileDrawable.setLevel(mState.strengthId); if (mState.typeId > 0) { @@ -137,7 +159,7 @@ public class StatusBarMobileView extends AlphaOptimizedLinearLayout implements D private void updateState(MobileIconState state) { setContentDescription(state.contentDescription); if (mState.visible != state.visible) { - setVisibility(state.visible ? View.VISIBLE : View.GONE); + mMobileGroup.setVisibility(state.visible ? View.VISIBLE : View.GONE); } if (mState.strengthId != state.strengthId) { mMobileDrawable.setLevel(state.strengthId); @@ -173,6 +195,8 @@ public class StatusBarMobileView extends AlphaOptimizedLinearLayout implements D mOut.setImageTintList(color); mMobileType.setImageTintList(color); mMobileRoaming.setImageTintList(color); + mDotView.setDecorColor(tint); + mDotView.setIconColor(tint, false); } @Override @@ -194,11 +218,12 @@ public class StatusBarMobileView extends AlphaOptimizedLinearLayout implements D mOut.setImageTintList(list); mMobileType.setImageTintList(list); mMobileRoaming.setImageTintList(list); + mDotView.setDecorColor(color); } @Override public void setDecorColor(int color) { - //TODO: May also not be needed + mDotView.setDecorColor(color); } @Override @@ -208,12 +233,30 @@ public class StatusBarMobileView extends AlphaOptimizedLinearLayout implements D @Override public void setVisibleState(int state) { - //TODO: May not be needed. Mobile is always expected to be visible (not a dot) + if (state == mVisibleState) { + return; + } + + mVisibleState = state; + switch (state) { + case STATE_ICON: + mMobileGroup.setVisibility(View.VISIBLE); + mDotView.setVisibility(View.GONE); + break; + case STATE_DOT: + mMobileGroup.setVisibility(View.INVISIBLE); + mDotView.setVisibility(View.VISIBLE); + break; + case STATE_HIDDEN: + default: + setVisibility(View.INVISIBLE); + break; + } } @Override public int getVisibleState() { - return 0; + return mVisibleState; } @VisibleForTesting 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 46b4078a1801..e0e991b4993f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DemoStatusIcons.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DemoStatusIcons.java @@ -237,9 +237,8 @@ public class DemoStatusIcons extends StatusIconContainer implements DemoMode, Da public void addMobileView(MobileIconState state) { Log.d(TAG, "addMobileView: "); - StatusBarMobileView view = StatusBarMobileView.fromContext(mContext); + StatusBarMobileView view = StatusBarMobileView.fromContext(mContext, state.slot); - view.setSlot(state.slot); view.applyMobileState(state); view.setStaticDrawableColor(mColor); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java index 1ba37a9bf9dd..3b9ee8bcd378 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java @@ -296,8 +296,7 @@ public interface StatusBarIconController { } private StatusBarMobileView onCreateStatusBarMobileView(String slot) { - StatusBarMobileView view = StatusBarMobileView.fromContext(mContext); - view.setSlot(slot); + StatusBarMobileView view = StatusBarMobileView.fromContext(mContext, slot); return view; } 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 4538977f7a6f..0811179e23d3 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusIconContainer.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusIconContainer.java @@ -49,7 +49,7 @@ public class StatusIconContainer extends AlphaOptimizedLinearLayout { private static final String TAG = "StatusIconContainer"; private static final boolean DEBUG = false; private static final boolean DEBUG_OVERFLOW = false; - // Max 5 status icons including battery + // Max 8 status icons including battery private static final int MAX_ICONS = 7; private static final int MAX_DOTS = 1; @@ -152,7 +152,7 @@ public class StatusIconContainer extends AlphaOptimizedLinearLayout { int visibleCount = mMeasureViews.size(); int maxVisible = visibleCount <= MAX_ICONS ? MAX_ICONS : MAX_ICONS - 1; - int totalWidth = getPaddingStart() + getPaddingEnd(); + int totalWidth = mPaddingLeft + mPaddingRight; boolean trackWidth = true; // Measure all children so that they report the correct width @@ -208,8 +208,8 @@ public class StatusIconContainer extends AlphaOptimizedLinearLayout { */ private void calculateIconTranslations() { mLayoutStates.clear(); - float width = getWidth() - getPaddingEnd(); - float translationX = width; + float width = getWidth(); + float translationX = width - getPaddingEnd(); float contentStart = getPaddingStart(); int childCount = getChildCount(); // Underflow === don't show content until that index @@ -344,10 +344,11 @@ public class StatusIconContainer extends AlphaOptimizedLinearLayout { animate = true; } - icon.setVisibleState(visibleState); if (animate) { animateTo(view, animationProperties); + icon.setVisibleState(visibleState); } else { + icon.setVisibleState(visibleState); super.applyToView(view); } |