Index: content/public/android/java/src/org/chromium/content/browser/ViewPositionObserver.java |
diff --git a/content/public/android/java/src/org/chromium/content/browser/ViewPositionObserver.java b/content/public/android/java/src/org/chromium/content/browser/ViewPositionObserver.java |
index 8f55f2f252752849b10505ad214e40340afc1bd6..d9f8807612bdd045b3800e58cc6824ae58502d03 100644 |
--- a/content/public/android/java/src/org/chromium/content/browser/ViewPositionObserver.java |
+++ b/content/public/android/java/src/org/chromium/content/browser/ViewPositionObserver.java |
@@ -7,7 +7,7 @@ package org.chromium.content.browser; |
import android.view.View; |
import android.view.ViewTreeObserver; |
-import java.util.ArrayList; |
+import org.chromium.base.ObserverList; |
/** |
* Used to register listeners that can be notified of changes to the position of a view. |
@@ -17,7 +17,7 @@ public class ViewPositionObserver implements PositionObserver { |
// Absolute position of the container view relative to its parent window. |
private final int[] mPosition = new int[2]; |
- private final ArrayList<Listener> mListeners; |
+ private final ObserverList<Listener> mListeners; |
Yaron
2014/07/22 19:20:25
Note that there is slightly more overhead to using
wajahat
2014/07/23 04:24:16
ok reverting this change
|
private ViewTreeObserver.OnPreDrawListener mPreDrawListener; |
/** |
@@ -25,7 +25,7 @@ public class ViewPositionObserver implements PositionObserver { |
*/ |
public ViewPositionObserver(View view) { |
mView = view; |
- mListeners = new ArrayList<Listener>(); |
+ mListeners = new ObserverList<Listener>(); |
updatePosition(); |
mPreDrawListener = new ViewTreeObserver.OnPreDrawListener() { |
@Override |
@@ -61,14 +61,12 @@ public class ViewPositionObserver implements PositionObserver { |
*/ |
@Override |
public void addListener(Listener listener) { |
- if (mListeners.contains(listener)) return; |
Yaron
2014/07/22 19:20:25
This is different than what ObserverList is deisgn
wajahat
2014/07/23 04:24:16
ok, reverting this change
|
- |
if (mListeners.isEmpty()) { |
mView.getViewTreeObserver().addOnPreDrawListener(mPreDrawListener); |
updatePosition(); |
} |
- mListeners.add(listener); |
+ mListeners.addObserver(listener); |
} |
/** |
@@ -76,9 +74,7 @@ public class ViewPositionObserver implements PositionObserver { |
*/ |
@Override |
public void removeListener(Listener listener) { |
- if (!mListeners.contains(listener)) return; |
- |
- mListeners.remove(listener); |
+ mListeners.removeObserver(listener); |
if (mListeners.isEmpty()) { |
mView.getViewTreeObserver().removeOnPreDrawListener(mPreDrawListener); |
@@ -86,8 +82,8 @@ public class ViewPositionObserver implements PositionObserver { |
} |
private void notifyListeners() { |
- for (int i = 0; i < mListeners.size(); i++) { |
- mListeners.get(i).onPositionChanged(mPosition[0], mPosition[1]); |
+ for (PositionObserver.Listener listener : mListeners) { |
+ listener.onPositionChanged(mPosition[0], mPosition[1]); |
} |
} |
@@ -99,5 +95,12 @@ public class ViewPositionObserver implements PositionObserver { |
notifyListeners(); |
} |
} |
+ |
+ /** |
+ * Clears installed listener(s). |
+ */ |
+ public void clearListener() { |
+ mListeners.clear(); |
+ } |
} |