Loading core/java/android/widget/Editor.java +27 −17 Original line number Diff line number Diff line Loading @@ -474,7 +474,11 @@ public class Editor { private final AccessibilitySmartActions mA11ySmartActions; private InsertModeController mInsertModeController; Editor(TextView textView) { /** * @hide */ @VisibleForTesting public Editor(TextView textView) { mTextView = textView; // Synchronize the filter list, which places the undo input filter at the end. mTextView.setFilters(mTextView.getFilters()); Loading Loading @@ -3206,16 +3210,6 @@ public class Editor { } } final int menuItemOrderUndo = 2; final int menuItemOrderRedo = 3; final int menuItemOrderCut = 4; final int menuItemOrderCopy = 5; final int menuItemOrderPaste = 6; final int menuItemOrderPasteAsPlainText = 7; final int menuItemOrderSelectAll = 8; final int menuItemOrderShare = 9; final int menuItemOrderAutofill = 10; menu.setOptionalIconsVisible(true); menu.setGroupDividerEnabled(true); Loading @@ -3224,6 +3218,17 @@ public class Editor { final int keyboard = mTextView.getResources().getConfiguration().keyboard; menu.setQwertyMode(keyboard == Configuration.KEYBOARD_QWERTY); setTextContextMenuItems(menu); mPreserveSelection = true; // No-op for the old context menu because it doesn't have icons. adjustIconSpacing(menu); } /** @hide */ @VisibleForTesting public void setTextContextMenuItems(ContextMenu menu) { final TypedArray a = mTextView.getContext().obtainStyledAttributes(new int[]{ // TODO: Make Undo/Redo be public attribute. com.android.internal.R.attr.actionModeUndoDrawable, Loading @@ -3235,6 +3240,16 @@ public class Editor { android.R.attr.actionModeShareDrawable, }); final int menuItemOrderUndo = 2; final int menuItemOrderRedo = 3; final int menuItemOrderCut = 4; final int menuItemOrderCopy = 5; final int menuItemOrderPaste = 6; final int menuItemOrderPasteAsPlainText = 7; final int menuItemOrderSelectAll = 8; final int menuItemOrderShare = 9; final int menuItemOrderAutofill = 10; menu.add(CONTEXT_MENU_GROUP_UNDO_REDO, TextView.ID_UNDO, menuItemOrderUndo, com.android.internal.R.string.undo) .setAlphabeticShortcut('z') Loading Loading @@ -3291,12 +3306,7 @@ public class Editor { .setEnabled(mTextView.canRequestAutofill() && (selected == null || selected.isEmpty())) .setOnMenuItemClickListener(mOnContextMenuItemClickListener); mPreserveSelection = true; a.recycle(); // No-op for the old context menu because it doesn't have icons. adjustIconSpacing(menu); } /** Loading core/java/android/widget/TextView.java +10 −2 Original line number Diff line number Diff line Loading @@ -12255,7 +12255,11 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener return selectionMin >= 0 && selectionMax > 0 && selectionMin != selectionMax; } String getSelectedText() { /** * @hide */ @VisibleForTesting public String getSelectedText() { if (!hasSelection()) { return null; } Loading Loading @@ -14080,7 +14084,11 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener structure.setInputType(getInputType()); } boolean canRequestAutofill() { /** * @hide */ @VisibleForTesting public boolean canRequestAutofill() { if (!isAutofillable()) { return false; } core/tests/coretests/src/android/widget/TextViewContextMenuTest.java +10 −7 Original line number Diff line number Diff line Loading @@ -23,7 +23,9 @@ import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyChar; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; Loading Loading @@ -251,8 +253,9 @@ public class TextViewContextMenuTest { when(menu.add(anyInt(), eq(TextView.ID_AUTOFILL), anyInt(), anyInt())) .thenReturn(mockAutofillMenuItem); EditText et = mActivity.findViewById(R.id.editText); et.setText("Test"); EditText et = spy(mActivity.findViewById(R.id.editText)); doReturn(true).when(et).canRequestAutofill(); doReturn(null).when(et).getSelectedText(); Editor editor = et.getEditorForTesting(); editor.onCreateContextMenu(menu); Loading @@ -271,11 +274,11 @@ public class TextViewContextMenuTest { 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); EditText et = spy(mActivity.findViewById(R.id.editText)); doReturn(true).when(et).canRequestAutofill(); doReturn("test").when(et).getSelectedText(); Editor editor = new Editor(et); editor.setTextContextMenuItems(menu); verify(menu).add(anyInt(), eq(TextView.ID_AUTOFILL), anyInt(), anyInt()); verify(mockAutofillMenuItem).setEnabled(false); Loading Loading
core/java/android/widget/Editor.java +27 −17 Original line number Diff line number Diff line Loading @@ -474,7 +474,11 @@ public class Editor { private final AccessibilitySmartActions mA11ySmartActions; private InsertModeController mInsertModeController; Editor(TextView textView) { /** * @hide */ @VisibleForTesting public Editor(TextView textView) { mTextView = textView; // Synchronize the filter list, which places the undo input filter at the end. mTextView.setFilters(mTextView.getFilters()); Loading Loading @@ -3206,16 +3210,6 @@ public class Editor { } } final int menuItemOrderUndo = 2; final int menuItemOrderRedo = 3; final int menuItemOrderCut = 4; final int menuItemOrderCopy = 5; final int menuItemOrderPaste = 6; final int menuItemOrderPasteAsPlainText = 7; final int menuItemOrderSelectAll = 8; final int menuItemOrderShare = 9; final int menuItemOrderAutofill = 10; menu.setOptionalIconsVisible(true); menu.setGroupDividerEnabled(true); Loading @@ -3224,6 +3218,17 @@ public class Editor { final int keyboard = mTextView.getResources().getConfiguration().keyboard; menu.setQwertyMode(keyboard == Configuration.KEYBOARD_QWERTY); setTextContextMenuItems(menu); mPreserveSelection = true; // No-op for the old context menu because it doesn't have icons. adjustIconSpacing(menu); } /** @hide */ @VisibleForTesting public void setTextContextMenuItems(ContextMenu menu) { final TypedArray a = mTextView.getContext().obtainStyledAttributes(new int[]{ // TODO: Make Undo/Redo be public attribute. com.android.internal.R.attr.actionModeUndoDrawable, Loading @@ -3235,6 +3240,16 @@ public class Editor { android.R.attr.actionModeShareDrawable, }); final int menuItemOrderUndo = 2; final int menuItemOrderRedo = 3; final int menuItemOrderCut = 4; final int menuItemOrderCopy = 5; final int menuItemOrderPaste = 6; final int menuItemOrderPasteAsPlainText = 7; final int menuItemOrderSelectAll = 8; final int menuItemOrderShare = 9; final int menuItemOrderAutofill = 10; menu.add(CONTEXT_MENU_GROUP_UNDO_REDO, TextView.ID_UNDO, menuItemOrderUndo, com.android.internal.R.string.undo) .setAlphabeticShortcut('z') Loading Loading @@ -3291,12 +3306,7 @@ public class Editor { .setEnabled(mTextView.canRequestAutofill() && (selected == null || selected.isEmpty())) .setOnMenuItemClickListener(mOnContextMenuItemClickListener); mPreserveSelection = true; a.recycle(); // No-op for the old context menu because it doesn't have icons. adjustIconSpacing(menu); } /** Loading
core/java/android/widget/TextView.java +10 −2 Original line number Diff line number Diff line Loading @@ -12255,7 +12255,11 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener return selectionMin >= 0 && selectionMax > 0 && selectionMin != selectionMax; } String getSelectedText() { /** * @hide */ @VisibleForTesting public String getSelectedText() { if (!hasSelection()) { return null; } Loading Loading @@ -14080,7 +14084,11 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener structure.setInputType(getInputType()); } boolean canRequestAutofill() { /** * @hide */ @VisibleForTesting public boolean canRequestAutofill() { if (!isAutofillable()) { return false; }
core/tests/coretests/src/android/widget/TextViewContextMenuTest.java +10 −7 Original line number Diff line number Diff line Loading @@ -23,7 +23,9 @@ import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyChar; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; Loading Loading @@ -251,8 +253,9 @@ public class TextViewContextMenuTest { when(menu.add(anyInt(), eq(TextView.ID_AUTOFILL), anyInt(), anyInt())) .thenReturn(mockAutofillMenuItem); EditText et = mActivity.findViewById(R.id.editText); et.setText("Test"); EditText et = spy(mActivity.findViewById(R.id.editText)); doReturn(true).when(et).canRequestAutofill(); doReturn(null).when(et).getSelectedText(); Editor editor = et.getEditorForTesting(); editor.onCreateContextMenu(menu); Loading @@ -271,11 +274,11 @@ public class TextViewContextMenuTest { 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); EditText et = spy(mActivity.findViewById(R.id.editText)); doReturn(true).when(et).canRequestAutofill(); doReturn("test").when(et).getSelectedText(); Editor editor = new Editor(et); editor.setTextContextMenuItems(menu); verify(menu).add(anyInt(), eq(TextView.ID_AUTOFILL), anyInt(), anyInt()); verify(mockAutofillMenuItem).setEnabled(false); Loading