Loading src/java/com/android/internal/telephony/emergency/EmergencyNumberTracker.java +58 −48 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.internal.telephony.emergency; import android.annotation.NonNull; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; Loading Loading @@ -100,6 +101,7 @@ public class EmergencyNumberTracker extends Handler { private String mCountryIso; private String mLastKnownEmergencyCountryIso = ""; private int mCurrentDatabaseVersion = INVALID_DATABASE_VERSION; private boolean mIsHalVersionLessThan1Dot4 = false; /** * Indicates if the country iso is set by another subscription. * @hide Loading Loading @@ -188,6 +190,8 @@ public class EmergencyNumberTracker extends Handler { filter.addAction(TelephonyManager.ACTION_NETWORK_COUNTRY_CHANGED); mPhone.getContext().registerReceiver(mIntentReceiver, filter); mIsHalVersionLessThan1Dot4 = mPhone.getHalVersion().lessOrEqual(new HalVersion(1, 3)); } else { loge("mPhone is null."); } Loading Loading @@ -841,29 +845,44 @@ public class EmergencyNumberTracker extends Handler { */ private List<EmergencyNumber> getEmergencyNumberListFromEccList() { List<EmergencyNumber> emergencyNumberList = new ArrayList<>(); if (mIsHalVersionLessThan1Dot4) { emergencyNumberList.addAll(getEmergencyNumberListFromEccListForHalv1_3()); } String emergencyNumbers = ((isSimAbsent()) ? "112,911,000,08,110,118,119,999" : "112,911"); for (String emergencyNum : emergencyNumbers.split(",")) { emergencyNumberList.add(getLabeledEmergencyNumberForEcclist(emergencyNum)); } if (mEmergencyNumberPrefix.length != 0) { emergencyNumberList.addAll(getEmergencyNumberListWithPrefix(emergencyNumberList)); } EmergencyNumber.mergeSameNumbersInEmergencyNumberList(emergencyNumberList); return emergencyNumberList; } private String getEmergencyNumberListForHalv1_3() { int slotId = SubscriptionController.getInstance().getSlotIndex(mPhone.getSubId()); String ecclist = (slotId <= 0) ? "ril.ecclist" : ("ril.ecclist" + slotId); String emergencyNumbers = SystemProperties.get(ecclist, ""); if (TextUtils.isEmpty(emergencyNumbers)) { // then read-only ecclist property since old RIL only uses this emergencyNumbers = SystemProperties.get("ro.ril.ecclist"); } if (!TextUtils.isEmpty(emergencyNumbers)) { // searches through the comma-separated list for a match, // return true if one is found. for (String emergencyNum : emergencyNumbers.split(",")) { emergencyNumberList.add(getLabeledEmergencyNumberForEcclist(emergencyNum)); } logd(ecclist + " emergencyNumbers: " + emergencyNumbers); return emergencyNumbers; } emergencyNumbers = ((isSimAbsent()) ? "112,911,000,08,110,118,119,999" : "112,911"); private List<EmergencyNumber> getEmergencyNumberListFromEccListForHalv1_3() { List<EmergencyNumber> emergencyNumberList = new ArrayList<>(); String emergencyNumbers = getEmergencyNumberListForHalv1_3(); if (!TextUtils.isEmpty(emergencyNumbers)) { for (String emergencyNum : emergencyNumbers.split(",")) { emergencyNumberList.add(getLabeledEmergencyNumberForEcclist(emergencyNum)); } if (mEmergencyNumberPrefix.length != 0) { emergencyNumberList.addAll(getEmergencyNumberListWithPrefix(emergencyNumberList)); } EmergencyNumber.mergeSameNumbersInEmergencyNumberList(emergencyNumberList); return emergencyNumberList; } Loading Loading @@ -899,7 +918,7 @@ public class EmergencyNumberTracker extends Handler { } private boolean isEmergencyNumberFromDatabase(String number) { if (!mPhone.getHalVersion().greaterOrEqual(new HalVersion(1, 4))) { if (mEmergencyNumberListFromDatabase.isEmpty()) { return false; } number = PhoneNumberUtils.stripSeparators(number); Loading Loading @@ -962,42 +981,14 @@ public class EmergencyNumberTracker extends Handler { /// @} String emergencyNumbers = ""; int slotId = SubscriptionController.getInstance().getSlotIndex(mPhone.getSubId()); String ecclist = null; String countryIso = getLastKnownEmergencyCountryIso(); logd("country:" + countryIso); if (!mPhone.getHalVersion().greaterOrEqual(new HalVersion(1, 4))) { //only use ril ecc list for older devices with HAL < 1.4 // check read-write ecclist property first ecclist = (slotId <= 0) ? "ril.ecclist" : ("ril.ecclist" + slotId); emergencyNumbers = SystemProperties.get(ecclist, ""); logd("slotId:" + slotId + " country:" + countryIso + " emergencyNumbers: " + emergencyNumbers); if (TextUtils.isEmpty(emergencyNumbers)) { // then read-only ecclist property since old RIL only uses this emergencyNumbers = SystemProperties.get("ro.ril.ecclist"); } if (mIsHalVersionLessThan1Dot4) { emergencyNumbers = getEmergencyNumberListForHalv1_3(); if (!TextUtils.isEmpty(emergencyNumbers)) { // searches through the comma-separated list for a match, // return true if one is found. for (String emergencyNum : emergencyNumbers.split(",")) { if (number.equals(emergencyNum)) { return true; } else { for (String prefix : mEmergencyNumberPrefix) { if (number.equals(prefix + emergencyNum)) { return true; } } } } // no matches found against the list! return false; return isEmergencyNumberFromEccListForHalv1_3(number, emergencyNumbers); } } Loading Loading @@ -1041,6 +1032,25 @@ public class EmergencyNumberTracker extends Handler { return false; } private boolean isEmergencyNumberFromEccListForHalv1_3(@NonNull String number, @NonNull String emergencyNumbers) { // searches through the comma-separated list for a match, // return true if one is found. for (String emergencyNum : emergencyNumbers.split(",")) { if (number.equals(emergencyNum)) { return true; } else { for (String prefix : mEmergencyNumberPrefix) { if (number.equals(prefix + emergencyNum)) { return true; } } } } // no matches found against the list! return false; } /** * Execute command for updating emergency number for test mode. */ Loading Loading @@ -1080,7 +1090,7 @@ public class EmergencyNumberTracker extends Handler { private List<EmergencyNumber> getEmergencyNumberListFromEccListDatabaseAndTest() { List<EmergencyNumber> mergedEmergencyNumberList = getEmergencyNumberListFromEccList(); if (mPhone.getHalVersion().greaterOrEqual(new HalVersion(1, 4))) { if (!mEmergencyNumberListFromDatabase.isEmpty()) { loge("getEmergencyNumberListFromEccListDatabaseAndTest: radio indication is" + " unavailable in 1.4 HAL."); mergedEmergencyNumberList.addAll(mEmergencyNumberListFromDatabase); Loading Loading @@ -1175,10 +1185,10 @@ public class EmergencyNumberTracker extends Handler { ipw.decreaseIndent(); ipw.println(" ========================================= "); int slotId = SubscriptionController.getInstance().getSlotIndex(mPhone.getSubId()); String ecclist = (slotId <= 0) ? "ril.ecclist" : ("ril.ecclist" + slotId); ipw.println(" ril.ecclist: " + SystemProperties.get(ecclist, "")); if (mIsHalVersionLessThan1Dot4) { getEmergencyNumberListForHalv1_3(); ipw.println(" ========================================= "); } ipw.println("Emergency Number List for Phone" + "(" + mPhone.getPhoneId() + ")"); ipw.increaseIndent(); Loading tests/telephonytests/src/com/android/internal/telephony/emergency/EmergencyNumberTrackerTest.java +15 −3 Original line number Diff line number Diff line Loading @@ -26,6 +26,8 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import android.content.Context; import android.content.res.AssetManager; import android.os.AsyncResult; import android.os.Environment; import android.os.ParcelFileDescriptor; Loading Loading @@ -115,6 +117,7 @@ public class EmergencyNumberTrackerTest extends TelephonyTest { private File mLocalDownloadDirectory; private ShortNumberInfo mShortNumberInfo; private Context mMockContext; @Before public void setUp() throws Exception { Loading @@ -124,14 +127,17 @@ public class EmergencyNumberTrackerTest extends TelephonyTest { mSubControllerMock = mock(SubscriptionController.class); mPhone2 = mock(Phone.class); mContext = InstrumentationRegistry.getTargetContext(); mMockContext = mock(Context.class); doReturn(mContext).when(mPhone).getContext(); doReturn(0).when(mPhone).getPhoneId(); doReturn(SUB_ID_PHONE_1).when(mPhone).getSubId(); doReturn(new HalVersion(1, 4)).when(mPhone).getHalVersion(); doReturn(mContext).when(mPhone2).getContext(); doReturn(1).when(mPhone2).getPhoneId(); doReturn(SUB_ID_PHONE_2).when(mPhone2).getSubId(); doReturn(new HalVersion(1, 4)).when(mPhone2).getHalVersion(); initializeEmergencyNumberListTestSamples(); mEmergencyNumberTrackerMock = new EmergencyNumberTracker(mPhone, mSimulatedCommands); Loading @@ -142,6 +148,9 @@ public class EmergencyNumberTrackerTest extends TelephonyTest { // Copy an OTA file to the test directory to similate the OTA mechanism simulateOtaEmergencyNumberDb(mPhone); AssetManager am = new AssetManager.Builder().build(); doReturn(am).when(mMockContext).getAssets(); processAllMessages(); logd("EmergencyNumberTrackerTest -Setup!"); } Loading Loading @@ -481,13 +490,16 @@ public class EmergencyNumberTrackerTest extends TelephonyTest { @Test public void testUsingEmergencyNumberDatabaseWheneverHal_1_3() { doReturn(new HalVersion(1, 3)).when(mPhone).getHalVersion(); doReturn(mMockContext).when(mPhone).getContext(); EmergencyNumberTracker emergencyNumberTracker = new EmergencyNumberTracker( mPhone, mSimulatedCommands); sendEmergencyNumberPrefix(mEmergencyNumberTrackerMock); mEmergencyNumberTrackerMock.updateEmergencyCountryIsoAllPhones("us"); sendEmergencyNumberPrefix(emergencyNumberTracker); emergencyNumberTracker.updateEmergencyCountryIsoAllPhones("us"); processAllMessages(); boolean hasDatabaseNumber = false; for (EmergencyNumber number : mEmergencyNumberTrackerMock.getEmergencyNumberList()) { for (EmergencyNumber number : emergencyNumberTracker.getEmergencyNumberList()) { if (number.isFromSources(EmergencyNumber.EMERGENCY_NUMBER_SOURCE_DATABASE)) { hasDatabaseNumber = true; break; Loading Loading
src/java/com/android/internal/telephony/emergency/EmergencyNumberTracker.java +58 −48 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.internal.telephony.emergency; import android.annotation.NonNull; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; Loading Loading @@ -100,6 +101,7 @@ public class EmergencyNumberTracker extends Handler { private String mCountryIso; private String mLastKnownEmergencyCountryIso = ""; private int mCurrentDatabaseVersion = INVALID_DATABASE_VERSION; private boolean mIsHalVersionLessThan1Dot4 = false; /** * Indicates if the country iso is set by another subscription. * @hide Loading Loading @@ -188,6 +190,8 @@ public class EmergencyNumberTracker extends Handler { filter.addAction(TelephonyManager.ACTION_NETWORK_COUNTRY_CHANGED); mPhone.getContext().registerReceiver(mIntentReceiver, filter); mIsHalVersionLessThan1Dot4 = mPhone.getHalVersion().lessOrEqual(new HalVersion(1, 3)); } else { loge("mPhone is null."); } Loading Loading @@ -841,29 +845,44 @@ public class EmergencyNumberTracker extends Handler { */ private List<EmergencyNumber> getEmergencyNumberListFromEccList() { List<EmergencyNumber> emergencyNumberList = new ArrayList<>(); if (mIsHalVersionLessThan1Dot4) { emergencyNumberList.addAll(getEmergencyNumberListFromEccListForHalv1_3()); } String emergencyNumbers = ((isSimAbsent()) ? "112,911,000,08,110,118,119,999" : "112,911"); for (String emergencyNum : emergencyNumbers.split(",")) { emergencyNumberList.add(getLabeledEmergencyNumberForEcclist(emergencyNum)); } if (mEmergencyNumberPrefix.length != 0) { emergencyNumberList.addAll(getEmergencyNumberListWithPrefix(emergencyNumberList)); } EmergencyNumber.mergeSameNumbersInEmergencyNumberList(emergencyNumberList); return emergencyNumberList; } private String getEmergencyNumberListForHalv1_3() { int slotId = SubscriptionController.getInstance().getSlotIndex(mPhone.getSubId()); String ecclist = (slotId <= 0) ? "ril.ecclist" : ("ril.ecclist" + slotId); String emergencyNumbers = SystemProperties.get(ecclist, ""); if (TextUtils.isEmpty(emergencyNumbers)) { // then read-only ecclist property since old RIL only uses this emergencyNumbers = SystemProperties.get("ro.ril.ecclist"); } if (!TextUtils.isEmpty(emergencyNumbers)) { // searches through the comma-separated list for a match, // return true if one is found. for (String emergencyNum : emergencyNumbers.split(",")) { emergencyNumberList.add(getLabeledEmergencyNumberForEcclist(emergencyNum)); } logd(ecclist + " emergencyNumbers: " + emergencyNumbers); return emergencyNumbers; } emergencyNumbers = ((isSimAbsent()) ? "112,911,000,08,110,118,119,999" : "112,911"); private List<EmergencyNumber> getEmergencyNumberListFromEccListForHalv1_3() { List<EmergencyNumber> emergencyNumberList = new ArrayList<>(); String emergencyNumbers = getEmergencyNumberListForHalv1_3(); if (!TextUtils.isEmpty(emergencyNumbers)) { for (String emergencyNum : emergencyNumbers.split(",")) { emergencyNumberList.add(getLabeledEmergencyNumberForEcclist(emergencyNum)); } if (mEmergencyNumberPrefix.length != 0) { emergencyNumberList.addAll(getEmergencyNumberListWithPrefix(emergencyNumberList)); } EmergencyNumber.mergeSameNumbersInEmergencyNumberList(emergencyNumberList); return emergencyNumberList; } Loading Loading @@ -899,7 +918,7 @@ public class EmergencyNumberTracker extends Handler { } private boolean isEmergencyNumberFromDatabase(String number) { if (!mPhone.getHalVersion().greaterOrEqual(new HalVersion(1, 4))) { if (mEmergencyNumberListFromDatabase.isEmpty()) { return false; } number = PhoneNumberUtils.stripSeparators(number); Loading Loading @@ -962,42 +981,14 @@ public class EmergencyNumberTracker extends Handler { /// @} String emergencyNumbers = ""; int slotId = SubscriptionController.getInstance().getSlotIndex(mPhone.getSubId()); String ecclist = null; String countryIso = getLastKnownEmergencyCountryIso(); logd("country:" + countryIso); if (!mPhone.getHalVersion().greaterOrEqual(new HalVersion(1, 4))) { //only use ril ecc list for older devices with HAL < 1.4 // check read-write ecclist property first ecclist = (slotId <= 0) ? "ril.ecclist" : ("ril.ecclist" + slotId); emergencyNumbers = SystemProperties.get(ecclist, ""); logd("slotId:" + slotId + " country:" + countryIso + " emergencyNumbers: " + emergencyNumbers); if (TextUtils.isEmpty(emergencyNumbers)) { // then read-only ecclist property since old RIL only uses this emergencyNumbers = SystemProperties.get("ro.ril.ecclist"); } if (mIsHalVersionLessThan1Dot4) { emergencyNumbers = getEmergencyNumberListForHalv1_3(); if (!TextUtils.isEmpty(emergencyNumbers)) { // searches through the comma-separated list for a match, // return true if one is found. for (String emergencyNum : emergencyNumbers.split(",")) { if (number.equals(emergencyNum)) { return true; } else { for (String prefix : mEmergencyNumberPrefix) { if (number.equals(prefix + emergencyNum)) { return true; } } } } // no matches found against the list! return false; return isEmergencyNumberFromEccListForHalv1_3(number, emergencyNumbers); } } Loading Loading @@ -1041,6 +1032,25 @@ public class EmergencyNumberTracker extends Handler { return false; } private boolean isEmergencyNumberFromEccListForHalv1_3(@NonNull String number, @NonNull String emergencyNumbers) { // searches through the comma-separated list for a match, // return true if one is found. for (String emergencyNum : emergencyNumbers.split(",")) { if (number.equals(emergencyNum)) { return true; } else { for (String prefix : mEmergencyNumberPrefix) { if (number.equals(prefix + emergencyNum)) { return true; } } } } // no matches found against the list! return false; } /** * Execute command for updating emergency number for test mode. */ Loading Loading @@ -1080,7 +1090,7 @@ public class EmergencyNumberTracker extends Handler { private List<EmergencyNumber> getEmergencyNumberListFromEccListDatabaseAndTest() { List<EmergencyNumber> mergedEmergencyNumberList = getEmergencyNumberListFromEccList(); if (mPhone.getHalVersion().greaterOrEqual(new HalVersion(1, 4))) { if (!mEmergencyNumberListFromDatabase.isEmpty()) { loge("getEmergencyNumberListFromEccListDatabaseAndTest: radio indication is" + " unavailable in 1.4 HAL."); mergedEmergencyNumberList.addAll(mEmergencyNumberListFromDatabase); Loading Loading @@ -1175,10 +1185,10 @@ public class EmergencyNumberTracker extends Handler { ipw.decreaseIndent(); ipw.println(" ========================================= "); int slotId = SubscriptionController.getInstance().getSlotIndex(mPhone.getSubId()); String ecclist = (slotId <= 0) ? "ril.ecclist" : ("ril.ecclist" + slotId); ipw.println(" ril.ecclist: " + SystemProperties.get(ecclist, "")); if (mIsHalVersionLessThan1Dot4) { getEmergencyNumberListForHalv1_3(); ipw.println(" ========================================= "); } ipw.println("Emergency Number List for Phone" + "(" + mPhone.getPhoneId() + ")"); ipw.increaseIndent(); Loading
tests/telephonytests/src/com/android/internal/telephony/emergency/EmergencyNumberTrackerTest.java +15 −3 Original line number Diff line number Diff line Loading @@ -26,6 +26,8 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import android.content.Context; import android.content.res.AssetManager; import android.os.AsyncResult; import android.os.Environment; import android.os.ParcelFileDescriptor; Loading Loading @@ -115,6 +117,7 @@ public class EmergencyNumberTrackerTest extends TelephonyTest { private File mLocalDownloadDirectory; private ShortNumberInfo mShortNumberInfo; private Context mMockContext; @Before public void setUp() throws Exception { Loading @@ -124,14 +127,17 @@ public class EmergencyNumberTrackerTest extends TelephonyTest { mSubControllerMock = mock(SubscriptionController.class); mPhone2 = mock(Phone.class); mContext = InstrumentationRegistry.getTargetContext(); mMockContext = mock(Context.class); doReturn(mContext).when(mPhone).getContext(); doReturn(0).when(mPhone).getPhoneId(); doReturn(SUB_ID_PHONE_1).when(mPhone).getSubId(); doReturn(new HalVersion(1, 4)).when(mPhone).getHalVersion(); doReturn(mContext).when(mPhone2).getContext(); doReturn(1).when(mPhone2).getPhoneId(); doReturn(SUB_ID_PHONE_2).when(mPhone2).getSubId(); doReturn(new HalVersion(1, 4)).when(mPhone2).getHalVersion(); initializeEmergencyNumberListTestSamples(); mEmergencyNumberTrackerMock = new EmergencyNumberTracker(mPhone, mSimulatedCommands); Loading @@ -142,6 +148,9 @@ public class EmergencyNumberTrackerTest extends TelephonyTest { // Copy an OTA file to the test directory to similate the OTA mechanism simulateOtaEmergencyNumberDb(mPhone); AssetManager am = new AssetManager.Builder().build(); doReturn(am).when(mMockContext).getAssets(); processAllMessages(); logd("EmergencyNumberTrackerTest -Setup!"); } Loading Loading @@ -481,13 +490,16 @@ public class EmergencyNumberTrackerTest extends TelephonyTest { @Test public void testUsingEmergencyNumberDatabaseWheneverHal_1_3() { doReturn(new HalVersion(1, 3)).when(mPhone).getHalVersion(); doReturn(mMockContext).when(mPhone).getContext(); EmergencyNumberTracker emergencyNumberTracker = new EmergencyNumberTracker( mPhone, mSimulatedCommands); sendEmergencyNumberPrefix(mEmergencyNumberTrackerMock); mEmergencyNumberTrackerMock.updateEmergencyCountryIsoAllPhones("us"); sendEmergencyNumberPrefix(emergencyNumberTracker); emergencyNumberTracker.updateEmergencyCountryIsoAllPhones("us"); processAllMessages(); boolean hasDatabaseNumber = false; for (EmergencyNumber number : mEmergencyNumberTrackerMock.getEmergencyNumberList()) { for (EmergencyNumber number : emergencyNumberTracker.getEmergencyNumberList()) { if (number.isFromSources(EmergencyNumber.EMERGENCY_NUMBER_SOURCE_DATABASE)) { hasDatabaseNumber = true; break; Loading