Merge "Enabling quick-switch gesture in landscape mode (2 button UI)" into ub-launcher3-qt-dev

This commit is contained in:
TreeHugger Robot
2019-04-30 19:29:14 +00:00
committed by Android (Google) Code Review
5 changed files with 50 additions and 41 deletions
@@ -35,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;
@@ -62,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
*/
@@ -81,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;
@@ -123,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);
@@ -145,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();
@@ -171,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) {
@@ -302,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) {
@@ -414,13 +402,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;
}
@@ -492,8 +492,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);
}
/**
@@ -531,8 +531,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
@@ -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;
}
}
}
+1 -3
View File
@@ -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);