Merge "Only enable Autofill context menu item when no text selected." into main
diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java
index 8b6ead7..d28c953 100644
--- a/core/java/android/widget/Editor.java
+++ b/core/java/android/widget/Editor.java
@@ -3285,9 +3285,11 @@
.setEnabled(mTextView.canShare())
.setIcon(a.getDrawable(6))
.setOnMenuItemClickListener(mOnContextMenuItemClickListener);
+ final String selected = mTextView.getSelectedText();
menu.add(CONTEXT_MENU_GROUP_MISC, TextView.ID_AUTOFILL, menuItemOrderAutofill,
android.R.string.autofill)
- .setEnabled(mTextView.canRequestAutofill())
+ .setEnabled(mTextView.canRequestAutofill()
+ && (selected == null || selected.isEmpty()))
.setOnMenuItemClickListener(mOnContextMenuItemClickListener);
mPreserveSelection = true;
diff --git a/core/tests/coretests/src/android/widget/TextViewContextMenuTest.java b/core/tests/coretests/src/android/widget/TextViewContextMenuTest.java
index 12f8c9c..f9da832 100644
--- a/core/tests/coretests/src/android/widget/TextViewContextMenuTest.java
+++ b/core/tests/coretests/src/android/widget/TextViewContextMenuTest.java
@@ -240,4 +240,45 @@
verify(mockNoIconMenu, times(0)).setIcon(any());
verify(mockNoIconMenu2, times(0)).setIcon(any());
}
+
+ @UiThreadTest
+ @Test
+ public void testAutofillMenuItemEnabledWhenNoTextSelected() {
+ ContextMenu menu = mock(ContextMenu.class);
+ MenuItem mockMenuItem = newMockMenuItem();
+ when(menu.add(anyInt(), anyInt(), anyInt(), anyInt())).thenReturn(mockMenuItem);
+ MenuItem mockAutofillMenuItem = newMockMenuItem();
+ when(menu.add(anyInt(), eq(TextView.ID_AUTOFILL), anyInt(), anyInt()))
+ .thenReturn(mockAutofillMenuItem);
+
+ EditText et = mActivity.findViewById(R.id.editText);
+ et.setText("Test");
+
+ Editor editor = et.getEditorForTesting();
+ editor.onCreateContextMenu(menu);
+
+ verify(menu).add(anyInt(), eq(TextView.ID_AUTOFILL), anyInt(), anyInt());
+ verify(mockAutofillMenuItem).setEnabled(true);
+ }
+
+ @UiThreadTest
+ @Test
+ public void testAutofillMenuItemNotEnabledWhenTextSelected() {
+ ContextMenu menu = mock(ContextMenu.class);
+ MenuItem mockMenuItem = newMockMenuItem();
+ when(menu.add(anyInt(), anyInt(), anyInt(), anyInt())).thenReturn(mockMenuItem);
+ MenuItem mockAutofillMenuItem = newMockMenuItem();
+ when(menu.add(anyInt(), eq(TextView.ID_AUTOFILL), anyInt(), anyInt()))
+ .thenReturn(mockAutofillMenuItem);
+
+ EditText et = mActivity.findViewById(R.id.editText);
+ et.setText("Test");
+ et.selectAll();
+ Editor editor = et.getEditorForTesting();
+ editor.onCreateContextMenu(menu);
+
+ verify(menu).add(anyInt(), eq(TextView.ID_AUTOFILL), anyInt(), anyInt());
+ verify(mockAutofillMenuItem).setEnabled(false);
+ }
+
}