Taskbar running apps: show one icon per task + tap opens that task

Before this CL we would show only one Taskbar icon per app, making it
impossible (through the taskbar) to switch between several windows of
the same app.
With this CL we add one icon per task instead, making it possible to
bring each task to the front individually.

Flag: com.android.window.flags.enable_desktop_windowing_taskbar_running_apps
Bug: 351118893
Bug: 349790805
Bug: 351156858
Test: Started several Chrome windows -> taskbar has one icon per window

Change-Id: Ia692977effceb9ce339906bf6ca24d73e19d8769
This commit is contained in:
Gustav Sennton
2024-07-05 10:57:14 +00:00
parent a00c81c173
commit f3108c59ed
6 changed files with 383 additions and 183 deletions
@@ -63,6 +63,7 @@ import com.android.launcher3.anim.RevealOutlineAnimation;
import com.android.launcher3.anim.RoundedRectRevealOutlineProvider;
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.model.data.TaskItemInfo;
import com.android.launcher3.util.DisplayController;
import com.android.launcher3.util.ItemInfoMatcher;
import com.android.launcher3.util.LauncherBindableItemsContainer;
@@ -515,35 +516,38 @@ public class TaskbarViewController implements TaskbarControllers.LoggableTaskbar
return mTaskbarView.getTaskbarDividerView();
}
/** Updates which icons are marked as running given the Set of currently running packages. */
public void updateIconViewsRunningStates(Set<String> runningPackages,
Set<String> minimizedPackages) {
/**
* Updates which icons are marked as running or minimized given the Sets of currently running
* and minimized tasks.
*/
public void updateIconViewsRunningStates(Set<Integer> runningTaskIds,
Set<Integer> minimizedTaskIds) {
for (View iconView : getIconViews()) {
if (iconView instanceof BubbleTextView btv) {
btv.updateRunningState(
getRunningAppState(btv, runningPackages, minimizedPackages));
getRunningAppState(btv, runningTaskIds, minimizedTaskIds));
}
}
}
private BubbleTextView.RunningAppState getRunningAppState(
BubbleTextView btv,
Set<String> runningPackages,
Set<String> minimizedPackages) {
Set<Integer> runningTaskIds,
Set<Integer> minimizedTaskIds) {
Object tag = btv.getTag();
if (tag instanceof ItemInfo itemInfo) {
if (minimizedPackages.contains(itemInfo.getTargetPackage())) {
if (tag instanceof TaskItemInfo itemInfo) {
if (minimizedTaskIds.contains(itemInfo.getTaskId())) {
return BubbleTextView.RunningAppState.MINIMIZED;
}
if (runningPackages.contains(itemInfo.getTargetPackage())) {
if (runningTaskIds.contains(itemInfo.getTaskId())) {
return BubbleTextView.RunningAppState.RUNNING;
}
}
if (tag instanceof GroupTask groupTask && !groupTask.hasMultipleTasks()) {
if (minimizedPackages.contains(groupTask.task1.key.getPackageName())) {
if (minimizedTaskIds.contains(groupTask.task1.key.id)) {
return BubbleTextView.RunningAppState.MINIMIZED;
}
if (runningPackages.contains(groupTask.task1.key.getPackageName())) {
if (runningTaskIds.contains(groupTask.task1.key.id)) {
return BubbleTextView.RunningAppState.RUNNING;
}
}