Don't preload task description icons when opening recents

Bug: 17624331
Change-Id: I55a1184efd5982122f87fab99a5402336b380d7c
This commit is contained in:
Jorim Jaggi
2014-09-26 18:29:07 +02:00
parent 759962ab6d
commit bdd4b201e4
3 changed files with 68 additions and 23 deletions

View File

@@ -635,14 +635,7 @@ public class ActivityManager {
if (mIcon != null) {
return mIcon;
}
if (mIconFilename != null) {
try {
return ActivityManagerNative.getDefault().
getTaskDescriptionIcon(mIconFilename);
} catch (RemoteException e) {
}
}
return null;
return loadTaskDescriptionIcon(mIconFilename);
}
/** @hide */
@@ -650,6 +643,23 @@ public class ActivityManager {
return mIconFilename;
}
/** @hide */
public Bitmap getInMemoryIcon() {
return mIcon;
}
/** @hide */
public static Bitmap loadTaskDescriptionIcon(String iconFilename) {
if (iconFilename != null) {
try {
return ActivityManagerNative.getDefault().
getTaskDescriptionIcon(iconFilename);
} catch (RemoteException e) {
}
}
return null;
}
/**
* @return The color override on the theme's primary color.
*/

View File

@@ -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) {
ActivityInfo info = ssp.getActivityInfo(t.key.baseIntent.getComponent(),
t.key.userId);
if (info != null) {
cachedIcon = ssp.getActivityIcon(info, t.key.userId);
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

View File

@@ -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. */