Merge changes from topic "sysui-networking-refactor" into sc-v2-dev
* changes: Remove instance fields from MobileSignalController Re-internalize MobileState and State from SettingsLib Move interfaces out of NetworkController
This commit is contained in:
@@ -15,13 +15,8 @@
|
||||
*/
|
||||
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 {
|
||||
|
||||
@@ -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.
|
||||
*/
|
||||
@@ -189,110 +98,4 @@ public class SignalIcon {
|
||||
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 android.annotation.MainThread;
|
||||
import android.annotation.NonNull;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
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.flags.FeatureFlags;
|
||||
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.MobileDataIndicators;
|
||||
import com.android.systemui.statusbar.connectivity.SignalCallback;
|
||||
import com.android.systemui.util.CarrierConfigTracker;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
@@ -81,10 +84,9 @@ public class QSCarrierGroupController {
|
||||
|
||||
private final SlotIndexResolver mSlotIndexResolver;
|
||||
|
||||
private final NetworkController.SignalCallback mSignalCallback =
|
||||
new NetworkController.SignalCallback() {
|
||||
private final SignalCallback mSignalCallback = new SignalCallback() {
|
||||
@Override
|
||||
public void setMobileDataIndicators(MobileDataIndicators indicators) {
|
||||
public void setMobileDataIndicators(@NonNull MobileDataIndicators indicators) {
|
||||
if (mProviderModel) {
|
||||
return;
|
||||
}
|
||||
@@ -109,7 +111,7 @@ public class QSCarrierGroupController {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCallIndicator(NetworkController.IconState statusIcon, int subId) {
|
||||
public void setCallIndicator(@NonNull IconState statusIcon, int subId) {
|
||||
if (!mProviderModel) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ package com.android.systemui.qs.tiles;
|
||||
|
||||
import static android.media.MediaRouter.ROUTE_TYPE_REMOTE_DISPLAY;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
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.tileimpl.QSTileImpl;
|
||||
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.policy.CastController;
|
||||
import com.android.systemui.statusbar.policy.CastController.CastDevice;
|
||||
@@ -273,10 +275,9 @@ public class CastTile extends QSTileImpl<BooleanState> {
|
||||
return mWifiConnected || mHotspotConnected;
|
||||
}
|
||||
|
||||
private final NetworkController.SignalCallback mSignalCallback =
|
||||
new NetworkController.SignalCallback() {
|
||||
private final SignalCallback mSignalCallback = new SignalCallback() {
|
||||
@Override
|
||||
public void setWifiIndicators(WifiIndicators indicators) {
|
||||
public void setWifiIndicators(@NonNull WifiIndicators indicators) {
|
||||
// statusIcon.visible has the connected status information
|
||||
boolean enabledAndConnected = indicators.enabled
|
||||
&& (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 android.annotation.NonNull;
|
||||
import android.app.AlertDialog;
|
||||
import android.app.AlertDialog.Builder;
|
||||
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.logging.QSLogger;
|
||||
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.IconState;
|
||||
import com.android.systemui.statusbar.connectivity.NetworkController.MobileDataIndicators;
|
||||
import com.android.systemui.statusbar.connectivity.NetworkController.SignalCallback;
|
||||
import com.android.systemui.statusbar.connectivity.SignalCallback;
|
||||
import com.android.systemui.statusbar.phone.SystemUIDialog;
|
||||
|
||||
import javax.inject.Inject;
|
||||
@@ -269,7 +270,7 @@ public class CellularTile extends QSTileImpl<SignalState> {
|
||||
private final CallbackInfo mInfo = new CallbackInfo();
|
||||
|
||||
@Override
|
||||
public void setMobileDataIndicators(MobileDataIndicators indicators) {
|
||||
public void setMobileDataIndicators(@NonNull MobileDataIndicators indicators) {
|
||||
if (indicators.qsIcon == null) {
|
||||
// Not data sim, don't display.
|
||||
return;
|
||||
@@ -291,7 +292,7 @@ public class CellularTile extends QSTileImpl<SignalState> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setIsAirplaneMode(IconState icon) {
|
||||
public void setIsAirplaneMode(@NonNull IconState icon) {
|
||||
mInfo.airplaneModeEnabled = icon.visible;
|
||||
refreshState(mInfo);
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package com.android.systemui.qs.tiles;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
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.tileimpl.QSTileImpl;
|
||||
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.AccessPointController;
|
||||
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.SignalCallback;
|
||||
import com.android.systemui.statusbar.connectivity.WifiIcons;
|
||||
import com.android.systemui.statusbar.connectivity.WifiIndicators;
|
||||
|
||||
import java.io.FileDescriptor;
|
||||
import java.io.PrintWriter;
|
||||
@@ -250,7 +251,7 @@ public class InternetTile extends QSTileImpl<SignalState> {
|
||||
|
||||
|
||||
@Override
|
||||
public void setWifiIndicators(WifiIndicators indicators) {
|
||||
public void setWifiIndicators(@NonNull WifiIndicators indicators) {
|
||||
if (DEBUG) {
|
||||
Log.d(TAG, "setWifiIndicators: " + indicators);
|
||||
}
|
||||
@@ -271,7 +272,7 @@ public class InternetTile extends QSTileImpl<SignalState> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setMobileDataIndicators(MobileDataIndicators indicators) {
|
||||
public void setMobileDataIndicators(@NonNull MobileDataIndicators indicators) {
|
||||
if (DEBUG) {
|
||||
Log.d(TAG, "setMobileDataIndicators: " + indicators);
|
||||
}
|
||||
@@ -293,7 +294,7 @@ public class InternetTile extends QSTileImpl<SignalState> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setEthernetIndicators(IconState icon) {
|
||||
public void setEthernetIndicators(@NonNull IconState icon) {
|
||||
if (DEBUG) {
|
||||
Log.d(TAG, "setEthernetIndicators: "
|
||||
+ "icon = " + (icon == null ? "" : icon.toString()));
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package com.android.systemui.qs.tiles;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
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.tileimpl.QSIconViewImpl;
|
||||
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.AccessPointController;
|
||||
import com.android.systemui.statusbar.connectivity.NetworkController.SignalCallback;
|
||||
import com.android.systemui.statusbar.connectivity.NetworkController.WifiIndicators;
|
||||
import com.android.systemui.statusbar.connectivity.SignalCallback;
|
||||
import com.android.systemui.statusbar.connectivity.WifiIcons;
|
||||
import com.android.systemui.statusbar.connectivity.WifiIndicators;
|
||||
import com.android.wifitrackerlib.WifiEntry;
|
||||
|
||||
import java.util.List;
|
||||
@@ -310,7 +311,7 @@ public class WifiTile extends QSTileImpl<SignalState> {
|
||||
final CallbackInfo mInfo = new CallbackInfo();
|
||||
|
||||
@Override
|
||||
public void setWifiIndicators(WifiIndicators indicators) {
|
||||
public void setWifiIndicators(@NonNull WifiIndicators indicators) {
|
||||
if (DEBUG) Log.d(TAG, "onWifiSignalChanged enabled=" + indicators.enabled);
|
||||
if (indicators.qsIcon == null) {
|
||||
return;
|
||||
@@ -332,7 +333,7 @@ public class WifiTile extends QSTileImpl<SignalState> {
|
||||
}
|
||||
|
||||
protected class WifiDetailAdapter implements DetailAdapter,
|
||||
NetworkController.AccessPointController.AccessPointCallback, QSDetailItems.Callback {
|
||||
AccessPointController.AccessPointCallback, QSDetailItems.Callback {
|
||||
|
||||
private QSDetailItems mItems;
|
||||
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.Main;
|
||||
import com.android.systemui.plugins.ActivityStarter;
|
||||
import com.android.systemui.statusbar.connectivity.NetworkController;
|
||||
import com.android.systemui.statusbar.connectivity.NetworkController.AccessPointController;
|
||||
import com.android.systemui.statusbar.connectivity.AccessPointController;
|
||||
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
||||
import com.android.systemui.statusbar.policy.LocationController;
|
||||
import com.android.systemui.toast.SystemUIToast;
|
||||
@@ -100,7 +99,7 @@ import java.util.stream.Stream;
|
||||
import javax.inject.Inject;
|
||||
|
||||
public class InternetDialogController implements WifiEntry.DisconnectCallback,
|
||||
NetworkController.AccessPointController.AccessPointCallback {
|
||||
AccessPointController.AccessPointCallback {
|
||||
|
||||
private static final String TAG = "InternetDialogController";
|
||||
private static final String ACTION_NETWORK_PROVIDER_SETTINGS =
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package com.android.systemui.statusbar;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.os.Bundle;
|
||||
import android.telephony.ServiceState;
|
||||
import android.telephony.SubscriptionInfo;
|
||||
@@ -26,7 +27,9 @@ import com.android.keyguard.KeyguardUpdateMonitor;
|
||||
import com.android.keyguard.KeyguardUpdateMonitorCallback;
|
||||
import com.android.systemui.demomode.DemoModeCommandReceiver;
|
||||
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.SignalCallback;
|
||||
import com.android.systemui.tuner.TunerService;
|
||||
import com.android.systemui.util.ViewController;
|
||||
|
||||
@@ -135,10 +138,9 @@ public class OperatorNameViewController extends ViewController<OperatorNameView>
|
||||
(area, darkIntensity, tint) ->
|
||||
mView.setTextColor(DarkIconDispatcher.getTint(area, mView, tint));
|
||||
|
||||
private final NetworkController.SignalCallback mSignalCallback =
|
||||
new NetworkController.SignalCallback() {
|
||||
private final SignalCallback mSignalCallback = new SignalCallback() {
|
||||
@Override
|
||||
public void setIsAirplaneMode(NetworkController.IconState icon) {
|
||||
public void setIsAirplaneMode(@NonNull IconState icon) {
|
||||
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;
|
||||
|
||||
/** */
|
||||
public class AccessPointControllerImpl
|
||||
implements NetworkController.AccessPointController,
|
||||
WifiPickerTracker.WifiPickerTrackerCallback, LifecycleOwner {
|
||||
public class AccessPointControllerImpl implements AccessPointController,
|
||||
WifiPickerTracker.WifiPickerTrackerCallback,
|
||||
LifecycleOwner {
|
||||
private static final String TAG = "AccessPointController";
|
||||
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
|
||||
|
||||
@@ -117,13 +117,11 @@ public class AccessPointControllerImpl
|
||||
super.finalize();
|
||||
}
|
||||
|
||||
/** */
|
||||
public boolean canConfigWifi() {
|
||||
return !mUserManager.hasUserRestriction(UserManager.DISALLOW_CONFIG_WIFI,
|
||||
new UserHandle(mCurrentUser));
|
||||
}
|
||||
|
||||
/** */
|
||||
public boolean canConfigMobileData() {
|
||||
return !mUserManager.hasUserRestriction(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS,
|
||||
UserHandle.of(mCurrentUser)) && mUserTracker.getUserInfo().isAdmin();
|
||||
@@ -156,7 +154,7 @@ public class AccessPointControllerImpl
|
||||
@Override
|
||||
public void scanForAccessPoints() {
|
||||
if (mWifiPickerTracker == null) {
|
||||
fireAcccessPointsCallback(Collections.emptyList());
|
||||
fireAccessPointsCallback(Collections.emptyList());
|
||||
return;
|
||||
}
|
||||
List<WifiEntry> entries = mWifiPickerTracker.getWifiEntries();
|
||||
@@ -164,13 +162,13 @@ public class AccessPointControllerImpl
|
||||
if (connectedEntry != null) {
|
||||
entries.add(0, connectedEntry);
|
||||
}
|
||||
fireAcccessPointsCallback(entries);
|
||||
fireAccessPointsCallback(entries);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MergedCarrierEntry getMergedCarrierEntry() {
|
||||
if (mWifiPickerTracker == null) {
|
||||
fireAcccessPointsCallback(Collections.emptyList());
|
||||
fireAccessPointsCallback(Collections.emptyList());
|
||||
return null;
|
||||
}
|
||||
return mWifiPickerTracker.getMergedCarrierEntry();
|
||||
@@ -190,7 +188,7 @@ public class AccessPointControllerImpl
|
||||
* @param ap
|
||||
* @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 (DEBUG) {
|
||||
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) {
|
||||
callback.onAccessPointsChanged(aps);
|
||||
}
|
||||
|
||||
@@ -23,10 +23,6 @@ import android.telephony.SubscriptionInfo;
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
import com.android.systemui.dagger.qualifiers.Main;
|
||||
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.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.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;
|
||||
|
||||
/** */
|
||||
public class EthernetSignalController extends
|
||||
SignalController<State, IconGroup> {
|
||||
SignalController<ConnectivityState, IconGroup> {
|
||||
|
||||
public EthernetSignalController(Context context,
|
||||
CallbackHandler callbackHandler, NetworkControllerImpl networkController) {
|
||||
@@ -68,7 +65,7 @@ public class EthernetSignalController extends
|
||||
}
|
||||
|
||||
@Override
|
||||
public State cleanState() {
|
||||
return new State();
|
||||
public ConnectivityState cleanState() {
|
||||
return new ConnectivityState();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,7 +33,6 @@ import android.telephony.ServiceState;
|
||||
import android.telephony.SignalStrength;
|
||||
import android.telephony.SubscriptionInfo;
|
||||
import android.telephony.SubscriptionManager;
|
||||
import android.telephony.TelephonyDisplayInfo;
|
||||
import android.telephony.TelephonyManager;
|
||||
import android.telephony.ims.ImsException;
|
||||
import android.telephony.ims.ImsMmTelManager;
|
||||
@@ -47,8 +46,6 @@ import android.util.Log;
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
import com.android.settingslib.AccessibilityContentDescriptions;
|
||||
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.mobile.MobileMappings.Config;
|
||||
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.systemui.R;
|
||||
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 java.io.PrintWriter;
|
||||
@@ -93,15 +87,6 @@ public class MobileSignalController extends SignalController<MobileState, Mobile
|
||||
final SubscriptionInfo mSubscriptionInfo;
|
||||
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 MobileIconGroup mDefaultIcons;
|
||||
private Config mConfig;
|
||||
@@ -468,16 +453,8 @@ public class MobileSignalController extends SignalController<MobileState, Mobile
|
||||
return new MobileState();
|
||||
}
|
||||
|
||||
private boolean isCdma() {
|
||||
return (mSignalStrength != null) && !mSignalStrength.isGsm();
|
||||
}
|
||||
|
||||
public boolean isEmergencyOnly() {
|
||||
return (mServiceState != null && mServiceState.isEmergencyOnly());
|
||||
}
|
||||
|
||||
public boolean isInService() {
|
||||
return Utils.isInService(mServiceState);
|
||||
return mCurrentState.isInService();
|
||||
}
|
||||
|
||||
String getNetworkNameForCarrierWiFi() {
|
||||
@@ -485,15 +462,15 @@ public class MobileSignalController extends SignalController<MobileState, Mobile
|
||||
}
|
||||
|
||||
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()) {
|
||||
return false;
|
||||
}
|
||||
if (isCdma()) {
|
||||
if (mCurrentState.isCdma()) {
|
||||
return mPhone.getCdmaEnhancedRoamingIndicatorDisplayNumber()
|
||||
!= TelephonyManager.ERI_OFF;
|
||||
} 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) {
|
||||
mCurrentState.activityIn = mobileStatus.activityIn;
|
||||
mCurrentState.activityOut = mobileStatus.activityOut;
|
||||
mCurrentState.dataSim = mobileStatus.dataSim;
|
||||
mCurrentState.carrierNetworkChangeMode = mobileStatus.carrierNetworkChangeMode;
|
||||
mDataState = mobileStatus.dataState;
|
||||
int lastVoiceState = mCurrentState.getVoiceServiceState();
|
||||
mCurrentState.setFromMobileStatus(mobileStatus);
|
||||
|
||||
notifyMobileLevelChangeIfNecessary(mobileStatus.signalStrength);
|
||||
mSignalStrength = mobileStatus.signalStrength;
|
||||
mTelephonyDisplayInfo = mobileStatus.telephonyDisplayInfo;
|
||||
int lastVoiceState = mServiceState != null ? mServiceState.getState() : -1;
|
||||
mServiceState = mobileStatus.serviceState;
|
||||
int currentVoiceState = mServiceState != null ? mServiceState.getState() : -1;
|
||||
if (mProviderModelBehavior) {
|
||||
maybeNotifyCallStateChanged(lastVoiceState);
|
||||
}
|
||||
}
|
||||
|
||||
/** 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
|
||||
// 1. The first valid voice state has been received
|
||||
// 2. The voice state has been changed and either the last or current state is
|
||||
// ServiceState.STATE_IN_SERVICE
|
||||
if (mProviderModelBehavior
|
||||
&& lastVoiceState != currentVoiceState
|
||||
&& (lastVoiceState == -1
|
||||
|| (lastVoiceState == ServiceState.STATE_IN_SERVICE
|
||||
|| currentVoiceState == ServiceState.STATE_IN_SERVICE))) {
|
||||
boolean isNoCalling = currentVoiceState != ServiceState.STATE_IN_SERVICE;
|
||||
if (lastVoiceState == -1
|
||||
|| (lastVoiceState == ServiceState.STATE_IN_SERVICE
|
||||
|| currentVoiceState == ServiceState.STATE_IN_SERVICE)) {
|
||||
boolean isNoCalling = mCurrentState.isNoCalling();
|
||||
isNoCalling &= !hideNoCalling();
|
||||
IconState statusIcon = new IconState(isNoCalling,
|
||||
R.drawable.ic_qs_no_calling_sms,
|
||||
@@ -615,7 +594,7 @@ public class MobileSignalController extends SignalController<MobileState, Mobile
|
||||
}
|
||||
|
||||
void updateNoCallingState() {
|
||||
int currentVoiceState = mServiceState != null ? mServiceState.getState() : -1;
|
||||
int currentVoiceState = mCurrentState.getVoiceServiceState();
|
||||
boolean isNoCalling = currentVoiceState != ServiceState.STATE_IN_SERVICE;
|
||||
isNoCalling &= !hideNoCalling();
|
||||
IconState statusIcon = new IconState(isNoCalling,
|
||||
@@ -643,8 +622,7 @@ public class MobileSignalController extends SignalController<MobileState, Mobile
|
||||
}
|
||||
|
||||
void refreshCallIndicator(SignalCallback callback) {
|
||||
boolean isNoCalling = mServiceState != null
|
||||
&& mServiceState.getState() != ServiceState.STATE_IN_SERVICE;
|
||||
boolean isNoCalling = mCurrentState.isNoCalling();
|
||||
isNoCalling &= !hideNoCalling();
|
||||
IconState statusIcon = new IconState(isNoCalling,
|
||||
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,
|
||||
* mTelephonyDisplayInfo, and mSimState. It should be called any time one of these is updated.
|
||||
* Updates the current state based on ServiceState, SignalStrength, DataState,
|
||||
* TelephonyDisplayInfo, and sim state. It should be called any time one of these is updated.
|
||||
* This will call listeners if necessary.
|
||||
*/
|
||||
private void updateTelephony() {
|
||||
if (Log.isLoggable(mTag, Log.DEBUG)) {
|
||||
Log.d(mTag, "updateTelephonySignalStrength: hasService="
|
||||
+ Utils.isInService(mServiceState) + " ss=" + mSignalStrength
|
||||
+ " displayInfo=" + mTelephonyDisplayInfo);
|
||||
+ mCurrentState.isInService()
|
||||
+ " ss=" + mCurrentState.signalStrength
|
||||
+ " displayInfo=" + mCurrentState.telephonyDisplayInfo);
|
||||
}
|
||||
checkDefaultData();
|
||||
mCurrentState.connected = Utils.isInService(mServiceState) && mSignalStrength != null;
|
||||
mCurrentState.connected = mCurrentState.isInService();
|
||||
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) {
|
||||
mCurrentState.iconGroup = mNetworkToIconLookup.get(iconKey);
|
||||
} else {
|
||||
mCurrentState.iconGroup = mDefaultIcons;
|
||||
}
|
||||
mCurrentState.dataConnected = mCurrentState.connected
|
||||
&& mDataState == TelephonyManager.DATA_CONNECTED;
|
||||
mCurrentState.dataConnected = mCurrentState.isDataConnected();
|
||||
|
||||
mCurrentState.roaming = isRoaming();
|
||||
if (isCarrierNetworkChangeActive()) {
|
||||
@@ -771,20 +749,20 @@ public class MobileSignalController extends SignalController<MobileState, Mobile
|
||||
mCurrentState.iconGroup = TelephonyIcons.DATA_DISABLED;
|
||||
}
|
||||
}
|
||||
if (isEmergencyOnly() != mCurrentState.isEmergency) {
|
||||
mCurrentState.isEmergency = isEmergencyOnly();
|
||||
if (mCurrentState.isEmergencyOnly() != mCurrentState.isEmergency) {
|
||||
mCurrentState.isEmergency = mCurrentState.isEmergencyOnly();
|
||||
mNetworkController.recalculateEmergency();
|
||||
}
|
||||
// Fill in the network name if we think we have it.
|
||||
if (mCurrentState.networkName.equals(mNetworkNameDefault) && mServiceState != null
|
||||
&& !TextUtils.isEmpty(mServiceState.getOperatorAlphaShort())) {
|
||||
mCurrentState.networkName = mServiceState.getOperatorAlphaShort();
|
||||
if (mCurrentState.networkName.equals(mNetworkNameDefault)
|
||||
&& !TextUtils.isEmpty(mCurrentState.getOperatorAlphaShort())) {
|
||||
mCurrentState.networkName = mCurrentState.getOperatorAlphaShort();
|
||||
}
|
||||
// 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
|
||||
&& !TextUtils.isEmpty(mServiceState.getOperatorAlphaShort())) {
|
||||
mCurrentState.networkNameData = mServiceState.getOperatorAlphaShort();
|
||||
&& !TextUtils.isEmpty(mCurrentState.getOperatorAlphaShort())) {
|
||||
mCurrentState.networkNameData = mCurrentState.getOperatorAlphaShort();
|
||||
}
|
||||
|
||||
notifyListenersIfNecessary();
|
||||
@@ -836,10 +814,6 @@ public class MobileSignalController extends SignalController<MobileState, Mobile
|
||||
pw.println(" mSubscription=" + mSubscriptionInfo + ",");
|
||||
pw.println(" mProviderModelSetting=" + mProviderModelSetting + ",");
|
||||
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(" isDataDisabled=" + isDataDisabled() + ",");
|
||||
pw.println(" mNetworkToIconLookup=" + mNetworkToIconLookup + ",");
|
||||
@@ -884,5 +858,4 @@ public class MobileSignalController extends SignalController<MobileState, Mobile
|
||||
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;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.telephony.SubscriptionInfo;
|
||||
|
||||
import com.android.settingslib.net.DataUsageController;
|
||||
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.DataSaverController;
|
||||
import com.android.wifitrackerlib.MergedCarrierEntry;
|
||||
import com.android.wifitrackerlib.WifiEntry;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/** */
|
||||
public interface NetworkController extends CallbackController<SignalCallback>, DemoMode {
|
||||
@@ -62,197 +53,8 @@ public interface NetworkController extends CallbackController<SignalCallback>, D
|
||||
/** */
|
||||
boolean isRadioOn();
|
||||
|
||||
/**
|
||||
* Wrapper class for all the WiFi signals used for WiFi indicators.
|
||||
*/
|
||||
final class WifiIndicators {
|
||||
public boolean enabled;
|
||||
public IconState statusIcon;
|
||||
public IconState qsIcon;
|
||||
public boolean activityIn;
|
||||
public boolean activityOut;
|
||||
public String description;
|
||||
public boolean isTransient;
|
||||
public String statusLabel;
|
||||
|
||||
public WifiIndicators(boolean enabled, IconState statusIcon, IconState qsIcon,
|
||||
boolean activityIn, boolean activityOut, String description,
|
||||
boolean isTransient, String statusLabel) {
|
||||
this.enabled = enabled;
|
||||
this.statusIcon = statusIcon;
|
||||
this.qsIcon = qsIcon;
|
||||
this.activityIn = activityIn;
|
||||
this.activityOut = activityOut;
|
||||
this.description = description;
|
||||
this.isTransient = isTransient;
|
||||
this.statusLabel = statusLabel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return new StringBuilder("WifiIndicators[")
|
||||
.append("enabled=").append(enabled)
|
||||
.append(",statusIcon=").append(statusIcon == null ? "" : statusIcon.toString())
|
||||
.append(",qsIcon=").append(qsIcon == null ? "" : qsIcon.toString())
|
||||
.append(",activityIn=").append(activityIn)
|
||||
.append(",activityOut=").append(activityOut)
|
||||
.append(",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 {
|
||||
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
|
||||
public void addCallback(@NonNull SignalCallback cb) {
|
||||
cb.setSubs(mCurrentSubscriptions);
|
||||
cb.setIsAirplaneMode(new IconState(mAirplaneMode,
|
||||
TelephonyIcons.FLIGHT_MODE_ICON, R.string.accessibility_airplane_mode, mContext));
|
||||
cb.setIsAirplaneMode(
|
||||
new IconState(
|
||||
mAirplaneMode,
|
||||
TelephonyIcons.FLIGHT_MODE_ICON,
|
||||
mContext.getString(R.string.accessibility_airplane_mode)));
|
||||
cb.setNoSims(mHasNoSubs, mSimDetected);
|
||||
if (mProviderModelSetting) {
|
||||
cb.setConnectivityStatus(mNoDefaultNetwork, !mInetCondition, mNoNetworksAvailable);
|
||||
@@ -1056,8 +1059,11 @@ public class NetworkControllerImpl extends BroadcastReceiver
|
||||
* notifyAllListeners.
|
||||
*/
|
||||
private void notifyListeners() {
|
||||
mCallbackHandler.setIsAirplaneMode(new IconState(mAirplaneMode,
|
||||
TelephonyIcons.FLIGHT_MODE_ICON, R.string.accessibility_airplane_mode, mContext));
|
||||
mCallbackHandler.setIsAirplaneMode(
|
||||
new IconState(
|
||||
mAirplaneMode,
|
||||
TelephonyIcons.FLIGHT_MODE_ICON,
|
||||
mContext.getString(R.string.accessibility_airplane_mode)));
|
||||
mCallbackHandler.setNoSims(mHasNoSubs, mSimDetected);
|
||||
}
|
||||
|
||||
@@ -1206,7 +1212,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
|
||||
}
|
||||
|
||||
private boolean mDemoInetCondition;
|
||||
private WifiSignalController.WifiState mDemoWifiState;
|
||||
private WifiState mDemoWifiState;
|
||||
|
||||
@Override
|
||||
public void onDemoModeStarted() {
|
||||
@@ -1241,9 +1247,11 @@ public class NetworkControllerImpl extends BroadcastReceiver
|
||||
String airplane = args.getString("airplane");
|
||||
if (airplane != null) {
|
||||
boolean show = airplane.equals("show");
|
||||
mCallbackHandler.setIsAirplaneMode(new IconState(show,
|
||||
TelephonyIcons.FLIGHT_MODE_ICON, R.string.accessibility_airplane_mode,
|
||||
mContext));
|
||||
mCallbackHandler.setIsAirplaneMode(
|
||||
new IconState(
|
||||
show,
|
||||
TelephonyIcons.FLIGHT_MODE_ICON,
|
||||
mContext.getString(R.string.accessibility_airplane_mode)));
|
||||
}
|
||||
String fully = args.getString("fully");
|
||||
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 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.util.BitSet;
|
||||
@@ -36,7 +33,7 @@ import java.util.BitSet;
|
||||
* @param <T> State of the SysUI controller.
|
||||
* @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.
|
||||
static final boolean RECORD_HISTORY = true;
|
||||
// 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;
|
||||
|
||||
// Save the previous HISTORY_SIZE states for logging.
|
||||
private final State[] mHistory;
|
||||
private final ConnectivityState[] mHistory;
|
||||
// Where to copy the next state into.
|
||||
private int mHistoryIndex;
|
||||
|
||||
@@ -72,7 +69,7 @@ public abstract class SignalController<T extends State, I extends IconGroup> {
|
||||
mCurrentState = cleanState();
|
||||
mLastState = cleanState();
|
||||
if (RECORD_HISTORY) {
|
||||
mHistory = new State[HISTORY_SIZE];
|
||||
mHistory = new ConnectivityState[HISTORY_SIZE];
|
||||
for (int i = 0; i < HISTORY_SIZE; i++) {
|
||||
mHistory[i] = cleanState();
|
||||
}
|
||||
|
||||
@@ -26,28 +26,20 @@ import android.net.NetworkCapabilities;
|
||||
import android.net.NetworkScoreManager;
|
||||
import android.net.wifi.WifiManager;
|
||||
import android.text.Html;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
import com.android.settingslib.SignalIcon.IconGroup;
|
||||
import com.android.settingslib.SignalIcon.MobileIconGroup;
|
||||
import com.android.settingslib.SignalIcon.State;
|
||||
import com.android.settingslib.graph.SignalDrawable;
|
||||
import com.android.settingslib.mobile.TelephonyIcons;
|
||||
import com.android.settingslib.wifi.WifiStatusTracker;
|
||||
import com.android.systemui.R;
|
||||
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.util.Objects;
|
||||
|
||||
/** */
|
||||
public class WifiSignalController extends
|
||||
SignalController<WifiSignalController.WifiState, IconGroup> {
|
||||
public class WifiSignalController extends SignalController<WifiState, IconGroup> {
|
||||
private final boolean mHasMobileDataFeature;
|
||||
private final WifiStatusTracker mWifiTracker;
|
||||
private final IconGroup mUnmergedWifiIconGroup = WifiIcons.UNMERGED_WIFI;
|
||||
@@ -272,50 +264,4 @@ public class WifiSignalController extends
|
||||
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 android.animation.ValueAnimator;
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
import android.app.Fragment;
|
||||
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.OperatorNameViewController;
|
||||
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.SignalCallback;
|
||||
import com.android.systemui.statusbar.connectivity.SignalCallback;
|
||||
import com.android.systemui.statusbar.events.SystemStatusAnimationCallback;
|
||||
import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler;
|
||||
import com.android.systemui.statusbar.phone.StatusBarIconController.DarkIconManager;
|
||||
@@ -109,7 +111,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
|
||||
|
||||
private SignalCallback mSignalCallback = new SignalCallback() {
|
||||
@Override
|
||||
public void setIsAirplaneMode(NetworkController.IconState icon) {
|
||||
public void setIsAirplaneMode(@NonNull IconState icon) {
|
||||
mCommandQueue.recomputeDisableFlags(getContext().getDisplayId(), true /* animate */);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package com.android.systemui.statusbar.phone;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.content.Context;
|
||||
import android.os.Handler;
|
||||
import android.telephony.SubscriptionInfo;
|
||||
@@ -26,11 +27,11 @@ import com.android.settingslib.mobile.TelephonyIcons;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.dagger.SysUISingleton;
|
||||
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.IconState;
|
||||
import com.android.systemui.statusbar.connectivity.NetworkController.MobileDataIndicators;
|
||||
import com.android.systemui.statusbar.connectivity.NetworkController.WifiIndicators;
|
||||
import com.android.systemui.statusbar.connectivity.NetworkControllerImpl;
|
||||
import com.android.systemui.statusbar.connectivity.SignalCallback;
|
||||
import com.android.systemui.statusbar.connectivity.WifiIndicators;
|
||||
import com.android.systemui.statusbar.policy.SecurityController;
|
||||
import com.android.systemui.tuner.TunerService;
|
||||
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. **/
|
||||
@SysUISingleton
|
||||
public class StatusBarSignalPolicy implements NetworkControllerImpl.SignalCallback,
|
||||
public class StatusBarSignalPolicy implements SignalCallback,
|
||||
SecurityController.SecurityControllerCallback, Tunable {
|
||||
private static final String TAG = "StatusBarSignalPolicy";
|
||||
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
|
||||
@@ -169,7 +170,7 @@ public class StatusBarSignalPolicy implements NetworkControllerImpl.SignalCallba
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setWifiIndicators(WifiIndicators indicators) {
|
||||
public void setWifiIndicators(@NonNull WifiIndicators indicators) {
|
||||
if (DEBUG) {
|
||||
Log.d(TAG, "setWifiIndicators: " + indicators);
|
||||
}
|
||||
@@ -219,7 +220,7 @@ public class StatusBarSignalPolicy implements NetworkControllerImpl.SignalCallba
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCallIndicator(IconState statusIcon, int subId) {
|
||||
public void setCallIndicator(@NonNull IconState statusIcon, int subId) {
|
||||
if (DEBUG) {
|
||||
Log.d(TAG, "setCallIndicator: "
|
||||
+ "statusIcon = " + statusIcon + ","
|
||||
@@ -247,7 +248,7 @@ public class StatusBarSignalPolicy implements NetworkControllerImpl.SignalCallba
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setMobileDataIndicators(MobileDataIndicators indicators) {
|
||||
public void setMobileDataIndicators(@NonNull MobileDataIndicators indicators) {
|
||||
if (DEBUG) {
|
||||
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.qualifiers.Main;
|
||||
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.NetworkController;
|
||||
import com.android.systemui.statusbar.connectivity.NetworkControllerImpl;
|
||||
@@ -135,7 +136,7 @@ public interface StatusBarPolicyModule {
|
||||
|
||||
/** */
|
||||
@Binds
|
||||
NetworkController.AccessPointController provideAccessPointController(
|
||||
AccessPointController provideAccessPointController(
|
||||
AccessPointControllerImpl accessPointControllerImpl);
|
||||
|
||||
/** */
|
||||
|
||||
@@ -39,8 +39,10 @@ import androidx.test.filters.SmallTest;
|
||||
import com.android.keyguard.CarrierTextManager;
|
||||
import com.android.systemui.flags.FeatureFlags;
|
||||
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.MobileDataIndicators;
|
||||
import com.android.systemui.statusbar.connectivity.SignalCallback;
|
||||
import com.android.systemui.util.CarrierConfigTracker;
|
||||
import com.android.systemui.utils.leaks.LeakCheckedTest;
|
||||
import com.android.systemui.utils.os.FakeHandler;
|
||||
@@ -57,7 +59,7 @@ import org.mockito.MockitoAnnotations;
|
||||
public class QSCarrierGroupControllerTest extends LeakCheckedTest {
|
||||
|
||||
private QSCarrierGroupController mQSCarrierGroupController;
|
||||
private NetworkController.SignalCallback mSignalCallback;
|
||||
private SignalCallback mSignalCallback;
|
||||
private CarrierTextManager.CarrierTextCallback mCallback;
|
||||
@Mock
|
||||
private QSCarrierGroup mQSCarrierGroup;
|
||||
@@ -94,7 +96,7 @@ public class QSCarrierGroupControllerTest extends LeakCheckedTest {
|
||||
when(mNetworkController.hasVoiceCallingFeature()).thenReturn(true);
|
||||
doAnswer(invocation -> mSignalCallback = invocation.getArgument(0))
|
||||
.when(mNetworkController)
|
||||
.addCallback(any(NetworkController.SignalCallback.class));
|
||||
.addCallback(any(SignalCallback.class));
|
||||
|
||||
when(mCarrierTextControllerBuilder.setShowAirplaneMode(anyBoolean()))
|
||||
.thenReturn(mCarrierTextControllerBuilder);
|
||||
@@ -230,8 +232,8 @@ public class QSCarrierGroupControllerTest extends LeakCheckedTest {
|
||||
mSlotIndexResolver.overrideInvalid = true;
|
||||
|
||||
MobileDataIndicators indicators = new MobileDataIndicators(
|
||||
mock(NetworkController.IconState.class),
|
||||
mock(NetworkController.IconState.class),
|
||||
mock(IconState.class),
|
||||
mock(IconState.class),
|
||||
0, 0, true, true, "", "", "", 0, true, true);
|
||||
mSignalCallback.setMobileDataIndicators(indicators);
|
||||
}
|
||||
|
||||
@@ -43,8 +43,10 @@ import com.android.systemui.plugins.ActivityStarter;
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
import com.android.systemui.qs.QSTileHost;
|
||||
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.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.CastDevice;
|
||||
import com.android.systemui.statusbar.policy.HotspotController;
|
||||
@@ -77,7 +79,7 @@ public class CastTileTest extends SysuiTestCase {
|
||||
@Mock
|
||||
private QSTileHost mHost;
|
||||
@Mock
|
||||
NetworkController.SignalCallback mSignalCallback;
|
||||
SignalCallback mSignalCallback;
|
||||
@Mock
|
||||
private MetricsLogger mMetricsLogger;
|
||||
@Mock
|
||||
@@ -122,8 +124,8 @@ public class CastTileTest extends SysuiTestCase {
|
||||
mTestableLooper.processAllMessages();
|
||||
|
||||
mCastTile.handleSetListening(true);
|
||||
ArgumentCaptor<NetworkController.SignalCallback> signalCallbackArgumentCaptor =
|
||||
ArgumentCaptor.forClass(NetworkController.SignalCallback.class);
|
||||
ArgumentCaptor<SignalCallback> signalCallbackArgumentCaptor =
|
||||
ArgumentCaptor.forClass(SignalCallback.class);
|
||||
verify(mNetworkController).observe(any(LifecycleOwner.class),
|
||||
signalCallbackArgumentCaptor.capture());
|
||||
mSignalCallback = signalCallbackArgumentCaptor.getValue();
|
||||
@@ -139,10 +141,9 @@ public class CastTileTest extends SysuiTestCase {
|
||||
// All these tests for enabled/disabled wifi have hotspot not enabled
|
||||
@Test
|
||||
public void testStateUnavailable_wifiDisabled() {
|
||||
NetworkController.IconState qsIcon =
|
||||
new NetworkController.IconState(false, 0, "");
|
||||
IconState qsIcon = new IconState(false, 0, "");
|
||||
WifiIndicators indicators = new WifiIndicators(
|
||||
false, mock(NetworkController.IconState.class),
|
||||
false, mock(IconState.class),
|
||||
qsIcon, false,false, "",
|
||||
false, "");
|
||||
mSignalCallback.setWifiIndicators(indicators);
|
||||
@@ -153,10 +154,9 @@ public class CastTileTest extends SysuiTestCase {
|
||||
|
||||
@Test
|
||||
public void testStateUnavailable_wifiNotConnected() {
|
||||
NetworkController.IconState qsIcon =
|
||||
new NetworkController.IconState(false, 0, "");
|
||||
IconState qsIcon = new IconState(false, 0, "");
|
||||
WifiIndicators indicators = new WifiIndicators(
|
||||
true, mock(NetworkController.IconState.class),
|
||||
true, mock(IconState.class),
|
||||
qsIcon, false,false, "",
|
||||
false, "");
|
||||
mSignalCallback.setWifiIndicators(indicators);
|
||||
@@ -166,10 +166,9 @@ public class CastTileTest extends SysuiTestCase {
|
||||
}
|
||||
|
||||
private void enableWifiAndProcessMessages() {
|
||||
NetworkController.IconState qsIcon =
|
||||
new NetworkController.IconState(true, 0, "");
|
||||
IconState qsIcon = new IconState(true, 0, "");
|
||||
WifiIndicators indicators = new WifiIndicators(
|
||||
true, mock(NetworkController.IconState.class),
|
||||
true, mock(IconState.class),
|
||||
qsIcon, false,false, "",
|
||||
false, "");
|
||||
mSignalCallback.setWifiIndicators(indicators);
|
||||
|
||||
@@ -49,8 +49,7 @@ import com.android.systemui.animation.DialogLaunchAnimator;
|
||||
import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||
import com.android.systemui.dagger.qualifiers.Main;
|
||||
import com.android.systemui.plugins.ActivityStarter;
|
||||
import com.android.systemui.statusbar.connectivity.NetworkController;
|
||||
import com.android.systemui.statusbar.connectivity.NetworkController.AccessPointController;
|
||||
import com.android.systemui.statusbar.connectivity.AccessPointController;
|
||||
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
||||
import com.android.systemui.statusbar.policy.LocationController;
|
||||
import com.android.systemui.toast.SystemUIToast;
|
||||
@@ -104,7 +103,7 @@ public class InternetDialogControllerTest extends SysuiTestCase {
|
||||
@Mock
|
||||
private KeyguardStateController mKeyguardStateController;
|
||||
@Mock
|
||||
private NetworkController.AccessPointController mAccessPointController;
|
||||
private AccessPointController mAccessPointController;
|
||||
@Mock
|
||||
private WifiEntry mConnectedEntry;
|
||||
@Mock
|
||||
|
||||
@@ -56,9 +56,9 @@ class AccessPointControllerImplTest : SysuiTestCase() {
|
||||
@Mock
|
||||
private lateinit var wifiPickerTracker: WifiPickerTracker
|
||||
@Mock
|
||||
private lateinit var callback: NetworkController.AccessPointController.AccessPointCallback
|
||||
private lateinit var callback: AccessPointController.AccessPointCallback
|
||||
@Mock
|
||||
private lateinit var otherCallback: NetworkController.AccessPointController.AccessPointCallback
|
||||
private lateinit var otherCallback: AccessPointController.AccessPointCallback
|
||||
@Mock
|
||||
private lateinit var wifiEntryConnected: WifiEntry
|
||||
@Mock
|
||||
|
||||
@@ -29,10 +29,6 @@ import androidx.test.runner.AndroidJUnit4;
|
||||
import com.android.settingslib.mobile.TelephonyIcons;
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
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 org.junit.Before;
|
||||
|
||||
@@ -14,22 +14,26 @@
|
||||
* 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.assertTrue;
|
||||
|
||||
import android.test.suitebuilder.annotation.SmallTest;
|
||||
import android.testing.AndroidTestingRunner;
|
||||
|
||||
import com.android.settingslib.mobile.TelephonyIcons;
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class MobileStateTest {
|
||||
@SmallTest
|
||||
@RunWith(AndroidTestingRunner.class)
|
||||
public class MobileStateTest extends SysuiTestCase {
|
||||
|
||||
private SignalIcon.MobileState mState = new SignalIcon.MobileState();
|
||||
private final MobileState mState = new MobileState();
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
@@ -72,9 +72,6 @@ import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||
import com.android.systemui.demomode.DemoModeController;
|
||||
import com.android.systemui.dump.DumpManager;
|
||||
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.DeviceProvisionedListener;
|
||||
import com.android.systemui.telephony.TelephonyListenerManager;
|
||||
|
||||
@@ -23,8 +23,6 @@ import android.test.suitebuilder.annotation.SmallTest;
|
||||
import android.testing.AndroidTestingRunner;
|
||||
import android.testing.TestableLooper.RunWithLooper;
|
||||
|
||||
import com.android.systemui.statusbar.connectivity.NetworkController.IconState;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
|
||||
@@ -36,7 +36,6 @@ import android.testing.AndroidTestingRunner;
|
||||
import android.testing.TestableLooper.RunWithLooper;
|
||||
|
||||
import com.android.settingslib.mobile.TelephonyIcons;
|
||||
import com.android.systemui.statusbar.connectivity.NetworkController.WifiIndicators;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
@@ -18,8 +18,9 @@ import android.os.Bundle;
|
||||
import android.testing.LeakCheck;
|
||||
|
||||
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.SignalCallback;
|
||||
import com.android.systemui.statusbar.connectivity.SignalCallback;
|
||||
import com.android.systemui.statusbar.policy.DataSaverController;
|
||||
|
||||
public class FakeNetworkController extends BaseLeakChecker<SignalCallback>
|
||||
|
||||
Reference in New Issue
Block a user