Merge "Fix ConcurrentModificationException of getEmergencyNumberList"

This commit is contained in:
Shuo Qian
2020-12-23 00:18:09 +00:00
committed by Gerrit Code Review

View File

@@ -12300,23 +12300,15 @@ public class TelephonyManager {
@NonNull @NonNull
public Map<Integer, List<EmergencyNumber>> getEmergencyNumberList( public Map<Integer, List<EmergencyNumber>> getEmergencyNumberList(
@EmergencyServiceCategories int categories) { @EmergencyServiceCategories int categories) {
Map<Integer, List<EmergencyNumber>> emergencyNumberList = new HashMap<>(); Map<Integer, List<EmergencyNumber>> emergencyNumberListForCategories = new HashMap<>();
try { try {
ITelephony telephony = getITelephony(); ITelephony telephony = getITelephony();
if (telephony != null) { if (telephony != null) {
emergencyNumberList = telephony.getEmergencyNumberList( Map<Integer, List<EmergencyNumber>> emergencyNumberList =
mContext.getOpPackageName(), mContext.getAttributionTag()); telephony.getEmergencyNumberList(mContext.getOpPackageName(),
if (emergencyNumberList != null) { mContext.getAttributionTag());
for (Integer subscriptionId : emergencyNumberList.keySet()) { emergencyNumberListForCategories =
List<EmergencyNumber> numberList = emergencyNumberList.get(subscriptionId); filterEmergencyNumbersByCategories(emergencyNumberList, categories);
for (EmergencyNumber number : numberList) {
if (!number.isInEmergencyServiceCategories(categories)) {
numberList.remove(number);
}
}
}
}
return emergencyNumberList;
} else { } else {
throw new IllegalStateException("telephony service is null."); throw new IllegalStateException("telephony service is null.");
} }
@@ -12324,7 +12316,34 @@ public class TelephonyManager {
Log.e(TAG, "getEmergencyNumberList with Categories RemoteException", ex); Log.e(TAG, "getEmergencyNumberList with Categories RemoteException", ex);
ex.rethrowAsRuntimeException(); 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;
} }
/** /**