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

Commit 8e548d52 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Stop using DesktopModeStatus in 'freeform'" into main

parents 8301421c c9725f3e
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -668,8 +668,8 @@ public abstract class WMShellBaseModule {
    @Provides
    static Optional<FreeformComponents> provideFreeformComponents(
            @DynamicOverride Optional<FreeformComponents> freeformComponents,
            Context context) {
        if (FreeformComponents.requiresFreeformComponents(context)) {
            DesktopState desktopState) {
        if (FreeformComponents.requiresFreeformComponents(desktopState)) {
            return freeformComponents;
        }
        return Optional.empty();
+15 −15
Original line number Diff line number Diff line
@@ -151,7 +151,6 @@ import com.android.wm.shell.shared.annotations.ShellDesktopThread;
import com.android.wm.shell.shared.annotations.ShellMainThread;
import com.android.wm.shell.shared.desktopmode.DesktopConfig;
import com.android.wm.shell.shared.desktopmode.DesktopModeCompatPolicy;
import com.android.wm.shell.shared.desktopmode.DesktopModeStatus;
import com.android.wm.shell.shared.desktopmode.DesktopState;
import com.android.wm.shell.splitscreen.SplitScreenController;
import com.android.wm.shell.sysui.ShellCommandHandler;
@@ -411,10 +410,12 @@ public abstract class WMShellModule {
    static WindowDecorViewHostSupplier<WindowDecorViewHost> provideWindowDecorViewHostSupplier(
            @NonNull Context context,
            @ShellMainThread @NonNull CoroutineScope mainScope,
            @NonNull ShellInit shellInit) {
        final int poolSize = DesktopModeStatus.getWindowDecorScvhPoolSize(context);
        final int preWarmSize = DesktopModeStatus.getWindowDecorPreWarmSize();
        if (DesktopModeStatus.canEnterDesktopModeOrShowAppHandle(context) && poolSize > 0) {
            @NonNull ShellInit shellInit,
            DesktopState desktopState,
            DesktopConfig desktopConfig) {
        final int poolSize = desktopConfig.getWindowDecorScvhPoolSize();
        final int preWarmSize = desktopConfig.getWindowDecorPreWarmSize();
        if (desktopState.canEnterDesktopModeOrShowAppHandle() && poolSize > 0) {
            return new PooledWindowDecorViewHostSupplier(
                    context, mainScope, shellInit, poolSize, preWarmSize);
        }
@@ -451,20 +452,19 @@ public abstract class WMShellModule {
            DesktopModeLoggerTransitionObserver desktopModeLoggerTransitionObserver,
            LaunchAdjacentController launchAdjacentController,
            WindowDecorViewModel windowDecorViewModel,
            Optional<TaskChangeListener> taskChangeListener) {
        // TODO(b/238217847): Temporarily add this check here until we can remove the dynamic
        //                    override for this controller from the base module
        ShellInit init = FreeformComponents.requiresFreeformComponents(context) ? shellInit : null;
            Optional<TaskChangeListener> taskChangeListener,
            DesktopState desktopState) {
        return new FreeformTaskListener(
                context,
                init,
                shellInit,
                shellTaskOrganizer,
                desktopUserRepositories,
                desktopTasksController,
                desktopModeLoggerTransitionObserver,
                launchAdjacentController,
                windowDecorViewModel,
                taskChangeListener);
                taskChangeListener,
                desktopState);
    }

    @WMSingleton
@@ -482,23 +482,23 @@ public abstract class WMShellModule {
    @WMSingleton
    @Provides
    static FreeformTaskTransitionObserver provideFreeformTaskTransitionObserver(
            Context context,
            ShellInit shellInit,
            Transitions transitions,
            Optional<DesktopImmersiveController> desktopImmersiveController,
            WindowDecorViewModel windowDecorViewModel,
            Optional<TaskChangeListener> taskChangeListener,
            FocusTransitionObserver focusTransitionObserver,
            Optional<DesksTransitionObserver> desksTransitionObserver) {
            Optional<DesksTransitionObserver> desksTransitionObserver,
            DesktopState desktopState) {
        return new FreeformTaskTransitionObserver(
                context,
                shellInit,
                transitions,
                desktopImmersiveController,
                windowDecorViewModel,
                taskChangeListener,
                focusTransitionObserver,
                desksTransitionObserver);
                desksTransitionObserver,
                desktopState);
    }

    @WMSingleton
+3 −18
Original line number Diff line number Diff line
@@ -16,14 +16,8 @@

package com.android.wm.shell.freeform;

import static android.content.pm.PackageManager.FEATURE_FREEFORM_WINDOW_MANAGEMENT;
import static android.provider.Settings.Global.DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT;

import android.content.Context;
import android.provider.Settings;

import com.android.wm.shell.ShellTaskOrganizer;
import com.android.wm.shell.shared.desktopmode.DesktopModeStatus;
import com.android.wm.shell.shared.desktopmode.DesktopState;
import com.android.wm.shell.transition.Transitions;

import java.util.Optional;
@@ -52,20 +46,11 @@ public class FreeformComponents {
        mTransitionStarterInitializer = transitionStarterInitializer;
    }

    /**
     * Returns if this device supports freeform.
     */
    public static boolean isFreeformEnabled(Context context) {
        return context.getPackageManager().hasSystemFeature(FEATURE_FREEFORM_WINDOW_MANAGEMENT)
                || Settings.Global.getInt(context.getContentResolver(),
                DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT, 0) != 0;
    }

    /**
     * Freeform is enabled or we need the components to enable the app handle when desktop mode is
     * not enabled
     */
    public static boolean requiresFreeformComponents(Context context) {
        return isFreeformEnabled(context) || DesktopModeStatus.overridesShowAppHandle(context);
    public static boolean requiresFreeformComponents(DesktopState desktopState) {
        return desktopState.isFreeformEnabled() || desktopState.overridesShowAppHandle();
    }
}
+11 −8
Original line number Diff line number Diff line
@@ -35,7 +35,7 @@ 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.protolog.ShellProtoLogGroup;
import com.android.wm.shell.shared.desktopmode.DesktopModeStatus;
import com.android.wm.shell.shared.desktopmode.DesktopState;
import com.android.wm.shell.sysui.ShellInit;
import com.android.wm.shell.windowdecor.WindowDecorViewModel;

@@ -58,6 +58,7 @@ public class FreeformTaskListener implements ShellTaskOrganizer.TaskListener,
    private final WindowDecorViewModel mWindowDecorationViewModel;
    private final LaunchAdjacentController mLaunchAdjacentController;
    private final Optional<TaskChangeListener> mTaskChangeListener;
    private final DesktopState mDesktopState;

    private final SparseArray<State> mTasks = new SparseArray<>();

@@ -70,7 +71,8 @@ public class FreeformTaskListener implements ShellTaskOrganizer.TaskListener,
            DesktopModeLoggerTransitionObserver desktopModeLoggerTransitionObserver,
            LaunchAdjacentController launchAdjacentController,
            WindowDecorViewModel windowDecorationViewModel,
            Optional<TaskChangeListener> taskChangeListener) {
            Optional<TaskChangeListener> taskChangeListener,
            DesktopState desktopState) {
        mContext = context;
        mShellTaskOrganizer = shellTaskOrganizer;
        mWindowDecorationViewModel = windowDecorationViewModel;
@@ -79,14 +81,15 @@ public class FreeformTaskListener implements ShellTaskOrganizer.TaskListener,
        mDesktopModeLoggerTransitionObserver = desktopModeLoggerTransitionObserver;
        mLaunchAdjacentController = launchAdjacentController;
        mTaskChangeListener = taskChangeListener;
        if (shellInit != null) {
        mDesktopState = desktopState;
        if (FreeformComponents.requiresFreeformComponents(desktopState)) {
            shellInit.addInitCallback(this::onInit, this);
        }
    }

    private void onInit() {
        mShellTaskOrganizer.addListenerForType(this, TASK_LISTENER_TYPE_FREEFORM);
        if (DesktopModeStatus.canEnterDesktopMode(mContext)) {
        if (mDesktopState.canEnterDesktopMode()) {
            mShellTaskOrganizer.addFocusListener(this);
        }
    }
@@ -104,7 +107,7 @@ public class FreeformTaskListener implements ShellTaskOrganizer.TaskListener,
        mTasks.put(taskInfo.taskId, state);

        if (!DesktopModeFlags.ENABLE_WINDOWING_TRANSITION_HANDLERS_OBSERVERS.isTrue() &&
                DesktopModeStatus.canEnterDesktopMode(mContext)) {
                mDesktopState.canEnterDesktopMode()) {
            mDesktopUserRepositories.ifPresent(userRepositories -> {
                DesktopRepository currentRepo = userRepositories.getProfile(taskInfo.userId);
                currentRepo.addTask(taskInfo.displayId, taskInfo.taskId, taskInfo.isVisible);
@@ -120,7 +123,7 @@ public class FreeformTaskListener implements ShellTaskOrganizer.TaskListener,
        mTasks.remove(taskInfo.taskId);

        if (!DesktopModeFlags.ENABLE_WINDOWING_TRANSITION_HANDLERS_OBSERVERS.isTrue() &&
                DesktopModeStatus.canEnterDesktopMode(mContext)
                mDesktopState.canEnterDesktopMode()
                && mDesktopUserRepositories.isPresent()) {
            DesktopRepository repository =
                    mDesktopUserRepositories.get().getProfile(taskInfo.userId);
@@ -155,7 +158,7 @@ public class FreeformTaskListener implements ShellTaskOrganizer.TaskListener,
        mDesktopTasksController.ifPresent(c -> c.onTaskInfoChanged(taskInfo));
        mWindowDecorationViewModel.onTaskInfoChanged(taskInfo);
        state.mTaskInfo = taskInfo;
        if (DesktopModeStatus.canEnterDesktopMode(mContext)) {
        if (mDesktopState.canEnterDesktopMode()) {
            if (DesktopModeFlags.ENABLE_WINDOWING_TRANSITION_HANDLERS_OBSERVERS.isTrue()) {
                // Pass task info changes to the [TaskChangeListener] since [TransitionsObserver]
                // does not propagate all task info changes.
@@ -195,7 +198,7 @@ public class FreeformTaskListener implements ShellTaskOrganizer.TaskListener,
        ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TASK_ORG,
                "Freeform Task Focus Changed: #%d focused=%b",
                taskInfo.taskId, taskInfo.isFocused);
        if (DesktopModeStatus.canEnterDesktopMode(mContext) && taskInfo.isFocused
        if (mDesktopState.canEnterDesktopMode() && taskInfo.isFocused
                && mDesktopUserRepositories.isPresent()) {
            DesktopRepository repository =
                mDesktopUserRepositories.get().getProfile(taskInfo.userId);
+4 −4
Original line number Diff line number Diff line
@@ -17,7 +17,6 @@
package com.android.wm.shell.freeform;

import android.app.ActivityManager;
import android.content.Context;
import android.os.IBinder;
import android.view.SurfaceControl;
import android.view.WindowManager;
@@ -30,6 +29,7 @@ import androidx.annotation.VisibleForTesting;

import com.android.wm.shell.desktopmode.DesktopImmersiveController;
import com.android.wm.shell.desktopmode.multidesks.DesksTransitionObserver;
import com.android.wm.shell.shared.desktopmode.DesktopState;
import com.android.wm.shell.sysui.ShellInit;
import com.android.wm.shell.transition.FocusTransitionObserver;
import com.android.wm.shell.transition.Transitions;
@@ -59,21 +59,21 @@ public class FreeformTaskTransitionObserver implements Transitions.TransitionObs
            new HashMap<>();

    public FreeformTaskTransitionObserver(
            Context context,
            ShellInit shellInit,
            Transitions transitions,
            Optional<DesktopImmersiveController> desktopImmersiveController,
            WindowDecorViewModel windowDecorViewModel,
            Optional<TaskChangeListener> taskChangeListener,
            FocusTransitionObserver focusTransitionObserver,
            Optional<DesksTransitionObserver> desksTransitionObserver) {
            Optional<DesksTransitionObserver> desksTransitionObserver,
            DesktopState desktopState) {
        mTransitions = transitions;
        mDesktopImmersiveController = desktopImmersiveController;
        mWindowDecorViewModel = windowDecorViewModel;
        mTaskChangeListener = taskChangeListener;
        mFocusTransitionObserver = focusTransitionObserver;
        mDesksTransitionObserver = desksTransitionObserver;
        if (FreeformComponents.requiresFreeformComponents(context)) {
        if (FreeformComponents.requiresFreeformComponents(desktopState)) {
            shellInit.addInitCallback(this::onInit, this);
        }
    }
Loading