summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/mobile/MobileMappings.java63
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/mobile/MobileStatusTracker.java286
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java166
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java16
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java4
5 files changed, 395 insertions, 140 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/mobile/MobileMappings.java b/packages/SettingsLib/src/com/android/settingslib/mobile/MobileMappings.java
new file mode 100644
index 000000000000..56898605ec94
--- /dev/null
+++ b/packages/SettingsLib/src/com/android/settingslib/mobile/MobileMappings.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2020 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.settingslib.mobile;
+
+import android.telephony.Annotation;
+import android.telephony.TelephonyDisplayInfo;
+import android.telephony.TelephonyManager;
+
+/**
+ * Holds the utility functions to create the RAT to MobileIconGroup mappings.
+ */
+public class MobileMappings {
+
+ /**
+ * Generates the RAT key from the TelephonyDisplayInfo.
+ */
+ public static String getIconKey(TelephonyDisplayInfo telephonyDisplayInfo) {
+ if (telephonyDisplayInfo.getOverrideNetworkType()
+ == TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE) {
+ return toIconKey(telephonyDisplayInfo.getNetworkType());
+ } else {
+ return toDisplayIconKey(telephonyDisplayInfo.getOverrideNetworkType());
+ }
+ }
+
+ /**
+ * Converts the networkType into the RAT key.
+ */
+ public static String toIconKey(@Annotation.NetworkType int networkType) {
+ return Integer.toString(networkType);
+ }
+
+ /**
+ * Converts the displayNetworkType into the RAT key.
+ */
+ public static String toDisplayIconKey(@Annotation.OverrideNetworkType int displayNetworkType) {
+ switch (displayNetworkType) {
+ case TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_LTE_CA:
+ return toIconKey(TelephonyManager.NETWORK_TYPE_LTE) + "_CA";
+ case TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_LTE_ADVANCED_PRO:
+ return toIconKey(TelephonyManager.NETWORK_TYPE_LTE) + "_CA_Plus";
+ case TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA:
+ return toIconKey(TelephonyManager.NETWORK_TYPE_NR);
+ case TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE:
+ return toIconKey(TelephonyManager.NETWORK_TYPE_NR) + "_Plus";
+ default:
+ return "unsupported";
+ }
+ }
+}
diff --git a/packages/SettingsLib/src/com/android/settingslib/mobile/MobileStatusTracker.java b/packages/SettingsLib/src/com/android/settingslib/mobile/MobileStatusTracker.java
new file mode 100644
index 000000000000..b8030f166436
--- /dev/null
+++ b/packages/SettingsLib/src/com/android/settingslib/mobile/MobileStatusTracker.java
@@ -0,0 +1,286 @@
+/*
+ * Copyright (C) 2020 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.settingslib.mobile;
+
+import android.os.Handler;
+import android.os.Looper;
+import android.telephony.PhoneStateListener;
+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.util.Log;
+
+/**
+ * Tracks the mobile signal status for the SysUI and Settings.
+ *
+ * This class is not threadsafe. All the mobile statuses monitored by this class is stored in
+ * MobileStatus. Whoever uses this class should only rely on the MobileStatusTracker#Callback
+ * to get the latest mobile statuses. Do not get mobile statues directly from
+ * MobileStatusTracker#MobileStatus.
+ */
+public class MobileStatusTracker {
+ private static final String TAG = "MobileStatusTracker";
+ private final TelephonyManager mPhone;
+ private final SubscriptionInfo mSubscriptionInfo;
+ private final Callback mCallback;
+ private final MobileStatus mMobileStatus;
+ private final PhoneStateListener mPhoneStateListener;
+ private final SubscriptionDefaults mDefaults;
+ private final Handler mReceiverHandler;
+
+ /**
+ * MobileStatusTracker constructors
+ *
+ * @param phone The TelephonyManager which corresponds to the subscription being monitored.
+ * @param receiverLooper The Looper on which the callback will be invoked.
+ * @param info The subscription being monitored.
+ * @param defaults The wrapper of the SubscriptionManager.
+ * @param callback The callback to notify any changes of the mobile status, users should only
+ * use this callback to get the latest mobile status.
+ */
+ public MobileStatusTracker(TelephonyManager phone, Looper receiverLooper,
+ SubscriptionInfo info, SubscriptionDefaults defaults, Callback callback) {
+ mPhone = phone;
+ mReceiverHandler = new Handler(receiverLooper);
+ mPhoneStateListener = new MobilePhoneStateListener();
+ mSubscriptionInfo = info;
+ mDefaults = defaults;
+ mCallback = callback;
+ mMobileStatus = new MobileStatus();
+ updateDataSim();
+ mReceiverHandler.post(() -> mCallback.onMobileStatusChanged(
+ /* updateTelephony= */false, new MobileStatus(mMobileStatus)));
+ }
+
+ public PhoneStateListener getPhoneStateListener() {
+ return mPhoneStateListener;
+ }
+
+ /**
+ * Config the MobileStatusTracker to start or stop monitoring platform signals.
+ */
+ public void setListening(boolean listening) {
+ if (listening) {
+ mPhone.registerPhoneStateListener(mReceiverHandler::post, mPhoneStateListener);
+ } else {
+ mPhone.unregisterPhoneStateListener(mPhoneStateListener);
+ }
+ }
+
+ private void updateDataSim() {
+ int activeDataSubId = mDefaults.getActiveDataSubId();
+ if (SubscriptionManager.isValidSubscriptionId(activeDataSubId)) {
+ mMobileStatus.dataSim = activeDataSubId == mSubscriptionInfo.getSubscriptionId();
+ } else {
+ // There doesn't seem to be a data sim selected, however if
+ // there isn't a MobileSignalController with dataSim set, then
+ // QS won't get any callbacks and will be blank. Instead
+ // lets just assume we are the data sim (which will basically
+ // show one at random) in QS until one is selected. The user
+ // should pick one soon after, so we shouldn't be in this state
+ // for long.
+ mMobileStatus.dataSim = true;
+ }
+ }
+
+ private void setActivity(int activity) {
+ mMobileStatus.activityIn = activity == TelephonyManager.DATA_ACTIVITY_INOUT
+ || activity == TelephonyManager.DATA_ACTIVITY_IN;
+ mMobileStatus.activityOut = activity == TelephonyManager.DATA_ACTIVITY_INOUT
+ || activity == TelephonyManager.DATA_ACTIVITY_OUT;
+ }
+
+ private class MobilePhoneStateListener extends PhoneStateListener implements
+ PhoneStateListener.ServiceStateChangedListener,
+ PhoneStateListener.SignalStrengthsChangedListener,
+ PhoneStateListener.CallStateChangedListener,
+ PhoneStateListener.DataConnectionStateChangedListener,
+ PhoneStateListener.DataActivityListener,
+ PhoneStateListener.CarrierNetworkChangeListener,
+ PhoneStateListener.ActiveDataSubscriptionIdChangedListener,
+ PhoneStateListener.DisplayInfoChangedListener{
+
+ @Override
+ public void onSignalStrengthsChanged(SignalStrength signalStrength) {
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "onSignalStrengthsChanged signalStrength=" + signalStrength
+ + ((signalStrength == null) ? ""
+ : (" level=" + signalStrength.getLevel())));
+ }
+ mMobileStatus.signalStrength = signalStrength;
+ mCallback.onMobileStatusChanged(
+ /* updateTelephony= */true, new MobileStatus(mMobileStatus));
+ }
+
+ @Override
+ public void onServiceStateChanged(ServiceState state) {
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "onServiceStateChanged voiceState="
+ + (state == null ? "" : state.getState())
+ + " dataState=" + (state == null ? "" : state.getDataRegistrationState()));
+ }
+ mMobileStatus.serviceState = state;
+ mCallback.onMobileStatusChanged(
+ /* updateTelephony= */true, new MobileStatus(mMobileStatus));
+ }
+
+ @Override
+ public void onDataConnectionStateChanged(int state, int networkType) {
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "onDataConnectionStateChanged: state=" + state
+ + " type=" + networkType);
+ }
+ mMobileStatus.dataState = state;
+ mCallback.onMobileStatusChanged(
+ /* updateTelephony= */true, new MobileStatus(mMobileStatus));
+ }
+
+ @Override
+ public void onDataActivity(int direction) {
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "onDataActivity: direction=" + direction);
+ }
+ setActivity(direction);
+ mCallback.onMobileStatusChanged(
+ /* updateTelephony= */false, new MobileStatus(mMobileStatus));
+ }
+
+ @Override
+ public void onCarrierNetworkChange(boolean active) {
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "onCarrierNetworkChange: active=" + active);
+ }
+ mMobileStatus.carrierNetworkChangeMode = active;
+ mCallback.onMobileStatusChanged(
+ /* updateTelephony= */true, new MobileStatus(mMobileStatus));
+ }
+
+ @Override
+ public void onActiveDataSubscriptionIdChanged(int subId) {
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "onActiveDataSubscriptionIdChanged: subId=" + subId);
+ }
+ updateDataSim();
+ mCallback.onMobileStatusChanged(
+ /* updateTelephony= */true, new MobileStatus(mMobileStatus));
+ }
+
+ @Override
+ public void onDisplayInfoChanged(TelephonyDisplayInfo telephonyDisplayInfo) {
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "onDisplayInfoChanged: telephonyDisplayInfo=" + telephonyDisplayInfo);
+ }
+ mMobileStatus.telephonyDisplayInfo = telephonyDisplayInfo;
+ mCallback.onMobileStatusChanged(
+ /* updateTelephony= */ true, new MobileStatus(mMobileStatus));
+ }
+ }
+
+ /**
+ * Wrapper class of the SubscriptionManager, for mock testing purpose
+ */
+ public static class SubscriptionDefaults {
+ public int getDefaultVoiceSubId() {
+ return SubscriptionManager.getDefaultVoiceSubscriptionId();
+ }
+
+ public int getDefaultDataSubId() {
+ return SubscriptionManager.getDefaultDataSubscriptionId();
+ }
+
+ public int getActiveDataSubId() {
+ return SubscriptionManager.getActiveDataSubscriptionId();
+ }
+ }
+
+ /**
+ * Wrapper class which contains all the mobile status tracked by MobileStatusTracker.
+ */
+ public static class MobileStatus {
+ public boolean activityIn;
+ public boolean activityOut;
+ public boolean dataSim;
+ public boolean carrierNetworkChangeMode;
+ public int dataState = TelephonyManager.DATA_DISCONNECTED;
+ public ServiceState serviceState;
+ public SignalStrength signalStrength;
+ public TelephonyDisplayInfo telephonyDisplayInfo =
+ new TelephonyDisplayInfo(TelephonyManager.NETWORK_TYPE_UNKNOWN,
+ TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE);
+
+ /**
+ * Empty constructor
+ */
+ public MobileStatus() { }
+
+ /**
+ * Copy constructors
+ *
+ * @param status Source MobileStatus
+ */
+ public MobileStatus(MobileStatus status) {
+ copyFrom(status);
+ }
+
+ protected void copyFrom(MobileStatus status) {
+ activityIn = status.activityIn;
+ activityOut = status.activityOut;
+ dataSim = status.dataSim;
+ carrierNetworkChangeMode = status.carrierNetworkChangeMode;
+ dataState = status.dataState;
+ // We don't do deep copy for the below members since they may be Mockito instances.
+ serviceState = status.serviceState;
+ signalStrength = status.signalStrength;
+ telephonyDisplayInfo = status.telephonyDisplayInfo;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder builder = new StringBuilder();
+ return builder.append("[activityIn=").append(activityIn).append(',')
+ .append("activityOut=").append(activityOut).append(',')
+ .append("dataSim=").append(dataSim).append(',')
+ .append("carrierNetworkChangeMode=").append(carrierNetworkChangeMode).append(',')
+ .append("dataState=").append(dataState).append(',')
+ .append("serviceState=").append(serviceState == null ? ""
+ : serviceState.toString()).append(',')
+ .append("signalStrength=").append(signalStrength == null ? ""
+ : signalStrength.toString()).append(',')
+ .append("telephonyDisplayInfo=").append(telephonyDisplayInfo == null ? ""
+ : telephonyDisplayInfo.toString()).append(']').toString();
+ }
+ }
+
+ /**
+ * Callback for notifying any changes of the mobile status.
+ *
+ * This callback will always be invoked on the receiverLooper which must be specified when
+ * MobileStatusTracker is constructed.
+ */
+ public interface Callback {
+ /**
+ * Notify the mobile status has been updated.
+ *
+ * @param updateTelephony Whether needs to update other Telephony related parameters, this
+ * is only used by SysUI.
+ * @param mobileStatus Holds the latest mobile statuses
+ */
+ void onMobileStatusChanged(boolean updateTelephony, MobileStatus mobileStatus);
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java
index 49be648755c3..dd9165d0697b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java
@@ -15,6 +15,10 @@
*/
package com.android.systemui.statusbar.policy;
+import static com.android.settingslib.mobile.MobileMappings.getIconKey;
+import static com.android.settingslib.mobile.MobileMappings.toDisplayIconKey;
+import static com.android.settingslib.mobile.MobileMappings.toIconKey;
+
import android.content.Context;
import android.content.Intent;
import android.database.ContentObserver;
@@ -22,10 +26,8 @@ import android.net.NetworkCapabilities;
import android.os.Handler;
import android.os.Looper;
import android.provider.Settings.Global;
-import android.telephony.Annotation;
import android.telephony.CellSignalStrength;
import android.telephony.CellSignalStrengthCdma;
-import android.telephony.PhoneStateListener;
import android.telephony.ServiceState;
import android.telephony.SignalStrength;
import android.telephony.SubscriptionInfo;
@@ -39,12 +41,13 @@ import android.util.Log;
import com.android.internal.annotations.VisibleForTesting;
import com.android.settingslib.Utils;
import com.android.settingslib.graph.SignalDrawable;
+import com.android.settingslib.mobile.MobileStatusTracker;
+import com.android.settingslib.mobile.MobileStatusTracker.SubscriptionDefaults;
import com.android.settingslib.net.SignalStrengthUtil;
import com.android.systemui.R;
import com.android.systemui.statusbar.policy.NetworkController.IconState;
import com.android.systemui.statusbar.policy.NetworkController.SignalCallback;
import com.android.systemui.statusbar.policy.NetworkControllerImpl.Config;
-import com.android.systemui.statusbar.policy.NetworkControllerImpl.SubscriptionDefaults;
import java.io.PrintWriter;
import java.util.BitSet;
@@ -52,8 +55,6 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
-import java.util.concurrent.Executor;
-
public class MobileSignalController extends SignalController<
MobileSignalController.MobileState, MobileSignalController.MobileIconGroup> {
@@ -62,14 +63,10 @@ public class MobileSignalController extends SignalController<
private final String mNetworkNameDefault;
private final String mNetworkNameSeparator;
private final ContentObserver mObserver;
- @VisibleForTesting
- final PhoneStateListener mPhoneStateListener;
// Save entire info for logging, we only use the id.
final SubscriptionInfo mSubscriptionInfo;
-
// @VisibleForDemoMode
final 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.
@@ -83,6 +80,9 @@ public class MobileSignalController extends SignalController<
private Config mConfig;
@VisibleForTesting
boolean mInflateSignalStrengths = false;
+ private MobileStatusTracker.Callback mCallback;
+ @VisibleForTesting
+ MobileStatusTracker mMobileStatusTracker;
// TODO: Reduce number of vars passed in, if we have the NetworkController, probably don't
// need listener lists anymore.
@@ -98,28 +98,42 @@ public class MobileSignalController extends SignalController<
mPhone = phone;
mDefaults = defaults;
mSubscriptionInfo = info;
- mPhoneStateListener = new MobilePhoneStateListener((new Handler(receiverLooper))::post);
mNetworkNameSeparator = getTextIfExists(R.string.status_bar_network_name_separator)
.toString();
mNetworkNameDefault = getTextIfExists(
com.android.internal.R.string.lockscreen_carrier_default).toString();
-
mapIconSets();
-
String networkName = info.getCarrierName() != null ? info.getCarrierName().toString()
: mNetworkNameDefault;
mLastState.networkName = mCurrentState.networkName = networkName;
mLastState.networkNameData = mCurrentState.networkNameData = networkName;
mLastState.enabled = mCurrentState.enabled = hasMobileData;
mLastState.iconGroup = mCurrentState.iconGroup = mDefaultIcons;
- // Get initial data sim state.
- updateDataSim();
mObserver = new ContentObserver(new Handler(receiverLooper)) {
@Override
public void onChange(boolean selfChange) {
updateTelephony();
}
};
+ mCallback = new MobileStatusTracker.Callback() {
+ @Override
+ public void onMobileStatusChanged(boolean updateTelephony,
+ MobileStatusTracker.MobileStatus mobileStatus) {
+ if (Log.isLoggable(mTag, Log.DEBUG)) {
+ Log.d(mTag, "onMobileStatusChanged="
+ + " updateTelephony=" + updateTelephony
+ + " mobileStatus=" + mobileStatus.toString());
+ }
+ updateMobileStatus(mobileStatus);
+ if (updateTelephony) {
+ updateTelephony();
+ } else {
+ notifyListenersIfNecessary();
+ }
+ }
+ };
+ mMobileStatusTracker = new MobileStatusTracker(mPhone, receiverLooper,
+ info, mDefaults, mCallback);
}
public void setConfiguration(Config config) {
@@ -157,15 +171,7 @@ public class MobileSignalController extends SignalController<
* Start listening for phone state changes.
*/
public void registerListener() {
- mPhone.listen(mPhoneStateListener,
- PhoneStateListener.LISTEN_SERVICE_STATE
- | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS
- | PhoneStateListener.LISTEN_CALL_STATE
- | PhoneStateListener.LISTEN_DATA_CONNECTION_STATE
- | PhoneStateListener.LISTEN_DATA_ACTIVITY
- | PhoneStateListener.LISTEN_CARRIER_NETWORK_CHANGE
- | PhoneStateListener.LISTEN_ACTIVE_DATA_SUBSCRIPTION_ID_CHANGE
- | PhoneStateListener.LISTEN_DISPLAY_INFO_CHANGED);
+ mMobileStatusTracker.setListening(true);
mContext.getContentResolver().registerContentObserver(Global.getUriFor(Global.MOBILE_DATA),
true, mObserver);
mContext.getContentResolver().registerContentObserver(Global.getUriFor(
@@ -177,7 +183,7 @@ public class MobileSignalController extends SignalController<
* Stop listening for phone state changes.
*/
public void unregisterListener() {
- mPhone.listen(mPhoneStateListener, 0);
+ mMobileStatusTracker.setListening(false);
mContext.getContentResolver().unregisterContentObserver(mObserver);
}
@@ -288,34 +294,6 @@ public class MobileSignalController extends SignalController<
TelephonyIcons.NR_5G);
}
- private String getIconKey() {
- if (mTelephonyDisplayInfo.getOverrideNetworkType()
- == TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE) {
- return toIconKey(mTelephonyDisplayInfo.getNetworkType());
- } else {
- return toDisplayIconKey(mTelephonyDisplayInfo.getOverrideNetworkType());
- }
- }
-
- private String toIconKey(@Annotation.NetworkType int networkType) {
- return Integer.toString(networkType);
- }
-
- private String toDisplayIconKey(@Annotation.OverrideNetworkType int displayNetworkType) {
- switch (displayNetworkType) {
- case TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_LTE_CA:
- return toIconKey(TelephonyManager.NETWORK_TYPE_LTE) + "_CA";
- case TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_LTE_ADVANCED_PRO:
- return toIconKey(TelephonyManager.NETWORK_TYPE_LTE) + "_CA_Plus";
- case TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA:
- return toIconKey(TelephonyManager.NETWORK_TYPE_NR);
- case TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE:
- return toIconKey(TelephonyManager.NETWORK_TYPE_NR) + "_Plus";
- default:
- return "unsupported";
- }
- }
-
private void updateInflateSignalStrength() {
mInflateSignalStrengths = SignalStrengthUtil.shouldInflateSignalStrength(mContext,
mSubscriptionInfo.getSubscriptionId());
@@ -521,13 +499,24 @@ public class MobileSignalController extends SignalController<
return CellSignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
}
+ private void updateMobileStatus(MobileStatusTracker.MobileStatus mobileStatus) {
+ mCurrentState.activityIn = mobileStatus.activityIn;
+ mCurrentState.activityOut = mobileStatus.activityOut;
+ mCurrentState.dataSim = mobileStatus.dataSim;
+ mCurrentState.carrierNetworkChangeMode = mobileStatus.carrierNetworkChangeMode;
+ mDataState = mobileStatus.dataState;
+ mServiceState = mobileStatus.serviceState;
+ mSignalStrength = mobileStatus.signalStrength;
+ mTelephonyDisplayInfo = mobileStatus.telephonyDisplayInfo;
+ }
+
/**
* Updates the current state based on mServiceState, mSignalStrength, mDataState,
* mTelephonyDisplayInfo, and mSimState. It should be called any time one of these is updated.
* This will call listeners if necessary.
*/
private final void updateTelephony() {
- if (DEBUG) {
+ if (Log.isLoggable(mTag, Log.DEBUG)) {
Log.d(mTag, "updateTelephonySignalStrength: hasService=" +
Utils.isInService(mServiceState) + " ss=" + mSignalStrength
+ " displayInfo=" + mTelephonyDisplayInfo);
@@ -542,7 +531,7 @@ public class MobileSignalController extends SignalController<
}
}
- String iconKey = getIconKey();
+ String iconKey = getIconKey(mTelephonyDisplayInfo);
if (mNetworkToIconLookup.get(iconKey) != null) {
mCurrentState.iconGroup = mNetworkToIconLookup.get(iconKey);
} else {
@@ -622,75 +611,6 @@ public class MobileSignalController extends SignalController<
pw.println(" isDataDisabled=" + isDataDisabled() + ",");
}
- class MobilePhoneStateListener extends PhoneStateListener {
- public MobilePhoneStateListener(Executor executor) {
- super(executor);
- }
-
- @Override
- public void onSignalStrengthsChanged(SignalStrength signalStrength) {
- if (DEBUG) {
- Log.d(mTag, "onSignalStrengthsChanged signalStrength=" + signalStrength +
- ((signalStrength == null) ? "" : (" level=" + signalStrength.getLevel())));
- }
- mSignalStrength = signalStrength;
- updateTelephony();
- }
-
- @Override
- public void onServiceStateChanged(ServiceState state) {
- if (DEBUG) {
- Log.d(mTag, "onServiceStateChanged voiceState=" + state.getState()
- + " dataState=" + state.getDataRegistrationState());
- }
- mServiceState = state;
- updateTelephony();
- }
-
- @Override
- public void onDataConnectionStateChanged(int state, int networkType) {
- if (DEBUG) {
- Log.d(mTag, "onDataConnectionStateChanged: state=" + state
- + " type=" + networkType);
- }
- mDataState = state;
- updateTelephony();
- }
-
- @Override
- public void onDataActivity(int direction) {
- if (DEBUG) {
- Log.d(mTag, "onDataActivity: direction=" + direction);
- }
- setActivity(direction);
- }
-
- @Override
- public void onCarrierNetworkChange(boolean active) {
- if (DEBUG) {
- Log.d(mTag, "onCarrierNetworkChange: active=" + active);
- }
- mCurrentState.carrierNetworkChangeMode = active;
- updateTelephony();
- }
-
- @Override
- public void onActiveDataSubscriptionIdChanged(int subId) {
- if (DEBUG) Log.d(mTag, "onActiveDataSubscriptionIdChanged: subId=" + subId);
- updateDataSim();
- updateTelephony();
- }
-
- @Override
- public void onDisplayInfoChanged(TelephonyDisplayInfo telephonyDisplayInfo) {
- if (DEBUG) {
- Log.d(mTag, "onDisplayInfoChanged: telephonyDisplayInfo=" + telephonyDisplayInfo);
- }
- mTelephonyDisplayInfo = telephonyDisplayInfo;
- updateTelephony();
- }
- }
-
static class MobileIconGroup extends SignalController.IconGroup {
final int mDataContentDescription; // mContentDescriptionDataType
final int mDataType;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java
index 62b922e23532..a3abb31a36e4 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java
@@ -59,6 +59,7 @@ import androidx.annotation.NonNull;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
+import com.android.settingslib.mobile.MobileStatusTracker.SubscriptionDefaults;
import com.android.settingslib.net.DataUsageController;
import com.android.systemui.Dumpable;
import com.android.systemui.R;
@@ -391,7 +392,6 @@ public class NetworkControllerImpl extends BroadcastReceiver
}
}
});
-
updateMobileControllers();
// Initial setup of emergency information. Handled as if we had received a sticky broadcast
@@ -1202,20 +1202,6 @@ public class NetworkControllerImpl extends BroadcastReceiver
}
};
- public static class SubscriptionDefaults {
- public int getDefaultVoiceSubId() {
- return SubscriptionManager.getDefaultVoiceSubscriptionId();
- }
-
- public int getDefaultDataSubId() {
- return SubscriptionManager.getDefaultDataSubscriptionId();
- }
-
- public int getActiveDataSubId() {
- return SubscriptionManager.getActiveDataSubscriptionId();
- }
- }
-
@VisibleForTesting
static class Config {
boolean showAtLeast3G = false;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java
index 138236af70ce..ce9ca9d633fd 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java
@@ -61,6 +61,7 @@ import android.util.Log;
import androidx.test.InstrumentationRegistry;
import com.android.settingslib.graph.SignalDrawable;
+import com.android.settingslib.mobile.MobileStatusTracker.SubscriptionDefaults;
import com.android.settingslib.net.DataUsageController;
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
@@ -70,7 +71,6 @@ import com.android.systemui.statusbar.policy.DeviceProvisionedController.DeviceP
import com.android.systemui.statusbar.policy.NetworkController.IconState;
import com.android.systemui.statusbar.policy.NetworkController.SignalCallback;
import com.android.systemui.statusbar.policy.NetworkControllerImpl.Config;
-import com.android.systemui.statusbar.policy.NetworkControllerImpl.SubscriptionDefaults;
import org.junit.Before;
import org.junit.Rule;
@@ -225,7 +225,7 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
setDefaultSubId(mSubId);
setSubscriptions(mSubId);
mMobileSignalController = mNetworkController.mMobileSignalControllers.get(mSubId);
- mPhoneStateListener = mMobileSignalController.mPhoneStateListener;
+ mPhoneStateListener = mMobileSignalController.mMobileStatusTracker.getPhoneStateListener();
ArgumentCaptor<ConnectivityManager.NetworkCallback> callbackArg =
ArgumentCaptor.forClass(ConnectivityManager.NetworkCallback.class);