Loading quickstep/recents_ui_overrides/src/com/android/quickstep/AppToOverviewAnimationProvider.java +3 −8 Original line number Diff line number Diff line Loading @@ -17,7 +17,6 @@ package com.android.quickstep; import static com.android.launcher3.LauncherState.BACKGROUND_APP; import static com.android.launcher3.LauncherState.OVERVIEW; import static com.android.launcher3.anim.Interpolators.FAST_OUT_SLOW_IN; import static com.android.launcher3.anim.Interpolators.TOUCH_RESPONSE_INTERPOLATOR; import static com.android.launcher3.statehandlers.DepthController.DEPTH; import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.MODE_CLOSING; Loading Loading @@ -75,14 +74,10 @@ final class AppToOverviewAnimationProvider<T extends BaseDraggingActivity> exten boolean onActivityReady(T activity, Boolean wasVisible) { activity.<RecentsView>getOverviewPanel().showCurrentTask(mTargetTaskId); AbstractFloatingView.closeAllOpenViews(activity, wasVisible); BaseActivityInterface.AnimationFactory factory = mActivityInterface.prepareRecentsUI(wasVisible, false /* animate activity */, (controller) -> { BaseActivityInterface.AnimationFactory factory = mActivityInterface.prepareRecentsUI( wasVisible, (controller) -> { controller.dispatchOnStart(); ValueAnimator anim = controller.getAnimationPlayer() .setDuration(RECENTS_LAUNCH_DURATION); anim.setInterpolator(FAST_OUT_SLOW_IN); anim.start(); controller.getAnimationPlayer().end(); }); factory.onRemoteAnimationReceived(null); factory.createActivityInterface(RECENTS_LAUNCH_DURATION); Loading quickstep/recents_ui_overrides/src/com/android/quickstep/FallbackActivityInterface.java +5 −11 Original line number Diff line number Diff line Loading @@ -86,8 +86,8 @@ public final class FallbackActivityInterface implements } @Override public AnimationFactory prepareRecentsUI(boolean activityVisible, boolean animateActivity, Consumer<AnimatorPlaybackController> callback) { public AnimationFactory prepareRecentsUI( boolean activityVisible, Consumer<AnimatorPlaybackController> callback) { RecentsActivity activity = getCreatedActivity(); if (activityVisible) { return (transitionLength) -> { }; Loading @@ -97,9 +97,7 @@ public final class FallbackActivityInterface implements rv.setContentAlpha(0); rv.getClearAllButton().setVisibilityAlpha(0); rv.setDisallowScrollToClearAll(true); boolean fromState = !animateActivity; rv.setInOverviewState(fromState); rv.setInOverviewState(false); return new AnimationFactory() { Loading Loading @@ -132,12 +130,8 @@ public final class FallbackActivityInterface implements AnimatorPlaybackController.wrap(animatorSet, transitionLength); // Since we are changing the start position of the UI, reapply the state, at the end controller.setEndAction(() -> { boolean endState = true; rv.setInOverviewState(controller.getInterpolatedProgress() > 0.5 ? endState : fromState); }); controller.setEndAction(() -> rv.setInOverviewState(controller.getInterpolatedProgress() > 0.5)); callback.accept(controller); } }; Loading quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherActivityInterface.java +34 −58 Original line number Diff line number Diff line Loading @@ -27,10 +27,9 @@ import static com.android.launcher3.uioverrides.states.QuickstepAtomicAnimationF import static com.android.quickstep.LauncherSwipeHandler.RECENTS_ATTACH_DURATION; import static com.android.quickstep.util.WindowSizeStrategy.LAUNCHER_ACTIVITY_SIZE_STRATEGY; import static com.android.quickstep.views.RecentsView.ADJACENT_PAGE_OFFSET; import static com.android.quickstep.views.RecentsView.FULLSCREEN_PROGRESS; import android.animation.Animator; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.content.Context; import android.graphics.Rect; import android.util.Log; Loading @@ -47,6 +46,7 @@ import com.android.launcher3.LauncherInitListener; import com.android.launcher3.LauncherState; import com.android.launcher3.allapps.DiscoveryBounce; import com.android.launcher3.anim.AnimatorPlaybackController; import com.android.launcher3.anim.PendingAnimation; import com.android.launcher3.appprediction.PredictionUiStateManager; import com.android.launcher3.statehandlers.DepthController; import com.android.launcher3.statehandlers.DepthController.ClampedDepthProperty; Loading Loading @@ -134,8 +134,8 @@ public final class LauncherActivityInterface implements BaseActivityInterface<La } @Override public AnimationFactory prepareRecentsUI(boolean activityVisible, boolean animateActivity, Consumer<AnimatorPlaybackController> callback) { public AnimationFactory prepareRecentsUI( boolean activityVisible, Consumer<AnimatorPlaybackController> callback) { BaseQuickstepLauncher launcher = getCreatedActivity(); final LauncherState startState = launcher.getStateManager().getState(); Loading @@ -145,8 +145,7 @@ public final class LauncherActivityInterface implements BaseActivityInterface<La } launcher.getStateManager().setRestState(resetState); final LauncherState fromState = animateActivity ? BACKGROUND_APP : OVERVIEW; launcher.getStateManager().goToState(fromState, false); launcher.getStateManager().goToState(BACKGROUND_APP, false); // Since all apps is not visible, we can safely reset the scroll position. // This ensures then the next swipe up to all-apps starts from scroll 0. launcher.getAppsView().reset(false /* animate */); Loading @@ -157,7 +156,7 @@ public final class LauncherActivityInterface implements BaseActivityInterface<La @Override public void createActivityInterface(long transitionLength) { createActivityInterfaceInternal(launcher, fromState, transitionLength, callback); callback.accept(createBackgroundToOverviewAnim(launcher, transitionLength)); // Creating the activity controller animation sometimes reapplies the launcher state // (because we set the animation as the current state animation), so we reapply the // attached state here as well to ensure recents is shown/hidden appropriately. Loading Loading @@ -211,68 +210,45 @@ public final class LauncherActivityInterface implements BaseActivityInterface<La }; } private void createActivityInterfaceInternal(Launcher activity, LauncherState fromState, long transitionLength, Consumer<AnimatorPlaybackController> callback) { LauncherState endState = OVERVIEW; if (fromState == endState) { return; } private AnimatorPlaybackController createBackgroundToOverviewAnim( Launcher activity, long transitionLength) { PendingAnimation pa = new PendingAnimation(transitionLength * 2); AnimatorSet anim = new AnimatorSet(); if (!activity.getDeviceProfile().isVerticalBarLayout() && SysUINavigationMode.getMode(activity) != Mode.NO_BUTTON) { // Don't animate the shelf when the mode is NO_BUTTON, because we update it atomically. anim.play(activity.getStateManager().createStateElementAnimation( pa.add(activity.getStateManager().createStateElementAnimation( INDEX_SHELF_ANIM, fromState.getVerticalProgress(activity), endState.getVerticalProgress(activity))); BACKGROUND_APP.getVerticalProgress(activity), OVERVIEW.getVerticalProgress(activity))); } // Animate the blur and wallpaper zoom DepthController depthController = getDepthController(); float fromDepthRatio = fromState.getDepth(activity); float toDepthRatio = endState.getDepth(activity); Animator depthAnimator = ObjectAnimator.ofFloat(depthController, new ClampedDepthProperty(fromDepthRatio, toDepthRatio), fromDepthRatio, toDepthRatio); anim.play(depthAnimator); playScaleDownAnim(anim, activity, fromState, endState); anim.setDuration(transitionLength * 2); anim.setInterpolator(LINEAR); AnimatorPlaybackController controller = AnimatorPlaybackController.wrap(anim, transitionLength * 2); float fromDepthRatio = BACKGROUND_APP.getDepth(activity); float toDepthRatio = OVERVIEW.getDepth(activity); pa.addFloat(getDepthController(), new ClampedDepthProperty(fromDepthRatio, toDepthRatio), fromDepthRatio, toDepthRatio, LINEAR); // Scale down recents from being full screen to being in overview. RecentsView recentsView = activity.getOverviewPanel(); pa.addFloat(recentsView, SCALE_PROPERTY, BACKGROUND_APP.getOverviewScaleAndOffset(activity)[0], OVERVIEW.getOverviewScaleAndOffset(activity)[0], LINEAR); pa.addFloat(recentsView, FULLSCREEN_PROGRESS, BACKGROUND_APP.getOverviewFullscreenProgress(), OVERVIEW.getOverviewFullscreenProgress(), LINEAR); AnimatorPlaybackController controller = pa.createPlaybackController(); activity.getStateManager().setCurrentUserControlledAnimation(controller); // Since we are changing the start position of the UI, reapply the state, at the end controller.setEndAction(() -> { activity.getStateManager().goToState( controller.getInterpolatedProgress() > 0.5 ? endState : fromState, false); }); callback.accept(controller); } /** * Scale down recents from the center task being full screen to being in overview. */ private void playScaleDownAnim(AnimatorSet anim, Launcher launcher, LauncherState fromState, LauncherState endState) { RecentsView recentsView = launcher.getOverviewPanel(); if (recentsView.getCurrentPageTaskView() == null) { return; } float fromFullscreenProgress = fromState.getOverviewFullscreenProgress(); float endFullscreenProgress = endState.getOverviewFullscreenProgress(); float fromScale = fromState.getOverviewScaleAndOffset(launcher)[0]; float endScale = endState.getOverviewScaleAndOffset(launcher)[0]; Animator scale = ObjectAnimator.ofFloat(recentsView, SCALE_PROPERTY, fromScale, endScale); Animator applyFullscreenProgress = ObjectAnimator.ofFloat(recentsView, RecentsView.FULLSCREEN_PROGRESS, fromFullscreenProgress, endFullscreenProgress); anim.playTogether(scale, applyFullscreenProgress); controller.setEndAction(() -> activity.getStateManager().goToState( controller.getInterpolatedProgress() > 0.5 ? OVERVIEW : BACKGROUND_APP, false)); return controller; } @Override Loading quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherSwipeHandler.java +1 −2 Original line number Diff line number Diff line Loading @@ -335,8 +335,7 @@ public class LauncherSwipeHandler extends BaseSwipeUpHandler<Launcher, RecentsVi if (mGestureState.getEndTarget() != HOME) { Runnable initAnimFactory = () -> { mAnimationFactory = mActivityInterface.prepareRecentsUI( mWasLauncherAlreadyVisible, true, this::onAnimatorPlaybackControllerCreated); mWasLauncherAlreadyVisible, this::onAnimatorPlaybackControllerCreated); maybeUpdateRecentsAttachedState(false /* animate */); }; if (mWasLauncherAlreadyVisible) { Loading quickstep/src/com/android/quickstep/BaseActivityInterface.java +2 −2 Original line number Diff line number Diff line Loading @@ -53,8 +53,8 @@ public interface BaseActivityInterface<T extends BaseDraggingActivity> { default void onSwipeUpToHomeComplete() { } void onAssistantVisibilityChanged(float visibility); AnimationFactory prepareRecentsUI(boolean activityVisible, boolean animateActivity, Consumer<AnimatorPlaybackController> callback); AnimationFactory prepareRecentsUI( boolean activityVisible, Consumer<AnimatorPlaybackController> callback); ActivityInitListener createActivityInitListener(Predicate<Boolean> onInitListener); Loading Loading
quickstep/recents_ui_overrides/src/com/android/quickstep/AppToOverviewAnimationProvider.java +3 −8 Original line number Diff line number Diff line Loading @@ -17,7 +17,6 @@ package com.android.quickstep; import static com.android.launcher3.LauncherState.BACKGROUND_APP; import static com.android.launcher3.LauncherState.OVERVIEW; import static com.android.launcher3.anim.Interpolators.FAST_OUT_SLOW_IN; import static com.android.launcher3.anim.Interpolators.TOUCH_RESPONSE_INTERPOLATOR; import static com.android.launcher3.statehandlers.DepthController.DEPTH; import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.MODE_CLOSING; Loading Loading @@ -75,14 +74,10 @@ final class AppToOverviewAnimationProvider<T extends BaseDraggingActivity> exten boolean onActivityReady(T activity, Boolean wasVisible) { activity.<RecentsView>getOverviewPanel().showCurrentTask(mTargetTaskId); AbstractFloatingView.closeAllOpenViews(activity, wasVisible); BaseActivityInterface.AnimationFactory factory = mActivityInterface.prepareRecentsUI(wasVisible, false /* animate activity */, (controller) -> { BaseActivityInterface.AnimationFactory factory = mActivityInterface.prepareRecentsUI( wasVisible, (controller) -> { controller.dispatchOnStart(); ValueAnimator anim = controller.getAnimationPlayer() .setDuration(RECENTS_LAUNCH_DURATION); anim.setInterpolator(FAST_OUT_SLOW_IN); anim.start(); controller.getAnimationPlayer().end(); }); factory.onRemoteAnimationReceived(null); factory.createActivityInterface(RECENTS_LAUNCH_DURATION); Loading
quickstep/recents_ui_overrides/src/com/android/quickstep/FallbackActivityInterface.java +5 −11 Original line number Diff line number Diff line Loading @@ -86,8 +86,8 @@ public final class FallbackActivityInterface implements } @Override public AnimationFactory prepareRecentsUI(boolean activityVisible, boolean animateActivity, Consumer<AnimatorPlaybackController> callback) { public AnimationFactory prepareRecentsUI( boolean activityVisible, Consumer<AnimatorPlaybackController> callback) { RecentsActivity activity = getCreatedActivity(); if (activityVisible) { return (transitionLength) -> { }; Loading @@ -97,9 +97,7 @@ public final class FallbackActivityInterface implements rv.setContentAlpha(0); rv.getClearAllButton().setVisibilityAlpha(0); rv.setDisallowScrollToClearAll(true); boolean fromState = !animateActivity; rv.setInOverviewState(fromState); rv.setInOverviewState(false); return new AnimationFactory() { Loading Loading @@ -132,12 +130,8 @@ public final class FallbackActivityInterface implements AnimatorPlaybackController.wrap(animatorSet, transitionLength); // Since we are changing the start position of the UI, reapply the state, at the end controller.setEndAction(() -> { boolean endState = true; rv.setInOverviewState(controller.getInterpolatedProgress() > 0.5 ? endState : fromState); }); controller.setEndAction(() -> rv.setInOverviewState(controller.getInterpolatedProgress() > 0.5)); callback.accept(controller); } }; Loading
quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherActivityInterface.java +34 −58 Original line number Diff line number Diff line Loading @@ -27,10 +27,9 @@ import static com.android.launcher3.uioverrides.states.QuickstepAtomicAnimationF import static com.android.quickstep.LauncherSwipeHandler.RECENTS_ATTACH_DURATION; import static com.android.quickstep.util.WindowSizeStrategy.LAUNCHER_ACTIVITY_SIZE_STRATEGY; import static com.android.quickstep.views.RecentsView.ADJACENT_PAGE_OFFSET; import static com.android.quickstep.views.RecentsView.FULLSCREEN_PROGRESS; import android.animation.Animator; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.content.Context; import android.graphics.Rect; import android.util.Log; Loading @@ -47,6 +46,7 @@ import com.android.launcher3.LauncherInitListener; import com.android.launcher3.LauncherState; import com.android.launcher3.allapps.DiscoveryBounce; import com.android.launcher3.anim.AnimatorPlaybackController; import com.android.launcher3.anim.PendingAnimation; import com.android.launcher3.appprediction.PredictionUiStateManager; import com.android.launcher3.statehandlers.DepthController; import com.android.launcher3.statehandlers.DepthController.ClampedDepthProperty; Loading Loading @@ -134,8 +134,8 @@ public final class LauncherActivityInterface implements BaseActivityInterface<La } @Override public AnimationFactory prepareRecentsUI(boolean activityVisible, boolean animateActivity, Consumer<AnimatorPlaybackController> callback) { public AnimationFactory prepareRecentsUI( boolean activityVisible, Consumer<AnimatorPlaybackController> callback) { BaseQuickstepLauncher launcher = getCreatedActivity(); final LauncherState startState = launcher.getStateManager().getState(); Loading @@ -145,8 +145,7 @@ public final class LauncherActivityInterface implements BaseActivityInterface<La } launcher.getStateManager().setRestState(resetState); final LauncherState fromState = animateActivity ? BACKGROUND_APP : OVERVIEW; launcher.getStateManager().goToState(fromState, false); launcher.getStateManager().goToState(BACKGROUND_APP, false); // Since all apps is not visible, we can safely reset the scroll position. // This ensures then the next swipe up to all-apps starts from scroll 0. launcher.getAppsView().reset(false /* animate */); Loading @@ -157,7 +156,7 @@ public final class LauncherActivityInterface implements BaseActivityInterface<La @Override public void createActivityInterface(long transitionLength) { createActivityInterfaceInternal(launcher, fromState, transitionLength, callback); callback.accept(createBackgroundToOverviewAnim(launcher, transitionLength)); // Creating the activity controller animation sometimes reapplies the launcher state // (because we set the animation as the current state animation), so we reapply the // attached state here as well to ensure recents is shown/hidden appropriately. Loading Loading @@ -211,68 +210,45 @@ public final class LauncherActivityInterface implements BaseActivityInterface<La }; } private void createActivityInterfaceInternal(Launcher activity, LauncherState fromState, long transitionLength, Consumer<AnimatorPlaybackController> callback) { LauncherState endState = OVERVIEW; if (fromState == endState) { return; } private AnimatorPlaybackController createBackgroundToOverviewAnim( Launcher activity, long transitionLength) { PendingAnimation pa = new PendingAnimation(transitionLength * 2); AnimatorSet anim = new AnimatorSet(); if (!activity.getDeviceProfile().isVerticalBarLayout() && SysUINavigationMode.getMode(activity) != Mode.NO_BUTTON) { // Don't animate the shelf when the mode is NO_BUTTON, because we update it atomically. anim.play(activity.getStateManager().createStateElementAnimation( pa.add(activity.getStateManager().createStateElementAnimation( INDEX_SHELF_ANIM, fromState.getVerticalProgress(activity), endState.getVerticalProgress(activity))); BACKGROUND_APP.getVerticalProgress(activity), OVERVIEW.getVerticalProgress(activity))); } // Animate the blur and wallpaper zoom DepthController depthController = getDepthController(); float fromDepthRatio = fromState.getDepth(activity); float toDepthRatio = endState.getDepth(activity); Animator depthAnimator = ObjectAnimator.ofFloat(depthController, new ClampedDepthProperty(fromDepthRatio, toDepthRatio), fromDepthRatio, toDepthRatio); anim.play(depthAnimator); playScaleDownAnim(anim, activity, fromState, endState); anim.setDuration(transitionLength * 2); anim.setInterpolator(LINEAR); AnimatorPlaybackController controller = AnimatorPlaybackController.wrap(anim, transitionLength * 2); float fromDepthRatio = BACKGROUND_APP.getDepth(activity); float toDepthRatio = OVERVIEW.getDepth(activity); pa.addFloat(getDepthController(), new ClampedDepthProperty(fromDepthRatio, toDepthRatio), fromDepthRatio, toDepthRatio, LINEAR); // Scale down recents from being full screen to being in overview. RecentsView recentsView = activity.getOverviewPanel(); pa.addFloat(recentsView, SCALE_PROPERTY, BACKGROUND_APP.getOverviewScaleAndOffset(activity)[0], OVERVIEW.getOverviewScaleAndOffset(activity)[0], LINEAR); pa.addFloat(recentsView, FULLSCREEN_PROGRESS, BACKGROUND_APP.getOverviewFullscreenProgress(), OVERVIEW.getOverviewFullscreenProgress(), LINEAR); AnimatorPlaybackController controller = pa.createPlaybackController(); activity.getStateManager().setCurrentUserControlledAnimation(controller); // Since we are changing the start position of the UI, reapply the state, at the end controller.setEndAction(() -> { activity.getStateManager().goToState( controller.getInterpolatedProgress() > 0.5 ? endState : fromState, false); }); callback.accept(controller); } /** * Scale down recents from the center task being full screen to being in overview. */ private void playScaleDownAnim(AnimatorSet anim, Launcher launcher, LauncherState fromState, LauncherState endState) { RecentsView recentsView = launcher.getOverviewPanel(); if (recentsView.getCurrentPageTaskView() == null) { return; } float fromFullscreenProgress = fromState.getOverviewFullscreenProgress(); float endFullscreenProgress = endState.getOverviewFullscreenProgress(); float fromScale = fromState.getOverviewScaleAndOffset(launcher)[0]; float endScale = endState.getOverviewScaleAndOffset(launcher)[0]; Animator scale = ObjectAnimator.ofFloat(recentsView, SCALE_PROPERTY, fromScale, endScale); Animator applyFullscreenProgress = ObjectAnimator.ofFloat(recentsView, RecentsView.FULLSCREEN_PROGRESS, fromFullscreenProgress, endFullscreenProgress); anim.playTogether(scale, applyFullscreenProgress); controller.setEndAction(() -> activity.getStateManager().goToState( controller.getInterpolatedProgress() > 0.5 ? OVERVIEW : BACKGROUND_APP, false)); return controller; } @Override Loading
quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherSwipeHandler.java +1 −2 Original line number Diff line number Diff line Loading @@ -335,8 +335,7 @@ public class LauncherSwipeHandler extends BaseSwipeUpHandler<Launcher, RecentsVi if (mGestureState.getEndTarget() != HOME) { Runnable initAnimFactory = () -> { mAnimationFactory = mActivityInterface.prepareRecentsUI( mWasLauncherAlreadyVisible, true, this::onAnimatorPlaybackControllerCreated); mWasLauncherAlreadyVisible, this::onAnimatorPlaybackControllerCreated); maybeUpdateRecentsAttachedState(false /* animate */); }; if (mWasLauncherAlreadyVisible) { Loading
quickstep/src/com/android/quickstep/BaseActivityInterface.java +2 −2 Original line number Diff line number Diff line Loading @@ -53,8 +53,8 @@ public interface BaseActivityInterface<T extends BaseDraggingActivity> { default void onSwipeUpToHomeComplete() { } void onAssistantVisibilityChanged(float visibility); AnimationFactory prepareRecentsUI(boolean activityVisible, boolean animateActivity, Consumer<AnimatorPlaybackController> callback); AnimationFactory prepareRecentsUI( boolean activityVisible, Consumer<AnimatorPlaybackController> callback); ActivityInitListener createActivityInitListener(Predicate<Boolean> onInitListener); Loading