From 36d5a7b22500ec8c3d754e9caf1728dda168ad92 Mon Sep 17 00:00:00 2001 From: Mady Mellor Date: Fri, 22 May 2015 10:31:12 -0700 Subject: [PATCH] Ensure to reset state of selecting by word/char for new selections Previously this value was only updated when interacting with the selection handles, so if you started a selection, entered by-char mode, and then started another selection you would still be in by-char mode. This resulted in incorrect behavior. This CL alters the logic to update the handle state whenever the cursor is placed which will included the initial long press to select a word. Bug: 21301589 Change-Id: I15dbe6f2b76c7edd8ea4b3ba53e7107c47bc48fa --- core/java/android/widget/Editor.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java index 667dac4c58435..938372107f524 100644 --- a/core/java/android/widget/Editor.java +++ b/core/java/android/widget/Editor.java @@ -4065,11 +4065,16 @@ public class Editor { offset = getNextCursorOffset(selectionEnd, false); mTouchWordDelta = 0.0f; } - mInWord = !getWordIteratorWithText().isBoundary(offset); positionAtCursorOffset(offset, false); } } + @Override + protected void positionAtCursorOffset(int offset, boolean parentScrolled) { + super.positionAtCursorOffset(offset, parentScrolled); + mInWord = !getWordIteratorWithText().isBoundary(offset); + } + @Override public boolean onTouchEvent(MotionEvent event) { boolean superResult = super.onTouchEvent(event); @@ -4187,11 +4192,16 @@ public class Editor { offset = getNextCursorOffset(selectionStart, true); mTouchWordDelta = 0.0f; } - mInWord = !getWordIteratorWithText().isBoundary(offset); positionAtCursorOffset(offset, false); } } + @Override + protected void positionAtCursorOffset(int offset, boolean parentScrolled) { + super.positionAtCursorOffset(offset, parentScrolled); + mInWord = !getWordIteratorWithText().isBoundary(offset); + } + @Override public boolean onTouchEvent(MotionEvent event) { boolean superResult = super.onTouchEvent(event);