summaryrefslogtreecommitdiff
path: root/core/java/android/transition/TransitionManager.java
diff options
context:
space:
mode:
authorGeorge Mount <mount@google.com>2015-06-24 11:09:47 -0700
committerGeorge Mount <mount@google.com>2015-06-25 12:52:18 -0700
commit800320933e849cc370a96d032c65fbddcc4fac9d (patch)
tree8b066ae5b11f222a2e335c9fe7c91b9fba788c17 /core/java/android/transition/TransitionManager.java
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
Diffstat (limited to 'core/java/android/transition/TransitionManager.java')
-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();
}
}