Merge "Fix LauncherApps registerCallback adding duplicate callbacks." into mnc-dev

This commit is contained in:
Kenny Guy
2015-06-22 16:50:02 +00:00
committed by Android (Google) Code Review

View 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) {