diff options
| -rw-r--r-- | core/java/android/widget/TextView.java | 34 |
1 files changed, 19 insertions, 15 deletions
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index cc5be00d19e5..7675e0cb7c52 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -4780,7 +4780,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } hideControllers(); - stopSelectionActionMode(); switch (keyCode) { case KeyEvent.KEYCODE_DPAD_CENTER: @@ -5119,6 +5118,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener if (mInputMethodState != null) { mInputMethodState.mExtracting = req; } + // This stops a possible text selection mode. Maybe not intended. hideControllers(); } @@ -6781,7 +6781,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener sendOnTextChanged(buffer, start, before, after); onTextChanged(buffer, start, before, after); - // Hide the controller if the amount of content changed + // Hide the controllers if the amount of content changed if (before != after) { hideControllers(); } @@ -8207,9 +8207,12 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener selectCurrentWord(); } - final InputMethodManager imm = (InputMethodManager) - getContext().getSystemService(Context.INPUT_METHOD_SERVICE); - imm.showSoftInput(this, 0, null); + if (!mTextIsSelectable) { + // Show the IME, except when selection non editable text. + final InputMethodManager imm = (InputMethodManager) + getContext().getSystemService(Context.INPUT_METHOD_SERVICE); + imm.showSoftInput(this, 0, null); + } ActionMode.Callback actionModeCallback = new SelectionActionModeCallback(); mSelectionActionMode = startActionMode(actionModeCallback); @@ -8233,6 +8236,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener private void stopSelectionActionMode() { if (mSelectionActionMode != null) { + // This will hide the mSelectionModifierCursorController mSelectionActionMode.finish(); } } @@ -8356,8 +8360,12 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener if (mCustomSelectionActionModeCallback != null) { mCustomSelectionActionModeCallback.onDestroyActionMode(mode); } - Selection.setSelection((Spannable) mText, getSelectionStart()); - hideSelectionModifierCursorController(); + Selection.setSelection((Spannable) mText, getSelectionEnd()); + + if (mSelectionModifierCursorController != null) { + mSelectionModifierCursorController.hide(); + } + mSelectionActionMode = null; } } @@ -9173,16 +9181,12 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } } - private void hideSelectionModifierCursorController() { - // No need to create the controller to hide it. - if (mSelectionModifierCursorController != null) { - mSelectionModifierCursorController.hide(); - } - } - + /** + * Hides the insertion controller and stops text selection mode, hiding the selection controller + */ private void hideControllers() { hideInsertionPointCursorController(); - hideSelectionModifierCursorController(); + stopSelectionActionMode(); } /** |