From da7e55591e1bdf28aee65614fb1528cb6163a0c4 Mon Sep 17 00:00:00 2001 From: Ats Jenk Date: Thu, 1 Jun 2023 17:18:14 -0700 Subject: [PATCH] Use listener to track desktop task visibility in launcher Launcher registers a listener with WMShell to receive updates about desktop stashed state. The same listener can be used to receive updates about desktop visibility. Previously launcher was relying on sysui state flag for desktop visibility. But this flag is not checked when launcher starts. Only updates are handled. When launcher restarts and desktop is visible, launcher state was not correctly set. This listener is "sticky", meaning when a listener registers, it will receive a callback with the current value. This allows launcher to update its state on start. Flag: persist.wm.debug.desktop_mode_2 Bug: 280490493 Test: move an app to desktop, observe launcher icons are hidden Test: swipe home from a desktop app, observe launcher icons shown Test: while desktop app is open, change system theme to dark or light, observer launcher is restarted and icons remain hidden Change-Id: Id8be1989b32d9ccd2e0539b65529fed096342ac3 --- .../statehandlers/DesktopVisibilityController.java | 9 ++++++++- .../android/quickstep/TouchInteractionService.java | 14 -------------- 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/quickstep/src/com/android/launcher3/statehandlers/DesktopVisibilityController.java b/quickstep/src/com/android/launcher3/statehandlers/DesktopVisibilityController.java index b052deb6ba..7283a184d7 100644 --- a/quickstep/src/com/android/launcher3/statehandlers/DesktopVisibilityController.java +++ b/quickstep/src/com/android/launcher3/statehandlers/DesktopVisibilityController.java @@ -61,7 +61,14 @@ public class DesktopVisibilityController { mDesktopTaskListener = new IDesktopTaskListener.Stub() { @Override public void onVisibilityChanged(int displayId, boolean visible) { - // TODO(b/261234402): move visibility from sysui state to listener + MAIN_EXECUTOR.execute(() -> { + if (displayId == mLauncher.getDisplayId()) { + if (DEBUG) { + Log.d(TAG, "desktop visibility changed value=" + visible); + } + setFreeformTasksVisible(visible); + } + }); } @Override diff --git a/quickstep/src/com/android/quickstep/TouchInteractionService.java b/quickstep/src/com/android/quickstep/TouchInteractionService.java index 2a1cc7032c..8e06be6e75 100644 --- a/quickstep/src/com/android/quickstep/TouchInteractionService.java +++ b/quickstep/src/com/android/quickstep/TouchInteractionService.java @@ -39,7 +39,6 @@ import static com.android.systemui.shared.system.ActivityManagerWrapper.CLOSE_SY import static com.android.systemui.shared.system.QuickStepContract.KEY_EXTRA_SYSUI_PROXY; import static com.android.systemui.shared.system.QuickStepContract.KEY_EXTRA_UNFOLD_ANIMATION_FORWARDER; import static com.android.systemui.shared.system.QuickStepContract.KEY_EXTRA_UNLOCK_ANIMATION_CONTROLLER; -import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_FREEFORM_ACTIVE_IN_DESKTOP_MODE; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_QUICK_SETTINGS_EXPANDED; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_TRACING_ENABLED; @@ -88,7 +87,6 @@ import com.android.launcher3.Utilities; import com.android.launcher3.anim.AnimatedFloat; import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.provider.RestoreDbTask; -import com.android.launcher3.statehandlers.DesktopVisibilityController; import com.android.launcher3.statemanager.StatefulActivity; import com.android.launcher3.taskbar.TaskbarActivityContext; import com.android.launcher3.taskbar.TaskbarManager; @@ -612,18 +610,6 @@ public class TouchInteractionService extends Service mOverviewComponentObserver.onSystemUiStateChanged(); mTaskbarManager.onSystemUiFlagsChanged(systemUiStateFlags); - boolean wasFreeformActive = - (lastSysUIFlags & SYSUI_STATE_FREEFORM_ACTIVE_IN_DESKTOP_MODE) != 0; - boolean isFreeformActive = - (systemUiStateFlags & SYSUI_STATE_FREEFORM_ACTIVE_IN_DESKTOP_MODE) != 0; - if (wasFreeformActive != isFreeformActive) { - DesktopVisibilityController controller = - LauncherActivityInterface.INSTANCE.getDesktopVisibilityController(); - if (controller != null) { - controller.setFreeformTasksVisible(isFreeformActive); - } - } - int isShadeExpandedFlag = SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED | SYSUI_STATE_QUICK_SETTINGS_EXPANDED; boolean wasExpanded = (lastSysUIFlags & isShadeExpandedFlag) != 0;