Don't preload task description icons when opening recents
Bug: 17624331 Change-Id: I55a1184efd5982122f87fab99a5402336b380d7c
This commit is contained in:
@@ -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.
|
||||
*/
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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. */
|
||||
|
||||
Reference in New Issue
Block a user