diff options
| -rw-r--r-- | core/java/android/view/ViewTreeObserver.java | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/core/java/android/view/ViewTreeObserver.java b/core/java/android/view/ViewTreeObserver.java index c9526fde27df..3b444c44c368 100644 --- a/core/java/android/view/ViewTreeObserver.java +++ b/core/java/android/view/ViewTreeObserver.java @@ -75,7 +75,7 @@ public final class ViewTreeObserver { private boolean mWindowShown; // The reason that the last call to dispatchOnPreDraw() returned true to cancel and redraw - private String mLastDispatchOnPreDrawCanceledReason; + private StringBuilder mLastDispatchOnPreDrawCanceledReason; private boolean mAlive = true; @@ -1173,9 +1173,15 @@ public final class ViewTreeObserver { int count = access.size(); for (int i = 0; i < count; i++) { final OnPreDrawListener preDrawListener = access.get(i); - cancelDraw |= !(preDrawListener.onPreDraw()); - if (cancelDraw) { - mLastDispatchOnPreDrawCanceledReason = preDrawListener.getClass().getName(); + final boolean listenerCanceledDraw = !(preDrawListener.onPreDraw()); + cancelDraw |= listenerCanceledDraw; + if (listenerCanceledDraw) { + final String className = preDrawListener.getClass().getName(); + if (mLastDispatchOnPreDrawCanceledReason == null) { + mLastDispatchOnPreDrawCanceledReason = new StringBuilder(className); + } else { + mLastDispatchOnPreDrawCanceledReason.append("|").append(className); + } } } } finally { @@ -1191,7 +1197,10 @@ public final class ViewTreeObserver { * @hide */ final String getLastDispatchOnPreDrawCanceledReason() { - return mLastDispatchOnPreDrawCanceledReason; + if (mLastDispatchOnPreDrawCanceledReason != null) { + return mLastDispatchOnPreDrawCanceledReason.toString(); + } + return null; } /** |