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

Commit d69517eb authored by Nikita Dubrovsky's avatar Nikita Dubrovsky Committed by Android (Google) Code Review
Browse files

Merge "Fix NPE in InsertionPointCursorController.onTouchEvent"

parents 872d3504 99b55fa6
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -5737,7 +5737,7 @@ public class Editor {
        private boolean mIsDraggingCursor;

        public void onTouchEvent(MotionEvent event) {
            if (getSelectionController().isCursorBeingModified()) {
            if (hasSelectionController() && getSelectionController().isCursorBeingModified()) {
                return;
            }
            switch (event.getActionMasked()) {
+18 −0
Original line number Diff line number Diff line
@@ -67,6 +67,7 @@ public class EditorCursorDragTest {
        mOriginalFlagValue = Editor.FLAG_ENABLE_CURSOR_DRAG;
        Editor.FLAG_ENABLE_CURSOR_DRAG = true;
    }

    @After
    public void after() throws Throwable {
        Editor.FLAG_ENABLE_CURSOR_DRAG = mOriginalFlagValue;
@@ -356,6 +357,23 @@ public class EditorCursorDragTest {
        assertFalse(editor.getSelectionController().isCursorBeingModified());
    }

    @Test // Reproduces b/147366705
    public void testCursorDrag_nonSelectableTextView() throws Throwable {
        String text = "Hello world!";
        TextView tv = mActivity.findViewById(R.id.nonselectable_textview);
        tv.setText(text);
        Editor editor = tv.getEditorForTesting();

        // Simulate a tap. No error should be thrown.
        long event1Time = 1001;
        MotionEvent event1 = downEvent(event1Time, event1Time, 20f, 30f);
        mInstrumentation.runOnMainSync(() -> editor.onTouchEvent(event1));

        // Swipe left to right. No error should be thrown.
        onView(withId(R.id.nonselectable_textview)).perform(
                dragOnText(text.indexOf("llo"), text.indexOf("!")));
    }

    private static MotionEvent downEvent(long downTime, long eventTime, float x, float y) {
        return MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_DOWN, x, y, 0);
    }