Chromium Code Reviews| 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(); |
| + } |
| } |