diff options
author | Sunny Goyal <sunnygoyal@google.com> | 2019-07-09 17:30:22 -0700 |
---|---|---|
committer | Sunny Goyal <sunnygoyal@google.com> | 2019-07-11 10:44:56 -0700 |
commit | 6b0eb38461ac061bd9a3281c205a45d8f3faa9f2 (patch) | |
tree | d5f9c046001a5c5838a3a7a7c732a1a05fe76f32 /quickstep/recents_ui_overrides/src/com/android/quickstep/WindowTransformSwipeHandler.java | |
parent | f11dd8e1077ca229e228afd6a39e7b22d12105f7 (diff) | |
download | android_packages_apps_Trebuchet-6b0eb38461ac061bd9a3281c205a45d8f3faa9f2.tar.gz android_packages_apps_Trebuchet-6b0eb38461ac061bd9a3281c205a45d8f3faa9f2.tar.bz2 android_packages_apps_Trebuchet-6b0eb38461ac061bd9a3281c205a45d8f3faa9f2.zip |
Swipe-up support for 3P Launcher
On swipe up, we start a rencets transition to the current launcher app. At the
end of the transition, if the user is going to recents, we start overview activity.
Bug: 137197916
Change-Id: Ie5ed848879ad965dcab2780a05d649e3be066568
Diffstat (limited to 'quickstep/recents_ui_overrides/src/com/android/quickstep/WindowTransformSwipeHandler.java')
-rw-r--r-- | quickstep/recents_ui_overrides/src/com/android/quickstep/WindowTransformSwipeHandler.java | 69 |
1 files changed, 10 insertions, 59 deletions
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 ac7ba3fc3..da9c6cb5f 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/WindowTransformSwipeHandler.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/WindowTransformSwipeHandler.java @@ -43,7 +43,6 @@ import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_O import android.animation.Animator; import android.animation.AnimatorSet; -import android.animation.ObjectAnimator; import android.animation.TimeInterpolator; import android.animation.ValueAnimator; import android.annotation.TargetApi; @@ -59,7 +58,6 @@ import android.os.Handler; import android.os.Looper; import android.os.SystemClock; import android.util.Log; -import android.view.HapticFeedbackConstants; import android.view.MotionEvent; import android.view.View; import android.view.View.OnApplyWindowInsetsListener; @@ -97,7 +95,7 @@ import com.android.quickstep.ActivityControlHelper.HomeAnimationFactory; import com.android.quickstep.SysUINavigationMode.Mode; import com.android.quickstep.inputconsumers.InputConsumer; import com.android.quickstep.inputconsumers.OverviewInputConsumer; -import com.android.quickstep.util.ClipAnimationHelper; +import com.android.quickstep.util.ClipAnimationHelper.TargetAlphaProvider; import com.android.quickstep.util.RectFSpringAnim; import com.android.quickstep.util.RemoteAnimationTargetSet; import com.android.quickstep.util.SwipeAnimationTargetSet; @@ -112,11 +110,10 @@ import com.android.systemui.shared.system.RemoteAnimationTargetCompat; import com.android.systemui.shared.system.SyncRtSurfaceTransactionApplierCompat; import com.android.systemui.shared.system.WindowCallbacksCompat; -import java.util.function.BiFunction; import java.util.function.Consumer; @TargetApi(Build.VERSION_CODES.O) -public class WindowTransformSwipeHandler<T extends BaseDraggingActivity> +public class WindowTransformSwipeHandler<T extends BaseDraggingActivity> extends BaseSwipeUpHandler implements SwipeAnimationListener, OnApplyWindowInsetsListener { private static final String TAG = WindowTransformSwipeHandler.class.getSimpleName(); @@ -220,30 +217,17 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity> private static final long SHELF_ANIM_DURATION = 240; public static final long RECENTS_ATTACH_DURATION = 300; - // Start resisting when swiping past this factor of mTransitionDragLength. - private static final float DRAG_LENGTH_FACTOR_START_PULLBACK = 1.4f; - // This is how far down we can scale down, where 0f is full screen and 1f is recents. - private static final float DRAG_LENGTH_FACTOR_MAX_PULLBACK = 1.8f; - private static final Interpolator PULLBACK_INTERPOLATOR = DEACCEL; - /** * Used as the page index for logging when we return to the last task at the end of the gesture. */ private static final int LOG_NO_OP_PAGE_INDEX = -1; - private final ClipAnimationHelper mClipAnimationHelper; - private final ClipAnimationHelper.TransformParams mTransformParams; - private Runnable mGestureEndCallback; private GestureEndTarget mGestureEndTarget; // Either RectFSpringAnim (if animating home) or ObjectAnimator (from mCurrentShift) otherwise private RunningWindowAnim mRunningWindowAnim; private boolean mIsShelfPeeking; private DeviceProfile mDp; - // The distance needed to drag to reach the task size in recents. - private int mTransitionDragLength; - // How much further we can drag past recents, as a factor of mTransitionDragLength. - private float mDragLengthFactor = 1; // Shift in the range of [0, 1]. // 0 => preview snapShot is completely visible, and hotseat is completely translated down @@ -256,7 +240,6 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity> private final Handler mMainThreadHandler = MAIN_THREAD_EXECUTOR.getHandler(); - private final Context mContext; private final ActivityControlHelper<T> mActivityControlHelper; private final ActivityInitListener mActivityInitListener; @@ -294,7 +277,7 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity> public WindowTransformSwipeHandler(RunningTaskInfo runningTaskInfo, Context context, long touchTimeMs, ActivityControlHelper<T> controller, boolean continuingLastGesture, InputConsumerController inputConsumer) { - mContext = context; + super(context); mRunningTaskId = runningTaskInfo.id; mTouchTimeMs = touchTimeMs; mActivityControlHelper = controller; @@ -303,8 +286,6 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity> mContinuingLastGesture = continuingLastGesture; mRecentsAnimationWrapper = new RecentsAnimationWrapper(inputConsumer, this::createNewInputProxyHandler); - mClipAnimationHelper = new ClipAnimationHelper(context); - mTransformParams = new ClipAnimationHelper.TransformParams(); mMode = SysUINavigationMode.getMode(context); initStateCallbacks(); @@ -394,18 +375,6 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity> } } - private long getFadeInDuration() { - if (mCurrentShift.getCurrentAnimation() != null) { - ObjectAnimator anim = mCurrentShift.getCurrentAnimation(); - long theirDuration = anim.getDuration() - anim.getCurrentPlayTime(); - - // TODO: Find a better heuristic - return Math.min(MAX_SWIPE_DURATION, Math.max(theirDuration, MIN_SWIPE_DURATION)); - } else { - return MAX_SWIPE_DURATION; - } - } - public void initWhenReady() { mActivityInitListener.register(); } @@ -583,22 +552,7 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity> @UiThread public void updateDisplacement(float displacement) { - // We are moving in the negative x/y direction - displacement = -displacement; - if (displacement > mTransitionDragLength * mDragLengthFactor && mTransitionDragLength > 0) { - mCurrentShift.updateValue(mDragLengthFactor); - } else { - float translation = Math.max(displacement, 0); - float shift = mTransitionDragLength == 0 ? 0 : translation / mTransitionDragLength; - if (shift > DRAG_LENGTH_FACTOR_START_PULLBACK) { - float pullbackProgress = Utilities.getProgress(shift, - DRAG_LENGTH_FACTOR_START_PULLBACK, mDragLengthFactor); - pullbackProgress = PULLBACK_INTERPOLATOR.getInterpolation(pullbackProgress); - shift = DRAG_LENGTH_FACTOR_START_PULLBACK + pullbackProgress - * (DRAG_LENGTH_FACTOR_MAX_PULLBACK - DRAG_LENGTH_FACTOR_START_PULLBACK); - } - mCurrentShift.updateValue(shift); - } + mCurrentShift.updateValue(getShiftForDisplacement(displacement)); } public void onMotionPauseChanged(boolean isPaused) { @@ -666,9 +620,8 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity> if (mIsShelfPeeking != wasShelfPeeking) { maybeUpdateRecentsAttachedState(); } - if (mRecentsView != null && shelfState.shouldPreformHaptic) { - mRecentsView.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY, - HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING); + if (shelfState.shouldPreformHaptic) { + performHapticFeedback(); } } @@ -722,9 +675,8 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity> final boolean passed = mCurrentShift.value >= MIN_PROGRESS_FOR_OVERVIEW; if (passed != mPassedOverviewThreshold) { mPassedOverviewThreshold = passed; - if (mRecentsView != null && mMode != Mode.NO_BUTTON) { - mRecentsView.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY, - HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING); + if (mMode != Mode.NO_BUTTON) { + performHapticFeedback(); } } @@ -1450,13 +1402,12 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity> mGestureEndCallback = gestureEndCallback; } - private void setTargetAlphaProvider( - BiFunction<RemoteAnimationTargetCompat, Float, Float> provider) { + private void setTargetAlphaProvider(TargetAlphaProvider provider) { mClipAnimationHelper.setTaskAlphaCallback(provider); updateFinalShift(); } - public static float getHiddenTargetAlpha(RemoteAnimationTargetCompat app, Float expectedAlpha) { + public static float getHiddenTargetAlpha(RemoteAnimationTargetCompat app, float expectedAlpha) { if (!isNotInRecents(app)) { return 0; } |