From 800320933e849cc370a96d032c65fbddcc4fac9d Mon Sep 17 00:00:00 2001 From: George Mount Date: Wed, 24 Jun 2015 11:09:47 -0700 Subject: 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 --- core/java/android/transition/TransitionManager.java | 9 +++++---- 1 file 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 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 copy = new ArrayList(runningTransitions); + for (int i = copy.size() - 1; i >= 0; i--) { + final Transition transition = copy.get(i); transition.end(); } } -- cgit v1.2.3-59-g8ed1b