Integrate Emergency Number everywhere

1) trigger the update from LocaleTracker if country ISO is changed
2) cache emergency number list from database based on country ISO
3) merge emergency number from radio and database
4) merge two emergency numbers if they are the same one
5) load EccInfo from database
6) create another Handler message to update DB emergency number list
7) remove the passed parameters for notifier
8) getEmergencyNumberList returns null if radio indication not support
from the HAL
9) comment the steps of merge logic for radio and database number list
10) Merge Same Numbers In the Emergency Number List to prevent duplicate.
11) Refactor mergeRadioAndDatabaseList()
12) remove Phone in notifier
13) Add mnc into Emergency Number
14) Add Radio Indication

Bug: 112657134
Test: Treehugger; Manual

Change-Id: I54678f0dd65cfb785d7fced19c1e408e3184cb87
Merged-In: I54678f0dd65cfb785d7fced19c1e408e3184cb87
(cherry picked from commit 3263436c203dcf569c47c197292000921f45c920)
diff --git a/src/java/com/android/internal/telephony/DefaultPhoneNotifier.java b/src/java/com/android/internal/telephony/DefaultPhoneNotifier.java
index ee2a9bb..f048214 100644
--- a/src/java/com/android/internal/telephony/DefaultPhoneNotifier.java
+++ b/src/java/com/android/internal/telephony/DefaultPhoneNotifier.java
@@ -31,7 +31,6 @@
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
 import android.telephony.data.ApnSetting;
-import android.telephony.emergency.EmergencyNumber;
 
 import java.util.List;
 
@@ -364,12 +363,10 @@
     }
 
     @Override
-    public void notifyEmergencyNumberList(Phone sender,
-                                          List<EmergencyNumber> emergencyNumberList) {
-        int subId = sender.getSubId();
+    public void notifyEmergencyNumberList() {
         try {
             if (mRegistry != null) {
-                mRegistry.notifyEmergencyNumberList(emergencyNumberList);
+                mRegistry.notifyEmergencyNumberList();
             }
         } catch (RemoteException ex) {
             // system process is dead
diff --git a/src/java/com/android/internal/telephony/LocaleTracker.java b/src/java/com/android/internal/telephony/LocaleTracker.java
index b6d2871..9236839 100755
--- a/src/java/com/android/internal/telephony/LocaleTracker.java
+++ b/src/java/com/android/internal/telephony/LocaleTracker.java
@@ -416,6 +416,16 @@
             mLocalLog.log(msg);
             mCurrentCountryIso = countryIso;
 
+            // Inform EmergencyNumberTrack with the change of current Country ISO
+            if (mPhone != null && mPhone.getEmergencyNumberTracker() != null) {
+                mPhone.getEmergencyNumberTracker().updateEmergencyNumberDatabaseCountryChange(
+                        getCurrentCountry());
+                log("Notified EmergencyNumberTracker");
+            } else {
+                loge("Cannot notify EmergencyNumberTracker. Phone is null? "
+                        + Boolean.toString(mPhone == null));
+            }
+
             TelephonyManager.setTelephonyProperty(mPhone.getPhoneId(),
                     TelephonyProperties.PROPERTY_OPERATOR_ISO_COUNTRY, mCurrentCountryIso);
 
diff --git a/src/java/com/android/internal/telephony/Phone.java b/src/java/com/android/internal/telephony/Phone.java
index 637f689..8ad5612 100644
--- a/src/java/com/android/internal/telephony/Phone.java
+++ b/src/java/com/android/internal/telephony/Phone.java
@@ -2265,9 +2265,9 @@
         mNotifier.notifySrvccStateChanged(this, state);
     }
 
-    /** Notify the list of {@link EmergencyNumber} changes. */
-    public void notifyEmergencyNumberList(List<EmergencyNumber> emergencyNumberList) {
-        mNotifier.notifyEmergencyNumberList(this, emergencyNumberList);
+    /** Notify the {@link EmergencyNumber} changes. */
+    public void notifyEmergencyNumberList() {
+        mNotifier.notifyEmergencyNumberList();
     }
 
     /**
diff --git a/src/java/com/android/internal/telephony/PhoneNotifier.java b/src/java/com/android/internal/telephony/PhoneNotifier.java
index 30b53d7..e66f537 100644
--- a/src/java/com/android/internal/telephony/PhoneNotifier.java
+++ b/src/java/com/android/internal/telephony/PhoneNotifier.java
@@ -21,7 +21,6 @@
 import android.telephony.PhoneCapability;
 import android.telephony.PhysicalChannelConfig;
 import android.telephony.TelephonyManager;
-import android.telephony.emergency.EmergencyNumber;
 
 import java.util.List;
 
@@ -81,5 +80,5 @@
     void notifyRadioPowerStateChanged(@TelephonyManager.RadioPowerState int state);
 
     /** Notify of change to EmergencyNumberList. */
-    void notifyEmergencyNumberList(Phone sender, List<EmergencyNumber> emergencyNumberList);
+    void notifyEmergencyNumberList();
 }
diff --git a/src/java/com/android/internal/telephony/RadioIndication.java b/src/java/com/android/internal/telephony/RadioIndication.java
index de227df..e097212 100644
--- a/src/java/com/android/internal/telephony/RadioIndication.java
+++ b/src/java/com/android/internal/telephony/RadioIndication.java
@@ -25,6 +25,7 @@
 import static com.android.internal.telephony.RILConstants.RIL_UNSOL_CDMA_SUBSCRIPTION_SOURCE_CHANGED;
 import static com.android.internal.telephony.RILConstants.RIL_UNSOL_CELL_INFO_LIST;
 import static com.android.internal.telephony.RILConstants.RIL_UNSOL_DATA_CALL_LIST_CHANGED;
+import static com.android.internal.telephony.RILConstants.RIL_UNSOL_EMERGENCY_NUMBER_LIST;
 import static com.android.internal.telephony.RILConstants.RIL_UNSOL_ENTER_EMERGENCY_CALLBACK_MODE;
 import static com.android.internal.telephony.RILConstants.RIL_UNSOL_EXIT_EMERGENCY_CALLBACK_MODE;
 import static com.android.internal.telephony.RILConstants.RIL_UNSOL_HARDWARE_CONFIG_CHANGED;
@@ -92,6 +93,7 @@
 import android.telephony.SignalStrength;
 import android.telephony.SmsMessage;
 import android.telephony.TelephonyManager;
+import android.telephony.emergency.EmergencyNumber;
 
 import com.android.internal.telephony.cdma.CdmaCallWaitingNotification;
 import com.android.internal.telephony.cdma.CdmaInformationRecords;
@@ -306,6 +308,27 @@
                 new AsyncResult(null, response, null));
     }
 
