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

Commit caf9109d authored by Justin Ghan's avatar Justin Ghan Committed by Android (Google) Code Review
Browse files

Merge "Make sure view has focus before starting handwriting" into udc-dev

parents 477d692a b6661805
Loading
Loading
Loading
Loading
+14 −7
Original line number Diff line number Diff line
@@ -170,6 +170,9 @@ public class HandwritingInitiator {
                            findBestCandidateView(mState.mStylusDownX, mState.mStylusDownY);
                    if (candidateView != null) {
                        if (candidateView == getConnectedView()) {
                            if (!candidateView.hasFocus()) {
                                requestFocusWithoutReveal(candidateView);
                            }
                            startHandwriting(candidateView);
                        } else if (candidateView.getHandwritingDelegatorCallback() != null) {
                            String delegatePackageName =
@@ -181,13 +184,7 @@ public class HandwritingInitiator {
                                    candidateView, delegatePackageName);
                            candidateView.getHandwritingDelegatorCallback().run();
                        } else {
                            if (candidateView.getRevealOnFocusHint()) {
                                candidateView.setRevealOnFocusHint(false);
                                candidateView.requestFocus();
                                candidateView.setRevealOnFocusHint(true);
                            } else {
                                candidateView.requestFocus();
                            }
                            requestFocusWithoutReveal(candidateView);
                        }
                    }
                }
@@ -380,6 +377,16 @@ public class HandwritingInitiator {
        return false;
    }

    private static void requestFocusWithoutReveal(View view) {
        if (view.getRevealOnFocusHint()) {
            view.setRevealOnFocusHint(false);
            view.requestFocus();
            view.setRevealOnFocusHint(true);
        } else {
            view.requestFocus();
        }
    }

    /**
     * Given the location of the stylus event, return the best candidate view to initialize
     * handwriting mode.
+21 −0
Original line number Diff line number Diff line
@@ -336,6 +336,27 @@ public class HandwritingInitiatorTest {
        verify(mTestView1, times(1)).requestFocus();
    }

    @Test
    public void onTouchEvent_focusView_inputConnectionAlreadyBuilt_stylusMoveOnce_withinHWArea() {
        mHandwritingInitiator.onInputConnectionCreated(mTestView1);

        final int x1 = (sHwArea1.left + sHwArea1.right) / 2;
        final int y1 = (sHwArea1.top + sHwArea1.bottom) / 2;
        MotionEvent stylusEvent1 = createStylusEvent(ACTION_DOWN, x1, y1, 0);
        mHandwritingInitiator.onTouchEvent(stylusEvent1);

        final int x2 = x1 + mHandwritingSlop * 2;
        final int y2 = y1;

        MotionEvent stylusEvent2 = createStylusEvent(ACTION_MOVE, x2, y2, 0);
        mHandwritingInitiator.onTouchEvent(stylusEvent2);

        // View has input connection but not focus, so HandwritingInitiator will request focus
        // before starting handwriting.
        verify(mTestView1).requestFocus();
        verify(mHandwritingInitiator).startHandwriting(mTestView1);
    }

    @Test
    public void onTouchEvent_focusView_stylusMoveOnce_withinExtendedHWArea() {
        final int x1 = sHwArea1.left - HW_BOUNDS_OFFSETS_LEFT_PX / 2;