[Settings] DataUsage crash when no SIM inserted
Check for null pointer when looking up subcription id. Bug: 148175728 Test: m RunSettingsRoboTests -j ROBOTEST_FILTER=DataUsageUtilsTest Change-Id: Icc1314d262f1af686134dcf6a0b187adfc3eb4df Merged-In: I4e893fc7de4a3292b3949860ebb59fbe52ac1a8f
This commit is contained in:
@@ -66,7 +66,7 @@ public final class DataUsageUtils extends com.android.settingslib.net.DataUsageU
|
||||
return SystemProperties.get(DataUsageUtils.TEST_RADIOS_PROP).contains(ETHERNET);
|
||||
}
|
||||
|
||||
final ConnectivityManager conn = ConnectivityManager.from(context);
|
||||
final ConnectivityManager conn = context.getSystemService(ConnectivityManager.class);
|
||||
if (!conn.isNetworkSupported(ConnectivityManager.TYPE_ETHERNET)) {
|
||||
return false;
|
||||
}
|
||||
@@ -93,7 +93,8 @@ public final class DataUsageUtils extends com.android.settingslib.net.DataUsageU
|
||||
* TODO: This is the opposite to Utils.isWifiOnly(), it should be refactored into 1 method.
|
||||
*/
|
||||
public static boolean hasMobileData(Context context) {
|
||||
ConnectivityManager connectivityManager = ConnectivityManager.from(context);
|
||||
final ConnectivityManager connectivityManager =
|
||||
context.getSystemService(ConnectivityManager.class);
|
||||
return connectivityManager != null && connectivityManager
|
||||
.isNetworkSupported(ConnectivityManager.TYPE_MOBILE);
|
||||
}
|
||||
@@ -106,7 +107,8 @@ public final class DataUsageUtils extends com.android.settingslib.net.DataUsageU
|
||||
return SystemProperties.get(DataUsageUtils.TEST_RADIOS_PROP).contains("mobile");
|
||||
}
|
||||
final List<SubscriptionInfo> subInfoList =
|
||||
SubscriptionManager.from(context).getActiveSubscriptionInfoList();
|
||||
context.getSystemService(SubscriptionManager.class)
|
||||
.getActiveSubscriptionInfoList();
|
||||
// No activated Subscriptions
|
||||
if (subInfoList == null) {
|
||||
if (LOGD) {
|
||||
@@ -123,7 +125,7 @@ public final class DataUsageUtils extends com.android.settingslib.net.DataUsageU
|
||||
Log.d(TAG, "hasReadyMobileRadio: subInfo=" + subInfo);
|
||||
}
|
||||
}
|
||||
final ConnectivityManager conn = ConnectivityManager.from(context);
|
||||
final ConnectivityManager conn = context.getSystemService(ConnectivityManager.class);
|
||||
final boolean retVal = conn.isNetworkSupported(TYPE_MOBILE) && isReady;
|
||||
if (LOGD) {
|
||||
Log.d(TAG, "hasReadyMobileRadio:"
|
||||
@@ -142,7 +144,8 @@ public final class DataUsageUtils extends com.android.settingslib.net.DataUsageU
|
||||
return SystemProperties.get(TEST_RADIOS_PROP).contains("wifi");
|
||||
}
|
||||
|
||||
final ConnectivityManager connectivityManager = ConnectivityManager.from(context);
|
||||
final ConnectivityManager connectivityManager =
|
||||
context.getSystemService(ConnectivityManager.class);
|
||||
return connectivityManager != null && connectivityManager.isNetworkSupported(TYPE_WIFI);
|
||||
}
|
||||
|
||||
@@ -159,19 +162,25 @@ public final class DataUsageUtils extends com.android.settingslib.net.DataUsageU
|
||||
* SubscriptionManager#INVALID_SUBSCRIPTION_ID
|
||||
*/
|
||||
public static int getDefaultSubscriptionId(Context context) {
|
||||
SubscriptionManager subManager = SubscriptionManager.from(context);
|
||||
if (subManager == null) {
|
||||
final SubscriptionManager subscriptionMgr =
|
||||
context.getSystemService(SubscriptionManager.class);
|
||||
|
||||
// default data subscription is first choice
|
||||
final int dataSubId = subscriptionMgr.getDefaultDataSubscriptionId();
|
||||
if (SubscriptionManager.isValidSubscriptionId(dataSubId)) {
|
||||
return dataSubId;
|
||||
}
|
||||
|
||||
// any active subscription is second choice
|
||||
List<SubscriptionInfo> subList = subscriptionMgr.getActiveSubscriptionInfoList();
|
||||
if ((subList == null) || (subList.size() <= 0)) {
|
||||
// any subscription is third choice
|
||||
subList = subscriptionMgr.getAvailableSubscriptionInfoList();
|
||||
}
|
||||
if ((subList == null) || (subList.size() <= 0)) {
|
||||
return SubscriptionManager.INVALID_SUBSCRIPTION_ID;
|
||||
}
|
||||
SubscriptionInfo subscriptionInfo = subManager.getDefaultDataSubscriptionInfo();
|
||||
if (subscriptionInfo == null) {
|
||||
List<SubscriptionInfo> list = subManager.getAllSubscriptionInfoList();
|
||||
if (list.size() == 0) {
|
||||
return SubscriptionManager.INVALID_SUBSCRIPTION_ID;
|
||||
}
|
||||
subscriptionInfo = list.get(0);
|
||||
}
|
||||
return subscriptionInfo.getSubscriptionId();
|
||||
return subList.get(0).getSubscriptionId();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -179,7 +188,7 @@ public final class DataUsageUtils extends com.android.settingslib.net.DataUsageU
|
||||
* ethernet template if both mobile data and Wifi are not available.
|
||||
*/
|
||||
public static NetworkTemplate getDefaultTemplate(Context context, int defaultSubId) {
|
||||
if (hasMobileData(context) && defaultSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
|
||||
if (SubscriptionManager.isValidSubscriptionId(defaultSubId) && hasMobileData(context)) {
|
||||
return getMobileTemplate(context, defaultSubId);
|
||||
} else if (hasWifiRadio(context)) {
|
||||
return NetworkTemplate.buildTemplateWifiWildcard();
|
||||
|
Reference in New Issue
Block a user