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

Commit e51b21a8 authored by Jorim Jaggi's avatar Jorim Jaggi Committed by Android (Google) Code Review
Browse files

Merge "Don't preload task description icons when opening recents" into lmp-dev

parents 17580af3 bdd4b201
Loading
Loading
Loading
Loading
+17 −7
Original line number Diff line number Diff line
@@ -635,21 +635,31 @@ public class ActivityManager {
            if (mIcon != null) {
                return mIcon;
            }
            if (mIconFilename != null) {
            return loadTaskDescriptionIcon(mIconFilename);
        }

        /** @hide */
        public String getIconFilename() {
            return mIconFilename;
        }

        /** @hide */
        public Bitmap getInMemoryIcon() {
            return mIcon;
        }

        /** @hide */
        public static Bitmap loadTaskDescriptionIcon(String iconFilename) {
            if (iconFilename != null) {
                try {
                    return ActivityManagerNative.getDefault().
                            getTaskDescriptionIcon(mIconFilename);
                            getTaskDescriptionIcon(iconFilename);
                } catch (RemoteException e) {
                }
            }
            return null;
        }

        /** @hide */
        public String getIconFilename() {
            return mIconFilename;
        }

        /**
         * @return The color override on the theme's primary color.
         */
+44 −13
Original line number Diff line number Diff line
@@ -177,16 +177,24 @@ class TaskResourceLoader implements Runnable {
                if (t != null) {
                    Drawable cachedIcon = mApplicationIconCache.get(t.key);
                    Bitmap cachedThumbnail = mThumbnailCache.get(t.key);

                    // Load the application icon if it is stale or we haven't cached one yet
                    if (cachedIcon == null) {
                        cachedIcon = getTaskDescriptionIcon(t.key, t.icon, t.iconFilename, ssp,
                                mContext.getResources());

                        if (cachedIcon == null) {
                            ActivityInfo info = ssp.getActivityInfo(t.key.baseIntent.getComponent(),
                                    t.key.userId);
                            if (info != null) {
                                cachedIcon = ssp.getActivityIcon(info, t.key.userId);
                            }
                        }

                        if (cachedIcon == null) {
                            cachedIcon = mDefaultApplicationIcon;
                        }

                        // At this point, even if we can't load the icon, we will set the default
                        // icon.
                        mApplicationIconCache.put(t.key, cachedIcon);
@@ -230,6 +238,17 @@ class TaskResourceLoader implements Runnable {
            }
        }
    }

    Drawable getTaskDescriptionIcon(Task.TaskKey taskKey, Bitmap iconBitmap, String iconFilename,
            SystemServicesProxy ssp, Resources res) {
        Bitmap tdIcon = iconBitmap != null
                ? iconBitmap
                : ActivityManager.TaskDescription.loadTaskDescriptionIcon(iconFilename);
        if (tdIcon != null) {
            return ssp.getBadgedIcon(new BitmapDrawable(res, tdIcon), taskKey.userId);
        }
        return null;
    }
}

/* Recents task loader
@@ -321,15 +340,20 @@ public class RecentsTaskLoader {
        if (icon != null) {
            return icon;
        }
        // Return the task description icon if it exists
        if (td != null && td.getIcon() != null) {
            icon = ssp.getBadgedIcon(new BitmapDrawable(res, td.getIcon()), taskKey.userId);
            mApplicationIconCache.put(taskKey, icon);
            return icon;
        }
        // If we are preloading this task, continue to load the activity icon

        // If we are preloading this task, continue to load the task description icon or the
        // activity icon
        if (preloadTask) {
            // All short paths failed, load the icon from the activity info and cache it

            // Return and cache the task description icon if it exists
            Drawable tdDrawable = mLoader.getTaskDescriptionIcon(taskKey, td.getInMemoryIcon(),
                    td.getIconFilename(), ssp, res);
            if (tdDrawable != null) {
                mApplicationIconCache.put(taskKey, tdDrawable);
                return tdDrawable;
            }

            // Load the icon from the activity info and cache it
            if (infoHandle.info == null) {
                infoHandle.info = ssp.getActivityInfo(taskKey.baseIntent.getComponent(),
                        taskKey.userId);
@@ -453,10 +477,17 @@ public class RecentsTaskLoader {
                activityInfoCache.put(cnKey, infoHandle);
            }

            Bitmap icon = t.taskDescription != null
                    ? t.taskDescription.getInMemoryIcon()
                    : null;
            String iconFilename = t.taskDescription != null
                    ? t.taskDescription.getIconFilename()
                    : null;

            // Add the task to the stack
            Task task = new Task(taskKey, (t.id > -1), t.affiliatedTaskId, t.affiliatedTaskColor,
                    activityLabel, activityIcon, activityColor, (i == (taskCount - 1)),
                    config.lockToAppEnabled);
                    config.lockToAppEnabled, icon, iconFilename);

            if (preloadTask && loadTaskThumbnails) {
                // Load the thumbnail from the cache if possible
+6 −2
Original line number Diff line number Diff line
@@ -124,7 +124,8 @@ public class Task {
    public boolean isActive;
    public boolean lockToThisTask;
    public boolean lockToTaskEnabled;

    public Bitmap icon;
    public String iconFilename;
    TaskCallbacks mCb;

    public Task() {
@@ -133,7 +134,8 @@ public class Task {

    public Task(TaskKey key, boolean isActive, int taskAffiliation, int taskAffiliationColor,
                String activityTitle, Drawable activityIcon, int colorPrimary,
                boolean lockToThisTask, boolean lockToTaskEnabled) {
                boolean lockToThisTask, boolean lockToTaskEnabled, Bitmap icon,
                String iconFilename) {
        boolean isInAffiliationGroup = (taskAffiliation != key.id);
        boolean hasAffiliationGroupColor = isInAffiliationGroup && (taskAffiliationColor != 0);
        this.key = key;
@@ -147,6 +149,8 @@ public class Task {
        this.isActive = isActive;
        this.lockToThisTask = lockToTaskEnabled && lockToThisTask;
        this.lockToTaskEnabled = lockToTaskEnabled;
        this.icon = icon;
        this.iconFilename = iconFilename;
    }

    /** Copies the other task. */