From 0eaf9ebdaaaf847775278acdb6e314fef376fb7e Mon Sep 17 00:00:00 2001 From: Gustav Sennton Date: Thu, 18 Apr 2024 15:04:15 +0000 Subject: [PATCH] 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 --- .../DesktopNavbarButtonsViewController.java | 88 ---------- .../DesktopTaskbarRecentAppsController.java | 153 ------------------ .../DesktopTaskbarRunningAppsController.kt | 25 ++- .../taskbar/DesktopTaskbarUIController.java | 62 ------- .../taskbar/TaskbarActivityContext.java | 27 ++-- .../launcher3/taskbar/TaskbarManager.java | 4 - .../taskbar/TaskbarModelCallbacks.java | 2 +- .../taskbar/TaskbarRecentAppsController.java | 8 +- .../launcher3/taskbar/TaskbarView.java | 31 ++-- .../com/android/quickstep/SystemUiProxy.java | 4 +- ...DesktopTaskbarRunningAppsControllerTest.kt | 41 ++--- 11 files changed, 52 insertions(+), 393 deletions(-) delete mode 100644 quickstep/src/com/android/launcher3/taskbar/DesktopNavbarButtonsViewController.java delete mode 100644 quickstep/src/com/android/launcher3/taskbar/DesktopTaskbarRecentAppsController.java delete mode 100644 quickstep/src/com/android/launcher3/taskbar/DesktopTaskbarUIController.java diff --git a/quickstep/src/com/android/launcher3/taskbar/DesktopNavbarButtonsViewController.java b/quickstep/src/com/android/launcher3/taskbar/DesktopNavbarButtonsViewController.java deleted file mode 100644 index 36358277c0..0000000000 --- a/quickstep/src/com/android/launcher3/taskbar/DesktopNavbarButtonsViewController.java +++ /dev/null @@ -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) { } -} diff --git a/quickstep/src/com/android/launcher3/taskbar/DesktopTaskbarRecentAppsController.java b/quickstep/src/com/android/launcher3/taskbar/DesktopTaskbarRecentAppsController.java deleted file mode 100644 index acfbea38b7..0000000000 --- a/quickstep/src/com/android/launcher3/taskbar/DesktopTaskbarRecentAppsController.java +++ /dev/null @@ -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 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 hotseatItems) { - ArrayList runningApps = getRunningAppsFromTasks(); - ArrayList 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 getRunningAppsFromTasks() { - ArrayList tasks = - RecentsModel.INSTANCE.get(mContext).getRunningTasks(); - ArrayList runningApps = new ArrayList<>(); - // early return if apps is empty, since we would have no AppInfo to compare - if (mApps == null) { - return runningApps; - } - - Set 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; - } -} diff --git a/quickstep/src/com/android/launcher3/taskbar/DesktopTaskbarRunningAppsController.kt b/quickstep/src/com/android/launcher3/taskbar/DesktopTaskbarRunningAppsController.kt index 06d25a21a7..81899135b6 100644 --- a/quickstep/src/com/android/launcher3/taskbar/DesktopTaskbarRunningAppsController.kt +++ b/quickstep/src/com/android/launcher3/taskbar/DesktopTaskbarRunningAppsController.kt @@ -45,7 +45,6 @@ class DesktopTaskbarRunningAppsController( private var apps: Array? = null private var allRunningDesktopAppInfos: List? = null - private var runningDesktopAppInfosExceptHotseatItems: List? = 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?): Array? { - val actualHotseatItems = hotseatItems ?: return super.updateHotseatItemInfos(null) + public override fun updateHotseatItemInfos(hotseatItems: Array): Array { 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?) { + 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() } diff --git a/quickstep/src/com/android/launcher3/taskbar/DesktopTaskbarUIController.java b/quickstep/src/com/android/launcher3/taskbar/DesktopTaskbarUIController.java deleted file mode 100644 index 2dd610c467..0000000000 --- a/quickstep/src/com/android/launcher3/taskbar/DesktopTaskbarUIController.java +++ /dev/null @@ -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(); - } -} diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java index 1a94424323..ff76e21faf 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java @@ -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 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. */ diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java index 3196bfb924..30954edbfd 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java @@ -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) { diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarModelCallbacks.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarModelCallbacks.java index be87cfd8b7..9f24d38664 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarModelCallbacks.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarModelCallbacks.java @@ -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 diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarRecentAppsController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarRecentAppsController.java index 9b84f1bf94..a29c74bf06 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarRecentAppsController.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarRecentAppsController.java @@ -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 hotseatItems) { - } + protected void updateRunningApps() {} /** Returns the currently running apps, or an empty Set if outside of Desktop environment. */ public Set getRunningApps() { diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java index effef3c59d..77f8a8a088 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java @@ -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. diff --git a/quickstep/src/com/android/quickstep/SystemUiProxy.java b/quickstep/src/com/android/quickstep/SystemUiProxy.java index b0b25897ad..fcf5ffc389 100644 --- a/quickstep/src/com/android/quickstep/SystemUiProxy.java +++ b/quickstep/src/com/android/quickstep/SystemUiProxy.java @@ -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) { diff --git a/quickstep/tests/src/com/android/launcher3/taskbar/DesktopTaskbarRunningAppsControllerTest.kt b/quickstep/tests/src/com/android/launcher3/taskbar/DesktopTaskbarRunningAppsControllerTest.kt index 2cfcf380fd..daed861b09 100644 --- a/quickstep/tests/src/com/android/launcher3/taskbar/DesktopTaskbarRunningAppsControllerTest.kt +++ b/quickstep/tests/src/com/android/launcher3/taskbar/DesktopTaskbarRunningAppsControllerTest.kt @@ -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 = + 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()) } @@ -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): SparseArray { - val sparseArray = SparseArray() - itemInfos.forEachIndexed { index, itemInfo -> sparseArray[index] = itemInfo } - return sparseArray - } - private companion object { const val HOTSEAT_PACKAGE_1 = "hotseat1" const val HOTSEAT_PACKAGE_2 = "hotseat2"