From b9ebd812a4ea05fb9f4cd3a556221a289fd8d3d3 Mon Sep 17 00:00:00 2001 From: Kevin Date: Mon, 4 Mar 2019 10:15:13 -0800 Subject: [PATCH] Add task thumbnails to the Recents Go loader. This CL adds thumbnails to the content loading for Recents Go so that they are fully loaded before recents show. We utilize the underlying recents model thumbnail cache to make the loading faster. Bug: 114136250 Test: Build Launcher3GoIconRecents Change-Id: Ib21f617e83d307621364c2eeb6fef84aad49814b --- .../com/android/quickstep/TaskListLoader.java | 34 +++++++++++-------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/go/quickstep/src/com/android/quickstep/TaskListLoader.java b/go/quickstep/src/com/android/quickstep/TaskListLoader.java index 9f359b4c1b..c798cef1ee 100644 --- a/go/quickstep/src/com/android/quickstep/TaskListLoader.java +++ b/go/quickstep/src/com/android/quickstep/TaskListLoader.java @@ -85,34 +85,40 @@ public final class TaskListLoader { } /** - * Loads task content for a list of tasks, including the label and the icon. Uses the list of - * tasks since the last load as a cache for loaded content. + * Loads task content for a list of tasks, including the label, icon, and thumbnail. For content + * that isn't cached, load the content asynchronously in the background. * * @param tasksToLoad list of tasks that need to load their content - * @param onLoadedCallback runnable to run after all tasks have loaded their content + * @param onFullyLoadedCallback runnable to run after all tasks have loaded their content */ private void loadTaskContents(ArrayList tasksToLoad, - @Nullable Runnable onLoadedCallback) { - AtomicInteger loadRequestsCount = new AtomicInteger(0); + @Nullable Runnable onFullyLoadedCallback) { + // Make two load requests per task, one for the icon/title and one for the thumbnail. + AtomicInteger loadRequestsCount = new AtomicInteger(tasksToLoad.size() * 2); + Runnable itemLoadedRunnable = () -> { + if (loadRequestsCount.decrementAndGet() == 0 && onFullyLoadedCallback != null) { + onFullyLoadedCallback.run(); + } + }; for (Task task : tasksToLoad) { + // Load icon and title. int index = mTaskList.indexOf(task); if (index >= 0) { // If we've already loaded the task and have its content then just copy it over. Task loadedTask = mTaskList.get(index); task.titleDescription = loadedTask.titleDescription; task.icon = loadedTask.icon; + itemLoadedRunnable.run(); } else { // Otherwise, load the content in the background. - loadRequestsCount.getAndIncrement(); - mRecentsModel.getIconCache().updateIconInBackground(task, loadedTask -> { - if (loadRequestsCount.decrementAndGet() == 0 && onLoadedCallback != null) { - onLoadedCallback.run(); - } - }); + mRecentsModel.getIconCache().updateIconInBackground(task, + loadedTask -> itemLoadedRunnable.run()); } - } - if (loadRequestsCount.get() == 0 && onLoadedCallback != null) { - onLoadedCallback.run(); + + // Load the thumbnail. May return immediately and synchronously if the thumbnail is + // cached. + mRecentsModel.getThumbnailCache().updateThumbnailInBackground(task, + thumbnail -> itemLoadedRunnable.run()); } } }