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

Commit 1717119f authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Consolidate app-pair divider bar behavior" into sc-v2-dev

parents 67170963 5a62d8a7
Loading
Loading
Loading
Loading
+24 −22
Original line number Diff line number Diff line
@@ -27,7 +27,6 @@ import static com.android.wm.shell.common.split.SplitLayout.SPLIT_POSITION_UNDEF
import static com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_TASK_ORG;

import android.app.ActivityManager;
import android.graphics.Rect;
import android.view.SurfaceControl;
import android.view.SurfaceSession;
import android.window.WindowContainerToken;
@@ -40,6 +39,7 @@ import com.android.internal.protolog.common.ProtoLog;
import com.android.wm.shell.ShellTaskOrganizer;
import com.android.wm.shell.common.DisplayController;
import com.android.wm.shell.common.DisplayImeController;
import com.android.wm.shell.common.DisplayInsetsController;
import com.android.wm.shell.common.SurfaceUtils;
import com.android.wm.shell.common.SyncTransactionQueue;
import com.android.wm.shell.common.split.SplitLayout;
@@ -69,6 +69,7 @@ class AppPair implements ShellTaskOrganizer.TaskListener, SplitLayout.SplitLayou
    private final SyncTransactionQueue mSyncQueue;
    private final DisplayController mDisplayController;
    private final DisplayImeController mDisplayImeController;
    private final DisplayInsetsController mDisplayInsetsController;
    private SplitLayout mSplitLayout;

    private final SplitWindowManager.ParentContainerCallbacks mParentContainerCallbacks =
@@ -80,7 +81,12 @@ class AppPair implements ShellTaskOrganizer.TaskListener, SplitLayout.SplitLayou

        @Override
        public void onLeashReady(SurfaceControl leash) {
            mSyncQueue.runInSync(t -> t.show(leash));
            mSyncQueue.runInSync(t -> t
                    .show(leash)
                    .setLayer(leash, SPLIT_DIVIDER_LAYER)
                    .setPosition(leash,
                            mSplitLayout.getDividerBounds().left,
                            mSplitLayout.getDividerBounds().top));
        }
    };

@@ -89,6 +95,7 @@ class AppPair implements ShellTaskOrganizer.TaskListener, SplitLayout.SplitLayou
        mSyncQueue = controller.getSyncTransactionQueue();
        mDisplayController = controller.getDisplayController();
        mDisplayImeController = controller.getDisplayImeController();
        mDisplayInsetsController = controller.getDisplayInsetsController();
    }

    int getRootTaskId() {
@@ -125,6 +132,7 @@ class AppPair implements ShellTaskOrganizer.TaskListener, SplitLayout.SplitLayou
                mDisplayController.getDisplayContext(mRootTaskInfo.displayId),
                mRootTaskInfo.configuration, this /* layoutChangeListener */,
                mParentContainerCallbacks, mDisplayImeController, mController.getTaskOrganizer());
        mDisplayInsetsController.addInsetsChangedListener(mRootTaskInfo.displayId, mSplitLayout);

        final WindowContainerToken token1 = task1.token;
        final WindowContainerToken token2 = task2.token;
@@ -190,22 +198,17 @@ class AppPair implements ShellTaskOrganizer.TaskListener, SplitLayout.SplitLayou
        if (mTaskLeash1 == null || mTaskLeash2 == null) return;

        mSplitLayout.init();
        final SurfaceControl dividerLeash = mSplitLayout.getDividerLeash();
        final Rect dividerBounds = mSplitLayout.getDividerBounds();

        // TODO: Is there more we need to do here?
        mSyncQueue.runInSync(t -> {
            t.setLayer(dividerLeash, SPLIT_DIVIDER_LAYER)
                    .setPosition(mTaskLeash1, mTaskInfo1.positionInParent.x,
                            mTaskInfo1.positionInParent.y)
                    .setPosition(mTaskLeash2, mTaskInfo2.positionInParent.x,
                            mTaskInfo2.positionInParent.y)
                    .setPosition(dividerLeash, dividerBounds.left, dividerBounds.top)
                    .show(dividerLeash)
        mSyncQueue.runInSync(t -> t
                .show(mRootTaskLeash)
                .show(mTaskLeash1)
                    .show(mTaskLeash2);
        });
                .show(mTaskLeash2)
                .setPosition(mTaskLeash1,
                        mTaskInfo1.positionInParent.x,
                        mTaskInfo1.positionInParent.y)
                .setPosition(mTaskLeash2,
                        mTaskInfo2.positionInParent.x,
                        mTaskInfo2.positionInParent.y));
    }

    @Override
