diff options
| -rw-r--r-- | core/java/android/view/HandwritingInitiator.java | 21 | ||||
| -rw-r--r-- | core/tests/coretests/src/android/view/stylus/HandwritingInitiatorTest.java | 21 |
2 files changed, 35 insertions, 7 deletions
diff --git a/core/java/android/view/HandwritingInitiator.java b/core/java/android/view/HandwritingInitiator.java index d38ef1f1762a..a47783cdacfe 100644 --- a/core/java/android/view/HandwritingInitiator.java +++ b/core/java/android/view/HandwritingInitiator.java @@ -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. diff --git a/core/tests/coretests/src/android/view/stylus/HandwritingInitiatorTest.java b/core/tests/coretests/src/android/view/stylus/HandwritingInitiatorTest.java index a3dec84e78a8..1ec2613dd101 100644 --- a/core/tests/coretests/src/android/view/stylus/HandwritingInitiatorTest.java +++ b/core/tests/coretests/src/android/view/stylus/HandwritingInitiatorTest.java @@ -337,6 +337,27 @@ public class HandwritingInitiatorTest { } @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; final int y1 = sHwArea1.top - HW_BOUNDS_OFFSETS_TOP_PX / 2; |