Merge "Finish handwriting session for recents gesture" into tm-dev

This commit is contained in:
Taran Singh
2022-03-21 20:54:31 +00:00
committed by Android (Google) Code Review
10 changed files with 73 additions and 7 deletions

View File

@@ -81,6 +81,7 @@ class IInputMethodWrapper extends IInputMethod.Stub
private static final int DO_CAN_START_STYLUS_HANDWRITING = 100; private static final int DO_CAN_START_STYLUS_HANDWRITING = 100;
private static final int DO_START_STYLUS_HANDWRITING = 110; private static final int DO_START_STYLUS_HANDWRITING = 110;
private static final int DO_INIT_INK_WINDOW = 120; private static final int DO_INIT_INK_WINDOW = 120;
private static final int DO_FINISH_STYLUS_HANDWRITING = 130;
final WeakReference<InputMethodServiceInternal> mTarget; final WeakReference<InputMethodServiceInternal> mTarget;
final Context mContext; final Context mContext;
@@ -263,6 +264,10 @@ class IInputMethodWrapper extends IInputMethod.Stub
inputMethod.initInkWindow(); inputMethod.initInkWindow();
return; return;
} }
case DO_FINISH_STYLUS_HANDWRITING: {
inputMethod.finishStylusHandwriting();
return;
}
} }
Log.w(TAG, "Unhandled message code: " + msg.what); Log.w(TAG, "Unhandled message code: " + msg.what);
@@ -427,4 +432,10 @@ class IInputMethodWrapper extends IInputMethod.Stub
public void initInkWindow() { public void initInkWindow() {
mCaller.executeOrSendMessage(mCaller.obtainMessage(DO_INIT_INK_WINDOW)); mCaller.executeOrSendMessage(mCaller.obtainMessage(DO_INIT_INK_WINDOW));
} }
@BinderThread
@Override
public void finishStylusHandwriting() {
mCaller.executeOrSendMessage(mCaller.obtainMessage(DO_FINISH_STYLUS_HANDWRITING));
}
} }

View File

@@ -992,6 +992,15 @@ public class InputMethodService extends AbstractInputMethodService {
mOnPreparedStylusHwCalled = true; mOnPreparedStylusHwCalled = true;
} }
/**
* {@inheritDoc}
* @hide
*/
@Override
public void finishStylusHandwriting() {
InputMethodService.this.finishStylusHandwriting();
}
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
@@ -2461,7 +2470,7 @@ public class InputMethodService extends AbstractInputMethodService {
mHandwritingEventReceiver = null; mHandwritingEventReceiver = null;
mInkWindow.hide(false /* remove */); mInkWindow.hide(false /* remove */);
mPrivOps.finishStylusHandwriting(requestId); mPrivOps.resetStylusHandwriting(requestId);
mOnPreparedStylusHwCalled = false; mOnPreparedStylusHwCalled = false;
onFinishStylusHandwriting(); onFinishStylusHandwriting();
} }

View File

@@ -414,4 +414,12 @@ public interface InputMethod {
// intentionally empty // intentionally empty
} }
/**
* Finish stylus handwriting session.
* @hide
*/
default void finishStylusHandwriting() {
// intentionally empty
}
} }

View File

@@ -43,5 +43,5 @@ oneway interface IInputMethodPrivilegedOperations {
void notifyUserActionAsync(); void notifyUserActionAsync();
void applyImeVisibilityAsync(IBinder showOrHideInputToken, boolean setVisible); void applyImeVisibilityAsync(IBinder showOrHideInputToken, boolean setVisible);
void onStylusHandwritingReady(int requestId, int pid); void onStylusHandwritingReady(int requestId, int pid);
void finishStylusHandwriting(int requestId); void resetStylusHandwriting(int requestId);
} }

View File

@@ -416,13 +416,13 @@ public final class InputMethodPrivilegedOperations {
* @param requestId * @param requestId
*/ */
@AnyThread @AnyThread
public void finishStylusHandwriting(int requestId) { public void resetStylusHandwriting(int requestId) {
final IInputMethodPrivilegedOperations ops = mOps.getAndWarnIfNull(); final IInputMethodPrivilegedOperations ops = mOps.getAndWarnIfNull();
if (ops == null) { if (ops == null) {
return; return;
} }
try { try {
ops.finishStylusHandwriting(requestId); ops.resetStylusHandwriting(requestId);
} catch (RemoteException e) { } catch (RemoteException e) {
throw e.rethrowFromSystemServer(); throw e.rethrowFromSystemServer();
} }

View File

@@ -67,4 +67,6 @@ oneway interface IInputMethod {
in List<MotionEvent> events); in List<MotionEvent> events);
void initInkWindow(); void initInkWindow();
void finishStylusHandwriting();
} }

View File

