Loading quickstep/src/com/android/launcher3/uioverrides/RecentsViewStateController.java +10 −2 Original line number Diff line number Diff line Loading @@ -42,6 +42,8 @@ import com.android.launcher3.anim.PropertySetter; import com.android.launcher3.states.StateAnimationConfig; import com.android.launcher3.touch.PagedOrientationHandler; import com.android.launcher3.util.MultiValueAlpha; import com.android.quickstep.util.AnimUtils; import com.android.quickstep.util.SplitAnimationTimings; import com.android.quickstep.views.ClearAllButton; import com.android.quickstep.views.LauncherRecentsView; import com.android.quickstep.views.RecentsView; Loading Loading @@ -123,12 +125,18 @@ public final class RecentsViewStateController extends TASK_PRIMARY_SPLIT_TRANSLATION, TASK_SECONDARY_SPLIT_TRANSLATION, mLauncher.getDeviceProfile()); SplitAnimationTimings timings = AnimUtils.getDeviceOverviewToSplitTimings(mLauncher.getDeviceProfile().isTablet); mRecentsView.createSplitSelectInitAnimation(builder, toState.getTransitionDuration(mLauncher, true /* isToState */)); // Add properties to shift remaining taskViews to get out of placeholder view builder.setFloat(mRecentsView, taskViewsFloat.first, toState.getSplitSelectTranslation(mLauncher), LINEAR); builder.setFloat(mRecentsView, taskViewsFloat.second, 0, LINEAR); toState.getSplitSelectTranslation(mLauncher), timings.getGridSlidePrimaryInterpolator()); builder.setFloat(mRecentsView, taskViewsFloat.second, 0, timings.getGridSlideSecondaryInterpolator()); if (!animate) { AnimatorSet as = builder.buildAnim(); Loading quickstep/src/com/android/launcher3/uioverrides/states/QuickstepAtomicAnimationFactory.java +5 −2 Original line number Diff line number Diff line Loading @@ -191,12 +191,15 @@ public class QuickstepAtomicAnimationFactory extends } else if (fromState == NORMAL && toState == ALL_APPS) { AllAppsSwipeController.applyNormalToAllAppsAnimConfig(mActivity, config); } else if (fromState == OVERVIEW && toState == OVERVIEW_SPLIT_SELECT) { SplitAnimationTimings timings = SplitAnimationTimings.OVERVIEW_TO_SPLIT; SplitAnimationTimings timings = mActivity.getDeviceProfile().isTablet ? SplitAnimationTimings.TABLET_OVERVIEW_TO_SPLIT : SplitAnimationTimings.PHONE_OVERVIEW_TO_SPLIT; config.setInterpolator(ANIM_OVERVIEW_ACTIONS_FADE, clampToProgress(LINEAR, timings.getActionsFadeStartOffset(), timings.getActionsFadeEndOffset())); } else if (fromState == NORMAL && toState == OVERVIEW_SPLIT_SELECT) { SplitAnimationTimings timings = SplitAnimationTimings.NORMAL_TO_SPLIT; // Splitting from Home is currently only available on tablets SplitAnimationTimings timings = SplitAnimationTimings.TABLET_HOME_TO_SPLIT; config.setInterpolator(ANIM_SCRIM_FADE, clampToProgress(LINEAR, timings.getScrimFadeInStartOffset(), timings.getScrimFadeInEndOffset())); Loading quickstep/src/com/android/launcher3/uioverrides/states/SplitScreenSelectState.java +8 −3 Original line number Diff line number Diff line Loading @@ -44,8 +44,13 @@ public class SplitScreenSelectState extends OverviewState { @Override public int getTransitionDuration(Context context, boolean isToState) { return isToState ? SplitAnimationTimings.ENTER_DURATION : SplitAnimationTimings.ABORT_DURATION; boolean isTablet = ((Launcher) context).getDeviceProfile().isTablet; if (isToState && isTablet) { return SplitAnimationTimings.TABLET_ENTER_DURATION; } else if (isToState && !isTablet) { return SplitAnimationTimings.PHONE_ENTER_DURATION; } else { return SplitAnimationTimings.ABORT_DURATION; } } } quickstep/src/com/android/quickstep/util/AnimUtils.java 0 → 100644 +42 −0 Original line number Diff line number Diff line /* * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.quickstep.util; /** * Utility class containing methods to help manage animations, interpolators, and timings. */ public class AnimUtils { /** * Fetches device-specific timings for the Overview > Split animation * (splitscreen initiated from Overview). */ public static SplitAnimationTimings getDeviceOverviewToSplitTimings(boolean isTablet) { return isTablet ? SplitAnimationTimings.TABLET_OVERVIEW_TO_SPLIT : SplitAnimationTimings.PHONE_OVERVIEW_TO_SPLIT; } /** * Fetches device-specific timings for the Split > Confirm animation * (splitscreen confirmed by selecting a second app). */ public static SplitAnimationTimings getDeviceSplitToConfirmTimings(boolean isTablet) { return isTablet ? SplitAnimationTimings.TABLET_SPLIT_TO_CONFIRM : SplitAnimationTimings.PHONE_SPLIT_TO_CONFIRM; } } quickstep/src/com/android/quickstep/util/OverviewToSplitTimings.java +22 −19 Original line number Diff line number Diff line Loading @@ -16,27 +16,28 @@ package com.android.quickstep.util; import static com.android.launcher3.anim.Interpolators.DEACCEL_2; import android.view.animation.Interpolator; /** * Timings for the Overview > OverviewSplitSelect animation. */ public class OverviewToSplitTimings implements SplitAnimationTimings { public int getPlaceholderFadeInStart() { return 0; } public int getPlaceholderFadeInEnd() { return 133; } public int getPlaceholderIconFadeInStart() { return 167; } public int getPlaceholderIconFadeInEnd() { return 250; } public int getStagedRectSlideStart() { return 0; } public int getStagedRectSlideEnd() { return 417; } public int getGridSlideStart() { return 67; } public int getGridSlideStagger() { return 16; } public int getGridSlideDuration() { return 500; } public int getActionsFadeStart() { return 0; } public int getActionsFadeEnd() { return 83; } abstract class OverviewToSplitTimings implements SplitAnimationTimings { // Overwritten by device-specific timings abstract public int getPlaceholderFadeInStart(); abstract public int getPlaceholderFadeInEnd(); abstract public int getPlaceholderIconFadeInStart(); abstract public int getPlaceholderIconFadeInEnd(); abstract public int getStagedRectSlideStart(); abstract public int getStagedRectSlideEnd(); abstract public int getGridSlideStart(); abstract public int getGridSlideStagger(); abstract public int getGridSlideDuration(); // Common timings public int getIconFadeStart() { return 0; } public int getIconFadeEnd() { return 83; } public int getActionsFadeStart() { return 0; } public int getActionsFadeEnd() { return 83; } public int getInstructionsContainerFadeInStart() { return 167; } public int getInstructionsContainerFadeInEnd() { return 250; } public int getInstructionsTextFadeInStart() { return 217; } Loading @@ -44,11 +45,13 @@ public class OverviewToSplitTimings implements SplitAnimationTimings { public int getInstructionsUnfoldStart() { return 167; } public int getInstructionsUnfoldEnd() { return 500; } public int getDuration() { return ENTER_DURATION; } public Interpolator getStagedRectXInterpolator() { return DEACCEL_2; } public Interpolator getStagedRectYInterpolator() { return DEACCEL_2; } public Interpolator getStagedRectScaleXInterpolator() { return DEACCEL_2; } public Interpolator getStagedRectScaleYInterpolator() { return DEACCEL_2; } 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(); Loading Loading
quickstep/src/com/android/launcher3/uioverrides/RecentsViewStateController.java +10 −2 Original line number Diff line number Diff line Loading @@ -42,6 +42,8 @@ import com.android.launcher3.anim.PropertySetter; import com.android.launcher3.states.StateAnimationConfig; import com.android.launcher3.touch.PagedOrientationHandler; import com.android.launcher3.util.MultiValueAlpha; import com.android.quickstep.util.AnimUtils; import com.android.quickstep.util.SplitAnimationTimings; import com.android.quickstep.views.ClearAllButton; import com.android.quickstep.views.LauncherRecentsView; import com.android.quickstep.views.RecentsView; Loading Loading @@ -123,12 +125,18 @@ public final class RecentsViewStateController extends TASK_PRIMARY_SPLIT_TRANSLATION, TASK_SECONDARY_SPLIT_TRANSLATION, mLauncher.getDeviceProfile()); SplitAnimationTimings timings = AnimUtils.getDeviceOverviewToSplitTimings(mLauncher.getDeviceProfile().isTablet); mRecentsView.createSplitSelectInitAnimation(builder, toState.getTransitionDuration(mLauncher, true /* isToState */)); // Add properties to shift remaining taskViews to get out of placeholder view builder.setFloat(mRecentsView, taskViewsFloat.first, toState.getSplitSelectTranslation(mLauncher), LINEAR); builder.setFloat(mRecentsView, taskViewsFloat.second, 0, LINEAR); toState.getSplitSelectTranslation(mLauncher), timings.getGridSlidePrimaryInterpolator()); builder.setFloat(mRecentsView, taskViewsFloat.second, 0, timings.getGridSlideSecondaryInterpolator()); if (!animate) { AnimatorSet as = builder.buildAnim(); Loading
quickstep/src/com/android/launcher3/uioverrides/states/QuickstepAtomicAnimationFactory.java +5 −2 Original line number Diff line number Diff line Loading @@ -191,12 +191,15 @@ public class QuickstepAtomicAnimationFactory extends } else if (fromState == NORMAL && toState == ALL_APPS) { AllAppsSwipeController.applyNormalToAllAppsAnimConfig(mActivity, config); } else if (fromState == OVERVIEW && toState == OVERVIEW_SPLIT_SELECT) { SplitAnimationTimings timings = SplitAnimationTimings.OVERVIEW_TO_SPLIT; SplitAnimationTimings timings = mActivity.getDeviceProfile().isTablet ? SplitAnimationTimings.TABLET_OVERVIEW_TO_SPLIT : SplitAnimationTimings.PHONE_OVERVIEW_TO_SPLIT; config.setInterpolator(ANIM_OVERVIEW_ACTIONS_FADE, clampToProgress(LINEAR, timings.getActionsFadeStartOffset(), timings.getActionsFadeEndOffset())); } else if (fromState == NORMAL && toState == OVERVIEW_SPLIT_SELECT) { SplitAnimationTimings timings = SplitAnimationTimings.NORMAL_TO_SPLIT; // Splitting from Home is currently only available on tablets SplitAnimationTimings timings = SplitAnimationTimings.TABLET_HOME_TO_SPLIT; config.setInterpolator(ANIM_SCRIM_FADE, clampToProgress(LINEAR, timings.getScrimFadeInStartOffset(), timings.getScrimFadeInEndOffset())); Loading
quickstep/src/com/android/launcher3/uioverrides/states/SplitScreenSelectState.java +8 −3 Original line number Diff line number Diff line Loading @@ -44,8 +44,13 @@ public class SplitScreenSelectState extends OverviewState { @Override public int getTransitionDuration(Context context, boolean isToState) { return isToState ? SplitAnimationTimings.ENTER_DURATION : SplitAnimationTimings.ABORT_DURATION; boolean isTablet = ((Launcher) context).getDeviceProfile().isTablet; if (isToState && isTablet) { return SplitAnimationTimings.TABLET_ENTER_DURATION; } else if (isToState && !isTablet) { return SplitAnimationTimings.PHONE_ENTER_DURATION; } else { return SplitAnimationTimings.ABORT_DURATION; } } }
quickstep/src/com/android/quickstep/util/AnimUtils.java 0 → 100644 +42 −0 Original line number Diff line number Diff line /* * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.quickstep.util; /** * Utility class containing methods to help manage animations, interpolators, and timings. */ public class AnimUtils { /** * Fetches device-specific timings for the Overview > Split animation * (splitscreen initiated from Overview). */ public static SplitAnimationTimings getDeviceOverviewToSplitTimings(boolean isTablet) { return isTablet ? SplitAnimationTimings.TABLET_OVERVIEW_TO_SPLIT : SplitAnimationTimings.PHONE_OVERVIEW_TO_SPLIT; } /** * Fetches device-specific timings for the Split > Confirm animation * (splitscreen confirmed by selecting a second app). */ public static SplitAnimationTimings getDeviceSplitToConfirmTimings(boolean isTablet) { return isTablet ? SplitAnimationTimings.TABLET_SPLIT_TO_CONFIRM : SplitAnimationTimings.PHONE_SPLIT_TO_CONFIRM; } }
quickstep/src/com/android/quickstep/util/OverviewToSplitTimings.java +22 −19 Original line number Diff line number Diff line Loading @@ -16,27 +16,28 @@ package com.android.quickstep.util; import static com.android.launcher3.anim.Interpolators.DEACCEL_2; import android.view.animation.Interpolator; /** * Timings for the Overview > OverviewSplitSelect animation. */ public class OverviewToSplitTimings implements SplitAnimationTimings { public int getPlaceholderFadeInStart() { return 0; } public int getPlaceholderFadeInEnd() { return 133; } public int getPlaceholderIconFadeInStart() { return 167; } public int getPlaceholderIconFadeInEnd() { return 250; } public int getStagedRectSlideStart() { return 0; } public int getStagedRectSlideEnd() { return 417; } public int getGridSlideStart() { return 67; } public int getGridSlideStagger() { return 16; } public int getGridSlideDuration() { return 500; } public int getActionsFadeStart() { return 0; } public int getActionsFadeEnd() { return 83; } abstract class OverviewToSplitTimings implements SplitAnimationTimings { // Overwritten by device-specific timings abstract public int getPlaceholderFadeInStart(); abstract public int getPlaceholderFadeInEnd(); abstract public int getPlaceholderIconFadeInStart(); abstract public int getPlaceholderIconFadeInEnd(); abstract public int getStagedRectSlideStart(); abstract public int getStagedRectSlideEnd(); abstract public int getGridSlideStart(); abstract public int getGridSlideStagger(); abstract public int getGridSlideDuration(); // Common timings public int getIconFadeStart() { return 0; } public int getIconFadeEnd() { return 83; } public int getActionsFadeStart() { return 0; } public int getActionsFadeEnd() { return 83; } public int getInstructionsContainerFadeInStart() { return 167; } public int getInstructionsContainerFadeInEnd() { return 250; } public int getInstructionsTextFadeInStart() { return 217; } Loading @@ -44,11 +45,13 @@ public class OverviewToSplitTimings implements SplitAnimationTimings { public int getInstructionsUnfoldStart() { return 167; } public int getInstructionsUnfoldEnd() { return 500; } public int getDuration() { return ENTER_DURATION; } public Interpolator getStagedRectXInterpolator() { return DEACCEL_2; } public Interpolator getStagedRectYInterpolator() { return DEACCEL_2; } public Interpolator getStagedRectScaleXInterpolator() { return DEACCEL_2; } public Interpolator getStagedRectScaleYInterpolator() { return DEACCEL_2; } 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(); Loading