@@ -227,11 +230,10 @@ class AppPair implements ShellTaskOrganizer.TaskListener, SplitLayout.SplitLayou
            }
            mRootTaskInfo = taskInfo;

            if (mSplitLayout != null) {
                if (mSplitLayout.updateConfiguration(mRootTaskInfo.configuration)) {
            if (mSplitLayout != null
                    && mSplitLayout.updateConfiguration(mRootTaskInfo.configuration)) {
                onLayoutChanged(mSplitLayout);
            }
            }
        } else if (taskInfo.taskId == getTaskId1()) {
            mTaskInfo1 = taskInfo;
        } else if (taskInfo.taskId == getTaskId2()) {
+9 −1
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import com.android.internal.protolog.common.ProtoLog;
import com.android.wm.shell.ShellTaskOrganizer;
import com.android.wm.shell.common.DisplayController;
import com.android.wm.shell.common.DisplayImeController;
import com.android.wm.shell.common.DisplayInsetsController;
import com.android.wm.shell.common.ShellExecutor;
import com.android.wm.shell.common.SyncTransactionQueue;

@@ -50,14 +51,17 @@ public class AppPairsController {
    private final SparseArray<AppPair> mActiveAppPairs = new SparseArray<>();
    private final DisplayController mDisplayController;
    private final DisplayImeController mDisplayImeController;
    private final DisplayInsetsController mDisplayInsetsController;

    public AppPairsController(ShellTaskOrganizer organizer, SyncTransactionQueue syncQueue,
            DisplayController displayController, ShellExecutor mainExecutor,
            DisplayImeController displayImeController) {
            DisplayImeController displayImeController,
            DisplayInsetsController displayInsetsController) {
        mTaskOrganizer = organizer;
        mSyncQueue = syncQueue;
        mDisplayController = displayController;
        mDisplayImeController = displayImeController;
        mDisplayInsetsController = displayInsetsController;
        mMainExecutor = mainExecutor;
    }

@@ -148,6 +152,10 @@ public class AppPairsController {
        return mDisplayImeController;
    }

    DisplayInsetsController getDisplayInsetsController() {
        return mDisplayInsetsController;
    }

    public void dump(@NonNull PrintWriter pw, String prefix) {
        final String innerPrefix = prefix + "  ";
        final String childPrefix = innerPrefix + "  ";
+15 −11
Original line number Diff line number Diff line
@@ -189,24 +189,28 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange
        final int rotation = configuration.windowConfiguration.getRotation();
        final Rect rootBounds = configuration.windowConfiguration.getBounds();
        final int orientation = configuration.orientation;
        if (rotation != mRotation || !mRootBounds.equals(rootBounds)
                || orientation != mOrientation) {

        if (mOrientation == orientation
                && rotation == mRotation
                && mRootBounds.equals(rootBounds)) {
            return false;
        }

        mContext = mContext.createConfigurationContext(configuration);
        mSplitWindowManager.setConfiguration(configuration);
        mOrientation = orientation;
        mTempRect.set(mRootBounds);
        mRootBounds.set(rootBounds);
        mRotation = rotation;
        mDividerSnapAlgorithm = getSnapAlgorithm(mContext, mRootBounds);
        initDividerPosition(mTempRect);
            affectsLayout = true;
        }

        if (mInitialized) {
            release();
            init();
        }

        return affectsLayout;
        return true;
    }

    private void initDividerPosition(Rect oldBounds) {
+2 −1
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import static org.mockito.Mockito.mock;
import com.android.wm.shell.ShellTaskOrganizer;
import com.android.wm.shell.common.DisplayController;
import com.android.wm.shell.common.DisplayImeController;
import com.android.wm.shell.common.DisplayInsetsController;
import com.android.wm.shell.common.ShellExecutor;
import com.android.wm.shell.common.SyncTransactionQueue;

@@ -30,7 +31,7 @@ public class TestAppPairsController extends AppPairsController {
    public TestAppPairsController(ShellTaskOrganizer organizer, SyncTransactionQueue syncQueue,
            DisplayController displayController) {
        super(organizer, syncQueue, displayController, mock(ShellExecutor.class),
                mock(DisplayImeController.class));
                mock(DisplayImeController.class), mock(DisplayInsetsController.class));
        mPool = new TestAppPairsPool(this);
        setPairsPool(mPool);
    }
+3 −2
Original line number Diff line number Diff line
@@ -126,9 +126,10 @@ public class WMShellModule {
    static AppPairsController provideAppPairs(ShellTaskOrganizer shellTaskOrganizer,
            SyncTransactionQueue syncQueue, DisplayController displayController,
            @ShellMainThread ShellExecutor mainExecutor,
            DisplayImeController displayImeController) {
            DisplayImeController displayImeController,
            DisplayInsetsController displayInsetsController) {
        return new AppPairsController(shellTaskOrganizer, syncQueue, displayController,
                mainExecutor, displayImeController);
                mainExecutor, displayImeController, displayInsetsController);
    }

    //