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

Commit 7e1354f3 authored by Vinit Nayak's avatar Vinit Nayak
Browse files

Remove onStageHasChildrenChanged() from StageCoordinator

* sendStatusChanged() was only being called from onTaskAppeared()
for when the root task appears for a given stage.
* sendStatusChanged() had two callbacks, one if the children in a stage
changed and one if the visibility of a stage's root task changed.
The former is not affected by onTaskAppeared(), so we can directly call
the visibility callback instead of going through sendStatusChanged()
* This means that the other callback for children changes is no longer
being used, so we remove that one altogether

Bug: 349828130
Flag: EXEMPT refactor
Test: Split works as expected
Change-Id: Ie7cc642bdc761b7e916e53354ac21552e77a5de8
parent adf6bb84
Loading
Loading
Loading
Loading
+0 −54
Original line number Diff line number Diff line
@@ -1908,60 +1908,6 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
        }
    }

    /** Callback when split roots have child or haven't under it.
     * NOTICE: This only be called on legacy transition. */
    @Override
    public void onStageHasChildrenChanged(StageTaskListener stageListener) {
        ProtoLog.d(WM_SHELL_SPLIT_SCREEN, "onStageHasChildrenChanged: isMainStage=%b",
                stageListener == mMainStage);
        final boolean hasChildren = stageListener.mHasChildren;
        final boolean isSideStage = stageListener == mSideStage;
        if (!hasChildren && !mIsExiting && isSplitActive()) {
            if (isSideStage && mMainStage.mVisible) {
                // Exit to main stage if side stage no longer has children.
                mSplitLayout.flingDividerToDismiss(
                        mSideStagePosition == SPLIT_POSITION_BOTTOM_OR_RIGHT,
                        EXIT_REASON_APP_FINISHED);
            } else if (!isSideStage && mSideStage.mVisible) {
                // Exit to side stage if main stage no longer has children.
                mSplitLayout.flingDividerToDismiss(
                        mSideStagePosition != SPLIT_POSITION_BOTTOM_OR_RIGHT,
                        EXIT_REASON_APP_FINISHED);
            } else if (!isSplitScreenVisible() && mSplitRequest == null) {
                // Dismiss split screen in the background once any sides of the split become empty.
                exitSplitScreen(null /* childrenToTop */, EXIT_REASON_APP_FINISHED);
            }
        } else if (isSideStage && hasChildren && !isSplitActive()) {
            final WindowContainerTransaction wct = new WindowContainerTransaction();
            prepareEnterSplitScreen(wct);

            mSyncQueue.queue(wct);
            mSyncQueue.runInSync(t -> {
                if (mIsDropEntering) {
                    updateSurfaceBounds(mSplitLayout, t, false /* applyResizingOffset */);
                    mIsDropEntering = false;
                    mSkipEvictingMainStageChildren = false;
                } else {
                    mShowDecorImmediately = true;
                    mSplitLayout.flingDividerToCenter(/*finishCallback*/ null);
                }
            });
        }
        if (mMainStage.mHasChildren && mSideStage.mHasChildren) {
            mShouldUpdateRecents = true;
            clearRequestIfPresented();
            updateRecentTasksSplitPair();

            if (!mLogger.hasStartedSession() && !mLogger.hasValidEnterSessionId()) {
                mLogger.enterRequested(null /*enterSessionId*/, ENTER_REASON_MULTI_INSTANCE);
            }
            mLogger.logEnter(mSplitLayout.getDividerPositionAsFraction(),
                    getMainStagePosition(), mMainStage.getTopChildTaskUid(),
                    getSideStagePosition(), mSideStage.getTopChildTaskUid(),
                    mSplitLayout.isLeftRightSplit());
        }
    }

    @Override
    public void onNoLongerSupportMultiWindow(StageTaskListener stageTaskListener,
            ActivityManager.RunningTaskInfo taskInfo) {
+4 −19
Original line number Diff line number Diff line
@@ -75,8 +75,6 @@ public class StageTaskListener implements ShellTaskOrganizer.TaskListener {
    public interface StageListenerCallbacks {
        void onRootTaskAppeared();

        void onStageHasChildrenChanged(StageTaskListener stageTaskListener);

        void onStageVisibilityChanged(StageTaskListener stageTaskListener);

        void onChildTaskStatusChanged(StageTaskListener stage, int taskId, boolean present,
@@ -207,7 +205,10 @@ public class StageTaskListener implements ShellTaskOrganizer.TaskListener {
                    mIconProvider);
            mHasRootTask = true;
            mCallbacks.onRootTaskAppeared();
            sendStatusChanged();
            if (mVisible != mRootTaskInfo.isVisible) {
                mVisible = mRootTaskInfo.isVisible;
                mCallbacks.onStageVisibilityChanged(this);
            }
            mSyncQueue.runInSync(t -> mDimLayer =
                    SurfaceUtils.makeDimLayer(t, mRootLeash, "Dim layer"));
        } else if (taskInfo.parentTaskId == mRootTaskInfo.taskId) {
@@ -497,22 +498,6 @@ public class StageTaskListener implements ShellTaskOrganizer.TaskListener {
        return true;
    }

    private void sendStatusChanged() {
        boolean hasChildren = mChildrenTaskInfo.size() > 0;
        boolean visible = mRootTaskInfo.isVisible;
        if (!mHasRootTask) return;

        if (mHasChildren != hasChildren) {
            mHasChildren = hasChildren;
            mCallbacks.onStageHasChildrenChanged(this);
        }

        if (mVisible != visible) {
            mVisible = visible;
            mCallbacks.onStageVisibilityChanged(this);
        }
    }

    @Override
    @CallSuper
    public void dump(@NonNull PrintWriter pw, String prefix) {
+0 −1
Original line number Diff line number Diff line
@@ -114,7 +114,6 @@ public final class StageTaskListenerTests extends ShellTestCase {
    public void testRootTaskAppeared() {
        assertThat(mStageTaskListener.mRootTaskInfo.taskId).isEqualTo(mRootTask.taskId);
        verify(mCallbacks).onRootTaskAppeared();
        verify(mCallbacks, never()).onStageHasChildrenChanged(mStageTaskListener);
        verify(mCallbacks, never()).onStageVisibilityChanged(mStageTaskListener);
    }