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

Commit 50103d0a authored by Prabir Pradhan's avatar Prabir Pradhan Committed by Android (Google) Code Review
Browse files

Merge "Place handwriting surface below gesture monitors"

parents 058adcfb cc77d6e9
Loading
Loading
Loading
Loading
+10 −15
Original line number Diff line number Diff line
@@ -19,7 +19,6 @@ package com.android.server.inputmethod;
import static android.os.InputConstants.DEFAULT_DISPATCHING_TIMEOUT_MILLIS;

import android.annotation.NonNull;
import android.graphics.Rect;
import android.os.Process;
import android.view.InputApplicationHandle;
import android.view.InputChannel;
@@ -33,8 +32,11 @@ final class HandwritingEventReceiverSurface {
    public static final String TAG = HandwritingEventReceiverSurface.class.getSimpleName();
    static final boolean DEBUG = HandwritingModeController.DEBUG;

    private final int mClientPid;
    private final int mClientUid;
    // Place the layer below the highest layer to place it under gesture monitors. If the surface
    // is above gesture monitors, then edge-back and swipe-up gestures won't work when this surface
    // is intercepting.
    // TODO(b/217538817): Specify the ordering in WM by usage.
    private static final int HANDWRITING_SURFACE_LAYER = Integer.MAX_VALUE - 1;

    private final InputApplicationHandle mApplicationHandle;
    private final InputWindowHandle mWindowHandle;
@@ -44,9 +46,6 @@ final class HandwritingEventReceiverSurface {

    HandwritingEventReceiverSurface(String name, int displayId, @NonNull SurfaceControl sc,
            @NonNull InputChannel inputChannel) {
        // Initialized the window as being owned by the system.
        mClientPid = Process.myPid();
        mClientUid = Process.myUid();
        mApplicationHandle = new InputApplicationHandle(null, name,
                DEFAULT_DISPATCHING_TIMEOUT_MILLIS);

@@ -63,23 +62,19 @@ final class HandwritingEventReceiverSurface {
        mWindowHandle.focusable = false;
        mWindowHandle.hasWallpaper = false;
        mWindowHandle.paused = false;
        mWindowHandle.ownerPid = mClientPid;
        mWindowHandle.ownerUid = mClientUid;
        mWindowHandle.ownerPid = Process.myPid();
        mWindowHandle.ownerUid = Process.myUid();
        mWindowHandle.inputFeatures = WindowManager.LayoutParams.INPUT_FEATURE_SPY
                | WindowManager.LayoutParams.INPUT_FEATURE_INTERCEPTS_STYLUS;
        mWindowHandle.scaleFactor = 1.0f;
        mWindowHandle.trustedOverlay = true;
        mWindowHandle.replaceTouchableRegionWithCrop(null /* use this surface as crop */);
        mWindowHandle.replaceTouchableRegionWithCrop(null /* use this surface's bounds */);

        final SurfaceControl.Transaction t = new SurfaceControl.Transaction();
        t.setInputWindowInfo(mInputSurface, mWindowHandle);
        t.setLayer(mInputSurface, Integer.MAX_VALUE);
        t.setLayer(mInputSurface, HANDWRITING_SURFACE_LAYER);
        t.setPosition(mInputSurface, 0, 0);
        // Use an arbitrarily large crop that is positioned at the origin. The crop determines the
        // bounds and the coordinate space of the input events, so it must start at the origin to
        // receive input in display space.
        // TODO(b/210039666): fix this in SurfaceFlinger and avoid the hack.
        t.setCrop(mInputSurface, new Rect(0, 0, 10000, 10000));
        t.setCrop(mInputSurface, null /* crop to parent surface */);
        t.show(mInputSurface);
        t.apply();