From a686f723a89eddc02f5c5a19626231b43df5d5d2 Mon Sep 17 00:00:00 2001 From: sqian Date: Fri, 3 May 2019 15:25:30 -0700 Subject: Sorting and merge Emergency number better Apply more parameters to sort Emergency number list, it is important to keep two lists Collection-equal to each other if they have the same contents. Otherwise, it will introduce more unnecessary updates in EmergencyNumberTracker and it may confuse users. Test: atest EmergencyNumberTest Bug: 131922424 Change-Id: I64a43886d4000b261ea703b081e6278b0307805f Merged-In: I64a43886d4000b261ea703b081e6278b0307805f (cherry picked from commit a1f21a5c2cd4cdc14f4cbf7cd0fc0de6e4911c02) --- .../telephony/emergency/EmergencyNumber.java | 37 +++++++++++++++------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/telephony/java/android/telephony/emergency/EmergencyNumber.java b/telephony/java/android/telephony/emergency/EmergencyNumber.java index 2d6402d545ae..b144ff761874 100644 --- a/telephony/java/android/telephony/emergency/EmergencyNumber.java +++ b/telephony/java/android/telephony/emergency/EmergencyNumber.java @@ -558,6 +558,24 @@ public final class EmergencyNumber implements Parcelable, Comparable emergencyNumber.getEmergencyServiceCategoryBitmask() ? -1 : 1; + } else if (this.getEmergencyUrns().toString().compareTo( + emergencyNumber.getEmergencyUrns().toString()) != 0) { + return this.getEmergencyUrns().toString().compareTo( + emergencyNumber.getEmergencyUrns().toString()); + } else if (this.getEmergencyCallRouting() + != emergencyNumber.getEmergencyCallRouting()) { + return this.getEmergencyCallRouting() + > emergencyNumber.getEmergencyCallRouting() ? -1 : 1; } else { return 0; } @@ -579,13 +597,9 @@ public final class EmergencyNumber implements Parcelable, Comparable mergedEmergencyNumber = new HashSet<>(); + Set duplicatedEmergencyNumberPosition = new HashSet<>(); for (int i = 0; i < emergencyNumberList.size(); i++) { - // Skip the check because it was merged. - if (mergedEmergencyNumber.contains(emergencyNumberList.get(i))) { - continue; - } - for (int j = i + 1; j < emergencyNumberList.size(); j++) { + for (int j = 0; j < i; j++) { if (areSameEmergencyNumbers( emergencyNumberList.get(i), emergencyNumberList.get(j))) { Rlog.e(LOG_TAG, "Found unexpected duplicate numbers: " @@ -594,14 +608,15 @@ public final class EmergencyNumber implements Parcelable, Comparable= 0; i--) { + if (duplicatedEmergencyNumberPosition.contains(i)) { + emergencyNumberList.remove(i); } } Collections.sort(emergencyNumberList); -- cgit v1.2.3