summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/inputmethodservice/InputMethodService.java6
-rw-r--r--core/java/com/android/internal/inputmethod/IInputMethodPrivilegedOperations.aidl2
-rw-r--r--core/java/com/android/internal/inputmethod/InputMethodPrivilegedOperations.java20
-rw-r--r--services/core/java/com/android/server/inputmethod/InputMethodManagerService.java9
4 files changed, 37 insertions, 0 deletions
diff --git a/core/java/android/inputmethodservice/InputMethodService.java b/core/java/android/inputmethodservice/InputMethodService.java
index 4bde8e2b44ee..5f3c15d1842e 100644
--- a/core/java/android/inputmethodservice/InputMethodService.java
+++ b/core/java/android/inputmethodservice/InputMethodService.java
@@ -1199,6 +1199,11 @@ public class InputMethodService extends AbstractInputMethodService {
// when the stylus is not down.
mPrivOps.setHandwritingSurfaceNotTouchable(true);
break;
+ case MotionEvent.ACTION_OUTSIDE:
+ // TODO(b/350047836): determine if there is use-case for simultaneous touch
+ // and stylus handwriting and we shouldn't finish for that.
+ finishStylusHandwriting();
+ break;
}
}
@@ -3207,6 +3212,7 @@ public class InputMethodService extends AbstractInputMethodService {
Log.d(TAG, "Setting new handwriting region for stylus handwriting "
+ handwritingRegion + " from last " + mLastHandwritingRegion);
}
+ mPrivOps.setHandwritingTouchableRegion(handwritingRegion);
mLastHandwritingRegion = handwritingRegion;
}
diff --git a/core/java/com/android/internal/inputmethod/IInputMethodPrivilegedOperations.aidl b/core/java/com/android/internal/inputmethod/IInputMethodPrivilegedOperations.aidl
index ac4c066a992f..5fbb92de46a0 100644
--- a/core/java/com/android/internal/inputmethod/IInputMethodPrivilegedOperations.aidl
+++ b/core/java/com/android/internal/inputmethod/IInputMethodPrivilegedOperations.aidl
@@ -16,6 +16,7 @@
package com.android.internal.inputmethod;
+import android.graphics.Region;
import android.net.Uri;
import android.view.inputmethod.ImeTracker;
import android.view.inputmethod.InputMethodSubtype;
@@ -51,4 +52,5 @@ oneway interface IInputMethodPrivilegedOperations {
void resetStylusHandwriting(int requestId);
void switchKeyboardLayoutAsync(int direction);
void setHandwritingSurfaceNotTouchable(boolean notTouchable);
+ void setHandwritingTouchableRegion(in Region region);
}
diff --git a/core/java/com/android/internal/inputmethod/InputMethodPrivilegedOperations.java b/core/java/com/android/internal/inputmethod/InputMethodPrivilegedOperations.java
index b009c99dc9e3..36333a993c44 100644
--- a/core/java/com/android/internal/inputmethod/InputMethodPrivilegedOperations.java
+++ b/core/java/com/android/internal/inputmethod/InputMethodPrivilegedOperations.java
@@ -20,6 +20,7 @@ import android.annotation.AnyThread;
import android.annotation.DrawableRes;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.graphics.Region;
import android.inputmethodservice.InputMethodService.BackDispositionMode;
import android.inputmethodservice.InputMethodService.ImeWindowVisibility;
import android.net.Uri;
@@ -159,6 +160,25 @@ public final class InputMethodPrivilegedOperations {
}
}
+
+ /**
+ * Calls {@link IInputMethodPrivilegedOperations#setHandwritingTouchableRegion(Region)}.
+ *
+ * @param region {@link Region} to set handwritable.
+ */
+ @AnyThread
+ public void setHandwritingTouchableRegion(Region region) {
+ final IInputMethodPrivilegedOperations ops = mOps.getAndWarnIfNull();
+ if (ops == null) {
+ return;
+ }
+ try {
+ ops.setHandwritingTouchableRegion(region);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
/**
* Calls {@link IInputMethodPrivilegedOperations#createInputContentUriToken(Uri, String,
* AndroidFuture)}.
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
index b7af9a4b17bd..02dd884ad60d 100644
--- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
@@ -84,6 +84,7 @@ import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
import android.content.pm.UserInfo;
import android.content.res.Resources;
+import android.graphics.Region;
import android.hardware.display.DisplayManagerInternal;
import android.hardware.input.InputManager;
import android.inputmethodservice.InputMethodService;
@@ -6888,6 +6889,14 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
@BinderThread
@Override
+ public void setHandwritingTouchableRegion(Region region) {
+ synchronized (ImfLock.class) {
+ mImms.mHwController.setHandwritingTouchableRegion(region);
+ }
+ }
+
+ @BinderThread
+ @Override
public void createInputContentUriToken(Uri contentUri, String packageName,
AndroidFuture future /* T=IBinder */) {
@SuppressWarnings("unchecked") final AndroidFuture<IBinder> typedFuture = future;