+    /**
+     * Indicates current emergency number list.
+     */
+    public void currentEmergencyNumberList(int indicationType,
+            ArrayList<android.hardware.radio.V1_4.EmergencyNumber> emergencyNumberList) {
+        List<EmergencyNumber> response = new ArrayList<>(emergencyNumberList.size());
+
+        for (android.hardware.radio.V1_4.EmergencyNumber emergencyNumberHal
+                : emergencyNumberList) {
+            EmergencyNumber emergencyNumber = new EmergencyNumber(emergencyNumberHal.number,
+                    MccTable.countryCodeForMcc(emergencyNumberHal.mcc), emergencyNumberHal.mnc,
+                    emergencyNumberHal.categories, emergencyNumberHal.sources);
+            response.add(emergencyNumber);
+        }
+
+        if (RIL.RILJ_LOGD) mRil.unsljLogRet(RIL_UNSOL_EMERGENCY_NUMBER_LIST, response);
+
+        mRil.mEmergencyNumberListRegistrants.notifyRegistrants(
+                new AsyncResult(null, response, null));
+    }
+
     public void dataCallListChanged(int indicationType, ArrayList<SetupDataCallResult> dcList) {
         mRil.processIndication(indicationType);
 
diff --git a/src/java/com/android/internal/telephony/emergency/EmergencyNumberTracker.java b/src/java/com/android/internal/telephony/emergency/EmergencyNumberTracker.java
index 5425f2b..1ea68eb 100644
--- a/src/java/com/android/internal/telephony/emergency/EmergencyNumberTracker.java
+++ b/src/java/com/android/internal/telephony/emergency/EmergencyNumberTracker.java
@@ -25,15 +25,25 @@
 
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.telephony.CommandsInterface;
+import com.android.internal.telephony.LocaleTracker;
 import com.android.internal.telephony.Phone;
+import com.android.internal.telephony.ServiceStateTracker;
 import com.android.internal.util.IndentingPrintWriter;
 import com.android.phone.ecc.nano.ProtobufEccData;
+import com.android.phone.ecc.nano.ProtobufEccData.EccInfo;
 
+import java.io.BufferedInputStream;
+import java.io.ByteArrayOutputStream;
 import java.io.FileDescriptor;
+import java.io.IOException;
+import java.io.InputStream;
 import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.zip.GZIPInputStream;
+
+import libcore.io.IoUtils;
 
 /**
  * Emergency Number Tracker that handles update of emergency number list from RIL and emergency
@@ -47,6 +57,9 @@
 
     private final CommandsInterface mCi;
     private final Phone mPhone;
+
+    private static final String EMERGENCY_NUMBER_DB_ASSETS_FILE = "eccdata";
+
     private List<EmergencyNumber> mEmergencyNumberListFromDatabase = new ArrayList<>();
     private List<EmergencyNumber> mEmergencyNumberListFromRadio = new ArrayList<>();
     private List<EmergencyNumber> mEmergencyNumberList = new ArrayList<>();
@@ -57,14 +70,16 @@
 
     /** Event indicating the update for the emergency number list from the radio. */
     private static final int EVENT_UNSOL_EMERGENCY_NUMBER_LIST = 1;
-
-    // TODO EVENT_UPDATE_NETWORK_COUNTRY_ISO
+    /**
+     * Event indicating the update for the emergency number list from the database due to the
+     * change of country code.
+     **/
+    private static final int EVENT_UPDATE_DB_COUNTRY_ISO_CHANGED = 2;
 
     public EmergencyNumberTracker(Phone phone, CommandsInterface ci) {
         mPhone = phone;
         mCi = ci;
-        // TODO cache Emergency Number List Database per country ISO;
-        // TODO register for Locale Tracker Country ISO Change
+        initializeDatabaseEmergencyNumberList();
         mCi.registerForEmergencyNumberList(this, EVENT_UNSOL_EMERGENCY_NUMBER_LIST, null);
     }
 
@@ -83,57 +98,207 @@
                 if (ar.result == null) {
                     loge("EVENT_UNSOL_EMERGENCY_NUMBER_LIST: Result from RIL is null.");
                 } else if ((ar.result != null) && (ar.exception == null)) {
-                    updateAndNotifyEmergencyNumberList((List<EmergencyNumber>) ar.result);
+                    updateRadioEmergencyNumberListAndNotify((List<EmergencyNumber>) ar.result);
                 } else {
                     loge("EVENT_UNSOL_EMERGENCY_NUMBER_LIST: Exception from RIL : "
                             + ar.exception);
                 }
                 break;
+            case EVENT_UPDATE_DB_COUNTRY_ISO_CHANGED:
+                if (msg.obj == null) {
+                    loge("EVENT_UPDATE_DB_COUNTRY_ISO_CHANGED: Result from UpdateCountryIso is"
+                            + " null.");
+                } else {
+                    updateEmergencyNumberListDatabaseAndNotify((String) msg.obj);
+                }
+                break;
         }
     }
 
