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

Commit 63e40707 authored by Wei Sheng Shih's avatar Wei Sheng Shih Committed by Android (Google) Code Review
Browse files

Merge "Cancel recents animation when touch home key(2/2)" into tm-dev

parents 7e426a39 a8fe8b44
Loading
Loading
Loading
Loading
+29 −7
Original line number Diff line number Diff line
@@ -44,7 +44,7 @@ import com.android.systemui.shared.system.RemoteTransitionCompat;
import com.android.systemui.shared.system.TaskStackChangeListener;
import com.android.systemui.shared.system.TaskStackChangeListeners;

import java.util.Arrays;
import java.util.ArrayList;
import java.util.HashMap;

public class TaskAnimationManager implements RecentsAnimationCallbacks.RecentsAnimationListener {
@@ -156,12 +156,26 @@ public class TaskAnimationManager implements RecentsAnimationCallbacks.RecentsAn
                RemoteAnimationTargetCompat appearedTaskTarget = appearedTaskTargets[0];
                BaseActivityInterface activityInterface = mLastGestureState.getActivityInterface();
                // Convert appTargets to type RemoteAnimationTarget for all apps except Home app
                RemoteAnimationTarget[] nonHomeApps = Arrays.stream(appearedTaskTargets)
                        .filter(remoteAnimationTarget ->
                                remoteAnimationTarget.activityType != ACTIVITY_TYPE_HOME)
                final ArrayList<RemoteAnimationTargetCompat> tmpNonHomeApps = new ArrayList<>();
                final ArrayList<RemoteAnimationTargetCompat> tmpHomeApps = new ArrayList<>();
                for (RemoteAnimationTargetCompat compat : appearedTaskTargets) {
                    if (compat.activityType != ACTIVITY_TYPE_HOME) {
                        tmpNonHomeApps.add(compat);
                    } else {
                        tmpHomeApps.add(compat);
                    }
                }
                RemoteAnimationTarget[] nonHomeApps = tmpNonHomeApps.stream()
                        .map(RemoteAnimationTargetCompat::unwrap)
                        .toArray(RemoteAnimationTarget[]::new);

                RemoteAnimationTarget[] homeApps = tmpHomeApps.stream()
                        .map(RemoteAnimationTargetCompat::unwrap)
                        .toArray(RemoteAnimationTarget[]::new);
                if (homeApps.length > 0
                        && activityInterface.getCreatedActivity() instanceof RecentsActivity) {
                    ((RecentsActivity) activityInterface.getCreatedActivity()).startHome();
                    return;
                }
                RemoteAnimationTarget[] nonAppTargets =
                        SystemUiProxy.INSTANCE.getNoCreate()
                                .onGoingToRecentsLegacy(false, nonHomeApps);
@@ -198,8 +212,16 @@ public class TaskAnimationManager implements RecentsAnimationCallbacks.RecentsAn
            RemoteTransitionCompat transition = new RemoteTransitionCompat(mCallbacks,
                    mController != null ? mController.getController() : null,
                    mCtx.getIApplicationThread());
            final ActivityOptions options = ActivityOptionsCompat.makeRemoteTransition(transition)
                    .setTransientLaunch();
            final ActivityOptions options = ActivityOptionsCompat.makeRemoteTransition(transition);
            // Allowing to pause Home if Home is top activity and Recents is not Home. So when user
            // start home when recents animation is playing, the home activity can be resumed again
            // to let the transition controller collect Home activity.
            ActivityManager.RunningTaskInfo rti = gestureState.getRunningTask();
            boolean homeIsOnTop = rti != null && rti.topActivity != null
                    && rti.topActivity.equals(gestureState.getHomeIntent().getComponent());
            if (!homeIsOnTop) {
                options.setTransientLaunch();
            }
            options.setSourceInfo(ActivityOptions.SourceInfo.TYPE_RECENTS_ANIMATION, eventTime);
            UI_HELPER_EXECUTOR.execute(() -> mCtx.startActivity(intent, options.toBundle()));
        } else {