summaryrefslogtreecommitdiff
path: root/core/java/android/widget/TextView.java
diff options
context:
space:
mode:
authorCraig Stout <cstout@google.com>2014-07-02 15:23:16 -0700
committerCraig Stout <cstout@google.com>2014-07-07 17:43:52 +0000
commitf209ef9c3a80f9fcc4b8467626d50746ef2ab52b (patch)
treea097ba8110ce36211a3f7e3e9801c45b5664aae8 /core/java/android/widget/TextView.java
parent620a5466ce5f401aafa6a438383016640ec51d1a (diff)
Fix TextView drawing issue.
The predraw listener was lost because the view was detached and reattached after layout but before the first draw. b/15376022 Change-Id: Idf38f7373df3c457f54b6e3f995b00256914f775
Diffstat (limited to 'core/java/android/widget/TextView.java')
-rw-r--r--core/java/android/widget/TextView.java17
1 files changed, 14 insertions, 3 deletions
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 5743882d5122..2381a785f6cc 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -293,6 +293,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
private boolean mPreDrawRegistered;
+ private boolean mPreDrawListenerDetached;
// A flag to prevent repeated movements from escaping the enclosing text view. The idea here is
// that if a user is holding down a movement key to traverse text, we shouldn't also traverse
@@ -4719,6 +4720,12 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
}
}
+ private void unregisterForPreDraw() {
+ getViewTreeObserver().removeOnPreDrawListener(this);
+ mPreDrawRegistered = false;
+ mPreDrawListenerDetached = false;
+ }
+
/**
* {@inheritDoc}
*/
@@ -4770,8 +4777,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
mEditor.startSelectionActionMode();
}
- getViewTreeObserver().removeOnPreDrawListener(this);
- mPreDrawRegistered = false;
+ unregisterForPreDraw();
return true;
}
@@ -4783,6 +4789,11 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
mTemporaryDetach = false;
if (mEditor != null) mEditor.onAttachedToWindow();
+
+ if (mPreDrawListenerDetached) {
+ getViewTreeObserver().addOnPreDrawListener(this);
+ mPreDrawListenerDetached = false;
+ }
}
/** @hide */
@@ -4790,7 +4801,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
protected void onDetachedFromWindowInternal() {
if (mPreDrawRegistered) {
getViewTreeObserver().removeOnPreDrawListener(this);
- mPreDrawRegistered = false;
+ mPreDrawListenerDetached = true;
}
resetResolvedDrawables();