diff options
author | Shuo Qian <shuoq@google.com> | 2020-12-23 01:28:12 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2020-12-23 01:28:12 +0000 |
commit | 9bcf079a9ca06bef7522dea9707c17d39bbd6ae9 (patch) | |
tree | 8ba4fa951053716df3edad06c6d427d17c97607a | |
parent | f15eb86be01bac918eb0d89231c7643b37c3ca56 (diff) | |
parent | 7a9c93d3d2b6368b8c62b141d8f5e92bb91cbc29 (diff) |
Merge "Fix ConcurrentModificationException of getEmergencyNumberList" am: dbee5f7446 am: 7a9c93d3d2
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1533851
MUST ONLY BE SUBMITTED BY AUTOMERGER
Change-Id: I716654b640cd3366452dcdd8a82a21da001a273e
-rw-r--r-- | telephony/java/android/telephony/TelephonyManager.java | 49 |
1 files changed, 34 insertions, 15 deletions
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index dd4b6428901c..0e0644488f77 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -12300,23 +12300,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."); } @@ -12324,7 +12316,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; } /** |