diff options
-rw-r--r-- | core/java/android/widget/Editor.java | 36 | ||||
-rw-r--r-- | core/java/android/widget/TextView.java | 1 |
2 files changed, 30 insertions, 7 deletions
diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java index 93ccd1d..955ad06 100644 --- a/core/java/android/widget/Editor.java +++ b/core/java/android/widget/Editor.java @@ -1009,14 +1009,14 @@ public class Editor { stopSelectionActionMode(); } else { stopSelectionActionMode(); - startSelectionActionModeWithSelection(); + startSelectionActionModeWithSelectionAndStartDrag(); } handled = true; } // Start a new selection if (!handled) { - handled = startSelectionActionModeWithSelection(); + handled = startSelectionActionModeWithSelectionAndStartDrag(); } return handled; @@ -1686,9 +1686,34 @@ public class Editor { } /** + * Starts a Selection Action Mode with the current selection and enters drag mode. This should + * be used whenever the mode is started from a touch event. + * + * @return true if the selection mode was actually started. + */ + private boolean startSelectionActionModeWithSelectionAndStartDrag() { + boolean selectionStarted = startSelectionActionModeWithSelectionInternal(); + if (selectionStarted) { + getSelectionController().enterDrag(); + } + return selectionStarted; + } + + /** + * Starts a Selection Action Mode with the current selection and ensures the selection handles + * are shown. This should be used when the mode is started from a non-touch event. + * * @return true if the selection mode was actually started. */ boolean startSelectionActionModeWithSelection() { + boolean selectionStarted = startSelectionActionModeWithSelectionInternal(); + if (selectionStarted) { + getSelectionController().show(); + } + return selectionStarted; + } + + private boolean startSelectionActionModeWithSelectionInternal() { if (mSelectionActionMode != null) { // Selection action mode is already started mSelectionActionMode.invalidate(); @@ -1727,10 +1752,6 @@ public class Editor { imm.showSoftInput(mTextView, 0, null); } } - - if (selectionStarted) { - getSelectionController().enterDrag(); - } return selectionStarted; } @@ -3099,6 +3120,7 @@ public class Editor { if (item.getIntent() != null && item.getIntent().getAction().equals(Intent.ACTION_PROCESS_TEXT)) { item.getIntent().putExtra(Intent.EXTRA_PROCESS_TEXT, mTextView.getSelectedText()); + mPreserveDetachedSelection = true; mTextView.startActivityForResult( item.getIntent(), TextView.PROCESS_TEXT_REQUEST_CODE); return true; @@ -4237,7 +4259,7 @@ public class Editor { boolean stayedInArea = distanceSquared < doubleTapSlop * doubleTapSlop; if (stayedInArea && isPositionOnText(x, y)) { - startSelectionActionModeWithSelection(); + startSelectionActionModeWithSelectionAndStartDrag(); mDiscardNextActionUp = true; } } diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 0854eef..7328300 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -9202,6 +9202,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener void replaceSelectionWithText(CharSequence text) { ((Editable) mText).replace(getSelectionStart(), getSelectionEnd(), text); + mEditor.startSelectionActionModeWithSelection(); } /** |