Merge "Fix ConcurrentModificationException of getEmergencyNumberList" am: dbee5f7446
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1533851 MUST ONLY BE SUBMITTED BY AUTOMERGER Change-Id: I69a5bf9467a9dcf73bb24d5940870c3b5b6ad9b1
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user