diff options
| author | 2022-08-15 03:23:19 +0000 | |
|---|---|---|
| committer | 2022-08-15 03:23:19 +0000 | |
| commit | 7e56ce10982e5ba698c9dedb2f13b946d120f41d (patch) | |
| tree | 20cf39e9766d683368ad73c346ea3291e65d04da | |
| parent | 02564bef96311607767d44244f909633bcb9a0e0 (diff) | |
| parent | ea5bbfeeb018c91f3998043d3c2dee5a7bad5c9c (diff) | |
Merge "Hide text UIs for mouse interaction"
| -rw-r--r-- | core/java/android/widget/Editor.java | 28 | ||||
| -rw-r--r-- | core/java/android/widget/SelectionActionModeHelper.java | 6 |
2 files changed, 29 insertions, 5 deletions
diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java index b233e5453c05..b21c5b35e24b 100644 --- a/core/java/android/widget/Editor.java +++ b/core/java/android/widget/Editor.java @@ -226,6 +226,8 @@ public class Editor { final UndoInputFilter mUndoInputFilter = new UndoInputFilter(this); boolean mAllowUndo = true; + private int mLastToolType = MotionEvent.TOOL_TYPE_UNKNOWN; + private final MetricsLogger mMetricsLogger = new MetricsLogger(); // Cursor Controllers. @@ -1732,6 +1734,9 @@ public class Editor { @VisibleForTesting public void onTouchEvent(MotionEvent event) { final boolean filterOutEvent = shouldFilterOutTouchEvent(event); + + mLastToolType = event.getToolType(event.getActionIndex()); + mLastButtonState = event.getButtonState(); if (filterOutEvent) { if (event.getActionMasked() == MotionEvent.ACTION_UP) { @@ -1784,7 +1789,7 @@ public class Editor { } private void showFloatingToolbar() { - if (mTextActionMode != null) { + if (mTextActionMode != null && showUIForFingerInput()) { // Delay "show" so it doesn't interfere with click confirmations // or double-clicks that could "dismiss" the floating toolbar. int delay = ViewConfiguration.getDoubleTapTimeout(); @@ -1864,7 +1869,8 @@ public class Editor { final CursorController cursorController = mTextView.hasSelection() ? getSelectionController() : getInsertionController(); if (cursorController != null && !cursorController.isActive() - && !cursorController.isCursorBeingModified()) { + && !cursorController.isCursorBeingModified() + && showUIForFingerInput()) { cursorController.show(); } } @@ -2515,6 +2521,10 @@ public class Editor { return false; } + if (!showUIForFingerInput()) { + return false; + } + ActionMode.Callback actionModeCallback = new TextActionModeCallback(actionMode); mTextActionMode = mTextView.startActionMode(actionModeCallback, ActionMode.TYPE_FLOATING); registerOnBackInvokedCallback(); @@ -2667,7 +2677,7 @@ public class Editor { mTextView.postDelayed(mShowSuggestionRunnable, ViewConfiguration.getDoubleTapTimeout()); } else if (hasInsertionController()) { - if (shouldInsertCursor) { + if (shouldInsertCursor && showUIForFingerInput()) { getInsertionController().show(); } else { getInsertionController().hide(); @@ -5397,7 +5407,8 @@ public class Editor { final PointF showPosInView = new PointF(); final boolean shouldShow = checkForTransforms() /*check not rotated and compute scale*/ && !tooLargeTextForMagnifier() - && obtainMagnifierShowCoordinates(event, showPosInView); + && obtainMagnifierShowCoordinates(event, showPosInView) + && showUIForFingerInput(); if (shouldShow) { // Make the cursor visible and stop blinking. mRenderCursorRegardlessTiming = true; @@ -6343,6 +6354,15 @@ public class Editor { } } + /** + * Returns true when need to show UIs, e.g. floating toolbar, etc, for finger based interaction. + * + * @return true if UIs need to show for finger interaciton. false if UIs are not necessary. + */ + public boolean showUIForFingerInput() { + return mLastToolType != MotionEvent.TOOL_TYPE_MOUSE; + } + /** Controller for the insertion cursor. */ @VisibleForTesting public class InsertionPointCursorController implements CursorController { diff --git a/core/java/android/widget/SelectionActionModeHelper.java b/core/java/android/widget/SelectionActionModeHelper.java index a0ec48bc6beb..54a415cfa01b 100644 --- a/core/java/android/widget/SelectionActionModeHelper.java +++ b/core/java/android/widget/SelectionActionModeHelper.java @@ -301,7 +301,11 @@ public final class SelectionActionModeHelper { final SelectionModifierCursorController controller = mEditor.getSelectionController(); if (controller != null && (mTextView.isTextSelectable() || mTextView.isTextEditable())) { - controller.show(); + if (mEditor.showUIForFingerInput()) { + controller.show(); + } else { + controller.hide(); + } } if (result != null) { switch (actionMode) { |