Fix ConcurrentModificationException of getEmergencyNumberList

Test: atest; treehugger
Bug: 171542607
Change-Id: I5812469dfb96f30b5b185fc1bb983e3357bb4efa
This commit is contained in:
Shuo Qian
2020-10-30 16:17:14 -07:00
parent ed7b77e88d
commit f4ded970a7

View File

@@ -12321,23 +12321,15 @@ public class TelephonyManager {
@NonNull
public Map<Integer, List<EmergencyNumber>> getEmergencyNumberList(
@EmergencyServiceCategories int categories) {
Map<Integer, List<EmergencyNumber>> emergencyNumberList = new HashMap<>();
Map<Integer, List<EmergencyNumber>> emergencyNumberListForCategories = new HashMap<>();
try {
ITelephony telephony = getITelephony();
if (telephony != null) {
emergencyNumberList = telephony.getEmergencyNumberList(
mContext.getOpPackageName(), mContext.getAttributionTag());
if (emergencyNumberList != null) {
for (Integer subscriptionId : emergencyNumberList.keySet()) {
List<EmergencyNumber> numberList = emergencyNumberList.get(subscriptionId);
for (EmergencyNumber number : numberList) {
if (!number.isInEmergencyServiceCategories(categories)) {
numberList.remove(number);
}
}
}
}
return emergencyNumberList;
Map<Integer, List<EmergencyNumber>> emergencyNumberList =
telephony.getEmergencyNumberList(mContext.getOpPackageName(),
mContext.getAttributionTag());
emergencyNumberListForCategories =
filterEmergencyNumbersByCategories(emergencyNumberList, categories);
} else {
throw new IllegalStateException("telephony service is null.");
}
@@ -12345,7 +12337,34 @@ public class TelephonyManager {
Log.e(TAG, "getEmergencyNumberList with Categories RemoteException", ex);
ex.rethrowAsRuntimeException();
}
return emergencyNumberList;
return emergencyNumberListForCategories;
}
/**
* Filter emergency numbers with categories.
*
* @hide
*/
@VisibleForTesting
public Map<Integer, List<EmergencyNumber>> filterEmergencyNumbersByCategories(
Map<Integer, List<EmergencyNumber>> emergencyNumberList,
@EmergencyServiceCategories int categories) {
Map<Integer, List<EmergencyNumber>> emergencyNumberListForCategories = new HashMap<>();
if (emergencyNumberList != null) {
for (Integer subscriptionId : emergencyNumberList.keySet()) {
List<EmergencyNumber> allNumbersForSub = emergencyNumberList.get(
subscriptionId);
List<EmergencyNumber> numbersForCategoriesPerSub = new ArrayList<>();
for (EmergencyNumber number : allNumbersForSub) {
if (number.isInEmergencyServiceCategories(categories)) {
numbersForCategoriesPerSub.add(number);
}
}
emergencyNumberListForCategories.put(
subscriptionId, numbersForCategoriesPerSub);
}
}
return emergencyNumberListForCategories;
}
/**