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

Commit 43e4e2fb authored by Shuo Qian's avatar Shuo Qian Committed by Automerger Merge Worker
Browse files

Use Database number even radio indication is not ready am: 3d809f74 am: dc4c4cb1 am: 5e16d31a

Change-Id: Id3e3b6e41f5a6353b71fa5611b26965b5e8ae3b6
parents bbedb9ea 5e16d31a
Loading
Loading
Loading
Loading
+40 −8
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ import android.util.LocalLog;

import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.CommandsInterface;
import com.android.internal.telephony.HalVersion;
import com.android.internal.telephony.LocaleTracker;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneConstants;
@@ -700,7 +701,7 @@ public class EmergencyNumberTracker extends Handler {
        if (!mEmergencyNumberListFromRadio.isEmpty()) {
            return Collections.unmodifiableList(mEmergencyNumberList);
        } else {
            return getEmergencyNumberListFromEccListAndTest();
            return getEmergencyNumberListFromEccListDatabaseAndTest();
        }
    }

@@ -738,7 +739,7 @@ public class EmergencyNumberTracker extends Handler {
            return false;
        } else {
            return isEmergencyNumberFromEccList(number, exactMatch)
                    || isEmergencyNumberForTest(number);
                    || isEmergencyNumberFromDatabase(number) || isEmergencyNumberForTest(number);
        }
    }

@@ -858,9 +859,11 @@ public class EmergencyNumberTracker extends Handler {
    private List<EmergencyNumber> getEmergencyNumberListWithPrefix(
            List<EmergencyNumber> emergencyNumberList) {
        List<EmergencyNumber> emergencyNumberListWithPrefix = new ArrayList<>();
        if (emergencyNumberList != null) {
            for (EmergencyNumber num : emergencyNumberList) {
                for (String prefix : mEmergencyNumberPrefix) {
                // If an emergency number has started with the prefix, no need to apply the prefix.
                    // If an emergency number has started with the prefix,
                    // no need to apply the prefix.
                    if (!num.getNumber().startsWith(prefix)) {
                        emergencyNumberListWithPrefix.add(new EmergencyNumber(
                            prefix + num.getNumber(), num.getCountryIso(),
@@ -870,6 +873,7 @@ public class EmergencyNumberTracker extends Handler {
                    }
                }
            }
        }
        return emergencyNumberListWithPrefix;
    }

@@ -883,6 +887,26 @@ public class EmergencyNumberTracker extends Handler {
        return false;
    }

    private boolean isEmergencyNumberFromDatabase(String number) {
        if (!mPhone.getHalVersion().greaterOrEqual(new HalVersion(1, 4))) {
            return false;
        }
        number = PhoneNumberUtils.stripSeparators(number);
        for (EmergencyNumber num : mEmergencyNumberListFromDatabase) {
            if (num.getNumber().equals(number)) {
                return true;
            }
        }
        List<EmergencyNumber> emergencyNumberListFromDatabaseWithPrefix =
                getEmergencyNumberListWithPrefix(mEmergencyNumberListFromDatabase);
        for (EmergencyNumber num : emergencyNumberListFromDatabaseWithPrefix) {
            if (num.getNumber().equals(number)) {
                return true;
            }
        }
        return false;
    }

    private EmergencyNumber getLabeledEmergencyNumberForEcclist(String number) {
        number = PhoneNumberUtils.stripSeparators(number);
        for (EmergencyNumber num : mEmergencyNumberListFromDatabase) {
@@ -1074,9 +1098,17 @@ public class EmergencyNumberTracker extends Handler {
        notifyEmergencyNumberList();
    }

    private List<EmergencyNumber> getEmergencyNumberListFromEccListAndTest() {
    private List<EmergencyNumber> getEmergencyNumberListFromEccListDatabaseAndTest() {
        List<EmergencyNumber> mergedEmergencyNumberList = getEmergencyNumberListFromEccList();
        if (mPhone.getHalVersion().greaterOrEqual(new HalVersion(1, 4))) {
            loge("getEmergencyNumberListFromEccListDatabaseAndTest: radio indication is"
                    + " unavailable in 1.4 HAL.");
            mergedEmergencyNumberList.addAll(mEmergencyNumberListFromDatabase);
            mergedEmergencyNumberList.addAll(getEmergencyNumberListWithPrefix(
                    mEmergencyNumberListFromDatabase));
        }
        mergedEmergencyNumberList.addAll(getEmergencyNumberListTestMode());
        EmergencyNumber.mergeSameNumbersInEmergencyNumberList(mergedEmergencyNumberList);
        return mergedEmergencyNumberList;
    }

+51 B

File added.

No diff preview for this file type.

+48 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.internal.telephony.emergency;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.doReturn;

@@ -25,6 +26,9 @@ import android.telephony.emergency.EmergencyNumber;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;

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.TelephonyTest;
@@ -62,6 +66,8 @@ public class EmergencyNumberTrackerTest extends TelephonyTest {
    public void setUp() throws Exception {
        logd("EmergencyNumberTrackerTest +Setup!");
        super.setUp("EmergencyNumberTrackerTest");
        mContext = InstrumentationRegistry.getTargetContext();

        doReturn(mContext).when(mPhone).getContext();
        doReturn(0).when(mPhone).getPhoneId();

@@ -189,6 +195,48 @@ public class EmergencyNumberTrackerTest extends TelephonyTest {
        assertTrue(mEmergencyNumberTrackerMock2.getEmergencyCountryIso().equals("us"));
    }

    /**
     * In 1.3 or less HAL. we should not use database number.
     */
    @Test
    public void testUsingEmergencyNumberDatabaseWheneverHal_1_3() {
        doReturn(new HalVersion(1, 3)).when(mPhone).getHalVersion();

        sendEmergencyNumberPrefix(mEmergencyNumberTrackerMock);
        mEmergencyNumberTrackerMock.updateEmergencyCountryIsoAllPhones("us");
        processAllMessages();

        boolean hasDatabaseNumber = false;
        for (EmergencyNumber number : mEmergencyNumberTrackerMock.getEmergencyNumberList()) {
            if (number.isFromSources(EmergencyNumber.EMERGENCY_NUMBER_SOURCE_DATABASE)) {
                hasDatabaseNumber = true;
                break;
            }
        }
        assertFalse(hasDatabaseNumber);
    }

    /**
     * In 1.4 or above HAL, we should use database number.
     */
    @Test
    public void testUsingEmergencyNumberDatabaseWheneverHal_1_4() {
        doReturn(new HalVersion(1, 4)).when(mPhone).getHalVersion();

        sendEmergencyNumberPrefix(mEmergencyNumberTrackerMock);
        mEmergencyNumberTrackerMock.updateEmergencyCountryIsoAllPhones("us");
        processAllMessages();

        boolean hasDatabaseNumber = false;
        for (EmergencyNumber number : mEmergencyNumberTrackerMock.getEmergencyNumberList()) {
            if (number.isFromSources(EmergencyNumber.EMERGENCY_NUMBER_SOURCE_DATABASE)) {
                hasDatabaseNumber = true;
                break;
            }
        }
        assertTrue(hasDatabaseNumber);
    }

    @Test
    public void testEmergencyNumberListPrefix() throws Exception {
        sendEmergencyNumberListFromRadio();