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

Commit be5fdb08 authored by Evan Rosky's avatar Evan Rosky Committed by Android (Google) Code Review
Browse files

Merge "Update input-monitors to accept unrotated coordinates" into sc-dev

parents 036b5854 5c3d37b3
Loading
Loading
Loading
Loading
+21 −0
Original line number Original line Diff line number Diff line
@@ -37,18 +37,23 @@ import android.content.Context;
import android.content.Intent;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.content.res.Configuration;
import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.Rect;
import android.graphics.Region;
import android.graphics.Region;
import android.graphics.drawable.Icon;
import android.graphics.drawable.Icon;
import android.hardware.display.DisplayManager;
import android.os.Build;
import android.os.Build;
import android.os.Bundle;
import android.os.Bundle;
import android.os.IBinder;
import android.os.IBinder;
import android.os.Looper;
import android.os.Looper;
import android.os.SystemClock;
import android.os.SystemClock;
import android.os.SystemProperties;
import android.util.Log;
import android.util.Log;
import android.view.Choreographer;
import android.view.Choreographer;
import android.view.Display;
import android.view.InputEvent;
import android.view.InputEvent;
import android.view.MotionEvent;
import android.view.MotionEvent;
import android.view.Surface;
import android.view.accessibility.AccessibilityManager;
import android.view.accessibility.AccessibilityManager;


import androidx.annotation.BinderThread;
import androidx.annotation.BinderThread;
@@ -91,6 +96,7 @@ import com.android.systemui.plugins.PluginListener;
import com.android.systemui.shared.recents.IOverviewProxy;
import com.android.systemui.shared.recents.IOverviewProxy;
import com.android.systemui.shared.recents.ISystemUiProxy;
import com.android.systemui.shared.recents.ISystemUiProxy;
import com.android.systemui.shared.system.ActivityManagerWrapper;
import com.android.systemui.shared.system.ActivityManagerWrapper;
import com.android.systemui.shared.system.InputChannelCompat;
import com.android.systemui.shared.system.InputChannelCompat.InputEventReceiver;
import com.android.systemui.shared.system.InputChannelCompat.InputEventReceiver;
import com.android.systemui.shared.system.InputConsumerController;
import com.android.systemui.shared.system.InputConsumerController;
import com.android.systemui.shared.system.InputMonitorCompat;
import com.android.systemui.shared.system.InputMonitorCompat;
@@ -121,6 +127,9 @@ public class TouchInteractionService extends Service implements PluginListener<O
     */
     */
    private static final int SYSTEM_ACTION_ID_ALL_APPS = 14;
    private static final int SYSTEM_ACTION_ID_ALL_APPS = 14;


    public static final boolean ENABLE_PER_WINDOW_INPUT_ROTATION =
            SystemProperties.getBoolean("persist.debug.per_window_input_rotation", false);

    private int mBackGestureNotificationCounter = -1;
    private int mBackGestureNotificationCounter = -1;
    @Nullable
    @Nullable
    private OverscrollPlugin mOverscrollPlugin;
    private OverscrollPlugin mOverscrollPlugin;
@@ -248,6 +257,8 @@ public class TouchInteractionService extends Service implements PluginListener<O
    private InputMonitorCompat mInputMonitorCompat;
    private InputMonitorCompat mInputMonitorCompat;
    private InputEventReceiver mInputEventReceiver;
    private InputEventReceiver mInputEventReceiver;


    private DisplayManager mDisplayManager;

    @Override
    @Override
    public void onCreate() {
    public void onCreate() {
        super.onCreate();
        super.onCreate();
@@ -261,6 +272,7 @@ public class TouchInteractionService extends Service implements PluginListener<O
        mDeviceState.addOneHandedModeChangedCallback(this::onOneHandedModeOverlayChanged);
        mDeviceState.addOneHandedModeChangedCallback(this::onOneHandedModeOverlayChanged);
        mDeviceState.runOnUserUnlocked(this::onUserUnlocked);
        mDeviceState.runOnUserUnlocked(this::onUserUnlocked);
        ProtoTracer.INSTANCE.get(this).add(this);
        ProtoTracer.INSTANCE.get(this).add(this);
        mDisplayManager = getSystemService(DisplayManager.class);


        sConnected = true;
        sConnected = true;
    }
    }
@@ -426,6 +438,15 @@ public class TouchInteractionService extends Service implements PluginListener<O
            return;
            return;
        }
        }
        MotionEvent event = (MotionEvent) ev;
        MotionEvent event = (MotionEvent) ev;
        if (ENABLE_PER_WINDOW_INPUT_ROTATION) {
            final Display display = mDisplayManager.getDisplay(mDeviceState.getDisplayId());
            int rotation = display.getRotation();
            Point sz = new Point();
            display.getRealSize(sz);
            if (rotation != Surface.ROTATION_0) {
                event.transform(InputChannelCompat.createRotationMatrix(rotation, sz.x, sz.y));
            }
        }


        TestLogging.recordMotionEvent(
        TestLogging.recordMotionEvent(
                TestProtocol.SEQUENCE_TIS, "TouchInteractionService.onInputEvent", event);
                TestProtocol.SEQUENCE_TIS, "TouchInteractionService.onInputEvent", event);
