Merge "DSDA: Set call EXTRA if either sub doesn't allow hold" into main
diff --git a/ecc/input/eccdata.txt b/ecc/input/eccdata.txt
index fe11383..c4edc9e 100644
--- a/ecc/input/eccdata.txt
+++ b/ecc/input/eccdata.txt
@@ -2359,77 +2359,6 @@
types: POLICE
types: AMBULANCE
types: FIRE
- routing: EMERGENCY
- }
- eccs {
- phone_number: "984"
- types: TYPE_UNSPECIFIED
- routing: EMERGENCY
- }
- eccs {
- phone_number: "985"
- types: MOUNTAIN_RESCUE
- routing: EMERGENCY
- }
- eccs {
- phone_number: "986"
- types: POLICE
- routing: EMERGENCY
- }
- eccs {
- phone_number: "997"
- types: POLICE
- routing: EMERGENCY
- }
- eccs {
- phone_number: "998"
- types: FIRE
- routing: EMERGENCY
- }
- eccs {
- phone_number: "999"
- types: AMBULANCE
- routing: EMERGENCY
- }
- eccs {
- phone_number: "991"
- types: TYPE_UNSPECIFIED
- routing: EMERGENCY
- }
- eccs {
- phone_number: "992"
- types: TYPE_UNSPECIFIED
- routing: EMERGENCY
- }
- eccs {
- phone_number: "993"
- types: TYPE_UNSPECIFIED
- routing: EMERGENCY
- }
- eccs {
- phone_number: "994"
- types: TYPE_UNSPECIFIED
- routing: EMERGENCY
- }
- eccs {
- phone_number: "995"
- types: TYPE_UNSPECIFIED
- routing: EMERGENCY
- }
- eccs {
- phone_number: "996"
- types: TYPE_UNSPECIFIED
- routing: EMERGENCY
- }
- eccs {
- phone_number: "987"
- types: TYPE_UNSPECIFIED
- routing: EMERGENCY
- }
- eccs {
- phone_number: "989"
- types: TYPE_UNSPECIFIED
- routing: EMERGENCY
}
ecc_fallback: "112"
}
diff --git a/ecc/output/eccdata b/ecc/output/eccdata
index 55d8151..482ed79 100644
--- a/ecc/output/eccdata
+++ b/ecc/output/eccdata
Binary files differ
diff --git a/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java b/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java
index 3d6a4d1..8c2b6a8 100644
--- a/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java
+++ b/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java
@@ -654,10 +654,11 @@
if (!csInService && !psInService) {
mPsNetworkType = getSelectablePsNetworkType(false);
logi("selectDomain limited service ps=" + accessNetworkTypeToString(mPsNetworkType));
- if (mPsNetworkType == UNKNOWN) {
- requestScan(true);
- } else {
+ // If NGRAN, request scan to trigger emergency registration.
+ if (mPsNetworkType == EUTRAN) {
onWwanNetworkTypeSelected(mPsNetworkType);
+ } else {
+ requestScan(true);
}
return;
}
@@ -1543,7 +1544,12 @@
private void selectDomainForTestEmergencyNumber() {
logi("selectDomainForTestEmergencyNumber");
if (isImsRegisteredWithVoiceCapability()) {
- onWwanNetworkTypeSelected(EUTRAN);
+ if (isImsRegisteredOverWifi()
+ || isImsRegisteredOverCrossSim()) {
+ mTransportSelectorCallback.onWlanSelected(mVoWifiOverEmergencyPdn);
+ } else {
+ onWwanNetworkTypeSelected(EUTRAN);
+ }
} else {
onWwanNetworkTypeSelected(UTRAN);
}
diff --git a/testapps/TestRcsApp/TestApp/Android.bp b/testapps/TestRcsApp/TestApp/Android.bp
index 40254af..ea62925 100644
--- a/testapps/TestRcsApp/TestApp/Android.bp
+++ b/testapps/TestRcsApp/TestApp/Android.bp
@@ -14,7 +14,7 @@
"androidx-constraintlayout_constraintlayout",
"aosp_test_rcs_client_base",
"androidx.appcompat_appcompat",
- "libphonenumber-platform"
+ "libphonenumber-platform",
],
libs: ["org.apache.http.legacy"],
@@ -25,12 +25,15 @@
sdk_version: "system_current",
min_sdk_version: "30",
- required: ["privapp-permissions-com.google.android.sample.rcsclient.xml"]
+ required: ["privapp-permissions-com.google.android.sample.rcsclient.xml"],
+ lint: {
+ baseline_filename: "lint-baseline.xml",
+ },
}
prebuilt_etc {
name: "privapp-permissions-com.google.android.sample.rcsclient.xml",
src: "etc/permissions/privapp-permissions-com.google.android.sample.rcsclient.xml",
- sub_dir:"permissions",
+ sub_dir: "permissions",
product_specific: true,
}
diff --git a/testapps/TestRcsApp/aosp_test_rcsclient/Android.bp b/testapps/TestRcsApp/aosp_test_rcsclient/Android.bp
index 34b0a12..e1de685 100644
--- a/testapps/TestRcsApp/aosp_test_rcsclient/Android.bp
+++ b/testapps/TestRcsApp/aosp_test_rcsclient/Android.bp
@@ -26,4 +26,7 @@
sdk_version: "system_current",
min_sdk_version: "30",
+ lint: {
+ baseline_filename: "lint-baseline.xml",
+ },
}
diff --git a/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java b/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java
index eab40f9..ccb59b2 100644
--- a/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java
+++ b/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java
@@ -100,6 +100,7 @@
import android.telephony.TelephonyManager;
import android.telephony.TransportSelectorCallback;
import android.telephony.WwanSelectorCallback;
+import android.telephony.emergency.EmergencyNumber;
import android.telephony.ims.ImsManager;
import android.telephony.ims.ImsMmTelManager;
import android.telephony.ims.ProvisioningManager;
@@ -119,7 +120,10 @@
import org.mockito.stubbing.Answer;
import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.function.Consumer;
/**
@@ -130,6 +134,7 @@
private static final int SLOT_0 = 0;
private static final int SLOT_0_SUB_ID = 1;
+ private static final String TEST_EMERGENCY_NUMBER = "911";
@Mock private CarrierConfigManager mCarrierConfigManager;
@Mock private ConnectivityManager mConnectivityManager;
@@ -2108,6 +2113,123 @@
assertEquals(GERAN, (int) mAccessNetwork.get(3));
}
+ @Test
+ public void testDefaultLimitedServiceEutran() throws Exception {
+ createSelector(SLOT_0_SUB_ID);
+ unsolBarringInfoChanged(false);
+
+ EmergencyRegResult regResult = getEmergencyRegResult(EUTRAN, REGISTRATION_STATE_UNKNOWN,
+ 0, false, true, 0, 0, "", "");
+ SelectionAttributes attr = getSelectionAttributes(SLOT_0, SLOT_0_SUB_ID, regResult);
+ mDomainSelector.selectDomain(attr, mTransportSelectorCallback);
+ processAllMessages();
+
+ bindImsServiceUnregistered();
+
+ verifyPsDialed();
+ }
+
+ @Test
+ public void testDefaultLimitedServiceNgran() throws Exception {
+ createSelector(SLOT_0_SUB_ID);
+ unsolBarringInfoChanged(false);
+
+ EmergencyRegResult regResult = getEmergencyRegResult(NGRAN, REGISTRATION_STATE_UNKNOWN,
+ 0, false, true, 0, 0, "", "");
+ SelectionAttributes attr = getSelectionAttributes(SLOT_0, SLOT_0_SUB_ID, regResult);
+ mDomainSelector.selectDomain(attr, mTransportSelectorCallback);
+ processAllMessages();
+
+ bindImsServiceUnregistered();
+
+ verifyScanPsPreferred();
+ }
+
+ @Test
+ public void testTestEmergencyNumberOverCs() throws Exception {
+ EmergencyNumber num = new EmergencyNumber(TEST_EMERGENCY_NUMBER, "us", "",
+ EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_POLICE, new ArrayList<String>(),
+ EmergencyNumber.EMERGENCY_NUMBER_SOURCE_TEST,
+ EmergencyNumber.EMERGENCY_CALL_ROUTING_UNKNOWN);
+
+ Map<Integer, List<EmergencyNumber>> lists = new HashMap<>();
+ List<EmergencyNumber> list = new ArrayList<>();
+ list.add(num);
+ lists.put(SLOT_0_SUB_ID, list);
+
+ doReturn(lists).when(mTelephonyManager).getEmergencyNumberList();
+
+ createSelector(SLOT_0_SUB_ID);
+ unsolBarringInfoChanged(false);
+
+ EmergencyRegResult regResult = getEmergencyRegResult(EUTRAN, REGISTRATION_STATE_UNKNOWN,
+ 0, false, true, 0, 0, "", "");
+ SelectionAttributes attr = getSelectionAttributes(SLOT_0, SLOT_0_SUB_ID, regResult);
+ mDomainSelector.selectDomain(attr, mTransportSelectorCallback);
+ processAllMessages();
+
+ bindImsServiceUnregistered();
+
+ verifyCsDialed();
+ }
+
+ @Test
+ public void testTestEmergencyNumberOverPs() throws Exception {
+ EmergencyNumber num = new EmergencyNumber(TEST_EMERGENCY_NUMBER, "us", "",
+ EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_POLICE, new ArrayList<String>(),
+ EmergencyNumber.EMERGENCY_NUMBER_SOURCE_TEST,
+ EmergencyNumber.EMERGENCY_CALL_ROUTING_UNKNOWN);
+
+ Map<Integer, List<EmergencyNumber>> lists = new HashMap<>();
+ List<EmergencyNumber> list = new ArrayList<>();
+ list.add(num);
+ lists.put(SLOT_0_SUB_ID, list);
+
+ doReturn(lists).when(mTelephonyManager).getEmergencyNumberList();
+
+ createSelector(SLOT_0_SUB_ID);
+ unsolBarringInfoChanged(false);
+
+ EmergencyRegResult regResult = getEmergencyRegResult(EUTRAN, REGISTRATION_STATE_UNKNOWN,
+ 0, false, true, 0, 0, "", "");
+ SelectionAttributes attr = getSelectionAttributes(SLOT_0, SLOT_0_SUB_ID, regResult);
+ mDomainSelector.selectDomain(attr, mTransportSelectorCallback);
+ processAllMessages();
+
+ bindImsService();
+
+ verifyPsDialed();
+ }
+
+ @Test
+ public void testTestEmergencyNumberOverWifi() throws Exception {
+ EmergencyNumber num = new EmergencyNumber(TEST_EMERGENCY_NUMBER, "us", "",
+ EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_POLICE, new ArrayList<String>(),
+ EmergencyNumber.EMERGENCY_NUMBER_SOURCE_TEST,
+ EmergencyNumber.EMERGENCY_CALL_ROUTING_UNKNOWN);
+
+ Map<Integer, List<EmergencyNumber>> lists = new HashMap<>();
+ List<EmergencyNumber> list = new ArrayList<>();
+ list.add(num);
+ lists.put(SLOT_0_SUB_ID, list);
+
+ doReturn(lists).when(mTelephonyManager).getEmergencyNumberList();
+
+ createSelector(SLOT_0_SUB_ID);
+ unsolBarringInfoChanged(false);
+
+ EmergencyRegResult regResult = getEmergencyRegResult(EUTRAN, REGISTRATION_STATE_UNKNOWN,
+ 0, false, true, 0, 0, "", "");
+ SelectionAttributes attr = getSelectionAttributes(SLOT_0, SLOT_0_SUB_ID, regResult);
+ mDomainSelector.selectDomain(attr, mTransportSelectorCallback);
+ processAllMessages();
+
+ bindImsService(true);
+ processAllMessages();
+
+ verify(mTransportSelectorCallback, times(1)).onWlanSelected(anyBoolean());
+ }
+
private void setupForScanListTest(PersistableBundle bundle) throws Exception {
setupForScanListTest(bundle, false);
}
@@ -2354,6 +2476,7 @@
EmergencyRegResult regResult) {
SelectionAttributes.Builder builder =
new SelectionAttributes.Builder(slotId, subId, SELECTOR_TYPE_CALLING)
+ .setNumber(TEST_EMERGENCY_NUMBER)
.setEmergency(true)
.setEmergencyRegResult(regResult);
return builder.build();