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

Commit 520e00e4 authored by Riddle Hsu's avatar Riddle Hsu Committed by Android (Google) Code Review
Browse files

Merge "Defer dispatching task appeared until transition ready"

parents 5e41fa60 676b24cf
Loading
Loading
Loading
Loading
+20 −3
Original line number Diff line number Diff line
@@ -6578,12 +6578,29 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
        updateReportedVisibilityLocked();
    }

    /**
     * Sets whether something has been visible in the task and returns {@code true} if the state
     * is changed from invisible to visible.
     */
    private boolean setTaskHasBeenVisible() {
        final boolean wasTaskVisible = task.getHasBeenVisible();
        if (wasTaskVisible) {
            return false;
        }
        if (inTransition()) {
            // The deferring will be canceled until transition is ready so it won't dispatch
            // intermediate states to organizer.
            task.setDeferTaskAppear(true);
        }
        task.setHasBeenVisible(true);
        return true;
    }

    void onStartingWindowDrawn() {
        boolean wasTaskVisible = false;
        if (task != null) {
            mSplashScreenStyleSolidColor = true;
            wasTaskVisible = task.getHasBeenVisible();
            task.setHasBeenVisible(true);
            wasTaskVisible = !setTaskHasBeenVisible();
        }

        // The transition may not be executed if the starting process hasn't attached. But if the
@@ -6621,7 +6638,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
        }
        finishLaunchTickingLocked();
        if (task != null) {
            task.setHasBeenVisible(true);
            setTaskHasBeenVisible();
        }
        // Clear indicated launch root task because there's no trampoline activity to expect after
        // the windows are drawn.
+12 −5
Original line number Diff line number Diff line
@@ -4148,21 +4148,28 @@ class Task extends TaskFragment {

    void setHasBeenVisible(boolean hasBeenVisible) {
        mHasBeenVisible = hasBeenVisible;
        if (hasBeenVisible) {
            if (!mDeferTaskAppear) sendTaskAppeared();
            if (!isRootTask()) {
                getRootTask().setHasBeenVisible(true);
        if (!hasBeenVisible || mDeferTaskAppear) {
            return;
        }
        sendTaskAppeared();
        for (WindowContainer<?> parent = getParent(); parent != null; parent = parent.getParent()) {
            final Task parentTask = parent.asTask();
            if (parentTask == null) {
                break;
            }
            parentTask.setHasBeenVisible(true);
        }
    }


    boolean getHasBeenVisible() {
        return mHasBeenVisible;
    }

    void setDeferTaskAppear(boolean deferTaskAppear) {
        final boolean wasDeferred = mDeferTaskAppear;
        mDeferTaskAppear = deferTaskAppear;
        if (!mDeferTaskAppear) {
        if (wasDeferred && !deferTaskAppear) {
            sendTaskAppeared();
        }
    }
+7 −4
Original line number Diff line number Diff line
@@ -1156,13 +1156,16 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
    private void commitVisibleActivities(SurfaceControl.Transaction transaction) {
        for (int i = mParticipants.size() - 1; i >= 0; --i) {
            final ActivityRecord ar = mParticipants.valueAt(i).asActivityRecord();
            if (ar == null || !ar.isVisibleRequested()) {
            if (ar == null || ar.getTask() == null) {
                continue;
            }
            if (ar.isVisibleRequested()) {
                ar.commitVisibility(true /* visible */, false /* performLayout */,
                        true /* fromTransition */);
                ar.commitFinishDrawing(transaction);
            }
            ar.getTask().setDeferTaskAppear(false);
        }
    }

    /** @see RecentsAnimationController#attachNavigationBarToApp */
+6 −0
Original line number Diff line number Diff line
@@ -566,6 +566,8 @@ public class TransitionTests extends WindowTestsBase {
        doReturn(mock(IBinder.class)).when(delegateProc.getThread()).asBinder();
        final ActivityRecord app = new ActivityBuilder(mAtm).setCreateTask(true)
                .setVisible(false).build();
        final Task task = app.getTask();
        task.setTaskOrganizer(mock(ITaskOrganizer.class), true /* skipTaskAppeared */);
        app.setVisibleRequested(true);
        final TransitionController controller = app.mTransitionController;
        final Transition transition = controller.createTransition(TRANSIT_OPEN);
@@ -576,7 +578,11 @@ public class TransitionTests extends WindowTestsBase {
        controller.requestStartTransition(transition, null /* startTask */, remoteTransition,
                null /* displayChange */);
        testPlayer.startTransition();
        app.onStartingWindowDrawn();
        // The task appeared event should be deferred until transition ready.
        assertFalse(task.taskAppearedReady());
        testPlayer.onTransactionReady(app.getSyncTransaction());
        assertTrue(task.taskAppearedReady());
        assertTrue(playerProc.isRunningRemoteTransition());
        assertTrue(delegateProc.isRunningRemoteTransition());
        assertTrue(controller.mRemotePlayer.reportRunning(delegateProc.getThread()));