diff --git a/go/quickstep/src/com/android/launcher3/uioverrides/OverviewState.java b/go/quickstep/src/com/android/launcher3/uioverrides/OverviewState.java index cec12a8d18..14c3495548 100644 --- a/go/quickstep/src/com/android/launcher3/uioverrides/OverviewState.java +++ b/go/quickstep/src/com/android/launcher3/uioverrides/OverviewState.java @@ -43,8 +43,8 @@ public class OverviewState extends LauncherState { } @Override - public float[] getOverviewScaleAndTranslationY(Launcher launcher) { - return new float[] {1f, 0f}; + public ScaleAndTranslation getOverviewScaleAndTranslation(Launcher launcher) { + return new ScaleAndTranslation(1f, 0f, 0f); } @Override diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/BackgroundAppState.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/BackgroundAppState.java index f7127537a5..726ae0504e 100644 --- a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/BackgroundAppState.java +++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/BackgroundAppState.java @@ -52,7 +52,7 @@ public class BackgroundAppState extends OverviewState { } @Override - public float[] getOverviewScaleAndTranslationY(Launcher launcher) { + public ScaleAndTranslation getOverviewScaleAndTranslation(Launcher launcher) { // Initialize the recents view scale to what it would be when starting swipe up RecentsView recentsView = launcher.getOverviewPanel(); recentsView.getTaskSize(sTempRect); @@ -71,7 +71,7 @@ public class BackgroundAppState extends OverviewState { } } float scale = (float) appWidth / sTempRect.width(); - return new float[] { scale, 0f }; + return new ScaleAndTranslation(scale, 0f, 0f); } @Override diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/OverviewState.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/OverviewState.java index 2360eebc46..db02c53d1f 100644 --- a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/OverviewState.java +++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/OverviewState.java @@ -56,7 +56,7 @@ public class OverviewState extends LauncherState { } @Override - public float[] getWorkspaceScaleAndTranslation(Launcher launcher) { + public ScaleAndTranslation getWorkspaceScaleAndTranslation(Launcher launcher) { RecentsView recentsView = launcher.getOverviewPanel(); Workspace workspace = launcher.getWorkspace(); View workspacePage = workspace.getPageAt(workspace.getCurrentPage()); @@ -65,12 +65,12 @@ public class OverviewState extends LauncherState { recentsView.getTaskSize(sTempRect); float scale = (float) sTempRect.width() / workspacePageWidth; float parallaxFactor = 0.5f; - return new float[]{scale, 0, -getDefaultSwipeHeight(launcher) * parallaxFactor}; + return new ScaleAndTranslation(scale, 0, -getDefaultSwipeHeight(launcher) * parallaxFactor); } @Override - public float[] getOverviewScaleAndTranslationY(Launcher launcher) { - return new float[] {1f, 0f}; + public ScaleAndTranslation getOverviewScaleAndTranslation(Launcher launcher) { + return new ScaleAndTranslation(1f, 0f, 0f); } @Override diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherActivityControllerHelper.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherActivityControllerHelper.java index 279b83c238..9763063b68 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherActivityControllerHelper.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherActivityControllerHelper.java @@ -16,7 +16,6 @@ package com.android.quickstep; import static android.view.View.TRANSLATION_Y; - import static com.android.launcher3.LauncherAnimUtils.SCALE_PROPERTY; import static com.android.launcher3.LauncherState.BACKGROUND_APP; import static com.android.launcher3.LauncherState.NORMAL; @@ -39,10 +38,6 @@ import android.view.MotionEvent; import android.view.View; import android.view.animation.Interpolator; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.annotation.UiThread; - import com.android.launcher3.DeviceProfile; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherAppState; @@ -67,6 +62,10 @@ import com.android.systemui.shared.system.RemoteAnimationTargetCompat; import java.util.function.BiPredicate; import java.util.function.Consumer; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.UiThread; + /** * {@link ActivityControlHelper} for the in-launcher recents. */ @@ -305,7 +304,7 @@ public final class LauncherActivityControllerHelper implements ActivityControlHe // starting to line up the side pages during swipe up) float prevRvScale = recentsView.getScaleX(); float prevRvTransY = recentsView.getTranslationY(); - float targetRvScale = endState.getOverviewScaleAndTranslationY(launcher)[0]; + float targetRvScale = endState.getOverviewScaleAndTranslation(launcher).scale; SCALE_PROPERTY.set(recentsView, targetRvScale); recentsView.setTranslationY(0); ClipAnimationHelper clipHelper = new ClipAnimationHelper(launcher); diff --git a/quickstep/src/com/android/launcher3/uioverrides/AllAppsState.java b/quickstep/src/com/android/launcher3/uioverrides/AllAppsState.java index 5ae562e8bd..c629e3360a 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/AllAppsState.java +++ b/quickstep/src/com/android/launcher3/uioverrides/AllAppsState.java @@ -60,10 +60,10 @@ public class AllAppsState extends LauncherState { } @Override - public float[] getWorkspaceScaleAndTranslation(Launcher launcher) { - float[] scaleAndTranslation = LauncherState.OVERVIEW.getWorkspaceScaleAndTranslation( - launcher); - scaleAndTranslation[0] = 1; + public ScaleAndTranslation getWorkspaceScaleAndTranslation(Launcher launcher) { + ScaleAndTranslation scaleAndTranslation = LauncherState.OVERVIEW + .getWorkspaceScaleAndTranslation(launcher); + scaleAndTranslation.scale = 1; return scaleAndTranslation; } @@ -78,9 +78,9 @@ public class AllAppsState extends LauncherState { } @Override - public float[] getOverviewScaleAndTranslationY(Launcher launcher) { + public ScaleAndTranslation getOverviewScaleAndTranslation(Launcher launcher) { float slightParallax = -launcher.getDeviceProfile().allAppsCellHeightPx * 0.3f; - return new float[] {0.9f, slightParallax}; + return new ScaleAndTranslation(0.9f, 0f, slightParallax); } @Override diff --git a/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java b/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java index 50e59af490..7b8699059e 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java +++ b/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java @@ -19,6 +19,7 @@ package com.android.launcher3.uioverrides; import static com.android.launcher3.LauncherAnimUtils.SCALE_PROPERTY; import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_OVERVIEW_FADE; import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_OVERVIEW_SCALE; +import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_OVERVIEW_TRANSLATE; import static com.android.launcher3.anim.AnimatorSetBuilder.FLAG_DONT_ANIMATE_OVERVIEW; import static com.android.launcher3.anim.Interpolators.AGGRESSIVE_EASE_IN_OUT; import static com.android.launcher3.anim.Interpolators.LINEAR; @@ -29,6 +30,7 @@ import android.view.animation.Interpolator; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherState; +import com.android.launcher3.LauncherState.ScaleAndTranslation; import com.android.launcher3.LauncherStateManager.AnimationConfig; import com.android.launcher3.LauncherStateManager.StateHandler; import com.android.launcher3.anim.AnimatorSetBuilder; @@ -54,9 +56,15 @@ public abstract class BaseRecentsViewStateController @Override public void setState(@NonNull LauncherState state) { - float[] scaleTranslationY = state.getOverviewScaleAndTranslationY(mLauncher); - SCALE_PROPERTY.set(mRecentsView, scaleTranslationY[0]); - mRecentsView.setTranslationY(scaleTranslationY[1]); + ScaleAndTranslation scaleAndTranslation = state + .getOverviewScaleAndTranslation(mLauncher); + SCALE_PROPERTY.set(mRecentsView, scaleAndTranslation.scale); + float translationX = scaleAndTranslation.translationX; + if (mRecentsView.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL) { + translationX = -translationX; + } + mRecentsView.setTranslationX(translationX); + mRecentsView.setTranslationY(scaleAndTranslation.translationY); getContentAlphaProperty().set(mRecentsView, state.overviewUi ? 1f : 0); } @@ -83,28 +91,22 @@ public abstract class BaseRecentsViewStateController void setStateWithAnimationInternal(@NonNull final LauncherState toState, @NonNull AnimatorSetBuilder builder, @NonNull AnimationConfig config) { PropertySetter setter = config.getPropertySetter(builder); - float[] scaleTranslationY = toState.getOverviewScaleAndTranslationY(mLauncher); - Interpolator scaleAndTransYInterpolator = getScaleAndTransYInterpolator(toState, builder); - setter.setFloat(mRecentsView, SCALE_PROPERTY, scaleTranslationY[0], - scaleAndTransYInterpolator); - setter.setFloat(mRecentsView, View.TRANSLATION_Y, scaleTranslationY[1], - scaleAndTransYInterpolator); + ScaleAndTranslation scaleAndTranslation = toState.getOverviewScaleAndTranslation(mLauncher); + Interpolator scaleInterpolator = builder.getInterpolator(ANIM_OVERVIEW_SCALE, LINEAR); + setter.setFloat(mRecentsView, SCALE_PROPERTY, scaleAndTranslation.scale, scaleInterpolator); + Interpolator translateInterpolator = builder.getInterpolator( + ANIM_OVERVIEW_TRANSLATE, LINEAR); + float translationX = scaleAndTranslation.translationX; + if (mRecentsView.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL) { + translationX = -translationX; + } + setter.setFloat(mRecentsView, View.TRANSLATION_X, translationX, translateInterpolator); + setter.setFloat(mRecentsView, View.TRANSLATION_Y, scaleAndTranslation.translationY, + translateInterpolator); setter.setFloat(mRecentsView, getContentAlphaProperty(), toState.overviewUi ? 1 : 0, builder.getInterpolator(ANIM_OVERVIEW_FADE, AGGRESSIVE_EASE_IN_OUT)); } - /** - * Get the interpolator to use for the scale and translation Y animation for the view. - * - * @param toState state to animate to - * @param builder animator set builder - * @return interpolator for scale and trans Y recents view animation - */ - Interpolator getScaleAndTransYInterpolator(@NonNull final LauncherState toState, - @NonNull AnimatorSetBuilder builder) { - return builder.getInterpolator(ANIM_OVERVIEW_SCALE, LINEAR); - } - /** * Get property for content alpha for the recents view. * diff --git a/src/com/android/launcher3/LauncherState.java b/src/com/android/launcher3/LauncherState.java index 875288a55c..b6e00cc8aa 100644 --- a/src/com/android/launcher3/LauncherState.java +++ b/src/com/android/launcher3/LauncherState.java @@ -183,17 +183,17 @@ public class LauncherState { return Arrays.copyOf(sAllStates, sAllStates.length); } - public float[] getWorkspaceScaleAndTranslation(Launcher launcher) { - return new float[] {1, 0, 0}; + public ScaleAndTranslation getWorkspaceScaleAndTranslation(Launcher launcher) { + return new ScaleAndTranslation(1, 0, 0); } - public float[] getHotseatScaleAndTranslation(Launcher launcher) { + public ScaleAndTranslation getHotseatScaleAndTranslation(Launcher launcher) { // For most states, treat the hotseat as if it were part of the workspace. return getWorkspaceScaleAndTranslation(launcher); } - public float[] getOverviewScaleAndTranslationY(Launcher launcher) { - return new float[] {1.1f, 0f}; + public ScaleAndTranslation getOverviewScaleAndTranslation(Launcher launcher) { + return new ScaleAndTranslation(1.1f, 0f, 0f); } public void onStateEnabled(Launcher launcher) { @@ -281,4 +281,16 @@ public class LauncherState { public abstract float getPageAlpha(int pageIndex); } + + public static class ScaleAndTranslation { + public float scale; + public float translationX; + public float translationY; + + public ScaleAndTranslation(float scale, float translationX, float translationY) { + this.scale = scale; + this.translationX = translationX; + this.translationY = translationY; + } + } } diff --git a/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java b/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java index 0507470e5e..d0f1920e73 100644 --- a/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java +++ b/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java @@ -31,6 +31,7 @@ import android.view.View; import android.view.animation.Interpolator; import com.android.launcher3.LauncherState.PageAlphaProvider; +import com.android.launcher3.LauncherState.ScaleAndTranslation; import com.android.launcher3.LauncherStateManager.AnimationConfig; import com.android.launcher3.anim.AnimatorSetBuilder; import com.android.launcher3.anim.PropertySetter; @@ -71,9 +72,10 @@ public class WorkspaceStateTransitionAnimation { */ private void setWorkspaceProperty(LauncherState state, PropertySetter propertySetter, AnimatorSetBuilder builder, AnimationConfig config) { - float[] scaleAndTranslation = state.getWorkspaceScaleAndTranslation(mLauncher); - float[] hotseatScaleAndTranslation = state.getHotseatScaleAndTranslation(mLauncher); - mNewScale = scaleAndTranslation[0]; + ScaleAndTranslation scaleAndTranslation = state.getWorkspaceScaleAndTranslation(mLauncher); + ScaleAndTranslation hotseatScaleAndTranslation = state.getHotseatScaleAndTranslation( + mLauncher); + mNewScale = scaleAndTranslation.scale; PageAlphaProvider pageAlphaProvider = state.getWorkspacePageAlphaProvider(mLauncher); final int childCount = mWorkspace.getChildCount(); for (int i = 0; i < childCount; i++) { @@ -98,7 +100,7 @@ public class WorkspaceStateTransitionAnimation { dragLayer.mapCoordInSelfToDescendant(hotseat, workspacePivot); hotseat.setPivotX(workspacePivot[0]); hotseat.setPivotY(workspacePivot[1]); - float hotseatScale = hotseatScaleAndTranslation[0]; + float hotseatScale = hotseatScaleAndTranslation.scale; propertySetter.setFloat(hotseat, SCALE_PROPERTY, hotseatScale, scaleInterpolator); float hotseatIconsAlpha = (elements & HOTSEAT_ICONS) != 0 ? 1 : 0; @@ -114,14 +116,14 @@ public class WorkspaceStateTransitionAnimation { Interpolator translationInterpolator = !playAtomicComponent ? LINEAR : ZOOM_OUT; propertySetter.setFloat(mWorkspace, View.TRANSLATION_X, - scaleAndTranslation[1], translationInterpolator); + scaleAndTranslation.translationX, translationInterpolator); propertySetter.setFloat(mWorkspace, View.TRANSLATION_Y, - scaleAndTranslation[2], translationInterpolator); + scaleAndTranslation.translationY, translationInterpolator); propertySetter.setFloat(hotseat, View.TRANSLATION_Y, - hotseatScaleAndTranslation[2], translationInterpolator); + hotseatScaleAndTranslation.translationX, translationInterpolator); propertySetter.setFloat(mWorkspace.getPageIndicator(), View.TRANSLATION_Y, - hotseatScaleAndTranslation[2], translationInterpolator); + hotseatScaleAndTranslation.translationY, translationInterpolator); // Set scrim WorkspaceAndHotseatScrim scrim = mLauncher.getDragLayer().getScrim(); diff --git a/src/com/android/launcher3/anim/AnimatorSetBuilder.java b/src/com/android/launcher3/anim/AnimatorSetBuilder.java index e135c0d7d8..3ac9d3c276 100644 --- a/src/com/android/launcher3/anim/AnimatorSetBuilder.java +++ b/src/com/android/launcher3/anim/AnimatorSetBuilder.java @@ -32,8 +32,9 @@ public class AnimatorSetBuilder { public static final int ANIM_WORKSPACE_SCALE = 1; public static final int ANIM_WORKSPACE_FADE = 2; public static final int ANIM_OVERVIEW_SCALE = 3; - public static final int ANIM_OVERVIEW_FADE = 4; - public static final int ANIM_ALL_APPS_FADE = 5; + public static final int ANIM_OVERVIEW_TRANSLATE = 4; + public static final int ANIM_OVERVIEW_FADE = 5; + public static final int ANIM_ALL_APPS_FADE = 6; public static final int FLAG_DONT_ANIMATE_OVERVIEW = 1 << 0; diff --git a/src/com/android/launcher3/states/SpringLoadedState.java b/src/com/android/launcher3/states/SpringLoadedState.java index fcace98c21..be3e6c9cbc 100644 --- a/src/com/android/launcher3/states/SpringLoadedState.java +++ b/src/com/android/launcher3/states/SpringLoadedState.java @@ -41,7 +41,7 @@ public class SpringLoadedState extends LauncherState { } @Override - public float[] getWorkspaceScaleAndTranslation(Launcher launcher) { + public ScaleAndTranslation getWorkspaceScaleAndTranslation(Launcher launcher) { DeviceProfile grid = launcher.getDeviceProfile(); Workspace ws = launcher.getWorkspace(); if (ws.getChildCount() == 0) { @@ -50,7 +50,7 @@ public class SpringLoadedState extends LauncherState { if (grid.isVerticalBarLayout()) { float scale = grid.workspaceSpringLoadShrinkFactor; - return new float[] {scale, 0, 0}; + return new ScaleAndTranslation(scale, 0, 0); } float scale = grid.workspaceSpringLoadShrinkFactor; @@ -69,12 +69,12 @@ public class SpringLoadedState extends LauncherState { float myCenter = ws.getTop() + halfHeight; float cellTopFromCenter = halfHeight - ws.getChildAt(0).getTop(); float actualCellTop = myCenter - cellTopFromCenter * scale; - return new float[] { scale, 0, (desiredCellTop - actualCellTop) / scale}; + return new ScaleAndTranslation(scale, 0, (desiredCellTop - actualCellTop) / scale); } @Override - public float[] getHotseatScaleAndTranslation(Launcher launcher) { - return new float[] {1, 0, 0}; + public ScaleAndTranslation getHotseatScaleAndTranslation(Launcher launcher) { + return new ScaleAndTranslation(1, 0, 0); } @Override diff --git a/src_ui_overrides/com/android/launcher3/uioverrides/AllAppsState.java b/src_ui_overrides/com/android/launcher3/uioverrides/AllAppsState.java index f7bb254565..bca335d873 100644 --- a/src_ui_overrides/com/android/launcher3/uioverrides/AllAppsState.java +++ b/src_ui_overrides/com/android/launcher3/uioverrides/AllAppsState.java @@ -66,9 +66,9 @@ public class AllAppsState extends LauncherState { } @Override - public float[] getWorkspaceScaleAndTranslation(Launcher launcher) { - return new float[] { 1f, 0, - -launcher.getAllAppsController().getShiftRange() * PARALLAX_COEFFICIENT}; + public ScaleAndTranslation getWorkspaceScaleAndTranslation(Launcher launcher) { + return new ScaleAndTranslation(1f, 0, + -launcher.getAllAppsController().getShiftRange() * PARALLAX_COEFFICIENT); } @Override