From 3802e39d763ad55219232ab1199225d45fd06b2d Mon Sep 17 00:00:00 2001 From: Winson Date: Fri, 28 Feb 2020 14:39:03 -0800 Subject: [PATCH] Convert IntentResolver data object to IntentFilter for comparison An == check will no longer pass because the Pair object used to wrap ParsedComponents and their associated IntentInfos is re-created for each filter. Have to use the actual filter reference by calling getIntentFilter with the left/right sides. Bug: 150112563 Test: manual update Calendar app and try to reproduce bug Change-Id: I0bb1e1d82a1f097b4c0d99a7fabf76789461c888 --- services/core/java/com/android/server/IntentResolver.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/IntentResolver.java b/services/core/java/com/android/server/IntentResolver.java index 7ec2a34604ca2..dbf179abad4bc 100644 --- a/services/core/java/com/android/server/IntentResolver.java +++ b/services/core/java/com/android/server/IntentResolver.java @@ -687,7 +687,7 @@ public abstract class IntentResolver { } private final void remove_all_objects(ArrayMap map, String name, - Object object) { + F object) { F[] array = map.get(name); if (array != null) { int LAST = array.length-1; @@ -695,7 +695,8 @@ public abstract class IntentResolver { LAST--; } for (int idx=LAST; idx>=0; idx--) { - if (array[idx] == object) { + F arrayValue = array[idx]; + if (arrayValue != null && getIntentFilter(arrayValue) == getIntentFilter(object)) { final int remain = LAST - idx; if (remain > 0) { System.arraycopy(array, idx+1, array, idx, remain);