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

Commit dc980509 authored by Justin Ghan's avatar Justin Ghan Committed by Automerger Merge Worker
Browse files

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

Merge "Make sure view has focus before starting handwriting" into udc-dev am: caf9109d am: d9462120

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/21934066



Change-Id: I0790966679ef432b13e9ae8a3a66707971dedd12
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 854b6ee0 d9462120
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;