Remove references to FEATURE_PC and related Desktop classes in Launcher

Also clean up TaskbarRecentAppsController APIs

Flag: NA
Test: DesktopTaskbarRunningAppsControllerTest
Bug: 330551930
Change-Id: Ibd9c3d6aa1d5423b51a48ed0a972196752d5199a
This commit is contained in:
Gustav Sennton
2024-04-18 15:04:15 +00:00
parent 43f65905ab
commit 0eaf9ebdaa
11 changed files with 52 additions and 393 deletions
@@ -1,88 +0,0 @@
/*
* Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.launcher3.taskbar;
import static com.android.launcher3.taskbar.TaskbarNavButtonController.BUTTON_NOTIFICATIONS;
import static com.android.launcher3.taskbar.TaskbarNavButtonController.BUTTON_QUICK_SETTINGS;
import android.content.Context;
import android.content.pm.ActivityInfo.Config;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import androidx.annotation.Nullable;
import com.android.launcher3.R;
import com.android.launcher3.taskbar.navbutton.NearestTouchFrame;
/**
* Controller for managing buttons and status icons in taskbar in a desktop environment.
*/
public class DesktopNavbarButtonsViewController extends NavbarButtonsViewController {
private final TaskbarActivityContext mContext;
private final FrameLayout mNavButtonsView;
private final ViewGroup mNavButtonContainer;
private final ViewGroup mStartContextualContainer;
private final View mAllAppsButton;
private TaskbarControllers mControllers;
public DesktopNavbarButtonsViewController(TaskbarActivityContext context,
@Nullable Context navigationBarPanelContext, NearestTouchFrame navButtonsView) {
super(context, navigationBarPanelContext, navButtonsView);
mContext = context;
mNavButtonsView = navButtonsView;
mNavButtonContainer = mNavButtonsView.findViewById(R.id.end_nav_buttons);
mStartContextualContainer = mNavButtonsView.findViewById(R.id.start_contextual_buttons);
mAllAppsButton = LayoutInflater.from(context)
.inflate(R.layout.taskbar_all_apps_button, mStartContextualContainer, false);
mAllAppsButton.setOnClickListener(v -> mControllers.taskbarAllAppsController.toggle());
}
/**
* Initializes the controller
*/
@Override
public void init(TaskbarControllers controllers) {
mControllers = controllers;
super.init(controllers);
}
@Override
protected void setupController() {
mNavButtonsView.getLayoutParams().height = mContext.getDeviceProfile().taskbarHeight;
// Quick settings and notifications buttons
addButton(R.drawable.ic_sysbar_quick_settings, BUTTON_QUICK_SETTINGS,
mNavButtonContainer, mControllers.navButtonController,
R.id.quick_settings_button);
addButton(R.drawable.ic_sysbar_notifications, BUTTON_NOTIFICATIONS,
mNavButtonContainer, mControllers.navButtonController,
R.id.notifications_button);
// All apps button
mStartContextualContainer.addView(mAllAppsButton);
}
/** Cleans up on destroy */
@Override
public void onDestroy() { }
@Override
public void onConfigurationChanged(@Config int configChanges) { }
}
@@ -1,153 +0,0 @@
/*
* Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.launcher3.taskbar;
import android.app.ActivityManager;
import android.content.ComponentName;
import android.util.SparseArray;
import com.android.launcher3.model.data.AppInfo;
import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.model.data.WorkspaceItemInfo;
import com.android.quickstep.RecentsModel;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
/**
* Provides recent apps functionality specifically in a desktop environment.
*/
public class DesktopTaskbarRecentAppsController extends TaskbarRecentAppsController {
private final TaskbarActivityContext mContext;
private ArrayList<ItemInfo> mRunningApps = new ArrayList<>();
private AppInfo[] mApps;
public DesktopTaskbarRecentAppsController(TaskbarActivityContext context) {
mContext = context;
}
@Override
protected void onDestroy() {
super.onDestroy();
mApps = null;
}
@Override
protected void setApps(AppInfo[] apps) {
mApps = apps;
}
@Override
protected boolean isEnabled() {
return true;
}
/**
* Set mRunningApps to hold currently running applications using the list of currently running
* tasks. Filtering is also done to ignore applications that are already on the taskbar in the
* original hotseat.
*/
@Override
protected void updateRunningApps(SparseArray<ItemInfo> hotseatItems) {
ArrayList<AppInfo> runningApps = getRunningAppsFromTasks();
ArrayList<ItemInfo> filteredRunningApps = new ArrayList<>();
for (AppInfo runningApp : runningApps) {
boolean shouldAddOnTaskbar = true;
for (int i = 0; i < hotseatItems.size(); i++) {
if (hotseatItems.keyAt(i) >= mControllers.taskbarActivityContext.getDeviceProfile()
.numShownHotseatIcons) {
break;
}
if (hotseatItems.valueAt(i).getTargetPackage()
.equals(runningApp.getTargetPackage())) {
shouldAddOnTaskbar = false;
break;
}
}
if (shouldAddOnTaskbar) {
filteredRunningApps.add(new WorkspaceItemInfo(runningApp));
}
}
mRunningApps = filteredRunningApps;
mControllers.taskbarViewController.commitRunningAppsToUI();
}
/**
* Returns a copy of hotseatItems with the addition of currently running applications.
*/
@Override
protected ItemInfo[] updateHotseatItemInfos(ItemInfo[] hotseatItemInfos) {
// hotseatItemInfos.length would be 0 if deviceProfile.numShownHotseatIcons is 0, so we
// don't want to show anything in the hotseat
if (hotseatItemInfos.length == 0) return hotseatItemInfos;
int runningAppsIndex = 0;
ItemInfo[] newHotseatItemsInfo = Arrays.copyOf(
hotseatItemInfos, hotseatItemInfos.length + mRunningApps.size());
for (int i = hotseatItemInfos.length; i < newHotseatItemsInfo.length; i++) {
newHotseatItemsInfo[i] = mRunningApps.get(runningAppsIndex);
runningAppsIndex++;
}
return newHotseatItemsInfo;
}
/**
* Returns a list of running applications from the list of currently running tasks.
*/
private ArrayList<AppInfo> getRunningAppsFromTasks() {
ArrayList<ActivityManager.RunningTaskInfo> tasks =
RecentsModel.INSTANCE.get(mContext).getRunningTasks();
ArrayList<AppInfo> runningApps = new ArrayList<>();
// early return if apps is empty, since we would have no AppInfo to compare
if (mApps == null) {
return runningApps;
}
Set<String> seenPackages = new HashSet<>();
for (ActivityManager.RunningTaskInfo taskInfo : tasks) {
if (taskInfo.realActivity == null) continue;
// If a different task for the same package has already been handled, skip this one
String taskPackage = taskInfo.realActivity.getPackageName();
if (seenPackages.contains(taskPackage)) continue;
// Otherwise, get the corresponding AppInfo and add it to the list
seenPackages.add(taskPackage);
AppInfo app = getAppInfo(taskInfo.realActivity);
if (app == null) continue;
runningApps.add(app);
}
return runningApps;
}
/**
* Retrieves the corresponding AppInfo for the activity.
*/
private AppInfo getAppInfo(ComponentName activity) {
String packageName = activity.getPackageName();
for (AppInfo app : mApps) {
if (!packageName.equals(app.getTargetPackage())) {
continue;
}
return app;
}
return null;
}
}
@@ -45,7 +45,6 @@ class DesktopTaskbarRunningAppsController(
private var apps: Array<AppInfo>? = null
private var allRunningDesktopAppInfos: List<AppInfo>? = null
private var runningDesktopAppInfosExceptHotseatItems: List<ItemInfo>? = null
private val isInDesktopMode: Boolean
get() = desktopVisibilityController?.areDesktopTasksVisible() ?: false
@@ -63,20 +62,24 @@ class DesktopTaskbarRunningAppsController(
override fun isEnabled() = true
@VisibleForTesting
public override fun updateHotseatItemInfos(hotseatItems: Array<ItemInfo>?): Array<ItemInfo>? {
val actualHotseatItems = hotseatItems ?: return super.updateHotseatItemInfos(null)
public override fun updateHotseatItemInfos(hotseatItems: Array<ItemInfo?>): Array<ItemInfo?> {
if (!isInDesktopMode) {
Log.d(TAG, "updateHotseatItemInfos: not in Desktop Mode")
return hotseatItems
}
val newHotseatItemInfos =
actualHotseatItems
hotseatItems
.filterNotNull()
// Ignore predicted apps - we show running apps instead
.filter { itemInfo -> !itemInfo.isPredictedItem }
.toMutableList()
val runningDesktopAppInfos =
runningDesktopAppInfosExceptHotseatItems ?: return newHotseatItemInfos.toTypedArray()
newHotseatItemInfos.addAll(runningDesktopAppInfos)
allRunningDesktopAppInfos?.let {
getRunningDesktopAppInfosExceptHotseatApps(it, newHotseatItemInfos.toList())
}
if (runningDesktopAppInfos != null) {
newHotseatItemInfos.addAll(runningDesktopAppInfos)
}
return newHotseatItemInfos.toTypedArray()
}
@@ -88,19 +91,13 @@ class DesktopTaskbarRunningAppsController(
}
@VisibleForTesting
public override fun updateRunningApps(hotseatItems: SparseArray<ItemInfo>?) {
public override fun updateRunningApps() {
if (!isInDesktopMode) {
Log.d(TAG, "updateRunningApps: not in Desktop Mode")
mControllers.taskbarViewController.commitRunningAppsToUI()
return
}
val allRunningDesktopAppInfos = getRunningDesktopAppInfos()
this.allRunningDesktopAppInfos = allRunningDesktopAppInfos
runningDesktopAppInfosExceptHotseatItems =
hotseatItems?.let {
getRunningDesktopAppInfosExceptHotseatApps(allRunningDesktopAppInfos, it.toList())
}
allRunningDesktopAppInfos = getRunningDesktopAppInfos()
mControllers.taskbarViewController.commitRunningAppsToUI()
}
@@ -1,62 +0,0 @@
/*
* Copyright (C) 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.launcher3.taskbar;
import androidx.annotation.Nullable;
import com.android.launcher3.uioverrides.QuickstepLauncher;
import com.android.quickstep.util.TISBindHelper;
/**
* A data source which integrates with a Launcher instance, used specifically for a
* desktop environment.
*/
public class DesktopTaskbarUIController extends TaskbarUIController {
private final QuickstepLauncher mLauncher;
public DesktopTaskbarUIController(QuickstepLauncher launcher) {
mLauncher = launcher;
}
@SuppressWarnings("MissingSuperCall") // TODO: Fix me
@Override
protected void init(TaskbarControllers taskbarControllers) {
super.init(taskbarControllers);
mLauncher.getHotseat().setIconsAlpha(0f);
mControllers.taskbarViewController.updateRunningApps();
}
@SuppressWarnings("MissingSuperCall") // TODO: Fix me
@Override
protected void onDestroy() {
super.onDestroy();
mLauncher.getHotseat().setIconsAlpha(1f);
}
/** Disable taskbar stashing in desktop environment. */
@Override
public boolean supportsVisualStashing() {
return false;
}
@Nullable
@Override
protected TISBindHelper getTISBindHelper() {
return mLauncher.getTISBindHelper();
}
}
@@ -15,7 +15,6 @@
*/
package com.android.launcher3.taskbar;
import static android.content.pm.PackageManager.FEATURE_PC;
import static android.os.Trace.TRACE_TAG_APP;
import static android.view.Display.DEFAULT_DISPLAY;
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
@@ -248,8 +247,6 @@ public class TaskbarActivityContext extends BaseTaskbarContext {
mAccessibilityDelegate = new TaskbarShortcutMenuAccessibilityDelegate(this);
final boolean isPcMode = getPackageManager().hasSystemFeature(FEATURE_PC);
// If Bubble bar is present, TaskbarControllers depends on it so build it first.
Optional<BubbleControllers> bubbleControllersOptional = Optional.empty();
BubbleBarController.onTaskbarRecreated();
@@ -280,11 +277,7 @@ public class TaskbarActivityContext extends BaseTaskbarContext {
mControllers = new TaskbarControllers(this,
new TaskbarDragController(this),
buttonController,
isPcMode
? new DesktopNavbarButtonsViewController(this, mNavigationBarPanelContext,
navButtonsView)
: new NavbarButtonsViewController(this, mNavigationBarPanelContext,
navButtonsView),
new NavbarButtonsViewController(this, mNavigationBarPanelContext, navButtonsView),
rotationButtonController,
new TaskbarDragLayerController(this, mDragLayer),
new TaskbarViewController(this, taskbarView),
@@ -305,7 +298,7 @@ public class TaskbarActivityContext extends BaseTaskbarContext {
new VoiceInteractionWindowController(this),
new TaskbarTranslationController(this),
new TaskbarSpringOnStashController(this),
createTaskbarRecentAppsController(isPcMode),
createTaskbarRecentAppsController(),
TaskbarEduTooltipController.newInstance(this),
new KeyboardQuickSwitchController(),
new TaskbarPinningController(this),
@@ -314,16 +307,14 @@ public class TaskbarActivityContext extends BaseTaskbarContext {
mLauncherPrefs = LauncherPrefs.get(this);
}
private TaskbarRecentAppsController createTaskbarRecentAppsController(boolean isPcMode) {
if (isPcMode) return new DesktopTaskbarRecentAppsController(this);
private TaskbarRecentAppsController createTaskbarRecentAppsController() {
// TODO(b/335401172): unify DesktopMode checks in Launcher
final boolean showRunningAppsInDesktopMode = enableDesktopWindowingMode()
&& enableDesktopWindowingTaskbarRunningApps();
return showRunningAppsInDesktopMode
? new DesktopTaskbarRunningAppsController(
RecentsModel.INSTANCE.get(this),
LauncherActivityInterface.INSTANCE.getDesktopVisibilityController())
: TaskbarRecentAppsController.DEFAULT;
if (enableDesktopWindowingMode() && enableDesktopWindowingTaskbarRunningApps()) {
return new DesktopTaskbarRunningAppsController(
RecentsModel.INSTANCE.get(this),
LauncherActivityInterface.INSTANCE.getDesktopVisibilityController());
}
return TaskbarRecentAppsController.DEFAULT;
}
/** Updates {@link DeviceProfile} instances for any Taskbar windows. */
@@ -16,7 +16,6 @@
package com.android.launcher3.taskbar;
import static android.content.Context.RECEIVER_NOT_EXPORTED;
import static android.content.pm.PackageManager.FEATURE_PC;
import static android.view.Display.DEFAULT_DISPLAY;
import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR;
import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL;
@@ -426,9 +425,6 @@ public class TaskbarManager {
*/
private TaskbarUIController createTaskbarUIControllerForActivity(StatefulActivity activity) {
if (activity instanceof QuickstepLauncher) {
if (mTaskbarActivityContext.getPackageManager().hasSystemFeature(FEATURE_PC)) {
return new DesktopTaskbarUIController((QuickstepLauncher) activity);
}
return new LauncherTaskbarUIController((QuickstepLauncher) activity);
}
if (activity instanceof RecentsActivity) {
@@ -279,7 +279,7 @@ public class TaskbarModelCallbacks implements
/** Call TaskbarRecentAppsController to update running apps with mHotseatItems. */
public void updateRunningApps() {
mControllers.taskbarRecentAppsController.updateRunningApps(mHotseatItems);
mControllers.taskbarRecentAppsController.updateRunningApps();
}
@Override
@@ -17,9 +17,8 @@ package com.android.launcher3.taskbar;
import static java.util.Collections.emptySet;
import android.util.SparseArray;
import androidx.annotation.CallSuper;
import androidx.annotation.NonNull;
import com.android.launcher3.model.data.AppInfo;
import com.android.launcher3.model.data.ItemInfo;
@@ -59,13 +58,12 @@ public class TaskbarRecentAppsController {
}
/** Called to update hotseatItems, no-op except in desktop environment. */
protected ItemInfo[] updateHotseatItemInfos(ItemInfo[] hotseatItems) {
protected ItemInfo[] updateHotseatItemInfos(@NonNull ItemInfo[] hotseatItems) {
return hotseatItems;
}
/** Called to update the list of currently running apps, no-op except in desktop environment. */
protected void updateRunningApps(SparseArray<ItemInfo> hotseatItems) {
}
protected void updateRunningApps() {}
/** Returns the currently running apps, or an empty Set if outside of Desktop environment. */
public Set<String> getRunningApps() {
@@ -15,7 +15,6 @@
*/
package com.android.launcher3.taskbar;
import static android.content.pm.PackageManager.FEATURE_PC;
import static android.view.accessibility.AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED;
import static com.android.launcher3.BubbleTextView.DISPLAY_TASKBAR;
@@ -157,23 +156,21 @@ public class TaskbarView extends FrameLayout implements FolderIcon.FolderIconPar
// Needed to draw folder leave-behind when opening one.
setWillNotDraw(false);
if (!mActivityContext.getPackageManager().hasSystemFeature(FEATURE_PC)) {
mAllAppsButton = (IconButtonView) LayoutInflater.from(context)
.inflate(R.layout.taskbar_all_apps_button, this, false);
mAllAppsButton.setIconDrawable(resources.getDrawable(
getAllAppsButton(isTransientTaskbar)));
mAllAppsButton.setPadding(mItemPadding, mItemPadding, mItemPadding, mItemPadding);
mAllAppsButton.setForegroundTint(
mActivityContext.getColor(R.color.all_apps_button_color));
mAllAppsButton = (IconButtonView) LayoutInflater.from(context)
.inflate(R.layout.taskbar_all_apps_button, this, false);
mAllAppsButton.setIconDrawable(resources.getDrawable(
getAllAppsButton(isTransientTaskbar)));
mAllAppsButton.setPadding(mItemPadding, mItemPadding, mItemPadding, mItemPadding);
mAllAppsButton.setForegroundTint(
mActivityContext.getColor(R.color.all_apps_button_color));
if (enableTaskbarPinning()) {
mTaskbarDivider = (IconButtonView) LayoutInflater.from(context).inflate(
R.layout.taskbar_divider,
this, false);
mTaskbarDivider.setIconDrawable(
resources.getDrawable(R.drawable.taskbar_divider_button));
mTaskbarDivider.setPadding(mItemPadding, mItemPadding, mItemPadding, mItemPadding);
}
if (enableTaskbarPinning()) {
mTaskbarDivider = (IconButtonView) LayoutInflater.from(context).inflate(
R.layout.taskbar_divider,
this, false);
mTaskbarDivider.setIconDrawable(
resources.getDrawable(R.drawable.taskbar_divider_button));
mTaskbarDivider.setPadding(mItemPadding, mItemPadding, mItemPadding, mItemPadding);
}
// TODO: Disable touch events on QSB otherwise it can crash.
@@ -16,7 +16,6 @@
package com.android.quickstep;
import static android.app.ActivityManager.RECENT_IGNORE_UNAVAILABLE;
import static android.content.pm.PackageManager.FEATURE_PC;
import static com.android.launcher3.Flags.enableUnfoldStateAnimation;
import static com.android.launcher3.util.Executors.MAIN_EXECUTOR;
@@ -1385,8 +1384,7 @@ public class SystemUiProxy implements ISystemUiProxy, NavHandle, SafeCloseable {
private boolean shouldEnableRunningTasksForDesktopMode() {
// TODO(b/335401172): unify DesktopMode checks in Launcher
return (enableDesktopWindowingMode() && enableDesktopWindowingTaskbarRunningApps())
|| mContext.getPackageManager().hasSystemFeature(FEATURE_PC);
return enableDesktopWindowingMode() && enableDesktopWindowingTaskbarRunningApps();
}
private boolean handleMessageAsync(Message msg) {
@@ -23,7 +23,6 @@ import android.content.Intent
import android.os.Process
import android.os.UserHandle
import android.testing.AndroidTestingRunner
import android.util.SparseArray
import com.android.launcher3.model.data.AppInfo
import com.android.launcher3.model.data.ItemInfo
import com.android.launcher3.statehandlers.DesktopVisibilityController
@@ -62,21 +61,14 @@ class DesktopTaskbarRunningAppsControllerTest : TaskbarBaseTestCase() {
)
}
@Test
fun updateHotseatItemInfos_null_returnsNull() {
assertThat(taskbarRunningAppsController.updateHotseatItemInfos(/* hotseatItems= */ null))
.isNull()
}
@Test
fun updateHotseatItemInfos_notInDesktopMode_returnsExistingHotseatItems() {
setInDesktopMode(false)
val hotseatItems =
createHotseatItemsFromPackageNames(listOf(HOTSEAT_PACKAGE_1, HOTSEAT_PACKAGE_2))
.toTypedArray()
assertThat(taskbarRunningAppsController.updateHotseatItemInfos(hotseatItems))
.isEqualTo(hotseatItems)
assertThat(taskbarRunningAppsController.updateHotseatItemInfos(hotseatItems.toTypedArray()))
.isEqualTo(hotseatItems.toTypedArray())
}
@Test
@@ -87,23 +79,22 @@ class DesktopTaskbarRunningAppsControllerTest : TaskbarBaseTestCase() {
val runningTasks =
createDesktopTasksFromPackageNames(listOf(RUNNING_APP_PACKAGE_1, RUNNING_APP_PACKAGE_2))
whenever(mockRecentsModel.runningTasks).thenReturn(runningTasks)
taskbarRunningAppsController.updateRunningApps(createSparseArray(hotseatItems))
taskbarRunningAppsController.updateRunningApps()
val newHotseatItems =
taskbarRunningAppsController.updateHotseatItemInfos(hotseatItems.toTypedArray())
assertThat(newHotseatItems?.map { it.targetPackage }).isEqualTo(hotseatPackages)
assertThat(newHotseatItems.map { it?.targetPackage }).isEqualTo(hotseatPackages)
}
@Test
fun updateHotseatItemInfos_noRunningApps_returnsExistingHotseatItems() {
setInDesktopMode(true)
val hotseatItems: Array<ItemInfo> =
val hotseatItems =
createHotseatItemsFromPackageNames(listOf(HOTSEAT_PACKAGE_1, HOTSEAT_PACKAGE_2))
.toTypedArray()
assertThat(taskbarRunningAppsController.updateHotseatItemInfos(hotseatItems))
.isEqualTo(hotseatItems)
assertThat(taskbarRunningAppsController.updateHotseatItemInfos(hotseatItems.toTypedArray()))
.isEqualTo(hotseatItems.toTypedArray())
}
@Test
@@ -114,7 +105,7 @@ class DesktopTaskbarRunningAppsControllerTest : TaskbarBaseTestCase() {
val runningTasks =
createDesktopTasksFromPackageNames(listOf(RUNNING_APP_PACKAGE_1, RUNNING_APP_PACKAGE_2))
whenever(mockRecentsModel.runningTasks).thenReturn(runningTasks)
taskbarRunningAppsController.updateRunningApps(createSparseArray(hotseatItems))
taskbarRunningAppsController.updateRunningApps()
val newHotseatItems =
taskbarRunningAppsController.updateHotseatItemInfos(hotseatItems.toTypedArray())
@@ -126,7 +117,7 @@ class DesktopTaskbarRunningAppsControllerTest : TaskbarBaseTestCase() {
RUNNING_APP_PACKAGE_1,
RUNNING_APP_PACKAGE_2,
)
assertThat(newHotseatItems?.map { it.targetPackage }).isEqualTo(expectedPackages)
assertThat(newHotseatItems.map { it?.targetPackage }).isEqualTo(expectedPackages)
}
@Test
@@ -139,7 +130,7 @@ class DesktopTaskbarRunningAppsControllerTest : TaskbarBaseTestCase() {
listOf(HOTSEAT_PACKAGE_1, RUNNING_APP_PACKAGE_1, RUNNING_APP_PACKAGE_2)
)
whenever(mockRecentsModel.runningTasks).thenReturn(runningTasks)
taskbarRunningAppsController.updateRunningApps(createSparseArray(hotseatItems))
taskbarRunningAppsController.updateRunningApps()
val newHotseatItems =
taskbarRunningAppsController.updateHotseatItemInfos(hotseatItems.toTypedArray())
@@ -151,7 +142,7 @@ class DesktopTaskbarRunningAppsControllerTest : TaskbarBaseTestCase() {
RUNNING_APP_PACKAGE_1,
RUNNING_APP_PACKAGE_2,
)
assertThat(newHotseatItems?.map { it.targetPackage }).isEqualTo(expectedPackages)
assertThat(newHotseatItems.map { it?.targetPackage }).isEqualTo(expectedPackages)
}
@Test
@@ -160,7 +151,7 @@ class DesktopTaskbarRunningAppsControllerTest : TaskbarBaseTestCase() {
val runningTasks =
createDesktopTasksFromPackageNames(listOf(RUNNING_APP_PACKAGE_1, RUNNING_APP_PACKAGE_2))
whenever(mockRecentsModel.runningTasks).thenReturn(runningTasks)
taskbarRunningAppsController.updateRunningApps(createSparseArray(emptyList()))
taskbarRunningAppsController.updateRunningApps()
assertThat(taskbarRunningAppsController.runningApps).isEqualTo(emptySet<String>())
}
@@ -171,7 +162,7 @@ class DesktopTaskbarRunningAppsControllerTest : TaskbarBaseTestCase() {
val runningTasks =
createDesktopTasksFromPackageNames(listOf(RUNNING_APP_PACKAGE_1, RUNNING_APP_PACKAGE_2))
whenever(mockRecentsModel.runningTasks).thenReturn(runningTasks)
taskbarRunningAppsController.updateRunningApps(createSparseArray(emptyList()))
taskbarRunningAppsController.updateRunningApps()
assertThat(taskbarRunningAppsController.runningApps)
.isEqualTo(setOf(RUNNING_APP_PACKAGE_1, RUNNING_APP_PACKAGE_2))
@@ -204,12 +195,6 @@ class DesktopTaskbarRunningAppsControllerTest : TaskbarBaseTestCase() {
whenever(mockDesktopVisibilityController.areDesktopTasksVisible()).thenReturn(inDesktopMode)
}
private fun createSparseArray(itemInfos: List<ItemInfo>): SparseArray<ItemInfo> {
val sparseArray = SparseArray<ItemInfo>()
itemInfos.forEachIndexed { index, itemInfo -> sparseArray[index] = itemInfo }
return sparseArray
}
private companion object {
const val HOTSEAT_PACKAGE_1 = "hotseat1"
const val HOTSEAT_PACKAGE_2 = "hotseat2"