diff options
| author | 2018-02-21 11:51:34 +0000 | |
|---|---|---|
| committer | 2018-02-21 11:51:34 +0000 | |
| commit | 78cab5a5961b37d984069697dd0ba684184de6bd (patch) | |
| tree | 1362441a883e5d006c0ecd833b1221fe3703fee8 | |
| parent | 756d00b9b8c4ca90072aa8f6e529ddcd8b6070ce (diff) | |
| parent | a4e39c4f596ebcc3769afdc358d78386c9f6f63b (diff) | |
Merge "[Magnifier-23] Fix invisible cursor in magnifier"
| -rw-r--r-- | core/java/android/widget/Editor.java | 21 | ||||
| -rw-r--r-- | core/java/android/widget/TextView.java | 4 |
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 708d008d2ca1..2cfdb7693a38 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -6994,9 +6994,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(); |