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

Commit d0863ae5 authored by Kevin's avatar Kevin
Browse files

Add basic home to recents anim for fallback recents

For users/OEMs who ship with a different default launcher, we should
provide at least a basic animation from home to recents. This creates a
simple cross-fade animation if coming from a separate home activity.

Bug: 132449252
Test: Have different default launcher, go to home, go to recents
Change-Id: I5ac7b0eedbcdf1e020c31d9cf120887a4bb3826a
parent 763a7bff
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@ package com.android.quickstep;

import static com.android.launcher3.anim.Interpolators.FAST_OUT_SLOW_IN;
import static com.android.quickstep.views.IconRecentsView.REMOTE_APP_TO_OVERVIEW_DURATION;
import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.ACTIVITY_TYPE_HOME;
import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.MODE_CLOSING;
import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.MODE_OPENING;

@@ -134,7 +135,11 @@ final class AppToOverviewAnimationProvider<T extends BaseDraggingActivity> imple
            return anim;
        }

        if (closingAppTarget.activityType == ACTIVITY_TYPE_HOME) {
            mRecentsView.playRemoteHomeToRecentsAnimation(anim, closingAppTarget, recentsTarget);
        } else {
            mRecentsView.playRemoteAppToRecentsAnimation(anim, closingAppTarget, recentsTarget);
        }

        return anim;
    }
+47 −0
Original line number Diff line number Diff line
@@ -641,6 +641,53 @@ public final class IconRecentsView extends FrameLayout implements Insettable {
        mStartedEnterAnimation = true;
    }

    /**
     * Play remote app to recents animation when the app is the home activity. We use a simple
     * cross-fade here. Note this is only used if the home activity is a separate app than the
     * recents activity.
     *
     * @param anim animator set
     * @param homeTarget the home surface thats closing
     * @param recentsTarget the surface containing recents
     */
    public void playRemoteHomeToRecentsAnimation(@NonNull AnimatorSet anim,
            @NonNull RemoteAnimationTargetCompat homeTarget,
            @NonNull RemoteAnimationTargetCompat recentsTarget) {
        SyncRtSurfaceTransactionApplierCompat surfaceApplier =
                new SyncRtSurfaceTransactionApplierCompat(this);

        SurfaceParams[] params = new SurfaceParams[2];
        int boostedMode = MODE_CLOSING;

        ValueAnimator remoteHomeAnim = ValueAnimator.ofFloat(0, 1);
        remoteHomeAnim.setDuration(REMOTE_APP_TO_OVERVIEW_DURATION);

        remoteHomeAnim.addUpdateListener(valueAnimator -> {
            float val = (float) valueAnimator.getAnimatedValue();
            float alpha;
            RemoteAnimationTargetCompat visibleTarget;
            RemoteAnimationTargetCompat invisibleTarget;
            if (val < .5f) {
                visibleTarget = homeTarget;
                invisibleTarget = recentsTarget;
                alpha = 1 - (val * 2);
            } else {
                visibleTarget = recentsTarget;
                invisibleTarget = homeTarget;
                alpha = (val - .5f) * 2;
            }
            params[0] = new SurfaceParams(visibleTarget.leash, alpha, null /* matrix */,
                    null /* windowCrop */, getLayer(visibleTarget, boostedMode),
                    0 /* cornerRadius */);
            params[1] = new SurfaceParams(invisibleTarget.leash, 0.0f, null /* matrix */,
                    null /* windowCrop */, getLayer(invisibleTarget, boostedMode),
                    0 /* cornerRadius */);
            surfaceApplier.scheduleApply(params);
        });
        anim.play(remoteHomeAnim);
        animateFadeInLayoutAnimation();
    }

    /**
     * Play remote animation from app to recents. This should scale the currently closing app down
     * to the recents thumbnail.