summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSunny Goyal <sunnygoyal@google.com>2019-04-29 14:33:28 -0700
committerSunny Goyal <sunnygoyal@google.com>2019-04-29 14:33:56 -0700
commit2acea9f8722709a2ee0745e91235f0923644e5f0 (patch)
tree4cd343b9a56cdcfee9230c2c9d3dd1b8a453e83d
parent34c630bf14828934732e9a3a69e32a615eb02e1d (diff)
downloadandroid_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
-rw-r--r--quickstep/recents_ui_overrides/src/com/android/quickstep/OtherActivityInputConsumer.java51
-rw-r--r--quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java4
-rw-r--r--quickstep/recents_ui_overrides/src/com/android/quickstep/WindowTransformSwipeHandler.java4
-rw-r--r--quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java29
-rw-r--r--src/com/android/launcher3/PagedView.java4
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);