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

Commit b77dbe1e authored by Louis Chang's avatar Louis Chang Committed by Android (Google) Code Review
Browse files

Merge "Deferring visibility updates while applying WCT" into sc-v2-dev

parents f2248fd8 be3d9a3b
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -347,6 +347,12 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks {
     */
    private int mVisibilityTransactionDepth;

    /**
     * Whether to the visibility updates that started from {@code RootWindowContainer} should be
     * deferred.
     */
    private boolean mDeferRootVisibilityUpdate;

    private ActivityMetricsLogger mActivityMetricsLogger;

    /** Check if placing task or activity on specified display is allowed. */
@@ -2263,6 +2269,14 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks {
        return mVisibilityTransactionDepth > 0;
    }

    void setDeferRootVisibilityUpdate(boolean deferUpdate) {
        mDeferRootVisibilityUpdate = deferUpdate;
    }

    boolean isRootVisibilityUpdateDeferred() {
        return mDeferRootVisibilityUpdate;
    }

    /**
     * Called when the state or visibility of an attached activity is changed.
     *
+2 −1
Original line number Diff line number Diff line
@@ -1973,7 +1973,8 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
     */
    void ensureActivitiesVisible(ActivityRecord starting, int configChanges,
            boolean preserveWindows, boolean notifyClients) {
        if (mTaskSupervisor.inActivityVisibilityUpdate()) {
        if (mTaskSupervisor.inActivityVisibilityUpdate()
                || mTaskSupervisor.isRootVisibilityUpdateDeferred()) {
            // Don't do recursive work.
            return;
        }
+4 −2
Original line number Diff line number Diff line
@@ -4500,9 +4500,11 @@ class Task extends TaskFragment {
            mAtmService.continueWindowLayout();
        }

        if (!mTaskSupervisor.isRootVisibilityUpdateDeferred()) {
            mRootWindowContainer.ensureActivitiesVisible(null, 0, PRESERVE_WINDOWS);
            mRootWindowContainer.resumeFocusedTasksTopActivities();
        }
    }

    void resumeNextFocusAfterReparent() {
        adjustFocusToNextFocusableTask("reparent", true /* allowFocusSelf */,
+3 −0
Original line number Diff line number Diff line
@@ -275,6 +275,7 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub
        int effects = 0;
        ProtoLog.v(WM_DEBUG_WINDOW_ORGANIZER, "Apply window transaction, syncId=%d", syncId);
        mService.deferWindowLayout();
        mService.mTaskSupervisor.setDeferRootVisibilityUpdate(true /* deferUpdate */);
        try {
            if (transition != null) {
                // First check if we have a display rotation transition and if so, update it.
@@ -363,6 +364,7 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub
                task.setMainWindowSizeChangeTransaction(sft);
            }
            if ((effects & TRANSACT_EFFECTS_LIFECYCLE) != 0) {
                mService.mTaskSupervisor.setDeferRootVisibilityUpdate(false /* deferUpdate */);
                // Already calls ensureActivityConfig
                mService.mRootWindowContainer.ensureActivitiesVisible(null, 0, PRESERVE_WINDOWS);
                mService.mRootWindowContainer.resumeFocusedTasksTopActivities();
@@ -384,6 +386,7 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub
                mService.addWindowLayoutReasons(LAYOUT_REASON_CONFIG_CHANGED);
            }
        } finally {
            mService.mTaskSupervisor.setDeferRootVisibilityUpdate(false /* deferUpdate */);
            mService.continueWindowLayout();
        }
    }