Directly use launcher activity interface
When desktop tasks become visible or hidden, we update a SysUI state
flag. This flag update gets processed in TouchInteractionService which
then calls DesktopVisibilityController to update launcher state based on
whether desktop tasks are visible or not.
We were getting a reference to the DesktopVisibilityController through
OverviewComponentObserver. This was causing issues when device was
unlocked with desktop tasks visible. And 3-button navigation was enabled.
In this scenario, we are immediately processing a SysUI flags update
that desktop tasks are visible again (they are hidden while device is
locked). When this update is processed, OverviewComponentObserver
returns the fallback launcher interface. And not the nexus launcher.
The fallback launcher interface does not contain the
DesktopVisibilityController. Since the fallback controller does not
return the visiblity controller, we skipped processing the update that
desktop tasks are visible. Which resulted in launcher remaining in a bad
state with home screen icons visible and desktop tasks on top.
Bug: 273594452
Test: enable 3-button nav and proto 2, move an app to desktop, lock
screen with desktop app visible, unlock screen, observe launcher icons
hidden
Test: enable gesture nav and proto 2, move and app to desktop and lock
screen with desktop app visible, unlock and observe launcher icons
hidden
Test: repeat the same steps with proto 1 enabled
Change-Id: Id52ac4cf2df151b2aee2070ee2eb14de3d74fead
diff --git a/quickstep/src/com/android/quickstep/TouchInteractionService.java b/quickstep/src/com/android/quickstep/TouchInteractionService.java
index 4680608..a0255ac 100644
--- a/quickstep/src/com/android/quickstep/TouchInteractionService.java
+++ b/quickstep/src/com/android/quickstep/TouchInteractionService.java
@@ -538,8 +538,8 @@
boolean isFreeformActive =
(systemUiStateFlags & SYSUI_STATE_FREEFORM_ACTIVE_IN_DESKTOP_MODE) != 0;
if (wasFreeformActive != isFreeformActive) {
- DesktopVisibilityController controller = mOverviewComponentObserver
- .getActivityInterface().getDesktopVisibilityController();
+ DesktopVisibilityController controller =
+ LauncherActivityInterface.INSTANCE.getDesktopVisibilityController();
if (controller != null) {
controller.setFreeformTasksVisible(isFreeformActive);
}