From 4b694fa2c4e12067abdcaaabb6a5b72edf7fbf74 Mon Sep 17 00:00:00 2001 From: minch Date: Fri, 18 Apr 2025 05:31:56 +0000 Subject: [PATCH] Get DesktopVisibilityController via dagger in TopTaskTracker Bug: None Test: m Flag: EXEMPT refactor Change-Id: I5adcf67be8a1afb6902820e30eec20630285f413 --- .../com/android/quickstep/TopTaskTracker.java | 26 +++++++++++-------- .../quickstep/AbsSwipeUpHandlerTestCase.java | 4 ++- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/quickstep/src/com/android/quickstep/TopTaskTracker.java b/quickstep/src/com/android/quickstep/TopTaskTracker.java index 47200ce8ae..c4d6b1ad15 100644 --- a/quickstep/src/com/android/quickstep/TopTaskTracker.java +++ b/quickstep/src/com/android/quickstep/TopTaskTracker.java @@ -100,10 +100,11 @@ public class TopTaskTracker extends ISplitScreenListener.Stub implements TaskSta private ArrayMap mVisibleTasks = new ArrayMap<>(); private final Context mContext; + private final DesktopVisibilityController mDesktopVisibilityController; @Inject public TopTaskTracker(@ApplicationContext Context context, DaggerSingletonTracker tracker, - SystemUiProxy systemUiProxy) { + SystemUiProxy systemUiProxy, DesktopVisibilityController desktopVisibilityController) { if (!enableShellTopTaskTracking()) { mMainStagePosition.stageType = SplitConfigurationOptions.STAGE_TYPE_MAIN; mSideStagePosition.stageType = SplitConfigurationOptions.STAGE_TYPE_SIDE; @@ -122,6 +123,7 @@ public class TopTaskTracker extends ISplitScreenListener.Stub implements TaskSta }); mContext = context; + mDesktopVisibilityController = desktopVisibilityController; } @Override @@ -346,6 +348,7 @@ public class TopTaskTracker extends ISplitScreenListener.Stub implements TaskSta // explicit) return new CachedTaskInfo(mVisibleTasks.get(displayId)); } else { + int activeDeskId = mDesktopVisibilityController.getActiveDeskId(displayId); if (filterOnlyVisibleRecents) { // Since we only know about the top most task, any filtering may not be applied on // the cache. The second to top task may change while the top task is still the @@ -355,10 +358,10 @@ public class TopTaskTracker extends ISplitScreenListener.Stub implements TaskSta if (enableOverviewOnConnectedDisplays()) { return new CachedTaskInfo(Arrays.stream(tasks).filter( info -> ExternalDisplaysKt.getSafeDisplayId(info) - == displayId).toList(), mContext, displayId); + == displayId).toList(), mContext, displayId, activeDeskId); } else { return new CachedTaskInfo(Arrays.asList(tasks), mContext, - displayId); + displayId, activeDeskId); } } @@ -384,7 +387,7 @@ public class TopTaskTracker extends ISplitScreenListener.Stub implements TaskSta taskInfo -> !DesksUtils.isDesktopWallpaperTask(taskInfo)); } - return new CachedTaskInfo(taskStream.toList(), mContext, displayId); + return new CachedTaskInfo(taskStream.toList(), mContext, displayId, activeDeskId); } } @@ -416,22 +419,25 @@ public class TopTaskTracker extends ISplitScreenListener.Stub implements TaskSta private final GroupedTaskInfo mVisibleTasks; private Context mContext; + private final int mActiveDeskId; // Only used when enableShellTopTaskTracking() is enabled CachedTaskInfo(@Nullable GroupedTaskInfo visibleTasks) { mAllCachedTasks = null; mTopTask = null; mVisibleTasks = visibleTasks; + mActiveDeskId = INACTIVE_DESK_ID; } // Only used when enableShellTopTaskTracking() is disabled CachedTaskInfo(@NonNull List allCachedTasks, Context context, - int displayId) { + int displayId, int activeDeskId) { mDisplayId = displayId; mVisibleTasks = null; mAllCachedTasks = allCachedTasks; mTopTask = allCachedTasks.isEmpty() ? null : allCachedTasks.get(0); mContext = context; + mActiveDeskId = activeDeskId; } /** @@ -541,7 +547,8 @@ public class TopTaskTracker extends ISplitScreenListener.Stub implements TaskSta && t.getActivityType() != ACTIVITY_TYPE_RECENTS) .toList(); return visibleNonExcludedTasks.isEmpty() ? null - : new CachedTaskInfo(visibleNonExcludedTasks, mContext, mDisplayId); + : new CachedTaskInfo(visibleNonExcludedTasks, mContext, mDisplayId, + mActiveDeskId); } /** @@ -599,12 +606,9 @@ public class TopTaskTracker extends ISplitScreenListener.Stub implements TaskSta } else { final TaskInfo baseTaskInfo = getLegacyBaseTask(); if (enableMultipleDesktops(mContext)) { - DesktopVisibilityController desktopVisibilityController = - DesktopVisibilityController.INSTANCE.get(mContext); - if (desktopVisibilityController.isInDesktopMode(mDisplayId)) { + if (mActiveDeskId != INACTIVE_DESK_ID) { return GroupedTaskInfo.forDeskTasks( - desktopVisibilityController.getActiveDeskId(mDisplayId), - mDisplayId, mAllCachedTasks, + mActiveDeskId, mDisplayId, mAllCachedTasks, /* minimizedFreeformTaskIds = */ Collections.emptySet()); } } else if (isDesktopTask(baseTaskInfo)) { diff --git a/quickstep/tests/multivalentTests/src/com/android/quickstep/AbsSwipeUpHandlerTestCase.java b/quickstep/tests/multivalentTests/src/com/android/quickstep/AbsSwipeUpHandlerTestCase.java index b458e3d282..732f332d65 100644 --- a/quickstep/tests/multivalentTests/src/com/android/quickstep/AbsSwipeUpHandlerTestCase.java +++ b/quickstep/tests/multivalentTests/src/com/android/quickstep/AbsSwipeUpHandlerTestCase.java @@ -18,6 +18,7 @@ package com.android.quickstep; import static android.view.Display.DEFAULT_DISPLAY; +import static com.android.launcher3.statehandlers.DesktopVisibilityController.INACTIVE_DESK_ID; import static com.android.quickstep.AbsSwipeUpHandler.STATE_HANDLER_INVALIDATED; import static com.android.wm.shell.shared.ShellSharedConstants.KEY_EXTRA_SHELL_CAN_HAND_OFF_ANIMATION; import static com.android.wm.shell.shared.split.SplitBounds.KEY_EXTRA_SPLIT_BOUNDS; @@ -111,7 +112,8 @@ public abstract class AbsSwipeUpHandlerTestCase< new ActivityManager.RunningTaskInfo(); protected final TopTaskTracker.CachedTaskInfo mCachedTaskInfo = new TopTaskTracker.CachedTaskInfo( - Collections.singletonList(mRunningTaskInfo), mContext, DEFAULT_DISPLAY); + Collections.singletonList(mRunningTaskInfo), mContext, DEFAULT_DISPLAY, + INACTIVE_DESK_ID); protected final RemoteAnimationTarget mRemoteAnimationTarget = new RemoteAnimationTarget( /* taskId= */ 0, /* mode= */ RemoteAnimationTarget.MODE_CLOSING,