summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/view/ViewTreeObserver.java19
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;
}
/**