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:
@@ -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;
|
||||
}
|
||||
}
|
||||
+11
-14
@@ -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) {
|
||||
|
||||
+13
-28
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user