Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6d5ab854 authored by Jon Miranda's avatar Jon Miranda Committed by Android (Google) Code Review
Browse files

Merge "Synchronize the app launch and taskbar stash animations." into main

parents e80618db cde962dc
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -356,6 +356,14 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener
        options.setOnAnimationAbortListener(endCallback);
        options.setOnAnimationFinishedListener(endCallback);

        // Prepare taskbar for animation synchronization. This needs to happen here before any
        // app transition is created.
        LauncherTaskbarUIController taskbarController = mLauncher.getTaskbarUIController();
        if (enableScalingRevealHomeAnimation() && taskbarController != null) {
            taskbarController.setIgnoreInAppFlagForSync(true);
            onEndCallback.add(() -> taskbarController.setIgnoreInAppFlagForSync(false));
        }

        IBinder cookie = mAppLaunchRunner.supportsReturnTransition()
                ? ((ContainerAnimationRunner) mAppLaunchRunner).getCookie() : null;
        addLaunchCookie(cookie, (ItemInfo) v.getTag(), options);
@@ -1924,6 +1932,21 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener
                anim.addListener(mForceInvisibleListener);
            }

            // Syncs the app launch animation and taskbar stash animation (if exists).
            if (enableScalingRevealHomeAnimation()) {
                LauncherTaskbarUIController taskbarController = mLauncher.getTaskbarUIController();
                if (taskbarController != null) {
                    taskbarController.setIgnoreInAppFlagForSync(false);

                    if (launcherClosing) {
                        Animator taskbar = taskbarController.createAnimToApp();
                        if (taskbar != null) {
                            anim.play(taskbar);
                        }
                    }
                }
            }

            result.setAnimation(anim, mLauncher, mOnEndCallback::executeAllAndDestroy,
                    skipFirstFrame);
        }
+19 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ import static com.android.launcher3.QuickstepTransitionManager.TRANSIENT_TASKBAR
import static com.android.launcher3.statemanager.BaseState.FLAG_NON_INTERACTIVE;
import static com.android.launcher3.taskbar.TaskbarEduTooltipControllerKt.TOOLTIP_STEP_FEATURES;
import static com.android.launcher3.taskbar.TaskbarLauncherStateController.FLAG_VISIBLE;
import static com.android.launcher3.taskbar.TaskbarStashController.FLAG_IGNORE_IN_APP;
import static com.android.quickstep.TaskAnimationManager.ENABLE_SHELL_TRANSITIONS;
import static com.android.window.flags.Flags.enableDesktopWindowingWallpaperActivity;

@@ -256,6 +257,24 @@ public class LauncherTaskbarUIController extends TaskbarUIController {
        return mTaskbarLauncherStateController.createAnimToLauncher(toState, callbacks, duration);
    }

    /**
     * Create Taskbar animation to be played alongside the Launcher app launch animation.
     */
    public @Nullable Animator createAnimToApp() {
        TaskbarStashController stashController = mControllers.taskbarStashController;
        stashController.updateStateForFlag(TaskbarStashController.FLAG_IN_APP, true);
        return stashController.createApplyStateAnimator(stashController.getStashDuration());
    }

    /**
     * Temporarily ignore FLAG_IN_APP for app launches to prevent premature taskbar stashing.
     * This is needed because taskbar gets a signal to stash before we actually start the
     * app launch animation.
     */
    public void setIgnoreInAppFlagForSync(boolean enabled) {
        mControllers.taskbarStashController.updateStateForFlag(FLAG_IGNORE_IN_APP, enabled);
    }

    public void updateTaskbarLauncherStateGoingHome() {
        mTaskbarLauncherStateController.updateStateForFlag(FLAG_VISIBLE, true);
        mTaskbarLauncherStateController.applyState();
+6 −0
Original line number Diff line number Diff line
@@ -95,6 +95,7 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba
    public static final int FLAG_STASHED_SYSUI = 1 << 9; //  app pinning,...
    public static final int FLAG_STASHED_DEVICE_LOCKED = 1 << 10; // device is locked: keyguard, ...
    public static final int FLAG_IN_OVERVIEW = 1 << 11; // launcher is in overview
    public static final int FLAG_IGNORE_IN_APP = 1 << 12; // used to sync with app launch animation

    // If any of these flags are enabled, isInApp should return true.
    private static final int FLAGS_IN_APP = FLAG_IN_APP | FLAG_IN_SETUP;
@@ -1263,6 +1264,11 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba
         */
        @Nullable
        public Animator createSetStateAnimator(long flags, long duration) {
            // We do this when we want to synchronize the app launch and taskbar stash animations.
            if (hasAnyFlag(FLAG_IGNORE_IN_APP) && hasAnyFlag(flags, FLAG_IN_APP)) {
                flags = flags & ~FLAG_IN_APP;
            }

            boolean isStashed = mStashCondition.test(flags);

            if (DEBUG) {