summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/view/HandwritingInitiator.java21
-rw-r--r--core/tests/coretests/src/android/view/stylus/HandwritingInitiatorTest.java21
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;