From ff8a82ba88587f81aa9ed79a6bc5470edc46b707 Mon Sep 17 00:00:00 2001 From: Lucas Rocha Date: Fri, 26 Jul 2013 12:46:28 +0100 Subject: [PATCH] Bug 889621 - Allow multiple listeners in PropertyAnimators (r=sriram) --- mobile/android/base/BrowserApp.java | 2 +- mobile/android/base/BrowserToolbar.java | 6 ++-- mobile/android/base/TabsTray.java | 6 ++-- .../base/animation/PropertyAnimator.java | 31 +++++++++++++------ 4 files changed, 29 insertions(+), 16 deletions(-) diff --git a/mobile/android/base/BrowserApp.java b/mobile/android/base/BrowserApp.java index e6127e6ea33..4b5ad73b363 100644 --- a/mobile/android/base/BrowserApp.java +++ b/mobile/android/base/BrowserApp.java @@ -1165,7 +1165,7 @@ abstract public class BrowserApp extends GeckoApp } mMainLayoutAnimator = new PropertyAnimator(animationLength, sTabsInterpolator); - mMainLayoutAnimator.setPropertyAnimationListener(this); + mMainLayoutAnimator.addPropertyAnimationListener(this); if (hasTabsSideBar()) { mMainLayoutAnimator.attach(mMainLayout, diff --git a/mobile/android/base/BrowserToolbar.java b/mobile/android/base/BrowserToolbar.java index 9d50258902d..029e7df1b34 100644 --- a/mobile/android/base/BrowserToolbar.java +++ b/mobile/android/base/BrowserToolbar.java @@ -1262,7 +1262,7 @@ public class BrowserToolbar extends GeckoRelativeLayout curveTranslation); } - contentAnimator.setPropertyAnimationListener(new PropertyAnimator.PropertyAnimationListener() { + contentAnimator.addPropertyAnimationListener(new PropertyAnimator.PropertyAnimationListener() { @Override public void onPropertyAnimationStart() { } @@ -1345,7 +1345,7 @@ public class BrowserToolbar extends GeckoRelativeLayout 0); } - contentAnimator.setPropertyAnimationListener(new PropertyAnimator.PropertyAnimationListener() { + contentAnimator.addPropertyAnimationListener(new PropertyAnimator.PropertyAnimationListener() { @Override public void onPropertyAnimationStart() { } @@ -1469,7 +1469,7 @@ public class BrowserToolbar extends GeckoRelativeLayout mForwardAnim = new PropertyAnimator(mSwitchingTabs ? 10 : FORWARD_ANIMATION_DURATION); final int width = mForward.getWidth() / 2; - mForwardAnim.setPropertyAnimationListener(new PropertyAnimator.PropertyAnimationListener() { + mForwardAnim.addPropertyAnimationListener(new PropertyAnimator.PropertyAnimationListener() { @Override public void onPropertyAnimationStart() { if (!enabled) { diff --git a/mobile/android/base/TabsTray.java b/mobile/android/base/TabsTray.java index 14a3a2d876f..4e7cae83594 100644 --- a/mobile/android/base/TabsTray.java +++ b/mobile/android/base/TabsTray.java @@ -297,7 +297,7 @@ public class TabsTray extends TwoWayView mCloseAnimationCount++; mPendingClosedTabs.add(view); - animator.setPropertyAnimationListener(new PropertyAnimator.PropertyAnimationListener() { + animator.addPropertyAnimationListener(new PropertyAnimator.PropertyAnimationListener() { @Override public void onPropertyAnimationStart() { } @Override @@ -333,7 +333,7 @@ public class TabsTray extends TwoWayView final int tabId = tab.id; final int originalSize = (isVertical ? view.getHeight() : view.getWidth()); - animator.setPropertyAnimationListener(new PropertyAnimator.PropertyAnimationListener() { + animator.addPropertyAnimationListener(new PropertyAnimator.PropertyAnimationListener() { @Override public void onPropertyAnimationStart() { } @Override @@ -367,7 +367,7 @@ public class TabsTray extends TwoWayView animator.attach(view, Property.TRANSLATION_Y, 0); - animator.setPropertyAnimationListener(new PropertyAnimator.PropertyAnimationListener() { + animator.addPropertyAnimationListener(new PropertyAnimator.PropertyAnimationListener() { @Override public void onPropertyAnimationStart() { } @Override diff --git a/mobile/android/base/animation/PropertyAnimator.java b/mobile/android/base/animation/PropertyAnimator.java index 4d3642dea9e..c71819670fb 100644 --- a/mobile/android/base/animation/PropertyAnimator.java +++ b/mobile/android/base/animation/PropertyAnimator.java @@ -49,7 +49,7 @@ public class PropertyAnimator implements Runnable { private long mDuration; private float mDurationReciprocal; private List mElementsList; - private PropertyAnimationListener mListener; + private List mListeners; private FramePoster mFramePoster; private boolean mUseHardwareLayer; @@ -64,6 +64,7 @@ public class PropertyAnimator implements Runnable { mElementsList = new ArrayList(); mFramePoster = FramePoster.create(this); mUseHardwareLayer = true; + mListeners = null; } public void setUseHardwareLayer(boolean useHardwareLayer) { @@ -81,8 +82,12 @@ public class PropertyAnimator implements Runnable { mElementsList.add(element); } - public void setPropertyAnimationListener(PropertyAnimationListener listener) { - mListener = listener; + public void addPropertyAnimationListener(PropertyAnimationListener listener) { + if (mListeners == null) { + mListeners = new ArrayList(); + } + + mListeners.add(listener); } public long getDuration() { @@ -146,8 +151,11 @@ public class PropertyAnimator implements Runnable { mFramePoster.postFirstAnimationFrame(); - if (mListener != null) - mListener.onPropertyAnimationStart(); + if (mListeners != null) { + for (PropertyAnimationListener listener : mListeners) { + listener.onPropertyAnimationStart(); + } + } } @@ -173,10 +181,15 @@ public class PropertyAnimator implements Runnable { mElementsList.clear(); - if (mListener != null) { - if (snapToEndPosition) - mListener.onPropertyAnimationEnd(); - mListener = null; + if (mListeners != null) { + if (snapToEndPosition) { + for (PropertyAnimationListener listener : mListeners) { + listener.onPropertyAnimationEnd(); + } + } + + mListeners.clear(); + mListeners = null; } }