Do not invoke textclassifier when dimissing the selection
Problem: When dismissing the selection by clicking the TextView, invalidateActionModeAsync is called to ask text classifier to generate a new smart action for the selected text. It is not necessary because the selection is going to be dismissed. Cause: To update the smart action chip when a user adjusts the selection span by dragging the selection handle, we call showFloatingToolbar() when we get an ACTION_UP event. The problem is that we also get an ACTION_UP event when user dismisses the seletion by clicking the textview. In that case, we don't need to update the smart action chip or show the floating toolbar. Solution: Only call ShowFloatingToolbar() when we get an ACTION_UP and also the user is modifying the selection/insertion curosr. Test: Added a test in TextViewIntegrationTest. Test: Manual. Input a long phone number. Change the selection span to select fewer digits. Click "Call" and check the prefilled number. Test: Manual. Drag the insertion curosr(w EditText), floating toolbar is reshown when lifting the finger. Fixes: 169042542 Change-Id: Ic398a8521d99218b14689fe0668adc22e6b143c5
This commit is contained in:
@@ -1705,15 +1705,23 @@ public class Editor {
|
||||
}
|
||||
|
||||
private void updateFloatingToolbarVisibility(MotionEvent event) {
|
||||
if (mTextActionMode != null) {
|
||||
switch (event.getActionMasked()) {
|
||||
case MotionEvent.ACTION_MOVE:
|
||||
hideFloatingToolbar(ActionMode.DEFAULT_HIDE_DURATION);
|
||||
break;
|
||||
case MotionEvent.ACTION_UP: // fall through
|
||||
case MotionEvent.ACTION_CANCEL:
|
||||
if (mTextActionMode == null) {
|
||||
return;
|
||||
}
|
||||
switch (event.getActionMasked()) {
|
||||
case MotionEvent.ACTION_MOVE:
|
||||
hideFloatingToolbar(ActionMode.DEFAULT_HIDE_DURATION);
|
||||
break;
|
||||
case MotionEvent.ACTION_UP: // fall through
|
||||
case MotionEvent.ACTION_CANCEL:
|
||||
final SelectionModifierCursorController selectionController =
|
||||
getSelectionController();
|
||||
final InsertionPointCursorController insertionController = getInsertionController();
|
||||
if ((selectionController != null && selectionController.isCursorBeingModified())
|
||||
|| (insertionController != null
|
||||
&& insertionController.isCursorBeingModified())) {
|
||||
showFloatingToolbar();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user