OSDN Git Service

Merge "Support resetting "smart selection" to any word in the selection." into oc-dev
authorTreeHugger Robot <treehugger-gerrit@google.com>
Tue, 2 May 2017 20:05:42 +0000 (20:05 +0000)
committerAndroid (Google) Code Review <android-gerrit@google.com>
Tue, 2 May 2017 20:05:48 +0000 (20:05 +0000)
core/java/android/widget/Editor.java
core/java/android/widget/SelectionActionModeHelper.java

index 18554be..ad3a99d 100644 (file)
@@ -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;
         }
index beff1b0..4507917 100644 (file)
@@ -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;
         }