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

Commit a48ee17a authored by Vinit Nayak's avatar Vinit Nayak
Browse files

Put status bar in immersive mode when in flex landscape split

* Split requests status bar to enter immersive mode when
device is
  * in split
  * landscape
  * 10:90 or 90:10 split
* One KI here is that when folding from home screen
the mIsLeftRightSplit value in SplitLayout doesn't get
computed correctly.

Bug: 383626044
Flag: com.android.wm.shell.enable_flexible_two_app_split
Test: Manual + unit tests
Change-Id: I8dd34e10251cc50e5b5fffae4e3018ce02e814ba
parent 06e32b8d
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -25,9 +25,11 @@ import android.view.SurfaceControl;
import android.window.DisplayAreaAppearedInfo;
import android.window.DisplayAreaInfo;
import android.window.DisplayAreaOrganizer;
import android.window.WindowContainerToken;
import android.window.WindowContainerTransaction;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.android.internal.protolog.ProtoLog;
import com.android.wm.shell.sysui.ShellInit;
@@ -142,6 +144,11 @@ public class RootDisplayAreaOrganizer extends DisplayAreaOrganizer {
        return wct;
    }

    @Nullable
    public WindowContainerToken getDisplayTokenForDisplay(int displayId) {
        return mDisplayAreasInfo.get(displayId).token;
    }

    public void dump(@NonNull PrintWriter pw, String prefix) {
        final String innerPrefix = prefix + "  ";
        final String childPrefix = innerPrefix + "  ";
+9 −3
Original line number Diff line number Diff line
@@ -84,6 +84,7 @@ import com.android.wm.shell.shared.annotations.ShellMainThread;
import com.android.wm.shell.shared.split.SplitScreenConstants.PersistentSnapPosition;
import com.android.wm.shell.shared.split.SplitScreenConstants.SnapPosition;
import com.android.wm.shell.shared.split.SplitScreenConstants.SplitPosition;
import com.android.wm.shell.splitscreen.SplitStatusBarHider;
import com.android.wm.shell.splitscreen.StageTaskListener;

import java.io.PrintWriter;
@@ -141,6 +142,7 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange
            new PathInterpolator(0.45f, 0f, 0.5f, 1f);
    @ShellMainThread
    private final Handler mHandler;
    private final SplitStatusBarHider mStatusBarHider;

    /** Singleton source of truth for the current state of split screen on this device. */
    private final SplitState mSplitState;
@@ -206,11 +208,12 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange

    public SplitLayout(String windowName, Context context, Configuration configuration,
            SplitLayoutHandler splitLayoutHandler,
            SplitWindowManager.ParentContainerCallbacks parentContainerCallbacks,
            ParentContainerCallbacks parentContainerCallbacks,
            DisplayController displayController, DisplayImeController displayImeController,
            ShellTaskOrganizer taskOrganizer, int parallaxType, SplitState splitState,
            @ShellMainThread Handler handler) {
            @ShellMainThread Handler handler, SplitStatusBarHider statusBarHider) {
        mHandler = handler;
        mStatusBarHider = statusBarHider;
        mContext = context.createConfigurationContext(configuration);
        mOrientation = configuration.orientation;
        mRotation = configuration.windowConfiguration.getRotation();
@@ -232,7 +235,7 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange
        mAllowLeftRightSplitInPortrait = SplitScreenUtils.allowLeftRightSplitInPortrait(res);
        mIsLeftRightSplit = SplitScreenUtils.isLeftRightSplit(mAllowLeftRightSplitInPortrait,
                configuration);

        statusBarHider.onLeftRightSplitUpdated(mIsLeftRightSplit);
        updateDividerConfig(mContext);

        mRootBounds.set(configuration.windowConfiguration.getBounds());
@@ -505,6 +508,7 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange
        mIsLargeScreen = configuration.smallestScreenWidthDp >= 600;
        mIsLeftRightSplit = SplitScreenUtils.isLeftRightSplit(mAllowLeftRightSplitInPortrait,
                configuration);
        mStatusBarHider.onLeftRightSplitUpdated(mIsLeftRightSplit);
        updateLayouts();
        updateDividerConfig(mContext);
        initDividerPosition(mTempRect, wasLeftRightSplit);
@@ -533,6 +537,8 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange
        mRootBounds.set(tmpRect);
        mIsLeftRightSplit = SplitScreenUtils.isLeftRightSplit(mAllowLeftRightSplitInPortrait,
                mIsLargeScreen, mRootBounds.width() >= mRootBounds.height());
        mStatusBarHider.onLeftRightSplitUpdated(mIsLeftRightSplit);

        updateLayouts();
        initDividerPosition(mTempRect, wasLeftRightSplit);
    }
+4 −2
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.content.Context;
import android.os.Handler;

import com.android.launcher3.icons.IconProvider;
import com.android.wm.shell.RootDisplayAreaOrganizer;
import com.android.wm.shell.RootTaskDisplayAreaOrganizer;
import com.android.wm.shell.ShellTaskOrganizer;
import com.android.wm.shell.common.DisplayController;
@@ -93,11 +94,12 @@ public class TvWMShellModule {
            SplitState splitState,
            @ShellMainThread ShellExecutor mainExecutor,
            @ShellMainThread Handler mainHandler,
            SystemWindows systemWindows) {
            SystemWindows systemWindows,
            RootDisplayAreaOrganizer rootDisplayAreaOrganizer) {
        return new TvSplitScreenController(context, shellInit, shellCommandHandler, shellController,
                shellTaskOrganizer, syncQueue, rootTDAOrganizer, displayController,
                displayImeController, displayInsetsController, transitions, transactionPool,
                iconProvider, recentTasks, launchAdjacentController, multiInstanceHelper,
                splitState, mainExecutor, mainHandler, systemWindows);
                splitState, mainExecutor, mainHandler, systemWindows, rootDisplayAreaOrganizer);
    }
}
+5 −2
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ import com.android.internal.statusbar.IStatusBarService;
import com.android.internal.util.LatencyTracker;
import com.android.launcher3.icons.IconProvider;
import com.android.window.flags.Flags;
import com.android.wm.shell.RootDisplayAreaOrganizer;
import com.android.wm.shell.RootTaskDisplayAreaOrganizer;
import com.android.wm.shell.ShellTaskOrganizer;
import com.android.wm.shell.activityembedding.ActivityEmbeddingController;
@@ -560,7 +561,8 @@ public abstract class WMShellModule {
            MultiInstanceHelper multiInstanceHelper,
            SplitState splitState,
            @ShellMainThread ShellExecutor mainExecutor,
            @ShellMainThread Handler mainHandler) {
            @ShellMainThread Handler mainHandler,
            RootDisplayAreaOrganizer rootDisplayAreaOrganizer) {
        return new SplitScreenController(
                context,
                shellInit,
@@ -584,7 +586,8 @@ public abstract class WMShellModule {
                multiInstanceHelper,
                splitState,
                mainExecutor,
                mainHandler);
                mainHandler,
                rootDisplayAreaOrganizer);
    }

    //
