Get top task per display from TopTaskTracker
Test: locally tested on tablet Flag: com.android.launcher3.enable_overview_on_connected_displays Bug: 402362465 Change-Id: I0eb66c5c931fe30ce954657ee1b0eb2d87e58943
This commit is contained in:
@@ -134,7 +134,8 @@ public class FallbackTaskbarUIController
|
||||
|
||||
private boolean isIn3pHomeOrRecents() {
|
||||
TopTaskTracker.CachedTaskInfo topTask = TopTaskTracker.INSTANCE
|
||||
.get(mControllers.taskbarActivityContext).getCachedTopTask(true);
|
||||
.get(mControllers.taskbarActivityContext).getCachedTopTask(true,
|
||||
mRecentsContainer.asContext().getDisplayId());
|
||||
return topTask.isHomeTask() || topTask.isRecentsTask();
|
||||
}
|
||||
|
||||
|
||||
@@ -42,7 +42,8 @@ open class TaskbarViewCallbacksFactory : ResourceBasedOverride {
|
||||
if (contextualSearchInvoked) {
|
||||
val runningPackage =
|
||||
TopTaskTracker.INSTANCE[activity].getCachedTopTask(
|
||||
/* filterOnlyVisibleRecents */ true
|
||||
/* filterOnlyVisibleRecents */ true,
|
||||
activity.display.displayId,
|
||||
)
|
||||
.getPackageName()
|
||||
activity.statsLogManager
|
||||
|
||||
@@ -261,7 +261,8 @@ public final class LauncherActivityInterface extends
|
||||
return launcher != null
|
||||
&& launcher.getStateManager().getState() == OVERVIEW
|
||||
&& launcher.isStarted()
|
||||
&& TopTaskTracker.INSTANCE.get(launcher).getCachedTopTask(false).isHomeTask();
|
||||
&& TopTaskTracker.INSTANCE.get(launcher).getCachedTopTask(false,
|
||||
launcher.getDisplayId()).isHomeTask();
|
||||
}
|
||||
|
||||
private boolean isInMinusOne() {
|
||||
@@ -270,7 +271,8 @@ public final class LauncherActivityInterface extends
|
||||
return launcher != null
|
||||
&& launcher.getStateManager().getState() == NORMAL
|
||||
&& !launcher.isStarted()
|
||||
&& TopTaskTracker.INSTANCE.get(launcher).getCachedTopTask(false).isHomeTask();
|
||||
&& TopTaskTracker.INSTANCE.get(launcher).getCachedTopTask(false,
|
||||
launcher.getDisplayId()).isHomeTask();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -504,7 +504,7 @@ public class RecentTasksList implements WindowManagerProxy.DesktopVisibilityList
|
||||
for (TaskInfo taskInfo : recentTaskInfo.getTaskInfoList()) {
|
||||
Task task = createTask(taskInfo, minimizedTaskIds);
|
||||
List<Task> tasks = perDisplayTasks.computeIfAbsent(
|
||||
ExternalDisplaysKt.getDisplayId(task),
|
||||
ExternalDisplaysKt.getSafeDisplayId(task),
|
||||
k -> new ArrayList<>());
|
||||
tasks.add(task);
|
||||
}
|
||||
|
||||
@@ -22,8 +22,10 @@ import static android.content.Intent.ACTION_CHOOSER;
|
||||
import static android.content.Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS;
|
||||
import static android.view.Display.DEFAULT_DISPLAY;
|
||||
|
||||
import static com.android.launcher3.Flags.enableOverviewOnConnectedDisplays;
|
||||
import static com.android.launcher3.util.SplitConfigurationOptions.STAGE_POSITION_TOP_OR_LEFT;
|
||||
import static com.android.launcher3.util.SplitConfigurationOptions.STAGE_TYPE_A;
|
||||
import static com.android.quickstep.fallback.window.RecentsWindowFlags.enableOverviewOnConnectedDisplays;
|
||||
import static com.android.wm.shell.Flags.enableShellTopTaskTracking;
|
||||
import static com.android.wm.shell.Flags.enableFlexibleSplit;
|
||||
import static com.android.wm.shell.shared.GroupedTaskInfo.TYPE_SPLIT;
|
||||
@@ -47,6 +49,7 @@ import com.android.launcher3.util.SplitConfigurationOptions.StageType;
|
||||
import com.android.launcher3.util.TraceHelper;
|
||||
import com.android.quickstep.dagger.QuickstepBaseAppComponent;
|
||||
import com.android.quickstep.util.DesksUtils;
|
||||
import com.android.quickstep.util.ExternalDisplaysKt;
|
||||
import com.android.systemui.shared.recents.model.Task;
|
||||
import com.android.systemui.shared.recents.model.Task.TaskKey;
|
||||
import com.android.systemui.shared.system.ActivityManagerWrapper;
|
||||
@@ -316,21 +319,26 @@ public class TopTaskTracker extends ISplitScreenListener.Stub implements TaskSta
|
||||
*/
|
||||
@NonNull
|
||||
@UiThread
|
||||
public CachedTaskInfo getCachedTopTask(boolean filterOnlyVisibleRecents) {
|
||||
public CachedTaskInfo getCachedTopTask(boolean filterOnlyVisibleRecents, int displayId) {
|
||||
if (enableShellTopTaskTracking()) {
|
||||
// TODO(346588978): Currently ignore filterOnlyVisibleRecents, but perhaps make this an
|
||||
// explicit filter For things to ignore (ie. PIP/Bubbles/Assistant/etc/so that this is
|
||||
// explicit)
|
||||
// TODO(346588978): This assumes default display as gesture nav is only supported there
|
||||
return new CachedTaskInfo(mVisibleTasks.get(DEFAULT_DISPLAY));
|
||||
return new CachedTaskInfo(mVisibleTasks.get(displayId));
|
||||
} else {
|
||||
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
|
||||
// same.
|
||||
RunningTaskInfo[] tasks = TraceHelper.allowIpcs("getCachedTopTask.true", () ->
|
||||
TaskInfo[] tasks = TraceHelper.allowIpcs("getCachedTopTask.true", () ->
|
||||
ActivityManagerWrapper.getInstance().getRunningTasks(true));
|
||||
return new CachedTaskInfo(Arrays.asList(tasks));
|
||||
if (enableOverviewOnConnectedDisplays()) {
|
||||
return new CachedTaskInfo(Arrays.stream(tasks).filter(
|
||||
info -> ExternalDisplaysKt.getSafeDisplayId(info)
|
||||
== displayId).toList());
|
||||
} else {
|
||||
return new CachedTaskInfo(Arrays.asList(tasks));
|
||||
}
|
||||
}
|
||||
|
||||
if (mOrderedTaskList.isEmpty()) {
|
||||
@@ -344,7 +352,12 @@ public class TopTaskTracker extends ISplitScreenListener.Stub implements TaskSta
|
||||
// Strip the pinned task and recents task
|
||||
tasks.removeIf(t -> t.taskId == mPinnedTaskId || isRecentsTask(t)
|
||||
|| DesksUtils.isDesktopWallpaperTask(t));
|
||||
return new CachedTaskInfo(tasks);
|
||||
if (enableOverviewOnConnectedDisplays()) {
|
||||
return new CachedTaskInfo(tasks.stream().filter(
|
||||
info -> ExternalDisplaysKt.getSafeDisplayId(info) == displayId).toList());
|
||||
} else {
|
||||
return new CachedTaskInfo(tasks);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1089,7 +1089,7 @@ public class TouchInteractionService extends Service {
|
||||
// previousTaskInfo can be null iff previousGestureState == GestureState.DEFAULT_STATE
|
||||
taskInfo = previousTaskInfo != null
|
||||
? previousTaskInfo
|
||||
: TopTaskTracker.INSTANCE.get(this).getCachedTopTask(false);
|
||||
: TopTaskTracker.INSTANCE.get(this).getCachedTopTask(false, displayId);
|
||||
gestureState.updateRunningTask(taskInfo);
|
||||
gestureState.updateLastStartedTaskIds(previousGestureState.getLastStartedTaskIds());
|
||||
gestureState.updatePreviouslyAppearedTaskIds(
|
||||
@@ -1099,7 +1099,7 @@ public class TouchInteractionService extends Service {
|
||||
mOverviewComponentObserver,
|
||||
displayId,
|
||||
ActiveGestureLog.INSTANCE.incrementLogId());
|
||||
taskInfo = TopTaskTracker.INSTANCE.get(this).getCachedTopTask(false);
|
||||
taskInfo = TopTaskTracker.INSTANCE.get(this).getCachedTopTask(false, displayId);
|
||||
gestureState.updateRunningTask(taskInfo);
|
||||
}
|
||||
gestureState.setTrackpadGestureType(trackpadGestureType);
|
||||
|
||||
@@ -88,7 +88,7 @@ public class NavHandleLongPressHandler implements ResourceBasedOverride {
|
||||
*/
|
||||
@Nullable
|
||||
@VisibleForTesting
|
||||
final Runnable getLongPressRunnable(NavHandle navHandle) {
|
||||
final Runnable getLongPressRunnable(NavHandle navHandle, int displayId) {
|
||||
if (!isContextualSearchEntrypointEnabled(navHandle)) {
|
||||
Log.i(TAG, "Contextual Search invocation failed: entry point disabled");
|
||||
mVibratorWrapper.cancelVibrate();
|
||||
@@ -116,7 +116,7 @@ public class NavHandleLongPressHandler implements ResourceBasedOverride {
|
||||
Log.i(TAG, "Contextual Search invocation successful");
|
||||
|
||||
String runningPackage = TopTaskTracker.INSTANCE.get(mContext).getCachedTopTask(
|
||||
/* filterOnlyVisibleRecents */ true).getPackageName();
|
||||
/* filterOnlyVisibleRecents */ true, displayId).getPackageName();
|
||||
mStatsLogManager.logger().withPackageName(runningPackage)
|
||||
.log(LAUNCHER_LAUNCH_ASSISTANT_SUCCESSFUL_NAV_HANDLE);
|
||||
} else {
|
||||
|
||||
+4
-3
@@ -214,7 +214,7 @@ public class NavHandleLongPressInputConsumer extends DelegateInputConsumer {
|
||||
&& !mDeepPressLogged) {
|
||||
// Log deep press even if feature is disabled.
|
||||
String runningPackage = mTopTaskTracker.getCachedTopTask(
|
||||
/* filterOnlyVisibleRecents */ true).getPackageName();
|
||||
/* filterOnlyVisibleRecents */ true, getDisplayId()).getPackageName();
|
||||
mStatsLogManager.logger().withPackageName(runningPackage).log(
|
||||
mNavHandle.isNavHandleStashedTaskbar() ? LAUNCHER_DEEP_PRESS_STASHED_TASKBAR
|
||||
: LAUNCHER_DEEP_PRESS_NAVBAR);
|
||||
@@ -233,12 +233,13 @@ public class NavHandleLongPressInputConsumer extends DelegateInputConsumer {
|
||||
Log.d(TAG, "triggerLongPress");
|
||||
}
|
||||
String runningPackage = mTopTaskTracker.getCachedTopTask(
|
||||
/* filterOnlyVisibleRecents */ true).getPackageName();
|
||||
/* filterOnlyVisibleRecents */ true, getDisplayId()).getPackageName();
|
||||
mStatsLogManager.logger().withPackageName(runningPackage).log(
|
||||
mNavHandle.isNavHandleStashedTaskbar() ? LAUNCHER_LONG_PRESS_STASHED_TASKBAR
|
||||
: LAUNCHER_LONG_PRESS_NAVBAR);
|
||||
|
||||
Runnable longPressRunnable = mNavHandleLongPressHandler.getLongPressRunnable(mNavHandle);
|
||||
Runnable longPressRunnable = mNavHandleLongPressHandler.getLongPressRunnable(mNavHandle,
|
||||
getDisplayId());
|
||||
if (longPressRunnable == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -32,7 +32,6 @@ import static com.android.wm.shell.shared.split.SplitScreenConstants.SNAP_TO_NON
|
||||
import static com.android.wm.shell.shared.split.SplitScreenConstants.getIndex;
|
||||
import static com.android.wm.shell.shared.split.SplitScreenConstants.isPersistentSnapPosition;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.LauncherApps;
|
||||
import android.util.Log;
|
||||
@@ -93,10 +92,10 @@ public class AppPairsController {
|
||||
private static final int BITMASK_SIZE = 16;
|
||||
private static final int BITMASK_FOR_SNAP_POSITION = (1 << BITMASK_SIZE) - 1;
|
||||
|
||||
private Context mContext;
|
||||
private ActivityContext mContext;
|
||||
private final SplitSelectStateController mSplitSelectStateController;
|
||||
private final StatsLogManager mStatsLogManager;
|
||||
public AppPairsController(Context context,
|
||||
public AppPairsController(ActivityContext context,
|
||||
SplitSelectStateController splitSelectStateController,
|
||||
StatsLogManager statsLogManager) {
|
||||
mContext = context;
|
||||
@@ -208,7 +207,7 @@ public class AppPairsController {
|
||||
}
|
||||
AppPairInfo newAppPair = new AppPairInfo(apps);
|
||||
|
||||
IconCache iconCache = LauncherAppState.getInstance(mContext).getIconCache();
|
||||
IconCache iconCache = LauncherAppState.getInstance(mContext.asContext()).getIconCache();
|
||||
MODEL_EXECUTOR.execute(() -> {
|
||||
newAppPair.getAppContents().forEach(member -> {
|
||||
member.title = "";
|
||||
@@ -216,8 +215,8 @@ public class AppPairsController {
|
||||
iconCache.getTitleAndIcon(member, member.getMatchingLookupFlag());
|
||||
});
|
||||
MAIN_EXECUTOR.execute(() -> {
|
||||
LauncherAccessibilityDelegate delegate =
|
||||
QuickstepLauncher.getLauncher(mContext).getAccessibilityDelegate();
|
||||
LauncherAccessibilityDelegate delegate = QuickstepLauncher.getLauncher(
|
||||
mContext.asContext()).getAccessibilityDelegate();
|
||||
if (delegate != null) {
|
||||
delegate.addToWorkspace(newAppPair, true, (success) -> {
|
||||
if (success) {
|
||||
@@ -300,7 +299,7 @@ public class AppPairsController {
|
||||
*/
|
||||
@Nullable
|
||||
private AppInfo resolveAppInfoByComponent(@NonNull ComponentKey key) {
|
||||
AllAppsStore appsStore = ActivityContext.lookupContext(mContext)
|
||||
AllAppsStore appsStore = ActivityContext.lookupContext(mContext.asContext())
|
||||
.getAppsView().getAppsStore();
|
||||
|
||||
// First look up the app info in order of:
|
||||
@@ -326,7 +325,7 @@ public class AppPairsController {
|
||||
if (appInfo == null) {
|
||||
return null;
|
||||
}
|
||||
return appInfo.makeWorkspaceItem(mContext);
|
||||
return appInfo.makeWorkspaceItem(mContext.asContext());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -418,7 +417,7 @@ public class AppPairsController {
|
||||
} else {
|
||||
// Tapped an app pair while in a single app
|
||||
final TopTaskTracker.CachedTaskInfo runningTask = topTaskTracker
|
||||
.getCachedTopTask(false /* filterOnlyVisibleRecents */);
|
||||
.getCachedTopTask(false /* filterOnlyVisibleRecents */, context.getDisplayId());
|
||||
|
||||
mSplitSelectStateController.findLastActiveTasksAndRunCallback(
|
||||
componentKeys,
|
||||
@@ -548,6 +547,6 @@ public class AppPairsController {
|
||||
*/
|
||||
@VisibleForTesting
|
||||
public TopTaskTracker getTopTaskTracker() {
|
||||
return TopTaskTracker.INSTANCE.get(mContext);
|
||||
return TopTaskTracker.INSTANCE.get(mContext.asContext());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -87,7 +87,8 @@ internal constructor(
|
||||
if (success) {
|
||||
val runningPackage =
|
||||
TopTaskTracker.INSTANCE[context].getCachedTopTask(
|
||||
/* filterOnlyVisibleRecents */ true
|
||||
/* filterOnlyVisibleRecents */ true,
|
||||
DEFAULT_DISPLAY,
|
||||
)
|
||||
.getPackageName()
|
||||
statsLogManager
|
||||
|
||||
@@ -18,6 +18,7 @@ package com.android.quickstep.util;
|
||||
import static android.app.contextualsearch.ContextualSearchManager.ACTION_LAUNCH_CONTEXTUAL_SEARCH;
|
||||
import static android.app.contextualsearch.ContextualSearchManager.ENTRYPOINT_SYSTEM_ACTION;
|
||||
import static android.app.contextualsearch.ContextualSearchManager.FEATURE_CONTEXTUAL_SEARCH;
|
||||
import static android.view.Display.DEFAULT_DISPLAY;
|
||||
|
||||
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_LAUNCH_OMNI_SUCCESSFUL_SYSTEM_ACTION;
|
||||
import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR;
|
||||
@@ -244,7 +245,8 @@ public class ContextualSearchStateManager {
|
||||
ENTRYPOINT_SYSTEM_ACTION);
|
||||
if (contextualSearchInvoked) {
|
||||
String runningPackage = mTopTaskTracker.getCachedTopTask(
|
||||
/* filterOnlyVisibleRecents */ true).getPackageName();
|
||||
/* filterOnlyVisibleRecents */ true,
|
||||
DEFAULT_DISPLAY).getPackageName();
|
||||
StatsLogManager.newInstance(mContext).logger()
|
||||
.withPackageName(runningPackage)
|
||||
.log(LAUNCHER_LAUNCH_OMNI_SUCCESSFUL_SYSTEM_ACTION);
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package com.android.quickstep.util
|
||||
|
||||
import android.app.TaskInfo
|
||||
import android.view.Display.DEFAULT_DISPLAY
|
||||
import android.view.Display.INVALID_DISPLAY
|
||||
import com.android.systemui.shared.recents.model.Task
|
||||
@@ -24,10 +25,9 @@ import com.android.systemui.shared.recents.model.Task
|
||||
val Int.isExternalDisplay
|
||||
get() = this != DEFAULT_DISPLAY
|
||||
|
||||
/** Returns displayId of this [Task], default to [DEFAULT_DISPLAY] */
|
||||
val Task?.displayId
|
||||
val Int?.safeDisplayId
|
||||
get() =
|
||||
this?.key?.displayId.let { displayId ->
|
||||
this.let { displayId ->
|
||||
when (displayId) {
|
||||
null -> DEFAULT_DISPLAY
|
||||
INVALID_DISPLAY -> DEFAULT_DISPLAY
|
||||
@@ -35,6 +35,14 @@ val Task?.displayId
|
||||
}
|
||||
}
|
||||
|
||||
/** Returns displayId of this [Task], default to [DEFAULT_DISPLAY] */
|
||||
val Task?.safeDisplayId
|
||||
get() = this?.key?.displayId.safeDisplayId
|
||||
|
||||
/** Returns if this task belongs tto [DEFAULT_DISPLAY] */
|
||||
val Task?.isExternalDisplay
|
||||
get() = displayId.isExternalDisplay
|
||||
get() = safeDisplayId.isExternalDisplay
|
||||
|
||||
/** Returns displayId of this [TaskInfo], default to [DEFAULT_DISPLAY] */
|
||||
val TaskInfo?.safeDisplayId
|
||||
get() = this?.displayId.safeDisplayId
|
||||
|
||||
@@ -195,7 +195,7 @@ public class SplitSelectStateController {
|
||||
mRecentTasksModel = recentsModel;
|
||||
mActivityBackCallback = activityBackCallback;
|
||||
mSplitAnimationController = new SplitAnimationController(this);
|
||||
mAppPairsController = new AppPairsController(mContainer.asContext(), this, statsLogManager);
|
||||
mAppPairsController = new AppPairsController(mContainer, this, statsLogManager);
|
||||
mSplitSelectDataHolder = new SplitSelectDataHolder(mContainer.asContext());
|
||||
}
|
||||
|
||||
|
||||
@@ -97,8 +97,8 @@ import com.android.quickstep.util.BorderAnimator.Companion.createSimpleBorderAni
|
||||
import com.android.quickstep.util.RecentsOrientedState
|
||||
import com.android.quickstep.util.TaskCornerRadius
|
||||
import com.android.quickstep.util.TaskRemovedDuringLaunchListener
|
||||
import com.android.quickstep.util.displayId
|
||||
import com.android.quickstep.util.isExternalDisplay
|
||||
import com.android.quickstep.util.safeDisplayId
|
||||
import com.android.quickstep.views.IconAppChipView.AppChipStatus
|
||||
import com.android.quickstep.views.OverviewActionsView.DISABLED_NO_THUMBNAIL
|
||||
import com.android.quickstep.views.OverviewActionsView.DISABLED_ROTATED
|
||||
@@ -155,7 +155,7 @@ constructor(
|
||||
get() = this === recentsView?.selectedTaskView
|
||||
|
||||
open val displayId: Int
|
||||
get() = taskContainers.firstOrNull()?.task.displayId
|
||||
get() = taskContainers.firstOrNull()?.task.safeDisplayId
|
||||
|
||||
val isExternalDisplay: Boolean
|
||||
get() = displayId.isExternalDisplay
|
||||
|
||||
+4
-2
@@ -36,6 +36,7 @@ import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyBoolean;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.ArgumentMatchers.anyLong;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.times;
|
||||
@@ -105,11 +106,12 @@ public class NavHandleLongPressInputConsumerTest {
|
||||
@Before
|
||||
public void setup() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
when(mTopTaskTracker.getCachedTopTask(anyBoolean())).thenReturn(mTaskInfo);
|
||||
when(mTopTaskTracker.getCachedTopTask(anyBoolean(), anyInt())).thenReturn(mTaskInfo);
|
||||
when(mDeviceState.getSquaredTouchSlop()).thenReturn(SQUARED_TOUCH_SLOP);
|
||||
when(mDelegate.allowInterceptByParent()).thenReturn(true);
|
||||
mLongPressTriggered.set(false);
|
||||
when(mNavHandleLongPressHandler.getLongPressRunnable(any())).thenReturn(mLongPressRunnable);
|
||||
when(mNavHandleLongPressHandler.getLongPressRunnable(any(), anyInt())).thenReturn(
|
||||
mLongPressRunnable);
|
||||
when(mStatsLogger.withPackageName(any())).thenReturn(mStatsLogger);
|
||||
when(mStatsLatencyLogger.withInstanceId(any())).thenReturn(mStatsLatencyLogger);
|
||||
when(mStatsLatencyLogger.withLatency(anyLong())).thenReturn(mStatsLatencyLogger);
|
||||
|
||||
+8
-3
@@ -17,8 +17,9 @@
|
||||
package com.android.quickstep.util
|
||||
|
||||
import android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM
|
||||
import android.content.Context
|
||||
import android.content.res.Resources
|
||||
import android.view.Display
|
||||
import android.view.Display.DEFAULT_DISPLAY
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import com.android.launcher3.apppairs.AppPairIcon
|
||||
import com.android.launcher3.logging.StatsLogManager
|
||||
@@ -26,6 +27,7 @@ import com.android.launcher3.model.data.ItemInfo
|
||||
import com.android.launcher3.taskbar.TaskbarActivityContext
|
||||
import com.android.launcher3.util.SplitConfigurationOptions.STAGE_POSITION_BOTTOM_OR_RIGHT
|
||||
import com.android.launcher3.util.SplitConfigurationOptions.STAGE_POSITION_TOP_OR_LEFT
|
||||
import com.android.launcher3.views.ActivityContext
|
||||
import com.android.quickstep.TopTaskTracker
|
||||
import com.android.quickstep.TopTaskTracker.CachedTaskInfo
|
||||
import com.android.systemui.shared.recents.model.Task
|
||||
@@ -56,7 +58,7 @@ import org.mockito.kotlin.whenever
|
||||
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class AppPairsControllerTest {
|
||||
@Mock lateinit var context: Context
|
||||
@Mock lateinit var context: ActivityContext
|
||||
@Mock lateinit var resources: Resources
|
||||
@Mock lateinit var splitSelectStateController: SplitSelectStateController
|
||||
@Mock lateinit var statsLogManager: StatsLogManager
|
||||
@@ -83,6 +85,7 @@ class AppPairsControllerTest {
|
||||
}
|
||||
|
||||
@Mock lateinit var mockAppPairIcon: AppPairIcon
|
||||
@Mock lateinit var mockDisplay: Display
|
||||
@Mock lateinit var mockTaskbarActivityContext: TaskbarActivityContext
|
||||
@Mock lateinit var mockTopTaskTracker: TopTaskTracker
|
||||
@Mock lateinit var mockCachedTaskInfo: CachedTaskInfo
|
||||
@@ -105,8 +108,10 @@ class AppPairsControllerTest {
|
||||
// Stub methods on appPairsController so that they return mocks
|
||||
spyAppPairsController = spy(appPairsController)
|
||||
whenever(mockAppPairIcon.context).thenReturn(mockTaskbarActivityContext)
|
||||
whenever(mockAppPairIcon.display).thenReturn(mockDisplay)
|
||||
whenever(mockDisplay.displayId).thenReturn(DEFAULT_DISPLAY)
|
||||
doReturn(mockTopTaskTracker).whenever(spyAppPairsController).topTaskTracker
|
||||
whenever(mockTopTaskTracker.getCachedTopTask(any())).thenReturn(mockCachedTaskInfo)
|
||||
whenever(mockTopTaskTracker.getCachedTopTask(any(), any())).thenReturn(mockCachedTaskInfo)
|
||||
whenever(mockTask1.getKey()).thenReturn(mockTaskKey1)
|
||||
whenever(mockTask2.getKey()).thenReturn(mockTaskKey2)
|
||||
doNothing().whenever(spyAppPairsController).launchAppPair(any(), any())
|
||||
|
||||
Reference in New Issue
Block a user