diff --git a/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java b/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java index 1d523151db..7a968c1799 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java +++ b/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java @@ -17,6 +17,7 @@ package com.android.launcher3.uioverrides; import static com.android.launcher3.anim.Interpolators.AGGRESSIVE_EASE_IN_OUT; +import static com.android.launcher3.anim.Interpolators.INSTANT; import static com.android.launcher3.anim.Interpolators.LINEAR; import static com.android.launcher3.states.StateAnimationConfig.ANIM_OVERVIEW_FADE; import static com.android.launcher3.states.StateAnimationConfig.ANIM_OVERVIEW_MODAL; @@ -113,7 +114,8 @@ public abstract class BaseRecentsViewStateController toState.getOverviewModalness(), config.getInterpolator(ANIM_OVERVIEW_MODAL, LINEAR)); setter.setFloat(mRecentsView, RECENTS_GRID_PROGRESS, - toState.displayOverviewTasksAsGrid(mLauncher.getDeviceProfile()) ? 1f : 0f, LINEAR); + toState.displayOverviewTasksAsGrid(mLauncher.getDeviceProfile()) ? 1f : 0f, + INSTANT); } abstract FloatProperty getTaskModalnessProperty(); diff --git a/quickstep/src/com/android/quickstep/fallback/FallbackRecentsStateController.java b/quickstep/src/com/android/quickstep/fallback/FallbackRecentsStateController.java index 52083bbd8f..854067b926 100644 --- a/quickstep/src/com/android/quickstep/fallback/FallbackRecentsStateController.java +++ b/quickstep/src/com/android/quickstep/fallback/FallbackRecentsStateController.java @@ -15,6 +15,7 @@ */ package com.android.quickstep.fallback; +import static com.android.launcher3.anim.Interpolators.INSTANT; import static com.android.launcher3.anim.Interpolators.LINEAR; import static com.android.launcher3.states.StateAnimationConfig.ANIM_OVERVIEW_MODAL; import static com.android.launcher3.states.StateAnimationConfig.ANIM_OVERVIEW_SCALE; @@ -93,7 +94,7 @@ public class FallbackRecentsStateController implements StateHandler mScrollListeners = new ArrayList<>(); @@ -502,7 +503,7 @@ public abstract class RecentsView FULLSCREEN_TRANSLATION_X = - new FloatProperty("fullscreenTranslationX") { + private static final FloatProperty NON_GRID_TRANSLATION_X = + new FloatProperty("nonGridTranslationX") { @Override public void setValue(TaskView taskView, float v) { - taskView.setFullscreenTranslationX(v); + taskView.setNonGridTranslationX(v); } @Override public Float get(TaskView taskView) { - return taskView.mFullscreenTranslationX; + return taskView.mNonGridTranslationX; } }; - private static final FloatProperty FULLSCREEN_TRANSLATION_Y = - new FloatProperty("fullscreenTranslationY") { + private static final FloatProperty NON_GRID_TRANSLATION_Y = + new FloatProperty("nonGridTranslationY") { @Override public void setValue(TaskView taskView, float v) { - taskView.setFullscreenTranslationY(v); + taskView.setNonGridTranslationY(v); } @Override public Float get(TaskView taskView) { - return taskView.mFullscreenTranslationY; - } - }; - - private static final FloatProperty NON_FULLSCREEN_TRANSLATION_X = - new FloatProperty("nonFullscreenTranslationX") { - @Override - public void setValue(TaskView taskView, float v) { - taskView.setNonFullscreenTranslationX(v); - } - - @Override - public Float get(TaskView taskView) { - return taskView.mNonFullscreenTranslationX; - } - }; - - private static final FloatProperty NON_FULLSCREEN_TRANSLATION_Y = - new FloatProperty("nonFullscreenTranslationY") { - @Override - public void setValue(TaskView taskView, float v) { - taskView.setNonFullscreenTranslationY(v); - } - - @Override - public Float get(TaskView taskView) { - return taskView.mNonFullscreenTranslationY; + return taskView.mNonGridTranslationY; } }; @@ -362,7 +336,7 @@ public class TaskView extends FrameLayout implements Reusable { private final DigitalWellBeingToast mDigitalWellBeingToast; private float mFullscreenProgress; private float mGridProgress; - private float mFullscreenScale = 1; + private float mNonGridScale = 1; private final FullscreenDrawParams mCurrentFullscreenParams; private final StatefulActivity mActivity; @@ -374,16 +348,14 @@ public class TaskView extends FrameLayout implements Reusable { private float mTaskResistanceTranslationX; private float mTaskResistanceTranslationY; // The following translation variables should only be used in the same orientation as Launcher. - private float mFullscreenTranslationX; - private float mFullscreenTranslationY; - // Applied as a complement to fullscreenTranslation, for adjusting the carousel overview, or the - // in transition carousel before forming the grid on tablets. - private float mNonFullscreenTranslationX; - private float mNonFullscreenTranslationY; private float mBoxTranslationY; // The following grid translations scales with mGridProgress. private float mGridTranslationX; private float mGridTranslationY; + // Applied as a complement to gridTranslation, for adjusting the carousel overview and quick + // switch. + private float mNonGridTranslationX; + private float mNonGridTranslationY; // Used when in SplitScreenSelectState private float mSplitSelectTranslationY; private float mSplitSelectTranslationX; @@ -881,9 +853,8 @@ public class TaskView extends FrameLayout implements Reusable { @Override public void onRecycle() { - mFullscreenTranslationX = mFullscreenTranslationY = mNonFullscreenTranslationX = - mNonFullscreenTranslationY = mGridTranslationX = mGridTranslationY = - mBoxTranslationY = 0f; + mNonGridTranslationX = mNonGridTranslationY = + mGridTranslationX = mGridTranslationY = mBoxTranslationY = 0f; resetViewTransforms(); // Clear any references to the thumbnail (it will be re-read either from the cache or the // system on next bind) @@ -969,13 +940,13 @@ public class TaskView extends FrameLayout implements Reusable { } } - private void setFullscreenScale(float fullscreenScale) { - mFullscreenScale = fullscreenScale; + private void setNonGridScale(float nonGridScale) { + mNonGridScale = nonGridScale; applyScale(); } - public float getFullscreenScale() { - return mFullscreenScale; + public float getNonGridScale() { + return mNonGridScale; } private void setSnapshotScale(float dismissScale) { @@ -997,12 +968,22 @@ public class TaskView extends FrameLayout implements Reusable { private void applyScale() { float scale = 1; - float fullScreenProgress = FULLSCREEN_INTERPOLATOR.getInterpolation(mFullscreenProgress); - scale *= Utilities.mapRange(fullScreenProgress, 1f, mFullscreenScale); + scale *= getPersistentScale(); setScaleX(scale); setScaleY(scale); } + /** + * Returns multiplication of scale that is persistent (e.g. fullscreen and grid), and does not + * change according to a temporary state. + */ + public float getPersistentScale() { + float scale = 1; + float gridProgress = GRID_INTERPOLATOR.getInterpolation(mGridProgress); + scale *= Utilities.mapRange(gridProgress, mNonGridScale, 1f); + return scale; + } + private void setSplitSelectTranslationX(float x) { mSplitSelectTranslationX = x; applyTranslationX(); @@ -1042,23 +1023,13 @@ public class TaskView extends FrameLayout implements Reusable { applyTranslationY(); } - private void setFullscreenTranslationX(float fullscreenTranslationX) { - mFullscreenTranslationX = fullscreenTranslationX; + private void setNonGridTranslationX(float nonGridTranslationX) { + mNonGridTranslationX = nonGridTranslationX; applyTranslationX(); } - private void setFullscreenTranslationY(float fullscreenTranslationY) { - mFullscreenTranslationY = fullscreenTranslationY; - applyTranslationY(); - } - - private void setNonFullscreenTranslationX(float nonFullscreenTranslationX) { - mNonFullscreenTranslationX = nonFullscreenTranslationX; - applyTranslationX(); - } - - private void setNonFullscreenTranslationY(float nonFullscreenTranslationY) { - mNonFullscreenTranslationY = nonFullscreenTranslationY; + private void setNonGridTranslationY(float nonGridTranslationY) { + mNonGridTranslationY = nonGridTranslationY; applyTranslationY(); } @@ -1082,13 +1053,10 @@ public class TaskView extends FrameLayout implements Reusable { public float getScrollAdjustment(boolean fullscreenEnabled, boolean gridEnabled) { float scrollAdjustment = 0; - if (fullscreenEnabled) { - scrollAdjustment += getPrimaryFullscreenTranslationProperty().get(this); - } else { - scrollAdjustment += getPrimaryNonFullscreenTranslationProperty().get(this); - } if (gridEnabled) { scrollAdjustment += mGridTranslationX; + } else { + scrollAdjustment += getPrimaryNonGridTranslationProperty().get(this); } return scrollAdjustment; } @@ -1100,7 +1068,7 @@ public class TaskView extends FrameLayout implements Reusable { public float getSizeAdjustment(boolean fullscreenEnabled) { float sizeAdjustment = 1; if (fullscreenEnabled) { - sizeAdjustment *= mFullscreenScale; + sizeAdjustment *= mNonGridScale; } return sizeAdjustment; } @@ -1125,9 +1093,7 @@ public class TaskView extends FrameLayout implements Reusable { * change according to a temporary state (e.g. task offset). */ public float getPersistentTranslationX() { - return getFullscreenTrans(mFullscreenTranslationX) - + getNonFullscreenTrans(mNonFullscreenTranslationX) - + getGridTrans(mGridTranslationX); + return getNonGridTrans(mNonGridTranslationX) + getGridTrans(mGridTranslationX); } /** @@ -1136,8 +1102,7 @@ public class TaskView extends FrameLayout implements Reusable { */ public float getPersistentTranslationY() { return mBoxTranslationY - + getFullscreenTrans(mFullscreenTranslationY) - + getNonFullscreenTrans(mNonFullscreenTranslationY) + + getNonGridTrans(mNonGridTranslationY) + getGridTrans(mGridTranslationY); } @@ -1171,24 +1136,14 @@ public class TaskView extends FrameLayout implements Reusable { TASK_RESISTANCE_TRANSLATION_X, TASK_RESISTANCE_TRANSLATION_Y); } - public FloatProperty getPrimaryFullscreenTranslationProperty() { + public FloatProperty getPrimaryNonGridTranslationProperty() { return getPagedOrientationHandler().getPrimaryValue( - FULLSCREEN_TRANSLATION_X, FULLSCREEN_TRANSLATION_Y); + NON_GRID_TRANSLATION_X, NON_GRID_TRANSLATION_Y); } - public FloatProperty getSecondaryFullscreenTranslationProperty() { + public FloatProperty getSecondaryNonGridTranslationProperty() { return getPagedOrientationHandler().getSecondaryValue( - FULLSCREEN_TRANSLATION_X, FULLSCREEN_TRANSLATION_Y); - } - - public FloatProperty getPrimaryNonFullscreenTranslationProperty() { - return getPagedOrientationHandler().getPrimaryValue( - NON_FULLSCREEN_TRANSLATION_X, NON_FULLSCREEN_TRANSLATION_Y); - } - - public FloatProperty getSecondaryNonFullscreenTranslationProperty() { - return getPagedOrientationHandler().getSecondaryValue( - NON_FULLSCREEN_TRANSLATION_X, NON_FULLSCREEN_TRANSLATION_Y); + NON_GRID_TRANSLATION_X, NON_GRID_TRANSLATION_Y); } @Override @@ -1326,19 +1281,9 @@ public class TaskView extends FrameLayout implements Reusable { mIconView.setVisibility(progress < 1 ? VISIBLE : INVISIBLE); getThumbnail().getTaskOverlay().setFullscreenProgress(progress); - applyTranslationX(); - applyTranslationY(); - applyScale(); - TaskThumbnailView thumbnail = getThumbnail(); updateCurrentFullscreenParams(thumbnail.getPreviewPositionHelper()); - if (!getRecentsView().isTaskIconScaledDown(this)) { - // Some of the items in here are dependent on the current fullscreen params, but don't - // update them if the icon is supposed to be scaled down. - setIconScaleAndDim(progress, true /* invert */); - } - thumbnail.setFullscreenParams(mCurrentFullscreenParams); mOutlineProvider.updateParams( mCurrentFullscreenParams, @@ -1363,7 +1308,7 @@ public class TaskView extends FrameLayout implements Reusable { */ void updateTaskSize() { ViewGroup.LayoutParams params = getLayoutParams(); - float fullscreenScale; + float nonGridScale; float boxTranslationY; int expectedWidth; int expectedHeight; @@ -1394,18 +1339,18 @@ public class TaskView extends FrameLayout implements Reusable { expectedHeight = boxHeight + thumbnailPadding; // Scale to to fit task Rect. - fullscreenScale = taskWidth / (float) boxWidth; + nonGridScale = taskWidth / (float) boxWidth; // Align to top of task Rect. boxTranslationY = (expectedHeight - thumbnailPadding - taskHeight) / 2.0f; } else { - fullscreenScale = 1f; + nonGridScale = 1f; boxTranslationY = 0f; expectedWidth = ViewGroup.LayoutParams.MATCH_PARENT; expectedHeight = ViewGroup.LayoutParams.MATCH_PARENT; } - setFullscreenScale(fullscreenScale); + setNonGridScale(nonGridScale); setBoxTranslationY(boxTranslationY); if (params.width != expectedWidth || params.height != expectedHeight) { params.width = expectedWidth; @@ -1414,20 +1359,15 @@ public class TaskView extends FrameLayout implements Reusable { } } - private float getFullscreenTrans(float endTranslation) { - float progress = FULLSCREEN_INTERPOLATOR.getInterpolation(mFullscreenProgress); - return Utilities.mapRange(progress, 0, endTranslation); - } - - private float getNonFullscreenTrans(float endTranslation) { - return endTranslation - getFullscreenTrans(endTranslation); - } - private float getGridTrans(float endTranslation) { - float progress = ACCEL_DEACCEL.getInterpolation(mGridProgress); + float progress = GRID_INTERPOLATOR.getInterpolation(mGridProgress); return Utilities.mapRange(progress, 0, endTranslation); } + private float getNonGridTrans(float endTranslation) { + return endTranslation - getGridTrans(endTranslation); + } + public boolean isRunningTask() { if (getRecentsView() == null) { return false;