Merge "Fix: Don't display the drag handles when focus is lost" into mnc-dev
diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java
index a916887..48e69a1 100644
--- a/core/java/android/widget/Editor.java
+++ b/core/java/android/widget/Editor.java
@@ -393,7 +393,7 @@
}
mPreserveDetachedSelection = true;
- hideControllers();
+ hideCursorAndSpanControllers();
stopTextActionMode();
mPreserveDetachedSelection = false;
mTemporaryDetach = false;
@@ -605,9 +605,9 @@
}
/**
- * 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 @@
// 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 @@
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 @@
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 @@
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 @@
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 77e5b10..207605e 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -6364,7 +6364,7 @@
// 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();
}
@@ -8193,7 +8193,7 @@
protected void onVisibilityChanged(View changedView, int visibility) {
super.onVisibilityChanged(changedView, visibility);
if (mEditor != null && visibility != VISIBLE) {
- mEditor.hideControllers();
+ mEditor.hideCursorAndSpanControllers();
stopTextActionMode();
}
}
@@ -9645,7 +9645,7 @@
// 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()) {