diff options
author | Sunny Goyal <sunnygoyal@google.com> | 2019-04-29 14:33:28 -0700 |
---|---|---|
committer | Sunny Goyal <sunnygoyal@google.com> | 2019-04-29 14:33:56 -0700 |
commit | 2acea9f8722709a2ee0745e91235f0923644e5f0 (patch) | |
tree | 4cd343b9a56cdcfee9230c2c9d3dd1b8a453e83d | |
parent | 34c630bf14828934732e9a3a69e32a615eb02e1d (diff) | |
download | android_packages_apps_Trebuchet-2acea9f8722709a2ee0745e91235f0923644e5f0.tar.gz android_packages_apps_Trebuchet-2acea9f8722709a2ee0745e91235f0923644e5f0.tar.bz2 android_packages_apps_Trebuchet-2acea9f8722709a2ee0745e91235f0923644e5f0.zip |
Enabling quick-switch gesture in landscape mode (2 button UI)
Bug: 130689544
Change-Id: I6b424be4d80b3bf8263f456a024a81c63100030e
5 files changed, 51 insertions, 41 deletions
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/OtherActivityInputConsumer.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/OtherActivityInputConsumer.java index 5dc641fbe..90af52118 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/OtherActivityInputConsumer.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/OtherActivityInputConsumer.java @@ -21,6 +21,7 @@ import static android.view.MotionEvent.ACTION_MOVE; import static android.view.MotionEvent.ACTION_POINTER_UP; import static android.view.MotionEvent.ACTION_UP; import static android.view.MotionEvent.INVALID_POINTER_ID; + import static com.android.launcher3.Utilities.EDGE_NAV_BAR; import static com.android.launcher3.util.RaceConditionTracker.ENTER; import static com.android.launcher3.util.RaceConditionTracker.EXIT; @@ -34,19 +35,15 @@ import android.content.Context; import android.content.ContextWrapper; import android.content.Intent; import android.graphics.PointF; -import android.graphics.Rect; import android.os.Build; import android.os.Handler; import android.os.Looper; -import android.view.Display; import android.view.MotionEvent; import android.view.Surface; import android.view.VelocityTracker; import android.view.ViewConfiguration; import android.view.WindowManager; -import androidx.annotation.UiThread; - import com.android.launcher3.R; import com.android.launcher3.util.Preconditions; import com.android.launcher3.util.RaceConditionTracker; @@ -61,10 +58,11 @@ import com.android.systemui.shared.system.BackgroundExecutor; import com.android.systemui.shared.system.InputConsumerController; import com.android.systemui.shared.system.InputMonitorCompat; import com.android.systemui.shared.system.QuickStepContract; -import com.android.systemui.shared.system.WindowManagerWrapper; import java.util.function.Consumer; +import androidx.annotation.UiThread; + /** * Input consumer for handling events originating from an activity other than Launcher */ @@ -80,14 +78,12 @@ public class OtherActivityInputConsumer extends ContextWrapper implements InputC private final Intent mHomeIntent; private final ActivityControlHelper mActivityControlHelper; private final OverviewCallbacks mOverviewCallbacks; - private final TaskOverlayFactory mTaskOverlayFactory; private final InputConsumerController mInputConsumer; private final SwipeSharedState mSwipeSharedState; private final InputMonitorCompat mInputMonitorCompat; private final SysUINavigationMode.Mode mMode; private final int mDisplayRotation; - private final Rect mStableInsets = new Rect(); private final Consumer<OtherActivityInputConsumer> mOnCompleteCallback; private final MotionPauseDetector mMotionPauseDetector; @@ -122,7 +118,7 @@ public class OtherActivityInputConsumer extends ContextWrapper implements InputC public OtherActivityInputConsumer(Context base, RunningTaskInfo runningTaskInfo, RecentsModel recentsModel, Intent homeIntent, ActivityControlHelper activityControl, boolean isDeferredDownTarget, OverviewCallbacks overviewCallbacks, - TaskOverlayFactory taskOverlayFactory, InputConsumerController inputConsumer, + InputConsumerController inputConsumer, Consumer<OtherActivityInputConsumer> onCompleteCallback, SwipeSharedState swipeSharedState, InputMonitorCompat inputMonitorCompat) { super(base); @@ -144,14 +140,10 @@ public class OtherActivityInputConsumer extends ContextWrapper implements InputC boolean continuingPreviousGesture = swipeSharedState.getActiveListener() != null; mIsDeferredDownTarget = !continuingPreviousGesture && isDeferredDownTarget; mOverviewCallbacks = overviewCallbacks; - mTaskOverlayFactory = taskOverlayFactory; mInputConsumer = inputConsumer; mSwipeSharedState = swipeSharedState; - Display display = getSystemService(WindowManager.class).getDefaultDisplay(); - mDisplayRotation = display.getRotation(); - WindowManagerWrapper.getInstance().getStableInsets(mStableInsets); - + mDisplayRotation = getSystemService(WindowManager.class).getDefaultDisplay().getRotation(); mDragSlop = QuickStepContract.getQuickStepDragSlopPx(); mTouchSlop = QuickStepContract.getQuickStepTouchSlopPx(); @@ -170,16 +162,15 @@ public class OtherActivityInputConsumer extends ContextWrapper implements InputC } // Proxy events to recents view - if (!isNavBarOnLeft() && !isNavBarOnRight()) { - if (mPassedDragSlop && mInteractionHandler != null - && !mRecentsViewDispatcher.hasConsumer()) { - mRecentsViewDispatcher.setConsumer(mInteractionHandler.getRecentsViewDispatcher()); - } - int edgeFlags = ev.getEdgeFlags(); - ev.setEdgeFlags(edgeFlags | EDGE_NAV_BAR); - mRecentsViewDispatcher.dispatchEvent(ev); - ev.setEdgeFlags(edgeFlags); + if (mPassedDragSlop && mInteractionHandler != null + && !mRecentsViewDispatcher.hasConsumer()) { + mRecentsViewDispatcher.setConsumer(mInteractionHandler + .getRecentsViewDispatcher(isNavBarOnLeft() || isNavBarOnRight())); } + int edgeFlags = ev.getEdgeFlags(); + ev.setEdgeFlags(edgeFlags | EDGE_NAV_BAR); + mRecentsViewDispatcher.dispatchEvent(ev); + ev.setEdgeFlags(edgeFlags); mVelocityTracker.addMovement(ev); if (ev.getActionMasked() == ACTION_POINTER_UP) { @@ -301,13 +292,11 @@ public class OtherActivityInputConsumer extends ContextWrapper implements InputC } private boolean isNavBarOnRight() { - return SysUINavigationMode.INSTANCE.get(getBaseContext()).getMode() != NO_BUTTON - && mDisplayRotation == Surface.ROTATION_90 && mStableInsets.right > 0; + return mMode != NO_BUTTON && mDisplayRotation == Surface.ROTATION_90; } private boolean isNavBarOnLeft() { - return SysUINavigationMode.INSTANCE.get(getBaseContext()).getMode() != NO_BUTTON - && mDisplayRotation == Surface.ROTATION_270 && mStableInsets.left > 0; + return mMode != NO_BUTTON && mDisplayRotation == Surface.ROTATION_270; } private void startTouchTrackingForWindowAnimation(long touchTimeMs) { @@ -410,13 +399,13 @@ public class OtherActivityInputConsumer extends ContextWrapper implements InputC } private float getDisplacement(MotionEvent ev) { - float eventX = ev.getX(); - float eventY = ev.getY(); - float displacement = eventY - mDownPos.y; + final float displacement; if (isNavBarOnRight()) { - displacement = eventX - mDownPos.x; + displacement = ev.getX() - mDownPos.x; } else if (isNavBarOnLeft()) { - displacement = mDownPos.x - eventX; + displacement = mDownPos.x - ev.getX(); + } else { + displacement = ev.getY() - mDownPos.y; } return displacement; } diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java index b62bac66d..d7d0c3644 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java @@ -484,8 +484,8 @@ public class TouchInteractionService extends Service implements boolean shouldDefer = activityControl.deferStartingActivity(mActiveNavBarRegion, event); return new OtherActivityInputConsumer(this, runningTaskInfo, mRecentsModel, mOverviewComponentObserver.getOverviewIntent(), activityControl, - shouldDefer, mOverviewCallbacks, mTaskOverlayFactory, mInputConsumer, - this::onConsumerInactive, mSwipeSharedState, mInputMonitorCompat); + shouldDefer, mOverviewCallbacks, mInputConsumer, this::onConsumerInactive, + mSwipeSharedState, mInputMonitorCompat); } /** diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/WindowTransformSwipeHandler.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/WindowTransformSwipeHandler.java index 4df1b151a..c94ad6977 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/WindowTransformSwipeHandler.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/WindowTransformSwipeHandler.java @@ -529,8 +529,8 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity> return TaskView.getCurveScaleForInterpolation(interpolation); } - public Consumer<MotionEvent> getRecentsViewDispatcher() { - return mRecentsView != null ? mRecentsView::dispatchTouchEvent : null; + public Consumer<MotionEvent> getRecentsViewDispatcher(boolean isTransposed) { + return mRecentsView != null ? mRecentsView.getEventDispatcher(isTransposed) : null; } @UiThread diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java index 08a76166c..2fdfda1c6 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java @@ -45,6 +45,7 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.graphics.Canvas; +import android.graphics.Matrix; import android.graphics.Point; import android.graphics.Rect; import android.graphics.RectF; @@ -70,9 +71,6 @@ import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityNodeInfo; import android.widget.ListView; -import androidx.annotation.Nullable; -import androidx.dynamicanimation.animation.SpringForce; - import com.android.launcher3.BaseActivity; import com.android.launcher3.DeviceProfile; import com.android.launcher3.Insettable; @@ -111,6 +109,9 @@ import com.android.systemui.shared.system.TaskStackChangeListener; import java.util.ArrayList; import java.util.function.Consumer; +import androidx.annotation.Nullable; +import androidx.dynamicanimation.animation.SpringForce; + /** * A list of recent tasks. */ @@ -1639,4 +1640,26 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl public ClearAllButton getClearAllButton() { return mClearAllButton; } + + public Consumer<MotionEvent> getEventDispatcher(boolean isTransposed) { + if (isTransposed) { + Matrix transform = new Matrix(); + transform.setRotate(90); + + if (getWidth() > 0 && getHeight() > 0) { + float scale = ((float) getWidth()) / getHeight(); + transform.postScale(scale, 1 / scale); + } + + Matrix inverse = new Matrix(); + transform.invert(inverse); + return e -> { + e.transform(transform); + super.onTouchEvent(e); + e.transform(inverse); + }; + } else { + return super::onTouchEvent; + } + } } diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java index 3a02b073e..b6404301d 100644 --- a/src/com/android/launcher3/PagedView.java +++ b/src/com/android/launcher3/PagedView.java @@ -1088,10 +1088,8 @@ public abstract class PagedView<T extends View & PageIndicator> extends ViewGrou @Override public boolean onTouchEvent(MotionEvent ev) { - super.onTouchEvent(ev); - // Skip touch handling if there are no pages to swipe - if (getChildCount() <= 0) return super.onTouchEvent(ev); + if (getChildCount() <= 0) return false; acquireVelocityTrackerAndAddMovement(ev); |