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

Commit 60b9c6ea authored by Pragya Bajoria's avatar Pragya Bajoria Committed by Android (Google) Code Review
Browse files

Merge "Update Desktop Mode repositories to be user-aware." into main

parents dd56cbca 5c5ec0c9
Loading
Loading
Loading
Loading
+11 −6
Original line number Diff line number Diff line
@@ -54,6 +54,7 @@ import com.android.wm.shell.compatui.api.CompatUIEvent;
import com.android.wm.shell.compatui.api.CompatUIHandler;
import com.android.wm.shell.compatui.api.CompatUIInfo;
import com.android.wm.shell.compatui.impl.CompatUIEvents.SizeCompatRestartButtonClicked;
import com.android.wm.shell.desktopmode.DesktopUserRepositories;
import com.android.wm.shell.sysui.KeyguardChangeListener;
import com.android.wm.shell.sysui.ShellController;
import com.android.wm.shell.sysui.ShellInit;
@@ -65,6 +66,7 @@ import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.function.Consumer;
import java.util.function.Function;
@@ -194,7 +196,7 @@ public class CompatUIController implements OnDisplaysChangedListener,
    private final CompatUIStatusManager mCompatUIStatusManager;

    @NonNull
    private final IntPredicate mInDesktopModePredicate;
    private final Optional<DesktopUserRepositories> mDesktopUserRepositories;

    public CompatUIController(@NonNull Context context,
            @NonNull ShellInit shellInit,
@@ -210,7 +212,7 @@ public class CompatUIController implements OnDisplaysChangedListener,
            @NonNull CompatUIShellCommandHandler compatUIShellCommandHandler,
            @NonNull AccessibilityManager accessibilityManager,
            @NonNull CompatUIStatusManager compatUIStatusManager,
            @NonNull IntPredicate isDesktopModeEnablePredicate) {
            @NonNull Optional<DesktopUserRepositories> desktopUserRepositories) {
        mContext = context;
        mShellController = shellController;
        mDisplayController = displayController;
@@ -226,7 +228,7 @@ public class CompatUIController implements OnDisplaysChangedListener,
        mDisappearTimeSupplier = flags -> accessibilityManager.getRecommendedTimeoutMillis(
                DISAPPEAR_DELAY_MS, flags);
        mCompatUIStatusManager = compatUIStatusManager;
        mInDesktopModePredicate = isDesktopModeEnablePredicate;
        mDesktopUserRepositories = desktopUserRepositories;
        shellInit.addInitCallback(this::onInit, this);
    }

@@ -267,7 +269,6 @@ public class CompatUIController implements OnDisplaysChangedListener,
            updateActiveTaskInfo(taskInfo);
        }


        // We're showing the first reachability education so we ignore incoming TaskInfo
        // until the education flow has completed or we double tap. The double-tap
        // basically cancel all the onboarding flow. We don't have to ignore events in case
@@ -865,7 +866,11 @@ public class CompatUIController implements OnDisplaysChangedListener,
    }

    private boolean isInDesktopMode(@Nullable TaskInfo taskInfo) {
        return taskInfo != null && Flags.skipCompatUiEducationInDesktopMode()
                && mInDesktopModePredicate.test(taskInfo.displayId);
        if (mDesktopUserRepositories.isEmpty() || taskInfo == null) {
            return false;
        }
        boolean isDesktopModeShowing = mDesktopUserRepositories.get().getCurrent()
                .getVisibleTaskCount(taskInfo.displayId) > 0;
        return Flags.skipCompatUiEducationInDesktopMode() && isDesktopModeShowing;
    }
}
+9 −14
Original line number Diff line number Diff line
@@ -87,8 +87,8 @@ import com.android.wm.shell.compatui.impl.DefaultCompatUIHandler;
import com.android.wm.shell.compatui.impl.DefaultCompatUIRepository;
import com.android.wm.shell.compatui.impl.DefaultComponentIdGenerator;
import com.android.wm.shell.desktopmode.DesktopMode;
import com.android.wm.shell.desktopmode.DesktopRepository;
import com.android.wm.shell.desktopmode.DesktopTasksController;
import com.android.wm.shell.desktopmode.DesktopUserRepositories;
import com.android.wm.shell.displayareahelper.DisplayAreaHelper;
import com.android.wm.shell.displayareahelper.DisplayAreaHelperController;
import com.android.wm.shell.freeform.FreeformComponents;
@@ -138,7 +138,6 @@ import dagger.Module;
import dagger.Provides;

