diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java index 18554be5c91cc..ad3a99d3610ff 100644 --- a/core/java/android/widget/Editor.java +++ b/core/java/android/widget/Editor.java @@ -841,7 +841,7 @@ public class Editor { * Adjusts selection to the word under last touch offset. Return true if the operation was * successfully performed. */ - private boolean selectCurrentWord() { + boolean selectCurrentWord() { if (!mTextView.canSelectText()) { return false; } @@ -2186,7 +2186,7 @@ public class Editor { } void onTouchUpEvent(MotionEvent event) { - if (getSelectionActionModeHelper().resetOriginalSelection( + if (getSelectionActionModeHelper().resetSelection( getTextView().getOffsetForPosition(event.getX(), event.getY()))) { return; } diff --git a/core/java/android/widget/SelectionActionModeHelper.java b/core/java/android/widget/SelectionActionModeHelper.java index beff1b03ef777..450791727fe68 100644 --- a/core/java/android/widget/SelectionActionModeHelper.java +++ b/core/java/android/widget/SelectionActionModeHelper.java @@ -98,8 +98,8 @@ final class SelectionActionModeHelper { } } - public boolean resetOriginalSelection(int textIndex) { - if (mSelectionInfo.resetOriginalSelection(textIndex, mEditor.getTextView().getText())) { + public boolean resetSelection(int textIndex) { + if (mSelectionInfo.resetSelection(textIndex, mEditor)) { invalidateActionModeAsync(); return true; } @@ -177,9 +177,9 @@ final class SelectionActionModeHelper { /** * Holds information about the selection and uses it to decide on whether or not to update - * the selection when resetOriginalSelection is called. - * The expected UX here is to allow the user to re-snap the selection back to the original word - * that was selected with one tap on that word. + * the selection when resetSelection is called. + * The expected UX here is to allow the user to select a word inside of the "smart selection" on + * a single tap. */ private static final class SelectionInfo { @@ -212,14 +212,14 @@ final class SelectionActionModeHelper { mResetOriginal = false; } - public boolean resetOriginalSelection(int textIndex, CharSequence text) { + public boolean resetSelection(int textIndex, Editor editor) { + final CharSequence text = editor.getTextView().getText(); if (mResetOriginal - && textIndex >= mOriginalStart && textIndex <= mOriginalEnd + && textIndex >= mSelectionStart && textIndex <= mSelectionEnd && text instanceof Spannable) { - Selection.setSelection((Spannable) text, mOriginalStart, mOriginalEnd); // Only allow a reset once. mResetOriginal = false; - return true; + return editor.selectCurrentWord(); } return false; }