Loading libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellBaseModule.java +2 −2 Original line number Diff line number Diff line Loading @@ -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(); Loading libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java +15 −15 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); } Loading Loading @@ -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 Loading @@ -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 Loading libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformComponents.java +3 −18 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); } } libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskListener.java +11 −8 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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<>(); Loading @@ -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; Loading @@ -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); } } Loading @@ -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); Loading @@ -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); Loading Loading @@ -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. Loading Loading @@ -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); Loading libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskTransitionObserver.java +4 −4 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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 Loading
libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellBaseModule.java +2 −2 Original line number Diff line number Diff line Loading @@ -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(); Loading
libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java +15 −15 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); } Loading Loading @@ -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 Loading @@ -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 Loading
libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformComponents.java +3 −18 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); } }
libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskListener.java +11 −8 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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<>(); Loading @@ -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; Loading @@ -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); } } Loading @@ -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); Loading @@ -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); Loading Loading @@ -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. Loading Loading @@ -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); Loading
libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskTransitionObserver.java +4 −4 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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