Loading src/java/com/android/internal/telephony/emergency/EmergencyNumberTracker.java +19 −25 Original line number Diff line number Diff line Loading @@ -510,7 +510,7 @@ public class EmergencyNumberTracker extends Handler { if (((eccInfo.normalRoutingMncs).length != 0) && (eccInfo.normalRoutingMncs[0].length() > 0)) { emergencyCallRouting = EmergencyNumber.EMERGENCY_CALL_ROUTING_EMERGENCY; emergencyCallRouting = EmergencyNumber.EMERGENCY_CALL_ROUTING_UNKNOWN; for (String routingMnc : eccInfo.normalRoutingMncs) { boolean mncExist = normalRoutedNumbers.containsKey(routingMnc); Loading Loading @@ -815,17 +815,8 @@ public class EmergencyNumberTracker extends Handler { */ private boolean shouldAdjustForRouting() { if (!shouldEmergencyNumberRoutingFromDbBeIgnored() && !mNormalRoutedNumbers.isEmpty()) { CellIdentity cellIdentity = mPhone.getCurrentCellIdentity(); if (cellIdentity != null) { String networkMnc = cellIdentity.getMncString(); if (mNormalRoutedNumbers.containsKey(networkMnc)) { Set<String> phoneNumbers = mNormalRoutedNumbers.get(networkMnc); if (phoneNumbers != null && !phoneNumbers.isEmpty()) { return true; } } } } return false; } Loading @@ -837,30 +828,33 @@ public class EmergencyNumberTracker extends Handler { CellIdentity cellIdentity = mPhone.getCurrentCellIdentity(); if (cellIdentity != null) { String networkMnc = cellIdentity.getMncString(); Set<String> normalRoutedPhoneNumbers = mNormalRoutedNumbers.get(networkMnc); if (normalRoutedPhoneNumbers == null || normalRoutedPhoneNumbers.isEmpty()) { return emergencyNumbers; } Set<String> normalRoutedPhoneNumbersWithPrefix = new ArraySet<String>(); if (normalRoutedPhoneNumbers != null && !normalRoutedPhoneNumbers.isEmpty()) { for (String num : normalRoutedPhoneNumbers) { Set<String> phoneNumbersWithPrefix = addPrefixToEmergencyNumber(num); if (phoneNumbersWithPrefix != null && !phoneNumbersWithPrefix.isEmpty()) { normalRoutedPhoneNumbersWithPrefix.addAll(phoneNumbersWithPrefix); } } } List<EmergencyNumber> adjustedEmergencyNumberList = new ArrayList<>(); int routing; String mnc; for (EmergencyNumber num : emergencyNumbers) { routing = num.getEmergencyCallRouting(); mnc = num.getMnc(); if (num.isFromSources(EmergencyNumber.EMERGENCY_NUMBER_SOURCE_DATABASE) && (normalRoutedPhoneNumbers.contains(num.getNumber()) || (normalRoutedPhoneNumbersWithPrefix.contains(num.getNumber())))) { if (num.isFromSources(EmergencyNumber.EMERGENCY_NUMBER_SOURCE_DATABASE)) { if ((normalRoutedPhoneNumbers != null && normalRoutedPhoneNumbers.contains(num.getNumber())) || normalRoutedPhoneNumbersWithPrefix.contains(num.getNumber())) { routing = EmergencyNumber.EMERGENCY_CALL_ROUTING_NORMAL; mnc = networkMnc; logd("adjustRoutingForEmergencyNumbers for number" + num.getNumber()); } else if (routing == EmergencyNumber.EMERGENCY_CALL_ROUTING_UNKNOWN) { routing = EmergencyNumber.EMERGENCY_CALL_ROUTING_EMERGENCY; } } adjustedEmergencyNumberList.add(new EmergencyNumber(num.getNumber(), num.getCountryIso(), mnc, Loading tests/telephonytests/src/com/android/internal/telephony/emergency/EmergencyNumberTrackerTest.java +53 −0 Original line number Diff line number Diff line Loading @@ -711,6 +711,59 @@ public class EmergencyNumberTrackerTest extends TelephonyTest { emergencyNumberTrackerMock.getEmergencyNumberList())); } @Test public void testUsingEmergencyNumberDatabaseWithRoutingInOOS() { doReturn(mMockContext).when(mPhone).getContext(); doReturn(mContext.getAssets()).when(mMockContext).getAssets(); doReturn(mResources).when(mMockContext).getResources(); doReturn(false).when(mResources).getBoolean( com.android.internal.R.bool.ignore_emergency_number_routing_from_db); EmergencyNumberTracker emergencyNumberTrackerMock = new EmergencyNumberTracker( mPhone, mSimulatedCommands); emergencyNumberTrackerMock.sendMessage( emergencyNumberTrackerMock.obtainMessage( 1 /* EVENT_UNSOL_EMERGENCY_NUMBER_LIST */, new AsyncResult(null, mEmergencyNumberListTestSample, null))); sendEmergencyNumberPrefix(emergencyNumberTrackerMock); emergencyNumberTrackerMock.updateEmergencyCountryIsoAllPhones("us"); processAllMessages(); // Check routing when cellidentity is null, which is oos doReturn(null).when(mPhone).getCurrentCellIdentity(); EmergencyNumber emergencyNumber = new EmergencyNumber( CONFIG_EMERGENCY_NUMBER_ADDRESS, CONFIG_EMERGENCY_NUMBER_COUNTRY, "", CONFIG_EMERGENCY_NUMBER_SERVICE_CATEGORIES, CONFIG_EMERGENCY_NUMBER_SERVICE_URNS, EmergencyNumber.EMERGENCY_NUMBER_SOURCE_DATABASE, EmergencyNumber.EMERGENCY_CALL_ROUTING_UNKNOWN); assertTrue(hasDbEmergencyNumber(emergencyNumber, emergencyNumberTrackerMock.getEmergencyNumberList())); // Check routing when cellidentity is 04, which is not part of normal routing mncs doReturn(mCellIdentity).when(mPhone).getCurrentCellIdentity(); doReturn("04").when(mCellIdentity).getMncString(); emergencyNumber = new EmergencyNumber( CONFIG_EMERGENCY_NUMBER_ADDRESS, CONFIG_EMERGENCY_NUMBER_COUNTRY, "", CONFIG_EMERGENCY_NUMBER_SERVICE_CATEGORIES, CONFIG_EMERGENCY_NUMBER_SERVICE_URNS, EmergencyNumber.EMERGENCY_NUMBER_SOURCE_DATABASE, EmergencyNumber.EMERGENCY_CALL_ROUTING_EMERGENCY); assertTrue(hasDbEmergencyNumber(emergencyNumber, emergencyNumberTrackerMock.getEmergencyNumberList())); // Check routing when cellidentity is 05, which is part of normal routing mncs doReturn("05").when(mCellIdentity).getMncString(); emergencyNumber = new EmergencyNumber( CONFIG_EMERGENCY_NUMBER_ADDRESS, CONFIG_EMERGENCY_NUMBER_COUNTRY, "05", CONFIG_EMERGENCY_NUMBER_SERVICE_CATEGORIES, CONFIG_EMERGENCY_NUMBER_SERVICE_URNS, EmergencyNumber.EMERGENCY_NUMBER_SOURCE_DATABASE, EmergencyNumber.EMERGENCY_CALL_ROUTING_NORMAL); assertTrue(hasDbEmergencyNumber(emergencyNumber, emergencyNumberTrackerMock.getEmergencyNumberList())); } /** * Test OTA Emergency Number Database Update Status. */ Loading Loading
src/java/com/android/internal/telephony/emergency/EmergencyNumberTracker.java +19 −25 Original line number Diff line number Diff line Loading @@ -510,7 +510,7 @@ public class EmergencyNumberTracker extends Handler { if (((eccInfo.normalRoutingMncs).length != 0) && (eccInfo.normalRoutingMncs[0].length() > 0)) { emergencyCallRouting = EmergencyNumber.EMERGENCY_CALL_ROUTING_EMERGENCY; emergencyCallRouting = EmergencyNumber.EMERGENCY_CALL_ROUTING_UNKNOWN; for (String routingMnc : eccInfo.normalRoutingMncs) { boolean mncExist = normalRoutedNumbers.containsKey(routingMnc); Loading Loading @@ -815,17 +815,8 @@ public class EmergencyNumberTracker extends Handler { */ private boolean shouldAdjustForRouting() { if (!shouldEmergencyNumberRoutingFromDbBeIgnored() && !mNormalRoutedNumbers.isEmpty()) { CellIdentity cellIdentity = mPhone.getCurrentCellIdentity(); if (cellIdentity != null) { String networkMnc = cellIdentity.getMncString(); if (mNormalRoutedNumbers.containsKey(networkMnc)) { Set<String> phoneNumbers = mNormalRoutedNumbers.get(networkMnc); if (phoneNumbers != null && !phoneNumbers.isEmpty()) { return true; } } } } return false; } Loading @@ -837,30 +828,33 @@ public class EmergencyNumberTracker extends Handler { CellIdentity cellIdentity = mPhone.getCurrentCellIdentity(); if (cellIdentity != null) { String networkMnc = cellIdentity.getMncString(); Set<String> normalRoutedPhoneNumbers = mNormalRoutedNumbers.get(networkMnc); if (normalRoutedPhoneNumbers == null || normalRoutedPhoneNumbers.isEmpty()) { return emergencyNumbers; } Set<String> normalRoutedPhoneNumbersWithPrefix = new ArraySet<String>(); if (normalRoutedPhoneNumbers != null && !normalRoutedPhoneNumbers.isEmpty()) { for (String num : normalRoutedPhoneNumbers) { Set<String> phoneNumbersWithPrefix = addPrefixToEmergencyNumber(num); if (phoneNumbersWithPrefix != null && !phoneNumbersWithPrefix.isEmpty()) { normalRoutedPhoneNumbersWithPrefix.addAll(phoneNumbersWithPrefix); } } } List<EmergencyNumber> adjustedEmergencyNumberList = new ArrayList<>(); int routing; String mnc; for (EmergencyNumber num : emergencyNumbers) { routing = num.getEmergencyCallRouting(); mnc = num.getMnc(); if (num.isFromSources(EmergencyNumber.EMERGENCY_NUMBER_SOURCE_DATABASE) && (normalRoutedPhoneNumbers.contains(num.getNumber()) || (normalRoutedPhoneNumbersWithPrefix.contains(num.getNumber())))) { if (num.isFromSources(EmergencyNumber.EMERGENCY_NUMBER_SOURCE_DATABASE)) { if ((normalRoutedPhoneNumbers != null && normalRoutedPhoneNumbers.contains(num.getNumber())) || normalRoutedPhoneNumbersWithPrefix.contains(num.getNumber())) { routing = EmergencyNumber.EMERGENCY_CALL_ROUTING_NORMAL; mnc = networkMnc; logd("adjustRoutingForEmergencyNumbers for number" + num.getNumber()); } else if (routing == EmergencyNumber.EMERGENCY_CALL_ROUTING_UNKNOWN) { routing = EmergencyNumber.EMERGENCY_CALL_ROUTING_EMERGENCY; } } adjustedEmergencyNumberList.add(new EmergencyNumber(num.getNumber(), num.getCountryIso(), mnc, Loading
tests/telephonytests/src/com/android/internal/telephony/emergency/EmergencyNumberTrackerTest.java +53 −0 Original line number Diff line number Diff line Loading @@ -711,6 +711,59 @@ public class EmergencyNumberTrackerTest extends TelephonyTest { emergencyNumberTrackerMock.getEmergencyNumberList())); } @Test public void testUsingEmergencyNumberDatabaseWithRoutingInOOS() { doReturn(mMockContext).when(mPhone).getContext(); doReturn(mContext.getAssets()).when(mMockContext).getAssets(); doReturn(mResources).when(mMockContext).getResources(); doReturn(false).when(mResources).getBoolean( com.android.internal.R.bool.ignore_emergency_number_routing_from_db); EmergencyNumberTracker emergencyNumberTrackerMock = new EmergencyNumberTracker( mPhone, mSimulatedCommands); emergencyNumberTrackerMock.sendMessage( emergencyNumberTrackerMock.obtainMessage( 1 /* EVENT_UNSOL_EMERGENCY_NUMBER_LIST */, new AsyncResult(null, mEmergencyNumberListTestSample, null))); sendEmergencyNumberPrefix(emergencyNumberTrackerMock); emergencyNumberTrackerMock.updateEmergencyCountryIsoAllPhones("us"); processAllMessages(); // Check routing when cellidentity is null, which is oos doReturn(null).when(mPhone).getCurrentCellIdentity(); EmergencyNumber emergencyNumber = new EmergencyNumber( CONFIG_EMERGENCY_NUMBER_ADDRESS, CONFIG_EMERGENCY_NUMBER_COUNTRY, "", CONFIG_EMERGENCY_NUMBER_SERVICE_CATEGORIES, CONFIG_EMERGENCY_NUMBER_SERVICE_URNS, EmergencyNumber.EMERGENCY_NUMBER_SOURCE_DATABASE, EmergencyNumber.EMERGENCY_CALL_ROUTING_UNKNOWN); assertTrue(hasDbEmergencyNumber(emergencyNumber, emergencyNumberTrackerMock.getEmergencyNumberList())); // Check routing when cellidentity is 04, which is not part of normal routing mncs doReturn(mCellIdentity).when(mPhone).getCurrentCellIdentity(); doReturn("04").when(mCellIdentity).getMncString(); emergencyNumber = new EmergencyNumber( CONFIG_EMERGENCY_NUMBER_ADDRESS, CONFIG_EMERGENCY_NUMBER_COUNTRY, "", CONFIG_EMERGENCY_NUMBER_SERVICE_CATEGORIES, CONFIG_EMERGENCY_NUMBER_SERVICE_URNS, EmergencyNumber.EMERGENCY_NUMBER_SOURCE_DATABASE, EmergencyNumber.EMERGENCY_CALL_ROUTING_EMERGENCY); assertTrue(hasDbEmergencyNumber(emergencyNumber, emergencyNumberTrackerMock.getEmergencyNumberList())); // Check routing when cellidentity is 05, which is part of normal routing mncs doReturn("05").when(mCellIdentity).getMncString(); emergencyNumber = new EmergencyNumber( CONFIG_EMERGENCY_NUMBER_ADDRESS, CONFIG_EMERGENCY_NUMBER_COUNTRY, "05", CONFIG_EMERGENCY_NUMBER_SERVICE_CATEGORIES, CONFIG_EMERGENCY_NUMBER_SERVICE_URNS, EmergencyNumber.EMERGENCY_NUMBER_SOURCE_DATABASE, EmergencyNumber.EMERGENCY_CALL_ROUTING_NORMAL); assertTrue(hasDbEmergencyNumber(emergencyNumber, emergencyNumberTrackerMock.getEmergencyNumberList())); } /** * Test OTA Emergency Number Database Update Status. */ Loading