From a2861454aa287e4986e0241f5158324a4c8ef15c Mon Sep 17 00:00:00 2001 From: Mady Mellor Date: Thu, 25 Jun 2015 08:40:27 -0700 Subject: [PATCH] Fix: Don't display the drag handles when focus is lost The text selection handles should be hidden / shown when the window loses / regains focus. Additionally renames method to make more sense. Bug: 22062480 Change-Id: I6e160234cf112ee285367637e2f1c14defd82e89 --- core/java/android/widget/Editor.java | 25 +++++++++++++++++-------- core/java/android/widget/TextView.java | 6 +++--- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java index a916887c513a4..48e69a197c2d4 100644 --- a/core/java/android/widget/Editor.java +++ b/core/java/android/widget/Editor.java @@ -393,7 +393,7 @@ public class Editor { } mPreserveDetachedSelection = true; - hideControllers(); + hideCursorAndSpanControllers(); stopTextActionMode(); mPreserveDetachedSelection = false; mTemporaryDetach = false; @@ -605,9 +605,9 @@ public class Editor { } /** - * Hides the insertion controller and stops text selection mode, hiding the selection controller + * Hides the insertion and span controllers. */ - void hideControllers() { + void hideCursorAndSpanControllers() { hideCursorControllers(); hideSpanControllers(); } @@ -1104,12 +1104,12 @@ public class Editor { // ExtractEditText goes out of focus. final int selStart = mTextView.getSelectionStart(); final int selEnd = mTextView.getSelectionEnd(); - hideControllers(); + hideCursorAndSpanControllers(); stopTextActionMode(); Selection.setSelection((Spannable) mTextView.getText(), selStart, selEnd); } else { if (mTemporaryDetach) mPreserveDetachedSelection = true; - hideControllers(); + hideCursorAndSpanControllers(); stopTextActionMode(); if (mTemporaryDetach) mPreserveDetachedSelection = false; downgradeEasyCorrectionSpans(); @@ -1182,6 +1182,12 @@ public class Editor { mBlink.uncancel(); makeBlink(); } + final InputMethodManager imm = InputMethodManager.peekInstance(); + final boolean immFullScreen = (imm != null && imm.isFullscreenMode()); + if (mSelectionModifierCursorController != null && mTextView.hasSelection() + && !immFullScreen) { + mSelectionModifierCursorController.show(); + } } else { if (mBlink != null) { mBlink.cancel(); @@ -1190,7 +1196,10 @@ public class Editor { mInputContentType.enterDown = false; } // Order matters! Must be done before onParentLostFocus to rely on isShowingUp - hideControllers(); + hideCursorAndSpanControllers(); + if (mSelectionModifierCursorController != null) { + mSelectionModifierCursorController.hide(); + } if (mSuggestionsPopupWindow != null) { mSuggestionsPopupWindow.onParentLostFocus(); } @@ -1913,7 +1922,7 @@ public class Editor { void onTouchUpEvent(MotionEvent event) { boolean selectAllGotFocus = mSelectAllOnFocus && mTextView.didTouchFocusSelect(); - hideControllers(); + hideCursorAndSpanControllers(); stopTextActionMode(); CharSequence text = mTextView.getText(); if (!selectAllGotFocus && text.length() > 0) { @@ -2034,7 +2043,7 @@ public class Editor { if (mSuggestionsPopupWindow == null) { mSuggestionsPopupWindow = new SuggestionsPopupWindow(); } - hideControllers(); + hideCursorAndSpanControllers(); stopTextActionMode(); mSuggestionsPopupWindow.show(); } diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index e84ba9968de74..2e77f43a565c0 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -6363,7 +6363,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener // This would stop a possible selection mode, but no such mode is started in case // extracted mode will start. Some text is selected though, and will trigger an action mode // in the extracted view. - mEditor.hideControllers(); + mEditor.hideCursorAndSpanControllers(); stopTextActionMode(); } @@ -8192,7 +8192,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener protected void onVisibilityChanged(View changedView, int visibility) { super.onVisibilityChanged(changedView, visibility); if (mEditor != null && visibility != VISIBLE) { - mEditor.hideControllers(); + mEditor.hideCursorAndSpanControllers(); stopTextActionMode(); } } @@ -9644,7 +9644,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener // since we are doing so explicitlty by other means and these // controllers interact with how selection behaves. if (mEditor != null) { - mEditor.hideControllers(); + mEditor.hideCursorAndSpanControllers(); } CharSequence text = getIterableTextForAccessibility(); if (Math.min(start, end) >= 0 && Math.max(start, end) <= text.length()) {