OSDN Git Service

am 38914619: am 32327b72: am 43423549: Merge "Fix LauncherApps registerCallback addin...
authorKenny Guy <kennyguy@google.com>
Mon, 22 Jun 2015 18:13:52 +0000 (18:13 +0000)
committerAndroid Git Automerger <android-git-automerger@android.com>
Mon, 22 Jun 2015 18:13:52 +0000 (18:13 +0000)
* commit '389146190e1d391a91871f07518be755d01d31de':
  Fix LauncherApps registerCallback adding duplicate callbacks.

core/java/android/content/pm/LauncherApps.java

index 5c21c8e..e9ec771 100644 (file)
@@ -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) {