diff --git a/core/java/android/content/pm/LauncherApps.java b/core/java/android/content/pm/LauncherApps.java index 5c21c8ee15699..e9ec77103b1f6 100644 --- a/core/java/android/content/pm/LauncherApps.java +++ b/core/java/android/content/pm/LauncherApps.java @@ -294,7 +294,7 @@ public class LauncherApps { */ public void registerCallback(Callback callback, Handler handler) { synchronized (this) { - if (callback != null && !mCallbacks.contains(callback)) { + if (callback != null && findCallbackLocked(callback) < 0) { boolean addedFirstCallback = mCallbacks.size() == 0; addCallbackLocked(callback, handler); if (addedFirstCallback) { @@ -325,17 +325,25 @@ public class LauncherApps { } } - private void removeCallbackLocked(Callback callback) { + /** @return position in mCallbacks for callback or -1 if not present. */ + private int findCallbackLocked(Callback callback) { if (callback == null) { throw new IllegalArgumentException("Callback cannot be null"); } final int size = mCallbacks.size(); for (int i = 0; i < size; ++i) { if (mCallbacks.get(i).mCallback == callback) { - mCallbacks.remove(i); - return; + return i; } } + return -1; + } + + private void removeCallbackLocked(Callback callback) { + int pos = findCallbackLocked(callback); + if (pos >= 0) { + mCallbacks.remove(pos); + } } private void addCallbackLocked(Callback callback, Handler handler) {