-    private void updateAndNotifyEmergencyNumberList(
+    private void initializeDatabaseEmergencyNumberList() {
+        cacheEmergencyDatabaseByCountry(getInitialCountryIso());
+    }
+
+    private String getInitialCountryIso() {
+        if (mPhone != null) {
+            ServiceStateTracker sst = mPhone.getServiceStateTracker();
+            if (sst != null) {
+                LocaleTracker lt = sst.getLocaleTracker();
+                if (lt != null) {
+                    return lt.getCurrentCountry();
+                }
+            }
+        }
+        return "";
+    }
+
+    /**
+     * Update Emergency Number database based on changed Country ISO.
+     *
+     * @param countryIso
+     *
+     * @hide
+     */
+    public void updateEmergencyNumberDatabaseCountryChange(String countryIso) {
+        this.obtainMessage(EVENT_UPDATE_DB_COUNTRY_ISO_CHANGED, countryIso).sendToTarget();
+    }
+
+    private EmergencyNumber convertEmergencyNumberFromEccInfo(EccInfo eccInfo, String countryIso) {
+        String phoneNumber = eccInfo.phoneNumber.trim();
+        if (phoneNumber.isEmpty()) {
+            loge("EccInfo has empty phone number.");
+            return null;
+        }
+        int emergencyServiceCategoryBitmask = 0;
+        for (int typeData : eccInfo.types) {
+            switch (typeData) {
+                case EccInfo.Type.POLICE:
+                    emergencyServiceCategoryBitmask = emergencyServiceCategoryBitmask == 0
+                            ? EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_POLICE
+                            : emergencyServiceCategoryBitmask
+                            | EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_POLICE;
+                    break;
+                case EccInfo.Type.AMBULANCE:
+                    emergencyServiceCategoryBitmask = emergencyServiceCategoryBitmask == 0
+                            ? EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_AMBULANCE
+                            : emergencyServiceCategoryBitmask
+                            | EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_AMBULANCE;
+                    break;
+                case EccInfo.Type.FIRE:
+                    emergencyServiceCategoryBitmask = emergencyServiceCategoryBitmask == 0
+                            ? EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_FIRE_BRIGADE
+                            : emergencyServiceCategoryBitmask
+                            | EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_FIRE_BRIGADE;
+                    break;
+                default:
+                    // Ignores unknown types.
+            }
+        }
+        return new EmergencyNumber(phoneNumber, countryIso, "", emergencyServiceCategoryBitmask,
+                EmergencyNumber.EMERGENCY_NUMBER_SOURCE_DATABASE);
+    }
+
+    private void cacheEmergencyDatabaseByCountry(String countryIso) {
+        BufferedInputStream inputStream = null;
+        ProtobufEccData.AllInfo allEccMessages = null;
+        List<EmergencyNumber> updatedEmergencyNumberList = new ArrayList<>();
+        try {
+            inputStream = new BufferedInputStream(
+                    mPhone.getContext().getAssets().open(EMERGENCY_NUMBER_DB_ASSETS_FILE));
+            allEccMessages = ProtobufEccData.AllInfo.parseFrom(readInputStreamToByteArray(
+                    new GZIPInputStream(inputStream)));
+            logd("Emergency database is loaded. ");
+            for (ProtobufEccData.CountryInfo countryEccInfo : allEccMessages.countries) {
+                if (countryEccInfo.isoCode.equals(countryIso.toUpperCase())) {
+                    for (ProtobufEccData.EccInfo eccInfo : countryEccInfo.eccs) {
+                        updatedEmergencyNumberList.add(convertEmergencyNumberFromEccInfo(
+                                eccInfo, countryIso));
+                    }
+                }
+            }
+            EmergencyNumber.mergeSameNumbersInEmergencyNumberList(updatedEmergencyNumberList);
+            mEmergencyNumberListFromDatabase = updatedEmergencyNumberList;
+        } catch (IOException ex) {
+            loge("Cache emergency database failure: " + ex);
+        } finally {
+            IoUtils.closeQuietly(inputStream);
+        }
+    }
+
+    /**
+     * Util function to convert inputStream to byte array before parsing proto data.
+     */
+    private static byte[] readInputStreamToByteArray(InputStream inputStream) throws IOException {
+        ByteArrayOutputStream buffer = new ByteArrayOutputStream();
+        int nRead;
+        int size = 16 * 1024; // Read 16k chunks
+        byte[] data = new byte[size];
+        while ((nRead = inputStream.read(data, 0, data.length)) != -1) {
+            buffer.write(data, 0, nRead);
+        }
+        buffer.flush();
+        return buffer.toByteArray();
+    }
+
+    private void updateRadioEmergencyNumberListAndNotify(
             List<EmergencyNumber> emergencyNumberListRadio) {
         Collections.sort(emergencyNumberListRadio);
-        logd("updateAndNotifyEmergencyNumberList(): receiving " + emergencyNumberListRadio);
+        logd("updateRadioEmergencyNumberListAndNotify(): receiving " + emergencyNumberListRadio);
 
         if (!emergencyNumberListRadio.equals(mEmergencyNumberListFromRadio)) {
             try {
+                EmergencyNumber.mergeSameNumbersInEmergencyNumberList(emergencyNumberListRadio);
                 mEmergencyNumberListFromRadio = emergencyNumberListRadio;
                 if (!DBG) {
                     mEmergencyNumberListRadioLocalLog.log("updateRadioEmergencyNumberList:"
                             + emergencyNumberListRadio);
                 }
-                List<EmergencyNumber> emergencyNumberListMergedWithDatabase =
-                        constructEmergencyNumberListWithDatabase();
-                mEmergencyNumberList = emergencyNumberListMergedWithDatabase;
+                mergeRadioAndDatabaseList();
                 if (!DBG) {
-                    mEmergencyNumberListLocalLog.log("updateEmergencyNumberList:"
-                            + emergencyNumberListMergedWithDatabase);
+                    mEmergencyNumberListLocalLog.log("updateRadioEmergencyNumberListAndNotify:"
+                            + mEmergencyNumberList);
                 }
                 notifyEmergencyNumberList();
             } catch (NullPointerException ex) {
-                loge("updateAndNotifyEmergencyNumberList() Phone already destroyed: " + ex
-                        + "EmergencyNumberList not notified");
+                loge("updateRadioEmergencyNumberListAndNotify() Phone already destroyed: " + ex
+                        + " EmergencyNumberList not notified");
             }
         }
     }
 
+    private void updateEmergencyNumberListDatabaseAndNotify(String countryIso) {
+        logd("updateEmergencyNumberListDatabaseAndNotify(): receiving countryIso: "
+                + countryIso);
+
+        cacheEmergencyDatabaseByCountry(countryIso);
+        if (!DBG) {
+            mEmergencyNumberListDatabaseLocalLog.log(
+                    "updateEmergencyNumberListDatabaseAndNotify:"
+                            + mEmergencyNumberListFromDatabase);
+        }
+        mergeRadioAndDatabaseList();
+        if (!DBG) {
+            mEmergencyNumberListLocalLog.log("updateEmergencyNumberListDatabaseAndNotify:"
+                    + mEmergencyNumberList);
+        }
+        notifyEmergencyNumberList();
+    }
+
     private void notifyEmergencyNumberList() {
-        List<EmergencyNumber> emergencyNumberListToNotify = getEmergencyNumberList();
-        mPhone.notifyEmergencyNumberList(emergencyNumberListToNotify);
-        logd("notifyEmergencyNumberList():" + emergencyNumberListToNotify);
+        try {
+            if (getEmergencyNumberList() != null) {
+                mPhone.notifyEmergencyNumberList();
+                logd("notifyEmergencyNumberList(): notified");
+            }
+        } catch (NullPointerException ex) {
+            loge("notifyEmergencyNumberList(): failure: Phone already destroyed: " + ex);
+        }
     }
 
-    private List<EmergencyNumber> constructEmergencyNumberListWithDatabase() {
-        List<EmergencyNumber> emergencyNumberListRadioAndDatabase = mEmergencyNumberListFromRadio;
-        // TODO integrate with emergency number database
-        // TODO sorting
-        return emergencyNumberListRadioAndDatabase;
+    /**
+     * Merge emergency numbers from the radio and database list, if they are the same emergency
+     * numbers.
+     */
+    private void mergeRadioAndDatabaseList() {
+        List<EmergencyNumber> mergedEmergencyNumberList =
+                new ArrayList<>(mEmergencyNumberListFromDatabase);
+        mergedEmergencyNumberList.addAll(mEmergencyNumberListFromRadio);
+        EmergencyNumber.mergeSameNumbersInEmergencyNumberList(mergedEmergencyNumberList);
+        Collections.sort(mergedEmergencyNumberList);
+        mEmergencyNumberList = mergedEmergencyNumberList;
     }
 
+    /**
+     * Get the emergency number list.
+     *
+     * @return the emergency number list or null if radio indication not support from the HAL
+     */
     public List<EmergencyNumber> getEmergencyNumberList() {
-        return new ArrayList<>(mEmergencyNumberList);
+        if (!mEmergencyNumberListFromRadio.isEmpty()) {
+            return new ArrayList<>(mEmergencyNumberList);
+        } else {
+            return null;
+        }
     }
 
     @VisibleForTesting
diff --git a/tests/telephonytests/src/com/android/internal/telephony/emergency/EmergencyNumberTest.java b/tests/telephonytests/src/com/android/internal/telephony/emergency/EmergencyNumberTest.java
index 5e4cc44..2ade4ab 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/emergency/EmergencyNumberTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/emergency/EmergencyNumberTest.java
@@ -29,10 +29,12 @@
         EmergencyNumber number = new EmergencyNumber(
                 "911",
                 "us",
+                "30",
                 EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED,
                 EmergencyNumber.EMERGENCY_NUMBER_SOURCE_NETWORK_SIGNALING);
         assertEquals(number.getNumber(), "911");
         assertEquals(number.getCountryIso(), "us");
+        assertEquals(number.getMnc(), "30");
         assertTrue(number.isInEmergencyServiceCategories(
                 EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED));
         assertTrue(number.isInEmergencyServiceCategories(
@@ -73,11 +75,13 @@
         EmergencyNumber number = new EmergencyNumber(
                 "911",
                 "us",
+                "30",
                 EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_MARINE_GUARD,
                 EmergencyNumber.EMERGENCY_NUMBER_SOURCE_NETWORK_SIGNALING
                         | EmergencyNumber.EMERGENCY_NUMBER_SOURCE_MODEM_CONFIG);
         assertEquals(number.getNumber(), "911");
         assertEquals(number.getCountryIso(), "us");
+        assertEquals(number.getMnc(), "30");
         assertFalse(number.isInEmergencyServiceCategories(
                 EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED));
         assertFalse(number.isInEmergencyServiceCategories(
@@ -123,6 +127,7 @@
         EmergencyNumber number = new EmergencyNumber(
                 "110",
                 "jp",
+                "30",
                 EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_POLICE
                         | EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_AMBULANCE
                         | EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_MIEC,
@@ -131,6 +136,7 @@
                         | EmergencyNumber.EMERGENCY_NUMBER_SOURCE_DEFAULT);
         assertEquals(number.getNumber(), "110");
         assertEquals(number.getCountryIso(), "jp");
+        assertEquals(number.getMnc(), "30");
         assertFalse(number.isInEmergencyServiceCategories(
                 EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED));
         assertTrue(number.isInEmergencyServiceCategories(
@@ -186,12 +192,14 @@
         EmergencyNumber numberHighestDisplayPriority = new EmergencyNumber(
                 "911",
                 "us",
+                "30",
                 EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED,
                 EmergencyNumber.EMERGENCY_NUMBER_SOURCE_NETWORK_SIGNALING);
 
         EmergencyNumber numberHigherDisplayPriority = new EmergencyNumber(
                 "922",
                 "us",
+                "30",
                 EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_POLICE
                         | EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_AMBULANCE
                         | EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_MIEC,
@@ -200,6 +208,7 @@
         EmergencyNumber numberLowestDisplayPriority = new EmergencyNumber(
                 "110",
                 "us",
+                "30",
                 EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_POLICE
                         | EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_AMBULANCE
                         | EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_MIEC,
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 11936f5..00e68de 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/emergency/EmergencyNumberTrackerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/emergency/EmergencyNumberTrackerTest.java
@@ -73,7 +73,7 @@
     }
 
     private void initializeEmergencyNumberListTestSamples() {
-        EmergencyNumber emergencyNumberForTest = new EmergencyNumber("119", "jp",
+        EmergencyNumber emergencyNumberForTest = new EmergencyNumber("119", "jp", "30",
                 EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_FIRE_BRIGADE,
                 EmergencyNumber.EMERGENCY_NUMBER_SOURCE_NETWORK_SIGNALING);
         mEmergencyNumberListTestSample.add(emergencyNumberForTest);
diff --git a/tests/telephonytests/src/com/android/internal/telephony/mocks/TelephonyRegistryMock.java b/tests/telephonytests/src/com/android/internal/telephony/mocks/TelephonyRegistryMock.java
index 19906bd..7b26e49 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/mocks/TelephonyRegistryMock.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/mocks/TelephonyRegistryMock.java
@@ -28,7 +28,6 @@
 import android.telephony.ServiceState;
 import android.telephony.SignalStrength;
 import android.telephony.SubscriptionManager;
-import android.telephony.emergency.EmergencyNumber;
 
 import com.android.internal.telephony.IOnSubscriptionsChangedListener;
 import com.android.internal.telephony.IPhoneStateListener;
@@ -362,7 +361,7 @@
     }
 
     @Override
-    public void notifyEmergencyNumberList(List<EmergencyNumber> emergencyNumberList) {
+    public void notifyEmergencyNumberList() {
         throw new RuntimeException("Not implemented");
     }