Fix 2 bugs involving split staging task translation
This patch fixes two bugs related to the way tiles slide in when a split is staged. Previously, translations were not being completely reset, so on repeated splits, the thumbnails would retain their old translation setting and cause awkward movements to occur during the slide-in animation.
Fixed by adding setTaskViewsPrimarySplitTranslation() and setTaskViewsSecondarySplitTranslation() in resetFromSplitSelectionState().
Fixes: 249154347
Fixes: 249824716
Test: Manual on grid and non-grid Overview, in a variety of conditions
Change-Id: I2d9aa621a17f178ff8216740d76429d2ac484b39
diff --git a/quickstep/src/com/android/launcher3/uioverrides/RecentsViewStateController.java b/quickstep/src/com/android/launcher3/uioverrides/RecentsViewStateController.java
index cbb9ad1..910b99b 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/RecentsViewStateController.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/RecentsViewStateController.java
@@ -130,10 +130,11 @@
mRecentsView.createSplitSelectInitAnimation(builder,
toState.getTransitionDuration(mLauncher, true /* isToState */));
- // Add properties to shift remaining taskViews to get out of placeholder view
+ // Shift tasks vertically downward to get out of placeholder view
builder.setFloat(mRecentsView, taskViewsFloat.first,
toState.getSplitSelectTranslation(mLauncher),
timings.getGridSlidePrimaryInterpolator());
+ // Zero out horizontal translation
builder.setFloat(mRecentsView, taskViewsFloat.second,
0,
timings.getGridSlideSecondaryInterpolator());
diff --git a/quickstep/src/com/android/quickstep/util/OverviewToSplitTimings.java b/quickstep/src/com/android/quickstep/util/OverviewToSplitTimings.java
index d46c0f8..e189a66 100644
--- a/quickstep/src/com/android/quickstep/util/OverviewToSplitTimings.java
+++ b/quickstep/src/com/android/quickstep/util/OverviewToSplitTimings.java
@@ -16,6 +16,9 @@
package com.android.quickstep.util;
+import static com.android.launcher3.anim.Interpolators.EMPHASIZED;
+import static com.android.launcher3.anim.Interpolators.INSTANT;
+
import android.view.animation.Interpolator;
/**
@@ -44,14 +47,14 @@
public int getInstructionsTextFadeInEnd() { return 300; }
public int getInstructionsUnfoldStart() { return 167; }
public int getInstructionsUnfoldEnd() { return 500; }
+ public Interpolator getGridSlidePrimaryInterpolator() { return EMPHASIZED; }
+ public Interpolator getGridSlideSecondaryInterpolator() { return INSTANT; }
abstract public int getDuration();
abstract public Interpolator getStagedRectXInterpolator();
abstract public Interpolator getStagedRectYInterpolator();
abstract public Interpolator getStagedRectScaleXInterpolator();
abstract public Interpolator getStagedRectScaleYInterpolator();
- abstract public Interpolator getGridSlidePrimaryInterpolator();
- abstract public Interpolator getGridSlideSecondaryInterpolator();
public float getGridSlideStartOffset() {
return (float) getGridSlideStart() / getDuration();
diff --git a/quickstep/src/com/android/quickstep/util/PhoneOverviewToSplitTimings.java b/quickstep/src/com/android/quickstep/util/PhoneOverviewToSplitTimings.java
index 66c41d6..f1dde53 100644
--- a/quickstep/src/com/android/quickstep/util/PhoneOverviewToSplitTimings.java
+++ b/quickstep/src/com/android/quickstep/util/PhoneOverviewToSplitTimings.java
@@ -17,7 +17,6 @@
package com.android.quickstep.util;
import static com.android.launcher3.anim.Interpolators.EMPHASIZED;
-import static com.android.launcher3.anim.Interpolators.INSTANT;
import android.view.animation.Interpolator;
@@ -41,6 +40,4 @@
public Interpolator getStagedRectYInterpolator() { return EMPHASIZED; }
public Interpolator getStagedRectScaleXInterpolator() { return EMPHASIZED; }
public Interpolator getStagedRectScaleYInterpolator() { return EMPHASIZED; }
- public Interpolator getGridSlidePrimaryInterpolator() { return EMPHASIZED; }
- public Interpolator getGridSlideSecondaryInterpolator() { return INSTANT; }
}
diff --git a/quickstep/src/com/android/quickstep/util/TabletOverviewToSplitTimings.java b/quickstep/src/com/android/quickstep/util/TabletOverviewToSplitTimings.java
index 30defa7..cbf46bf 100644
--- a/quickstep/src/com/android/quickstep/util/TabletOverviewToSplitTimings.java
+++ b/quickstep/src/com/android/quickstep/util/TabletOverviewToSplitTimings.java
@@ -17,7 +17,6 @@
package com.android.quickstep.util;
import static com.android.launcher3.anim.Interpolators.DEACCEL_2;
-import static com.android.launcher3.anim.Interpolators.LINEAR;
import android.view.animation.Interpolator;
@@ -41,6 +40,4 @@
public Interpolator getStagedRectYInterpolator() { return DEACCEL_2; }
public Interpolator getStagedRectScaleXInterpolator() { return DEACCEL_2; }
public Interpolator getStagedRectScaleYInterpolator() { return DEACCEL_2; }
- public Interpolator getGridSlidePrimaryInterpolator() { return LINEAR; }
- public Interpolator getGridSlideSecondaryInterpolator() { return LINEAR; }
}
diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java
index 2f91e16..7ad0e48 100644
--- a/quickstep/src/com/android/quickstep/views/RecentsView.java
+++ b/quickstep/src/com/android/quickstep/views/RecentsView.java
@@ -3115,6 +3115,7 @@
+ splitTimings.getGridSlideDurationOffset(), 0f, 1f)
: 1f;
+ // Slide tiles in horizontally to fill dismissed area
anim.setFloat(child, translationProperty, scrollDiff,
clampToProgress(
splitTimings.getGridSlidePrimaryInterpolator(),
@@ -4286,6 +4287,12 @@
snapToPageImmediately(pageToSnapTo);
}
onLayout(false /* changed */, getLeft(), getTop(), getRight(), getBottom());
+
+ // We are leaving split selection state, so it is safe to reset thumbnail translations for
+ // the next time split is invoked.
+ setTaskViewsPrimarySplitTranslation(0);
+ setTaskViewsSecondarySplitTranslation(0);
+
resetTaskVisuals();
mSplitHiddenTaskViewIndex = -1;
}