From 1b4ae634f6a0b07f2773e980cf52fda78ad48a80 Mon Sep 17 00:00:00 2001 From: George Mount Date: Thu, 7 May 2015 10:18:43 -0700 Subject: [PATCH] Properly cancel animators when View doesn't exist in starting state. Bug 19290065 When a transition was interrupted, if a View was not in the start state, but in the end state, then any animator on that View was not canceled. This detects that situation and allows canceling the animator on that View. Change-Id: Ib1d0579bb6b211782c40c6327be59b0c59682731 --- core/java/android/transition/Transition.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/core/java/android/transition/Transition.java b/core/java/android/transition/Transition.java index ebc2aac5242e5..1b25505799da2 100644 --- a/core/java/android/transition/Transition.java +++ b/core/java/android/transition/Transition.java @@ -1639,6 +1639,7 @@ public abstract class Transition implements Cloneable { for (int i = 0; i < count; i++) { TransitionValues values = lookIn.get(i); if (values == null) { + // Null values are always added to the end of the list, so we know to stop now. return null; } if (values.view == view) { @@ -1742,6 +1743,9 @@ public abstract class Transition implements Cloneable { View oldView = oldInfo.view; TransitionValues startValues = getTransitionValues(oldView, true); TransitionValues endValues = getMatchedTransitionValues(oldView, true); + if (startValues == null && endValues == null) { + endValues = mEndValues.viewValues.get(oldView); + } boolean cancel = (startValues != null || endValues != null) && oldInfo.transition.areValuesChanged(oldValues, endValues); if (cancel) {