summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChet Haase <chet@google.com>2013-08-27 12:22:29 -0700
committerChet Haase <chet@google.com>2013-08-27 12:22:29 -0700
commitfee6f2b3d30fe222486a70a773683e21d9dd12bf (patch)
tree993ed77ab282d3883c2b32935e968872cdb7359d
parentf8388885e49a0a0fa71f9a90301bd90a349cb1dd (diff)
downloadframeworks_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.java5
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) {