Loading quickstep/src/com/android/quickstep/TouchInteractionService.java +21 −0 Original line number Original line Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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(); Loading @@ -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; } } Loading Loading @@ -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); Loading quickstep/src/com/android/quickstep/inputconsumers/OtherActivityInputConsumer.java +19 −0 Original line number Original line Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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; Loading @@ -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( Loading Loading @@ -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 Loading @@ -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()) { Loading Loading
quickstep/src/com/android/quickstep/TouchInteractionService.java +21 −0 Original line number Original line Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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(); Loading @@ -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; } } Loading Loading @@ -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); Loading
quickstep/src/com/android/quickstep/inputconsumers/OtherActivityInputConsumer.java +19 −0 Original line number Original line Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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; Loading @@ -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( Loading Loading @@ -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 Loading @@ -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()) { Loading