@@ -245,4 +245,13 @@ final class IInputMethodInvoker {
logRemoteException(e); logRemoteException(e);
} }
} }
@AnyThread
void finishStylusHandwriting() {
try {
mTarget.finishStylusHandwriting();
} catch (RemoteException e) {
logRemoteException(e);
}
}
} }

View File

@@ -19,6 +19,7 @@ package com.android.server.inputmethod;
import android.annotation.NonNull; import android.annotation.NonNull;
import android.annotation.Nullable; import android.annotation.Nullable;
import android.annotation.UserIdInt; import android.annotation.UserIdInt;
import android.inputmethodservice.InputMethodService;
import android.os.IBinder; import android.os.IBinder;
import android.view.inputmethod.InlineSuggestionsRequest; import android.view.inputmethod.InlineSuggestionsRequest;
import android.view.inputmethod.InputMethodInfo; import android.view.inputmethod.InputMethodInfo;
@@ -149,6 +150,12 @@ public abstract class InputMethodManagerInternal {
*/ */
public abstract void updateImeWindowStatus(boolean disableImeIcon); public abstract void updateImeWindowStatus(boolean disableImeIcon);
/**
* Finish stylus handwriting by calling {@link InputMethodService#finishStylusHandwriting()} if
* there is an ongoing handwriting session.
*/
public abstract void maybeFinishStylusHandwriting();
/** /**
* Callback when the IInputMethodSession from the accessibility service with the specified * Callback when the IInputMethodSession from the accessibility service with the specified
* accessibilityConnectionId is created. * accessibilityConnectionId is created.
@@ -239,6 +246,10 @@ public abstract class InputMethodManagerInternal {
@Override @Override
public void unbindAccessibilityFromCurrentClient(int accessibilityConnectionId) { public void unbindAccessibilityFromCurrentClient(int accessibilityConnectionId) {
} }
@Override
public void maybeFinishStylusHandwriting() {
}
}; };
/** /**

View File

@@ -237,6 +237,7 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub
private static final int MSG_RESET_HANDWRITING = 1090; private static final int MSG_RESET_HANDWRITING = 1090;
private static final int MSG_START_HANDWRITING = 1100; private static final int MSG_START_HANDWRITING = 1100;
private static final int MSG_FINISH_HANDWRITING = 1110;
private static final int MSG_UNBIND_CLIENT = 3000; private static final int MSG_UNBIND_CLIENT = 3000;
private static final int MSG_UNBIND_ACCESSIBILITY_SERVICE = 3001; private static final int MSG_UNBIND_ACCESSIBILITY_SERVICE = 3001;
@@ -4496,7 +4497,7 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub
} }
@BinderThread @BinderThread
private void finishStylusHandwriting(int requestId) { private void resetStylusHandwriting(int requestId) {
synchronized (ImfLock.class) { synchronized (ImfLock.class) {
final OptionalInt curRequest = mHwController.getCurrentRequestId(); final OptionalInt curRequest = mHwController.getCurrentRequestId();
if (!curRequest.isPresent() || curRequest.getAsInt() != requestId) { if (!curRequest.isPresent() || curRequest.getAsInt() != requestId) {
@@ -4863,6 +4864,14 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub
} }
} }
return true; return true;
case MSG_FINISH_HANDWRITING:
synchronized (ImfLock.class) {
IInputMethodInvoker curMethod = getCurMethodLocked();
if (curMethod != null && mHwController.getCurrentRequestId().isPresent()) {
curMethod.finishStylusHandwriting();
}
}
return true;
} }
return false; return false;
} }
@@ -5501,6 +5510,12 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub
} }
} }
} }
@Override
public void maybeFinishStylusHandwriting() {
mHandler.removeMessages(MSG_FINISH_HANDWRITING);
mHandler.obtainMessage(MSG_FINISH_HANDWRITING).sendToTarget();
}
} }
@BinderThread @BinderThread
@@ -6454,8 +6469,8 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub
@BinderThread @BinderThread
@Override @Override
public void finishStylusHandwriting(int requestId) { public void resetStylusHandwriting(int requestId) {
mImms.finishStylusHandwriting(requestId); mImms.resetStylusHandwriting(requestId);
} }
} }
} }

View File

@@ -281,6 +281,7 @@ public class RecentsAnimationController implements DeathRecipient {
task.setCanAffectSystemUiFlags(behindSystemBars); task.setCanAffectSystemUiFlags(behindSystemBars);
} }
} }
InputMethodManagerInternal.get().maybeFinishStylusHandwriting();
if (!behindSystemBars) { if (!behindSystemBars) {
// Hiding IME if IME window is not attached to app. // Hiding IME if IME window is not attached to app.
// Since some windowing mode is not proper to snapshot Task with IME window // Since some windowing mode is not proper to snapshot Task with IME window