Align home/back button from overview with tap outside
Set all interpolators in QuickstepAtomicAnimationFactory instead of
overriding some in OverviewToHomeAnim. This also means we can just
use a normal state transition instead of OverviewToHomeAnim when
tapping outside recents (i.e. startHome()).
Test: in all three gesture modes, the same animation is played
whether tapping outside recents, pressing home, or pressing back
Bug: 185411781
Change-Id: Ibe8734e8bd7041943eb76cac30d7cac26a90c73e
diff --git a/quickstep/src/com/android/launcher3/uioverrides/states/QuickstepAtomicAnimationFactory.java b/quickstep/src/com/android/launcher3/uioverrides/states/QuickstepAtomicAnimationFactory.java
index 3ac7866..fd7a67a 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/states/QuickstepAtomicAnimationFactory.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/states/QuickstepAtomicAnimationFactory.java
@@ -27,12 +27,15 @@
import static com.android.launcher3.anim.Interpolators.DEACCEL;
import static com.android.launcher3.anim.Interpolators.DEACCEL_1_7;
import static com.android.launcher3.anim.Interpolators.DEACCEL_3;
+import static com.android.launcher3.anim.Interpolators.FAST_OUT_SLOW_IN;
import static com.android.launcher3.anim.Interpolators.FINAL_FRAME;
import static com.android.launcher3.anim.Interpolators.INSTANT;
+import static com.android.launcher3.anim.Interpolators.LINEAR;
import static com.android.launcher3.anim.Interpolators.OVERSHOOT_1_2;
import static com.android.launcher3.anim.Interpolators.clampToProgress;
import static com.android.launcher3.states.StateAnimationConfig.ANIM_ALL_APPS_FADE;
import static com.android.launcher3.states.StateAnimationConfig.ANIM_DEPTH;
+import static com.android.launcher3.states.StateAnimationConfig.ANIM_OVERVIEW_ACTIONS_FADE;
import static com.android.launcher3.states.StateAnimationConfig.ANIM_OVERVIEW_FADE;
import static com.android.launcher3.states.StateAnimationConfig.ANIM_OVERVIEW_SCALE;
import static com.android.launcher3.states.StateAnimationConfig.ANIM_OVERVIEW_TRANSLATE_X;
@@ -82,17 +85,19 @@
config.setInterpolator(ANIM_WORKSPACE_SCALE, DEACCEL);
config.setInterpolator(ANIM_WORKSPACE_FADE, ACCEL);
config.setInterpolator(ANIM_ALL_APPS_FADE, ACCEL);
- config.setInterpolator(ANIM_OVERVIEW_SCALE, clampToProgress(ACCEL, 0, 0.9f));
- config.setInterpolator(ANIM_OVERVIEW_TRANSLATE_X, ACCEL_DEACCEL);
+ config.setInterpolator(ANIM_OVERVIEW_ACTIONS_FADE, LINEAR);
- if (SysUINavigationMode.getMode(mActivity) == NO_BUTTON) {
- // Scrolling in tasks, so make visible straight away
- if (overview.getTaskViewCount() > 0) {
- config.setInterpolator(ANIM_OVERVIEW_FADE, FINAL_FRAME);
- } else {
- config.setInterpolator(ANIM_OVERVIEW_FADE, DEACCEL_1_7);
- }
+ if (SysUINavigationMode.getMode(mActivity).hasGestures
+ && overview.getTaskViewCount() > 0) {
+ // Overview is going offscreen, so keep it at its current scale and opacity.
+ config.setInterpolator(ANIM_OVERVIEW_SCALE, FINAL_FRAME);
+ config.setInterpolator(ANIM_OVERVIEW_FADE, FINAL_FRAME);
+ config.setInterpolator(ANIM_OVERVIEW_TRANSLATE_X,
+ clampToProgress(FAST_OUT_SLOW_IN, 0, 0.75f));
+ config.setInterpolator(ANIM_OVERVIEW_TRANSLATE_Y, FINAL_FRAME);
} else {
+ config.setInterpolator(ANIM_OVERVIEW_TRANSLATE_X, ACCEL_DEACCEL);
+ config.setInterpolator(ANIM_OVERVIEW_SCALE, clampToProgress(ACCEL, 0, 0.9f));
config.setInterpolator(ANIM_OVERVIEW_FADE, DEACCEL_1_7);
}
diff --git a/quickstep/src/com/android/quickstep/util/OverviewToHomeAnim.java b/quickstep/src/com/android/quickstep/util/OverviewToHomeAnim.java
index 42be9bb..b427e5f 100644
--- a/quickstep/src/com/android/quickstep/util/OverviewToHomeAnim.java
+++ b/quickstep/src/com/android/quickstep/util/OverviewToHomeAnim.java
@@ -17,21 +17,10 @@
import static com.android.launcher3.LauncherState.NORMAL;
import static com.android.launcher3.LauncherState.OVERVIEW;
-import static com.android.launcher3.anim.Interpolators.DEACCEL;
-import static com.android.launcher3.anim.Interpolators.FAST_OUT_SLOW_IN;
-import static com.android.launcher3.anim.Interpolators.FINAL_FRAME;
-import static com.android.launcher3.anim.Interpolators.LINEAR;
-import static com.android.launcher3.anim.Interpolators.clampToProgress;
-import static com.android.launcher3.states.StateAnimationConfig.ANIM_OVERVIEW_ACTIONS_FADE;
-import static com.android.launcher3.states.StateAnimationConfig.ANIM_OVERVIEW_FADE;
-import static com.android.launcher3.states.StateAnimationConfig.ANIM_OVERVIEW_SCALE;
-import static com.android.launcher3.states.StateAnimationConfig.ANIM_OVERVIEW_TRANSLATE_X;
-import static com.android.launcher3.states.StateAnimationConfig.ANIM_OVERVIEW_TRANSLATE_Y;
import android.animation.Animator;
import android.animation.AnimatorSet;
import android.util.Log;
-import android.view.animation.Interpolator;
import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherState;
@@ -101,18 +90,8 @@
numPagesToScroll * PER_PAGE_SCROLL_DURATION);
int duration = Math.max(scrollDuration, startState.getTransitionDuration(mLauncher));
- StateAnimationConfig config = new UseFirstInterpolatorStateAnimConfig();
+ StateAnimationConfig config = new StateAnimationConfig();
config.duration = duration;
- boolean isLayoutNaturalToLauncher = recentsView.getPagedOrientationHandler()
- .isLayoutNaturalToLauncher();
- config.setInterpolator(ANIM_OVERVIEW_TRANSLATE_X, isLayoutNaturalToLauncher
- ? clampToProgress(FAST_OUT_SLOW_IN, 0, 0.75f) : FINAL_FRAME);
- config.setInterpolator(ANIM_OVERVIEW_TRANSLATE_Y, FINAL_FRAME);
- config.setInterpolator(ANIM_OVERVIEW_SCALE, FINAL_FRAME);
- config.setInterpolator(ANIM_OVERVIEW_ACTIONS_FADE, LINEAR);
- if (!isLayoutNaturalToLauncher) {
- config.setInterpolator(ANIM_OVERVIEW_FADE, DEACCEL);
- }
AnimatorSet stateAnim = stateManager.createAtomicAnimation(
startState, NORMAL, config);
stateAnim.addListener(new AnimationSuccessListener() {
@@ -133,17 +112,4 @@
mOnReachedHome.run();
}
}
-
- /**
- * Wrapper around StateAnimationConfig that doesn't allow interpolators to be set if they are
- * already set. This ensures they aren't overridden before being used.
- */
- private static class UseFirstInterpolatorStateAnimConfig extends StateAnimationConfig {
- @Override
- public void setInterpolator(int animId, Interpolator interpolator) {
- if (mInterpolators[animId] == null || interpolator == null) {
- super.setInterpolator(animId, interpolator);
- }
- }
- }
}
diff --git a/quickstep/src/com/android/quickstep/views/LauncherRecentsView.java b/quickstep/src/com/android/quickstep/views/LauncherRecentsView.java
index 2c5f661..65956d5 100644
--- a/quickstep/src/com/android/quickstep/views/LauncherRecentsView.java
+++ b/quickstep/src/com/android/quickstep/views/LauncherRecentsView.java
@@ -21,7 +21,6 @@
import static com.android.launcher3.LauncherState.OVERVIEW_MODAL_TASK;
import static com.android.launcher3.LauncherState.OVERVIEW_SPLIT_SELECT;
import static com.android.launcher3.LauncherState.SPRING_LOADED;
-import static com.android.quickstep.util.NavigationModeFeatureFlag.LIVE_TILE;
import android.annotation.TargetApi;
import android.content.Context;
@@ -39,7 +38,6 @@
import com.android.launcher3.uioverrides.plugins.PluginManagerWrapper;
import com.android.launcher3.util.SplitConfigurationOptions;
import com.android.quickstep.LauncherActivityInterface;
-import com.android.quickstep.util.OverviewToHomeAnim;
import com.android.systemui.plugins.PluginListener;
import com.android.systemui.plugins.RecentsExtraCard;
@@ -90,15 +88,7 @@
@Override
public void startHome() {
- Runnable onReachedHome = () -> mActivity.getStateManager().goToState(NORMAL, false);
- OverviewToHomeAnim overviewToHomeAnim = new OverviewToHomeAnim(mActivity, onReachedHome);
- if (LIVE_TILE.get()) {
- switchToScreenshot(null,
- () -> finishRecentsAnimation(true /* toRecents */,
- () -> overviewToHomeAnim.animateWithVelocity(0)));
- } else {
- overviewToHomeAnim.animateWithVelocity(0);
- }
+ mActivity.getStateManager().goToState(NORMAL);
}
@Override