aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2021-10-06 01:07:12 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2021-10-06 01:07:12 +0000
commiteb049b9fadb067764ea9cf51ed554d0bcbed2205 (patch)
tree14d6f4913c17b62fee0eec7dc159b5bd18616faa
parentaa80ee2f9c8927d208499b74015c4ec7bcb87f19 (diff)
parentc448c6013157c3a329161d9ab1daa42babb20e73 (diff)
downloadtelephony-eb049b9fadb067764ea9cf51ed554d0bcbed2205.tar.gz
Snap for 7796451 from c448c6013157c3a329161d9ab1daa42babb20e73 to sc-qpr1-release
Change-Id: I2137ef29876c661c2341cfc3037aa4639dba3f88
-rw-r--r--src/java/com/android/internal/telephony/emergency/EmergencyNumberTracker.java22
-rw-r--r--tests/telephonytests/src/com/android/internal/telephony/emergency/EmergencyNumberTrackerTest.java43
2 files changed, 62 insertions, 3 deletions
diff --git a/src/java/com/android/internal/telephony/emergency/EmergencyNumberTracker.java b/src/java/com/android/internal/telephony/emergency/EmergencyNumberTracker.java
index fb892e4fd4..afd8a4048e 100644
--- a/src/java/com/android/internal/telephony/emergency/EmergencyNumberTracker.java
+++ b/src/java/com/android/internal/telephony/emergency/EmergencyNumberTracker.java
@@ -30,6 +30,7 @@ import android.os.SystemProperties;
import android.telephony.CarrierConfigManager;
import android.telephony.PhoneNumberUtils;
import android.telephony.ServiceState;
+import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.telephony.emergency.EmergencyNumber;
import android.telephony.emergency.EmergencyNumber.EmergencyCallRouting;
@@ -262,6 +263,22 @@ public class EmergencyNumberTracker extends Handler {
return false;
}
+ /**
+ * Checks if it's sim absent to decide whether to apply sim-absent emergency numbers from 3gpp
+ */
+ @VisibleForTesting
+ public boolean isSimAbsent() {
+ for (Phone phone: PhoneFactory.getPhones()) {
+ int slotId = SubscriptionController.getInstance().getSlotIndex(phone.getSubId());
+ // If slot id is invalid, it means that there is no sim card.
+ if (slotId != SubscriptionManager.INVALID_SIM_SLOT_INDEX) {
+ // If there is at least one sim active, sim is not absent; it returns false.
+ return false;
+ }
+ }
+ return true;
+ }
+
private void initializeDatabaseEmergencyNumberList() {
// If country iso has been cached when listener is set, don't need to cache the initial
// country iso and initial database.
@@ -859,7 +876,7 @@ public class EmergencyNumberTracker extends Handler {
emergencyNumberList.add(getLabeledEmergencyNumberForEcclist(emergencyNum));
}
}
- emergencyNumbers = ((slotId < 0) ? "112,911,000,08,110,118,119,999" : "112,911");
+ emergencyNumbers = ((isSimAbsent()) ? "112,911,000,08,110,118,119,999" : "112,911");
for (String emergencyNum : emergencyNumbers.split(",")) {
emergencyNumberList.add(getLabeledEmergencyNumberForEcclist(emergencyNum));
}
@@ -1015,10 +1032,9 @@ public class EmergencyNumberTracker extends Handler {
logd("System property doesn't provide any emergency numbers."
+ " Use embedded logic for determining ones.");
- // If slot id is invalid, means that there is no sim card.
// According spec 3GPP TS22.101, the following numbers should be
// ECC numbers when SIM/USIM is not present.
- emergencyNumbers = ((slotId < 0) ? "112,911,000,08,110,118,119,999" : "112,911");
+ emergencyNumbers = ((isSimAbsent()) ? "112,911,000,08,110,118,119,999" : "112,911");
for (String emergencyNum : emergencyNumbers.split(",")) {
if (useExactMatch) {
diff --git a/tests/telephonytests/src/com/android/internal/telephony/emergency/EmergencyNumberTrackerTest.java b/tests/telephonytests/src/com/android/internal/telephony/emergency/EmergencyNumberTrackerTest.java
index 2aa3f18900..29f2dabc8d 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/emergency/EmergencyNumberTrackerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/emergency/EmergencyNumberTrackerTest.java
@@ -20,10 +20,12 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.eq;
import android.os.AsyncResult;
import android.os.Environment;
import android.os.ParcelFileDescriptor;
+import android.telephony.SubscriptionManager;
import android.telephony.emergency.EmergencyNumber;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
@@ -33,6 +35,7 @@ import androidx.test.InstrumentationRegistry;
import com.android.internal.telephony.HalVersion;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneFactory;
+import com.android.internal.telephony.SubscriptionController;
import com.android.internal.telephony.TelephonyTest;
import org.junit.After;
@@ -84,6 +87,14 @@ public class EmergencyNumberTrackerTest extends TelephonyTest {
EmergencyNumber.EMERGENCY_CALL_ROUTING_UNKNOWN);
private static final int OTA_UNIT_TEST_EMERGENCY_NUMBER_DB_VERSION = 999999;
private static final String OTA_EMERGENCY_NUMBER_ADDRESS = "98765";
+ private static final int SUB_ID_PHONE_1 = 1;
+ private static final int SUB_ID_PHONE_2 = 2;
+ private static final int VALID_SLOT_INDEX_VALID_1 = 1;
+ private static final int VALID_SLOT_INDEX_VALID_2 = 2;
+ private static final int INVALID_SLOT_INDEX_VALID = SubscriptionManager.INVALID_SIM_SLOT_INDEX;
+
+ @Mock
+ private SubscriptionController mSubControllerMock;
@Mock
private Phone mPhone2; // mPhone as phone 1 is already defined in TelephonyTest.
@@ -107,9 +118,11 @@ public class EmergencyNumberTrackerTest extends TelephonyTest {
doReturn(mContext).when(mPhone).getContext();
doReturn(0).when(mPhone).getPhoneId();
+ doReturn(SUB_ID_PHONE_1).when(mPhone).getSubId();
doReturn(mContext).when(mPhone2).getContext();
doReturn(1).when(mPhone2).getPhoneId();
+ doReturn(SUB_ID_PHONE_2).when(mPhone2).getSubId();
initializeEmergencyNumberListTestSamples();
mEmergencyNumberTrackerMock = new EmergencyNumberTracker(mPhone, mSimulatedCommands);
@@ -248,6 +261,36 @@ public class EmergencyNumberTrackerTest extends TelephonyTest {
replaceInstance(PhoneFactory.class, "sPhones", null, mPhones);
}
+ /**
+ * Test EmergencyNumberTracker.isSimAbsent().
+ */
+ @Test
+ public void testIsSimAbsent() throws Exception {
+ setDsdsPhones();
+ replaceInstance(SubscriptionController.class, "sInstance", null, mSubControllerMock);
+
+ // Both sim slots are active
+ doReturn(VALID_SLOT_INDEX_VALID_1).when(mSubControllerMock).getSlotIndex(
+ eq(SUB_ID_PHONE_1));
+ doReturn(VALID_SLOT_INDEX_VALID_2).when(mSubControllerMock).getSlotIndex(
+ eq(SUB_ID_PHONE_2));
+ assertFalse(mEmergencyNumberTrackerMock.isSimAbsent());
+
+ // One sim slot is active; the other one is not active
+ doReturn(VALID_SLOT_INDEX_VALID_1).when(mSubControllerMock).getSlotIndex(
+ eq(SUB_ID_PHONE_1));
+ doReturn(INVALID_SLOT_INDEX_VALID).when(mSubControllerMock).getSlotIndex(
+ eq(SUB_ID_PHONE_2));
+ assertFalse(mEmergencyNumberTrackerMock.isSimAbsent());
+
+ // Both sim slots are not active
+ doReturn(INVALID_SLOT_INDEX_VALID).when(mSubControllerMock).getSlotIndex(
+ eq(SUB_ID_PHONE_1));
+ doReturn(INVALID_SLOT_INDEX_VALID).when(mSubControllerMock).getSlotIndex(
+ eq(SUB_ID_PHONE_2));
+ assertTrue(mEmergencyNumberTrackerMock.isSimAbsent());
+ }
+
@Test
public void testEmergencyNumberListFromRadio() throws Exception {
sendEmergencyNumberListFromRadio();