Loading core/java/android/view/HandwritingInitiator.java +10 −0 Original line number Diff line number Diff line Loading @@ -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 Loading core/java/android/view/View.java +7 −0 Original line number Diff line number Diff line Loading @@ -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); core/tests/coretests/src/android/view/stylus/HandwritingInitiatorTest.java +25 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading @@ -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); Loading Loading
core/java/android/view/HandwritingInitiator.java +10 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
core/java/android/view/View.java +7 −0 Original line number Diff line number Diff line Loading @@ -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);
core/tests/coretests/src/android/view/stylus/HandwritingInitiatorTest.java +25 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading @@ -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); Loading