summaryrefslogtreecommitdiff
path: root/core/java/android
diff options
context:
space:
mode:
authorMihai Popa <popam@google.com>2018-02-20 15:31:11 +0000
committerMihai Popa <popam@google.com>2018-02-20 17:22:03 +0000
commita4e39c4f596ebcc3769afdc358d78386c9f6f63b (patch)
tree1c37b80bc49de04fae48290a5cf657e5c21b6eaf /core/java/android
parent944836c6c70bb91e1520434149c630313d0b8699 (diff)
[Magnifier-23] Fix invisible cursor in magnifier
Previously, if the magnifier was triggered when the cursor was invisible between blinks, the cursor would remain invisible until its position first changed as a result of user dragging. This CL fixes this, by forcing the cursor to become visible when the magnifier is triggered. Test: manual testing Test: atest CtsWidgetTestCases:android.widget.cts.TextViewTest Test: atest FrameworksCoreTests:android.widget.TextViewActivityTest Bug: 72314929 Bug: 63531115 Change-Id: I95dd0c2474f1cd1695ff3083e062ee38867b8a0c
Diffstat (limited to 'core/java/android')
-rw-r--r--core/java/android/widget/Editor.java21
-rw-r--r--core/java/android/widget/TextView.java4
2 files changed, 20 insertions, 5 deletions
diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java
index 892b8b635207..2e7b2fd65d33 100644
--- a/core/java/android/widget/Editor.java
+++ b/core/java/android/widget/Editor.java
@@ -262,7 +262,8 @@ public class Editor {
boolean mDiscardNextActionUp;
boolean mIgnoreActionUpEvent;
- long mShowCursor;
+ private long mShowCursor;
+ private boolean mRenderCursorRegardlessTiming;
private Blink mBlink;
boolean mCursorVisible = true;
@@ -681,11 +682,22 @@ public class Editor {
}
}
- boolean isCursorVisible() {
+ private boolean isCursorVisible() {
// The default value is true, even when there is no associated Editor
return mCursorVisible && mTextView.isTextEditable();
}
+ boolean shouldRenderCursor() {
+ if (!isCursorVisible()) {
+ return false;
+ }
+ if (mRenderCursorRegardlessTiming) {
+ return true;
+ }
+ final long showCursorDelta = SystemClock.uptimeMillis() - mShowCursor;
+ return showCursorDelta % (2 * BLINK) < BLINK;
+ }
+
void prepareCursorControllers() {
boolean windowSupportsHandles = false;
@@ -4666,13 +4678,18 @@ public class Editor {
+ mTextView.getLayout().getLineBottom(lineNumber)) / 2.0f
+ mTextView.getTotalPaddingTop() - mTextView.getScrollY();
+ // Make the cursor visible and stop blinking.
+ mRenderCursorRegardlessTiming = true;
+ mTextView.invalidateCursorPath();
suspendBlink();
+
mMagnifier.show(xPosInView, yPosInView);
}
protected final void dismissMagnifier() {
if (mMagnifier != null) {
mMagnifier.dismiss();
+ mRenderCursorRegardlessTiming = false;
resumeBlink();
}
}
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 1e02c3062d97..9ac5d59119fb 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -6965,9 +6965,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
final int selEnd = getSelectionEnd();
if (mMovement != null && (isFocused() || isPressed()) && selStart >= 0) {
if (selStart == selEnd) {
- if (mEditor != null && mEditor.isCursorVisible()
- && (SystemClock.uptimeMillis() - mEditor.mShowCursor)
- % (2 * Editor.BLINK) < Editor.BLINK) {
+ if (mEditor != null && mEditor.shouldRenderCursor()) {
if (mHighlightPathBogus) {
if (mHighlightPath == null) mHighlightPath = new Path();
mHighlightPath.reset();