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

Commit 2fc10229 authored by Pierre Barbier de Reuille's avatar Pierre Barbier de Reuille
Browse files

Stop using DesktopModeStatus in windowdecor and splitscreen

The two modules are two inter-dependent to be processed independently

I also had to correct a test that fails on devices using HSUM because of
the assumption the user running the test is the user 0.

Bug: 395863348
Flag: EXEMPT (refactor)
Test: atest WMShellUnitTests
Change-Id: I970997273960ecc605de2828c4d248b5bbf39017
parent a9228cf0
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -58,7 +58,7 @@ import com.android.internal.protolog.ProtoLog;
import com.android.wm.shell.R;
import com.android.wm.shell.protolog.ShellProtoLogGroup;
import com.android.wm.shell.shared.animation.Interpolators;
import com.android.wm.shell.shared.desktopmode.DesktopModeStatus;
import com.android.wm.shell.shared.desktopmode.DesktopState;

/**
 * Divider for multi window splits.
@@ -222,7 +222,8 @@ public class DividerView extends FrameLayout implements View.OnTouchListener {

    /** Sets up essential dependencies of the divider bar. */
    public void setup(SplitLayout layout, SplitWindowManager splitWindowManager,
            SurfaceControlViewHost viewHost, InsetsState insetsState) {
            SurfaceControlViewHost viewHost, InsetsState insetsState,
            DesktopState desktopState) {
        mSplitLayout = layout;
        mSplitWindowManager = splitWindowManager;
        mViewHost = viewHost;
@@ -238,7 +239,7 @@ public class DividerView extends FrameLayout implements View.OnTouchListener {
                : R.dimen.split_divider_handle_region_width);
        mHandleRegionHeight = getResources().getDimensionPixelSize(isLeftRightSplit
                ? R.dimen.split_divider_handle_region_width
                : DesktopModeStatus.canEnterDesktopMode(mContext)
                : desktopState.canEnterDesktopMode()
                        ? R.dimen.desktop_mode_portrait_split_divider_handle_region_height
                        : R.dimen.split_divider_handle_region_height);
    }
+7 −3
Original line number Diff line number Diff line
@@ -82,6 +82,7 @@ import com.android.wm.shell.common.split.DividerSnapAlgorithm.SnapTarget;
import com.android.wm.shell.common.split.SplitWindowManager.ParentContainerCallbacks;
import com.android.wm.shell.protolog.ShellProtoLogGroup;
import com.android.wm.shell.shared.annotations.ShellMainThread;
import com.android.wm.shell.shared.desktopmode.DesktopState;
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;
@@ -185,6 +186,7 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange
    private final ResizingEffectPolicy mSurfaceEffectPolicy;
    private final ShellTaskOrganizer mTaskOrganizer;
    private final InsetsState mInsetsState = new InsetsState();
    private final DesktopState mDesktopState;
    private Insets mPinnedTaskbarInsets = Insets.NONE;

    private Context mContext;
