Loading core/java/android/app/ActivityManager.java +17 −7 Original line number Diff line number Diff line Loading @@ -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. */ Loading packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoader.java +44 −13 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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 Loading Loading @@ -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); Loading Loading @@ -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 Loading packages/SystemUI/src/com/android/systemui/recents/model/Task.java +6 −2 Original line number Diff line number Diff line Loading @@ -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() { Loading @@ -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; Loading @@ -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. */ Loading Loading
core/java/android/app/ActivityManager.java +17 −7 Original line number Diff line number Diff line Loading @@ -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. */ Loading
packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoader.java +44 −13 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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 Loading Loading @@ -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); Loading Loading @@ -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 Loading
packages/SystemUI/src/com/android/systemui/recents/model/Task.java +6 −2 Original line number Diff line number Diff line Loading @@ -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() { Loading @@ -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; Loading @@ -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. */ Loading