diff options
| author | 2012-06-20 02:32:12 -0700 | |
|---|---|---|
| committer | 2012-06-20 02:32:12 -0700 | |
| commit | 17c1425f5ab5c6f734a700d74b5bd8118f289cd5 (patch) | |
| tree | cfb3190560fb4d671c994e4d8367b5110f60d8a0 | |
| parent | 2dde147b28684fc32f03ad748af8eb87d5408c7c (diff) | |
| parent | c20fc8daf56eb348fa4a9355a9e33b0ebc468699 (diff) | |
Merge "Clone the list of listeners before notifing any event." into jb-dev
| -rw-r--r-- | core/java/android/animation/LayoutTransition.java | 52 |
1 files changed, 36 insertions, 16 deletions
diff --git a/core/java/android/animation/LayoutTransition.java b/core/java/android/animation/LayoutTransition.java index 4d3a51976bd3..d8f9e493692d 100644 --- a/core/java/android/animation/LayoutTransition.java +++ b/core/java/android/animation/LayoutTransition.java @@ -942,8 +942,10 @@ public class LayoutTransition { @Override public void onAnimationStart(Animator animator) { - if (mListeners != null) { - for (TransitionListener listener : mListeners) { + if (hasListeners()) { + ArrayList<TransitionListener> listeners = + (ArrayList<TransitionListener>) mListeners.clone(); + for (TransitionListener listener : listeners) { listener.startTransition(LayoutTransition.this, parent, child, changeReason == APPEARING ? CHANGE_APPEARING : changeReason == DISAPPEARING ? @@ -961,8 +963,10 @@ public class LayoutTransition { @Override public void onAnimationEnd(Animator animator) { currentChangingAnimations.remove(child); - if (mListeners != null) { - for (TransitionListener listener : mListeners) { + if (hasListeners()) { + ArrayList<TransitionListener> listeners = + (ArrayList<TransitionListener>) mListeners.clone(); + for (TransitionListener listener : listeners) { listener.endTransition(LayoutTransition.this, parent, child, changeReason == APPEARING ? CHANGE_APPEARING : changeReason == DISAPPEARING ? @@ -1131,8 +1135,10 @@ public class LayoutTransition { currentAnimation.cancel(); } if (mAppearingAnim == null) { - if (mListeners != null) { - for (TransitionListener listener : mListeners) { + if (hasListeners()) { + ArrayList<TransitionListener> listeners = + (ArrayList<TransitionListener>) mListeners.clone(); + for (TransitionListener listener : listeners) { listener.endTransition(LayoutTransition.this, parent, child, APPEARING); } } @@ -1149,8 +1155,10 @@ public class LayoutTransition { @Override public void onAnimationEnd(Animator anim) { currentAppearingAnimations.remove(child); - if (mListeners != null) { - for (TransitionListener listener : mListeners) { + if (hasListeners()) { + ArrayList<TransitionListener> listeners = + (ArrayList<TransitionListener>) mListeners.clone(); + for (TransitionListener listener : listeners) { listener.endTransition(LayoutTransition.this, parent, child, APPEARING); } } @@ -1172,8 +1180,10 @@ public class LayoutTransition { currentAnimation.cancel(); } if (mDisappearingAnim == null) { - if (mListeners != null) { - for (TransitionListener listener : mListeners) { + if (hasListeners()) { + ArrayList<TransitionListener> listeners = + (ArrayList<TransitionListener>) mListeners.clone(); + for (TransitionListener listener : listeners) { listener.endTransition(LayoutTransition.this, parent, child, DISAPPEARING); } } @@ -1189,8 +1199,10 @@ public class LayoutTransition { public void onAnimationEnd(Animator anim) { currentDisappearingAnimations.remove(child); child.setAlpha(preAnimAlpha); - if (mListeners != null) { - for (TransitionListener listener : mListeners) { + if (hasListeners()) { + ArrayList<TransitionListener> listeners = + (ArrayList<TransitionListener>) mListeners.clone(); + for (TransitionListener listener : listeners) { listener.endTransition(LayoutTransition.this, parent, child, DISAPPEARING); } } @@ -1228,8 +1240,10 @@ public class LayoutTransition { cancel(CHANGE_APPEARING); cancel(CHANGING); } - if (mListeners != null && (mTransitionTypes & FLAG_APPEARING) == FLAG_APPEARING) { - for (TransitionListener listener : mListeners) { + if (hasListeners() && (mTransitionTypes & FLAG_APPEARING) == FLAG_APPEARING) { + ArrayList<TransitionListener> listeners = + (ArrayList<TransitionListener>) mListeners.clone(); + for (TransitionListener listener : listeners) { listener.startTransition(this, parent, child, APPEARING); } } @@ -1241,6 +1255,10 @@ public class LayoutTransition { } } + private boolean hasListeners() { + return mListeners != null && mListeners.size() > 0; + } + /** * This method is called by ViewGroup when there is a call to layout() on the container * with this LayoutTransition. If the CHANGING transition is enabled and if there is no other @@ -1328,8 +1346,10 @@ public class LayoutTransition { cancel(CHANGE_DISAPPEARING); cancel(CHANGING); } - if (mListeners != null && (mTransitionTypes & FLAG_DISAPPEARING) == FLAG_DISAPPEARING) { - for (TransitionListener listener : mListeners) { + if (hasListeners() && (mTransitionTypes & FLAG_DISAPPEARING) == FLAG_DISAPPEARING) { + ArrayList<TransitionListener> listeners = (ArrayList<TransitionListener>) mListeners + .clone(); + for (TransitionListener listener : listeners) { listener.startTransition(this, parent, child, DISAPPEARING); } } |