From d94f8c5055713a62dcea0b24a56273fb12442fc0 Mon Sep 17 00:00:00 2001 From: Gilles Debunne Date: Mon, 10 Jan 2011 11:29:15 -0800 Subject: Stop text selection mode when new text replaces selection. Rationalized the use of hideControllers and stopSelectionActionMode. Hiding the selection controller should be done exclusively by stoping text selection mode. Bug 3322636 Change-Id: I30b4a651aa5fb5a865d636bec495a2b96ef114cd --- core/java/android/widget/TextView.java | 34 +++++++++++++++++++--------------- 1 file 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(); } /** -- cgit v1.2.3-59-g8ed1b