| package com.android.launcher3.uioverrides.touchcontrollers; |
| |
| import static com.android.launcher3.LauncherState.NORMAL; |
| import static com.android.launcher3.LauncherState.OVERVIEW; |
| import static com.android.launcher3.Utilities.EDGE_NAV_BAR; |
| |
| import android.view.MotionEvent; |
| |
| import com.android.launcher3.AbstractFloatingView; |
| import com.android.launcher3.Launcher; |
| import com.android.launcher3.LauncherState; |
| import com.android.launcher3.states.StateAnimationConfig.AnimationFlags; |
| import com.android.launcher3.touch.AbstractStateChangeTouchController; |
| import com.android.launcher3.touch.SingleAxisSwipeDetector; |
| import com.android.launcher3.userevent.nano.LauncherLogProto; |
| import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Direction; |
| import com.android.quickstep.SystemUiProxy; |
| |
| /** |
| * Touch controller for handling edge swipes in landscape/seascape UI |
| */ |
| public class LandscapeEdgeSwipeController extends AbstractStateChangeTouchController { |
| |
| private static final String TAG = "LandscapeEdgeSwipeCtrl"; |
| |
| public LandscapeEdgeSwipeController(Launcher l) { |
| super(l, SingleAxisSwipeDetector.HORIZONTAL); |
| } |
| |
| @Override |
| protected boolean canInterceptTouch(MotionEvent ev) { |
| if (mCurrentAnimation != null) { |
| // If we are already animating from a previous state, we can intercept. |
| return true; |
| } |
| if (AbstractFloatingView.getTopOpenView(mLauncher) != null) { |
| return false; |
| } |
| return mLauncher.isInState(NORMAL) && (ev.getEdgeFlags() & EDGE_NAV_BAR) != 0; |
| } |
| |
| @Override |
| protected LauncherState getTargetState(LauncherState fromState, boolean isDragTowardPositive) { |
| boolean draggingFromNav = mLauncher.getDeviceProfile().isSeascape() == isDragTowardPositive; |
| return draggingFromNav ? OVERVIEW : NORMAL; |
| } |
| |
| @Override |
| protected int getLogContainerTypeForNormalState(MotionEvent ev) { |
| return LauncherLogProto.ContainerType.NAVBAR; |
| } |
| |
| @Override |
| protected float getShiftRange() { |
| return mLauncher.getDragLayer().getWidth(); |
| } |
| |
| @Override |
| protected float initCurrentAnimation(@AnimationFlags int animComponent) { |
| float range = getShiftRange(); |
| long maxAccuracy = (long) (2 * range); |
| mCurrentAnimation = mLauncher.getStateManager().createAnimationToNewWorkspace(mToState, |
| maxAccuracy, animComponent); |
| return (mLauncher.getDeviceProfile().isSeascape() ? 2 : -2) / range; |
| } |
| |
| @Override |
| protected int getDirectionForLog() { |
| return mLauncher.getDeviceProfile().isSeascape() ? Direction.RIGHT : Direction.LEFT; |
| } |
| |
| @Override |
| protected void onSwipeInteractionCompleted(LauncherState targetState, int logAction) { |
| super.onSwipeInteractionCompleted(targetState, logAction); |
| if (mStartState == NORMAL && targetState == OVERVIEW) { |
| SystemUiProxy.INSTANCE.get(mLauncher).onOverviewShown(true, TAG); |
| } |
| } |
| } |