summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Luca Zanolin <zano@google.com> 2012-06-20 02:32:12 -0700
committer Android (Google) Code Review <android-gerrit@google.com> 2012-06-20 02:32:12 -0700
commit17c1425f5ab5c6f734a700d74b5bd8118f289cd5 (patch)
treecfb3190560fb4d671c994e4d8367b5110f60d8a0
parent2dde147b28684fc32f03ad748af8eb87d5408c7c (diff)
parentc20fc8daf56eb348fa4a9355a9e33b0ebc468699 (diff)
Merge "Clone the list of listeners before notifing any event." into jb-dev
-rw-r--r--core/java/android/animation/LayoutTransition.java52
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);
}
}