Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 57142133 authored by Siarhei Vishniakou's avatar Siarhei Vishniakou
Browse files

Add displayId to transferTouch

To account for the case where the displays are mirrored, add display id
to transferTouch(..).

When mirroring is on, windows with identical tokens would be positioned
on different displays. This could break the transferTouch API, if the
window of mirror happens to be found first. This could mean that
screenrecording may have different behaviour from the regular usage.

Bug: 220077253
Test: atest inputflinger_tests
Test: manual testing - pull down notification shade from home screen
Change-Id: Ia8965cad83e2c29062329958edbc9516ae67f1ed
parent cfa0cc97
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -658,10 +658,10 @@ public class InputManagerService extends IInputManager.Stub
     * gesture
     * @return True if the transfer succeeded, false if there was no active touch gesture happening
     */
    public boolean transferTouch(IBinder destChannelToken) {
    public boolean transferTouch(IBinder destChannelToken, int displayId) {
        // TODO(b/162194035): Replace this with a SPY window
        Objects.requireNonNull(destChannelToken, "destChannelToken must not be null");
        return mNative.transferTouch(destChannelToken);
        return mNative.transferTouch(destChannelToken, displayId);
    }

    /**
+6 −2
Original line number Diff line number Diff line
@@ -90,7 +90,11 @@ public interface NativeInputManagerService {
    boolean transferTouchFocus(IBinder fromChannelToken, IBinder toChannelToken,
            boolean isDragDrop);

    boolean transferTouch(IBinder destChannelToken);
    /**
     * Transfer the current touch gesture to the window identified by 'destChannelToken' positioned
     * on display with id 'displayId'.
     */
    boolean transferTouch(IBinder destChannelToken, int displayId);

    void setPointerSpeed(int speed);

@@ -263,7 +267,7 @@ public interface NativeInputManagerService {
                boolean isDragDrop);

        @Override
        public native boolean transferTouch(IBinder destChannelToken);
        public native boolean transferTouch(IBinder destChannelToken, int displayId);

        @Override
        public native void setPointerSpeed(int speed);
+1 −1
Original line number Diff line number Diff line
@@ -2798,7 +2798,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
     * Move the touch gesture from the currently touched window on this display to this window.
     */
    public boolean transferTouch() {
        return mWmService.mInputManager.transferTouch(mInputChannelToken);
        return mWmService.mInputManager.transferTouch(mInputChannelToken, getDisplayId());
    }

    void disposeInputChannel() {
+5 −4
Original line number Diff line number Diff line
@@ -1846,12 +1846,13 @@ static jboolean nativeTransferTouchFocus(JNIEnv* env, jobject nativeImplObj,
    }
}

static jboolean nativeTransferTouch(JNIEnv* env, jobject nativeImplObj,
                                    jobject destChannelTokenObj) {
static jboolean nativeTransferTouch(JNIEnv* env, jobject nativeImplObj, jobject destChannelTokenObj,
                                    jint displayId) {
    sp<IBinder> destChannelToken = ibinderForJavaObject(env, destChannelTokenObj);

    NativeInputManager* im = getNativeInputManager(env, nativeImplObj);
    if (im->getInputManager()->getDispatcher().transferTouch(destChannelToken)) {
    if (im->getInputManager()->getDispatcher().transferTouch(destChannelToken,
                                                             static_cast<int32_t>(displayId))) {
        return JNI_TRUE;
    } else {
        return JNI_FALSE;
@@ -2345,7 +2346,7 @@ static const JNINativeMethod gInputManagerMethods[] = {
        {"setSystemUiLightsOut", "(Z)V", (void*)nativeSetSystemUiLightsOut},
        {"transferTouchFocus", "(Landroid/os/IBinder;Landroid/os/IBinder;Z)Z",
         (void*)nativeTransferTouchFocus},
        {"transferTouch", "(Landroid/os/IBinder;)Z", (void*)nativeTransferTouch},
        {"transferTouch", "(Landroid/os/IBinder;I)Z", (void*)nativeTransferTouch},
        {"setPointerSpeed", "(I)V", (void*)nativeSetPointerSpeed},
        {"setPointerAcceleration", "(F)V", (void*)nativeSetPointerAcceleration},
        {"setShowTouches", "(Z)V", (void*)nativeSetShowTouches},