@@ -212,7 +214,8 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange
            ParentContainerCallbacks parentContainerCallbacks,
            DisplayController displayController, DisplayImeController displayImeController,
            ShellTaskOrganizer taskOrganizer, int parallaxType, SplitState splitState,
            @ShellMainThread Handler handler, SplitStatusBarHider statusBarHider) {
            @ShellMainThread Handler handler, SplitStatusBarHider statusBarHider,
            DesktopState desktopState) {
        mHandler = handler;
        mStatusBarHider = statusBarHider;
        mContext = context.createConfigurationContext(configuration);
@@ -230,6 +233,7 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange
        mImePositionProcessor = new ImePositionProcessor(mContext.getDisplayId());
        mSurfaceEffectPolicy = new ResizingEffectPolicy(parallaxType, this);
        mSplitState = splitState;
        mDesktopState = desktopState;

        final Resources res = mContext.getResources();
        mDimNonImeSide = res.getBoolean(R.bool.config_dimNonImeAttachedSide);
@@ -623,7 +627,7 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange
    public void init() {
        if (mInitialized) return;
        mInitialized = true;
        mSplitWindowManager.init(this, mInsetsState, false /* isRestoring */);
        mSplitWindowManager.init(this, mInsetsState, false /* isRestoring */, mDesktopState);
        populateTouchZones();
        mDisplayImeController.addPositionProcessor(mImePositionProcessor);
    }
@@ -656,7 +660,7 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange
        if (resetImePosition) {
            mImePositionProcessor.reset();
        }
        mSplitWindowManager.init(this, mInsetsState, true /* isRestoring */);
        mSplitWindowManager.init(this, mInsetsState, true /* isRestoring */, mDesktopState);
        populateTouchZones();
        // Update the surface positions again after recreating the divider in case nothing else
        // triggers it
+4 −2
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.android.wm.shell.R;
import com.android.wm.shell.shared.desktopmode.DesktopState;

/**
 * Holds view hierarchy of a root surface and helps to inflate {@link DividerView} for a split.
@@ -110,7 +111,8 @@ public final class SplitWindowManager extends WindowlessWindowManager {
    }

    /** Inflates {@link DividerView} on to the root surface. */
    void init(SplitLayout splitLayout, InsetsState insetsState, boolean isRestoring) {
    void init(SplitLayout splitLayout, InsetsState insetsState, boolean isRestoring,
            DesktopState desktopState) {
        if (mDividerView != null || mViewHost != null) {
            throw new UnsupportedOperationException(
                    "Try to inflate divider view again without release first");
@@ -132,7 +134,7 @@ public final class SplitWindowManager extends WindowlessWindowManager {
        lp.privateFlags |= PRIVATE_FLAG_NO_MOVE_ANIMATION | PRIVATE_FLAG_TRUSTED_OVERLAY;
        lp.accessibilityTitle = mContext.getResources().getString(R.string.accessibility_divider);
        mViewHost.setView(mDividerView, lp);
        mDividerView.setup(splitLayout, this, mViewHost, insetsState);
        mDividerView.setup(splitLayout, this, mViewHost, insetsState, desktopState);
        if (isRestoring) {
            mDividerView.setInteractive(mLastDividerInteractive, mLastDividerHandleHidden,
                    "restore_setup");
+5 −2
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ import com.android.wm.shell.dagger.pip.TvPipModule;
import com.android.wm.shell.recents.RecentTasksController;
import com.android.wm.shell.shared.TransactionPool;
import com.android.wm.shell.shared.annotations.ShellMainThread;
import com.android.wm.shell.shared.desktopmode.DesktopState;
import com.android.wm.shell.splitscreen.SplitScreenController;
import com.android.wm.shell.splitscreen.tv.TvSplitScreenController;
import com.android.wm.shell.startingsurface.StartingWindowTypeAlgorithm;
@@ -95,11 +96,13 @@ public class TvWMShellModule {
            @ShellMainThread ShellExecutor mainExecutor,
            @ShellMainThread Handler mainHandler,
            SystemWindows systemWindows,
            RootDisplayAreaOrganizer rootDisplayAreaOrganizer) {
            RootDisplayAreaOrganizer rootDisplayAreaOrganizer,
            DesktopState desktopState) {
        return new TvSplitScreenController(context, shellInit, shellCommandHandler, shellController,
                shellTaskOrganizer, syncQueue, rootTDAOrganizer, displayController,
                displayImeController, displayInsetsController, transitions, transactionPool,
                iconProvider, recentTasks, launchAdjacentController, multiInstanceHelper,
                splitState, mainExecutor, mainHandler, systemWindows, rootDisplayAreaOrganizer);
                splitState, mainExecutor, mainHandler, systemWindows, rootDisplayAreaOrganizer,
                desktopState);
    }
}
+26 −15
Original line number Diff line number Diff line
@@ -361,7 +361,9 @@ public abstract class WMShellModule {
            RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer,
            FocusTransitionObserver focusTransitionObserver,
            WindowDecorViewHostSupplier<WindowDecorViewHost> windowDecorViewHostSupplier,
            Optional<DesktopModeWindowDecorViewModel> desktopModeWindowDecorViewModel) {
            Optional<DesktopModeWindowDecorViewModel> desktopModeWindowDecorViewModel,
            DesktopState desktopState,
            DesktopConfig desktopConfig) {
        if (desktopModeWindowDecorViewModel.isPresent()) {
            return desktopModeWindowDecorViewModel.get();
        }
@@ -379,7 +381,9 @@ public abstract class WMShellModule {
                syncQueue,
                transitions,
                focusTransitionObserver,
                windowDecorViewHostSupplier);
                windowDecorViewHostSupplier,
                desktopState,
                desktopConfig);
    }

    @WMSingleton
@@ -580,7 +584,8 @@ public abstract class WMShellModule {
            SplitState splitState,
            @ShellMainThread ShellExecutor mainExecutor,
            @ShellMainThread Handler mainHandler,
            RootDisplayAreaOrganizer rootDisplayAreaOrganizer) {
            RootDisplayAreaOrganizer rootDisplayAreaOrganizer,
            DesktopState desktopState) {
        return new SplitScreenController(
                context,
                shellInit,
@@ -605,7 +610,8 @@ public abstract class WMShellModule {
                splitState,
                mainExecutor,
                mainHandler,
                rootDisplayAreaOrganizer);
                rootDisplayAreaOrganizer,
                desktopState);
    }

    //
@@ -889,7 +895,8 @@ public abstract class WMShellModule {
            DesktopModeEventLogger desktopModeEventLogger,
            WindowDecorTaskResourceLoader windowDecorTaskResourceLoader,
            FocusTransitionObserver focusTransitionObserver,
            @ShellMainThread ShellExecutor mainExecutor) {
            @ShellMainThread ShellExecutor mainExecutor,
            DesktopState desktopState) {
        return new DesktopTilingDecorViewModel(
                context,
                mainDispatcher,
@@ -905,7 +912,8 @@ public abstract class WMShellModule {
                desktopModeEventLogger,
                windowDecorTaskResourceLoader,
                focusTransitionObserver,
                mainExecutor
                mainExecutor,
                desktopState
        );
    }

@@ -1085,9 +1093,11 @@ public abstract class WMShellModule {
            DesktopTilingDecorViewModel desktopTilingDecorViewModel,
            MultiDisplayDragMoveIndicatorController multiDisplayDragMoveIndicatorController,
            Optional<CompatUIHandler> compatUI,
            DesksOrganizer desksOrganizer
            DesksOrganizer desksOrganizer,
            DesktopState desktopState,
            DesktopConfig desktopConfig
    ) {
        if (!DesktopModeStatus.canEnterDesktopModeOrShowAppHandle(context)) {
        if (!desktopState.canEnterDesktopModeOrShowAppHandle()) {
            return Optional.empty();
        }
        return Optional.of(new DesktopModeWindowDecorViewModel(context, shellExecutor, mainHandler,
@@ -1104,7 +1114,7 @@ public abstract class WMShellModule {
                desktopModeUiEventLogger, taskResourceLoader, recentsTransitionHandler,
                desktopModeCompatPolicy, desktopTilingDecorViewModel,
                multiDisplayDragMoveIndicatorController, compatUI.orElse(null),
                desksOrganizer));
                desksOrganizer, desktopState, desktopConfig));
    }

    @WMSingleton
@@ -1132,11 +1142,11 @@ public abstract class WMShellModule {
    @WMSingleton
    @Provides
    static AppHandleAndHeaderVisibilityHelper provideAppHandleAndHeaderVisibilityHelper(
            @NonNull Context context,
            @NonNull DisplayController displayController,
            @NonNull DesktopModeCompatPolicy desktopModeCompatPolicy) {
        return new AppHandleAndHeaderVisibilityHelper(context, displayController,
                desktopModeCompatPolicy);
            @NonNull DesktopModeCompatPolicy desktopModeCompatPolicy,
            @NonNull DesktopState desktopState) {
        return new AppHandleAndHeaderVisibilityHelper(displayController,
                desktopModeCompatPolicy, desktopState);
    }

    @WMSingleton
@@ -1159,8 +1169,9 @@ public abstract class WMShellModule {
            ShellInit shellInit,
            Transitions transitions,
            @DynamicOverride DesktopUserRepositories desktopUserRepositories,
            DesktopModeCompatPolicy desktopModeCompatPolicy) {
        if (!DesktopModeStatus.canEnterDesktopMode(context)
            DesktopModeCompatPolicy desktopModeCompatPolicy,
            DesktopState desktopState) {
        if (!desktopState.canEnterDesktopMode()
                || !ENABLE_DESKTOP_WINDOWING_MODALS_POLICY.isTrue()
                || !ENABLE_DESKTOP_SYSTEM_DIALOGS_TRANSITIONS.isTrue()) {
            return Optional.empty();
Loading