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

Commit 9cc5bfd8 authored by Ikram Gabiyev's avatar Ikram Gabiyev Committed by Android (Google) Code Review
Browse files

Merge "[PIP] Remove PIP when recovering from systemui crash" into main

parents 78429586 a73daf63
Loading
Loading
Loading
Loading
+25 −0
Original line number Diff line number Diff line
@@ -133,6 +133,8 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
            SystemProperties.getInt(
                    "persist.wm.debug.extra_content_overlay_fade_out_delay_ms", 400);

    private static final int CRASH_RECOVERY_CHECK_DELAY_MS = 3000;

    private final Context mContext;
    private final SyncTransactionQueue mSyncTransactionQueue;
    private final PipBoundsState mPipBoundsState;
@@ -370,6 +372,13 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
    @Nullable
    private Rect mSwipeSourceRectHint;

    /**
     * Tracks whether we've actually started an enter transition after receiving an onTaskAppeared.
     *
     * Used for cleaning up state from crash recovery.
     */
    private boolean mHasTriggeredEnterPipTransition;

    public PipTaskOrganizer(Context context,
            @NonNull ShellInit shellInit,
            @NonNull SyncTransactionQueue syncTransactionQueue,
@@ -421,6 +430,13 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
        if (!PipFlags.isPip2ExperimentEnabled()) {
            shellInit.addInitCallback(this::onInit, this);
        }

        mPipTransitionState.addOnPipTransitionStateChangedListener(
                (oldState, newState) -> {
                    if (mPipTransitionState.isEnteringPip()) {
                        mHasTriggeredEnterPipTransition = true;
                    }
                });
    }

    @VisibleForTesting
@@ -817,6 +833,15 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
            logRemoteActions(mPictureInPictureParams);
        }

        // set delayed check that we are entering pip, otherwise this indicates
        // a systemui crash and we should clean up pip state
        mHasTriggeredEnterPipTransition = false;
        mMainExecutor.executeDelayed(() -> {
            if (!mHasTriggeredEnterPipTransition) {
                removePipImmediately();
            }
        }, CRASH_RECOVERY_CHECK_DELAY_MS);

        mPipUiEventLoggerLogger.setTaskInfo(mTaskInfo);

        // If the displayId of the task is different than what PipBoundsHandler has, then update