diff --git a/packages/SystemUI/res/layout/signal_cluster_view.xml b/packages/SystemUI/res/layout/signal_cluster_view.xml index 3a8a17dc4dd2c..5889c55a8f42b 100644 --- a/packages/SystemUI/res/layout/signal_cluster_view.xml +++ b/packages/SystemUI/res/layout/signal_cluster_view.xml @@ -43,6 +43,12 @@ android:layout_width="wrap_content" /> + 0% 0dp + + + 2dp + + + 3dp diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSTile.java b/packages/SystemUI/src/com/android/systemui/qs/QSTile.java index 2b071cce5090c..cb685fe0ee3d9 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSTile.java @@ -373,6 +373,7 @@ public abstract class QSTile implements Listenable { public boolean activityOut; public int overlayIconId; public boolean filter; + public boolean isOverlayIconWide; @Override public boolean copyTo(State other) { @@ -380,13 +381,15 @@ public abstract class QSTile implements Listenable { final boolean changed = o.enabled != enabled || o.connected != connected || o.activityIn != activityIn || o.activityOut != activityOut - || o.overlayIconId != overlayIconId; + || o.overlayIconId != overlayIconId + || o.isOverlayIconWide != isOverlayIconWide; o.enabled = enabled; o.connected = connected; o.activityIn = activityIn; o.activityOut = activityOut; o.overlayIconId = overlayIconId; o.filter = filter; + o.isOverlayIconWide = isOverlayIconWide; return super.copyTo(other) || changed; } @@ -399,6 +402,7 @@ public abstract class QSTile implements Listenable { rt.insert(rt.length() - 1, ",activityOut=" + activityOut); rt.insert(rt.length() - 1, ",overlayIconId=" + overlayIconId); rt.insert(rt.length() - 1, ",filter=" + filter); + rt.insert(rt.length() - 1, ",wideOverlayIcon=" + isOverlayIconWide); return rt; } } diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSTileView.java b/packages/SystemUI/src/com/android/systemui/qs/QSTileView.java index e6175d23afaa6..8d7edb9d38b26 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSTileView.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSTileView.java @@ -230,7 +230,7 @@ public class QSTileView extends ViewGroup { final int w = MeasureSpec.getSize(widthMeasureSpec); final int h = MeasureSpec.getSize(heightMeasureSpec); final int iconSpec = exactly(mIconSizePx); - mIcon.measure(iconSpec, iconSpec); + mIcon.measure(MeasureSpec.makeMeasureSpec(w, MeasureSpec.AT_MOST), iconSpec); labelView().measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(h, MeasureSpec.AT_MOST)); if (mDual) { mDivider.measure(widthMeasureSpec, exactly(mDivider.getLayoutParams().height)); diff --git a/packages/SystemUI/src/com/android/systemui/qs/SignalTileView.java b/packages/SystemUI/src/com/android/systemui/qs/SignalTileView.java index 0ecdeaa45990b..97826c1a0f3b8 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/SignalTileView.java +++ b/packages/SystemUI/src/com/android/systemui/qs/SignalTileView.java @@ -37,11 +37,16 @@ public final class SignalTileView extends QSTileView { private ImageView mIn; private ImageView mOut; + private int mWideOverlayIconStartPadding; + public SignalTileView(Context context) { super(context); mIn = addTrafficView(R.drawable.ic_qs_signal_in); mOut = addTrafficView(R.drawable.ic_qs_signal_out); + + mWideOverlayIconStartPadding = context.getResources().getDimensionPixelSize( + R.dimen.wide_type_icon_start_padding_qs); } private ImageView addTrafficView(int icon) { @@ -106,6 +111,11 @@ public final class SignalTileView extends QSTileView { } else { mOverlay.setVisibility(GONE); } + if (s.overlayIconId > 0 && s.isOverlayIconWide) { + mSignal.setPaddingRelative(mWideOverlayIconStartPadding, 0, 0, 0); + } else { + mSignal.setPaddingRelative(0, 0, 0, 0); + } Drawable drawable = mSignal.getDrawable(); if (state.autoMirrorDrawable && drawable != null) { drawable.setAutoMirrored(true); diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java index 8743207954a5b..359a259ecf0f8 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java @@ -23,10 +23,8 @@ import android.content.res.Resources; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.TextView; import com.android.systemui.R; -import com.android.systemui.qs.DataUsageGraph; import com.android.systemui.qs.QSTile; import com.android.systemui.qs.QSTileView; import com.android.systemui.qs.SignalTileView; @@ -34,8 +32,6 @@ import com.android.systemui.statusbar.policy.NetworkController; import com.android.systemui.statusbar.policy.NetworkController.DataUsageInfo; import com.android.systemui.statusbar.policy.NetworkController.NetworkSignalChangedCallback; -import java.text.DecimalFormat; - /** Quick settings tile: Cellular **/ public class CellularTile extends QSTile { private static final Intent CELLULAR_SETTINGS = new Intent().setComponent(new ComponentName( @@ -95,6 +91,7 @@ public class CellularTile extends QSTile { : !cb.enabled || cb.airplaneModeEnabled ? R.drawable.ic_qs_signal_disabled : cb.mobileSignalIconId > 0 ? cb.mobileSignalIconId : R.drawable.ic_qs_signal_no_signal; + state.isOverlayIconWide = cb.isDataTypeIconWide; state.autoMirrorDrawable = !cb.noSim; state.overlayIconId = cb.enabled && (cb.dataTypeIconId > 0) && !cb.wifiConnected ? cb.dataTypeIconId @@ -142,6 +139,7 @@ public class CellularTile extends QSTile { boolean activityOut; String enabledDesc; boolean noSim; + boolean isDataTypeIconWide; } private final NetworkSignalChangedCallback mCallback = new NetworkSignalChangedCallback() { @@ -162,7 +160,8 @@ public class CellularTile extends QSTile { int mobileSignalIconId, String mobileSignalContentDescriptionId, int dataTypeIconId, boolean activityIn, boolean activityOut, - String dataTypeContentDescriptionId, String description, boolean noSim) { + String dataTypeContentDescriptionId, String description, boolean noSim, + boolean isDataTypeIconWide) { final CallbackInfo info = new CallbackInfo(); // TODO pool? info.enabled = enabled; info.wifiEnabled = mWifiEnabled; @@ -176,6 +175,7 @@ public class CellularTile extends QSTile { info.activityOut = activityOut; info.enabledDesc = description; info.noSim = noSim; + info.isDataTypeIconWide = isDataTypeIconWide; refreshState(info); } diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java index 4fc2ee4f1a918..09858128ffcfa 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java @@ -206,7 +206,8 @@ public class WifiTile extends QSTile { int mobileSignalIconId, String mobileSignalContentDescriptionId, int dataTypeIconId, boolean activityIn, boolean activityOut, - String dataTypeContentDescriptionId, String description, boolean noSim) { + String dataTypeContentDescriptionId, String description, boolean noSim, + boolean isDataTypeIconWide) { // noop } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java index 740211f5aa21f..18ef024083a22 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java @@ -50,10 +50,14 @@ public class SignalClusterView private int mAirplaneIconId = 0; private String mWifiDescription, mMobileDescription, mMobileTypeDescription; private boolean mRoaming; + private boolean mIsMobileTypeIconWide; ViewGroup mWifiGroup, mMobileGroup; ImageView mVpn, mWifi, mMobile, mMobileType, mAirplane; View mWifiAirplaneSpacer; + View mWifiSignalSpacer; + + private int mWideTypeIconStartPadding; public SignalClusterView(Context context) { this(context, null); @@ -79,6 +83,13 @@ public class SignalClusterView mVpnVisible = mSC.isVpnEnabled(); } + @Override + protected void onFinishInflate() { + super.onFinishInflate(); + mWideTypeIconStartPadding = getContext().getResources().getDimensionPixelSize( + R.dimen.wide_type_icon_start_padding); + } + @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); @@ -91,6 +102,7 @@ public class SignalClusterView mMobileType = (ImageView) findViewById(R.id.mobile_type); mAirplane = (ImageView) findViewById(R.id.airplane); mWifiAirplaneSpacer = findViewById(R.id.wifi_airplane_spacer); + mWifiSignalSpacer = findViewById(R.id.wifi_signal_spacer); apply(); } @@ -131,13 +143,15 @@ public class SignalClusterView @Override public void setMobileDataIndicators(boolean visible, int strengthIcon, int typeIcon, - String contentDescription, String typeContentDescription, boolean roaming) { + String contentDescription, String typeContentDescription, boolean roaming, + boolean isTypeIconWide) { mMobileVisible = visible; mMobileStrengthId = strengthIcon; mMobileTypeId = typeIcon; mMobileDescription = contentDescription; mMobileTypeDescription = typeContentDescription; mRoaming = roaming; + mIsMobileTypeIconWide = isTypeIconWide; apply(); } @@ -230,6 +244,14 @@ public class SignalClusterView mWifiAirplaneSpacer.setVisibility(View.GONE); } + if (mRoaming && mMobileVisible && mWifiVisible) { + mWifiSignalSpacer.setVisibility(View.VISIBLE); + } else { + mWifiSignalSpacer.setVisibility(View.GONE); + } + + mMobile.setPaddingRelative(mIsMobileTypeIconWide ? mWideTypeIconStartPadding : 0, 0, 0, 0); + if (DEBUG) Log.d(TAG, String.format("mobile: %s sig=%d typ=%d", (mMobileVisible ? "VISIBLE" : "GONE"), diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java index b64dcbe2a6997..2ed9366ff0e1b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java @@ -30,7 +30,8 @@ public interface NetworkController { void onMobileDataSignalChanged(boolean enabled, int mobileSignalIconId, String mobileSignalContentDescriptionId, int dataTypeIconId, boolean activityIn, boolean activityOut, - String dataTypeContentDescriptionId, String description, boolean noSim); + String dataTypeContentDescriptionId, String description, boolean noSim, + boolean isDataTypeIconWide); void onAirplaneModeChanged(boolean enabled); void onMobileDataEnabled(boolean enabled); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java index f04d6a535e1e4..508808961e6a9 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java @@ -63,9 +63,6 @@ public class NetworkControllerImpl extends BroadcastReceiver static final boolean DEBUG = false; static final boolean CHATTY = false; // additional diagnostics, but not logspew - private static final int FLIGHT_MODE_ICON = R.drawable.stat_sys_airplane_mode; - private static final int ROAMING_ICON = R.drawable.stat_sys_data_fully_connected_roam; - // telephony boolean mHspaDataDistinguishable; final TelephonyManager mPhone; @@ -165,7 +162,8 @@ public class NetworkControllerImpl extends BroadcastReceiver public interface SignalCluster { void setWifiIndicators(boolean visible, int strengthIcon, String contentDescription); void setMobileDataIndicators(boolean visible, int strengthIcon, int typeIcon, - String contentDescription, String typeContentDescription, boolean roaming); + String contentDescription, String typeContentDescription, boolean roaming, + boolean isTypeIconWide); void setIsAirplaneMode(boolean is, int airplaneIcon); } @@ -358,6 +356,16 @@ public class NetworkControllerImpl extends BroadcastReceiver mMobileDataController.setMobileDataEnabled(enabled); } + private boolean isTypeIconWide(int iconId) { + return TelephonyIcons.ICON_LTE == iconId || TelephonyIcons.ICON_1X == iconId + || TelephonyIcons.ICON_3G == iconId || TelephonyIcons.ICON_4G == iconId; + } + + private boolean isQsTypeIconWide(int iconId) { + return TelephonyIcons.QS_ICON_LTE == iconId || TelephonyIcons.QS_ICON_1X == iconId + || TelephonyIcons.QS_ICON_3G == iconId || TelephonyIcons.QS_ICON_4G == iconId; + } + public void refreshSignalCluster(SignalCluster cluster) { if (mDemoMode) return; cluster.setWifiIndicators( @@ -374,7 +382,8 @@ public class NetworkControllerImpl extends BroadcastReceiver mDataTypeIconId, mContentDescriptionWimax, mContentDescriptionDataType, - mDataTypeIconId == ROAMING_ICON); + mDataTypeIconId == TelephonyIcons.ROAMING_ICON, + false /* isTypeIconWide */ ); } else { // normal mobile data cluster.setMobileDataIndicators( @@ -383,7 +392,8 @@ public class NetworkControllerImpl extends BroadcastReceiver mDataTypeIconId, mContentDescriptionPhoneSignal, mContentDescriptionDataType, - mDataTypeIconId == ROAMING_ICON); + mDataTypeIconId == TelephonyIcons.ROAMING_ICON, + isTypeIconWide(mDataTypeIconId)); } cluster.setIsAirplaneMode(mAirplaneMode, mAirplaneIconId); } @@ -409,18 +419,20 @@ public class NetworkControllerImpl extends BroadcastReceiver if (isEmergencyOnly()) { cb.onMobileDataSignalChanged(false, mQSPhoneSignalIconId, mContentDescriptionPhoneSignal, mQSDataTypeIconId, mobileIn, mobileOut, - mContentDescriptionDataType, null, mNoSim); + mContentDescriptionDataType, null, mNoSim, isQsTypeIconWide(mQSDataTypeIconId)); } else { if (mIsWimaxEnabled && mWimaxConnected) { // Wimax is special cb.onMobileDataSignalChanged(true, mQSPhoneSignalIconId, mContentDescriptionPhoneSignal, mQSDataTypeIconId, mobileIn, mobileOut, - mContentDescriptionDataType, mNetworkName, mNoSim); + mContentDescriptionDataType, mNetworkName, mNoSim, + isQsTypeIconWide(mQSDataTypeIconId)); } else { // Normal mobile data cb.onMobileDataSignalChanged(mHasMobileDataFeature, mQSPhoneSignalIconId, mContentDescriptionPhoneSignal, mQSDataTypeIconId, mobileIn, mobileOut, - mContentDescriptionDataType, mNetworkName, mNoSim); + mContentDescriptionDataType, mNetworkName, mNoSim, + isQsTypeIconWide(mQSDataTypeIconId)); } } cb.onAirplaneModeChanged(mAirplaneMode); @@ -754,7 +766,7 @@ public class NetworkControllerImpl extends BroadcastReceiver R.string.accessibility_data_connection_4g); } else { mDataIconList = TelephonyIcons.DATA_LTE[mInetCondition]; - mDataTypeIconId = R.drawable.stat_sys_data_fully_connected_lte; + mDataTypeIconId = TelephonyIcons.ICON_LTE; mQSDataTypeIconId = TelephonyIcons.QS_DATA_LTE[mInetCondition]; mContentDescriptionDataType = mContext.getString( R.string.accessibility_data_connection_lte); @@ -780,11 +792,11 @@ public class NetworkControllerImpl extends BroadcastReceiver if (isCdma()) { if (isCdmaEri()) { - mDataTypeIconId = ROAMING_ICON; + mDataTypeIconId = TelephonyIcons.ROAMING_ICON; mQSDataTypeIconId = TelephonyIcons.QS_DATA_R[mInetCondition]; } } else if (mPhone.isNetworkRoaming()) { - mDataTypeIconId = ROAMING_ICON; + mDataTypeIconId = TelephonyIcons.ROAMING_ICON; mQSDataTypeIconId = TelephonyIcons.QS_DATA_R[mInetCondition]; } } @@ -1164,7 +1176,7 @@ public class NetworkControllerImpl extends BroadcastReceiver // look again; your radios are now airplanes mContentDescriptionPhoneSignal = mContext.getString( R.string.accessibility_airplane_mode); - mAirplaneIconId = FLIGHT_MODE_ICON; + mAirplaneIconId = TelephonyIcons.FLIGHT_MODE_ICON; mPhoneSignalIconId = mDataSignalIconId = mDataTypeIconId = mQSDataTypeIconId = 0; mQSPhoneSignalIconId = 0; @@ -1198,11 +1210,11 @@ public class NetworkControllerImpl extends BroadcastReceiver mQSDataTypeIconId = 0; if (isCdma()) { if (isCdmaEri()) { - mDataTypeIconId = ROAMING_ICON; + mDataTypeIconId = TelephonyIcons.ROAMING_ICON; mQSDataTypeIconId = TelephonyIcons.QS_DATA_R[mInetCondition]; } } else if (mPhone.isNetworkRoaming()) { - mDataTypeIconId = ROAMING_ICON; + mDataTypeIconId = TelephonyIcons.ROAMING_ICON; mQSDataTypeIconId = TelephonyIcons.QS_DATA_R[mInetCondition]; } } @@ -1509,7 +1521,7 @@ public class NetworkControllerImpl extends BroadcastReceiver if (airplane != null) { boolean show = airplane.equals("show"); for (SignalCluster cluster : mSignalClusters) { - cluster.setIsAirplaneMode(show, FLIGHT_MODE_ICON); + cluster.setIsAirplaneMode(show, TelephonyIcons.FLIGHT_MODE_ICON); } } String fully = args.getString("fully"); @@ -1540,23 +1552,23 @@ public class NetworkControllerImpl extends BroadcastReceiver String datatype = args.getString("datatype"); if (datatype != null) { mDemoDataTypeIconId = - datatype.equals("1x") ? R.drawable.stat_sys_data_fully_connected_1x : - datatype.equals("3g") ? R.drawable.stat_sys_data_fully_connected_3g : - datatype.equals("4g") ? R.drawable.stat_sys_data_fully_connected_4g : + datatype.equals("1x") ? TelephonyIcons.ICON_1X : + datatype.equals("3g") ? TelephonyIcons.ICON_3G : + datatype.equals("4g") ? TelephonyIcons.ICON_4G : datatype.equals("e") ? R.drawable.stat_sys_data_fully_connected_e : datatype.equals("g") ? R.drawable.stat_sys_data_fully_connected_g : datatype.equals("h") ? R.drawable.stat_sys_data_fully_connected_h : - datatype.equals("lte") ? R.drawable.stat_sys_data_fully_connected_lte : - datatype.equals("roam") ? ROAMING_ICON : + datatype.equals("lte") ? TelephonyIcons.ICON_LTE : + datatype.equals("roam") ? TelephonyIcons.ROAMING_ICON : 0; mDemoQSDataTypeIconId = - datatype.equals("1x") ? R.drawable.ic_qs_signal_1x : - datatype.equals("3g") ? R.drawable.ic_qs_signal_3g : - datatype.equals("4g") ? R.drawable.ic_qs_signal_4g : + datatype.equals("1x") ? TelephonyIcons.QS_ICON_1X : + datatype.equals("3g") ? TelephonyIcons.QS_ICON_3G : + datatype.equals("4g") ? TelephonyIcons.QS_ICON_4G : datatype.equals("e") ? R.drawable.ic_qs_signal_e : datatype.equals("g") ? R.drawable.ic_qs_signal_g : datatype.equals("h") ? R.drawable.ic_qs_signal_h : - datatype.equals("lte") ? R.drawable.ic_qs_signal_lte : + datatype.equals("lte") ? TelephonyIcons.QS_ICON_LTE : datatype.equals("roam") ? R.drawable.ic_qs_signal_r : 0; } @@ -1575,7 +1587,8 @@ public class NetworkControllerImpl extends BroadcastReceiver mDemoDataTypeIconId, "Demo", "Demo", - mDemoDataTypeIconId == ROAMING_ICON); + mDemoDataTypeIconId == TelephonyIcons.ROAMING_ICON, + isTypeIconWide(mDemoDataTypeIconId)); } refreshViews(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java index 84c53ce961dba..1f2b91895a759 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java @@ -188,5 +188,16 @@ class TelephonyIcons { R.drawable.ic_qs_signal_lte }; + static final int FLIGHT_MODE_ICON = R.drawable.stat_sys_airplane_mode; + static final int ROAMING_ICON = R.drawable.stat_sys_data_fully_connected_roam; + static final int ICON_LTE = R.drawable.stat_sys_data_fully_connected_lte; + static final int ICON_3G = R.drawable.stat_sys_data_fully_connected_3g; + static final int ICON_4G = R.drawable.stat_sys_data_fully_connected_4g; + static final int ICON_1X = R.drawable.stat_sys_data_fully_connected_1x; + + static final int QS_ICON_LTE = R.drawable.ic_qs_signal_lte; + static final int QS_ICON_3G = R.drawable.ic_qs_signal_3g; + static final int QS_ICON_4G = R.drawable.ic_qs_signal_4g; + static final int QS_ICON_1X = R.drawable.ic_qs_signal_1x; }