Merge "Define wrapper classes for WiFi and Mobile indicators" into sc-dev

This commit is contained in:
Ying Xu
2021-02-26 19:54:52 +00:00
committed by Android (Google) Code Review
15 changed files with 337 additions and 355 deletions

View File

@@ -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();
}

View File

@@ -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<BooleanState> {
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

View File

@@ -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<SignalState> {
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);
}

View File

@@ -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<SignalState> {
@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);
}

View File

@@ -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<SignalState> {
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();
}

View File

@@ -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: "

View File

@@ -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);
}
});
}

View File

@@ -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<MobileState, Mobile
showDataIcon |= mCurrentState.roaming;
IconState statusIcon = new IconState(showDataIcon && !mCurrentState.airplaneMode,
getCurrentIconId(), contentDescription);
callback.setMobileDataIndicators(statusIcon, qsIcon, typeIcon, qsTypeIcon,
MobileDataIndicators mobileDataIndicators = new MobileDataIndicators(
statusIcon, qsIcon, typeIcon, qsTypeIcon,
activityIn, activityOut, dataContentDescription, dataContentDescriptionHtml,
description, icons.isWide, mSubscriptionInfo.getSubscriptionId(),
mCurrentState.roaming, showTriangle);
callback.setMobileDataIndicators(mobileDataIndicators);
} else {
boolean showDataIcon = mCurrentState.dataConnected || dataDisabled;
IconState statusIcon = new IconState(
@@ -432,10 +435,12 @@ public class MobileSignalController extends SignalController<MobileState, Mobile
showDataIcon &= mCurrentState.isDefault || dataDisabled;
int typeIcon = (showDataIcon || mConfig.alwaysShowDataRatIcon) ? icons.dataType : 0;
boolean showTriangle = mCurrentState.enabled && !mCurrentState.airplaneMode;
callback.setMobileDataIndicators(statusIcon, qsIcon, typeIcon, qsTypeIcon,
MobileDataIndicators mobileDataIndicators = new MobileDataIndicators(
statusIcon, qsIcon, typeIcon, qsTypeIcon,
activityIn, activityOut, dataContentDescription, dataContentDescriptionHtml,
description, icons.isWide, mSubscriptionInfo.getSubscriptionId(),
mCurrentState.roaming, showTriangle);
callback.setMobileDataIndicators(mobileDataIndicators);
}
}

View File

@@ -46,34 +46,117 @@ public interface NetworkController extends CallbackController<SignalCallback>, 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<SubscriptionInfo> subs) {}

View File

@@ -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() {

View File

@@ -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

View File

@@ -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();
}

View File

@@ -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<Boolean> enableArg = ArgumentCaptor.forClass(Boolean.class);
ArgumentCaptor<IconState> statusArg = ArgumentCaptor.forClass(IconState.class);
ArgumentCaptor<IconState> qsArg = ArgumentCaptor.forClass(IconState.class);
ArgumentCaptor<Boolean> inArg = ArgumentCaptor.forClass(Boolean.class);
ArgumentCaptor<Boolean> outArg = ArgumentCaptor.forClass(Boolean.class);
ArgumentCaptor<String> descArg = ArgumentCaptor.forClass(String.class);
ArgumentCaptor<Boolean> isTransient = ArgumentCaptor.forClass(Boolean.class);
ArgumentCaptor<String> 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<WifiIndicators> 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<IconState> statusArg = ArgumentCaptor.forClass(IconState.class);
ArgumentCaptor<IconState> qsArg = ArgumentCaptor.forClass(IconState.class);
ArgumentCaptor<Integer> typeIconArg = ArgumentCaptor.forClass(Integer.class);
ArgumentCaptor<Integer> qsTypeIconArg = ArgumentCaptor.forClass(Integer.class);
ArgumentCaptor<Boolean> inArg = ArgumentCaptor.forClass(Boolean.class);
ArgumentCaptor<Boolean> outArg = ArgumentCaptor.forClass(Boolean.class);
ArgumentCaptor<CharSequence> typeContentArg = ArgumentCaptor.forClass(CharSequence.class);
ArgumentCaptor<CharSequence> typeContentHtmlArg =
ArgumentCaptor.forClass(CharSequence.class);
ArgumentCaptor<CharSequence> descArg = ArgumentCaptor.forClass(CharSequence.class);
ArgumentCaptor<Boolean> wideArg = ArgumentCaptor.forClass(Boolean.class);
ArgumentCaptor<Integer> 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<MobileDataIndicators> 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")

View File

@@ -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<IconState> iconArg = ArgumentCaptor.forClass(IconState.class);
ArgumentCaptor<Integer> typeIconArg = ArgumentCaptor.forClass(Integer.class);
ArgumentCaptor<Boolean> dataInArg = ArgumentCaptor.forClass(Boolean.class);
ArgumentCaptor<Boolean> dataOutArg = ArgumentCaptor.forClass(Boolean.class);
ArgumentCaptor<MobileDataIndicators> 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<IconState> iconArg = ArgumentCaptor.forClass(IconState.class);
ArgumentCaptor<Integer> typeIconArg = ArgumentCaptor.forClass(Integer.class);
ArgumentCaptor<MobileDataIndicators> 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<IconState> iconArg = ArgumentCaptor.forClass(IconState.class);
ArgumentCaptor<Integer> typeIconArg = ArgumentCaptor.forClass(Integer.class);
ArgumentCaptor<MobileDataIndicators> 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<MobileDataIndicators> indicatorsArg =
ArgumentCaptor.forClass(MobileDataIndicators.class);
ArgumentCaptor<IconState> iconArg = ArgumentCaptor.forClass(IconState.class);
ArgumentCaptor<Integer> typeIconArg = ArgumentCaptor.forClass(Integer.class);
ArgumentCaptor<IconState> 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);
}
}

View File

@@ -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<Boolean> inArg = ArgumentCaptor.forClass(Boolean.class);
ArgumentCaptor<Boolean> outArg = ArgumentCaptor.forClass(Boolean.class);
ArgumentCaptor<WifiIndicators> 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<IconState> iconArg = ArgumentCaptor.forClass(IconState.class);
ArgumentCaptor<Boolean> enabledArg = ArgumentCaptor.forClass(Boolean.class);
ArgumentCaptor<String> descArg = ArgumentCaptor.forClass(String.class);
ArgumentCaptor<WifiIndicators> 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<IconState> iconArg = ArgumentCaptor.forClass(IconState.class);
ArgumentCaptor<WifiIndicators> 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);
}
}