+19 −0
Original line number Original line Diff line number Diff line
@@ -38,10 +38,12 @@ import android.content.Context;
import android.content.ContextWrapper;
import android.content.ContextWrapper;
import android.content.Intent;
import android.content.Intent;
import android.graphics.PointF;
import android.graphics.PointF;
import android.hardware.display.DisplayManager;
import android.os.Build;
import android.os.Build;
import android.os.Handler;
import android.os.Handler;
import android.os.Looper;
import android.os.Looper;
import android.util.Log;
import android.util.Log;
import android.view.Display;
import android.view.MotionEvent;
import android.view.MotionEvent;
import android.view.VelocityTracker;
import android.view.VelocityTracker;
import android.view.ViewConfiguration;
import android.view.ViewConfiguration;
@@ -64,6 +66,7 @@ import com.android.quickstep.RecentsAnimationDeviceState;
import com.android.quickstep.RotationTouchHelper;
import com.android.quickstep.RotationTouchHelper;
import com.android.quickstep.TaskAnimationManager;
import com.android.quickstep.TaskAnimationManager;
import com.android.quickstep.TaskUtils;
import com.android.quickstep.TaskUtils;
import com.android.quickstep.TouchInteractionService;
import com.android.quickstep.util.ActiveGestureLog;
import com.android.quickstep.util.ActiveGestureLog;
import com.android.quickstep.util.CachedEventDispatcher;
import com.android.quickstep.util.CachedEventDispatcher;
import com.android.quickstep.util.MotionPauseDetector;
import com.android.quickstep.util.MotionPauseDetector;
@@ -113,6 +116,8 @@ public class OtherActivityInputConsumer extends ContextWrapper implements InputC
    private final PointF mLastPos = new PointF();
    private final PointF mLastPos = new PointF();
    private int mActivePointerId = INVALID_POINTER_ID;
    private int mActivePointerId = INVALID_POINTER_ID;


    private int mLastRotation = -1;

    // Distance after which we start dragging the window.
    // Distance after which we start dragging the window.
    private final float mTouchSlop;
    private final float mTouchSlop;


@@ -130,6 +135,8 @@ public class OtherActivityInputConsumer extends ContextWrapper implements InputC
    // Might be displacement in X or Y, depending on the direction we are swiping from the nav bar.
    // Might be displacement in X or Y, depending on the direction we are swiping from the nav bar.
    private float mStartDisplacement;
    private float mStartDisplacement;


    private final DisplayManager mDisplayManager;

    private Handler mMainThreadHandler;
    private Handler mMainThreadHandler;
    private Runnable mCancelRecentsAnimationRunnable = () -> {
    private Runnable mCancelRecentsAnimationRunnable = () -> {
        ActivityManagerWrapper.getInstance().cancelRecentsAnimation(
        ActivityManagerWrapper.getInstance().cancelRecentsAnimation(
@@ -172,6 +179,7 @@ public class OtherActivityInputConsumer extends ContextWrapper implements InputC
        mPassedPilferInputSlop = mPassedWindowMoveSlop = continuingPreviousGesture;
        mPassedPilferInputSlop = mPassedWindowMoveSlop = continuingPreviousGesture;
        mDisableHorizontalSwipe = !mPassedPilferInputSlop && disableHorizontalSwipe;
        mDisableHorizontalSwipe = !mPassedPilferInputSlop && disableHorizontalSwipe;
        mRotationTouchHelper = mDeviceState.getRotationTouchHelper();
        mRotationTouchHelper = mDeviceState.getRotationTouchHelper();
        mDisplayManager = getSystemService(DisplayManager.class);
    }
    }


    @Override
    @Override
@@ -197,6 +205,17 @@ public class OtherActivityInputConsumer extends ContextWrapper implements InputC
            return;
            return;
        }
        }


        if (TouchInteractionService.ENABLE_PER_WINDOW_INPUT_ROTATION) {
            final Display display = mDisplayManager.getDisplay(mDeviceState.getDisplayId());
            final int rotation = display.getRotation();
            if (rotation != mLastRotation) {
                // If rotation changes, reset tracking to avoid degenerate velocities.
                mLastPos.set(ev.getX(), ev.getY());
                mVelocityTracker.clear();
                mLastRotation = rotation;
            }
        }

        // Proxy events to recents view
        // Proxy events to recents view
        if (mPassedWindowMoveSlop && mInteractionHandler != null
        if (mPassedWindowMoveSlop && mInteractionHandler != null
                && !mRecentsViewDispatcher.hasConsumer()) {
                && !mRecentsViewDispatcher.hasConsumer()) {