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);
+    }
+
 }