Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 172a2169 authored by Kenny Guy's avatar Kenny Guy
Browse files

Fix LauncherApps registerCallback adding duplicate callbacks.

LauncherApps wraps the callback passed so checking
using List.contains isn't valid.

Bug: 21947184
Change-Id: Ice0973935574adda15e295073faedb62374ff627
parent 43cf8d1e
Loading
Loading
Loading
Loading
+12 −4
Original line number Diff line number Diff line
@@ -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,16 +325,24 @@ 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);
        }
    }