summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author yinxu <yinxu@google.com> 2020-12-01 11:23:56 -0800
committer yinxu <yinxu@google.com> 2020-12-09 11:23:49 -0800
commitc71a4b6abbc0806087da9d522df5ad4256adf830 (patch)
treec1f72897d4bfba4843e90f5e019137d57135697f
parentf9f8be934bab6f152375c43f4ac7551b4172624b (diff)
Extract the platform signals handling into settingslib
Mobile platform signals will be shared by SysUI and Settings, but Settings can not access SysUI code directly. Extract this logic into settingslib so it can be shared by SysUI and Settings. Bug: 174582703 Test: atest NetworkControllerSignalTest, Manual test Change-Id: I990c1dc86fd9a04c4ff083478e45850f3b515547
-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);