am eb665337: Merge "Fix Floating tool bar covers text during long press + drag" into mnc-dev
* commit 'eb665337162416c4754a9f11005004a8d936775e': Fix Floating tool bar covers text during long press + drag
This commit is contained in:
@@ -1004,14 +1004,14 @@ public class Editor {
|
||||
stopSelectionActionMode();
|
||||
} else {
|
||||
stopSelectionActionMode();
|
||||
startSelectionActionModeWithSelectionAndStartDrag();
|
||||
selectCurrentWordAndStartDrag();
|
||||
}
|
||||
handled = true;
|
||||
}
|
||||
|
||||
// Start a new selection
|
||||
if (!handled) {
|
||||
handled = startSelectionActionModeWithSelectionAndStartDrag();
|
||||
handled = selectCurrentWordAndStartDrag();
|
||||
}
|
||||
|
||||
return handled;
|
||||
@@ -1723,23 +1723,10 @@ public class Editor {
|
||||
return mSelectionActionMode != null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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.
|
||||
* are shown if there is a selection, otherwise the insertion handle is shown. This should be
|
||||
* used when the mode is started from a non-touch event.
|
||||
*
|
||||
* @return true if the selection mode was actually started.
|
||||
*/
|
||||
@@ -1747,40 +1734,67 @@ public class Editor {
|
||||
boolean selectionStarted = startSelectionActionModeWithSelectionInternal();
|
||||
if (selectionStarted) {
|
||||
getSelectionController().show();
|
||||
} else if (getInsertionController() != null) {
|
||||
getInsertionController().show();
|
||||
}
|
||||
return selectionStarted;
|
||||
}
|
||||
|
||||
private boolean startSelectionActionModeWithSelectionInternal() {
|
||||
/**
|
||||
* If the TextView allows text selection, selects the current word when no existing selection
|
||||
* was available and starts a drag.
|
||||
*
|
||||
* @return true if the drag was started.
|
||||
*/
|
||||
private boolean selectCurrentWordAndStartDrag() {
|
||||
if (extractedTextModeWillBeStarted()) {
|
||||
// Cancel the single tap delayed runnable.
|
||||
if (mSelectionModeWithoutSelectionRunnable != null) {
|
||||
mTextView.removeCallbacks(mSelectionModeWithoutSelectionRunnable);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
if (mSelectionActionMode != null) {
|
||||
mSelectionActionMode.finish();
|
||||
}
|
||||
if (!checkFieldAndSelectCurrentWord()) {
|
||||
return false;
|
||||
}
|
||||
getSelectionController().enterDrag();
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether a selection can be performed on the current TextView and if so selects
|
||||
* the current word.
|
||||
*
|
||||
* @return true if there already was a selection or if the current word was selected.
|
||||
*/
|
||||
private boolean checkFieldAndSelectCurrentWord() {
|
||||
if (!mTextView.canSelectText() || !mTextView.requestFocus()) {
|
||||
Log.w(TextView.LOG_TAG,
|
||||
"TextView does not support text selection. Selection cancelled.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!mTextView.hasSelection()) {
|
||||
// There may already be a selection on device rotation
|
||||
return selectCurrentWord();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean startSelectionActionModeWithSelectionInternal() {
|
||||
if (mSelectionActionMode != null) {
|
||||
// Selection action mode is already started
|
||||
mSelectionActionMode.invalidate();
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!mTextView.canSelectText() || !mTextView.requestFocus()) {
|
||||
Log.w(TextView.LOG_TAG,
|
||||
"TextView does not support text selection. Action mode cancelled.");
|
||||
if (!checkFieldAndSelectCurrentWord()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!mTextView.hasSelection()) {
|
||||
// There may already be a selection on device rotation
|
||||
if (!selectCurrentWord()) {
|
||||
// No word found under cursor or text selection not permitted.
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
boolean willExtract = extractedTextModeWillBeStarted();
|
||||
|
||||
// Do not start the action mode when extracted text will show up full screen, which would
|
||||
@@ -4387,7 +4401,7 @@ public class Editor {
|
||||
boolean stayedInArea = distanceSquared < doubleTapSlop * doubleTapSlop;
|
||||
|
||||
if (stayedInArea && isPositionOnText(eventX, eventY)) {
|
||||
startSelectionActionModeWithSelectionAndStartDrag();
|
||||
selectCurrentWordAndStartDrag();
|
||||
mDiscardNextActionUp = true;
|
||||
}
|
||||
}
|
||||
@@ -4490,6 +4504,7 @@ public class Editor {
|
||||
mEndHandle.showAtLocation(endOffset);
|
||||
|
||||
// No longer the first dragging motion, reset.
|
||||
startSelectionActionModeWithSelection();
|
||||
mDragAcceleratorActive = false;
|
||||
mStartOffset = -1;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user