Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit eb049b9f authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Snap for 7796451 from c448c601 to sc-qpr1-release

Change-Id: I2137ef29876c661c2341cfc3037aa4639dba3f88
parents aa80ee2f c448c601
Loading
Loading
Loading
Loading
+19 −3
Original line number Original line Diff line number Diff line
@@ -30,6 +30,7 @@ import android.os.SystemProperties;
import android.telephony.CarrierConfigManager;
import android.telephony.CarrierConfigManager;
import android.telephony.PhoneNumberUtils;
import android.telephony.PhoneNumberUtils;
import android.telephony.ServiceState;
import android.telephony.ServiceState;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.telephony.TelephonyManager;
import android.telephony.emergency.EmergencyNumber;
import android.telephony.emergency.EmergencyNumber;
import android.telephony.emergency.EmergencyNumber.EmergencyCallRouting;
import android.telephony.emergency.EmergencyNumber.EmergencyCallRouting;
@@ -262,6 +263,22 @@ public class EmergencyNumberTracker extends Handler {
        return false;
        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() {
    private void initializeDatabaseEmergencyNumberList() {
        // If country iso has been cached when listener is set, don't need to cache the initial
        // If country iso has been cached when listener is set, don't need to cache the initial
        // country iso and initial database.
        // country iso and initial database.
@@ -859,7 +876,7 @@ public class EmergencyNumberTracker extends Handler {
                emergencyNumberList.add(getLabeledEmergencyNumberForEcclist(emergencyNum));
                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(",")) {
        for (String emergencyNum : emergencyNumbers.split(",")) {
            emergencyNumberList.add(getLabeledEmergencyNumberForEcclist(emergencyNum));
            emergencyNumberList.add(getLabeledEmergencyNumberForEcclist(emergencyNum));
        }
        }
@@ -1015,10 +1032,9 @@ public class EmergencyNumberTracker extends Handler {
        logd("System property doesn't provide any emergency numbers."
        logd("System property doesn't provide any emergency numbers."
                + " Use embedded logic for determining ones.");
                + " 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
        // According spec 3GPP TS22.101, the following numbers should be
        // ECC numbers when SIM/USIM is not present.
        // 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(",")) {
        for (String emergencyNum : emergencyNumbers.split(",")) {
            if (useExactMatch) {
            if (useExactMatch) {
+43 −0
Original line number Original line Diff line number Diff line
@@ -20,10 +20,12 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.eq;


import android.os.AsyncResult;
import android.os.AsyncResult;
import android.os.Environment;
import android.os.Environment;
import android.os.ParcelFileDescriptor;
import android.os.ParcelFileDescriptor;
import android.telephony.SubscriptionManager;
import android.telephony.emergency.EmergencyNumber;
import android.telephony.emergency.EmergencyNumber;
import android.testing.AndroidTestingRunner;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper;
@@ -33,6 +35,7 @@ import androidx.test.InstrumentationRegistry;
import com.android.internal.telephony.HalVersion;
import com.android.internal.telephony.HalVersion;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneFactory;
import com.android.internal.telephony.PhoneFactory;
import com.android.internal.telephony.SubscriptionController;
import com.android.internal.telephony.TelephonyTest;
import com.android.internal.telephony.TelephonyTest;


import org.junit.After;
import org.junit.After;
@@ -84,6 +87,14 @@ public class EmergencyNumberTrackerTest extends TelephonyTest {
                                            EmergencyNumber.EMERGENCY_CALL_ROUTING_UNKNOWN);
                                            EmergencyNumber.EMERGENCY_CALL_ROUTING_UNKNOWN);
    private static final int OTA_UNIT_TEST_EMERGENCY_NUMBER_DB_VERSION = 999999;
    private static final int OTA_UNIT_TEST_EMERGENCY_NUMBER_DB_VERSION = 999999;
    private static final String OTA_EMERGENCY_NUMBER_ADDRESS = "98765";
    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
    @Mock
    private Phone mPhone2; // mPhone as phone 1 is already defined in TelephonyTest.
    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(mContext).when(mPhone).getContext();
        doReturn(0).when(mPhone).getPhoneId();
        doReturn(0).when(mPhone).getPhoneId();
        doReturn(SUB_ID_PHONE_1).when(mPhone).getSubId();


        doReturn(mContext).when(mPhone2).getContext();
        doReturn(mContext).when(mPhone2).getContext();
        doReturn(1).when(mPhone2).getPhoneId();
        doReturn(1).when(mPhone2).getPhoneId();
        doReturn(SUB_ID_PHONE_2).when(mPhone2).getSubId();


        initializeEmergencyNumberListTestSamples();
        initializeEmergencyNumberListTestSamples();
        mEmergencyNumberTrackerMock = new EmergencyNumberTracker(mPhone, mSimulatedCommands);
        mEmergencyNumberTrackerMock = new EmergencyNumberTracker(mPhone, mSimulatedCommands);
@@ -248,6 +261,36 @@ public class EmergencyNumberTrackerTest extends TelephonyTest {
        replaceInstance(PhoneFactory.class, "sPhones", null, mPhones);
        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
    @Test
    public void testEmergencyNumberListFromRadio() throws Exception {
    public void testEmergencyNumberListFromRadio() throws Exception {
        sendEmergencyNumberListFromRadio();
        sendEmergencyNumberListFromRadio();