summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author George Mount <mount@google.com> 2015-06-24 11:09:47 -0700
committer George Mount <mount@google.com> 2015-06-25 12:52:18 -0700
commit800320933e849cc370a96d032c65fbddcc4fac9d (patch)
tree8b066ae5b11f222a2e335c9fe7c91b9fba788c17
parent82e595fd6e3a9438b090106c226bb2f8bb2a6254 (diff)
Fix endTransition index out of bounds exception.
Bug 22063111 When transition.end() is run, it removes itself from the list of running transitions and perturbs the list. Change-Id: I4feb7ebe19717a0e2302844d4e4e0d19a55ec57c
-rw-r--r--core/java/android/transition/TransitionManager.java9
1 files changed, 5 insertions, 4 deletions
diff --git a/core/java/android/transition/TransitionManager.java b/core/java/android/transition/TransitionManager.java
index 5209f90cab68..71c80991bb19 100644
--- a/core/java/android/transition/TransitionManager.java
+++ b/core/java/android/transition/TransitionManager.java
@@ -435,10 +435,11 @@ public class TransitionManager {
sPendingTransitions.remove(sceneRoot);
final ArrayList<Transition> runningTransitions = getRunningTransitions().get(sceneRoot);
- if (runningTransitions != null) {
- final int count = runningTransitions.size();
- for (int i = 0; i < count; i++) {
- final Transition transition = runningTransitions.get(i);
+ if (runningTransitions != null && !runningTransitions.isEmpty()) {
+ // Make a copy in case this is called by an onTransitionEnd listener
+ ArrayList<Transition> copy = new ArrayList(runningTransitions);
+ for (int i = copy.size() - 1; i >= 0; i--) {
+ final Transition transition = copy.get(i);
transition.end();
}
}