Merge "Cleaned up the deprecated APIs" into udc-dev
diff --git a/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java b/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java
index a23d0b7..f9973e6 100644
--- a/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java
+++ b/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java
@@ -180,6 +180,7 @@
private boolean mRequiresVoLteEnabled;
private boolean mLtePreferredAfterNrFailure;
private boolean mTryCsWhenPsFails;
+ private boolean mTryEpsFallback;
private int mModemCount;
/** Indicates whether this instance is deactivated. */
@@ -566,6 +567,7 @@
onWwanNetworkTypeSelected(mCsNetworkType);
}
} else if (psAvailable) {
+ mTryEpsFallback = (mPsNetworkType == NGRAN) && isEpsFallbackAvailable();
if (!mRequiresImsRegistration || isImsRegisteredWithVoiceCapability()) {
onWwanNetworkTypeSelected(mPsNetworkType);
} else if (isDeactivatedSim()) {
@@ -574,6 +576,7 @@
} else {
// Carrier configuration requires IMS registration for emergency services over PS,
// but not registered. Try CS emergency call.
+ mTryEpsFallback = false;
requestScan(true, true);
}
} else if (csAvailable) {
@@ -585,6 +588,7 @@
// but not registered. Try CS emergency call.
requestScan(true, true);
} else {
+ mTryEpsFallback = isEpsFallbackAvailable();
requestScan(true);
}
}
@@ -622,7 +626,10 @@
mCancelSignal = new CancellationSignal();
// In case dialing over Wi-Fi has failed, do not the change the domain preference.
- if (!wifiFailed) mLastPreferredNetworks = getNextPreferredNetworks(csPreferred);
+ if (!wifiFailed) {
+ mLastPreferredNetworks = getNextPreferredNetworks(csPreferred, mTryEpsFallback);
+ }
+ mTryEpsFallback = false;
if (isInRoaming()
&& (mPreferredNetworkScanType == DomainSelectionService.SCAN_TYPE_FULL_SERVICE)) {
@@ -654,10 +661,12 @@
* Gets the list of preferred network type for the new scan request.
*
* @param csPreferred Indicates whether CS preferred scan is requested.
+ * @param tryEpsFallback Indicates whether scan requested for EPS fallback.
* @return The list of preferred network types.
*/
@VisibleForTesting
- public @RadioAccessNetworkType List<Integer> getNextPreferredNetworks(boolean csPreferred) {
+ public @RadioAccessNetworkType List<Integer> getNextPreferredNetworks(boolean csPreferred,
+ boolean tryEpsFallback) {
if (mRequiresVoLteEnabled && !isAdvancedCallingSettingEnabled()) {
// Emergency call over IMS is not supported.
logi("getNextPreferredNetworks VoLte setting is not enabled.");
@@ -670,10 +679,10 @@
int psPriority = domains.indexOf(DOMAIN_PS_3GPP);
int csPriority = domains.indexOf(DOMAIN_CS);
logi("getNextPreferredNetworks psPriority=" + psPriority + ", csPriority=" + csPriority
- + ", csPreferred=" + csPreferred
+ + ", csPreferred=" + csPreferred + ", epsFallback=" + tryEpsFallback
+ ", lastNetworkType=" + accessNetworkTypeToString(mLastNetworkType));
- if (!csPreferred && mLastNetworkType == UNKNOWN) {
+ if (!csPreferred && (mLastNetworkType == UNKNOWN || tryEpsFallback)) {
// Generate the list per the domain preference.
if (psPriority == NOT_SUPPORTED && csPriority == NOT_SUPPORTED) {
@@ -695,11 +704,17 @@
preferredNetworks = generatePreferredNetworks(getCsNetworkTypeConfiguration(),
getImsNetworkTypeConfiguration());
}
+
+ // Make NGRAN have the lowest priority
+ if (tryEpsFallback && preferredNetworks.contains(NGRAN)) {
+ preferredNetworks.remove(Integer.valueOf(NGRAN));
+ preferredNetworks.add(NGRAN);
+ }
} else if (csPreferred || mLastNetworkType == EUTRAN || mLastNetworkType == NGRAN) {
if (!csPreferred && mLastNetworkType == NGRAN && mLtePreferredAfterNrFailure) {
// LTE is preferred after dialing over NR failed.
List<Integer> imsRats = getImsNetworkTypeConfiguration();
- imsRats.remove(new Integer(NGRAN));
+ imsRats.remove(Integer.valueOf(NGRAN));
preferredNetworks = generatePreferredNetworks(imsRats,
getCsNetworkTypeConfiguration());
} else if (csPriority > NOT_SUPPORTED) {
@@ -870,6 +885,17 @@
return UNKNOWN;
}
+ private boolean isEpsFallbackAvailable() {
+ EmergencyRegResult regResult = mSelectionAttributes.getEmergencyRegResult();
+ if (regResult == null) return false;
+
+ List<Integer> ratList = getImsNetworkTypeConfiguration();
+ if (ratList.contains(EUTRAN)) {
+ return (regResult.getNwProvidedEmf() > 0);
+ }
+ return false;
+ }
+
/**
* Determines whether the SIM is a deactivated one.
*
diff --git a/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java b/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java
index 673e586..6c7f220 100644
--- a/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java
+++ b/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java
@@ -18,6 +18,7 @@
import static android.telephony.AccessNetworkConstants.AccessNetworkType.EUTRAN;
import static android.telephony.AccessNetworkConstants.AccessNetworkType.GERAN;
+import static android.telephony.AccessNetworkConstants.AccessNetworkType.NGRAN;
import static android.telephony.AccessNetworkConstants.AccessNetworkType.UNKNOWN;
import static android.telephony.AccessNetworkConstants.AccessNetworkType.UTRAN;
import static android.telephony.BarringInfo.BARRING_SERVICE_TYPE_EMERGENCY;
@@ -1240,7 +1241,7 @@
setupForScanListTest(bundle);
- verifyCsPreferredScanList(mDomainSelector.getNextPreferredNetworks(false));
+ verifyCsPreferredScanList(mDomainSelector.getNextPreferredNetworks(false, false));
}
@Test
@@ -1254,7 +1255,7 @@
setupForScanListTest(bundle);
- verifyPsPreferredScanList(mDomainSelector.getNextPreferredNetworks(false));
+ verifyPsPreferredScanList(mDomainSelector.getNextPreferredNetworks(false, false));
}
@Test
@@ -1269,7 +1270,7 @@
setupForScanListTest(bundle);
- verifyPsOnlyScanList(mDomainSelector.getNextPreferredNetworks(false));
+ verifyPsOnlyScanList(mDomainSelector.getNextPreferredNetworks(false, false));
}
@Test
@@ -1284,7 +1285,7 @@
setupForScanListTest(bundle);
- verifyCsOnlyScanList(mDomainSelector.getNextPreferredNetworks(false));
+ verifyCsOnlyScanList(mDomainSelector.getNextPreferredNetworks(false, false));
}
@@ -1299,7 +1300,7 @@
setupForScanListTest(bundle);
- verifyCsPreferredScanList(mDomainSelector.getNextPreferredNetworks(true));
+ verifyCsPreferredScanList(mDomainSelector.getNextPreferredNetworks(true, false));
}
@Test
@@ -1313,7 +1314,7 @@
setupForScanListTest(bundle);
- verifyCsPreferredScanList(mDomainSelector.getNextPreferredNetworks(true));
+ verifyCsPreferredScanList(mDomainSelector.getNextPreferredNetworks(true, false));
}
@Test
@@ -1329,7 +1330,7 @@
setupForScanListTest(bundle);
- verifyPsOnlyScanList(mDomainSelector.getNextPreferredNetworks(true));
+ verifyPsOnlyScanList(mDomainSelector.getNextPreferredNetworks(true, false));
}
@Test
@@ -1344,7 +1345,7 @@
setupForScanListTest(bundle);
- verifyCsOnlyScanList(mDomainSelector.getNextPreferredNetworks(true));
+ verifyCsOnlyScanList(mDomainSelector.getNextPreferredNetworks(true, false));
}
@Test
@@ -1361,7 +1362,7 @@
bindImsService();
processAllMessages();
- verifyCsPreferredScanList(mDomainSelector.getNextPreferredNetworks(false));
+ verifyCsPreferredScanList(mDomainSelector.getNextPreferredNetworks(false, false));
}
@Test
@@ -1378,7 +1379,7 @@
bindImsService();
processAllMessages();
- verifyCsPreferredScanList(mDomainSelector.getNextPreferredNetworks(false));
+ verifyCsPreferredScanList(mDomainSelector.getNextPreferredNetworks(false, false));
}
@Test
@@ -1396,7 +1397,7 @@
bindImsService();
processAllMessages();
- verifyPsOnlyScanList(mDomainSelector.getNextPreferredNetworks(false));
+ verifyPsOnlyScanList(mDomainSelector.getNextPreferredNetworks(false, false));
}
@Test
@@ -1413,7 +1414,7 @@
bindImsService();
processAllMessages();
- verifyCsPreferredScanList(mDomainSelector.getNextPreferredNetworks(true));
+ verifyCsPreferredScanList(mDomainSelector.getNextPreferredNetworks(true, false));
}
@Test
@@ -1430,7 +1431,7 @@
bindImsService();
processAllMessages();
- verifyCsPreferredScanList(mDomainSelector.getNextPreferredNetworks(true));
+ verifyCsPreferredScanList(mDomainSelector.getNextPreferredNetworks(true, false));
}
@Test
@@ -1449,7 +1450,32 @@
bindImsService();
processAllMessages();
- verifyPsOnlyScanList(mDomainSelector.getNextPreferredNetworks(true));
+ verifyPsOnlyScanList(mDomainSelector.getNextPreferredNetworks(true, false));
+ }
+
+ @Test
+ public void testEpsFallbackThenCsPreference() throws Exception {
+ PersistableBundle bundle = getDefaultPersistableBundle();
+ int[] domainPreference = new int[] {
+ CarrierConfigManager.ImsEmergency.DOMAIN_PS_3GPP,
+ CarrierConfigManager.ImsEmergency.DOMAIN_CS,
+ };
+ bundle.putIntArray(KEY_EMERGENCY_DOMAIN_PREFERENCE_INT_ARRAY, domainPreference);
+ bundle.putIntArray(KEY_EMERGENCY_OVER_IMS_SUPPORTED_3GPP_NETWORK_TYPES_INT_ARRAY,
+ new int[] { NGRAN, EUTRAN });
+
+ setupForScanListTest(bundle);
+
+ List<Integer> networks = mDomainSelector.getNextPreferredNetworks(false, true);
+
+ assertFalse(networks.isEmpty());
+ assertTrue(networks.contains(EUTRAN));
+ assertTrue(networks.contains(NGRAN));
+ assertTrue(networks.contains(UTRAN));
+ assertTrue(networks.contains(GERAN));
+ assertTrue(networks.indexOf(EUTRAN) < networks.indexOf(UTRAN));
+ assertTrue(networks.indexOf(UTRAN) < networks.indexOf(GERAN));
+ assertTrue(networks.indexOf(GERAN) < networks.indexOf(NGRAN));
}
private void setupForScanListTest(PersistableBundle bundle) throws Exception {