Change icon mappings in MobileSignalController

The specific goal was to remove NETWORK_TYPE_LTE_CA from being used in the controller.
In order to make this smoother, the logic was refactored to use a string based
hashmap instead of an array to support the carrier aggregation variations in LTE
and 5G \ LTE.

Bug: 147465477
Test: SystemUITests
Change-Id: Ice6e795675e0c8281531c3cf52ce181a460e4bfd
This commit is contained in:
Daniel Bright
2020-01-10 18:05:01 -08:00
parent 252fcabe07
commit aa81904bd7

View File

@@ -23,6 +23,7 @@ import android.os.Handler;
import android.os.Looper; import android.os.Looper;
import android.os.Message; import android.os.Message;
import android.provider.Settings.Global; import android.provider.Settings.Global;
import android.telephony.Annotation;
import android.telephony.CellSignalStrength; import android.telephony.CellSignalStrength;
import android.telephony.CellSignalStrengthCdma; import android.telephony.CellSignalStrengthCdma;
import android.telephony.NetworkRegistrationInfo; import android.telephony.NetworkRegistrationInfo;
@@ -34,7 +35,6 @@ import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager; import android.telephony.TelephonyManager;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import android.util.SparseArray;
import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.TelephonyIntents; import com.android.internal.telephony.TelephonyIntents;
@@ -50,7 +50,9 @@ import com.android.systemui.statusbar.policy.NetworkControllerImpl.SubscriptionD
import java.io.PrintWriter; import java.io.PrintWriter;
import java.util.BitSet; import java.util.BitSet;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
import java.util.regex.Matcher; import java.util.regex.Matcher;
@@ -74,12 +76,14 @@ public class MobileSignalController extends SignalController<
final SubscriptionInfo mSubscriptionInfo; final SubscriptionInfo mSubscriptionInfo;
// @VisibleForDemoMode // @VisibleForDemoMode
final SparseArray<MobileIconGroup> mNetworkToIconLookup; final Map<String, MobileIconGroup> mNetworkToIconLookup;
// Since some pieces of the phone state are interdependent we store it locally, // Since some pieces of the phone state are interdependent we store it locally,
// this could potentially become part of MobileState for simplification/complication // this could potentially become part of MobileState for simplification/complication
// of code. // of code.
private int mDataNetType = TelephonyManager.NETWORK_TYPE_UNKNOWN; private int mDataNetType = TelephonyManager.NETWORK_TYPE_UNKNOWN;
private boolean mCA = false;
private boolean mCAPlus = false;
private int mDataState = TelephonyManager.DATA_DISCONNECTED; private int mDataState = TelephonyManager.DATA_DISCONNECTED;
private ServiceState mServiceState; private ServiceState mServiceState;
private SignalStrength mSignalStrength; private SignalStrength mSignalStrength;
@@ -90,9 +94,6 @@ public class MobileSignalController extends SignalController<
boolean mInflateSignalStrengths = false; boolean mInflateSignalStrengths = false;
@VisibleForTesting @VisibleForTesting
boolean mIsShowingIconGracefully = false; boolean mIsShowingIconGracefully = false;
// Some specific carriers have 5GE network which is special LTE CA network.
private static final int NETWORK_TYPE_LTE_CA_5GE =
TelephonyManager.getAllNetworkTypes().length + 1;
// TODO: Reduce number of vars passed in, if we have the NetworkController, probably don't // TODO: Reduce number of vars passed in, if we have the NetworkController, probably don't
// need listener lists anymore. // need listener lists anymore.
@@ -103,7 +104,7 @@ public class MobileSignalController extends SignalController<
super("MobileSignalController(" + info.getSubscriptionId() + ")", context, super("MobileSignalController(" + info.getSubscriptionId() + ")", context,
NetworkCapabilities.TRANSPORT_CELLULAR, callbackHandler, NetworkCapabilities.TRANSPORT_CELLULAR, callbackHandler,
networkController); networkController);
mNetworkToIconLookup = new SparseArray<>(); mNetworkToIconLookup = new HashMap<>();
mConfig = config; mConfig = config;
mPhone = phone; mPhone = phone;
mDefaults = defaults; mDefaults = defaults;
@@ -210,29 +211,38 @@ public class MobileSignalController extends SignalController<
private void mapIconSets() { private void mapIconSets() {
mNetworkToIconLookup.clear(); mNetworkToIconLookup.clear();
mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_EVDO_0, TelephonyIcons.THREE_G); mNetworkToIconLookup.put(toIconKey(TelephonyManager.NETWORK_TYPE_EVDO_0),
mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_EVDO_A, TelephonyIcons.THREE_G); TelephonyIcons.THREE_G);
mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_EVDO_B, TelephonyIcons.THREE_G); mNetworkToIconLookup.put(toIconKey(TelephonyManager.NETWORK_TYPE_EVDO_A),
mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_EHRPD, TelephonyIcons.THREE_G); TelephonyIcons.THREE_G);
mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_UMTS, TelephonyIcons.THREE_G); mNetworkToIconLookup.put(toIconKey(TelephonyManager.NETWORK_TYPE_EVDO_B),
mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_TD_SCDMA, TelephonyIcons.THREE_G); TelephonyIcons.THREE_G);
mNetworkToIconLookup.put(toIconKey(TelephonyManager.NETWORK_TYPE_EHRPD),
TelephonyIcons.THREE_G);
mNetworkToIconLookup.put(toIconKey(TelephonyManager.NETWORK_TYPE_UMTS),
TelephonyIcons.THREE_G);
mNetworkToIconLookup.put(toIconKey(TelephonyManager.NETWORK_TYPE_TD_SCDMA),
TelephonyIcons.THREE_G);
if (!mConfig.showAtLeast3G) { if (!mConfig.showAtLeast3G) {
mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_UNKNOWN, mNetworkToIconLookup.put(toIconKey(TelephonyManager.NETWORK_TYPE_UNKNOWN),
TelephonyIcons.UNKNOWN); TelephonyIcons.UNKNOWN);
mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_EDGE, TelephonyIcons.E); mNetworkToIconLookup.put(toIconKey(TelephonyManager.NETWORK_TYPE_EDGE),
mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_CDMA, TelephonyIcons.ONE_X); TelephonyIcons.E);
mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_1xRTT, TelephonyIcons.ONE_X); mNetworkToIconLookup.put(toIconKey(TelephonyManager.NETWORK_TYPE_CDMA),
TelephonyIcons.ONE_X);
mNetworkToIconLookup.put(toIconKey(TelephonyManager.NETWORK_TYPE_1xRTT),
TelephonyIcons.ONE_X);
mDefaultIcons = TelephonyIcons.G; mDefaultIcons = TelephonyIcons.G;
} else { } else {
mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_UNKNOWN, mNetworkToIconLookup.put(toIconKey(TelephonyManager.NETWORK_TYPE_UNKNOWN),
TelephonyIcons.THREE_G); TelephonyIcons.THREE_G);
mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_EDGE, mNetworkToIconLookup.put(toIconKey(TelephonyManager.NETWORK_TYPE_EDGE),
TelephonyIcons.THREE_G); TelephonyIcons.THREE_G);
mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_CDMA, mNetworkToIconLookup.put(toIconKey(TelephonyManager.NETWORK_TYPE_CDMA),
TelephonyIcons.THREE_G); TelephonyIcons.THREE_G);
mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_1xRTT, mNetworkToIconLookup.put(toIconKey(TelephonyManager.NETWORK_TYPE_1xRTT),
TelephonyIcons.THREE_G); TelephonyIcons.THREE_G);
mDefaultIcons = TelephonyIcons.THREE_G; mDefaultIcons = TelephonyIcons.THREE_G;
} }
@@ -247,33 +257,59 @@ public class MobileSignalController extends SignalController<
hPlusGroup = TelephonyIcons.H_PLUS; hPlusGroup = TelephonyIcons.H_PLUS;
} }
mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_HSDPA, hGroup); mNetworkToIconLookup.put(toIconKey(TelephonyManager.NETWORK_TYPE_HSDPA), hGroup);
mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_HSUPA, hGroup); mNetworkToIconLookup.put(toIconKey(TelephonyManager.NETWORK_TYPE_HSUPA), hGroup);
mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_HSPA, hGroup); mNetworkToIconLookup.put(toIconKey(TelephonyManager.NETWORK_TYPE_HSPA), hGroup);
mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_HSPAP, hPlusGroup); mNetworkToIconLookup.put(toIconKey(TelephonyManager.NETWORK_TYPE_HSPAP), hPlusGroup);
if (mConfig.show4gForLte) { if (mConfig.show4gForLte) {
mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_LTE, TelephonyIcons.FOUR_G); mNetworkToIconLookup.put(toIconKey(TelephonyManager.NETWORK_TYPE_LTE),
TelephonyIcons.FOUR_G);
if (mConfig.hideLtePlus) { if (mConfig.hideLtePlus) {
mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_LTE_CA, mNetworkToIconLookup.put(toIconKeyCA(TelephonyManager.NETWORK_TYPE_LTE),
TelephonyIcons.FOUR_G); TelephonyIcons.FOUR_G);
} else { } else {
mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_LTE_CA, mNetworkToIconLookup.put(toIconKeyCA(TelephonyManager.NETWORK_TYPE_LTE),
TelephonyIcons.FOUR_G_PLUS); TelephonyIcons.FOUR_G_PLUS);
} }
} else { } else {
mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_LTE, TelephonyIcons.LTE); mNetworkToIconLookup.put(toIconKey(TelephonyManager.NETWORK_TYPE_LTE),
TelephonyIcons.LTE);
if (mConfig.hideLtePlus) { if (mConfig.hideLtePlus) {
mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_LTE_CA, mNetworkToIconLookup.put(toIconKeyCA(TelephonyManager.NETWORK_TYPE_LTE),
TelephonyIcons.LTE); TelephonyIcons.LTE);
} else { } else {
mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_LTE_CA, mNetworkToIconLookup.put(toIconKeyCA(TelephonyManager.NETWORK_TYPE_LTE),
TelephonyIcons.LTE_PLUS); TelephonyIcons.LTE_PLUS);
} }
} }
mNetworkToIconLookup.put(NETWORK_TYPE_LTE_CA_5GE, mNetworkToIconLookup.put(toIconKeyCAPlus(TelephonyManager.NETWORK_TYPE_LTE),
TelephonyIcons.LTE_CA_5G_E); TelephonyIcons.LTE_CA_5G_E);
mNetworkToIconLookup.put(TelephonyManager.NETWORK_TYPE_IWLAN, TelephonyIcons.WFC); mNetworkToIconLookup.put(toIconKey(TelephonyManager.NETWORK_TYPE_IWLAN),
TelephonyIcons.WFC);
}
private String getIconKey() {
if (mCA) {
return toIconKeyCA(mDataNetType);
} else if (mCAPlus) {
return toIconKeyCAPlus(mDataNetType);
} else {
return toIconKey(mDataNetType);
}
}
// Some specific carriers have 5GE network which is special CA network.
private String toIconKeyCAPlus(@Annotation.NetworkType int networkType) {
return toIconKeyCA(networkType) + "_Plus";
}
private String toIconKeyCA(@Annotation.NetworkType int networkType) {
return toIconKey(networkType) + "_CA";
}
private String toIconKey(@Annotation.NetworkType int networkType) {
return Integer.toString(networkType);
} }
private void updateInflateSignalStrength() { private void updateInflateSignalStrength() {
@@ -520,10 +556,11 @@ public class MobileSignalController extends SignalController<
nr5GIconGroup = adjustNr5GIconGroupByDisplayGraceTime(nr5GIconGroup); nr5GIconGroup = adjustNr5GIconGroupByDisplayGraceTime(nr5GIconGroup);
} }
String iconKey = getIconKey();
if (nr5GIconGroup != null) { if (nr5GIconGroup != null) {
mCurrentState.iconGroup = nr5GIconGroup; mCurrentState.iconGroup = nr5GIconGroup;
} else if (mNetworkToIconLookup.indexOfKey(mDataNetType) >= 0) { } else if (mNetworkToIconLookup.get(iconKey) != null) {
mCurrentState.iconGroup = mNetworkToIconLookup.get(mDataNetType); mCurrentState.iconGroup = mNetworkToIconLookup.get(iconKey);
} else { } else {
mCurrentState.iconGroup = mDefaultIcons; mCurrentState.iconGroup = mDefaultIcons;
} }
@@ -676,6 +713,8 @@ public class MobileSignalController extends SignalController<
pw.println(" mSignalStrength=" + mSignalStrength + ","); pw.println(" mSignalStrength=" + mSignalStrength + ",");
pw.println(" mDataState=" + mDataState + ","); pw.println(" mDataState=" + mDataState + ",");
pw.println(" mDataNetType=" + mDataNetType + ","); pw.println(" mDataNetType=" + mDataNetType + ",");
pw.println(" mCA=" + mCA + ",");
pw.println(" mCAPlus=" + mCAPlus + ",");
pw.println(" mInflateSignalStrengths=" + mInflateSignalStrengths + ","); pw.println(" mInflateSignalStrengths=" + mInflateSignalStrengths + ",");
pw.println(" isDataDisabled=" + isDataDisabled() + ","); pw.println(" isDataDisabled=" + isDataDisabled() + ",");
pw.println(" mIsShowingIconGracefully=" + mIsShowingIconGracefully + ","); pw.println(" mIsShowingIconGracefully=" + mIsShowingIconGracefully + ",");
@@ -722,11 +761,13 @@ public class MobileSignalController extends SignalController<
private void updateDataNetType(int networkType) { private void updateDataNetType(int networkType) {
mDataNetType = networkType; mDataNetType = networkType;
mCA = false;
mCAPlus = false;
if (mDataNetType == TelephonyManager.NETWORK_TYPE_LTE) { if (mDataNetType == TelephonyManager.NETWORK_TYPE_LTE) {
if (isCarrierSpecificDataIcon()) { if (isCarrierSpecificDataIcon()) {
mDataNetType = NETWORK_TYPE_LTE_CA_5GE; mCAPlus = true;
} else if (mServiceState != null && mServiceState.isUsingCarrierAggregation()) { } else if (mServiceState != null && mServiceState.isUsingCarrierAggregation()) {
mDataNetType = TelephonyManager.NETWORK_TYPE_LTE_CA; mCA = true;
} }
} }
} }