Merge "Update KQS to better support desktop tasks" into main
diff --git a/quickstep/res/layout/keyboard_quick_switch_overview.xml b/quickstep/res/layout/keyboard_quick_switch_textonly_taskview.xml
similarity index 97%
rename from quickstep/res/layout/keyboard_quick_switch_overview.xml
rename to quickstep/res/layout/keyboard_quick_switch_textonly_taskview.xml
index 30ca32d..e48794e 100644
--- a/quickstep/res/layout/keyboard_quick_switch_overview.xml
+++ b/quickstep/res/layout/keyboard_quick_switch_textonly_taskview.xml
@@ -40,7 +40,6 @@
android:layout_width="@dimen/keyboard_quick_switch_recents_icon_size"
android:layout_height="@dimen/keyboard_quick_switch_recents_icon_size"
android:layout_marginBottom="8dp"
- android:src="@drawable/view_carousel"
android:tint="?androidprv:attr/materialColorOnSurface"
app:layout_constraintVertical_chainStyle="packed"
diff --git a/quickstep/res/values/strings.xml b/quickstep/res/values/strings.xml
index 71855eb..fc3c0e3 100644
--- a/quickstep/res/values/strings.xml
+++ b/quickstep/res/values/strings.xml
@@ -324,6 +324,12 @@
other{Show # more apps.}
}</string>
+ <!-- Label for quick switch tile showing how many apps are available in desktop mode [CHAR LIMIT=NONE] -->
+ <string name="quick_switch_desktop">{count, plural,
+ =1{Show # desktop app.}
+ other{Show # desktop apps.}
+ }</string>
+
<!-- Accessibility label for quick switch tiles showing split tasks [CHAR LIMIT=NONE] -->
<string name="quick_switch_split_task"><xliff:g id="app_name_1" example="Chrome">%1$s</xliff:g> and <xliff:g id="app_name_2" example="Gmail">%2$s</xliff:g></string>
diff --git a/quickstep/src/com/android/launcher3/taskbar/KeyboardQuickSwitchController.java b/quickstep/src/com/android/launcher3/taskbar/KeyboardQuickSwitchController.java
index 584106b..b213203 100644
--- a/quickstep/src/com/android/launcher3/taskbar/KeyboardQuickSwitchController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/KeyboardQuickSwitchController.java
@@ -151,20 +151,10 @@
private void processLoadedTasks(ArrayList<GroupTask> tasks) {
// Only store MAX_TASK tasks, from most to least recent
Collections.reverse(tasks);
-
- // Hide all desktop tasks and show them on the hidden tile
- int hiddenDesktopTasks = 0;
- DesktopTask desktopTask = findDesktopTask(tasks);
- if (desktopTask != null) {
- hiddenDesktopTasks = desktopTask.tasks.size();
- tasks = tasks.stream()
- .filter(t -> !(t instanceof DesktopTask))
- .collect(Collectors.toCollection(ArrayList<GroupTask>::new));
- }
mTasks = tasks.stream()
.limit(MAX_TASKS)
.collect(Collectors.toList());
- mNumHiddenTasks = Math.max(0, tasks.size() - MAX_TASKS) + hiddenDesktopTasks;
+ mNumHiddenTasks = Math.max(0, tasks.size() - MAX_TASKS);
}
private void processLoadedTasksOnDesktop(ArrayList<GroupTask> tasks) {
diff --git a/quickstep/src/com/android/launcher3/taskbar/KeyboardQuickSwitchView.java b/quickstep/src/com/android/launcher3/taskbar/KeyboardQuickSwitchView.java
index a5383f5..5d47212 100644
--- a/quickstep/src/com/android/launcher3/taskbar/KeyboardQuickSwitchView.java
+++ b/quickstep/src/com/android/launcher3/taskbar/KeyboardQuickSwitchView.java
@@ -36,11 +36,14 @@
import android.view.ViewTreeObserver;
import android.view.animation.Interpolator;
import android.widget.HorizontalScrollView;
+import android.widget.ImageView;
import android.widget.TextView;
+import androidx.annotation.LayoutRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.constraintlayout.widget.ConstraintLayout;
+import androidx.core.content.res.ResourcesCompat;
import com.android.app.animation.Interpolators;
import com.android.launcher3.R;
@@ -48,6 +51,7 @@
import com.android.launcher3.anim.AnimatedFloat;
import com.android.launcher3.testing.TestLogging;
import com.android.launcher3.testing.shared.TestProtocol;
+import com.android.quickstep.util.DesktopTask;
import com.android.quickstep.util.GroupTask;
import java.util.HashMap;
@@ -92,6 +96,7 @@
private HorizontalScrollView mScrollView;
private ConstraintLayout mContent;
+ private int mTaskViewWidth;
private int mTaskViewHeight;
private int mSpacing;
private int mOutlineRadius;
@@ -128,6 +133,8 @@
mContent = findViewById(R.id.content);
Resources resources = getResources();
+ mTaskViewWidth = resources.getDimensionPixelSize(
+ R.dimen.keyboard_quick_switch_taskview_width);
mTaskViewHeight = resources.getDimensionPixelSize(
R.dimen.keyboard_quick_switch_taskview_height);
mSpacing = resources.getDimensionPixelSize(R.dimen.keyboard_quick_switch_view_spacing);
@@ -135,21 +142,18 @@
mIsRtl = Utilities.isRtl(resources);
}
- @NonNull
private KeyboardQuickSwitchTaskView createAndAddTaskView(
int index,
- int width,
boolean isFinalView,
- boolean updateTasks,
+ @LayoutRes int resId,
@NonNull LayoutInflater layoutInflater,
- @Nullable View previousView,
- @NonNull List<GroupTask> groupTasks) {
+ @Nullable View previousView) {
KeyboardQuickSwitchTaskView taskView = (KeyboardQuickSwitchTaskView) layoutInflater.inflate(
- R.layout.keyboard_quick_switch_taskview, mContent, false);
+ resId, mContent, false);
taskView.setId(View.generateViewId());
taskView.setOnClickListener(v -> mViewCallbacks.launchTaskAt(index));
- LayoutParams lp = new LayoutParams(width, mTaskViewHeight);
+ LayoutParams lp = new LayoutParams(mTaskViewWidth, mTaskViewHeight);
// Create a left-to-right ordering of views (or right-to-left in RTL locales)
if (previousView != null) {
lp.startToEnd = previousView.getId();
@@ -167,45 +171,11 @@
lp.horizontalBias = 1f;
}
- GroupTask groupTask = groupTasks.get(index);
- taskView.setThumbnails(
- groupTask.task1,
- groupTask.task2,
- updateTasks ? mViewCallbacks::updateThumbnailInBackground : null,
- updateTasks ? mViewCallbacks::updateIconInBackground : null);
-
mContent.addView(taskView, lp);
+
return taskView;
}
- private void createAndAddOverviewButton(
- int width,
- @NonNull LayoutInflater layoutInflater,
- @Nullable View previousView,
- @NonNull String overflowString) {
- KeyboardQuickSwitchTaskView overviewButton =
- (KeyboardQuickSwitchTaskView) layoutInflater.inflate(
- R.layout.keyboard_quick_switch_overview, this, false);
- overviewButton.setOnClickListener(v -> mViewCallbacks.launchTaskAt(MAX_TASKS));
-
- overviewButton.<TextView>findViewById(R.id.text).setText(overflowString);
-
- ConstraintLayout.LayoutParams lp = new ConstraintLayout.LayoutParams(
- width, mTaskViewHeight);
- if (previousView == null) {
- lp.startToStart = PARENT_ID;
- } else {
- lp.endToEnd = PARENT_ID;
- lp.startToEnd = previousView.getId();
- }
- lp.topToTop = PARENT_ID;
- lp.bottomToBottom = PARENT_ID;
- lp.setMarginEnd(mSpacing);
- lp.setMarginStart(mSpacing);
-
- mContent.addView(overviewButton, lp);
- }
-
protected void applyLoadPlan(
@NonNull Context context,
@NonNull List<GroupTask> groupTasks,
@@ -215,32 +185,57 @@
@NonNull KeyboardQuickSwitchViewController.ViewCallbacks viewCallbacks) {
mViewCallbacks = viewCallbacks;
Resources resources = context.getResources();
- int width = resources.getDimensionPixelSize(R.dimen.keyboard_quick_switch_taskview_width);
- View previousView = null;
+ Resources.Theme theme = context.getTheme();
+ View previousTaskView = null;
LayoutInflater layoutInflater = LayoutInflater.from(context);
int tasksToDisplay = Math.min(MAX_TASKS, groupTasks.size());
for (int i = 0; i < tasksToDisplay; i++) {
- previousView = createAndAddTaskView(
+ GroupTask groupTask = groupTasks.get(i);
+ KeyboardQuickSwitchTaskView currentTaskView = createAndAddTaskView(
i,
- width,
/* isFinalView= */ i == tasksToDisplay - 1 && numHiddenTasks == 0,
- updateTasks,
+ groupTask instanceof DesktopTask
+ ? R.layout.keyboard_quick_switch_textonly_taskview
+ : R.layout.keyboard_quick_switch_taskview,
layoutInflater,
- previousView,
- groupTasks);
+ previousTaskView);
+
+ if (groupTask instanceof DesktopTask desktopTask) {
+ HashMap<String, Integer> args = new HashMap<>();
+ args.put("count", desktopTask.tasks.size());
+
+ currentTaskView.<ImageView>findViewById(R.id.icon).setImageDrawable(
+ ResourcesCompat.getDrawable(resources, R.drawable.ic_desktop, theme));
+ currentTaskView.<TextView>findViewById(R.id.text).setText(new MessageFormat(
+ resources.getString(R.string.quick_switch_desktop),
+ Locale.getDefault()).format(args));
+ } else {
+ currentTaskView.setThumbnails(
+ groupTask.task1,
+ groupTask.task2,
+ updateTasks ? mViewCallbacks::updateThumbnailInBackground : null,
+ updateTasks ? mViewCallbacks::updateIconInBackground : null);
+ }
+ previousTaskView = currentTaskView;
}
if (numHiddenTasks > 0) {
HashMap<String, Integer> args = new HashMap<>();
args.put("count", numHiddenTasks);
- createAndAddOverviewButton(
- width,
+
+ View overviewButton = createAndAddTaskView(
+ MAX_TASKS,
+ /* isFinalView= */ true,
+ R.layout.keyboard_quick_switch_textonly_taskview,
layoutInflater,
- previousView,
- new MessageFormat(
- resources.getString(R.string.quick_switch_overflow),
- Locale.getDefault()).format(args));
+ previousTaskView);
+
+ overviewButton.<ImageView>findViewById(R.id.icon).setImageDrawable(
+ ResourcesCompat.getDrawable(resources, R.drawable.view_carousel, theme));
+ overviewButton.<TextView>findViewById(R.id.text).setText(new MessageFormat(
+ resources.getString(R.string.quick_switch_overflow),
+ Locale.getDefault()).format(args));
}
mDisplayingRecentTasks = !groupTasks.isEmpty();
diff --git a/quickstep/src/com/android/launcher3/taskbar/KeyboardQuickSwitchViewController.java b/quickstep/src/com/android/launcher3/taskbar/KeyboardQuickSwitchViewController.java
index 25a97d4..d6ee92f 100644
--- a/quickstep/src/com/android/launcher3/taskbar/KeyboardQuickSwitchViewController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/KeyboardQuickSwitchViewController.java
@@ -32,6 +32,7 @@
import com.android.launcher3.anim.AnimatorListeners;
import com.android.launcher3.taskbar.overlay.TaskbarOverlayContext;
import com.android.quickstep.SystemUiProxy;
+import com.android.quickstep.util.DesktopTask;
import com.android.quickstep.util.GroupTask;
import com.android.quickstep.util.SlideInRemoteTransition;
import com.android.systemui.shared.recents.model.Task;
@@ -157,7 +158,13 @@
AnimationUtils.loadInterpolator(
context, android.R.interpolator.fast_out_extra_slow_in)),
"SlideInTransition");
- if (mOnDesktop) {
+ if (task instanceof DesktopTask) {
+ UI_HELPER_EXECUTOR.execute(() ->
+ SystemUiProxy.INSTANCE.get(mKeyboardQuickSwitchView.getContext())
+ .showDesktopApps(
+ mKeyboardQuickSwitchView.getDisplay().getDisplayId(),
+ remoteTransition));
+ } else if (mOnDesktop) {
UI_HELPER_EXECUTOR.execute(() ->
SystemUiProxy.INSTANCE.get(mKeyboardQuickSwitchView.getContext())
.showDesktopApp(task.task1.key.id));