Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c75eafe6 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Minor TextView Context Menu refactor" into main

parents 7053f3cf 66e4924d
Loading
Loading
Loading
Loading
+27 −17
Original line number Diff line number Diff line
@@ -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());
@@ -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);

@@ -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,
@@ -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')
@@ -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);
    }

    /**
+10 −2
Original line number Diff line number Diff line
@@ -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;
        }
@@ -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;
        }
+10 −7
Original line number Diff line number Diff line
@@ -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;
@@ -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);
@@ -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);