+7 −2
Original line number Diff line number Diff line
@@ -81,6 +81,7 @@ import com.android.internal.logging.InstanceId;
import com.android.internal.protolog.ProtoLog;
import com.android.launcher3.icons.IconProvider;
import com.android.wm.shell.R;
import com.android.wm.shell.RootDisplayAreaOrganizer;
import com.android.wm.shell.RootTaskDisplayAreaOrganizer;
import com.android.wm.shell.ShellTaskOrganizer;
import com.android.wm.shell.common.ComponentUtils;
@@ -202,6 +203,7 @@ public class SplitScreenController implements SplitDragPolicy.Starter,
    private final Optional<DesktopTasksController> mDesktopTasksController;
    private final MultiInstanceHelper mMultiInstanceHelpher;
    private final SplitState mSplitState;
    private final RootDisplayAreaOrganizer mRootDisplayAreaOrganizer;
    private final SplitScreenShellCommandHandler mSplitScreenShellCommandHandler;

    @VisibleForTesting
@@ -233,7 +235,8 @@ public class SplitScreenController implements SplitDragPolicy.Starter,
            MultiInstanceHelper multiInstanceHelper,
            SplitState splitState,
            ShellExecutor mainExecutor,
            Handler mainHandler) {
            Handler mainHandler,
            RootDisplayAreaOrganizer rootDisplayAreaOrganizer) {
        mShellCommandHandler = shellCommandHandler;
        mShellController = shellController;
        mTaskOrganizer = shellTaskOrganizer;
@@ -257,6 +260,7 @@ public class SplitScreenController implements SplitDragPolicy.Starter,
        mStageCoordinator = stageCoordinator;
        mMultiInstanceHelpher = multiInstanceHelper;
        mSplitState = splitState;
        mRootDisplayAreaOrganizer = rootDisplayAreaOrganizer;
        mSplitScreenShellCommandHandler = new SplitScreenShellCommandHandler(this);
        // TODO(b/238217847): Temporarily add this check here until we can remove the dynamic
        //                    override for this controller from the base module
@@ -301,7 +305,8 @@ public class SplitScreenController implements SplitDragPolicy.Starter,
                mTaskOrganizer, mDisplayController, mDisplayImeController,
                mDisplayInsetsController, mTransitions, mTransactionPool, mIconProvider,
                mMainExecutor, mMainHandler, mRecentTasksOptional, mLaunchAdjacentController,
                mWindowDecorViewModel, mSplitState, mDesktopTasksController, mRootTDAOrganizer);
                mWindowDecorViewModel, mSplitState, mDesktopTasksController, mRootTDAOrganizer,
                mRootDisplayAreaOrganizer);
    }

    @Override
Loading