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

Commit 5982319f authored by Winson Chung's avatar Winson Chung
Browse files

Revert "Fix issue with inconsistent stage visibility"

This reverts commit b5ad495d.

Reason for revert: b/383444878

Flag: EXEMPT revert
Bug: 383444878
Test: atest WMShellUnitTests
Change-Id: If62db174c6552e986d5c16061c70ba6f7611dc0c
parent 493af2d4
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -2166,7 +2166,8 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
        wct.setForceTranslucent(mRootTaskInfo.token, translucent);
    }

    /** Callback when split roots visiblility changed. */
    /** Callback when split roots visiblility changed.
     * NOTICE: This only be called on legacy transition. */
    @Override
    public void onStageVisibilityChanged(StageTaskListener stageListener) {
        // If split didn't active, just ignore this callback because we should already did these
+17 −11
Original line number Diff line number Diff line
@@ -240,20 +240,12 @@ public class StageTaskListener implements ShellTaskOrganizer.TaskListener {
    @Override
    @CallSuper
    public void onTaskInfoChanged(ActivityManager.RunningTaskInfo taskInfo) {
        ProtoLog.d(WM_SHELL_SPLIT_SCREEN,
                "onTaskInfoChanged: taskId=%d vis=%b reqVis=%b baseAct=%s stageId=%s",
                taskInfo.taskId, taskInfo.isVisible, taskInfo.isVisibleRequested,
                taskInfo.baseActivity, stageTypeToString(mId));
        ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "onTaskInfoChanged: taskId=%d taskAct=%s "
                        + "stageId=%s",
                taskInfo.taskId, taskInfo.baseActivity, stageTypeToString(mId));
        mWindowDecorViewModel.ifPresent(viewModel -> viewModel.onTaskInfoChanged(taskInfo));
        if (mRootTaskInfo.taskId == taskInfo.taskId) {
            mRootTaskInfo = taskInfo;
            boolean isVisible = taskInfo.isVisible && taskInfo.isVisibleRequested;
            if (mVisible != isVisible) {
                ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "onTaskInfoChanged: currentVis=%b newVis=%b",
                        mVisible, isVisible);
                mVisible = isVisible;
                mCallbacks.onStageVisibilityChanged(this);
            }
        } else if (taskInfo.parentTaskId == mRootTaskInfo.taskId) {
            if (!taskInfo.supportsMultiWindow
                    || !ArrayUtils.contains(CONTROLLED_ACTIVITY_TYPES, taskInfo.getActivityType())
@@ -268,6 +260,7 @@ public class StageTaskListener implements ShellTaskOrganizer.TaskListener {
                return;
            }
            mChildrenTaskInfo.put(taskInfo.taskId, taskInfo);
            mVisible = isStageVisible();
            mCallbacks.onChildTaskStatusChanged(this, taskInfo.taskId, true /* present */,
                    taskInfo.isVisible && taskInfo.isVisibleRequested);
        } else {
@@ -316,6 +309,19 @@ public class StageTaskListener implements ShellTaskOrganizer.TaskListener {
        t.reparent(sc, findTaskSurface(taskId));
    }

    /**
     * Checks against all children task info and return true if any are marked as visible.
     */
    private boolean isStageVisible() {
        for (int i = mChildrenTaskInfo.size() - 1; i >= 0; --i) {
            if (mChildrenTaskInfo.valueAt(i).isVisible
                    && mChildrenTaskInfo.valueAt(i).isVisibleRequested) {
                return true;
            }
        }
        return false;
    }

    private SurfaceControl findTaskSurface(int taskId) {
        if (mRootTaskInfo.taskId == taskId) {
            return mRootLeash;