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

Commit 070d5e0d authored by Winson Chung's avatar Winson Chung Committed by Android Build Coastguard Worker
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
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:5982319fc7ad653f467c99854eb09b39a12ea9d6)
Merged-In: If62db174c6552e986d5c16061c70ba6f7611dc0c
Change-Id: If62db174c6552e986d5c16061c70ba6f7611dc0c
parent 210d5080
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -2155,7 +2155,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;