Merge changes from topic "sysui-networking-refactor" into sc-v2-dev am: aaf2ae3c4c
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/16040964 Change-Id: I599887ae451b8b7f156187575a65694224425039
This commit is contained in:
@@ -15,13 +15,8 @@
|
|||||||
*/
|
*/
|
||||||
package com.android.settingslib;
|
package com.android.settingslib;
|
||||||
|
|
||||||
import com.android.settingslib.mobile.TelephonyIcons;
|
|
||||||
|
|
||||||
import java.text.SimpleDateFormat;
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Icons and states for SysUI and Settings.
|
* Icons for SysUI and Settings.
|
||||||
*/
|
*/
|
||||||
public class SignalIcon {
|
public class SignalIcon {
|
||||||
|
|
||||||
@@ -70,92 +65,6 @@ public class SignalIcon {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Holds states for SysUI.
|
|
||||||
*/
|
|
||||||
public static class State {
|
|
||||||
// No locale as it's only used for logging purposes
|
|
||||||
private static SimpleDateFormat sSDF = new SimpleDateFormat("MM-dd HH:mm:ss.SSS");
|
|
||||||
public boolean connected;
|
|
||||||
public boolean enabled;
|
|
||||||
public boolean activityIn;
|
|
||||||
public boolean activityOut;
|
|
||||||
public int level;
|
|
||||||
public IconGroup iconGroup;
|
|
||||||
public int inetCondition;
|
|
||||||
public int rssi; // Only for logging.
|
|
||||||
|
|
||||||
// Not used for comparison, just used for logging.
|
|
||||||
public long time;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generates a copy of the source state.
|
|
||||||
*/
|
|
||||||
public void copyFrom(State state) {
|
|
||||||
connected = state.connected;
|
|
||||||
enabled = state.enabled;
|
|
||||||
level = state.level;
|
|
||||||
iconGroup = state.iconGroup;
|
|
||||||
inetCondition = state.inetCondition;
|
|
||||||
activityIn = state.activityIn;
|
|
||||||
activityOut = state.activityOut;
|
|
||||||
rssi = state.rssi;
|
|
||||||
time = state.time;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
if (time != 0) {
|
|
||||||
StringBuilder builder = new StringBuilder();
|
|
||||||
toString(builder);
|
|
||||||
return builder.toString();
|
|
||||||
} else {
|
|
||||||
return "Empty " + getClass().getSimpleName();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void toString(StringBuilder builder) {
|
|
||||||
builder.append("connected=").append(connected).append(',')
|
|
||||||
.append("enabled=").append(enabled).append(',')
|
|
||||||
.append("level=").append(level).append(',')
|
|
||||||
.append("inetCondition=").append(inetCondition).append(',')
|
|
||||||
.append("iconGroup=").append(iconGroup).append(',')
|
|
||||||
.append("activityIn=").append(activityIn).append(',')
|
|
||||||
.append("activityOut=").append(activityOut).append(',')
|
|
||||||
.append("rssi=").append(rssi).append(',')
|
|
||||||
.append("lastModified=").append(sSDF.format(time));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object o) {
|
|
||||||
if (!o.getClass().equals(getClass())) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
State other = (State) o;
|
|
||||||
return other.connected == connected
|
|
||||||
&& other.enabled == enabled
|
|
||||||
&& other.level == level
|
|
||||||
&& other.inetCondition == inetCondition
|
|
||||||
&& other.iconGroup == iconGroup
|
|
||||||
&& other.activityIn == activityIn
|
|
||||||
&& other.activityOut == activityOut
|
|
||||||
&& other.rssi == rssi;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode() {
|
|
||||||
return Objects.hash(
|
|
||||||
connected,
|
|
||||||
enabled,
|
|
||||||
level,
|
|
||||||
inetCondition,
|
|
||||||
iconGroup,
|
|
||||||
activityIn,
|
|
||||||
activityOut,
|
|
||||||
rssi);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holds icons for a given MobileState.
|
* Holds icons for a given MobileState.
|
||||||
*/
|
*/
|
||||||
@@ -189,110 +98,4 @@ public class SignalIcon {
|
|||||||
this.dataType = dataType;
|
this.dataType = dataType;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Holds mobile states for SysUI.
|
|
||||||
*/
|
|
||||||
public static class MobileState extends State {
|
|
||||||
public String networkName;
|
|
||||||
public String networkNameData;
|
|
||||||
public boolean dataSim;
|
|
||||||
public boolean dataConnected;
|
|
||||||
public boolean isEmergency;
|
|
||||||
public boolean airplaneMode;
|
|
||||||
public boolean carrierNetworkChangeMode;
|
|
||||||
public boolean isDefault;
|
|
||||||
public boolean userSetup;
|
|
||||||
public boolean roaming;
|
|
||||||
public boolean defaultDataOff; // Tracks the on/off state of the defaultDataSubscription
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void copyFrom(State s) {
|
|
||||||
super.copyFrom(s);
|
|
||||||
MobileState state = (MobileState) s;
|
|
||||||
dataSim = state.dataSim;
|
|
||||||
networkName = state.networkName;
|
|
||||||
networkNameData = state.networkNameData;
|
|
||||||
dataConnected = state.dataConnected;
|
|
||||||
isDefault = state.isDefault;
|
|
||||||
isEmergency = state.isEmergency;
|
|
||||||
airplaneMode = state.airplaneMode;
|
|
||||||
carrierNetworkChangeMode = state.carrierNetworkChangeMode;
|
|
||||||
userSetup = state.userSetup;
|
|
||||||
roaming = state.roaming;
|
|
||||||
defaultDataOff = state.defaultDataOff;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @return true if this state is disabled or not default data */
|
|
||||||
public boolean isDataDisabledOrNotDefault() {
|
|
||||||
return (iconGroup == TelephonyIcons.DATA_DISABLED
|
|
||||||
|| (iconGroup == TelephonyIcons.NOT_DEFAULT_DATA)) && userSetup;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @return if this state is considered to have inbound activity */
|
|
||||||
public boolean hasActivityIn() {
|
|
||||||
return dataConnected && !carrierNetworkChangeMode && activityIn;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @return if this state is considered to have outbound activity */
|
|
||||||
public boolean hasActivityOut() {
|
|
||||||
return dataConnected && !carrierNetworkChangeMode && activityOut;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @return true if this state should show a RAT icon in quick settings */
|
|
||||||
public boolean showQuickSettingsRatIcon() {
|
|
||||||
return dataConnected || isDataDisabledOrNotDefault();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void toString(StringBuilder builder) {
|
|
||||||
super.toString(builder);
|
|
||||||
builder.append(',');
|
|
||||||
builder.append("dataSim=").append(dataSim).append(',');
|
|
||||||
builder.append("networkName=").append(networkName).append(',');
|
|
||||||
builder.append("networkNameData=").append(networkNameData).append(',');
|
|
||||||
builder.append("dataConnected=").append(dataConnected).append(',');
|
|
||||||
builder.append("roaming=").append(roaming).append(',');
|
|
||||||
builder.append("isDefault=").append(isDefault).append(',');
|
|
||||||
builder.append("isEmergency=").append(isEmergency).append(',');
|
|
||||||
builder.append("airplaneMode=").append(airplaneMode).append(',');
|
|
||||||
builder.append("carrierNetworkChangeMode=").append(carrierNetworkChangeMode)
|
|
||||||
.append(',');
|
|
||||||
builder.append("userSetup=").append(userSetup).append(',');
|
|
||||||
builder.append("defaultDataOff=").append(defaultDataOff).append(',');
|
|
||||||
builder.append("showQuickSettingsRatIcon=").append(showQuickSettingsRatIcon());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object o) {
|
|
||||||
return super.equals(o)
|
|
||||||
&& Objects.equals(((MobileState) o).networkName, networkName)
|
|
||||||
&& Objects.equals(((MobileState) o).networkNameData, networkNameData)
|
|
||||||
&& ((MobileState) o).dataSim == dataSim
|
|
||||||
&& ((MobileState) o).dataConnected == dataConnected
|
|
||||||
&& ((MobileState) o).isEmergency == isEmergency
|
|
||||||
&& ((MobileState) o).airplaneMode == airplaneMode
|
|
||||||
&& ((MobileState) o).carrierNetworkChangeMode == carrierNetworkChangeMode
|
|
||||||
&& ((MobileState) o).userSetup == userSetup
|
|
||||||
&& ((MobileState) o).isDefault == isDefault
|
|
||||||
&& ((MobileState) o).roaming == roaming
|
|
||||||
&& ((MobileState) o).defaultDataOff == defaultDataOff;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode() {
|
|
||||||
return Objects.hash(super.hashCode(),
|
|
||||||
networkName,
|
|
||||||
networkNameData,
|
|
||||||
dataSim,
|
|
||||||
dataConnected,
|
|
||||||
isEmergency,
|
|
||||||
airplaneMode,
|
|
||||||
carrierNetworkChangeMode,
|
|
||||||
userSetup,
|
|
||||||
isDefault,
|
|
||||||
roaming,
|
|
||||||
defaultDataOff);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ package com.android.systemui.qs.carrier;
|
|||||||
import static android.view.View.IMPORTANT_FOR_ACCESSIBILITY_YES;
|
import static android.view.View.IMPORTANT_FOR_ACCESSIBILITY_YES;
|
||||||
|
|
||||||
import android.annotation.MainThread;
|
import android.annotation.MainThread;
|
||||||
|
import android.annotation.NonNull;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
@@ -42,8 +43,10 @@ import com.android.systemui.dagger.qualifiers.Background;
|
|||||||
import com.android.systemui.dagger.qualifiers.Main;
|
import com.android.systemui.dagger.qualifiers.Main;
|
||||||
import com.android.systemui.flags.FeatureFlags;
|
import com.android.systemui.flags.FeatureFlags;
|
||||||
import com.android.systemui.plugins.ActivityStarter;
|
import com.android.systemui.plugins.ActivityStarter;
|
||||||
|
import com.android.systemui.statusbar.connectivity.IconState;
|
||||||
|
import com.android.systemui.statusbar.connectivity.MobileDataIndicators;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController;
|
import com.android.systemui.statusbar.connectivity.NetworkController;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.MobileDataIndicators;
|
import com.android.systemui.statusbar.connectivity.SignalCallback;
|
||||||
import com.android.systemui.util.CarrierConfigTracker;
|
import com.android.systemui.util.CarrierConfigTracker;
|
||||||
|
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
@@ -81,10 +84,9 @@ public class QSCarrierGroupController {
|
|||||||
|
|
||||||
private final SlotIndexResolver mSlotIndexResolver;
|
private final SlotIndexResolver mSlotIndexResolver;
|
||||||
|
|
||||||
private final NetworkController.SignalCallback mSignalCallback =
|
private final SignalCallback mSignalCallback = new SignalCallback() {
|
||||||
new NetworkController.SignalCallback() {
|
|
||||||
@Override
|
@Override
|
||||||
public void setMobileDataIndicators(MobileDataIndicators indicators) {
|
public void setMobileDataIndicators(@NonNull MobileDataIndicators indicators) {
|
||||||
if (mProviderModel) {
|
if (mProviderModel) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -109,7 +111,7 @@ public class QSCarrierGroupController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setCallIndicator(NetworkController.IconState statusIcon, int subId) {
|
public void setCallIndicator(@NonNull IconState statusIcon, int subId) {
|
||||||
if (!mProviderModel) {
|
if (!mProviderModel) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ package com.android.systemui.qs.tiles;
|
|||||||
|
|
||||||
import static android.media.MediaRouter.ROUTE_TYPE_REMOTE_DISPLAY;
|
import static android.media.MediaRouter.ROUTE_TYPE_REMOTE_DISPLAY;
|
||||||
|
|
||||||
|
import android.annotation.NonNull;
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
@@ -52,7 +53,8 @@ import com.android.systemui.qs.QSHost;
|
|||||||
import com.android.systemui.qs.logging.QSLogger;
|
import com.android.systemui.qs.logging.QSLogger;
|
||||||
import com.android.systemui.qs.tileimpl.QSTileImpl;
|
import com.android.systemui.qs.tileimpl.QSTileImpl;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController;
|
import com.android.systemui.statusbar.connectivity.NetworkController;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.WifiIndicators;
|
import com.android.systemui.statusbar.connectivity.SignalCallback;
|
||||||
|
import com.android.systemui.statusbar.connectivity.WifiIndicators;
|
||||||
import com.android.systemui.statusbar.phone.SystemUIDialog;
|
import com.android.systemui.statusbar.phone.SystemUIDialog;
|
||||||
import com.android.systemui.statusbar.policy.CastController;
|
import com.android.systemui.statusbar.policy.CastController;
|
||||||
import com.android.systemui.statusbar.policy.CastController.CastDevice;
|
import com.android.systemui.statusbar.policy.CastController.CastDevice;
|
||||||
@@ -273,10 +275,9 @@ public class CastTile extends QSTileImpl<BooleanState> {
|
|||||||
return mWifiConnected || mHotspotConnected;
|
return mWifiConnected || mHotspotConnected;
|
||||||
}
|
}
|
||||||
|
|
||||||
private final NetworkController.SignalCallback mSignalCallback =
|
private final SignalCallback mSignalCallback = new SignalCallback() {
|
||||||
new NetworkController.SignalCallback() {
|
|
||||||
@Override
|
@Override
|
||||||
public void setWifiIndicators(WifiIndicators indicators) {
|
public void setWifiIndicators(@NonNull WifiIndicators indicators) {
|
||||||
// statusIcon.visible has the connected status information
|
// statusIcon.visible has the connected status information
|
||||||
boolean enabledAndConnected = indicators.enabled
|
boolean enabledAndConnected = indicators.enabled
|
||||||
&& (indicators.qsIcon == null ? false : indicators.qsIcon.visible);
|
&& (indicators.qsIcon == null ? false : indicators.qsIcon.visible);
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ package com.android.systemui.qs.tiles;
|
|||||||
|
|
||||||
import static com.android.systemui.Prefs.Key.QS_HAS_TURNED_OFF_MOBILE_DATA;
|
import static com.android.systemui.Prefs.Key.QS_HAS_TURNED_OFF_MOBILE_DATA;
|
||||||
|
|
||||||
|
import android.annotation.NonNull;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.app.AlertDialog.Builder;
|
import android.app.AlertDialog.Builder;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@@ -56,10 +57,10 @@ import com.android.systemui.qs.QSHost;
|
|||||||
import com.android.systemui.qs.SignalTileView;
|
import com.android.systemui.qs.SignalTileView;
|
||||||
import com.android.systemui.qs.logging.QSLogger;
|
import com.android.systemui.qs.logging.QSLogger;
|
||||||
import com.android.systemui.qs.tileimpl.QSTileImpl;
|
import com.android.systemui.qs.tileimpl.QSTileImpl;
|
||||||
|
import com.android.systemui.statusbar.connectivity.IconState;
|
||||||
|
import com.android.systemui.statusbar.connectivity.MobileDataIndicators;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController;
|
import com.android.systemui.statusbar.connectivity.NetworkController;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.IconState;
|
import com.android.systemui.statusbar.connectivity.SignalCallback;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.MobileDataIndicators;
|
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.SignalCallback;
|
|
||||||
import com.android.systemui.statusbar.phone.SystemUIDialog;
|
import com.android.systemui.statusbar.phone.SystemUIDialog;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
@@ -269,7 +270,7 @@ public class CellularTile extends QSTileImpl<SignalState> {
|
|||||||
private final CallbackInfo mInfo = new CallbackInfo();
|
private final CallbackInfo mInfo = new CallbackInfo();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setMobileDataIndicators(MobileDataIndicators indicators) {
|
public void setMobileDataIndicators(@NonNull MobileDataIndicators indicators) {
|
||||||
if (indicators.qsIcon == null) {
|
if (indicators.qsIcon == null) {
|
||||||
// Not data sim, don't display.
|
// Not data sim, don't display.
|
||||||
return;
|
return;
|
||||||
@@ -291,7 +292,7 @@ public class CellularTile extends QSTileImpl<SignalState> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setIsAirplaneMode(IconState icon) {
|
public void setIsAirplaneMode(@NonNull IconState icon) {
|
||||||
mInfo.airplaneModeEnabled = icon.visible;
|
mInfo.airplaneModeEnabled = icon.visible;
|
||||||
refreshState(mInfo);
|
refreshState(mInfo);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package com.android.systemui.qs.tiles;
|
package com.android.systemui.qs.tiles;
|
||||||
|
|
||||||
|
import android.annotation.NonNull;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
@@ -52,13 +53,13 @@ import com.android.systemui.qs.QSHost;
|
|||||||
import com.android.systemui.qs.logging.QSLogger;
|
import com.android.systemui.qs.logging.QSLogger;
|
||||||
import com.android.systemui.qs.tileimpl.QSTileImpl;
|
import com.android.systemui.qs.tileimpl.QSTileImpl;
|
||||||
import com.android.systemui.qs.tiles.dialog.InternetDialogFactory;
|
import com.android.systemui.qs.tiles.dialog.InternetDialogFactory;
|
||||||
|
import com.android.systemui.statusbar.connectivity.AccessPointController;
|
||||||
|
import com.android.systemui.statusbar.connectivity.IconState;
|
||||||
|
import com.android.systemui.statusbar.connectivity.MobileDataIndicators;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController;
|
import com.android.systemui.statusbar.connectivity.NetworkController;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.AccessPointController;
|
import com.android.systemui.statusbar.connectivity.SignalCallback;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.IconState;
|
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.MobileDataIndicators;
|
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.SignalCallback;
|
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.WifiIndicators;
|
|
||||||
import com.android.systemui.statusbar.connectivity.WifiIcons;
|
import com.android.systemui.statusbar.connectivity.WifiIcons;
|
||||||
|
import com.android.systemui.statusbar.connectivity.WifiIndicators;
|
||||||
|
|
||||||
import java.io.FileDescriptor;
|
import java.io.FileDescriptor;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
@@ -250,7 +251,7 @@ public class InternetTile extends QSTileImpl<SignalState> {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setWifiIndicators(WifiIndicators indicators) {
|
public void setWifiIndicators(@NonNull WifiIndicators indicators) {
|
||||||
if (DEBUG) {
|
if (DEBUG) {
|
||||||
Log.d(TAG, "setWifiIndicators: " + indicators);
|
Log.d(TAG, "setWifiIndicators: " + indicators);
|
||||||
}
|
}
|
||||||
@@ -271,7 +272,7 @@ public class InternetTile extends QSTileImpl<SignalState> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setMobileDataIndicators(MobileDataIndicators indicators) {
|
public void setMobileDataIndicators(@NonNull MobileDataIndicators indicators) {
|
||||||
if (DEBUG) {
|
if (DEBUG) {
|
||||||
Log.d(TAG, "setMobileDataIndicators: " + indicators);
|
Log.d(TAG, "setMobileDataIndicators: " + indicators);
|
||||||
}
|
}
|
||||||
@@ -293,7 +294,7 @@ public class InternetTile extends QSTileImpl<SignalState> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setEthernetIndicators(IconState icon) {
|
public void setEthernetIndicators(@NonNull IconState icon) {
|
||||||
if (DEBUG) {
|
if (DEBUG) {
|
||||||
Log.d(TAG, "setEthernetIndicators: "
|
Log.d(TAG, "setEthernetIndicators: "
|
||||||
+ "icon = " + (icon == null ? "" : icon.toString()));
|
+ "icon = " + (icon == null ? "" : icon.toString()));
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package com.android.systemui.qs.tiles;
|
package com.android.systemui.qs.tiles;
|
||||||
|
|
||||||
|
import android.annotation.NonNull;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
@@ -52,11 +53,11 @@ import com.android.systemui.qs.QSHost;
|
|||||||
import com.android.systemui.qs.logging.QSLogger;
|
import com.android.systemui.qs.logging.QSLogger;
|
||||||
import com.android.systemui.qs.tileimpl.QSIconViewImpl;
|
import com.android.systemui.qs.tileimpl.QSIconViewImpl;
|
||||||
import com.android.systemui.qs.tileimpl.QSTileImpl;
|
import com.android.systemui.qs.tileimpl.QSTileImpl;
|
||||||
|
import com.android.systemui.statusbar.connectivity.AccessPointController;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController;
|
import com.android.systemui.statusbar.connectivity.NetworkController;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.AccessPointController;
|
import com.android.systemui.statusbar.connectivity.SignalCallback;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.SignalCallback;
|
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.WifiIndicators;
|
|
||||||
import com.android.systemui.statusbar.connectivity.WifiIcons;
|
import com.android.systemui.statusbar.connectivity.WifiIcons;
|
||||||
|
import com.android.systemui.statusbar.connectivity.WifiIndicators;
|
||||||
import com.android.wifitrackerlib.WifiEntry;
|
import com.android.wifitrackerlib.WifiEntry;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -310,7 +311,7 @@ public class WifiTile extends QSTileImpl<SignalState> {
|
|||||||
final CallbackInfo mInfo = new CallbackInfo();
|
final CallbackInfo mInfo = new CallbackInfo();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setWifiIndicators(WifiIndicators indicators) {
|
public void setWifiIndicators(@NonNull WifiIndicators indicators) {
|
||||||
if (DEBUG) Log.d(TAG, "onWifiSignalChanged enabled=" + indicators.enabled);
|
if (DEBUG) Log.d(TAG, "onWifiSignalChanged enabled=" + indicators.enabled);
|
||||||
if (indicators.qsIcon == null) {
|
if (indicators.qsIcon == null) {
|
||||||
return;
|
return;
|
||||||
@@ -332,7 +333,7 @@ public class WifiTile extends QSTileImpl<SignalState> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected class WifiDetailAdapter implements DetailAdapter,
|
protected class WifiDetailAdapter implements DetailAdapter,
|
||||||
NetworkController.AccessPointController.AccessPointCallback, QSDetailItems.Callback {
|
AccessPointController.AccessPointCallback, QSDetailItems.Callback {
|
||||||
|
|
||||||
private QSDetailItems mItems;
|
private QSDetailItems mItems;
|
||||||
private WifiEntry[] mAccessPoints;
|
private WifiEntry[] mAccessPoints;
|
||||||
|
|||||||
@@ -76,8 +76,7 @@ import com.android.systemui.broadcast.BroadcastDispatcher;
|
|||||||
import com.android.systemui.dagger.qualifiers.Background;
|
import com.android.systemui.dagger.qualifiers.Background;
|
||||||
import com.android.systemui.dagger.qualifiers.Main;
|
import com.android.systemui.dagger.qualifiers.Main;
|
||||||
import com.android.systemui.plugins.ActivityStarter;
|
import com.android.systemui.plugins.ActivityStarter;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController;
|
import com.android.systemui.statusbar.connectivity.AccessPointController;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.AccessPointController;
|
|
||||||
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
||||||
import com.android.systemui.statusbar.policy.LocationController;
|
import com.android.systemui.statusbar.policy.LocationController;
|
||||||
import com.android.systemui.toast.SystemUIToast;
|
import com.android.systemui.toast.SystemUIToast;
|
||||||
@@ -100,7 +99,7 @@ import java.util.stream.Stream;
|
|||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
public class InternetDialogController implements WifiEntry.DisconnectCallback,
|
public class InternetDialogController implements WifiEntry.DisconnectCallback,
|
||||||
NetworkController.AccessPointController.AccessPointCallback {
|
AccessPointController.AccessPointCallback {
|
||||||
|
|
||||||
private static final String TAG = "InternetDialogController";
|
private static final String TAG = "InternetDialogController";
|
||||||
private static final String ACTION_NETWORK_PROVIDER_SETTINGS =
|
private static final String ACTION_NETWORK_PROVIDER_SETTINGS =
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package com.android.systemui.statusbar;
|
package com.android.systemui.statusbar;
|
||||||
|
|
||||||
|
import android.annotation.NonNull;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.telephony.ServiceState;
|
import android.telephony.ServiceState;
|
||||||
import android.telephony.SubscriptionInfo;
|
import android.telephony.SubscriptionInfo;
|
||||||
@@ -26,7 +27,9 @@ import com.android.keyguard.KeyguardUpdateMonitor;
|
|||||||
import com.android.keyguard.KeyguardUpdateMonitorCallback;
|
import com.android.keyguard.KeyguardUpdateMonitorCallback;
|
||||||
import com.android.systemui.demomode.DemoModeCommandReceiver;
|
import com.android.systemui.demomode.DemoModeCommandReceiver;
|
||||||
import com.android.systemui.plugins.DarkIconDispatcher;
|
import com.android.systemui.plugins.DarkIconDispatcher;
|
||||||
|
import com.android.systemui.statusbar.connectivity.IconState;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController;
|
import com.android.systemui.statusbar.connectivity.NetworkController;
|
||||||
|
import com.android.systemui.statusbar.connectivity.SignalCallback;
|
||||||
import com.android.systemui.tuner.TunerService;
|
import com.android.systemui.tuner.TunerService;
|
||||||
import com.android.systemui.util.ViewController;
|
import com.android.systemui.util.ViewController;
|
||||||
|
|
||||||
@@ -135,10 +138,9 @@ public class OperatorNameViewController extends ViewController<OperatorNameView>
|
|||||||
(area, darkIntensity, tint) ->
|
(area, darkIntensity, tint) ->
|
||||||
mView.setTextColor(DarkIconDispatcher.getTint(area, mView, tint));
|
mView.setTextColor(DarkIconDispatcher.getTint(area, mView, tint));
|
||||||
|
|
||||||
private final NetworkController.SignalCallback mSignalCallback =
|
private final SignalCallback mSignalCallback = new SignalCallback() {
|
||||||
new NetworkController.SignalCallback() {
|
|
||||||
@Override
|
@Override
|
||||||
public void setIsAirplaneMode(NetworkController.IconState icon) {
|
public void setIsAirplaneMode(@NonNull IconState icon) {
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -0,0 +1,93 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2021 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.android.systemui.statusbar.connectivity
|
||||||
|
|
||||||
|
import android.content.Intent
|
||||||
|
import android.os.UserManager
|
||||||
|
import android.provider.Settings
|
||||||
|
|
||||||
|
import com.android.wifitrackerlib.MergedCarrierEntry
|
||||||
|
import com.android.wifitrackerlib.WifiEntry
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tracks changes in access points. Allows listening for changes, scanning for new APs,
|
||||||
|
* and connecting to new ones.
|
||||||
|
*/
|
||||||
|
interface AccessPointController {
|
||||||
|
fun addAccessPointCallback(callback: AccessPointCallback)
|
||||||
|
fun removeAccessPointCallback(callback: AccessPointCallback)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Request an updated list of available access points
|
||||||
|
*
|
||||||
|
* This method will trigger a call to [AccessPointCallback.onAccessPointsChanged]
|
||||||
|
*/
|
||||||
|
fun scanForAccessPoints()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the current [MergedCarrierEntry]. If null, this call generates a call to
|
||||||
|
* [AccessPointCallback.onAccessPointsChanged]
|
||||||
|
*
|
||||||
|
* @return the current [MergedCarrierEntry], if one exists
|
||||||
|
*/
|
||||||
|
fun getMergedCarrierEntry(): MergedCarrierEntry?
|
||||||
|
|
||||||
|
/** @return the appropriate icon id for the given [WifiEntry]'s level */
|
||||||
|
fun getIcon(ap: WifiEntry): Int
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Connects to a [WifiEntry] if it's saved or does not require security.
|
||||||
|
*
|
||||||
|
* If the entry is not saved and requires security, will trigger
|
||||||
|
* [AccessPointCallback.onSettingsActivityTriggered].
|
||||||
|
*
|
||||||
|
* @param ap
|
||||||
|
* @return `true` if [AccessPointCallback.onSettingsActivityTriggered] is triggered
|
||||||
|
*/
|
||||||
|
fun connect(ap: WifiEntry?): Boolean
|
||||||
|
|
||||||
|
/**
|
||||||
|
* `true` if the current user does not have the [UserManager.DISALLOW_CONFIG_WIFI] restriction
|
||||||
|
*/
|
||||||
|
fun canConfigWifi(): Boolean
|
||||||
|
|
||||||
|
/**
|
||||||
|
* `true` if the current user does not have the [UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS]
|
||||||
|
* restriction set
|
||||||
|
*/
|
||||||
|
fun canConfigMobileData(): Boolean
|
||||||
|
|
||||||
|
interface AccessPointCallback {
|
||||||
|
/**
|
||||||
|
* Called whenever [scanForAccessPoints] is called, or [getMergedCarrierEntry] is called
|
||||||
|
* with a null entry
|
||||||
|
*
|
||||||
|
* @param accessPoints the list of available access points, including the current connected
|
||||||
|
* one if it exists
|
||||||
|
*/
|
||||||
|
fun onAccessPointsChanged(accessPoints: List<@JvmSuppressWildcards WifiEntry>)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called whenever [connecting][connect] to an unknown access point which has security.
|
||||||
|
* Implementers should launch the intent in the appropriate context
|
||||||
|
*
|
||||||
|
* @param settingsIntent an intent for [Settings.ACTION_WIFI_SETTINGS] with
|
||||||
|
* "wifi_start_connect_ssid" set as an extra
|
||||||
|
*/
|
||||||
|
fun onSettingsActivityTriggered(settingsIntent: Intent?)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -56,9 +56,9 @@ import java.util.concurrent.Executor;
|
|||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
/** */
|
/** */
|
||||||
public class AccessPointControllerImpl
|
public class AccessPointControllerImpl implements AccessPointController,
|
||||||
implements NetworkController.AccessPointController,
|
WifiPickerTracker.WifiPickerTrackerCallback,
|
||||||
WifiPickerTracker.WifiPickerTrackerCallback, LifecycleOwner {
|
LifecycleOwner {
|
||||||
private static final String TAG = "AccessPointController";
|
private static final String TAG = "AccessPointController";
|
||||||
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
|
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
|
||||||
|
|
||||||
@@ -117,13 +117,11 @@ public class AccessPointControllerImpl
|
|||||||
super.finalize();
|
super.finalize();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** */
|
|
||||||
public boolean canConfigWifi() {
|
public boolean canConfigWifi() {
|
||||||
return !mUserManager.hasUserRestriction(UserManager.DISALLOW_CONFIG_WIFI,
|
return !mUserManager.hasUserRestriction(UserManager.DISALLOW_CONFIG_WIFI,
|
||||||
new UserHandle(mCurrentUser));
|
new UserHandle(mCurrentUser));
|
||||||
}
|
}
|
||||||
|
|
||||||
/** */
|
|
||||||
public boolean canConfigMobileData() {
|
public boolean canConfigMobileData() {
|
||||||
return !mUserManager.hasUserRestriction(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS,
|
return !mUserManager.hasUserRestriction(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS,
|
||||||
UserHandle.of(mCurrentUser)) && mUserTracker.getUserInfo().isAdmin();
|
UserHandle.of(mCurrentUser)) && mUserTracker.getUserInfo().isAdmin();
|
||||||
@@ -156,7 +154,7 @@ public class AccessPointControllerImpl
|
|||||||
@Override
|
@Override
|
||||||
public void scanForAccessPoints() {
|
public void scanForAccessPoints() {
|
||||||
if (mWifiPickerTracker == null) {
|
if (mWifiPickerTracker == null) {
|
||||||
fireAcccessPointsCallback(Collections.emptyList());
|
fireAccessPointsCallback(Collections.emptyList());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
List<WifiEntry> entries = mWifiPickerTracker.getWifiEntries();
|
List<WifiEntry> entries = mWifiPickerTracker.getWifiEntries();
|
||||||
@@ -164,13 +162,13 @@ public class AccessPointControllerImpl
|
|||||||
if (connectedEntry != null) {
|
if (connectedEntry != null) {
|
||||||
entries.add(0, connectedEntry);
|
entries.add(0, connectedEntry);
|
||||||
}
|
}
|
||||||
fireAcccessPointsCallback(entries);
|
fireAccessPointsCallback(entries);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MergedCarrierEntry getMergedCarrierEntry() {
|
public MergedCarrierEntry getMergedCarrierEntry() {
|
||||||
if (mWifiPickerTracker == null) {
|
if (mWifiPickerTracker == null) {
|
||||||
fireAcccessPointsCallback(Collections.emptyList());
|
fireAccessPointsCallback(Collections.emptyList());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return mWifiPickerTracker.getMergedCarrierEntry();
|
return mWifiPickerTracker.getMergedCarrierEntry();
|
||||||
@@ -190,7 +188,7 @@ public class AccessPointControllerImpl
|
|||||||
* @param ap
|
* @param ap
|
||||||
* @return {@code true} if {@link AccessPointCallback#onSettingsActivityTriggered} is triggered
|
* @return {@code true} if {@link AccessPointCallback#onSettingsActivityTriggered} is triggered
|
||||||
*/
|
*/
|
||||||
public boolean connect(WifiEntry ap) {
|
public boolean connect(@Nullable WifiEntry ap) {
|
||||||
if (ap == null) return false;
|
if (ap == null) return false;
|
||||||
if (DEBUG) {
|
if (DEBUG) {
|
||||||
if (ap.getWifiConfiguration() != null) {
|
if (ap.getWifiConfiguration() != null) {
|
||||||
@@ -222,7 +220,7 @@ public class AccessPointControllerImpl
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void fireAcccessPointsCallback(List<WifiEntry> aps) {
|
private void fireAccessPointsCallback(List<WifiEntry> aps) {
|
||||||
for (AccessPointCallback callback : mCallbacks) {
|
for (AccessPointCallback callback : mCallbacks) {
|
||||||
callback.onAccessPointsChanged(aps);
|
callback.onAccessPointsChanged(aps);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,10 +23,6 @@ import android.telephony.SubscriptionInfo;
|
|||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
import com.android.systemui.dagger.qualifiers.Main;
|
import com.android.systemui.dagger.qualifiers.Main;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.EmergencyListener;
|
import com.android.systemui.statusbar.connectivity.NetworkController.EmergencyListener;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.IconState;
|
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.MobileDataIndicators;
|
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.SignalCallback;
|
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.WifiIndicators;
|
|
||||||
|
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
|
|||||||
@@ -0,0 +1,104 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2021 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.android.systemui.statusbar.connectivity
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
|
import com.android.settingslib.SignalIcon.IconGroup
|
||||||
|
import java.text.SimpleDateFormat
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base type for various connectivity states, for use with [SignalController] and its subtypes
|
||||||
|
*/
|
||||||
|
open class ConnectivityState {
|
||||||
|
@JvmField var connected = false
|
||||||
|
@JvmField var enabled = false
|
||||||
|
@JvmField var activityIn = false
|
||||||
|
@JvmField var activityOut = false
|
||||||
|
@JvmField var level = 0
|
||||||
|
@JvmField var iconGroup: IconGroup? = null
|
||||||
|
@JvmField var inetCondition = 0
|
||||||
|
// Only for logging.
|
||||||
|
@JvmField var rssi = 0
|
||||||
|
// Not used for comparison, just used for logging.
|
||||||
|
@JvmField var time: Long = 0
|
||||||
|
|
||||||
|
override fun toString(): String {
|
||||||
|
return if (time != 0L) {
|
||||||
|
val builder = StringBuilder()
|
||||||
|
toString(builder)
|
||||||
|
builder.toString()
|
||||||
|
} else {
|
||||||
|
"Empty " + javaClass.simpleName
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected open fun copyFrom(other: ConnectivityState) {
|
||||||
|
connected = other.connected
|
||||||
|
enabled = other.enabled
|
||||||
|
activityIn = other.activityIn
|
||||||
|
activityOut = other.activityOut
|
||||||
|
level = other.level
|
||||||
|
iconGroup = other.iconGroup
|
||||||
|
inetCondition = other.inetCondition
|
||||||
|
rssi = other.rssi
|
||||||
|
time = other.time
|
||||||
|
}
|
||||||
|
|
||||||
|
protected open fun toString(builder: StringBuilder) {
|
||||||
|
builder.append("connected=$connected,")
|
||||||
|
.append("enabled=$enabled,")
|
||||||
|
.append("level=$level,")
|
||||||
|
.append("inetCondition=$inetCondition,")
|
||||||
|
.append("iconGroup=$iconGroup,")
|
||||||
|
.append("activityIn=$activityIn,")
|
||||||
|
.append("activityOut=$activityOut,")
|
||||||
|
.append("rssi=$rssi,")
|
||||||
|
.append("lastModified=${sSDF.format(time)}")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun equals(other: Any?): Boolean {
|
||||||
|
if (other == null) return false
|
||||||
|
if (other.javaClass != javaClass) return false
|
||||||
|
|
||||||
|
val o = other as ConnectivityState
|
||||||
|
return o.connected == connected &&
|
||||||
|
o.enabled == enabled &&
|
||||||
|
o.level == level &&
|
||||||
|
o.inetCondition == inetCondition &&
|
||||||
|
o.iconGroup === iconGroup &&
|
||||||
|
o.activityIn == activityIn &&
|
||||||
|
o.activityOut == activityOut &&
|
||||||
|
o.rssi == rssi
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun hashCode(): Int {
|
||||||
|
var result = connected.hashCode()
|
||||||
|
result = 31 * result + enabled.hashCode()
|
||||||
|
result = 31 * result + activityIn.hashCode()
|
||||||
|
result = 31 * result + activityOut.hashCode()
|
||||||
|
result = 31 * result + level
|
||||||
|
result = 31 * result + (iconGroup?.hashCode() ?: 0)
|
||||||
|
result = 31 * result + inetCondition
|
||||||
|
result = 31 * result + rssi
|
||||||
|
result = 31 * result + time.hashCode()
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// No locale as it's only used for logging purposes
|
||||||
|
@SuppressLint("SimpleDateFormat")
|
||||||
|
private val sSDF = SimpleDateFormat("MM-dd HH:mm:ss.SSS")
|
||||||
@@ -20,15 +20,12 @@ import android.net.NetworkCapabilities;
|
|||||||
|
|
||||||
import com.android.settingslib.AccessibilityContentDescriptions;
|
import com.android.settingslib.AccessibilityContentDescriptions;
|
||||||
import com.android.settingslib.SignalIcon.IconGroup;
|
import com.android.settingslib.SignalIcon.IconGroup;
|
||||||
import com.android.settingslib.SignalIcon.State;
|
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.IconState;
|
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.SignalCallback;
|
|
||||||
|
|
||||||
import java.util.BitSet;
|
import java.util.BitSet;
|
||||||
|
|
||||||
/** */
|
/** */
|
||||||
public class EthernetSignalController extends
|
public class EthernetSignalController extends
|
||||||
SignalController<State, IconGroup> {
|
SignalController<ConnectivityState, IconGroup> {
|
||||||
|
|
||||||
public EthernetSignalController(Context context,
|
public EthernetSignalController(Context context,
|
||||||
CallbackHandler callbackHandler, NetworkControllerImpl networkController) {
|
CallbackHandler callbackHandler, NetworkControllerImpl networkController) {
|
||||||
@@ -68,7 +65,7 @@ public class EthernetSignalController extends
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public State cleanState() {
|
public ConnectivityState cleanState() {
|
||||||
return new State();
|
return new ConnectivityState();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,7 +33,6 @@ import android.telephony.ServiceState;
|
|||||||
import android.telephony.SignalStrength;
|
import android.telephony.SignalStrength;
|
||||||
import android.telephony.SubscriptionInfo;
|
import android.telephony.SubscriptionInfo;
|
||||||
import android.telephony.SubscriptionManager;
|
import android.telephony.SubscriptionManager;
|
||||||
import android.telephony.TelephonyDisplayInfo;
|
|
||||||
import android.telephony.TelephonyManager;
|
import android.telephony.TelephonyManager;
|
||||||
import android.telephony.ims.ImsException;
|
import android.telephony.ims.ImsException;
|
||||||
import android.telephony.ims.ImsMmTelManager;
|
import android.telephony.ims.ImsMmTelManager;
|
||||||
@@ -47,8 +46,6 @@ import android.util.Log;
|
|||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
import com.android.settingslib.AccessibilityContentDescriptions;
|
import com.android.settingslib.AccessibilityContentDescriptions;
|
||||||
import com.android.settingslib.SignalIcon.MobileIconGroup;
|
import com.android.settingslib.SignalIcon.MobileIconGroup;
|
||||||
import com.android.settingslib.SignalIcon.MobileState;
|
|
||||||
import com.android.settingslib.Utils;
|
|
||||||
import com.android.settingslib.graph.SignalDrawable;
|
import com.android.settingslib.graph.SignalDrawable;
|
||||||
import com.android.settingslib.mobile.MobileMappings.Config;
|
import com.android.settingslib.mobile.MobileMappings.Config;
|
||||||
import com.android.settingslib.mobile.MobileStatusTracker;
|
import com.android.settingslib.mobile.MobileStatusTracker;
|
||||||
@@ -58,9 +55,6 @@ import com.android.settingslib.mobile.TelephonyIcons;
|
|||||||
import com.android.settingslib.net.SignalStrengthUtil;
|
import com.android.settingslib.net.SignalStrengthUtil;
|
||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
import com.android.systemui.flags.FeatureFlags;
|
import com.android.systemui.flags.FeatureFlags;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.IconState;
|
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.MobileDataIndicators;
|
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.SignalCallback;
|
|
||||||
import com.android.systemui.util.CarrierConfigTracker;
|
import com.android.systemui.util.CarrierConfigTracker;
|
||||||
|
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
@@ -93,15 +87,6 @@ public class MobileSignalController extends SignalController<MobileState, Mobile
|
|||||||
final SubscriptionInfo mSubscriptionInfo;
|
final SubscriptionInfo mSubscriptionInfo;
|
||||||
private Map<String, MobileIconGroup> mNetworkToIconLookup;
|
private Map<String, MobileIconGroup> mNetworkToIconLookup;
|
||||||
|
|
||||||
// Since some pieces of the phone state are interdependent we store it locally,
|
|
||||||
// this could potentially become part of MobileState for simplification/complication
|
|
||||||
// of code.
|
|
||||||
private int mDataState = TelephonyManager.DATA_DISCONNECTED;
|
|
||||||
private TelephonyDisplayInfo mTelephonyDisplayInfo =
|
|
||||||
new TelephonyDisplayInfo(TelephonyManager.NETWORK_TYPE_UNKNOWN,
|
|
||||||
TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE);
|
|
||||||
private ServiceState mServiceState;
|
|
||||||
private SignalStrength mSignalStrength;
|
|
||||||
private int mLastLevel;
|
private int mLastLevel;
|
||||||
private MobileIconGroup mDefaultIcons;
|
private MobileIconGroup mDefaultIcons;
|
||||||
private Config mConfig;
|
private Config mConfig;
|
||||||
@@ -468,16 +453,8 @@ public class MobileSignalController extends SignalController<MobileState, Mobile
|
|||||||
return new MobileState();
|
return new MobileState();
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isCdma() {
|
|
||||||
return (mSignalStrength != null) && !mSignalStrength.isGsm();
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isEmergencyOnly() {
|
|
||||||
return (mServiceState != null && mServiceState.isEmergencyOnly());
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isInService() {
|
public boolean isInService() {
|
||||||
return Utils.isInService(mServiceState);
|
return mCurrentState.isInService();
|
||||||
}
|
}
|
||||||
|
|
||||||
String getNetworkNameForCarrierWiFi() {
|
String getNetworkNameForCarrierWiFi() {
|
||||||
@@ -485,15 +462,15 @@ public class MobileSignalController extends SignalController<MobileState, Mobile
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean isRoaming() {
|
private boolean isRoaming() {
|
||||||
// During a carrier change, roaming indications need to be supressed.
|
// During a carrier change, roaming indications need to be suppressed.
|
||||||
if (isCarrierNetworkChangeActive()) {
|
if (isCarrierNetworkChangeActive()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (isCdma()) {
|
if (mCurrentState.isCdma()) {
|
||||||
return mPhone.getCdmaEnhancedRoamingIndicatorDisplayNumber()
|
return mPhone.getCdmaEnhancedRoamingIndicatorDisplayNumber()
|
||||||
!= TelephonyManager.ERI_OFF;
|
!= TelephonyManager.ERI_OFF;
|
||||||
} else {
|
} else {
|
||||||
return mServiceState != null && mServiceState.getRoaming();
|
return mCurrentState.isRoaming();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -585,27 +562,29 @@ public class MobileSignalController extends SignalController<MobileState, Mobile
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void updateMobileStatus(MobileStatus mobileStatus) {
|
private void updateMobileStatus(MobileStatus mobileStatus) {
|
||||||
mCurrentState.activityIn = mobileStatus.activityIn;
|
int lastVoiceState = mCurrentState.getVoiceServiceState();
|
||||||
mCurrentState.activityOut = mobileStatus.activityOut;
|
mCurrentState.setFromMobileStatus(mobileStatus);
|
||||||
mCurrentState.dataSim = mobileStatus.dataSim;
|
|
||||||
mCurrentState.carrierNetworkChangeMode = mobileStatus.carrierNetworkChangeMode;
|
|
||||||
mDataState = mobileStatus.dataState;
|
|
||||||
notifyMobileLevelChangeIfNecessary(mobileStatus.signalStrength);
|
notifyMobileLevelChangeIfNecessary(mobileStatus.signalStrength);
|
||||||
mSignalStrength = mobileStatus.signalStrength;
|
if (mProviderModelBehavior) {
|
||||||
mTelephonyDisplayInfo = mobileStatus.telephonyDisplayInfo;
|
maybeNotifyCallStateChanged(lastVoiceState);
|
||||||
int lastVoiceState = mServiceState != null ? mServiceState.getState() : -1;
|
}
|
||||||
mServiceState = mobileStatus.serviceState;
|
}
|
||||||
int currentVoiceState = mServiceState != null ? mServiceState.getState() : -1;
|
|
||||||
|
/** Call state changed is only applicable when provider model behavior is true */
|
||||||
|
private void maybeNotifyCallStateChanged(int lastVoiceState) {
|
||||||
|
int currentVoiceState = mCurrentState.getVoiceServiceState();
|
||||||
|
if (lastVoiceState == currentVoiceState) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
// Only update the no calling Status in the below scenarios
|
// Only update the no calling Status in the below scenarios
|
||||||
// 1. The first valid voice state has been received
|
// 1. The first valid voice state has been received
|
||||||
// 2. The voice state has been changed and either the last or current state is
|
// 2. The voice state has been changed and either the last or current state is
|
||||||
// ServiceState.STATE_IN_SERVICE
|
// ServiceState.STATE_IN_SERVICE
|
||||||
if (mProviderModelBehavior
|
if (lastVoiceState == -1
|
||||||
&& lastVoiceState != currentVoiceState
|
|| (lastVoiceState == ServiceState.STATE_IN_SERVICE
|
||||||
&& (lastVoiceState == -1
|
|| currentVoiceState == ServiceState.STATE_IN_SERVICE)) {
|
||||||
|| (lastVoiceState == ServiceState.STATE_IN_SERVICE
|
boolean isNoCalling = mCurrentState.isNoCalling();
|
||||||
|| currentVoiceState == ServiceState.STATE_IN_SERVICE))) {
|
|
||||||
boolean isNoCalling = currentVoiceState != ServiceState.STATE_IN_SERVICE;
|
|
||||||
isNoCalling &= !hideNoCalling();
|
isNoCalling &= !hideNoCalling();
|
||||||
IconState statusIcon = new IconState(isNoCalling,
|
IconState statusIcon = new IconState(isNoCalling,
|
||||||
R.drawable.ic_qs_no_calling_sms,
|
R.drawable.ic_qs_no_calling_sms,
|
||||||
@@ -615,7 +594,7 @@ public class MobileSignalController extends SignalController<MobileState, Mobile
|
|||||||
}
|
}
|
||||||
|
|
||||||
void updateNoCallingState() {
|
void updateNoCallingState() {
|
||||||
int currentVoiceState = mServiceState != null ? mServiceState.getState() : -1;
|
int currentVoiceState = mCurrentState.getVoiceServiceState();
|
||||||
boolean isNoCalling = currentVoiceState != ServiceState.STATE_IN_SERVICE;
|
boolean isNoCalling = currentVoiceState != ServiceState.STATE_IN_SERVICE;
|
||||||
isNoCalling &= !hideNoCalling();
|
isNoCalling &= !hideNoCalling();
|
||||||
IconState statusIcon = new IconState(isNoCalling,
|
IconState statusIcon = new IconState(isNoCalling,
|
||||||
@@ -643,8 +622,7 @@ public class MobileSignalController extends SignalController<MobileState, Mobile
|
|||||||
}
|
}
|
||||||
|
|
||||||
void refreshCallIndicator(SignalCallback callback) {
|
void refreshCallIndicator(SignalCallback callback) {
|
||||||
boolean isNoCalling = mServiceState != null
|
boolean isNoCalling = mCurrentState.isNoCalling();
|
||||||
&& mServiceState.getState() != ServiceState.STATE_IN_SERVICE;
|
|
||||||
isNoCalling &= !hideNoCalling();
|
isNoCalling &= !hideNoCalling();
|
||||||
IconState statusIcon = new IconState(isNoCalling,
|
IconState statusIcon = new IconState(isNoCalling,
|
||||||
R.drawable.ic_qs_no_calling_sms,
|
R.drawable.ic_qs_no_calling_sms,
|
||||||
@@ -736,30 +714,30 @@ public class MobileSignalController extends SignalController<MobileState, Mobile
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates the current state based on mServiceState, mSignalStrength, mDataState,
|
* Updates the current state based on ServiceState, SignalStrength, DataState,
|
||||||
* mTelephonyDisplayInfo, and mSimState. It should be called any time one of these is updated.
|
* TelephonyDisplayInfo, and sim state. It should be called any time one of these is updated.
|
||||||
* This will call listeners if necessary.
|
* This will call listeners if necessary.
|
||||||
*/
|
*/
|
||||||
private void updateTelephony() {
|
private void updateTelephony() {
|
||||||
if (Log.isLoggable(mTag, Log.DEBUG)) {
|
if (Log.isLoggable(mTag, Log.DEBUG)) {
|
||||||
Log.d(mTag, "updateTelephonySignalStrength: hasService="
|
Log.d(mTag, "updateTelephonySignalStrength: hasService="
|
||||||
+ Utils.isInService(mServiceState) + " ss=" + mSignalStrength
|
+ mCurrentState.isInService()
|
||||||
+ " displayInfo=" + mTelephonyDisplayInfo);
|
+ " ss=" + mCurrentState.signalStrength
|
||||||
|
+ " displayInfo=" + mCurrentState.telephonyDisplayInfo);
|
||||||
}
|
}
|
||||||
checkDefaultData();
|
checkDefaultData();
|
||||||
mCurrentState.connected = Utils.isInService(mServiceState) && mSignalStrength != null;
|
mCurrentState.connected = mCurrentState.isInService();
|
||||||
if (mCurrentState.connected) {
|
if (mCurrentState.connected) {
|
||||||
mCurrentState.level = getSignalLevel(mSignalStrength);
|
mCurrentState.level = getSignalLevel(mCurrentState.signalStrength);
|
||||||
}
|
}
|
||||||
|
|
||||||
String iconKey = getIconKey(mTelephonyDisplayInfo);
|
String iconKey = getIconKey(mCurrentState.telephonyDisplayInfo);
|
||||||
if (mNetworkToIconLookup.get(iconKey) != null) {
|
if (mNetworkToIconLookup.get(iconKey) != null) {
|
||||||
mCurrentState.iconGroup = mNetworkToIconLookup.get(iconKey);
|
mCurrentState.iconGroup = mNetworkToIconLookup.get(iconKey);
|
||||||
} else {
|
} else {
|
||||||
mCurrentState.iconGroup = mDefaultIcons;
|
mCurrentState.iconGroup = mDefaultIcons;
|
||||||
}
|
}
|
||||||
mCurrentState.dataConnected = mCurrentState.connected
|
mCurrentState.dataConnected = mCurrentState.isDataConnected();
|
||||||
&& mDataState == TelephonyManager.DATA_CONNECTED;
|
|
||||||
|
|
||||||
mCurrentState.roaming = isRoaming();
|
mCurrentState.roaming = isRoaming();
|
||||||
if (isCarrierNetworkChangeActive()) {
|
if (isCarrierNetworkChangeActive()) {
|
||||||
@@ -771,20 +749,20 @@ public class MobileSignalController extends SignalController<MobileState, Mobile
|
|||||||
mCurrentState.iconGroup = TelephonyIcons.DATA_DISABLED;
|
mCurrentState.iconGroup = TelephonyIcons.DATA_DISABLED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (isEmergencyOnly() != mCurrentState.isEmergency) {
|
if (mCurrentState.isEmergencyOnly() != mCurrentState.isEmergency) {
|
||||||
mCurrentState.isEmergency = isEmergencyOnly();
|
mCurrentState.isEmergency = mCurrentState.isEmergencyOnly();
|
||||||
mNetworkController.recalculateEmergency();
|
mNetworkController.recalculateEmergency();
|
||||||
}
|
}
|
||||||
// Fill in the network name if we think we have it.
|
// Fill in the network name if we think we have it.
|
||||||
if (mCurrentState.networkName.equals(mNetworkNameDefault) && mServiceState != null
|
if (mCurrentState.networkName.equals(mNetworkNameDefault)
|
||||||
&& !TextUtils.isEmpty(mServiceState.getOperatorAlphaShort())) {
|
&& !TextUtils.isEmpty(mCurrentState.getOperatorAlphaShort())) {
|
||||||
mCurrentState.networkName = mServiceState.getOperatorAlphaShort();
|
mCurrentState.networkName = mCurrentState.getOperatorAlphaShort();
|
||||||
}
|
}
|
||||||
// If this is the data subscription, update the currentState data name
|
// If this is the data subscription, update the currentState data name
|
||||||
if (mCurrentState.networkNameData.equals(mNetworkNameDefault) && mServiceState != null
|
if (mCurrentState.networkNameData.equals(mNetworkNameDefault)
|
||||||
&& mCurrentState.dataSim
|
&& mCurrentState.dataSim
|
||||||
&& !TextUtils.isEmpty(mServiceState.getOperatorAlphaShort())) {
|
&& !TextUtils.isEmpty(mCurrentState.getOperatorAlphaShort())) {
|
||||||
mCurrentState.networkNameData = mServiceState.getOperatorAlphaShort();
|
mCurrentState.networkNameData = mCurrentState.getOperatorAlphaShort();
|
||||||
}
|
}
|
||||||
|
|
||||||
notifyListenersIfNecessary();
|
notifyListenersIfNecessary();
|
||||||
@@ -836,10 +814,6 @@ public class MobileSignalController extends SignalController<MobileState, Mobile
|
|||||||
pw.println(" mSubscription=" + mSubscriptionInfo + ",");
|
pw.println(" mSubscription=" + mSubscriptionInfo + ",");
|
||||||
pw.println(" mProviderModelSetting=" + mProviderModelSetting + ",");
|
pw.println(" mProviderModelSetting=" + mProviderModelSetting + ",");
|
||||||
pw.println(" mProviderModelBehavior=" + mProviderModelBehavior + ",");
|
pw.println(" mProviderModelBehavior=" + mProviderModelBehavior + ",");
|
||||||
pw.println(" mServiceState=" + mServiceState + ",");
|
|
||||||
pw.println(" mSignalStrength=" + mSignalStrength + ",");
|
|
||||||
pw.println(" mTelephonyDisplayInfo=" + mTelephonyDisplayInfo + ",");
|
|
||||||
pw.println(" mDataState=" + mDataState + ",");
|
|
||||||
pw.println(" mInflateSignalStrengths=" + mInflateSignalStrengths + ",");
|
pw.println(" mInflateSignalStrengths=" + mInflateSignalStrengths + ",");
|
||||||
pw.println(" isDataDisabled=" + isDataDisabled() + ",");
|
pw.println(" isDataDisabled=" + isDataDisabled() + ",");
|
||||||
pw.println(" mNetworkToIconLookup=" + mNetworkToIconLookup + ",");
|
pw.println(" mNetworkToIconLookup=" + mNetworkToIconLookup + ",");
|
||||||
@@ -884,5 +858,4 @@ public class MobileSignalController extends SignalController<MobileState, Mobile
|
|||||||
icon = iconState;
|
icon = iconState;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,225 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2021 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.android.systemui.statusbar.connectivity
|
||||||
|
|
||||||
|
import android.telephony.ServiceState
|
||||||
|
import android.telephony.SignalStrength
|
||||||
|
import android.telephony.TelephonyDisplayInfo
|
||||||
|
import android.telephony.TelephonyManager
|
||||||
|
import com.android.settingslib.Utils
|
||||||
|
import com.android.settingslib.mobile.MobileStatusTracker.MobileStatus
|
||||||
|
import com.android.settingslib.mobile.TelephonyIcons
|
||||||
|
import java.lang.IllegalArgumentException
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Box for all policy-related state used in [MobileSignalController]
|
||||||
|
*/
|
||||||
|
internal class MobileState(
|
||||||
|
@JvmField var networkName: String? = null,
|
||||||
|
@JvmField var networkNameData: String? = null,
|
||||||
|
@JvmField var dataSim: Boolean = false,
|
||||||
|
@JvmField var dataConnected: Boolean = false,
|
||||||
|
@JvmField var isEmergency: Boolean = false,
|
||||||
|
@JvmField var airplaneMode: Boolean = false,
|
||||||
|
@JvmField var carrierNetworkChangeMode: Boolean = false,
|
||||||
|
@JvmField var isDefault: Boolean = false,
|
||||||
|
@JvmField var userSetup: Boolean = false,
|
||||||
|
@JvmField var roaming: Boolean = false,
|
||||||
|
@JvmField var dataState: Int = TelephonyManager.DATA_DISCONNECTED,
|
||||||
|
// Tracks the on/off state of the defaultDataSubscription
|
||||||
|
@JvmField var defaultDataOff: Boolean = false
|
||||||
|
) : ConnectivityState() {
|
||||||
|
|
||||||
|
@JvmField var telephonyDisplayInfo = TelephonyDisplayInfo(TelephonyManager.NETWORK_TYPE_UNKNOWN,
|
||||||
|
TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE)
|
||||||
|
@JvmField var serviceState: ServiceState? = null
|
||||||
|
@JvmField var signalStrength: SignalStrength? = null
|
||||||
|
|
||||||
|
/** @return true if this state is disabled or not default data */
|
||||||
|
val isDataDisabledOrNotDefault: Boolean
|
||||||
|
get() = (iconGroup === TelephonyIcons.DATA_DISABLED ||
|
||||||
|
iconGroup === TelephonyIcons.NOT_DEFAULT_DATA) && userSetup
|
||||||
|
|
||||||
|
/** @return if this state is considered to have inbound activity */
|
||||||
|
fun hasActivityIn(): Boolean {
|
||||||
|
return dataConnected && !carrierNetworkChangeMode && activityIn
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @return if this state is considered to have outbound activity */
|
||||||
|
fun hasActivityOut(): Boolean {
|
||||||
|
return dataConnected && !carrierNetworkChangeMode && activityOut
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @return true if this state should show a RAT icon in quick settings */
|
||||||
|
fun showQuickSettingsRatIcon(): Boolean {
|
||||||
|
return dataConnected || isDataDisabledOrNotDefault
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun copyFrom(other: ConnectivityState) {
|
||||||
|
val o = other as? MobileState ?: throw IllegalArgumentException(
|
||||||
|
"MobileState can only update from another MobileState")
|
||||||
|
|
||||||
|
super.copyFrom(o)
|
||||||
|
networkName = o.networkName
|
||||||
|
networkNameData = o.networkNameData
|
||||||
|
dataSim = o.dataSim
|
||||||
|
dataConnected = o.dataConnected
|
||||||
|
isEmergency = o.isEmergency
|
||||||
|
airplaneMode = o.airplaneMode
|
||||||
|
carrierNetworkChangeMode = o.carrierNetworkChangeMode
|
||||||
|
isDefault = o.isDefault
|
||||||
|
userSetup = o.userSetup
|
||||||
|
roaming = o.roaming
|
||||||
|
dataState = o.dataState
|
||||||
|
defaultDataOff = o.defaultDataOff
|
||||||
|
|
||||||
|
telephonyDisplayInfo = o.telephonyDisplayInfo
|
||||||
|
serviceState = o.serviceState
|
||||||
|
signalStrength = o.signalStrength
|
||||||
|
}
|
||||||
|
|
||||||
|
fun isDataConnected(): Boolean {
|
||||||
|
return connected && dataState == TelephonyManager.DATA_CONNECTED
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @return the current voice service state, or -1 if null */
|
||||||
|
fun getVoiceServiceState(): Int {
|
||||||
|
return serviceState?.state ?: -1
|
||||||
|
}
|
||||||
|
|
||||||
|
fun isNoCalling(): Boolean {
|
||||||
|
return serviceState?.state != ServiceState.STATE_IN_SERVICE
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getOperatorAlphaShort(): String {
|
||||||
|
return serviceState?.operatorAlphaShort ?: ""
|
||||||
|
}
|
||||||
|
|
||||||
|
fun isCdma(): Boolean {
|
||||||
|
return signalStrength != null && !signalStrength!!.isGsm
|
||||||
|
}
|
||||||
|
|
||||||
|
fun isEmergencyOnly(): Boolean {
|
||||||
|
return serviceState != null && serviceState!!.isEmergencyOnly
|
||||||
|
}
|
||||||
|
|
||||||
|
fun isInService(): Boolean {
|
||||||
|
return Utils.isInService(serviceState)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun isRoaming(): Boolean {
|
||||||
|
return serviceState != null && serviceState!!.roaming
|
||||||
|
}
|
||||||
|
|
||||||
|
fun setFromMobileStatus(mobileStatus: MobileStatus) {
|
||||||
|
activityIn = mobileStatus.activityIn
|
||||||
|
activityOut = mobileStatus.activityOut
|
||||||
|
dataSim = mobileStatus.dataSim
|
||||||
|
carrierNetworkChangeMode = mobileStatus.carrierNetworkChangeMode
|
||||||
|
dataState = mobileStatus.dataState
|
||||||
|
signalStrength = mobileStatus.signalStrength
|
||||||
|
telephonyDisplayInfo = mobileStatus.telephonyDisplayInfo
|
||||||
|
serviceState = mobileStatus.serviceState
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun toString(builder: StringBuilder) {
|
||||||
|
super.toString(builder)
|
||||||
|
builder.append(',')
|
||||||
|
builder.append("dataSim=$dataSim,")
|
||||||
|
builder.append("networkName=$networkName,")
|
||||||
|
builder.append("networkNameData=$networkNameData,")
|
||||||
|
builder.append("dataConnected=$dataConnected,")
|
||||||
|
builder.append("roaming=$roaming,")
|
||||||
|
builder.append("isDefault=$isDefault,")
|
||||||
|
builder.append("isEmergency=$isEmergency,")
|
||||||
|
builder.append("airplaneMode=$airplaneMode,")
|
||||||
|
builder.append("carrierNetworkChangeMode=$carrierNetworkChangeMode,")
|
||||||
|
builder.append("userSetup=$userSetup,")
|
||||||
|
builder.append("dataState=$dataState,")
|
||||||
|
builder.append("defaultDataOff=$defaultDataOff,")
|
||||||
|
|
||||||
|
// Computed properties
|
||||||
|
builder.append("showQuickSettingsRatIcon=${showQuickSettingsRatIcon()},")
|
||||||
|
builder.append("voiceServiceState=${getVoiceServiceState()},")
|
||||||
|
builder.append("isInService=${isInService()},")
|
||||||
|
|
||||||
|
builder.append("serviceState=${serviceState?.minLog() ?: "(null)"},")
|
||||||
|
builder.append("signalStrength=${signalStrength?.minLog() ?: "(null)"},")
|
||||||
|
builder.append("displayInfo=$telephonyDisplayInfo")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun equals(other: Any?): Boolean {
|
||||||
|
if (this === other) return true
|
||||||
|
if (javaClass != other?.javaClass) return false
|
||||||
|
if (!super.equals(other)) return false
|
||||||
|
|
||||||
|
other as MobileState
|
||||||
|
|
||||||
|
if (networkName != other.networkName) return false
|
||||||
|
if (networkNameData != other.networkNameData) return false
|
||||||
|
if (dataSim != other.dataSim) return false
|
||||||
|
if (dataConnected != other.dataConnected) return false
|
||||||
|
if (isEmergency != other.isEmergency) return false
|
||||||
|
if (airplaneMode != other.airplaneMode) return false
|
||||||
|
if (carrierNetworkChangeMode != other.carrierNetworkChangeMode) return false
|
||||||
|
if (isDefault != other.isDefault) return false
|
||||||
|
if (userSetup != other.userSetup) return false
|
||||||
|
if (roaming != other.roaming) return false
|
||||||
|
if (dataState != other.dataState) return false
|
||||||
|
if (defaultDataOff != other.defaultDataOff) return false
|
||||||
|
if (telephonyDisplayInfo != other.telephonyDisplayInfo) return false
|
||||||
|
if (serviceState != other.serviceState) return false
|
||||||
|
if (signalStrength != other.signalStrength) return false
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun hashCode(): Int {
|
||||||
|
var result = super.hashCode()
|
||||||
|
result = 31 * result + (networkName?.hashCode() ?: 0)
|
||||||
|
result = 31 * result + (networkNameData?.hashCode() ?: 0)
|
||||||
|
result = 31 * result + dataSim.hashCode()
|
||||||
|
result = 31 * result + dataConnected.hashCode()
|
||||||
|
result = 31 * result + isEmergency.hashCode()
|
||||||
|
result = 31 * result + airplaneMode.hashCode()
|
||||||
|
result = 31 * result + carrierNetworkChangeMode.hashCode()
|
||||||
|
result = 31 * result + isDefault.hashCode()
|
||||||
|
result = 31 * result + userSetup.hashCode()
|
||||||
|
result = 31 * result + roaming.hashCode()
|
||||||
|
result = 31 * result + dataState
|
||||||
|
result = 31 * result + defaultDataOff.hashCode()
|
||||||
|
result = 31 * result + telephonyDisplayInfo.hashCode()
|
||||||
|
result = 31 * result + (serviceState?.hashCode() ?: 0)
|
||||||
|
result = 31 * result + (signalStrength?.hashCode() ?: 0)
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** toString() is a little more verbose than we need. Just log the fields we read */
|
||||||
|
private fun ServiceState.minLog(): String {
|
||||||
|
return "serviceState={" +
|
||||||
|
"state=$state," +
|
||||||
|
"isEmergencyOnly=$isEmergencyOnly," +
|
||||||
|
"roaming=$roaming," +
|
||||||
|
"operatorNameAlphaShort=$operatorAlphaShort}"
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun SignalStrength.minLog(): String {
|
||||||
|
return "signalStrength={" +
|
||||||
|
"isGsm=$isGsm," +
|
||||||
|
"level=$level}"
|
||||||
|
}
|
||||||
@@ -16,19 +16,10 @@
|
|||||||
|
|
||||||
package com.android.systemui.statusbar.connectivity;
|
package com.android.systemui.statusbar.connectivity;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.telephony.SubscriptionInfo;
|
|
||||||
|
|
||||||
import com.android.settingslib.net.DataUsageController;
|
import com.android.settingslib.net.DataUsageController;
|
||||||
import com.android.systemui.demomode.DemoMode;
|
import com.android.systemui.demomode.DemoMode;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.SignalCallback;
|
|
||||||
import com.android.systemui.statusbar.policy.CallbackController;
|
import com.android.systemui.statusbar.policy.CallbackController;
|
||||||
import com.android.systemui.statusbar.policy.DataSaverController;
|
import com.android.systemui.statusbar.policy.DataSaverController;
|
||||||
import com.android.wifitrackerlib.MergedCarrierEntry;
|
|
||||||
import com.android.wifitrackerlib.WifiEntry;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/** */
|
/** */
|
||||||
public interface NetworkController extends CallbackController<SignalCallback>, DemoMode {
|
public interface NetworkController extends CallbackController<SignalCallback>, DemoMode {
|
||||||
@@ -62,197 +53,8 @@ public interface NetworkController extends CallbackController<SignalCallback>, D
|
|||||||
/** */
|
/** */
|
||||||
boolean isRadioOn();
|
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(",qsDescription=").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 qsDescription;
|
|
||||||
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 qsDescription, 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.qsDescription = qsDescription;
|
|
||||||
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(qsDescription)
|
|
||||||
.append(",subId=").append(subId)
|
|
||||||
.append(",roaming=").append(roaming)
|
|
||||||
.append(",showTriangle=").append(showTriangle)
|
|
||||||
.append(']').toString();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** */
|
|
||||||
interface SignalCallback {
|
|
||||||
/**
|
|
||||||
* 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
|
|
||||||
* of Mobile networks.
|
|
||||||
*/
|
|
||||||
default void setMobileDataIndicators(MobileDataIndicators mobileDataIndicators) {}
|
|
||||||
|
|
||||||
/** */
|
|
||||||
default void setSubs(List<SubscriptionInfo> subs) {}
|
|
||||||
|
|
||||||
/** */
|
|
||||||
default void setNoSims(boolean show, boolean simDetected) {}
|
|
||||||
|
|
||||||
/** */
|
|
||||||
default void setEthernetIndicators(IconState icon) {}
|
|
||||||
|
|
||||||
/** */
|
|
||||||
default void setIsAirplaneMode(IconState icon) {}
|
|
||||||
|
|
||||||
/** */
|
|
||||||
default void setMobileDataEnabled(boolean enabled) {}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Callback for listeners to be able to update the connectivity status
|
|
||||||
* @param noDefaultNetwork whether there is any default network.
|
|
||||||
* @param noValidatedNetwork whether there is any validated network.
|
|
||||||
* @param noNetworksAvailable whether there is any WiFi networks available.
|
|
||||||
*/
|
|
||||||
default void setConnectivityStatus(boolean noDefaultNetwork, boolean noValidatedNetwork,
|
|
||||||
boolean noNetworksAvailable) {}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Callback for listeners to be able to update the call indicator
|
|
||||||
* @param statusIcon the icon for the call indicator
|
|
||||||
* @param subId subscription ID for which to update the UI
|
|
||||||
*/
|
|
||||||
default void setCallIndicator(IconState statusIcon, int subId) {}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** */
|
/** */
|
||||||
interface EmergencyListener {
|
interface EmergencyListener {
|
||||||
void setEmergencyCallsOnly(boolean emergencyOnly);
|
void setEmergencyCallsOnly(boolean emergencyOnly);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** */
|
|
||||||
class IconState {
|
|
||||||
public final boolean visible;
|
|
||||||
public final int icon;
|
|
||||||
public final String contentDescription;
|
|
||||||
|
|
||||||
public IconState(boolean visible, int icon, String contentDescription) {
|
|
||||||
this.visible = visible;
|
|
||||||
this.icon = icon;
|
|
||||||
this.contentDescription = contentDescription;
|
|
||||||
}
|
|
||||||
|
|
||||||
public IconState(boolean visible, int icon, int contentDescription,
|
|
||||||
Context context) {
|
|
||||||
this(visible, icon, context.getString(contentDescription));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
StringBuilder builder = new StringBuilder();
|
|
||||||
return builder.append("[visible=").append(visible).append(',')
|
|
||||||
.append("icon=").append(icon).append(',')
|
|
||||||
.append("contentDescription=").append(contentDescription).append(']')
|
|
||||||
.toString();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tracks changes in access points. Allows listening for changes, scanning for new APs,
|
|
||||||
* and connecting to new ones.
|
|
||||||
*/
|
|
||||||
interface AccessPointController {
|
|
||||||
void addAccessPointCallback(AccessPointCallback callback);
|
|
||||||
void removeAccessPointCallback(AccessPointCallback callback);
|
|
||||||
void scanForAccessPoints();
|
|
||||||
MergedCarrierEntry getMergedCarrierEntry();
|
|
||||||
int getIcon(WifiEntry ap);
|
|
||||||
boolean connect(WifiEntry ap);
|
|
||||||
boolean canConfigWifi();
|
|
||||||
boolean canConfigMobileData();
|
|
||||||
|
|
||||||
interface AccessPointCallback {
|
|
||||||
void onAccessPointsChanged(List<WifiEntry> accessPoints);
|
|
||||||
void onSettingsActivityTriggered(Intent settingsIntent);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -721,8 +721,11 @@ public class NetworkControllerImpl extends BroadcastReceiver
|
|||||||
@Override
|
@Override
|
||||||
public void addCallback(@NonNull SignalCallback cb) {
|
public void addCallback(@NonNull SignalCallback cb) {
|
||||||
cb.setSubs(mCurrentSubscriptions);
|
cb.setSubs(mCurrentSubscriptions);
|
||||||
cb.setIsAirplaneMode(new IconState(mAirplaneMode,
|
cb.setIsAirplaneMode(
|
||||||
TelephonyIcons.FLIGHT_MODE_ICON, R.string.accessibility_airplane_mode, mContext));
|
new IconState(
|
||||||
|
mAirplaneMode,
|
||||||
|
TelephonyIcons.FLIGHT_MODE_ICON,
|
||||||
|
mContext.getString(R.string.accessibility_airplane_mode)));
|
||||||
cb.setNoSims(mHasNoSubs, mSimDetected);
|
cb.setNoSims(mHasNoSubs, mSimDetected);
|
||||||
if (mProviderModelSetting) {
|
if (mProviderModelSetting) {
|
||||||
cb.setConnectivityStatus(mNoDefaultNetwork, !mInetCondition, mNoNetworksAvailable);
|
cb.setConnectivityStatus(mNoDefaultNetwork, !mInetCondition, mNoNetworksAvailable);
|
||||||
@@ -1056,8 +1059,11 @@ public class NetworkControllerImpl extends BroadcastReceiver
|
|||||||
* notifyAllListeners.
|
* notifyAllListeners.
|
||||||
*/
|
*/
|
||||||
private void notifyListeners() {
|
private void notifyListeners() {
|
||||||
mCallbackHandler.setIsAirplaneMode(new IconState(mAirplaneMode,
|
mCallbackHandler.setIsAirplaneMode(
|
||||||
TelephonyIcons.FLIGHT_MODE_ICON, R.string.accessibility_airplane_mode, mContext));
|
new IconState(
|
||||||
|
mAirplaneMode,
|
||||||
|
TelephonyIcons.FLIGHT_MODE_ICON,
|
||||||
|
mContext.getString(R.string.accessibility_airplane_mode)));
|
||||||
mCallbackHandler.setNoSims(mHasNoSubs, mSimDetected);
|
mCallbackHandler.setNoSims(mHasNoSubs, mSimDetected);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1206,7 +1212,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean mDemoInetCondition;
|
private boolean mDemoInetCondition;
|
||||||
private WifiSignalController.WifiState mDemoWifiState;
|
private WifiState mDemoWifiState;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDemoModeStarted() {
|
public void onDemoModeStarted() {
|
||||||
@@ -1241,9 +1247,11 @@ public class NetworkControllerImpl extends BroadcastReceiver
|
|||||||
String airplane = args.getString("airplane");
|
String airplane = args.getString("airplane");
|
||||||
if (airplane != null) {
|
if (airplane != null) {
|
||||||
boolean show = airplane.equals("show");
|
boolean show = airplane.equals("show");
|
||||||
mCallbackHandler.setIsAirplaneMode(new IconState(show,
|
mCallbackHandler.setIsAirplaneMode(
|
||||||
TelephonyIcons.FLIGHT_MODE_ICON, R.string.accessibility_airplane_mode,
|
new IconState(
|
||||||
mContext));
|
show,
|
||||||
|
TelephonyIcons.FLIGHT_MODE_ICON,
|
||||||
|
mContext.getString(R.string.accessibility_airplane_mode)));
|
||||||
}
|
}
|
||||||
String fully = args.getString("fully");
|
String fully = args.getString("fully");
|
||||||
if (fully != null) {
|
if (fully != null) {
|
||||||
|
|||||||
@@ -0,0 +1,187 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2021 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.android.systemui.statusbar.connectivity
|
||||||
|
|
||||||
|
import android.telephony.SubscriptionInfo
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SignalCallback contains all of the connectivity updates from [NetworkController]. Implement this
|
||||||
|
* interface to be able to draw iconography for Wi-Fi, mobile data, ethernet, call strength
|
||||||
|
* indicators, etc.
|
||||||
|
*/
|
||||||
|
interface SignalCallback {
|
||||||
|
/**
|
||||||
|
* Called when the Wi-Fi iconography has been updated. Implement this method to draw Wi-Fi icons
|
||||||
|
*
|
||||||
|
* @param wifiIndicators a box type containing enough information to properly draw a Wi-Fi icon
|
||||||
|
*/
|
||||||
|
@JvmDefault
|
||||||
|
fun setWifiIndicators(wifiIndicators: WifiIndicators) {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when the mobile iconography has been updated. Implement this method to draw mobile
|
||||||
|
* indicators
|
||||||
|
*
|
||||||
|
* @param mobileDataIndicators a box type containing enough information to properly draw
|
||||||
|
* mobile data icons
|
||||||
|
*
|
||||||
|
* NOTE: phones can have multiple subscriptions, so this [mobileDataIndicators] object should be
|
||||||
|
* indexed based on its [subId][MobileDataIndicators.subId]
|
||||||
|
*/
|
||||||
|
@JvmDefault
|
||||||
|
fun setMobileDataIndicators(mobileDataIndicators: MobileDataIndicators) {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when the list of mobile data subscriptions has changed. Use this method as a chance
|
||||||
|
* to remove views that are no longer needed, or to make room for new icons to come in
|
||||||
|
*
|
||||||
|
* @param subs a [SubscriptionInfo] for each subscription that we know about
|
||||||
|
*/
|
||||||
|
@JvmDefault
|
||||||
|
fun setSubs(subs: List<@JvmSuppressWildcards SubscriptionInfo>) {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when:
|
||||||
|
* 1. The number of [MobileSignalController]s goes to 0 while mobile data is enabled
|
||||||
|
* OR
|
||||||
|
* 2. The presence of any SIM changes
|
||||||
|
*
|
||||||
|
* @param show whether or not to show a "no sim" view
|
||||||
|
* @param simDetected whether any SIM is detected or not
|
||||||
|
*/
|
||||||
|
@JvmDefault
|
||||||
|
fun setNoSims(show: Boolean, simDetected: Boolean) {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when there is any update to the ethernet iconography. Implement this method to set an
|
||||||
|
* ethernet icon
|
||||||
|
*
|
||||||
|
* @param icon an [IconState] for the current ethernet status
|
||||||
|
*/
|
||||||
|
@JvmDefault
|
||||||
|
fun setEthernetIndicators(icon: IconState) {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called whenever airplane mode changes
|
||||||
|
*
|
||||||
|
* @param icon an [IconState] for the current airplane mode status
|
||||||
|
*/
|
||||||
|
@JvmDefault
|
||||||
|
fun setIsAirplaneMode(icon: IconState) {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called whenever the mobile data feature enabled state changes
|
||||||
|
*
|
||||||
|
* @param enabled the current mobile data feature ennabled state
|
||||||
|
*/
|
||||||
|
@JvmDefault
|
||||||
|
fun setMobileDataEnabled(enabled: Boolean) {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Callback for listeners to be able to update the connectivity status
|
||||||
|
* @param noDefaultNetwork whether there is any default network.
|
||||||
|
* @param noValidatedNetwork whether there is any validated network.
|
||||||
|
* @param noNetworksAvailable whether there is any WiFi networks available.
|
||||||
|
*/
|
||||||
|
@JvmDefault
|
||||||
|
fun setConnectivityStatus(
|
||||||
|
noDefaultNetwork: Boolean,
|
||||||
|
noValidatedNetwork: Boolean,
|
||||||
|
noNetworksAvailable: Boolean
|
||||||
|
) { }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Callback for listeners to be able to update the call indicator
|
||||||
|
* @param statusIcon the icon for the call indicator
|
||||||
|
* @param subId subscription ID for which to update the UI
|
||||||
|
*/
|
||||||
|
@JvmDefault
|
||||||
|
fun setCallIndicator(statusIcon: IconState, subId: Int) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Box type for [SignalCallback.setWifiIndicators] */
|
||||||
|
data class WifiIndicators(
|
||||||
|
@JvmField val enabled: Boolean,
|
||||||
|
@JvmField val statusIcon: IconState?,
|
||||||
|
@JvmField val qsIcon: IconState?,
|
||||||
|
@JvmField val activityIn: Boolean,
|
||||||
|
@JvmField val activityOut: Boolean,
|
||||||
|
@JvmField val description: String?,
|
||||||
|
@JvmField val isTransient: Boolean,
|
||||||
|
@JvmField val statusLabel: String?
|
||||||
|
) {
|
||||||
|
override fun toString(): String {
|
||||||
|
return StringBuilder("WifiIndicators[")
|
||||||
|
.append("enabled=").append(enabled)
|
||||||
|
.append(",statusIcon=").append(statusIcon?.toString() ?: "")
|
||||||
|
.append(",qsIcon=").append(qsIcon?.toString() ?: "")
|
||||||
|
.append(",activityIn=").append(activityIn)
|
||||||
|
.append(",activityOut=").append(activityOut)
|
||||||
|
.append(",qsDescription=").append(description)
|
||||||
|
.append(",isTransient=").append(isTransient)
|
||||||
|
.append(",statusLabel=").append(statusLabel)
|
||||||
|
.append(']').toString()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Box type for [SignalCallback.setMobileDataIndicators] */
|
||||||
|
data class MobileDataIndicators(
|
||||||
|
@JvmField val statusIcon: IconState?,
|
||||||
|
@JvmField val qsIcon: IconState?,
|
||||||
|
@JvmField val statusType: Int,
|
||||||
|
@JvmField val qsType: Int,
|
||||||
|
@JvmField val activityIn: Boolean,
|
||||||
|
@JvmField val activityOut: Boolean,
|
||||||
|
@JvmField val typeContentDescription: CharSequence?,
|
||||||
|
@JvmField val typeContentDescriptionHtml: CharSequence?,
|
||||||
|
@JvmField val qsDescription: CharSequence?,
|
||||||
|
@JvmField val subId: Int,
|
||||||
|
@JvmField val roaming: Boolean,
|
||||||
|
@JvmField val showTriangle: Boolean
|
||||||
|
) {
|
||||||
|
override fun toString(): String {
|
||||||
|
return java.lang.StringBuilder("MobileDataIndicators[")
|
||||||
|
.append("statusIcon=").append(statusIcon?.toString() ?: "")
|
||||||
|
.append(",qsIcon=").append(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(qsDescription)
|
||||||
|
.append(",subId=").append(subId)
|
||||||
|
.append(",roaming=").append(roaming)
|
||||||
|
.append(",showTriangle=").append(showTriangle)
|
||||||
|
.append(']').toString()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Box for an icon with its visibility and content description */
|
||||||
|
data class IconState(
|
||||||
|
@JvmField val visible: Boolean,
|
||||||
|
@JvmField val icon: Int,
|
||||||
|
@JvmField val contentDescription: String
|
||||||
|
) {
|
||||||
|
override fun toString(): String {
|
||||||
|
val builder = java.lang.StringBuilder()
|
||||||
|
return builder.append("[visible=").append(visible).append(',')
|
||||||
|
.append("icon=").append(icon).append(',')
|
||||||
|
.append("contentDescription=").append(contentDescription).append(']')
|
||||||
|
.toString()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -22,9 +22,6 @@ import android.content.Context;
|
|||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import com.android.settingslib.SignalIcon.IconGroup;
|
import com.android.settingslib.SignalIcon.IconGroup;
|
||||||
import com.android.settingslib.SignalIcon.State;
|
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.IconState;
|
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.SignalCallback;
|
|
||||||
|
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.util.BitSet;
|
import java.util.BitSet;
|
||||||
@@ -36,7 +33,7 @@ import java.util.BitSet;
|
|||||||
* @param <T> State of the SysUI controller.
|
* @param <T> State of the SysUI controller.
|
||||||
* @param <I> Icon groups of the SysUI controller for a given State.
|
* @param <I> Icon groups of the SysUI controller for a given State.
|
||||||
*/
|
*/
|
||||||
public abstract class SignalController<T extends State, I extends IconGroup> {
|
public abstract class SignalController<T extends ConnectivityState, I extends IconGroup> {
|
||||||
// Save the previous SignalController.States of all SignalControllers for dumps.
|
// Save the previous SignalController.States of all SignalControllers for dumps.
|
||||||
static final boolean RECORD_HISTORY = true;
|
static final boolean RECORD_HISTORY = true;
|
||||||
// If RECORD_HISTORY how many to save, must be a power of 2.
|
// If RECORD_HISTORY how many to save, must be a power of 2.
|
||||||
@@ -58,7 +55,7 @@ public abstract class SignalController<T extends State, I extends IconGroup> {
|
|||||||
private final CallbackHandler mCallbackHandler;
|
private final CallbackHandler mCallbackHandler;
|
||||||
|
|
||||||
// Save the previous HISTORY_SIZE states for logging.
|
// Save the previous HISTORY_SIZE states for logging.
|
||||||
private final State[] mHistory;
|
private final ConnectivityState[] mHistory;
|
||||||
// Where to copy the next state into.
|
// Where to copy the next state into.
|
||||||
private int mHistoryIndex;
|
private int mHistoryIndex;
|
||||||
|
|
||||||
@@ -72,7 +69,7 @@ public abstract class SignalController<T extends State, I extends IconGroup> {
|
|||||||
mCurrentState = cleanState();
|
mCurrentState = cleanState();
|
||||||
mLastState = cleanState();
|
mLastState = cleanState();
|
||||||
if (RECORD_HISTORY) {
|
if (RECORD_HISTORY) {
|
||||||
mHistory = new State[HISTORY_SIZE];
|
mHistory = new ConnectivityState[HISTORY_SIZE];
|
||||||
for (int i = 0; i < HISTORY_SIZE; i++) {
|
for (int i = 0; i < HISTORY_SIZE; i++) {
|
||||||
mHistory[i] = cleanState();
|
mHistory[i] = cleanState();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,28 +26,20 @@ import android.net.NetworkCapabilities;
|
|||||||
import android.net.NetworkScoreManager;
|
import android.net.NetworkScoreManager;
|
||||||
import android.net.wifi.WifiManager;
|
import android.net.wifi.WifiManager;
|
||||||
import android.text.Html;
|
import android.text.Html;
|
||||||
import android.text.TextUtils;
|
|
||||||
|
|
||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
import com.android.settingslib.SignalIcon.IconGroup;
|
import com.android.settingslib.SignalIcon.IconGroup;
|
||||||
import com.android.settingslib.SignalIcon.MobileIconGroup;
|
import com.android.settingslib.SignalIcon.MobileIconGroup;
|
||||||
import com.android.settingslib.SignalIcon.State;
|
|
||||||
import com.android.settingslib.graph.SignalDrawable;
|
import com.android.settingslib.graph.SignalDrawable;
|
||||||
import com.android.settingslib.mobile.TelephonyIcons;
|
import com.android.settingslib.mobile.TelephonyIcons;
|
||||||
import com.android.settingslib.wifi.WifiStatusTracker;
|
import com.android.settingslib.wifi.WifiStatusTracker;
|
||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
import com.android.systemui.flags.FeatureFlags;
|
import com.android.systemui.flags.FeatureFlags;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.IconState;
|
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.MobileDataIndicators;
|
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.SignalCallback;
|
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.WifiIndicators;
|
|
||||||
|
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
/** */
|
/** */
|
||||||
public class WifiSignalController extends
|
public class WifiSignalController extends SignalController<WifiState, IconGroup> {
|
||||||
SignalController<WifiSignalController.WifiState, IconGroup> {
|
|
||||||
private final boolean mHasMobileDataFeature;
|
private final boolean mHasMobileDataFeature;
|
||||||
private final WifiStatusTracker mWifiTracker;
|
private final WifiStatusTracker mWifiTracker;
|
||||||
private final IconGroup mUnmergedWifiIconGroup = WifiIcons.UNMERGED_WIFI;
|
private final IconGroup mUnmergedWifiIconGroup = WifiIcons.UNMERGED_WIFI;
|
||||||
@@ -272,50 +264,4 @@ public class WifiSignalController extends
|
|||||||
setActivity(state);
|
setActivity(state);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static class WifiState extends State {
|
|
||||||
public String ssid;
|
|
||||||
public boolean isTransient;
|
|
||||||
public boolean isDefault;
|
|
||||||
public String statusLabel;
|
|
||||||
public boolean isCarrierMerged;
|
|
||||||
public int subId;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void copyFrom(State s) {
|
|
||||||
super.copyFrom(s);
|
|
||||||
WifiState state = (WifiState) s;
|
|
||||||
ssid = state.ssid;
|
|
||||||
isTransient = state.isTransient;
|
|
||||||
isDefault = state.isDefault;
|
|
||||||
statusLabel = state.statusLabel;
|
|
||||||
isCarrierMerged = state.isCarrierMerged;
|
|
||||||
subId = state.subId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void toString(StringBuilder builder) {
|
|
||||||
super.toString(builder);
|
|
||||||
builder.append(",ssid=").append(ssid)
|
|
||||||
.append(",isTransient=").append(isTransient)
|
|
||||||
.append(",isDefault=").append(isDefault)
|
|
||||||
.append(",statusLabel=").append(statusLabel)
|
|
||||||
.append(",isCarrierMerged=").append(isCarrierMerged)
|
|
||||||
.append(",subId=").append(subId);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object o) {
|
|
||||||
if (!super.equals(o)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
WifiState other = (WifiState) o;
|
|
||||||
return Objects.equals(other.ssid, ssid)
|
|
||||||
&& other.isTransient == isTransient
|
|
||||||
&& other.isDefault == isDefault
|
|
||||||
&& TextUtils.equals(other.statusLabel, statusLabel)
|
|
||||||
&& other.isCarrierMerged == isCarrierMerged
|
|
||||||
&& other.subId == subId;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,78 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2021 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.android.systemui.statusbar.connectivity
|
||||||
|
|
||||||
|
import java.lang.StringBuilder
|
||||||
|
|
||||||
|
internal class WifiState(
|
||||||
|
@JvmField var ssid: String? = null,
|
||||||
|
@JvmField var isTransient: Boolean = false,
|
||||||
|
@JvmField var isDefault: Boolean = false,
|
||||||
|
@JvmField var statusLabel: String? = null,
|
||||||
|
@JvmField var isCarrierMerged: Boolean = false,
|
||||||
|
@JvmField var subId: Int = 0
|
||||||
|
) : ConnectivityState() {
|
||||||
|
|
||||||
|
public override fun copyFrom(s: ConnectivityState) {
|
||||||
|
super.copyFrom(s)
|
||||||
|
val state = s as WifiState
|
||||||
|
ssid = state.ssid
|
||||||
|
isTransient = state.isTransient
|
||||||
|
isDefault = state.isDefault
|
||||||
|
statusLabel = state.statusLabel
|
||||||
|
isCarrierMerged = state.isCarrierMerged
|
||||||
|
subId = state.subId
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun toString(builder: StringBuilder) {
|
||||||
|
super.toString(builder)
|
||||||
|
builder.append(",ssid=").append(ssid)
|
||||||
|
.append(",isTransient=").append(isTransient)
|
||||||
|
.append(",isDefault=").append(isDefault)
|
||||||
|
.append(",statusLabel=").append(statusLabel)
|
||||||
|
.append(",isCarrierMerged=").append(isCarrierMerged)
|
||||||
|
.append(",subId=").append(subId)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun equals(other: Any?): Boolean {
|
||||||
|
if (this === other) return true
|
||||||
|
if (javaClass != other?.javaClass) return false
|
||||||
|
if (!super.equals(other)) return false
|
||||||
|
|
||||||
|
other as WifiState
|
||||||
|
|
||||||
|
if (ssid != other.ssid) return false
|
||||||
|
if (isTransient != other.isTransient) return false
|
||||||
|
if (isDefault != other.isDefault) return false
|
||||||
|
if (statusLabel != other.statusLabel) return false
|
||||||
|
if (isCarrierMerged != other.isCarrierMerged) return false
|
||||||
|
if (subId != other.subId) return false
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun hashCode(): Int {
|
||||||
|
var result = super.hashCode()
|
||||||
|
result = 31 * result + (ssid?.hashCode() ?: 0)
|
||||||
|
result = 31 * result + isTransient.hashCode()
|
||||||
|
result = 31 * result + isDefault.hashCode()
|
||||||
|
result = 31 * result + (statusLabel?.hashCode() ?: 0)
|
||||||
|
result = 31 * result + isCarrierMerged.hashCode()
|
||||||
|
result = 31 * result + subId
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -26,6 +26,7 @@ import static com.android.systemui.statusbar.events.SystemStatusAnimationSchedul
|
|||||||
import static com.android.systemui.statusbar.events.SystemStatusAnimationSchedulerKt.SHOWING_PERSISTENT_DOT;
|
import static com.android.systemui.statusbar.events.SystemStatusAnimationSchedulerKt.SHOWING_PERSISTENT_DOT;
|
||||||
|
|
||||||
import android.animation.ValueAnimator;
|
import android.animation.ValueAnimator;
|
||||||
|
import android.annotation.NonNull;
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
import android.app.Fragment;
|
import android.app.Fragment;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
@@ -46,8 +47,9 @@ import com.android.systemui.statusbar.DisableFlagsLogger.DisableState;
|
|||||||
import com.android.systemui.statusbar.OperatorNameView;
|
import com.android.systemui.statusbar.OperatorNameView;
|
||||||
import com.android.systemui.statusbar.OperatorNameViewController;
|
import com.android.systemui.statusbar.OperatorNameViewController;
|
||||||
import com.android.systemui.statusbar.StatusBarState;
|
import com.android.systemui.statusbar.StatusBarState;
|
||||||
|
import com.android.systemui.statusbar.connectivity.IconState;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController;
|
import com.android.systemui.statusbar.connectivity.NetworkController;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.SignalCallback;
|
import com.android.systemui.statusbar.connectivity.SignalCallback;
|
||||||
import com.android.systemui.statusbar.events.SystemStatusAnimationCallback;
|
import com.android.systemui.statusbar.events.SystemStatusAnimationCallback;
|
||||||
import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler;
|
import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler;
|
||||||
import com.android.systemui.statusbar.phone.StatusBarIconController.DarkIconManager;
|
import com.android.systemui.statusbar.phone.StatusBarIconController.DarkIconManager;
|
||||||
@@ -109,7 +111,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
|
|||||||
|
|
||||||
private SignalCallback mSignalCallback = new SignalCallback() {
|
private SignalCallback mSignalCallback = new SignalCallback() {
|
||||||
@Override
|
@Override
|
||||||
public void setIsAirplaneMode(NetworkController.IconState icon) {
|
public void setIsAirplaneMode(@NonNull IconState icon) {
|
||||||
mCommandQueue.recomputeDisableFlags(getContext().getDisplayId(), true /* animate */);
|
mCommandQueue.recomputeDisableFlags(getContext().getDisplayId(), true /* animate */);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package com.android.systemui.statusbar.phone;
|
package com.android.systemui.statusbar.phone;
|
||||||
|
|
||||||
|
import android.annotation.NonNull;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.telephony.SubscriptionInfo;
|
import android.telephony.SubscriptionInfo;
|
||||||
@@ -26,11 +27,11 @@ import com.android.settingslib.mobile.TelephonyIcons;
|
|||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
import com.android.systemui.dagger.SysUISingleton;
|
import com.android.systemui.dagger.SysUISingleton;
|
||||||
import com.android.systemui.flags.FeatureFlags;
|
import com.android.systemui.flags.FeatureFlags;
|
||||||
|
import com.android.systemui.statusbar.connectivity.IconState;
|
||||||
|
import com.android.systemui.statusbar.connectivity.MobileDataIndicators;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController;
|
import com.android.systemui.statusbar.connectivity.NetworkController;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.IconState;
|
import com.android.systemui.statusbar.connectivity.SignalCallback;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.MobileDataIndicators;
|
import com.android.systemui.statusbar.connectivity.WifiIndicators;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.WifiIndicators;
|
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkControllerImpl;
|
|
||||||
import com.android.systemui.statusbar.policy.SecurityController;
|
import com.android.systemui.statusbar.policy.SecurityController;
|
||||||
import com.android.systemui.tuner.TunerService;
|
import com.android.systemui.tuner.TunerService;
|
||||||
import com.android.systemui.tuner.TunerService.Tunable;
|
import com.android.systemui.tuner.TunerService.Tunable;
|
||||||
@@ -44,7 +45,7 @@ import javax.inject.Inject;
|
|||||||
|
|
||||||
/** Controls the signal policies for icons shown in the StatusBar. **/
|
/** Controls the signal policies for icons shown in the StatusBar. **/
|
||||||
@SysUISingleton
|
@SysUISingleton
|
||||||
public class StatusBarSignalPolicy implements NetworkControllerImpl.SignalCallback,
|
public class StatusBarSignalPolicy implements SignalCallback,
|
||||||
SecurityController.SecurityControllerCallback, Tunable {
|
SecurityController.SecurityControllerCallback, Tunable {
|
||||||
private static final String TAG = "StatusBarSignalPolicy";
|
private static final String TAG = "StatusBarSignalPolicy";
|
||||||
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
|
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
|
||||||
@@ -169,7 +170,7 @@ public class StatusBarSignalPolicy implements NetworkControllerImpl.SignalCallba
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setWifiIndicators(WifiIndicators indicators) {
|
public void setWifiIndicators(@NonNull WifiIndicators indicators) {
|
||||||
if (DEBUG) {
|
if (DEBUG) {
|
||||||
Log.d(TAG, "setWifiIndicators: " + indicators);
|
Log.d(TAG, "setWifiIndicators: " + indicators);
|
||||||
}
|
}
|
||||||
@@ -219,7 +220,7 @@ public class StatusBarSignalPolicy implements NetworkControllerImpl.SignalCallba
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setCallIndicator(IconState statusIcon, int subId) {
|
public void setCallIndicator(@NonNull IconState statusIcon, int subId) {
|
||||||
if (DEBUG) {
|
if (DEBUG) {
|
||||||
Log.d(TAG, "setCallIndicator: "
|
Log.d(TAG, "setCallIndicator: "
|
||||||
+ "statusIcon = " + statusIcon + ","
|
+ "statusIcon = " + statusIcon + ","
|
||||||
@@ -247,7 +248,7 @@ public class StatusBarSignalPolicy implements NetworkControllerImpl.SignalCallba
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setMobileDataIndicators(MobileDataIndicators indicators) {
|
public void setMobileDataIndicators(@NonNull MobileDataIndicators indicators) {
|
||||||
if (DEBUG) {
|
if (DEBUG) {
|
||||||
Log.d(TAG, "setMobileDataIndicators: " + indicators);
|
Log.d(TAG, "setMobileDataIndicators: " + indicators);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import com.android.internal.R;
|
|||||||
import com.android.systemui.dagger.SysUISingleton;
|
import com.android.systemui.dagger.SysUISingleton;
|
||||||
import com.android.systemui.dagger.qualifiers.Main;
|
import com.android.systemui.dagger.qualifiers.Main;
|
||||||
import com.android.systemui.settings.UserTracker;
|
import com.android.systemui.settings.UserTracker;
|
||||||
|
import com.android.systemui.statusbar.connectivity.AccessPointController;
|
||||||
import com.android.systemui.statusbar.connectivity.AccessPointControllerImpl;
|
import com.android.systemui.statusbar.connectivity.AccessPointControllerImpl;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController;
|
import com.android.systemui.statusbar.connectivity.NetworkController;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkControllerImpl;
|
import com.android.systemui.statusbar.connectivity.NetworkControllerImpl;
|
||||||
@@ -135,7 +136,7 @@ public interface StatusBarPolicyModule {
|
|||||||
|
|
||||||
/** */
|
/** */
|
||||||
@Binds
|
@Binds
|
||||||
NetworkController.AccessPointController provideAccessPointController(
|
AccessPointController provideAccessPointController(
|
||||||
AccessPointControllerImpl accessPointControllerImpl);
|
AccessPointControllerImpl accessPointControllerImpl);
|
||||||
|
|
||||||
/** */
|
/** */
|
||||||
|
|||||||
@@ -39,8 +39,10 @@ import androidx.test.filters.SmallTest;
|
|||||||
import com.android.keyguard.CarrierTextManager;
|
import com.android.keyguard.CarrierTextManager;
|
||||||
import com.android.systemui.flags.FeatureFlags;
|
import com.android.systemui.flags.FeatureFlags;
|
||||||
import com.android.systemui.plugins.ActivityStarter;
|
import com.android.systemui.plugins.ActivityStarter;
|
||||||
|
import com.android.systemui.statusbar.connectivity.IconState;
|
||||||
|
import com.android.systemui.statusbar.connectivity.MobileDataIndicators;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController;
|
import com.android.systemui.statusbar.connectivity.NetworkController;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.MobileDataIndicators;
|
import com.android.systemui.statusbar.connectivity.SignalCallback;
|
||||||
import com.android.systemui.util.CarrierConfigTracker;
|
import com.android.systemui.util.CarrierConfigTracker;
|
||||||
import com.android.systemui.utils.leaks.LeakCheckedTest;
|
import com.android.systemui.utils.leaks.LeakCheckedTest;
|
||||||
import com.android.systemui.utils.os.FakeHandler;
|
import com.android.systemui.utils.os.FakeHandler;
|
||||||
@@ -57,7 +59,7 @@ import org.mockito.MockitoAnnotations;
|
|||||||
public class QSCarrierGroupControllerTest extends LeakCheckedTest {
|
public class QSCarrierGroupControllerTest extends LeakCheckedTest {
|
||||||
|
|
||||||
private QSCarrierGroupController mQSCarrierGroupController;
|
private QSCarrierGroupController mQSCarrierGroupController;
|
||||||
private NetworkController.SignalCallback mSignalCallback;
|
private SignalCallback mSignalCallback;
|
||||||
private CarrierTextManager.CarrierTextCallback mCallback;
|
private CarrierTextManager.CarrierTextCallback mCallback;
|
||||||
@Mock
|
@Mock
|
||||||
private QSCarrierGroup mQSCarrierGroup;
|
private QSCarrierGroup mQSCarrierGroup;
|
||||||
@@ -94,7 +96,7 @@ public class QSCarrierGroupControllerTest extends LeakCheckedTest {
|
|||||||
when(mNetworkController.hasVoiceCallingFeature()).thenReturn(true);
|
when(mNetworkController.hasVoiceCallingFeature()).thenReturn(true);
|
||||||
doAnswer(invocation -> mSignalCallback = invocation.getArgument(0))
|
doAnswer(invocation -> mSignalCallback = invocation.getArgument(0))
|
||||||
.when(mNetworkController)
|
.when(mNetworkController)
|
||||||
.addCallback(any(NetworkController.SignalCallback.class));
|
.addCallback(any(SignalCallback.class));
|
||||||
|
|
||||||
when(mCarrierTextControllerBuilder.setShowAirplaneMode(anyBoolean()))
|
when(mCarrierTextControllerBuilder.setShowAirplaneMode(anyBoolean()))
|
||||||
.thenReturn(mCarrierTextControllerBuilder);
|
.thenReturn(mCarrierTextControllerBuilder);
|
||||||
@@ -230,8 +232,8 @@ public class QSCarrierGroupControllerTest extends LeakCheckedTest {
|
|||||||
mSlotIndexResolver.overrideInvalid = true;
|
mSlotIndexResolver.overrideInvalid = true;
|
||||||
|
|
||||||
MobileDataIndicators indicators = new MobileDataIndicators(
|
MobileDataIndicators indicators = new MobileDataIndicators(
|
||||||
mock(NetworkController.IconState.class),
|
mock(IconState.class),
|
||||||
mock(NetworkController.IconState.class),
|
mock(IconState.class),
|
||||||
0, 0, true, true, "", "", "", 0, true, true);
|
0, 0, true, true, "", "", "", 0, true, true);
|
||||||
mSignalCallback.setMobileDataIndicators(indicators);
|
mSignalCallback.setMobileDataIndicators(indicators);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,8 +43,10 @@ import com.android.systemui.plugins.ActivityStarter;
|
|||||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||||
import com.android.systemui.qs.QSTileHost;
|
import com.android.systemui.qs.QSTileHost;
|
||||||
import com.android.systemui.qs.logging.QSLogger;
|
import com.android.systemui.qs.logging.QSLogger;
|
||||||
|
import com.android.systemui.statusbar.connectivity.IconState;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController;
|
import com.android.systemui.statusbar.connectivity.NetworkController;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.WifiIndicators;
|
import com.android.systemui.statusbar.connectivity.SignalCallback;
|
||||||
|
import com.android.systemui.statusbar.connectivity.WifiIndicators;
|
||||||
import com.android.systemui.statusbar.policy.CastController;
|
import com.android.systemui.statusbar.policy.CastController;
|
||||||
import com.android.systemui.statusbar.policy.CastController.CastDevice;
|
import com.android.systemui.statusbar.policy.CastController.CastDevice;
|
||||||
import com.android.systemui.statusbar.policy.HotspotController;
|
import com.android.systemui.statusbar.policy.HotspotController;
|
||||||
@@ -77,7 +79,7 @@ public class CastTileTest extends SysuiTestCase {
|
|||||||
@Mock
|
@Mock
|
||||||
private QSTileHost mHost;
|
private QSTileHost mHost;
|
||||||
@Mock
|
@Mock
|
||||||
NetworkController.SignalCallback mSignalCallback;
|
SignalCallback mSignalCallback;
|
||||||
@Mock
|
@Mock
|
||||||
private MetricsLogger mMetricsLogger;
|
private MetricsLogger mMetricsLogger;
|
||||||
@Mock
|
@Mock
|
||||||
@@ -122,8 +124,8 @@ public class CastTileTest extends SysuiTestCase {
|
|||||||
mTestableLooper.processAllMessages();
|
mTestableLooper.processAllMessages();
|
||||||
|
|
||||||
mCastTile.handleSetListening(true);
|
mCastTile.handleSetListening(true);
|
||||||
ArgumentCaptor<NetworkController.SignalCallback> signalCallbackArgumentCaptor =
|
ArgumentCaptor<SignalCallback> signalCallbackArgumentCaptor =
|
||||||
ArgumentCaptor.forClass(NetworkController.SignalCallback.class);
|
ArgumentCaptor.forClass(SignalCallback.class);
|
||||||
verify(mNetworkController).observe(any(LifecycleOwner.class),
|
verify(mNetworkController).observe(any(LifecycleOwner.class),
|
||||||
signalCallbackArgumentCaptor.capture());
|
signalCallbackArgumentCaptor.capture());
|
||||||
mSignalCallback = signalCallbackArgumentCaptor.getValue();
|
mSignalCallback = signalCallbackArgumentCaptor.getValue();
|
||||||
@@ -139,10 +141,9 @@ public class CastTileTest extends SysuiTestCase {
|
|||||||
// All these tests for enabled/disabled wifi have hotspot not enabled
|
// All these tests for enabled/disabled wifi have hotspot not enabled
|
||||||
@Test
|
@Test
|
||||||
public void testStateUnavailable_wifiDisabled() {
|
public void testStateUnavailable_wifiDisabled() {
|
||||||
NetworkController.IconState qsIcon =
|
IconState qsIcon = new IconState(false, 0, "");
|
||||||
new NetworkController.IconState(false, 0, "");
|
|
||||||
WifiIndicators indicators = new WifiIndicators(
|
WifiIndicators indicators = new WifiIndicators(
|
||||||
false, mock(NetworkController.IconState.class),
|
false, mock(IconState.class),
|
||||||
qsIcon, false,false, "",
|
qsIcon, false,false, "",
|
||||||
false, "");
|
false, "");
|
||||||
mSignalCallback.setWifiIndicators(indicators);
|
mSignalCallback.setWifiIndicators(indicators);
|
||||||
@@ -153,10 +154,9 @@ public class CastTileTest extends SysuiTestCase {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testStateUnavailable_wifiNotConnected() {
|
public void testStateUnavailable_wifiNotConnected() {
|
||||||
NetworkController.IconState qsIcon =
|
IconState qsIcon = new IconState(false, 0, "");
|
||||||
new NetworkController.IconState(false, 0, "");
|
|
||||||
WifiIndicators indicators = new WifiIndicators(
|
WifiIndicators indicators = new WifiIndicators(
|
||||||
true, mock(NetworkController.IconState.class),
|
true, mock(IconState.class),
|
||||||
qsIcon, false,false, "",
|
qsIcon, false,false, "",
|
||||||
false, "");
|
false, "");
|
||||||
mSignalCallback.setWifiIndicators(indicators);
|
mSignalCallback.setWifiIndicators(indicators);
|
||||||
@@ -166,10 +166,9 @@ public class CastTileTest extends SysuiTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void enableWifiAndProcessMessages() {
|
private void enableWifiAndProcessMessages() {
|
||||||
NetworkController.IconState qsIcon =
|
IconState qsIcon = new IconState(true, 0, "");
|
||||||
new NetworkController.IconState(true, 0, "");
|
|
||||||
WifiIndicators indicators = new WifiIndicators(
|
WifiIndicators indicators = new WifiIndicators(
|
||||||
true, mock(NetworkController.IconState.class),
|
true, mock(IconState.class),
|
||||||
qsIcon, false,false, "",
|
qsIcon, false,false, "",
|
||||||
false, "");
|
false, "");
|
||||||
mSignalCallback.setWifiIndicators(indicators);
|
mSignalCallback.setWifiIndicators(indicators);
|
||||||
|
|||||||
@@ -49,8 +49,7 @@ import com.android.systemui.animation.DialogLaunchAnimator;
|
|||||||
import com.android.systemui.broadcast.BroadcastDispatcher;
|
import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||||
import com.android.systemui.dagger.qualifiers.Main;
|
import com.android.systemui.dagger.qualifiers.Main;
|
||||||
import com.android.systemui.plugins.ActivityStarter;
|
import com.android.systemui.plugins.ActivityStarter;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController;
|
import com.android.systemui.statusbar.connectivity.AccessPointController;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.AccessPointController;
|
|
||||||
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
||||||
import com.android.systemui.statusbar.policy.LocationController;
|
import com.android.systemui.statusbar.policy.LocationController;
|
||||||
import com.android.systemui.toast.SystemUIToast;
|
import com.android.systemui.toast.SystemUIToast;
|
||||||
@@ -104,7 +103,7 @@ public class InternetDialogControllerTest extends SysuiTestCase {
|
|||||||
@Mock
|
@Mock
|
||||||
private KeyguardStateController mKeyguardStateController;
|
private KeyguardStateController mKeyguardStateController;
|
||||||
@Mock
|
@Mock
|
||||||
private NetworkController.AccessPointController mAccessPointController;
|
private AccessPointController mAccessPointController;
|
||||||
@Mock
|
@Mock
|
||||||
private WifiEntry mConnectedEntry;
|
private WifiEntry mConnectedEntry;
|
||||||
@Mock
|
@Mock
|
||||||
|
|||||||
@@ -56,9 +56,9 @@ class AccessPointControllerImplTest : SysuiTestCase() {
|
|||||||
@Mock
|
@Mock
|
||||||
private lateinit var wifiPickerTracker: WifiPickerTracker
|
private lateinit var wifiPickerTracker: WifiPickerTracker
|
||||||
@Mock
|
@Mock
|
||||||
private lateinit var callback: NetworkController.AccessPointController.AccessPointCallback
|
private lateinit var callback: AccessPointController.AccessPointCallback
|
||||||
@Mock
|
@Mock
|
||||||
private lateinit var otherCallback: NetworkController.AccessPointController.AccessPointCallback
|
private lateinit var otherCallback: AccessPointController.AccessPointCallback
|
||||||
@Mock
|
@Mock
|
||||||
private lateinit var wifiEntryConnected: WifiEntry
|
private lateinit var wifiEntryConnected: WifiEntry
|
||||||
@Mock
|
@Mock
|
||||||
|
|||||||
@@ -29,10 +29,6 @@ import androidx.test.runner.AndroidJUnit4;
|
|||||||
import com.android.settingslib.mobile.TelephonyIcons;
|
import com.android.settingslib.mobile.TelephonyIcons;
|
||||||
import com.android.systemui.SysuiTestCase;
|
import com.android.systemui.SysuiTestCase;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.EmergencyListener;
|
import com.android.systemui.statusbar.connectivity.NetworkController.EmergencyListener;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.IconState;
|
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.MobileDataIndicators;
|
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.SignalCallback;
|
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.WifiIndicators;
|
|
||||||
import com.android.systemui.tests.R;
|
import com.android.systemui.tests.R;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
|
|||||||
@@ -14,22 +14,26 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.android.settingslib;
|
package com.android.systemui.statusbar.connectivity;
|
||||||
|
|
||||||
import static junit.framework.Assert.assertFalse;
|
import static junit.framework.Assert.assertFalse;
|
||||||
import static junit.framework.Assert.assertTrue;
|
import static junit.framework.Assert.assertTrue;
|
||||||
|
|
||||||
|
import android.test.suitebuilder.annotation.SmallTest;
|
||||||
|
import android.testing.AndroidTestingRunner;
|
||||||
|
|
||||||
import com.android.settingslib.mobile.TelephonyIcons;
|
import com.android.settingslib.mobile.TelephonyIcons;
|
||||||
|
import com.android.systemui.SysuiTestCase;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.robolectric.RobolectricTestRunner;
|
|
||||||
|
|
||||||
@RunWith(RobolectricTestRunner.class)
|
@SmallTest
|
||||||
public class MobileStateTest {
|
@RunWith(AndroidTestingRunner.class)
|
||||||
|
public class MobileStateTest extends SysuiTestCase {
|
||||||
|
|
||||||
private SignalIcon.MobileState mState = new SignalIcon.MobileState();
|
private final MobileState mState = new MobileState();
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
@@ -72,9 +72,6 @@ import com.android.systemui.broadcast.BroadcastDispatcher;
|
|||||||
import com.android.systemui.demomode.DemoModeController;
|
import com.android.systemui.demomode.DemoModeController;
|
||||||
import com.android.systemui.dump.DumpManager;
|
import com.android.systemui.dump.DumpManager;
|
||||||
import com.android.systemui.flags.FeatureFlags;
|
import com.android.systemui.flags.FeatureFlags;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.IconState;
|
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.MobileDataIndicators;
|
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.SignalCallback;
|
|
||||||
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
|
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
|
||||||
import com.android.systemui.statusbar.policy.DeviceProvisionedController.DeviceProvisionedListener;
|
import com.android.systemui.statusbar.policy.DeviceProvisionedController.DeviceProvisionedListener;
|
||||||
import com.android.systemui.telephony.TelephonyListenerManager;
|
import com.android.systemui.telephony.TelephonyListenerManager;
|
||||||
|
|||||||
@@ -23,8 +23,6 @@ import android.test.suitebuilder.annotation.SmallTest;
|
|||||||
import android.testing.AndroidTestingRunner;
|
import android.testing.AndroidTestingRunner;
|
||||||
import android.testing.TestableLooper.RunWithLooper;
|
import android.testing.TestableLooper.RunWithLooper;
|
||||||
|
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.IconState;
|
|
||||||
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.mockito.ArgumentCaptor;
|
import org.mockito.ArgumentCaptor;
|
||||||
|
|||||||
@@ -36,7 +36,6 @@ import android.testing.AndroidTestingRunner;
|
|||||||
import android.testing.TestableLooper.RunWithLooper;
|
import android.testing.TestableLooper.RunWithLooper;
|
||||||
|
|
||||||
import com.android.settingslib.mobile.TelephonyIcons;
|
import com.android.settingslib.mobile.TelephonyIcons;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.WifiIndicators;
|
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|||||||
@@ -18,8 +18,9 @@ import android.os.Bundle;
|
|||||||
import android.testing.LeakCheck;
|
import android.testing.LeakCheck;
|
||||||
|
|
||||||
import com.android.settingslib.net.DataUsageController;
|
import com.android.settingslib.net.DataUsageController;
|
||||||
|
import com.android.systemui.statusbar.connectivity.AccessPointController;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController;
|
import com.android.systemui.statusbar.connectivity.NetworkController;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController.SignalCallback;
|
import com.android.systemui.statusbar.connectivity.SignalCallback;
|
||||||
import com.android.systemui.statusbar.policy.DataSaverController;
|
import com.android.systemui.statusbar.policy.DataSaverController;
|
||||||
|
|
||||||
public class FakeNetworkController extends BaseLeakChecker<SignalCallback>
|
public class FakeNetworkController extends BaseLeakChecker<SignalCallback>
|
||||||
|
|||||||
Reference in New Issue
Block a user