Loading core/java/android/view/HandwritingInitiator.java +14 −7 Original line number Diff line number Diff line Loading @@ -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 = Loading @@ -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); } } } Loading Loading @@ -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. Loading core/tests/coretests/src/android/view/stylus/HandwritingInitiatorTest.java +21 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading
core/java/android/view/HandwritingInitiator.java +14 −7 Original line number Diff line number Diff line Loading @@ -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 = Loading @@ -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); } } } Loading Loading @@ -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. Loading
core/tests/coretests/src/android/view/stylus/HandwritingInitiatorTest.java +21 −0 Original line number Diff line number Diff line Loading @@ -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; Loading