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

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

Merge "Fix handwriting delegation when delegate already has input connection"...

Merge "Fix handwriting delegation when delegate already has input connection" into udc-dev am: 81a6dbd3 am: c5d9fa1a

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



Change-Id: I5efdce49a2b10e70409fd8ccc354eb547cbcf537
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 5d547727 c5d9fa1a
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -204,6 +204,16 @@ public class HandwritingInitiator {
        mConnectionCount = 0;
    }

    /**
     * Notify HandwritingInitiator that a delegate view (see {@link View#isHandwritingDelegate})
     * gained focus.
     */
    public void onDelegateViewFocused(@NonNull View view) {
        if (view == getConnectedView()) {
            tryAcceptStylusHandwritingDelegation(view);
        }
    }

    /**
     * Notify HandwritingInitiator that a new InputConnection is created.
     * The caller of this method should guarantee that each onInputConnectionCreated call
+7 −0
Original line number Diff line number Diff line
@@ -8324,6 +8324,13 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
            onFocusLost();
        } else if (hasWindowFocus()) {
            notifyFocusChangeToImeFocusController(true /* hasFocus */);
            if (mIsHandwritingDelegate) {
                ViewRootImpl viewRoot = getViewRootImpl();
                if (viewRoot != null) {
                    viewRoot.getHandwritingInitiator().onDelegateViewFocused(this);
                }
            }
        }
        invalidate(true);
+25 −1
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import static android.view.stylus.HandwritingTestUtil.createView;
import static com.google.common.truth.Truth.assertThat;

import static org.mockito.Mockito.never;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@@ -224,7 +225,7 @@ public class HandwritingInitiatorTest {
    }

    @Test
    public void onTouchEvent_startHandwriting_delegate() {
    public void onTouchEvent_tryAcceptDelegation_delegatorCallbackCreatesInputConnection() {
        View delegateView = new View(mContext);
        delegateView.setIsHandwritingDelegate(true);

@@ -244,6 +245,29 @@ public class HandwritingInitiatorTest {
        verify(mHandwritingInitiator, times(1)).tryAcceptStylusHandwritingDelegation(delegateView);
    }

    @Test
    public void onTouchEvent_tryAcceptDelegation_delegatorCallbackFocusesDelegate() {
        View delegateView = new View(mContext);
        delegateView.setIsHandwritingDelegate(true);
        mHandwritingInitiator.onInputConnectionCreated(delegateView);
        reset(mHandwritingInitiator);

        mTestView1.setHandwritingDelegatorCallback(
                () -> mHandwritingInitiator.onDelegateViewFocused(delegateView));

        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);

        verify(mHandwritingInitiator, times(1)).tryAcceptStylusHandwritingDelegation(delegateView);
    }

    @Test
    public void onTouchEvent_notStartHandwriting_whenHandwritingNotAvailable() {
        final Rect rect = new Rect(600, 600, 900, 900);