From 43e3d4504230ea092715c56d1311e34a92399921 Mon Sep 17 00:00:00 2001 From: Luca Zuccarini Date: Mon, 7 Nov 2022 13:37:26 +0000 Subject: [PATCH] Update timings for the Home <> All Apps transition. Also updates some interpolators to make the manual and atomic transitions more homogeneous. Also also updates the commit point so it matches the transition point between the two states exactly. Note: the background scale is currently too much, and it needs to be 1/3 of the total distance to match the Workspace scaling. To do this, we simply scale down the depth by a factor of 3 when calling the background zoom-out API in the DepthController. Bug: 254835725 Test: see videos in bug Change-Id: I605546921e9ee4dfc852794c56495c72f0b916e1 --- .../quickstep/util/BaseDepthController.java | 5 ++- .../AbstractStateChangeTouchController.java | 18 +++++++---- .../touch/AllAppsSwipeController.java | 31 +++++++++++-------- 3 files changed, 34 insertions(+), 20 deletions(-) diff --git a/quickstep/src/com/android/quickstep/util/BaseDepthController.java b/quickstep/src/com/android/quickstep/util/BaseDepthController.java index 877e28ab4e..cecf58d105 100644 --- a/quickstep/src/com/android/quickstep/util/BaseDepthController.java +++ b/quickstep/src/com/android/quickstep/util/BaseDepthController.java @@ -108,7 +108,10 @@ public class BaseDepthController { float depth = mDepth; IBinder windowToken = mLauncher.getRootView().getWindowToken(); if (windowToken != null) { - mWallpaperManager.setWallpaperZoomOut(windowToken, depth); + // The API's full zoom-out is three times larger than the zoom-out we apply to the + // icons. To keep the two consistent throughout the animation while keeping Launcher's + // concept of full depth unchanged, we divide the depth by 3 here. + mWallpaperManager.setWallpaperZoomOut(windowToken, depth / 3); } if (!BlurUtils.supportsBlursOnWindows()) { diff --git a/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java b/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java index 8f7a4ecfd1..c499e35ddd 100644 --- a/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java +++ b/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java @@ -32,7 +32,6 @@ import static com.android.launcher3.util.window.RefreshRateTracker.getSingleFram import android.animation.Animator.AnimatorListener; import android.animation.ValueAnimator; -import android.util.Log; import android.view.MotionEvent; import com.android.launcher3.Launcher; @@ -292,11 +291,18 @@ public abstract class AbstractStateChangeTouchController ? mToState : mFromState; // snap to top or bottom using the release velocity } else { - float successTransitionProgress = - mLauncher.getDeviceProfile().isTablet - && (mToState == ALL_APPS || mFromState == ALL_APPS) - ? TABLET_BOTTOM_SHEET_SUCCESS_TRANSITION_PROGRESS - : SUCCESS_TRANSITION_PROGRESS; + float successTransitionProgress = SUCCESS_TRANSITION_PROGRESS; + if (mLauncher.getDeviceProfile().isTablet + && (mToState == ALL_APPS || mFromState == ALL_APPS)) { + successTransitionProgress = TABLET_BOTTOM_SHEET_SUCCESS_TRANSITION_PROGRESS; + } else if (!mLauncher.getDeviceProfile().isTablet + && mToState == ALL_APPS && mFromState == NORMAL) { + successTransitionProgress = AllAppsSwipeController.ALL_APPS_STATE_TRANSITION_MANUAL; + } else if (!mLauncher.getDeviceProfile().isTablet + && mToState == NORMAL && mFromState == ALL_APPS) { + successTransitionProgress = + 1 - AllAppsSwipeController.ALL_APPS_STATE_TRANSITION_MANUAL; + } targetState = (interpolatedProgress > successTransitionProgress) ? mToState : mFromState; } diff --git a/src/com/android/launcher3/touch/AllAppsSwipeController.java b/src/com/android/launcher3/touch/AllAppsSwipeController.java index 5279dec73b..bfd0e1b74b 100644 --- a/src/com/android/launcher3/touch/AllAppsSwipeController.java +++ b/src/com/android/launcher3/touch/AllAppsSwipeController.java @@ -17,7 +17,6 @@ package com.android.launcher3.touch; import static com.android.launcher3.LauncherState.ALL_APPS; import static com.android.launcher3.LauncherState.NORMAL; -import static com.android.launcher3.anim.Interpolators.DECELERATED_EASE; import static com.android.launcher3.anim.Interpolators.EMPHASIZED; import static com.android.launcher3.anim.Interpolators.EMPHASIZED_ACCELERATE; import static com.android.launcher3.anim.Interpolators.EMPHASIZED_DECELERATE; @@ -64,11 +63,14 @@ public class AllAppsSwipeController extends AbstractStateChangeTouchController { // ---- Custom interpolators for NORMAL -> ALL_APPS on phones only. ---- - private static final float WORKSPACE_MOTION_START_ATOMIC = 0.1667f; - private static final float ALL_APPS_STATE_TRANSITION_ATOMIC = 0.305f; - private static final float ALL_APPS_STATE_TRANSITION_MANUAL = 0.4f; - private static final float ALL_APPS_FADE_END_ATOMIC = 0.4717f; + public static final float ALL_APPS_STATE_TRANSITION_ATOMIC = 0.3333f; + public static final float ALL_APPS_STATE_TRANSITION_MANUAL = 0.4f; + private static final float ALL_APPS_FADE_END_ATOMIC = 0.8333f; + private static final float ALL_APPS_FADE_END_MANUAL = 0.8f; private static final float ALL_APPS_FULL_DEPTH_PROGRESS = 0.5f; + private static final float SCRIM_FADE_START_ATOMIC = 0.2642f; + private static final float SCRIM_FADE_START_MANUAL = 0.117f; + private static final float WORKSPACE_MOTION_START_ATOMIC = 0.1667f; private static final Interpolator LINEAR_EARLY_MANUAL = Interpolators.clampToProgress(LINEAR, 0f, ALL_APPS_STATE_TRANSITION_MANUAL); @@ -98,27 +100,30 @@ public class AllAppsSwipeController extends AbstractStateChangeTouchController { public static final Interpolator HOTSEAT_FADE_ATOMIC = STEP_TRANSITION_ATOMIC; public static final Interpolator HOTSEAT_FADE_MANUAL = STEP_TRANSITION_MANUAL; - public static final Interpolator HOTSEAT_SCALE_ATOMIC = STEP_TRANSITION_ATOMIC; - public static final Interpolator HOTSEAT_SCALE_MANUAL = LINEAR_EARLY_MANUAL; - - public static final Interpolator HOTSEAT_TRANSLATE_ATOMIC = + public static final Interpolator HOTSEAT_SCALE_ATOMIC = Interpolators.clampToProgress( EMPHASIZED_ACCELERATE, WORKSPACE_MOTION_START_ATOMIC, ALL_APPS_STATE_TRANSITION_ATOMIC); + public static final Interpolator HOTSEAT_SCALE_MANUAL = LINEAR_EARLY_MANUAL; + + public static final Interpolator HOTSEAT_TRANSLATE_ATOMIC = STEP_TRANSITION_ATOMIC; public static final Interpolator HOTSEAT_TRANSLATE_MANUAL = STEP_TRANSITION_MANUAL; public static final Interpolator SCRIM_FADE_ATOMIC = Interpolators.clampToProgress( Interpolators.mapToProgress(LINEAR, 0f, 0.8f), - WORKSPACE_MOTION_START_ATOMIC, ALL_APPS_STATE_TRANSITION_ATOMIC); - public static final Interpolator SCRIM_FADE_MANUAL = LINEAR_EARLY_MANUAL; + SCRIM_FADE_START_ATOMIC, ALL_APPS_STATE_TRANSITION_ATOMIC); + public static final Interpolator SCRIM_FADE_MANUAL = + Interpolators.clampToProgress( + LINEAR, SCRIM_FADE_START_MANUAL, ALL_APPS_STATE_TRANSITION_MANUAL); public static final Interpolator ALL_APPS_FADE_ATOMIC = Interpolators.clampToProgress( - Interpolators.mapToProgress(DECELERATED_EASE, 0.2f, 1f), + Interpolators.mapToProgress(EMPHASIZED_DECELERATE, 0.2f, 1f), ALL_APPS_STATE_TRANSITION_ATOMIC, ALL_APPS_FADE_END_ATOMIC); public static final Interpolator ALL_APPS_FADE_MANUAL = - Interpolators.clampToProgress(LINEAR, ALL_APPS_STATE_TRANSITION_MANUAL, 1f); + Interpolators.clampToProgress( + LINEAR, ALL_APPS_STATE_TRANSITION_MANUAL, ALL_APPS_FADE_END_MANUAL); public static final Interpolator ALL_APPS_VERTICAL_PROGRESS_ATOMIC = Interpolators.clampToProgress(