summaryrefslogtreecommitdiff
path: root/core/java/android
diff options
context:
space:
mode:
authorCraig Mautner <cmautner@google.com>2012-08-30 13:33:19 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2012-08-30 13:33:20 -0700
commit8b300ed14f74a28ac7752d33b39bc7ac91bd9b26 (patch)
tree2ee6712e1cf58bdac33c864870125dbbfef3f2c0 /core/java/android
parent0c9278d3c885d63ade01bf583b2bc43ba327837a (diff)
parentdf2390adc3879b7040425e75e4acc64729612b9c (diff)
Merge "Don't die(immediate) if from performTraversals." into jb-mr1-dev
Diffstat (limited to 'core/java/android')
-rw-r--r--core/java/android/view/ViewRootImpl.java10
1 files changed, 9 insertions, 1 deletions
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 725d9b52507c..ffd495e4ca73 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -214,6 +214,9 @@ public final class ViewRootImpl implements ViewParent,
boolean mTraversalScheduled;
int mTraversalBarrier;
boolean mWillDrawSoon;
+ /** Set to true while in performTraversals for detecting when die(true) is called from internal
+ * callbacks such as onMeasure, onPreDraw, onDraw and deferring doDie() until later. */
+ boolean mIsInTraversal;
boolean mFitSystemWindowsRequested;
boolean mLayoutRequested;
boolean mFirst;
@@ -1104,6 +1107,7 @@ public final class ViewRootImpl implements ViewParent,
if (host == null || !mAdded)
return;
+ mIsInTraversal = true;
mWillDrawSoon = true;
boolean windowSizeMayChange = false;
boolean newSurface = false;
@@ -1842,6 +1846,8 @@ public final class ViewRootImpl implements ViewParent,
mPendingTransitions.clear();
}
}
+
+ mIsInTraversal = false;
}
private void performMeasure(int childWidthMeasureSpec, int childHeightMeasureSpec) {
@@ -3956,7 +3962,9 @@ public final class ViewRootImpl implements ViewParent,
}
public void die(boolean immediate) {
- if (immediate) {
+ // Make sure we do execute immediately if we are in the middle of a traversal or the damage
+ // done by dispatchDetachedFromWindow will cause havoc on return.
+ if (immediate && !mIsInTraversal) {
doDie();
} else {
if (!mIsDrawing) {