From 3fd5dd1f52b4b7b0ece15b5a646a31308c10e691 Mon Sep 17 00:00:00 2001 From: yinxu Date: Mon, 15 Feb 2021 20:09:03 -0800 Subject: [PATCH] Define wrapper classes for WiFi and Mobile indicators Bug: 176428921 Test: Unit tests Change-Id: I9271eef66a903122bbc0ec0330ec533295a39567 --- .../qs/carrier/QSCarrierGroupController.java | 22 ++- .../android/systemui/qs/tiles/CastTile.java | 10 +- .../systemui/qs/tiles/CellularTile.java | 19 ++- .../systemui/qs/tiles/InternetTile.java | 78 ++++------- .../android/systemui/qs/tiles/WifiTile.java | 28 ++-- .../phone/StatusBarSignalPolicy.java | 72 ++++------ .../statusbar/policy/CallbackHandler.java | 48 ++----- .../policy/MobileSignalController.java | 9 +- .../statusbar/policy/NetworkController.java | 129 ++++++++++++++---- .../policy/WifiSignalController.java | 23 +++- .../carrier/QSCarrierGroupControllerTest.java | 4 +- .../systemui/qs/tiles/CastTileTest.java | 13 +- .../statusbar/policy/CallbackHandlerTest.java | 87 ++++++------ .../policy/NetworkControllerBaseTest.java | 103 ++++++-------- .../policy/NetworkControllerWifiTest.java | 47 +++---- 15 files changed, 337 insertions(+), 355 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/qs/carrier/QSCarrierGroupController.java b/packages/SystemUI/src/com/android/systemui/qs/carrier/QSCarrierGroupController.java index a567f512b204b..0dc0b30748aa0 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/carrier/QSCarrierGroupController.java +++ b/packages/SystemUI/src/com/android/systemui/qs/carrier/QSCarrierGroupController.java @@ -42,6 +42,7 @@ import com.android.systemui.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.statusbar.policy.NetworkController; +import com.android.systemui.statusbar.policy.NetworkController.MobileDataIndicators; import java.util.function.Consumer; @@ -74,30 +75,25 @@ public class QSCarrierGroupController { private final NetworkController.SignalCallback mSignalCallback = new NetworkController.SignalCallback() { @Override - public void setMobileDataIndicators(NetworkController.IconState statusIcon, - NetworkController.IconState qsIcon, int statusType, int qsType, - boolean activityIn, boolean activityOut, - CharSequence typeContentDescription, - CharSequence typeContentDescriptionHtml, CharSequence description, - boolean isWide, int subId, boolean roaming, boolean showTriangle) { + public void setMobileDataIndicators(MobileDataIndicators indicators) { if (mProviderModel) { return; } - int slotIndex = getSlotIndex(subId); + int slotIndex = getSlotIndex(indicators.subId); if (slotIndex >= SIM_SLOTS) { Log.w(TAG, "setMobileDataIndicators - slot: " + slotIndex); return; } if (slotIndex == SubscriptionManager.INVALID_SIM_SLOT_INDEX) { - Log.e(TAG, "Invalid SIM slot index for subscription: " + subId); + Log.e(TAG, "Invalid SIM slot index for subscription: " + indicators.subId); return; } mInfos[slotIndex] = new CellSignalState( - statusIcon.visible, - statusIcon.icon, - statusIcon.contentDescription, - typeContentDescription.toString(), - roaming + indicators.statusIcon.visible, + indicators.statusIcon.icon, + indicators.statusIcon.contentDescription, + indicators.typeContentDescription.toString(), + indicators.roaming ); mMainHandler.obtainMessage(H.MSG_UPDATE_STATE).sendToTarget(); } diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java index 1dddc452ec1d9..f03ce2c0b267a 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java @@ -54,6 +54,7 @@ import com.android.systemui.statusbar.policy.CastController.CastDevice; import com.android.systemui.statusbar.policy.HotspotController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.NetworkController; +import com.android.systemui.statusbar.policy.NetworkController.WifiIndicators; import java.util.ArrayList; import java.util.LinkedHashMap; @@ -269,13 +270,10 @@ public class CastTile extends QSTileImpl { private final NetworkController.SignalCallback mSignalCallback = new NetworkController.SignalCallback() { @Override - public void setWifiIndicators(boolean enabled, - NetworkController.IconState statusIcon, - NetworkController.IconState qsIcon, boolean activityIn, boolean activityOut, - String description, boolean isTransient, String statusLabel) { + public void setWifiIndicators(WifiIndicators indicators) { // statusIcon.visible has the connected status information - boolean enabledAndConnected = - enabled && (qsIcon == null ? false : qsIcon.visible); + boolean enabledAndConnected = indicators.enabled + && (indicators.qsIcon == null ? false : indicators.qsIcon.visible); if (enabledAndConnected != mWifiConnected) { mWifiConnected = enabledAndConnected; // Hotspot is not connected, so changes here should update 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 720c5dc7026f6..6a574d1d314bf 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java @@ -56,6 +56,7 @@ import com.android.systemui.qs.tileimpl.QSTileImpl; import com.android.systemui.statusbar.phone.SystemUIDialog; import com.android.systemui.statusbar.policy.NetworkController; import com.android.systemui.statusbar.policy.NetworkController.IconState; +import com.android.systemui.statusbar.policy.NetworkController.MobileDataIndicators; import com.android.systemui.statusbar.policy.NetworkController.SignalCallback; import javax.inject.Inject; @@ -264,21 +265,17 @@ public class CellularTile extends QSTileImpl { private final CallbackInfo mInfo = new CallbackInfo(); @Override - public void setMobileDataIndicators(IconState statusIcon, IconState qsIcon, int statusType, - int qsType, boolean activityIn, boolean activityOut, - CharSequence typeContentDescription, - CharSequence typeContentDescriptionHtml, CharSequence description, - boolean isWide, int subId, boolean roaming, boolean showTriangle) { - if (qsIcon == null) { + public void setMobileDataIndicators(MobileDataIndicators indicators) { + if (indicators.qsIcon == null) { // Not data sim, don't display. return; } mInfo.dataSubscriptionName = mController.getMobileDataNetworkName(); - mInfo.dataContentDescription = - (description != null) ? typeContentDescriptionHtml : null; - mInfo.activityIn = activityIn; - mInfo.activityOut = activityOut; - mInfo.roaming = roaming; + mInfo.dataContentDescription = indicators.description != null + ? indicators.typeContentDescriptionHtml : null; + mInfo.activityIn = indicators.activityIn; + mInfo.activityOut = indicators.activityOut; + mInfo.roaming = indicators.roaming; mInfo.multipleSubs = mController.getNumberSubscriptions() > 1; refreshState(mInfo); } diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTile.java index 946d041bdd938..e1a1fd2679c57 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTile.java @@ -51,7 +51,9 @@ import com.android.systemui.qs.logging.QSLogger; import com.android.systemui.qs.tileimpl.QSTileImpl; import com.android.systemui.statusbar.policy.NetworkController; import com.android.systemui.statusbar.policy.NetworkController.IconState; +import com.android.systemui.statusbar.policy.NetworkController.MobileDataIndicators; import com.android.systemui.statusbar.policy.NetworkController.SignalCallback; +import com.android.systemui.statusbar.policy.NetworkController.WifiIndicators; import com.android.systemui.statusbar.policy.WifiIcons; import java.io.FileDescriptor; @@ -234,70 +236,44 @@ public class InternetTile extends QSTileImpl { @Override - public void setWifiIndicators(boolean enabled, IconState statusIcon, IconState qsIcon, - boolean activityIn, boolean activityOut, String description, boolean isTransient, - String statusLabel) { + public void setWifiIndicators(WifiIndicators indicators) { if (DEBUG) { - Log.d(TAG, "setWifiIndicators: " - + "enabled = " + enabled + "," - + "statusIcon = " + (statusIcon == null ? "" : statusIcon.toString()) + "," - + "qsIcon = " + (qsIcon == null ? "" : qsIcon.toString()) + "," - + "activityIn = " + activityIn + "," - + "activityOut = " + activityOut + "," - + "description = " + description + "," - + "isTransient = " + isTransient + "," - + "statusLabel = " + statusLabel); + Log.d(TAG, "setWifiIndicators: " + indicators); } - mWifiInfo.mEnabled = enabled; - if (qsIcon == null) { + mWifiInfo.mEnabled = indicators.enabled; + if (indicators.qsIcon == null) { return; } - mWifiInfo.mConnected = qsIcon.visible; - mWifiInfo.mWifiSignalIconId = qsIcon.icon; - mWifiInfo.mWifiSignalContentDescription = qsIcon.contentDescription; - mWifiInfo.mSsid = description; - mWifiInfo.mActivityIn = activityIn; - mWifiInfo.mActivityOut = activityOut; - mWifiInfo.mIsTransient = isTransient; - mWifiInfo.mStatusLabel = statusLabel; + mWifiInfo.mConnected = indicators.qsIcon.visible; + mWifiInfo.mWifiSignalIconId = indicators.qsIcon.icon; + mWifiInfo.mWifiSignalContentDescription = indicators.qsIcon.contentDescription; + mWifiInfo.mEnabled = indicators.enabled; + mWifiInfo.mSsid = indicators.description; + mWifiInfo.mActivityIn = indicators.activityIn; + mWifiInfo.mActivityOut = indicators.activityOut; + mWifiInfo.mIsTransient = indicators.isTransient; + mWifiInfo.mStatusLabel = indicators.statusLabel; refreshState(mWifiInfo); } @Override - public void setMobileDataIndicators(IconState statusIcon, IconState qsIcon, int statusType, - int qsType, boolean activityIn, boolean activityOut, - CharSequence typeContentDescription, - CharSequence typeContentDescriptionHtml, CharSequence description, - boolean isWide, int subId, boolean roaming, boolean showTriangle) { + public void setMobileDataIndicators(MobileDataIndicators indicators) { if (DEBUG) { - Log.d(TAG, "setMobileDataIndicators: " - + "statusIcon = " + (statusIcon == null ? "" : statusIcon.toString()) + "," - + "qsIcon = " + (qsIcon == null ? "" : qsIcon.toString()) + "," - + "statusType = " + statusType + "," - + "qsType = " + qsType + "," - + "activityIn = " + activityIn + "," - + "activityOut = " + activityOut + "," - + "typeContentDescription = " + typeContentDescription + "," - + "typeContentDescriptionHtml = " + typeContentDescriptionHtml + "," - + "description = " + description + "," - + "isWide = " + isWide + "," - + "subId = " + subId + "," - + "roaming = " + roaming + "," - + "showTriangle = " + showTriangle); + Log.d(TAG, "setMobileDataIndicators: " + indicators); } - if (qsIcon == null) { + if (indicators.qsIcon == null) { // Not data sim, don't display. return; } - mCellularInfo.mDataSubscriptionName = - description == null ? mController.getMobileDataNetworkName() : description; - mCellularInfo.mDataContentDescription = - (description != null) ? typeContentDescriptionHtml : null; - mCellularInfo.mMobileSignalIconId = qsIcon.icon; - mCellularInfo.mQsTypeIcon = qsType; - mCellularInfo.mActivityIn = activityIn; - mCellularInfo.mActivityOut = activityOut; - mCellularInfo.mRoaming = roaming; + mCellularInfo.mDataSubscriptionName = indicators.description == null + ? mController.getMobileDataNetworkName() : indicators.description; + mCellularInfo.mDataContentDescription = indicators.description != null + ? indicators.typeContentDescriptionHtml : null; + mCellularInfo.mMobileSignalIconId = indicators.qsIcon.icon; + mCellularInfo.mQsTypeIcon = indicators.qsType; + mCellularInfo.mActivityIn = indicators.activityIn; + mCellularInfo.mActivityOut = indicators.activityOut; + mCellularInfo.mRoaming = indicators.roaming; mCellularInfo.mMultipleSubs = mController.getNumberSubscriptions() > 1; refreshState(mCellularInfo); } 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 a6fd01108fada..341e67c9393f7 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java @@ -51,8 +51,8 @@ import com.android.systemui.qs.tileimpl.QSIconViewImpl; import com.android.systemui.qs.tileimpl.QSTileImpl; import com.android.systemui.statusbar.policy.NetworkController; import com.android.systemui.statusbar.policy.NetworkController.AccessPointController; -import com.android.systemui.statusbar.policy.NetworkController.IconState; import com.android.systemui.statusbar.policy.NetworkController.SignalCallback; +import com.android.systemui.statusbar.policy.NetworkController.WifiIndicators; import com.android.systemui.statusbar.policy.WifiIcons; import com.android.wifitrackerlib.WifiEntry; @@ -303,22 +303,20 @@ public class WifiTile extends QSTileImpl { final CallbackInfo mInfo = new CallbackInfo(); @Override - public void setWifiIndicators(boolean enabled, IconState statusIcon, IconState qsIcon, - boolean activityIn, boolean activityOut, String description, boolean isTransient, - String statusLabel) { - if (DEBUG) Log.d(TAG, "onWifiSignalChanged enabled=" + enabled); - if (qsIcon == null) { + public void setWifiIndicators(WifiIndicators indicators) { + if (DEBUG) Log.d(TAG, "onWifiSignalChanged enabled=" + indicators.enabled); + if (indicators.qsIcon == null) { return; } - mInfo.enabled = enabled; - mInfo.connected = qsIcon.visible; - mInfo.wifiSignalIconId = qsIcon.icon; - mInfo.ssid = description; - mInfo.activityIn = activityIn; - mInfo.activityOut = activityOut; - mInfo.wifiSignalContentDescription = qsIcon.contentDescription; - mInfo.isTransient = isTransient; - mInfo.statusLabel = statusLabel; + mInfo.enabled = indicators.enabled; + mInfo.connected = indicators.qsIcon.visible; + mInfo.wifiSignalIconId = indicators.qsIcon.icon; + mInfo.ssid = indicators.description; + mInfo.activityIn = indicators.activityIn; + mInfo.activityOut = indicators.activityOut; + mInfo.wifiSignalContentDescription = indicators.qsIcon.contentDescription; + mInfo.isTransient = indicators.isTransient; + mInfo.statusLabel = indicators.statusLabel; if (isShowingDetail()) { mDetailAdapter.updateItems(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java index dacd9417b22ab..9ee7b09589d83 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java @@ -27,6 +27,8 @@ import com.android.systemui.Dependency; import com.android.systemui.R; import com.android.systemui.statusbar.policy.NetworkController; import com.android.systemui.statusbar.policy.NetworkController.IconState; +import com.android.systemui.statusbar.policy.NetworkController.MobileDataIndicators; +import com.android.systemui.statusbar.policy.NetworkController.WifiIndicators; import com.android.systemui.statusbar.policy.NetworkControllerImpl; import com.android.systemui.statusbar.policy.SecurityController; import com.android.systemui.tuner.TunerService; @@ -143,24 +145,14 @@ public class StatusBarSignalPolicy implements NetworkControllerImpl.SignalCallba } @Override - public void setWifiIndicators(boolean enabled, IconState statusIcon, IconState qsIcon, - boolean activityIn, boolean activityOut, String description, boolean isTransient, - String statusLabel) { + public void setWifiIndicators(WifiIndicators indicators) { if (DEBUG) { - Log.d(TAG, "setWifiIndicators: " - + "enabled = " + enabled + "," - + "statusIcon = " + (statusIcon == null ? "" : statusIcon.toString()) + "," - + "qsIcon = " + (qsIcon == null ? "" : qsIcon.toString()) + "," - + "activityIn = " + activityIn + "," - + "activityOut = " + activityOut + "," - + "description = " + description + "," - + "isTransient = " + isTransient + "," - + "statusLabel = " + statusLabel); + Log.d(TAG, "setWifiIndicators: " + indicators); } - boolean visible = statusIcon.visible && !mHideWifi; - boolean in = activityIn && mActivityEnabled && visible; - boolean out = activityOut && mActivityEnabled && visible; - mIsWifiEnabled = enabled; + boolean visible = indicators.statusIcon.visible && !mHideWifi; + boolean in = indicators.activityIn && mActivityEnabled && visible; + boolean out = indicators.activityOut && mActivityEnabled && visible; + mIsWifiEnabled = indicators.enabled; WifiIconState newState = mWifiIconState.copy(); @@ -174,10 +166,10 @@ public class StatusBarSignalPolicy implements NetworkControllerImpl.SignalCallba newState.resId = R.drawable.ic_qs_no_internet_available; } else { newState.visible = visible; - newState.resId = statusIcon.icon; + newState.resId = indicators.statusIcon.icon; newState.activityIn = in; newState.activityOut = out; - newState.contentDescription = statusIcon.contentDescription; + newState.contentDescription = indicators.statusIcon.contentDescription; MobileIconState first = getFirstMobileState(); newState.signalSpacerVisible = first != null && first.typeId != 0; } @@ -225,44 +217,28 @@ public class StatusBarSignalPolicy implements NetworkControllerImpl.SignalCallba } @Override - public void setMobileDataIndicators(IconState statusIcon, IconState qsIcon, int statusType, - int qsType, boolean activityIn, boolean activityOut, - CharSequence typeContentDescription, - CharSequence typeContentDescriptionHtml, CharSequence description, - boolean isWide, int subId, boolean roaming, boolean showTriangle) { + public void setMobileDataIndicators(MobileDataIndicators indicators) { if (DEBUG) { - Log.d(TAG, "setMobileDataIndicators: " - + "statusIcon = " + (statusIcon == null ? "" : statusIcon.toString()) + "," - + "qsIcon = " + (qsIcon == null ? "" : qsIcon.toString()) + "," - + "statusType = " + statusType + "," - + "qsType = " + qsType + "," - + "activityIn = " + activityIn + "," - + "activityOut = " + activityOut + "," - + "typeContentDescription = " + typeContentDescription + "," - + "typeContentDescriptionHtml = " + typeContentDescriptionHtml + "," - + "description = " + description + "," - + "isWide = " + isWide + "," - + "subId = " + subId + "," - + "roaming = " + roaming + "," - + "showTriangle = " + showTriangle); + Log.d(TAG, "setMobileDataIndicators: " + indicators); } - MobileIconState state = getState(subId); + MobileIconState state = getState(indicators.subId); if (state == null) { return; } // Visibility of the data type indicator changed - boolean typeChanged = statusType != state.typeId && (statusType == 0 || state.typeId == 0); + boolean typeChanged = indicators.statusType != state.typeId + && (indicators.statusType == 0 || state.typeId == 0); - state.visible = statusIcon.visible && !mHideMobile; - state.strengthId = statusIcon.icon; - state.typeId = statusType; - state.contentDescription = statusIcon.contentDescription; - state.typeContentDescription = typeContentDescription; - state.showTriangle = showTriangle; - state.roaming = roaming; - state.activityIn = activityIn && mActivityEnabled; - state.activityOut = activityOut && mActivityEnabled; + state.visible = indicators.statusIcon.visible && !mHideMobile; + state.strengthId = indicators.statusIcon.icon; + state.typeId = indicators.statusType; + state.contentDescription = indicators.statusIcon.contentDescription; + state.typeContentDescription = indicators.typeContentDescription; + state.showTriangle = indicators.showTriangle; + state.roaming = indicators.roaming; + state.activityIn = indicators.activityIn && mActivityEnabled; + state.activityOut = indicators.activityOut && mActivityEnabled; if (DEBUG) { Log.d(TAG, "MobileIconStates: " diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java index 528c0cbae0dd9..b96cb5e36c82c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java @@ -23,7 +23,9 @@ import android.telephony.SubscriptionInfo; import com.android.internal.annotations.VisibleForTesting; import com.android.systemui.statusbar.policy.NetworkController.EmergencyListener; import com.android.systemui.statusbar.policy.NetworkController.IconState; +import com.android.systemui.statusbar.policy.NetworkController.MobileDataIndicators; import com.android.systemui.statusbar.policy.NetworkController.SignalCallback; +import com.android.systemui.statusbar.policy.NetworkController.WifiIndicators; import java.io.PrintWriter; import java.text.SimpleDateFormat; @@ -119,63 +121,29 @@ public class CallbackHandler extends Handler implements EmergencyListener, Signa } @Override - public void setWifiIndicators(final boolean enabled, final IconState statusIcon, - final IconState qsIcon, final boolean activityIn, final boolean activityOut, - final String description, boolean isTransient, String secondaryLabel) { + public void setWifiIndicators(final WifiIndicators indicators) { String log = new StringBuilder() .append(SSDF.format(System.currentTimeMillis())).append(",") - .append("setWifiIndicators: ") - .append("enabled=").append(enabled).append(",") - .append("statusIcon=").append(statusIcon).append(",") - .append("qsIcon=").append(qsIcon).append(",") - .append("activityIn=").append(activityIn).append(",") - .append("activityOut=").append(activityOut).append(",") - .append("description=").append(description).append(",") - .append("isTransient=").append(isTransient).append(",") - .append("secondaryLabel=").append(secondaryLabel) + .append(indicators) .toString(); recordLastCallback(log); post(() -> { for (SignalCallback callback : mSignalCallbacks) { - callback.setWifiIndicators(enabled, statusIcon, qsIcon, activityIn, activityOut, - description, isTransient, secondaryLabel); + callback.setWifiIndicators(indicators); } }); - - } @Override - public void setMobileDataIndicators(final IconState statusIcon, final IconState qsIcon, - final int statusType, final int qsType, final boolean activityIn, - final boolean activityOut, final CharSequence typeContentDescription, - CharSequence typeContentDescriptionHtml, final CharSequence description, - final boolean isWide, final int subId, boolean roaming, boolean showTriangle) { + public void setMobileDataIndicators(final MobileDataIndicators indicators) { String log = new StringBuilder() .append(SSDF.format(System.currentTimeMillis())).append(",") - .append("setMobileDataIndicators: ") - .append("statusIcon=").append(statusIcon).append(",") - .append("qsIcon=").append(qsIcon).append(",") - .append("statusType=").append(statusType).append(",") - .append("qsType=").append(qsType).append(",") - .append("activityIn=").append(activityIn).append(",") - .append("activityOut=").append(activityOut).append(",") - .append("typeContentDescription=").append(typeContentDescription).append(",") - .append("typeContentDescriptionHtml=").append(typeContentDescriptionHtml) - .append(",") - .append("description=").append(description).append(",") - .append("isWide=").append(isWide).append(",") - .append("subId=").append(subId).append(",") - .append("roaming=").append(roaming).append(",") - .append("showTriangle=").append(showTriangle) + .append(indicators) .toString(); recordLastCallback(log); post(() -> { for (SignalCallback signalCluster : mSignalCallbacks) { - signalCluster.setMobileDataIndicators(statusIcon, qsIcon, statusType, qsType, - activityIn, activityOut, typeContentDescription, - typeContentDescriptionHtml, description, isWide, subId, roaming, - showTriangle); + signalCluster.setMobileDataIndicators(indicators); } }); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java index 1ab7652d4280e..6c097bdb08d38 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java @@ -59,6 +59,7 @@ import com.android.settingslib.mobile.TelephonyIcons; import com.android.settingslib.net.SignalStrengthUtil; import com.android.systemui.R; import com.android.systemui.statusbar.policy.NetworkController.IconState; +import com.android.systemui.statusbar.policy.NetworkController.MobileDataIndicators; import com.android.systemui.statusbar.policy.NetworkController.SignalCallback; import java.io.PrintWriter; @@ -402,10 +403,12 @@ public class MobileSignalController extends SignalController, D boolean isRadioOn(); + /** + * Wrapper class for all the WiFi signals used for WiFi indicators. + */ + final class WifiIndicators { + public boolean enabled; + public IconState statusIcon; + public IconState qsIcon; + public boolean activityIn; + public boolean activityOut; + public String description; + public boolean isTransient; + public String statusLabel; + + public WifiIndicators(boolean enabled, IconState statusIcon, IconState qsIcon, + boolean activityIn, boolean activityOut, String description, + boolean isTransient, String statusLabel) { + this.enabled = enabled; + this.statusIcon = statusIcon; + this.qsIcon = qsIcon; + this.activityIn = activityIn; + this.activityOut = activityOut; + this.description = description; + this.isTransient = isTransient; + this.statusLabel = statusLabel; + } + + @Override + public String toString() { + return new StringBuilder("WifiIndicators[") + .append("enabled=").append(enabled) + .append(",statusIcon=").append(statusIcon == null ? "" : statusIcon.toString()) + .append(",qsIcon=").append(qsIcon == null ? "" : qsIcon.toString()) + .append(",activityIn=").append(activityIn) + .append(",activityOut=").append(activityOut) + .append(",description=").append(description) + .append(",isTransient=").append(isTransient) + .append(",statusLabel=").append(statusLabel) + .append(']').toString(); + } + } + + /** + * Wrapper class for all the mobile signals used for mobile data indicators. + */ + final class MobileDataIndicators { + public IconState statusIcon; + public IconState qsIcon; + public int statusType; + public int qsType; + public boolean activityIn; + public boolean activityOut; + public CharSequence typeContentDescription; + public CharSequence typeContentDescriptionHtml; + public CharSequence description; + public boolean isWide; + public int subId; + public boolean roaming; + public boolean showTriangle; + + public MobileDataIndicators(IconState statusIcon, IconState qsIcon, int statusType, + int qsType, boolean activityIn, boolean activityOut, + CharSequence typeContentDescription, CharSequence typeContentDescriptionHtml, + CharSequence description, boolean isWide, int subId, boolean roaming, + boolean showTriangle) { + this.statusIcon = statusIcon; + this.qsIcon = qsIcon; + this.statusType = statusType; + this.qsType = qsType; + this.activityIn = activityIn; + this.activityOut = activityOut; + this.typeContentDescription = typeContentDescription; + this.typeContentDescriptionHtml = typeContentDescriptionHtml; + this.description = description; + this.isWide = isWide; + this.subId = subId; + this.roaming = roaming; + this.showTriangle = showTriangle; + } + + @Override + public String toString() { + return new StringBuilder("MobileDataIndicators[") + .append("statusIcon=").append(statusIcon == null ? "" : statusIcon.toString()) + .append(",qsIcon=").append(qsIcon == null ? "" : qsIcon.toString()) + .append(",statusType=").append(statusType) + .append(",qsType=").append(qsType) + .append(",activityIn=").append(activityIn) + .append(",activityOut=").append(activityOut) + .append(",typeContentDescription=").append(typeContentDescription) + .append(",typeContentDescriptionHtml=").append(typeContentDescriptionHtml) + .append(",description=").append(description) + .append(",isWide=").append(isWide) + .append(",subId=").append(subId) + .append(",roaming=").append(roaming) + .append(",showTriangle=").append(showTriangle) + .append(']').toString(); + } + } + public interface SignalCallback { - default void setWifiIndicators(boolean enabled, IconState statusIcon, IconState qsIcon, - boolean activityIn, boolean activityOut, String description, boolean isTransient, - String statusLabel) {} + /** + * Callback for listeners to be able to update the state of any UI tracking connectivity of + * WiFi networks. + */ + default void setWifiIndicators(WifiIndicators wifiIndicators) {} /** * Callback for listeners to be able to update the state of any UI tracking connectivity - * @param statusIcon the icon that should be shown in the status bar - * @param qsIcon the icon to show in Quick Settings - * @param statusType the resId of the data type icon (e.g. LTE) to show in the status bar - * @param qsType similar to above, the resId of the data type icon to show in Quick Settings - * @param activityIn indicates whether there is inbound activity - * @param activityOut indicates outbound activity - * @param typeContentDescription the contentDescription of the data type - * @param typeContentDescriptionHtml the (possibly HTML-styled) contentDescription of the - * data type. Suitable for display - * @param description description of the network (usually just the network name) - * @param isWide //TODO: unused? - * @param subId subscription ID for which to update the UI - * @param roaming indicates roaming - * @param showTriangle whether to show the mobile triangle the in status bar + * of Mobile networks. */ - default void setMobileDataIndicators(IconState statusIcon, IconState qsIcon, int statusType, - int qsType, boolean activityIn, boolean activityOut, - CharSequence typeContentDescription, - CharSequence typeContentDescriptionHtml, CharSequence description, - boolean isWide, int subId, boolean roaming, boolean showTriangle) { - } + default void setMobileDataIndicators(MobileDataIndicators mobileDataIndicators) {} default void setSubs(List subs) {} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiSignalController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiSignalController.java index 16998d7be9365..8d72c9c8810e5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiSignalController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiSignalController.java @@ -38,7 +38,9 @@ import com.android.settingslib.mobile.TelephonyIcons; import com.android.settingslib.wifi.WifiStatusTracker; import com.android.systemui.R; import com.android.systemui.statusbar.policy.NetworkController.IconState; +import com.android.systemui.statusbar.policy.NetworkController.MobileDataIndicators; import com.android.systemui.statusbar.policy.NetworkController.SignalCallback; +import com.android.systemui.statusbar.policy.NetworkController.WifiIndicators; import java.io.PrintWriter; import java.util.Objects; @@ -113,18 +115,24 @@ public class WifiSignalController extends mWifiTracker.isCaptivePortal ? R.drawable.ic_qs_wifi_disconnected : getQsCurrentIconId(), contentDescription); } - callback.setWifiIndicators(mCurrentState.enabled, statusIcon, qsIcon, + WifiIndicators wifiIndicators = new WifiIndicators( + mCurrentState.enabled, statusIcon, qsIcon, ssidPresent && mCurrentState.activityIn, ssidPresent && mCurrentState.activityOut, - wifiDesc, mCurrentState.isTransient, mCurrentState.statusLabel); + wifiDesc, mCurrentState.isTransient, mCurrentState.statusLabel + ); + callback.setWifiIndicators(wifiIndicators); } else { IconState qsIcon = new IconState(mCurrentState.connected, mWifiTracker.isCaptivePortal ? R.drawable.ic_qs_wifi_disconnected : getQsCurrentIconId(), contentDescription); - callback.setWifiIndicators(mCurrentState.enabled, statusIcon, qsIcon, + WifiIndicators wifiIndicators = new WifiIndicators( + mCurrentState.enabled, statusIcon, qsIcon, ssidPresent && mCurrentState.activityIn, ssidPresent && mCurrentState.activityOut, - wifiDesc, mCurrentState.isTransient, mCurrentState.statusLabel); + wifiDesc, mCurrentState.isTransient, mCurrentState.statusLabel + ); + callback.setWifiIndicators(wifiIndicators); } } @@ -149,10 +157,13 @@ public class WifiSignalController extends mCurrentState.connected, getQsCurrentIconIdForCarrierWifi(), contentDescription); CharSequence description = mNetworkController.getNetworkNameForCarrierWiFi(mCurrentState.subId); - callback.setMobileDataIndicators(statusIcon, qsIcon, typeIcon, qsTypeIcon, + MobileDataIndicators mobileDataIndicators = new MobileDataIndicators( + statusIcon, qsIcon, typeIcon, qsTypeIcon, mCurrentState.activityIn, mCurrentState.activityOut, dataContentDescription, dataContentDescriptionHtml, description, icons.isWide, - mCurrentState.subId, /* roaming= */ false, /* showTriangle= */ true); + mCurrentState.subId, /* roaming= */ false, /* showTriangle= */ true + ); + callback.setMobileDataIndicators(mobileDataIndicators); } private int getCurrentIconIdForCarrierWifi() { diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/carrier/QSCarrierGroupControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/carrier/QSCarrierGroupControllerTest.java index 1ec1da44c0b54..5a1bd5f72a024 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/carrier/QSCarrierGroupControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/carrier/QSCarrierGroupControllerTest.java @@ -36,6 +36,7 @@ import androidx.test.filters.SmallTest; import com.android.keyguard.CarrierTextController; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.statusbar.policy.NetworkController; +import com.android.systemui.statusbar.policy.NetworkController.MobileDataIndicators; import com.android.systemui.utils.leaks.LeakCheckedTest; import com.android.systemui.utils.os.FakeHandler; @@ -215,10 +216,11 @@ public class QSCarrierGroupControllerTest extends LeakCheckedTest { @Test // throws no Exception public void testSetMobileDataIndicators_invalidSim() { - mSignalCallback.setMobileDataIndicators( + MobileDataIndicators indicators = new MobileDataIndicators( mock(NetworkController.IconState.class), mock(NetworkController.IconState.class), 0, 0, true, true, "", "", "", true, 0, true, true); + mSignalCallback.setMobileDataIndicators(indicators); } @Test diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CastTileTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CastTileTest.java index faf43a21356e5..1c29a81743597 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CastTileTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/CastTileTest.java @@ -46,6 +46,7 @@ import com.android.systemui.statusbar.policy.CastController.CastDevice; import com.android.systemui.statusbar.policy.HotspotController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.NetworkController; +import com.android.systemui.statusbar.policy.NetworkController.WifiIndicators; import org.junit.Before; import org.junit.Test; @@ -134,9 +135,11 @@ public class CastTileTest extends SysuiTestCase { public void testStateUnavailable_wifiDisabled() { NetworkController.IconState qsIcon = new NetworkController.IconState(false, 0, ""); - mSignalCallback.setWifiIndicators(false, mock(NetworkController.IconState.class), + WifiIndicators indicators = new WifiIndicators( + false, mock(NetworkController.IconState.class), qsIcon, false,false, "", false, ""); + mSignalCallback.setWifiIndicators(indicators); mTestableLooper.processAllMessages(); assertEquals(Tile.STATE_UNAVAILABLE, mCastTile.getState().state); @@ -146,9 +149,11 @@ public class CastTileTest extends SysuiTestCase { public void testStateUnavailable_wifiNotConnected() { NetworkController.IconState qsIcon = new NetworkController.IconState(false, 0, ""); - mSignalCallback.setWifiIndicators(true, mock(NetworkController.IconState.class), + WifiIndicators indicators = new WifiIndicators( + true, mock(NetworkController.IconState.class), qsIcon, false,false, "", false, ""); + mSignalCallback.setWifiIndicators(indicators); mTestableLooper.processAllMessages(); assertEquals(Tile.STATE_UNAVAILABLE, mCastTile.getState().state); @@ -157,9 +162,11 @@ public class CastTileTest extends SysuiTestCase { private void enableWifiAndProcessMessages() { NetworkController.IconState qsIcon = new NetworkController.IconState(true, 0, ""); - mSignalCallback.setWifiIndicators(true, mock(NetworkController.IconState.class), + WifiIndicators indicators = new WifiIndicators( + true, mock(NetworkController.IconState.class), qsIcon, false,false, "", false, ""); + mSignalCallback.setWifiIndicators(indicators); mTestableLooper.processAllMessages(); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CallbackHandlerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CallbackHandlerTest.java index 67c1a086bb33b..24182434f1bae 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CallbackHandlerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/CallbackHandlerTest.java @@ -30,7 +30,9 @@ import com.android.settingslib.mobile.TelephonyIcons; import com.android.systemui.SysuiTestCase; import com.android.systemui.statusbar.policy.NetworkController.EmergencyListener; import com.android.systemui.statusbar.policy.NetworkController.IconState; +import com.android.systemui.statusbar.policy.NetworkController.MobileDataIndicators; import com.android.systemui.statusbar.policy.NetworkController.SignalCallback; +import com.android.systemui.statusbar.policy.NetworkController.WifiIndicators; import com.android.systemui.tests.R; import org.junit.Before; @@ -86,28 +88,24 @@ public class CallbackHandlerTest extends SysuiTestCase { boolean out = true; String description = "Test"; String secondaryLabel = "Secondary label"; - mHandler.setWifiIndicators(enabled, status, qs, in, out, description, true, secondaryLabel); + WifiIndicators indicators = new WifiIndicators( + enabled, status, qs, in, out, description, true, secondaryLabel); + mHandler.setWifiIndicators(indicators); waitForCallbacks(); - ArgumentCaptor enableArg = ArgumentCaptor.forClass(Boolean.class); - ArgumentCaptor statusArg = ArgumentCaptor.forClass(IconState.class); - ArgumentCaptor qsArg = ArgumentCaptor.forClass(IconState.class); - ArgumentCaptor inArg = ArgumentCaptor.forClass(Boolean.class); - ArgumentCaptor outArg = ArgumentCaptor.forClass(Boolean.class); - ArgumentCaptor descArg = ArgumentCaptor.forClass(String.class); - ArgumentCaptor isTransient = ArgumentCaptor.forClass(Boolean.class); - ArgumentCaptor secondary = ArgumentCaptor.forClass(String.class); - Mockito.verify(mSignalCallback).setWifiIndicators(enableArg.capture(), - statusArg.capture(), qsArg.capture(), inArg.capture(), outArg.capture(), - descArg.capture(), isTransient.capture(), secondary.capture()); - assertEquals(enabled, (boolean) enableArg.getValue()); - assertEquals(status, statusArg.getValue()); - assertEquals(qs, qsArg.getValue()); - assertEquals(in, (boolean) inArg.getValue()); - assertEquals(out, (boolean) outArg.getValue()); - assertEquals(description, descArg.getValue()); - assertTrue(isTransient.getValue()); - assertEquals(secondaryLabel, secondary.getValue()); + ArgumentCaptor indicatorArg = + ArgumentCaptor.forClass(WifiIndicators.class); + Mockito.verify(mSignalCallback).setWifiIndicators(indicatorArg.capture()); + WifiIndicators expected = indicatorArg.getValue(); + + assertEquals(enabled, expected.enabled); + assertEquals(status, expected.statusIcon); + assertEquals(qs, expected.qsIcon); + assertEquals(in, expected.activityIn); + assertEquals(out, expected.activityOut); + assertEquals(description, expected.description); + assertTrue(expected.isTransient); + assertEquals(secondaryLabel, expected.statusLabel); } @Test @@ -124,37 +122,30 @@ public class CallbackHandlerTest extends SysuiTestCase { boolean wide = true; int subId = 5; boolean roaming = true; - mHandler.setMobileDataIndicators(status, qs, type, qsType, in, out, typeDescription, + MobileDataIndicators indicators = new MobileDataIndicators( + status, qs, type, qsType, in, out, typeDescription, typeDescriptionHtml, description, wide, subId, roaming, true); + mHandler.setMobileDataIndicators(indicators); waitForCallbacks(); - ArgumentCaptor statusArg = ArgumentCaptor.forClass(IconState.class); - ArgumentCaptor qsArg = ArgumentCaptor.forClass(IconState.class); - ArgumentCaptor typeIconArg = ArgumentCaptor.forClass(Integer.class); - ArgumentCaptor qsTypeIconArg = ArgumentCaptor.forClass(Integer.class); - ArgumentCaptor inArg = ArgumentCaptor.forClass(Boolean.class); - ArgumentCaptor outArg = ArgumentCaptor.forClass(Boolean.class); - ArgumentCaptor typeContentArg = ArgumentCaptor.forClass(CharSequence.class); - ArgumentCaptor typeContentHtmlArg = - ArgumentCaptor.forClass(CharSequence.class); - ArgumentCaptor descArg = ArgumentCaptor.forClass(CharSequence.class); - ArgumentCaptor wideArg = ArgumentCaptor.forClass(Boolean.class); - ArgumentCaptor subIdArg = ArgumentCaptor.forClass(Integer.class); - Mockito.verify(mSignalCallback).setMobileDataIndicators(statusArg.capture(), - qsArg.capture(), typeIconArg.capture(), qsTypeIconArg.capture(), inArg.capture(), - outArg.capture(), typeContentArg.capture(), typeContentHtmlArg.capture(), - descArg.capture(), wideArg.capture(), subIdArg.capture(), eq(roaming), eq(true)); - assertEquals(status, statusArg.getValue()); - assertEquals(qs, qsArg.getValue()); - assertEquals(type, (int) typeIconArg.getValue()); - assertEquals(qsType, (int) qsTypeIconArg.getValue()); - assertEquals(in, (boolean) inArg.getValue()); - assertEquals(out, (boolean) outArg.getValue()); - assertEquals(typeDescription, typeContentArg.getValue()); - assertEquals(typeDescriptionHtml, typeContentHtmlArg.getValue()); - assertEquals(description, descArg.getValue()); - assertEquals(wide, (boolean) wideArg.getValue()); - assertEquals(subId, (int) subIdArg.getValue()); + ArgumentCaptor indicatorArg = + ArgumentCaptor.forClass(MobileDataIndicators.class); + Mockito.verify(mSignalCallback).setMobileDataIndicators(indicatorArg.capture()); + MobileDataIndicators expected = indicatorArg.getValue(); + + assertEquals(status, expected.statusIcon); + assertEquals(qs, expected.qsIcon); + assertEquals(type, expected.statusType); + assertEquals(qsType, expected.qsType); + assertEquals(in, expected.activityIn); + assertEquals(out, expected.activityOut); + assertEquals(typeDescription, expected.typeContentDescription); + assertEquals(typeDescriptionHtml, expected.typeContentDescriptionHtml); + assertEquals(description, expected.description); + assertEquals(wide, expected.isWide); + assertEquals(subId, expected.subId); + assertTrue(expected.roaming); + assertTrue(expected.showTriangle); } @SuppressWarnings("unchecked") diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java index 89cc2b5743984..0a6763ce022fd 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java @@ -23,7 +23,6 @@ import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertNotNull; import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyBoolean; import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.eq; import static org.mockito.Matchers.isA; @@ -76,6 +75,7 @@ import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.demomode.DemoModeController; import com.android.systemui.statusbar.policy.DeviceProvisionedController.DeviceProvisionedListener; import com.android.systemui.statusbar.policy.NetworkController.IconState; +import com.android.systemui.statusbar.policy.NetworkController.MobileDataIndicators; import com.android.systemui.statusbar.policy.NetworkController.SignalCallback; import org.junit.After; @@ -487,28 +487,21 @@ public class NetworkControllerBaseTest extends SysuiTestCase { protected void verifyLastQsMobileDataIndicators(boolean visible, int icon, int typeIcon, boolean dataIn, boolean dataOut) { - ArgumentCaptor iconArg = ArgumentCaptor.forClass(IconState.class); - ArgumentCaptor typeIconArg = ArgumentCaptor.forClass(Integer.class); - ArgumentCaptor dataInArg = ArgumentCaptor.forClass(Boolean.class); - ArgumentCaptor dataOutArg = ArgumentCaptor.forClass(Boolean.class); + ArgumentCaptor indicatorsArg = + ArgumentCaptor.forClass(MobileDataIndicators.class); verify(mCallbackHandler, Mockito.atLeastOnce()).setMobileDataIndicators( - any(), - iconArg.capture(), - anyInt(), - typeIconArg.capture(), dataInArg.capture(), dataOutArg.capture(), - any(CharSequence.class), any(CharSequence.class), any(CharSequence.class), - anyBoolean(), anyInt(), anyBoolean(), anyBoolean()); - IconState iconState = iconArg.getValue(); + indicatorsArg.capture()); + MobileDataIndicators expected = indicatorsArg.getValue(); int state = SignalDrawable.getState(icon, CellSignalStrength.getNumSignalStrengthLevels(), false); - assertEquals("Visibility in, quick settings", visible, iconState.visible); - assertEquals("Signal icon in, quick settings", state, iconState.icon); - assertEquals("Data icon in, quick settings", typeIcon, (int) typeIconArg.getValue()); + assertEquals("Visibility in, quick settings", visible, expected.qsIcon.visible); + assertEquals("Signal icon in, quick settings", state, expected.qsIcon.icon); + assertEquals("Data icon in, quick settings", typeIcon, expected.qsType); assertEquals("Data direction in, in quick settings", dataIn, - (boolean) dataInArg.getValue()); + expected.activityIn); assertEquals("Data direction out, in quick settings", dataOut, - (boolean) dataOutArg.getValue()); + expected.activityOut); } protected void verifyLastMobileDataIndicators(boolean visible, int icon, int typeIcon) { @@ -522,44 +515,35 @@ public class NetworkControllerBaseTest extends SysuiTestCase { protected void verifyLastMobileDataIndicators(boolean visible, int icon, int typeIcon, boolean roaming, boolean inet) { - ArgumentCaptor iconArg = ArgumentCaptor.forClass(IconState.class); - ArgumentCaptor typeIconArg = ArgumentCaptor.forClass(Integer.class); + ArgumentCaptor indicatorsArg = + ArgumentCaptor.forClass(MobileDataIndicators.class); // TODO: Verify all fields. verify(mCallbackHandler, Mockito.atLeastOnce()).setMobileDataIndicators( - iconArg.capture(), - any(), - typeIconArg.capture(), - anyInt(), anyBoolean(), anyBoolean(), - any(CharSequence.class), any(CharSequence.class), any(), - anyBoolean(), anyInt(), eq(roaming), anyBoolean()); - IconState iconState = iconArg.getValue(); + indicatorsArg.capture()); + MobileDataIndicators expected = indicatorsArg.getValue(); int state = icon == -1 ? 0 : SignalDrawable.getState(icon, CellSignalStrength.getNumSignalStrengthLevels(), !inet); - assertEquals("Signal icon in status bar", state, iconState.icon); - assertEquals("Data icon in status bar", typeIcon, (int) typeIconArg.getValue()); - assertEquals("Visibility in status bar", visible, iconState.visible); + assertEquals("Signal icon in status bar", state, expected.statusIcon.icon); + assertEquals("Data icon in status bar", typeIcon, expected.statusType); + assertEquals("Visibility in status bar", visible, expected.statusIcon.visible); } protected void verifyLastMobileDataIndicatorsForVcn(boolean visible, int level, int typeIcon, boolean inet) { - ArgumentCaptor iconArg = ArgumentCaptor.forClass(IconState.class); - ArgumentCaptor typeIconArg = ArgumentCaptor.forClass(Integer.class); + ArgumentCaptor indicatorsArg = + ArgumentCaptor.forClass(MobileDataIndicators.class); verify(mCallbackHandler, Mockito.atLeastOnce()).setMobileDataIndicators( - iconArg.capture(), - any(), - typeIconArg.capture(), - anyInt(), anyBoolean(), anyBoolean(), - any(CharSequence.class), any(CharSequence.class), any(), - anyBoolean(), anyInt(), anyBoolean(), anyBoolean()); - IconState iconState = iconArg.getValue(); + indicatorsArg.capture()); + + MobileDataIndicators expected = indicatorsArg.getValue(); int state = SignalDrawable.getState( level, CellSignalStrength.getNumSignalStrengthLevels(), !inet); - assertEquals("Signal icon in status bar", state, iconState.icon); - assertEquals("Data icon in status bar", typeIcon, (int) typeIconArg.getValue()); - assertEquals("Visibility in status bar", visible, iconState.visible); + assertEquals("Signal icon in status bar", state, expected.statusIcon.icon); + assertEquals("Data icon in status bar", typeIcon, expected.statusType); + assertEquals("Visibility in status bar", visible, expected.statusIcon.visible); } protected void verifyLastMobileDataIndicators(boolean visible, int icon, int typeIcon, @@ -580,6 +564,8 @@ public class NetworkControllerBaseTest extends SysuiTestCase { boolean qsVisible, int qsIcon, int qsTypeIcon, boolean dataIn, boolean dataOut, boolean cutOut, CharSequence typeContentDescription, CharSequence typeContentDescriptionHtml) { + ArgumentCaptor indicatorsArg = + ArgumentCaptor.forClass(MobileDataIndicators.class); ArgumentCaptor iconArg = ArgumentCaptor.forClass(IconState.class); ArgumentCaptor typeIconArg = ArgumentCaptor.forClass(Integer.class); ArgumentCaptor qsIconArg = ArgumentCaptor.forClass(IconState.class); @@ -592,17 +578,9 @@ public class NetworkControllerBaseTest extends SysuiTestCase { ArgumentCaptor.forClass(CharSequence.class); verify(mCallbackHandler, Mockito.atLeastOnce()).setMobileDataIndicators( - iconArg.capture(), - qsIconArg.capture(), - typeIconArg.capture(), - qsTypeIconArg.capture(), - dataInArg.capture(), - dataOutArg.capture(), - typeContentDescriptionArg.capture(), - typeContentDescriptionHtmlArg.capture(), - any(), anyBoolean(), anyInt(), anyBoolean(), anyBoolean()); + indicatorsArg.capture()); - IconState iconState = iconArg.getValue(); + MobileDataIndicators expected = indicatorsArg.getValue(); int numSignalStrengthBins = CellSignalStrength.getNumSignalStrengthLevels(); if (mMobileSignalController.mInflateSignalStrengths) { @@ -610,29 +588,28 @@ public class NetworkControllerBaseTest extends SysuiTestCase { icon++; } int state = SignalDrawable.getState(icon, numSignalStrengthBins, cutOut); - assertEquals("Data icon in status bar", typeIcon, (int) typeIconArg.getValue()); - assertEquals("Signal icon in status bar", state, iconState.icon); - assertEquals("Visibility in status bar", visible, iconState.visible); + assertEquals("Data icon in status bar", typeIcon, expected.statusType); + assertEquals("Signal icon in status bar", state, expected.statusIcon.icon); + assertEquals("Visibility in status bar", visible, expected.statusIcon.visible); - iconState = qsIconArg.getValue(); if (visible) { - assertEquals("Visibility in quick settings", qsVisible, iconState.visible); - assertEquals("Signal icon in quick settings", state, iconState.icon); + assertEquals("Visibility in quick settings", qsVisible, expected.qsIcon.visible); + assertEquals("Signal icon in quick settings", state, expected.qsIcon.icon); } else { - assertEquals("Cellular is not default", null, iconState); + assertEquals("Cellular is not default", null, expected.qsIcon); } - assertEquals("Data icon in quick settings", qsTypeIcon, (int) qsTypeIconArg.getValue()); + assertEquals("Data icon in quick settings", qsTypeIcon, expected.qsType); assertEquals("Data direction in in quick settings", dataIn, - (boolean) dataInArg.getValue()); + expected.activityIn); assertEquals("Data direction out in quick settings", dataOut, - (boolean) dataOutArg.getValue()); + expected.activityOut); if (typeContentDescription != null) { // Only check if it was provided assertEquals("Type content description", typeContentDescription, - typeContentDescriptionArg.getValue()); + expected.typeContentDescription); } if (typeContentDescriptionHtml != null) { // Only check if it was provided assertEquals("Type content description (html)", typeContentDescriptionHtml, - typeContentDescriptionHtmlArg.getValue()); + expected.typeContentDescriptionHtml); } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerWifiTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerWifiTest.java index fc1a08ac3874f..c6812a26c20be 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerWifiTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerWifiTest.java @@ -3,7 +3,6 @@ package com.android.systemui.statusbar.policy; import static junit.framework.Assert.assertEquals; import static org.junit.Assert.assertTrue; -import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyBoolean; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -21,7 +20,7 @@ import android.testing.AndroidTestingRunner; import android.testing.TestableLooper.RunWithLooper; import com.android.settingslib.mobile.TelephonyIcons; -import com.android.systemui.statusbar.policy.NetworkController.IconState; +import com.android.systemui.statusbar.policy.NetworkController.WifiIndicators; import org.junit.Before; import org.junit.Test; @@ -316,44 +315,42 @@ public class NetworkControllerWifiTest extends NetworkControllerBaseTest { } protected void verifyLastQsDataDirection(boolean in, boolean out) { - ArgumentCaptor inArg = ArgumentCaptor.forClass(Boolean.class); - ArgumentCaptor outArg = ArgumentCaptor.forClass(Boolean.class); + ArgumentCaptor indicatorsArg = + ArgumentCaptor.forClass(WifiIndicators.class); Mockito.verify(mCallbackHandler, Mockito.atLeastOnce()).setWifiIndicators( - anyBoolean(), any(), any(), inArg.capture(), outArg.capture(), any(), anyBoolean(), - any()); - assertEquals("WiFi data in, in quick settings", in, (boolean) inArg.getValue()); - assertEquals("WiFi data out, in quick settings", out, (boolean) outArg.getValue()); + indicatorsArg.capture()); + WifiIndicators expected = indicatorsArg.getValue(); + assertEquals("WiFi data in, in quick settings", in, expected.activityIn); + assertEquals("WiFi data out, in quick settings", out, expected.activityOut); } protected void verifyLastQsWifiIcon(boolean enabled, boolean connected, int icon, String description) { - ArgumentCaptor iconArg = ArgumentCaptor.forClass(IconState.class); - ArgumentCaptor enabledArg = ArgumentCaptor.forClass(Boolean.class); - ArgumentCaptor descArg = ArgumentCaptor.forClass(String.class); + ArgumentCaptor indicatorsArg = + ArgumentCaptor.forClass(WifiIndicators.class); Mockito.verify(mCallbackHandler, Mockito.atLeastOnce()).setWifiIndicators( - enabledArg.capture(), any(), iconArg.capture(), anyBoolean(), - anyBoolean(), descArg.capture(), anyBoolean(), any()); - IconState iconState = iconArg.getValue(); - assertEquals("WiFi enabled, in quick settings", enabled, (boolean) enabledArg.getValue()); - assertEquals("WiFI desc (ssid), in quick settings", description, descArg.getValue()); + indicatorsArg.capture()); + WifiIndicators expected = indicatorsArg.getValue(); + assertEquals("WiFi enabled, in quick settings", enabled, expected.enabled); + assertEquals("WiFI desc (ssid), in quick settings", description, expected.description); if (enabled && connected) { - assertEquals("WiFi connected, in quick settings", connected, iconState.visible); - assertEquals("WiFi signal, in quick settings", icon, iconState.icon); + assertEquals("WiFi connected, in quick settings", connected, expected.qsIcon.visible); + assertEquals("WiFi signal, in quick settings", icon, expected.qsIcon.icon); } else { - assertEquals("WiFi is not default", null, iconState); + assertEquals("WiFi is not default", null, expected.qsIcon); } } protected void verifyLastWifiIcon(boolean visible, int icon) { - ArgumentCaptor iconArg = ArgumentCaptor.forClass(IconState.class); + ArgumentCaptor indicatorsArg = + ArgumentCaptor.forClass(WifiIndicators.class); Mockito.verify(mCallbackHandler, Mockito.atLeastOnce()).setWifiIndicators( - anyBoolean(), iconArg.capture(), any(), anyBoolean(), anyBoolean(), - any(), anyBoolean(), any()); - IconState iconState = iconArg.getValue(); - assertEquals("WiFi visible, in status bar", visible, iconState.visible); - assertEquals("WiFi signal, in status bar", icon, iconState.icon); + indicatorsArg.capture()); + WifiIndicators expected = indicatorsArg.getValue(); + assertEquals("WiFi visible, in status bar", visible, expected.statusIcon.visible); + assertEquals("WiFi signal, in status bar", icon, expected.statusIcon.icon); } }