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

Commit a070ab01 authored by Evan Rosky's avatar Evan Rosky Committed by Automerger Merge Worker
Browse files

Merge "Detect "expand to fullscreen" over recents and switch to it" into tm-dev am: be2f1eae

parents bc4b09a9 be2f1eae
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -40,4 +40,14 @@ public interface RecentsAnimationListener {
     * was running becomes ready for control.
     */
    void onTasksAppeared(RemoteAnimationTargetCompat[] app);

    /**
     * Called to request that the current task tile be switched out for a screenshot (if not
     * already). Once complete, onFinished should be called.
     * @return true if this impl will call onFinished. No other onSwitchToScreenshot impls will
     *         be called afterwards (to avoid multiple calls to onFinished).
     */
    default boolean onSwitchToScreenshot(Runnable onFinished) {
        return false;
    }
}
+23 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.systemui.shared.system;

import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
import static android.view.WindowManager.TRANSIT_CHANGE;
import static android.view.WindowManager.TRANSIT_CLOSE;
import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY;
import static android.view.WindowManager.TRANSIT_OPEN;
@@ -244,6 +245,8 @@ public class RemoteTransitionCompat implements Parcelable {
                RecentsAnimationListener recents) {
            ArrayList<TransitionInfo.Change> openingTasks = null;
            boolean cancelRecents = false;
            boolean homeGoingAway = false;
            boolean hasChangingApp = false;
            for (int i = info.getChanges().size() - 1; i >= 0; --i) {
                final TransitionInfo.Change change = info.getChanges().get(i);
                if (change.getMode() == TRANSIT_OPEN || change.getMode() == TRANSIT_TO_FRONT) {
@@ -257,7 +260,27 @@ public class RemoteTransitionCompat implements Parcelable {
                        }
                        openingTasks.add(change);
                    }
                } else if (change.getMode() == TRANSIT_CLOSE
                        || change.getMode() == TRANSIT_TO_BACK) {
                    if (mRecentsTask.equals(change.getContainer())) {
                        homeGoingAway = true;
                    }
                } else if (change.getMode() == TRANSIT_CHANGE) {
                    hasChangingApp = true;
                }
            }
            if (hasChangingApp && homeGoingAway) {
                // This happens when a visible app is expanding (usually PiP). In this case,
                // The transition probably has a special-purpose animation, so finish recents
                // now and let it do its animation (since recents is going to be occluded).
                if (!recents.onSwitchToScreenshot(() -> {
                    finish(true /* toHome */, false /* userLeaveHint */);
                })) {
                    Log.w(TAG, "Recents callback doesn't support support switching to screenshot"
                            + ", there might be a flicker.");
                    finish(true /* toHome */, false /* userLeaveHint */);
                }
                return false;
            }
            if (openingTasks == null) return false;
            int pauseMatches = 0;