Loading src/java/com/android/internal/telephony/RIL.java +6 −3 Original line number Diff line number Diff line Loading @@ -904,7 +904,8 @@ public class RIL extends BaseCommands implements CommandsInterface { @Override public void dial(String address, boolean isEmergencyCall, EmergencyNumber emergencyNumberInfo, int clirMode, UUSInfo uusInfo, Message result) { if (isEmergencyCall && mRadioVersion.greaterOrEqual(RADIO_HAL_VERSION_1_4)) { if (isEmergencyCall && mRadioVersion.greaterOrEqual(RADIO_HAL_VERSION_1_4) && emergencyNumberInfo != null) { emergencyDial(address, emergencyNumberInfo, clirMode, uusInfo, result); return; } Loading Loading @@ -965,9 +966,11 @@ public class RIL extends BaseCommands implements CommandsInterface { try { radioProxy14.emergencyDial(rr.mSerial, dialInfo, emergencyNumberInfo.getEmergencyServiceCategoryBitmask(), emergencyNumberInfo.getEmergencyServiceCategoryBitmaskInternalDial(), (ArrayList) emergencyNumberInfo.getEmergencyUrns(), emergencyNumberInfo.getEmergencyCallRouting()); emergencyNumberInfo.getEmergencyCallRouting(), emergencyNumberInfo.getEmergencyNumberSourceBitmask() == EmergencyNumber.EMERGENCY_NUMBER_SOURCE_TEST); } catch (RemoteException | RuntimeException e) { handleRadioProxyExceptionForRR(rr, "emergencyDial", e); } Loading src/java/com/android/internal/telephony/emergency/EmergencyNumberTracker.java +92 −8 Original line number Diff line number Diff line Loading @@ -61,6 +61,12 @@ public class EmergencyNumberTracker extends Handler { /** @hide */ public static boolean DBG = false; /** @hide */ public static final int ADD_EMERGENCY_NUMBER_TEST_MODE = 1; /** @hide */ public static final int REMOVE_EMERGENCY_NUMBER_TEST_MODE = 2; /** @hide */ public static final int RESET_EMERGENCY_NUMBER_TEST_MODE = 3; private final CommandsInterface mCi; private final Phone mPhone; Loading @@ -70,10 +76,12 @@ public class EmergencyNumberTracker extends Handler { private List<EmergencyNumber> mEmergencyNumberListFromDatabase = new ArrayList<>(); private List<EmergencyNumber> mEmergencyNumberListFromRadio = new ArrayList<>(); private List<EmergencyNumber> mEmergencyNumberListFromTestMode = new ArrayList<>(); private List<EmergencyNumber> mEmergencyNumberList = new ArrayList<>(); private final LocalLog mEmergencyNumberListDatabaseLocalLog = new LocalLog(20); private final LocalLog mEmergencyNumberListRadioLocalLog = new LocalLog(20); private final LocalLog mEmergencyNumberListTestModeLocalLog = new LocalLog(20); private final LocalLog mEmergencyNumberListLocalLog = new LocalLog(20); /** Event indicating the update for the emergency number list from the radio. */ Loading @@ -83,6 +91,8 @@ public class EmergencyNumberTracker extends Handler { * change of country code. **/ private static final int EVENT_UPDATE_DB_COUNTRY_ISO_CHANGED = 2; /** Event indicating the update for the emergency number list in the testing mode. */ private static final int EVENT_UPDATE_EMERGENCY_NUMBER_TEST_MODE = 3; public EmergencyNumberTracker(Phone phone, CommandsInterface ci) { mPhone = phone; Loading Loading @@ -120,6 +130,15 @@ public class EmergencyNumberTracker extends Handler { updateEmergencyNumberListDatabaseAndNotify((String) msg.obj); } break; case EVENT_UPDATE_EMERGENCY_NUMBER_TEST_MODE: if (msg.obj == null) { loge("EVENT_UPDATE_EMERGENCY_NUMBER_TEST_MODE: Result from" + " executeEmergencyNumberTestModeCommand is null."); } else { updateEmergencyNumberListTestModeAndNotify( msg.arg1, (EmergencyNumber) msg.obj); } break; } } Loading Loading @@ -243,7 +262,7 @@ public class EmergencyNumberTracker extends Handler { mEmergencyNumberListRadioLocalLog.log("updateRadioEmergencyNumberList:" + emergencyNumberListRadio); } mergeRadioAndDatabaseList(); updateEmergencyNumberList(); if (!DBG) { mEmergencyNumberListLocalLog.log("updateRadioEmergencyNumberListAndNotify:" + mEmergencyNumberList); Loading @@ -267,7 +286,7 @@ public class EmergencyNumberTracker extends Handler { "updateEmergencyNumberListDatabaseAndNotify:" + mEmergencyNumberListFromDatabase); } mergeRadioAndDatabaseList(); updateEmergencyNumberList(); if (!DBG) { mEmergencyNumberListLocalLog.log("updateEmergencyNumberListDatabaseAndNotify:" + mEmergencyNumberList); Loading @@ -287,15 +306,15 @@ public class EmergencyNumberTracker extends Handler { } /** * Merge emergency numbers from the radio and database list, if they are the same emergency * numbers. * Update emergency numbers based on the radio, database, and test mode, if they are the same * emergency numbers. */ private void mergeRadioAndDatabaseList() { private void updateEmergencyNumberList() { List<EmergencyNumber> mergedEmergencyNumberList = new ArrayList<>(mEmergencyNumberListFromDatabase); mergedEmergencyNumberList.addAll(mEmergencyNumberListFromRadio); mergedEmergencyNumberList.addAll(mEmergencyNumberListFromTestMode); EmergencyNumber.mergeSameNumbersInEmergencyNumberList(mergedEmergencyNumberList); Collections.sort(mergedEmergencyNumberList); mEmergencyNumberList = mergedEmergencyNumberList; } Loading @@ -309,7 +328,7 @@ public class EmergencyNumberTracker extends Handler { if (!mEmergencyNumberListFromRadio.isEmpty()) { return Collections.unmodifiableList(mEmergencyNumberList); } else { return getEmergencyNumberListFromEccList(); return getEmergencyNumberListFromEccListAndTest(); } } Loading Loading @@ -342,7 +361,8 @@ public class EmergencyNumberTracker extends Handler { } return false; } else { return isEmergencyNumberFromEccList(number, exactMatch); return isEmergencyNumberFromEccList(number, exactMatch) || isEmergencyNumberForTest(number); } } Loading Loading @@ -436,6 +456,15 @@ public class EmergencyNumberTracker extends Handler { return emergencyNumberList; } private boolean isEmergencyNumberForTest(String number) { for (EmergencyNumber num : mEmergencyNumberListFromTestMode) { if (num.getNumber().equals(number)) { return true; } } return false; } /** * Back-up old logics for {@link PhoneNumberUtils#isEmergencyNumberInternal} for legacy * and deprecate purpose. Loading Loading @@ -529,6 +558,55 @@ public class EmergencyNumberTracker extends Handler { return false; } /** * Execute command for updating emergency number for test mode. */ public void executeEmergencyNumberTestModeCommand(int action, EmergencyNumber num) { this.obtainMessage(EVENT_UPDATE_EMERGENCY_NUMBER_TEST_MODE, action, 0, num).sendToTarget(); } /** * Update emergency number list for test mode. */ private void updateEmergencyNumberListTestModeAndNotify(int action, EmergencyNumber num) { if (action == ADD_EMERGENCY_NUMBER_TEST_MODE) { if (!isEmergencyNumber(num.getNumber(), true)) { mEmergencyNumberListFromTestMode.add(num); } } else if (action == RESET_EMERGENCY_NUMBER_TEST_MODE) { mEmergencyNumberListFromTestMode.clear(); } else if (action == REMOVE_EMERGENCY_NUMBER_TEST_MODE) { mEmergencyNumberListFromTestMode.remove(num); } else { loge("updateEmergencyNumberListTestModeAndNotify: Unexpected action in test mode."); return; } if (!DBG) { mEmergencyNumberListTestModeLocalLog.log( "updateEmergencyNumberListTestModeAndNotify:" + mEmergencyNumberListFromTestMode); } updateEmergencyNumberList(); if (!DBG) { mEmergencyNumberListLocalLog.log( "updateEmergencyNumberListTestModeAndNotify:" + mEmergencyNumberList); } notifyEmergencyNumberList(); } private List<EmergencyNumber> getEmergencyNumberListFromEccListAndTest() { List<EmergencyNumber> mergedEmergencyNumberList = getEmergencyNumberListFromEccList(); mergedEmergencyNumberList.addAll(getEmergencyNumberListTestMode()); return mergedEmergencyNumberList; } /** * Get emergency number list for test. */ public List<EmergencyNumber> getEmergencyNumberListTestMode() { return Collections.unmodifiableList(mEmergencyNumberListFromTestMode); } @VisibleForTesting public List<EmergencyNumber> getRadioEmergencyNumberList() { Loading Loading @@ -564,6 +642,12 @@ public class EmergencyNumberTracker extends Handler { ipw.decreaseIndent(); ipw.println(" - - - - - - - -"); ipw.println("mEmergencyNumberListTestModeLocalLog:"); ipw.increaseIndent(); mEmergencyNumberListTestModeLocalLog.dump(fd, pw, args); ipw.decreaseIndent(); ipw.println(" - - - - - - - -"); ipw.println("mEmergencyNumberListLocalLog:"); ipw.increaseIndent(); mEmergencyNumberListLocalLog.dump(fd, pw, args); Loading Loading
src/java/com/android/internal/telephony/RIL.java +6 −3 Original line number Diff line number Diff line Loading @@ -904,7 +904,8 @@ public class RIL extends BaseCommands implements CommandsInterface { @Override public void dial(String address, boolean isEmergencyCall, EmergencyNumber emergencyNumberInfo, int clirMode, UUSInfo uusInfo, Message result) { if (isEmergencyCall && mRadioVersion.greaterOrEqual(RADIO_HAL_VERSION_1_4)) { if (isEmergencyCall && mRadioVersion.greaterOrEqual(RADIO_HAL_VERSION_1_4) && emergencyNumberInfo != null) { emergencyDial(address, emergencyNumberInfo, clirMode, uusInfo, result); return; } Loading Loading @@ -965,9 +966,11 @@ public class RIL extends BaseCommands implements CommandsInterface { try { radioProxy14.emergencyDial(rr.mSerial, dialInfo, emergencyNumberInfo.getEmergencyServiceCategoryBitmask(), emergencyNumberInfo.getEmergencyServiceCategoryBitmaskInternalDial(), (ArrayList) emergencyNumberInfo.getEmergencyUrns(), emergencyNumberInfo.getEmergencyCallRouting()); emergencyNumberInfo.getEmergencyCallRouting(), emergencyNumberInfo.getEmergencyNumberSourceBitmask() == EmergencyNumber.EMERGENCY_NUMBER_SOURCE_TEST); } catch (RemoteException | RuntimeException e) { handleRadioProxyExceptionForRR(rr, "emergencyDial", e); } Loading
src/java/com/android/internal/telephony/emergency/EmergencyNumberTracker.java +92 −8 Original line number Diff line number Diff line Loading @@ -61,6 +61,12 @@ public class EmergencyNumberTracker extends Handler { /** @hide */ public static boolean DBG = false; /** @hide */ public static final int ADD_EMERGENCY_NUMBER_TEST_MODE = 1; /** @hide */ public static final int REMOVE_EMERGENCY_NUMBER_TEST_MODE = 2; /** @hide */ public static final int RESET_EMERGENCY_NUMBER_TEST_MODE = 3; private final CommandsInterface mCi; private final Phone mPhone; Loading @@ -70,10 +76,12 @@ public class EmergencyNumberTracker extends Handler { private List<EmergencyNumber> mEmergencyNumberListFromDatabase = new ArrayList<>(); private List<EmergencyNumber> mEmergencyNumberListFromRadio = new ArrayList<>(); private List<EmergencyNumber> mEmergencyNumberListFromTestMode = new ArrayList<>(); private List<EmergencyNumber> mEmergencyNumberList = new ArrayList<>(); private final LocalLog mEmergencyNumberListDatabaseLocalLog = new LocalLog(20); private final LocalLog mEmergencyNumberListRadioLocalLog = new LocalLog(20); private final LocalLog mEmergencyNumberListTestModeLocalLog = new LocalLog(20); private final LocalLog mEmergencyNumberListLocalLog = new LocalLog(20); /** Event indicating the update for the emergency number list from the radio. */ Loading @@ -83,6 +91,8 @@ public class EmergencyNumberTracker extends Handler { * change of country code. **/ private static final int EVENT_UPDATE_DB_COUNTRY_ISO_CHANGED = 2; /** Event indicating the update for the emergency number list in the testing mode. */ private static final int EVENT_UPDATE_EMERGENCY_NUMBER_TEST_MODE = 3; public EmergencyNumberTracker(Phone phone, CommandsInterface ci) { mPhone = phone; Loading Loading @@ -120,6 +130,15 @@ public class EmergencyNumberTracker extends Handler { updateEmergencyNumberListDatabaseAndNotify((String) msg.obj); } break; case EVENT_UPDATE_EMERGENCY_NUMBER_TEST_MODE: if (msg.obj == null) { loge("EVENT_UPDATE_EMERGENCY_NUMBER_TEST_MODE: Result from" + " executeEmergencyNumberTestModeCommand is null."); } else { updateEmergencyNumberListTestModeAndNotify( msg.arg1, (EmergencyNumber) msg.obj); } break; } } Loading Loading @@ -243,7 +262,7 @@ public class EmergencyNumberTracker extends Handler { mEmergencyNumberListRadioLocalLog.log("updateRadioEmergencyNumberList:" + emergencyNumberListRadio); } mergeRadioAndDatabaseList(); updateEmergencyNumberList(); if (!DBG) { mEmergencyNumberListLocalLog.log("updateRadioEmergencyNumberListAndNotify:" + mEmergencyNumberList); Loading @@ -267,7 +286,7 @@ public class EmergencyNumberTracker extends Handler { "updateEmergencyNumberListDatabaseAndNotify:" + mEmergencyNumberListFromDatabase); } mergeRadioAndDatabaseList(); updateEmergencyNumberList(); if (!DBG) { mEmergencyNumberListLocalLog.log("updateEmergencyNumberListDatabaseAndNotify:" + mEmergencyNumberList); Loading @@ -287,15 +306,15 @@ public class EmergencyNumberTracker extends Handler { } /** * Merge emergency numbers from the radio and database list, if they are the same emergency * numbers. * Update emergency numbers based on the radio, database, and test mode, if they are the same * emergency numbers. */ private void mergeRadioAndDatabaseList() { private void updateEmergencyNumberList() { List<EmergencyNumber> mergedEmergencyNumberList = new ArrayList<>(mEmergencyNumberListFromDatabase); mergedEmergencyNumberList.addAll(mEmergencyNumberListFromRadio); mergedEmergencyNumberList.addAll(mEmergencyNumberListFromTestMode); EmergencyNumber.mergeSameNumbersInEmergencyNumberList(mergedEmergencyNumberList); Collections.sort(mergedEmergencyNumberList); mEmergencyNumberList = mergedEmergencyNumberList; } Loading @@ -309,7 +328,7 @@ public class EmergencyNumberTracker extends Handler { if (!mEmergencyNumberListFromRadio.isEmpty()) { return Collections.unmodifiableList(mEmergencyNumberList); } else { return getEmergencyNumberListFromEccList(); return getEmergencyNumberListFromEccListAndTest(); } } Loading Loading @@ -342,7 +361,8 @@ public class EmergencyNumberTracker extends Handler { } return false; } else { return isEmergencyNumberFromEccList(number, exactMatch); return isEmergencyNumberFromEccList(number, exactMatch) || isEmergencyNumberForTest(number); } } Loading Loading @@ -436,6 +456,15 @@ public class EmergencyNumberTracker extends Handler { return emergencyNumberList; } private boolean isEmergencyNumberForTest(String number) { for (EmergencyNumber num : mEmergencyNumberListFromTestMode) { if (num.getNumber().equals(number)) { return true; } } return false; } /** * Back-up old logics for {@link PhoneNumberUtils#isEmergencyNumberInternal} for legacy * and deprecate purpose. Loading Loading @@ -529,6 +558,55 @@ public class EmergencyNumberTracker extends Handler { return false; } /** * Execute command for updating emergency number for test mode. */ public void executeEmergencyNumberTestModeCommand(int action, EmergencyNumber num) { this.obtainMessage(EVENT_UPDATE_EMERGENCY_NUMBER_TEST_MODE, action, 0, num).sendToTarget(); } /** * Update emergency number list for test mode. */ private void updateEmergencyNumberListTestModeAndNotify(int action, EmergencyNumber num) { if (action == ADD_EMERGENCY_NUMBER_TEST_MODE) { if (!isEmergencyNumber(num.getNumber(), true)) { mEmergencyNumberListFromTestMode.add(num); } } else if (action == RESET_EMERGENCY_NUMBER_TEST_MODE) { mEmergencyNumberListFromTestMode.clear(); } else if (action == REMOVE_EMERGENCY_NUMBER_TEST_MODE) { mEmergencyNumberListFromTestMode.remove(num); } else { loge("updateEmergencyNumberListTestModeAndNotify: Unexpected action in test mode."); return; } if (!DBG) { mEmergencyNumberListTestModeLocalLog.log( "updateEmergencyNumberListTestModeAndNotify:" + mEmergencyNumberListFromTestMode); } updateEmergencyNumberList(); if (!DBG) { mEmergencyNumberListLocalLog.log( "updateEmergencyNumberListTestModeAndNotify:" + mEmergencyNumberList); } notifyEmergencyNumberList(); } private List<EmergencyNumber> getEmergencyNumberListFromEccListAndTest() { List<EmergencyNumber> mergedEmergencyNumberList = getEmergencyNumberListFromEccList(); mergedEmergencyNumberList.addAll(getEmergencyNumberListTestMode()); return mergedEmergencyNumberList; } /** * Get emergency number list for test. */ public List<EmergencyNumber> getEmergencyNumberListTestMode() { return Collections.unmodifiableList(mEmergencyNumberListFromTestMode); } @VisibleForTesting public List<EmergencyNumber> getRadioEmergencyNumberList() { Loading Loading @@ -564,6 +642,12 @@ public class EmergencyNumberTracker extends Handler { ipw.decreaseIndent(); ipw.println(" - - - - - - - -"); ipw.println("mEmergencyNumberListTestModeLocalLog:"); ipw.increaseIndent(); mEmergencyNumberListTestModeLocalLog.dump(fd, pw, args); ipw.decreaseIndent(); ipw.println(" - - - - - - - -"); ipw.println("mEmergencyNumberListLocalLog:"); ipw.increaseIndent(); mEmergencyNumberListLocalLog.dump(fd, pw, args); Loading