import java.util.Optional;
import java.util.function.IntPredicate;

/**
 * Provides basic dependencies from {@link com.android.wm.shell}, these dependencies are only
@@ -267,7 +266,7 @@ public abstract class WMShellBaseModule {
            Lazy<CompatUIShellCommandHandler> compatUIShellCommandHandler,
            Lazy<AccessibilityManager> accessibilityManager,
            CompatUIRepository compatUIRepository,
            Optional<DesktopRepository> desktopRepository,
            Optional<DesktopUserRepositories> desktopUserRepositories,
            @NonNull CompatUIState compatUIState,
            @NonNull CompatUIComponentIdGenerator componentIdGenerator,
            @NonNull CompatUIComponentFactory compatUIComponentFactory,
@@ -280,10 +279,6 @@ public abstract class WMShellBaseModule {
                    new DefaultCompatUIHandler(compatUIRepository, compatUIState,
                            componentIdGenerator, compatUIComponentFactory, mainExecutor));
        }
        final IntPredicate inDesktopModePredicate =
                desktopRepository.<IntPredicate>map(modeTaskRepository -> displayId ->
                        modeTaskRepository.getVisibleTaskCount(displayId) > 0)
                            .orElseGet(() -> displayId -> false);
        return Optional.of(
                new CompatUIController(
                        context,
@@ -300,7 +295,7 @@ public abstract class WMShellBaseModule {
                        compatUIShellCommandHandler.get(),
                        accessibilityManager.get(),
                        compatUIStatusManager,
                        inDesktopModePredicate));
                        desktopUserRepositories));
    }

    @WMSingleton
@@ -704,14 +699,14 @@ public abstract class WMShellBaseModule {
            ShellCommandHandler shellCommandHandler,
            TaskStackListenerImpl taskStackListener,
            ActivityTaskManager activityTaskManager,
            Optional<DesktopRepository> desktopRepository,
            Optional<DesktopUserRepositories> desktopUserRepositories,
            TaskStackTransitionObserver taskStackTransitionObserver,
            @ShellMainThread ShellExecutor mainExecutor
    ) {
        return Optional.ofNullable(
                RecentTasksController.create(context, shellInit, shellController,
                        shellCommandHandler, taskStackListener, activityTaskManager,
                        desktopRepository, taskStackTransitionObserver, mainExecutor));
                        desktopUserRepositories, taskStackTransitionObserver, mainExecutor));
    }

    @BindsOptionalOf
@@ -1002,16 +997,16 @@ public abstract class WMShellBaseModule {

    @BindsOptionalOf
    @DynamicOverride
    abstract DesktopRepository optionalDesktopRepository();
    abstract DesktopUserRepositories optionalDesktopUserRepositories();

    @WMSingleton
    @Provides
    static Optional<DesktopRepository> provideDesktopRepository(Context context,
            @DynamicOverride Optional<Lazy<DesktopRepository>> desktopRepository) {
    static Optional<DesktopUserRepositories> provideDesktopUserRepositories(Context context,
            @DynamicOverride Optional<Lazy<DesktopUserRepositories>> desktopUserRepositories) {
        // Use optional-of-lazy for the dependency that this provider relies on.
        // Lazy ensures that this provider will not be the cause the dependency is created
        // when it will not be returned due to the condition below.
        return desktopRepository.flatMap((lazy) -> {
        return desktopUserRepositories.flatMap((lazy) -> {
            if (DesktopModeStatus.canEnterDesktopMode(context)) {
                return Optional.of(lazy.get());
            }
+28 −26
Original line number Diff line number Diff line
@@ -92,6 +92,7 @@ import com.android.wm.shell.desktopmode.DesktopTaskChangeListener;
import com.android.wm.shell.desktopmode.DesktopTasksController;
import com.android.wm.shell.desktopmode.DesktopTasksLimiter;
import com.android.wm.shell.desktopmode.DesktopTasksTransitionObserver;
import com.android.wm.shell.desktopmode.DesktopUserRepositories;
import com.android.wm.shell.desktopmode.DragToDesktopTransitionHandler;
import com.android.wm.shell.desktopmode.EnterDesktopTaskTransitionHandler;
import com.android.wm.shell.desktopmode.ExitDesktopTaskTransitionHandler;
@@ -363,7 +364,7 @@ public abstract class WMShellModule {
            Context context,
            ShellInit shellInit,
            ShellTaskOrganizer shellTaskOrganizer,
            Optional<DesktopRepository> desktopRepository,
            Optional<DesktopUserRepositories> desktopUserRepositories,
            Optional<DesktopTasksController> desktopTasksController,
            LaunchAdjacentController launchAdjacentController,
            WindowDecorViewModel windowDecorViewModel,
@@ -375,7 +376,7 @@ public abstract class WMShellModule {
                context,
                init,
                shellTaskOrganizer,
                desktopRepository,
                desktopUserRepositories,
                desktopTasksController,
                launchAdjacentController,
                windowDecorViewModel,
@@ -691,7 +692,7 @@ public abstract class WMShellModule {
            DesktopModeDragAndDropTransitionHandler desktopModeDragAndDropTransitionHandler,
            ToggleResizeDesktopTaskTransitionHandler toggleResizeDesktopTaskTransitionHandler,
            DragToDesktopTransitionHandler dragToDesktopTransitionHandler,
            @DynamicOverride DesktopRepository desktopRepository,
            @DynamicOverride DesktopUserRepositories desktopUserRepositories,
            Optional<DesktopImmersiveController> desktopImmersiveController,
            DesktopModeLoggerTransitionObserver desktopModeLoggerTransitionObserver,
            LaunchAdjacentController launchAdjacentController,
@@ -727,7 +728,7 @@ public abstract class WMShellModule {
                toggleResizeDesktopTaskTransitionHandler,
                dragToDesktopTransitionHandler,
                desktopImmersiveController.get(),
                desktopRepository,
                desktopUserRepositories,
                recentsTransitionHandler,
                multiInstanceHelper,
                mainExecutor,
@@ -750,7 +751,7 @@ public abstract class WMShellModule {
            ShellTaskOrganizer shellTaskOrganizer,
            ToggleResizeDesktopTaskTransitionHandler toggleResizeDesktopTaskTransitionHandler,
            ReturnToDragStartAnimator returnToDragStartAnimator,
            @DynamicOverride DesktopRepository desktopRepository,
            @DynamicOverride DesktopUserRepositories desktopUserRepositories,
            DesktopModeEventLogger desktopModeEventLogger) {
        return new DesktopTilingDecorViewModel(
                context,
@@ -761,7 +762,7 @@ public abstract class WMShellModule {
                shellTaskOrganizer,
                toggleResizeDesktopTaskTransitionHandler,
                returnToDragStartAnimator,
                desktopRepository,
                desktopUserRepositories,
                desktopModeEventLogger
        );
    }
@@ -769,10 +770,10 @@ public abstract class WMShellModule {
    @WMSingleton
    @Provides
    static Optional<TaskChangeListener> provideDesktopTaskChangeListener(
            Context context, @DynamicOverride DesktopRepository desktopRepository) {
            Context context, @DynamicOverride DesktopUserRepositories desktopUserRepositories) {
        if (ENABLE_WINDOWING_TRANSITION_HANDLERS_OBSERVERS.isTrue()
                && DesktopModeStatus.canEnterDesktopMode(context)) {
            return Optional.of(new DesktopTaskChangeListener(desktopRepository));
            return Optional.of(new DesktopTaskChangeListener(desktopUserRepositories));
        }
        return Optional.empty();
    }
@@ -782,7 +783,7 @@ public abstract class WMShellModule {
    static Optional<DesktopTasksLimiter> provideDesktopTasksLimiter(
            Context context,
            Transitions transitions,
            @DynamicOverride DesktopRepository desktopRepository,
            @DynamicOverride DesktopUserRepositories desktopUserRepositories,
            ShellTaskOrganizer shellTaskOrganizer,
            InteractionJankMonitor interactionJankMonitor,
            @ShellMainThread Handler handler) {
@@ -795,7 +796,7 @@ public abstract class WMShellModule {
        return Optional.of(
                new DesktopTasksLimiter(
                        transitions,
                        desktopRepository,
                        desktopUserRepositories,
                        shellTaskOrganizer,
                        maxTaskLimit,
                        interactionJankMonitor,
@@ -809,7 +810,7 @@ public abstract class WMShellModule {
            Context context,
            ShellInit shellInit,
            Transitions transitions,
            @DynamicOverride DesktopRepository desktopRepository,
            @DynamicOverride DesktopUserRepositories desktopUserRepositories,
            DisplayController displayController,
            ShellTaskOrganizer shellTaskOrganizer,
            ShellCommandHandler shellCommandHandler) {
@@ -818,7 +819,7 @@ public abstract class WMShellModule {
                    new DesktopImmersiveController(
                            shellInit,
                            transitions,
                            desktopRepository,
                            desktopUserRepositories,
                            displayController,
                            shellTaskOrganizer,
                            shellCommandHandler));
@@ -883,7 +884,7 @@ public abstract class WMShellModule {
            ShellCommandHandler shellCommandHandler,
            IWindowManager windowManager,
            ShellTaskOrganizer taskOrganizer,
            @DynamicOverride DesktopRepository desktopRepository,
            @DynamicOverride DesktopUserRepositories desktopUserRepositories,
            DisplayController displayController,
            ShellController shellController,
            DisplayInsetsController displayInsetsController,
@@ -910,7 +911,7 @@ public abstract class WMShellModule {
        }
        return Optional.of(new DesktopModeWindowDecorViewModel(context, shellExecutor, mainHandler,
                mainChoreographer, bgExecutor, shellInit, shellCommandHandler, windowManager,
                taskOrganizer, desktopRepository, displayController, shellController,
                taskOrganizer, desktopUserRepositories, displayController, shellController,
                displayInsetsController, syncQueue, transitions, desktopTasksController,
                desktopImmersiveController.get(),
                rootTaskDisplayAreaOrganizer, interactionJankMonitor, genericLinksParser,
@@ -928,7 +929,7 @@ public abstract class WMShellModule {
            @ShellAnimationThread ShellExecutor animExecutor,
            ShellInit shellInit,
            Transitions transitions,
            @DynamicOverride DesktopRepository desktopRepository) {
            @DynamicOverride DesktopUserRepositories desktopUserRepositories) {
        if (!DesktopModeStatus.canEnterDesktopMode(context)
                || !ENABLE_DESKTOP_WINDOWING_MODALS_POLICY.isTrue()
                || !Flags.enableDesktopSystemDialogsTransitions()) {
@@ -937,7 +938,7 @@ public abstract class WMShellModule {
        return Optional.of(
                new SystemModalsTransitionHandler(
                        context, mainExecutor, animExecutor, shellInit, transitions,
                        desktopRepository));
                        desktopUserRepositories));
    }

    @WMSingleton
@@ -996,16 +997,17 @@ public abstract class WMShellModule {
    @WMSingleton
    @Provides
    @DynamicOverride
    static DesktopRepository provideDesktopRepository(
    static DesktopUserRepositories provideDesktopUserRepositories(
            Context context,
            ShellInit shellInit,
            DesktopPersistentRepository desktopPersistentRepository,
            DesktopRepositoryInitializer desktopRepositoryInitializer,
            @ShellMainThread CoroutineScope mainScope
            @ShellMainThread CoroutineScope mainScope,
            UserManager userManager
    ) {
        return new DesktopRepository(context, shellInit, desktopPersistentRepository,
        return new DesktopUserRepositories(context, shellInit, desktopPersistentRepository,
                desktopRepositoryInitializer,
                mainScope);
                mainScope, userManager);
    }

    @WMSingleton
@@ -1016,7 +1018,7 @@ public abstract class WMShellModule {
            ShellTaskOrganizer shellTaskOrganizer,
            TaskStackListenerImpl taskStackListener,
            ToggleResizeDesktopTaskTransitionHandler toggleResizeDesktopTaskTransitionHandler,
            @DynamicOverride DesktopRepository desktopRepository) {
            @DynamicOverride DesktopUserRepositories desktopUserRepositories) {
        if (DesktopModeStatus.canEnterDesktopMode(context)) {
            return Optional.of(
                    new DesktopActivityOrientationChangeHandler(
@@ -1025,7 +1027,7 @@ public abstract class WMShellModule {
                            shellTaskOrganizer,
                            taskStackListener,
                            toggleResizeDesktopTaskTransitionHandler,
                            desktopRepository));
                            desktopUserRepositories));
        }
        return Optional.empty();
    }
@@ -1034,12 +1036,12 @@ public abstract class WMShellModule {
    @Provides
    static Optional<DesktopTasksTransitionObserver> provideDesktopTasksTransitionObserver(
            Context context,
            Optional<DesktopRepository> desktopRepository,
            Optional<DesktopUserRepositories> desktopUserRepositories,
            Transitions transitions,
            ShellTaskOrganizer shellTaskOrganizer,
            Optional<DesktopMixedTransitionHandler> desktopMixedTransitionHandler,
            ShellInit shellInit) {
        return desktopRepository.flatMap(
        return desktopUserRepositories.flatMap(
                repository ->
                        Optional.of(
                                new DesktopTasksTransitionObserver(
@@ -1056,7 +1058,7 @@ public abstract class WMShellModule {
    static Optional<DesktopMixedTransitionHandler> provideDesktopMixedTransitionHandler(
            Context context,
            Transitions transitions,
            @DynamicOverride DesktopRepository desktopRepository,
            @DynamicOverride DesktopUserRepositories desktopUserRepositories,
            FreeformTaskTransitionHandler freeformTaskTransitionHandler,
            CloseDesktopTaskTransitionHandler closeDesktopTaskTransitionHandler,
            Optional<DesktopImmersiveController> desktopImmersiveController,
@@ -1074,7 +1076,7 @@ public abstract class WMShellModule {
                new DesktopMixedTransitionHandler(
                        context,
                        transitions,
                        desktopRepository,
                        desktopUserRepositories,
                        freeformTaskTransitionHandler,
                        closeDesktopTaskTransitionHandler,
                        desktopImmersiveController.get(),
+3 −3
Original line number Diff line number Diff line
@@ -42,7 +42,7 @@ import com.android.wm.shell.common.pip.PipUiEventLogger;
import com.android.wm.shell.common.pip.SizeSpecSource;
import com.android.wm.shell.dagger.WMShellBaseModule;
import com.android.wm.shell.dagger.WMSingleton;
import com.android.wm.shell.desktopmode.DesktopRepository;
import com.android.wm.shell.desktopmode.DesktopUserRepositories;
import com.android.wm.shell.onehanded.OneHandedController;
import com.android.wm.shell.pip.PipAnimationController;
import com.android.wm.shell.pip.PipParamsChangedForwarder;
@@ -171,7 +171,7 @@ public abstract class Pip1Module {
            PipParamsChangedForwarder pipParamsChangedForwarder,
            Optional<SplitScreenController> splitScreenControllerOptional,
            Optional<PipPerfHintController> pipPerfHintControllerOptional,
            Optional<DesktopRepository> desktopRepositoryOptional,
            Optional<DesktopUserRepositories> desktopUserRepositoriesOptional,
            RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer,
            DisplayController displayController,
            PipUiEventLogger pipUiEventLogger, ShellTaskOrganizer shellTaskOrganizer,
@@ -181,7 +181,7 @@ public abstract class Pip1Module {
                pipBoundsAlgorithm, menuPhoneController, pipAnimationController,
                pipSurfaceTransactionHelper, pipTransitionController, pipParamsChangedForwarder,
                splitScreenControllerOptional, pipPerfHintControllerOptional,
                desktopRepositoryOptional, rootTaskDisplayAreaOrganizer, displayController,
                desktopUserRepositoriesOptional, rootTaskDisplayAreaOrganizer, displayController,
                pipUiEventLogger, shellTaskOrganizer, mainExecutor);
    }

+3 −3
Original line number Diff line number Diff line
@@ -39,7 +39,7 @@ import com.android.wm.shell.common.pip.PipUtils;
import com.android.wm.shell.common.pip.SizeSpecSource;
import com.android.wm.shell.dagger.WMShellBaseModule;
import com.android.wm.shell.dagger.WMSingleton;
import com.android.wm.shell.desktopmode.DesktopRepository;
import com.android.wm.shell.desktopmode.DesktopUserRepositories;
import com.android.wm.shell.pip2.phone.PhonePipMenuController;
import com.android.wm.shell.pip2.phone.PipController;
import com.android.wm.shell.pip2.phone.PipMotionHelper;
@@ -131,10 +131,10 @@ public abstract class Pip2Module {
            PipBoundsState pipBoundsState,
            @ShellMainThread ShellExecutor mainExecutor,
            PipTransitionState pipTransitionState,
            Optional<DesktopRepository> desktopRepositoryOptional,
            Optional<DesktopUserRepositories> desktopUserRepositoriesOptional,
            RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer) {
        return new PipScheduler(context, pipBoundsState, mainExecutor, pipTransitionState,
                desktopRepositoryOptional, rootTaskDisplayAreaOrganizer);
                desktopUserRepositoriesOptional, rootTaskDisplayAreaOrganizer);
    }

    @WMSingleton
Loading