Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5f094590 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add task thumbnails to the Recents Go loader." into ub-launcher3-master

parents 2ca0aa70 b9ebd812
Loading
Loading
Loading
Loading
+20 −14
Original line number Diff line number Diff line
@@ -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<Task> 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());
        }
    }
}