diff options
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; |