diff options
author | Chet Haase <chet@google.com> | 2013-08-27 12:22:29 -0700 |
---|---|---|
committer | Chet Haase <chet@google.com> | 2013-08-27 12:22:29 -0700 |
commit | fee6f2b3d30fe222486a70a773683e21d9dd12bf (patch) | |
tree | 993ed77ab282d3883c2b32935e968872cdb7359d | |
parent | f8388885e49a0a0fa71f9a90301bd90a349cb1dd (diff) | |
download | frameworks_base-fee6f2b3d30fe222486a70a773683e21d9dd12bf.zip frameworks_base-fee6f2b3d30fe222486a70a773683e21d9dd12bf.tar.gz frameworks_base-fee6f2b3d30fe222486a70a773683e21d9dd12bf.tar.bz2 |
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
-rw-r--r-- | core/java/android/view/ViewGroup.java | 5 |
1 files changed, 3 insertions, 2 deletions
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) { |