Merge "The Settings ANR when allowed network type never was loaded" into sc-dev
diff --git a/src/java/com/android/internal/telephony/Phone.java b/src/java/com/android/internal/telephony/Phone.java
index 9230df8..93a2e8e 100644
--- a/src/java/com/android/internal/telephony/Phone.java
+++ b/src/java/com/android/internal/telephony/Phone.java
@@ -2315,7 +2315,6 @@
* Loads the allowed network type from subscription database.
*/
public void loadAllowedNetworksFromSubscriptionDatabase() {
- mIsAllowedNetworkTypesLoadedFromDb = false;
// Try to load ALLOWED_NETWORK_TYPES from SIMINFO.
if (SubscriptionController.getInstance() == null) {
return;
@@ -2324,6 +2323,8 @@
String result = SubscriptionController.getInstance().getSubscriptionProperty(
getSubId(),
SubscriptionManager.ALLOWED_NETWORK_TYPES);
+ // After fw load network type from DB, do unlock if subId is valid.
+ mIsAllowedNetworkTypesLoadedFromDb = SubscriptionManager.isValidSubscriptionId(getSubId());
if (result == null) {
return;
}
@@ -2355,7 +2356,6 @@
}
}
}
- mIsAllowedNetworkTypesLoadedFromDb = true;
} catch (NumberFormatException e) {
Rlog.e(LOG_TAG, "allowedNetworkTypes NumberFormat exception" + e);
}
@@ -2426,12 +2426,18 @@
int subId = getSubId();
if (!TelephonyManager.isValidAllowedNetworkTypesReason(reason)) {
loge("setAllowedNetworkTypes: Invalid allowed network type reason: " + reason);
+ AsyncResult.forMessage(response, null,
+ new CommandException(CommandException.Error.INVALID_ARGUMENTS));
+ response.sendToTarget();
return;
}
if (!SubscriptionManager.isUsableSubscriptionId(subId)
|| !mIsAllowedNetworkTypesLoadedFromDb) {
loge("setAllowedNetworkTypes: no sim or network type is not loaded. SubscriptionId: "
+ subId + ", isNetworkTypeLoaded" + mIsAllowedNetworkTypesLoadedFromDb);
+ AsyncResult.forMessage(response, null,
+ new CommandException(CommandException.Error.MISSING_RESOURCE));
+ response.sendToTarget();
return;
}
String mapAsString = "";
@@ -5037,4 +5043,16 @@
private static String pii(String s) {
return Rlog.pii(LOG_TAG, s);
}
+
+ /**
+ * Used in unit tests to set whether the AllowedNetworkTypes is loaded from Db. Should not
+ * be used otherwise.
+ *
+ * @return {@code true} if the AllowedNetworkTypes is loaded from Db,
+ * {@code false} otherwise.
+ */
+ @VisibleForTesting
+ public boolean isAllowedNetworkTypesLoadedFromDb() {
+ return mIsAllowedNetworkTypesLoadedFromDb;
+ }
}
diff --git a/tests/telephonytests/src/com/android/internal/telephony/GsmCdmaPhoneTest.java b/tests/telephonytests/src/com/android/internal/telephony/GsmCdmaPhoneTest.java
index e56ed3e..2f98164 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/GsmCdmaPhoneTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/GsmCdmaPhoneTest.java
@@ -1622,4 +1622,33 @@
assertEquals(LinkCapacityEstimate.INVALID, lce3.getUplinkCapacityKbps());
assertEquals(LinkCapacityEstimate.LCE_TYPE_COMBINED, lce3.getType());
}
+
+ @Test
+ @SmallTest
+ public void testLoadAllowedNetworksFromSubscriptionDatabase_loadTheNullValue_isLoadedTrue() {
+ int subId = 1;
+ doReturn(subId).when(mSubscriptionController).getSubIdUsingPhoneId(anyInt());
+
+ doReturn(null).when(mSubscriptionController).getSubscriptionProperty(anyInt(),
+ eq(SubscriptionManager.ALLOWED_NETWORK_TYPES));
+
+ mPhoneUT.loadAllowedNetworksFromSubscriptionDatabase();
+
+ assertEquals(true, mPhoneUT.isAllowedNetworkTypesLoadedFromDb());
+ }
+
+ @Test
+ @SmallTest
+ public void testLoadAllowedNetworksFromSubscriptionDatabase_subIdNotValid_isLoadedFalse() {
+ int subId = -1;
+ doReturn(subId).when(mSubscriptionController).getSubIdUsingPhoneId(anyInt());
+
+ when(mSubscriptionController.getSubscriptionProperty(anyInt(),
+ eq(SubscriptionManager.ALLOWED_NETWORK_TYPES))).thenReturn(null);
+
+
+ mPhoneUT.loadAllowedNetworksFromSubscriptionDatabase();
+
+ assertEquals(false, mPhoneUT.isAllowedNetworkTypesLoadedFromDb());
+ }
}