Merge "Move task to middle when dragging up in grid only overview" into main
diff --git a/quickstep/src/com/android/quickstep/util/TaskViewSimulator.java b/quickstep/src/com/android/quickstep/util/TaskViewSimulator.java
index 767aa15..5d8e53e 100644
--- a/quickstep/src/com/android/quickstep/util/TaskViewSimulator.java
+++ b/quickstep/src/com/android/quickstep/util/TaskViewSimulator.java
@@ -17,6 +17,7 @@
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
+import static com.android.launcher3.Flags.enableGridOnlyOverview;
import static com.android.launcher3.states.RotationHelper.deltaRotation;
import static com.android.launcher3.touch.PagedOrientationHandler.MATRIX_POST_TRANSLATE;
import static com.android.launcher3.util.SplitConfigurationOptions.STAGE_POSITION_BOTTOM_OR_RIGHT;
@@ -108,6 +109,7 @@
private boolean mIsDesktopTask;
private int mTaskRectTranslationX;
private int mTaskRectTranslationY;
+ private int mPivotOffsetX;
public TaskViewSimulator(Context context, BaseActivityInterface sizeStrategy) {
mContext = context;
@@ -179,9 +181,10 @@
// Ensure the task rect is inside the full task rect
mTaskRect.offset(fullTaskSize.left, fullTaskSize.top);
} else {
- fullTaskSize = mTaskRect;
+ fullTaskSize = new Rect(mTaskRect);
+ mTaskRect.offset(mTaskRectTranslationX, mTaskRectTranslationY);
}
- fullTaskSize.offset(mTaskRectTranslationX, mTaskRectTranslationY);
+ fullTaskSize.offset(mTaskRectTranslationX + mPivotOffsetX, mTaskRectTranslationY);
return mOrientationState.getFullScreenScaleAndPivot(fullTaskSize, mDp, mPivot);
}
@@ -265,6 +268,11 @@
*/
public void addAppToOverviewAnim(PendingAnimation pa, TimeInterpolator interpolator) {
pa.addFloat(fullScreenProgress, AnimatedFloat.VALUE, 1, 0, interpolator);
+ if (enableGridOnlyOverview() && mDp.isTablet) {
+ int translationXToMiddle = mDp.widthPx / 2 - mTaskRect.centerX();
+ taskPrimaryTranslation.value = translationXToMiddle;
+ mPivotOffsetX = translationXToMiddle;
+ }
pa.addFloat(recentsViewScale, AnimatedFloat.VALUE, getFullScreenScale(), 1, interpolator);
}
diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java
index b3d8da7..2555ffa 100644
--- a/quickstep/src/com/android/quickstep/views/RecentsView.java
+++ b/quickstep/src/com/android/quickstep/views/RecentsView.java
@@ -2101,11 +2101,15 @@
}
float accumulatedTranslationX = 0;
+ float translateXToMiddle = enableGridOnlyOverview() && mActivity.getDeviceProfile().isTablet
+ ? mActivity.getDeviceProfile().widthPx / 2 - mLastComputedGridTaskSize.centerX()
+ : 0;
for (int i = 0; i < taskCount; i++) {
TaskView taskView = requireTaskViewAt(i);
taskView.updateTaskSize();
taskView.getPrimaryNonGridTranslationProperty().set(taskView, accumulatedTranslationX);
taskView.getSecondaryNonGridTranslationProperty().set(taskView, 0f);
+ taskView.setNonGridPivotTranslationX(translateXToMiddle);
// Compensate space caused by TaskView scaling.
float widthDiff =
taskView.getLayoutParams().width * (1 - taskView.getNonGridScale());
@@ -4322,14 +4326,19 @@
Utilities.getPivotsForScalingRectToRect(mTempRect, selectedTaskPosition,
mTempPointF);
- setPivotX(mTempPointF.x);
- setPivotY(mTempPointF.y);
} else {
+ mTempRect.set(mLastComputedTaskSize);
+ // Only update pivot when it is tablet and not in grid yet, so the pivot is correct
+ // for non-current tasks when swiping up to overview
+ if (enableGridOnlyOverview() && mActivity.getDeviceProfile().isTablet
+ && !mOverviewGridEnabled) {
+ mTempRect.offset(mActivity.getDeviceProfile().widthPx / 2 - mTempRect.centerX(), 0);
+ }
getPagedViewOrientedState().getFullScreenScaleAndPivot(mTempRect,
mActivity.getDeviceProfile(), mTempPointF);
- setPivotX(mTempPointF.x);
- setPivotY(mTempPointF.y);
}
+ setPivotX(mTempPointF.x);
+ setPivotY(mTempPointF.y);
}
private void updatePageOffsets() {
diff --git a/quickstep/src/com/android/quickstep/views/TaskView.java b/quickstep/src/com/android/quickstep/views/TaskView.java
index fec17b4..b063c91 100644
--- a/quickstep/src/com/android/quickstep/views/TaskView.java
+++ b/quickstep/src/com/android/quickstep/views/TaskView.java
@@ -384,6 +384,7 @@
// switch.
private float mNonGridTranslationX;
private float mNonGridTranslationY;
+ private float mNonGridPivotTranslationX;
// Used when in SplitScreenSelectState
private float mSplitSelectTranslationY;
private float mSplitSelectTranslationX;
@@ -1284,8 +1285,8 @@
}
protected void resetPersistentViewTransforms() {
- mNonGridTranslationX = mNonGridTranslationY =
- mGridTranslationX = mGridTranslationY = mBoxTranslationY = 0f;
+ mNonGridTranslationX = mNonGridTranslationY = mGridTranslationX =
+ mGridTranslationY = mBoxTranslationY = mNonGridPivotTranslationX = 0f;
resetViewTransforms();
}
@@ -1487,6 +1488,14 @@
applyTranslationX();
}
+ /**
+ * Set translation X for non-grid pivot
+ */
+ public void setNonGridPivotTranslationX(float nonGridPivotTranslationX) {
+ mNonGridPivotTranslationX = nonGridPivotTranslationX;
+ applyTranslationX();
+ }
+
public float getScrollAdjustment(boolean gridEnabled) {
float scrollAdjustment = 0;
if (gridEnabled) {
@@ -1529,7 +1538,8 @@
* change according to a temporary state (e.g. task offset).
*/
public float getPersistentTranslationX() {
- return getNonGridTrans(mNonGridTranslationX) + getGridTrans(mGridTranslationX);
+ return getNonGridTrans(mNonGridTranslationX) + getGridTrans(mGridTranslationX)
+ + getNonGridTrans(mNonGridPivotTranslationX);
}
/**