diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-10-06 01:07:12 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-10-06 01:07:12 +0000 |
commit | eb049b9fadb067764ea9cf51ed554d0bcbed2205 (patch) | |
tree | 14d6f4913c17b62fee0eec7dc159b5bd18616faa | |
parent | aa80ee2f9c8927d208499b74015c4ec7bcb87f19 (diff) | |
parent | c448c6013157c3a329161d9ab1daa42babb20e73 (diff) | |
download | telephony-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.java | 22 | ||||
-rw-r--r-- | tests/telephonytests/src/com/android/internal/telephony/emergency/EmergencyNumberTrackerTest.java | 43 |
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(); |