From fee6f2b3d30fe222486a70a773683e21d9dd12bf Mon Sep 17 00:00:00 2001 From: Chet Haase Date: Tue, 27 Aug 2013 12:22:29 -0700 Subject: Fix NPE when setting new LayoutTransition ViewGroup.setLayoutTransition() has logic to cancel a previously-running transition and remove the ViewGroup's listener from that transition. However, it is possible for the transition to be set to null on the ViewGroup on the cancel() call, making the next call to remove the listener crash with an NPE. The fix is to use a temporary variable to hold the old reference and not depend on the class instance variable remaining valid/non-null across the call to cancel(). Issue #10488932 Hangout NPE in ViewGroup.setLayoutTransition on initiating a new conversation Issue #10509201 ViewGroup.setLayoutTransition(null) causes crash when being called in LayoutTransition.TransitionListener.endTransition() Change-Id: I7c181b79e6601024c93a8dc246d32b751f78b216 --- core/java/android/view/ViewGroup.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'core') diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java index d68c410..03a9c37 100644 --- a/core/java/android/view/ViewGroup.java +++ b/core/java/android/view/ViewGroup.java @@ -3865,8 +3865,9 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager */ public void setLayoutTransition(LayoutTransition transition) { if (mTransition != null) { - mTransition.cancel(); - mTransition.removeTransitionListener(mLayoutTransitionListener); + LayoutTransition previousTransition = mTransition; + previousTransition.cancel(); + previousTransition.removeTransitionListener(mLayoutTransitionListener); } mTransition = transition; if (mTransition != null) { -- cgit v1.1