diff options
author | Winson Chung <winsonc@google.com> | 2014-05-16 11:15:04 -0700 |
---|---|---|
committer | Winson Chung <winsonc@google.com> | 2014-05-16 16:24:21 -0700 |
commit | a449dc033b79775b8945d9cc5a035a6deb145065 (patch) | |
tree | 65335e51037301ca2d9a2aeb2822660df1e1f570 /services | |
parent | d4bac5eab65f97f56c118c4398e13e5ca395d029 (diff) | |
download | frameworks_base-a449dc033b79775b8945d9cc5a035a6deb145065.zip frameworks_base-a449dc033b79775b8945d9cc5a035a6deb145065.tar.gz frameworks_base-a449dc033b79775b8945d9cc5a035a6deb145065.tar.bz2 |
Refactoring RecentsActivityValues into TaskDescription, and ensuring they are resolved when set. (Bug 14995928, 14832629)
Change-Id: I582221468e63a96a5dfd132a31b09e72099b170f
Diffstat (limited to 'services')
3 files changed, 49 insertions, 49 deletions
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index bab5b9c..7abc75f 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -7087,50 +7087,7 @@ public final class ActivityManagerService extends ActivityManagerNative rti.description = tr.lastDescription; rti.stackId = tr.stack.mStackId; rti.userId = tr.userId; - - // Traverse upwards looking for any break between main task activities and - // utility activities. - final ArrayList<ActivityRecord> activities = tr.mActivities; - int activityNdx; - final int numActivities = activities.size(); - for (activityNdx = Math.min(numActivities, 1); activityNdx < numActivities; - ++activityNdx) { - final ActivityRecord r = activities.get(activityNdx); - if (r.intent != null && - (r.intent.getFlags() & Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET) - != 0) { - break; - } - } - if (activityNdx > 0) { - // Traverse downwards starting below break looking for set label, icon. - // Note that if there are activities in the task but none of them set the - // recent activity values, then we do not fall back to the last set - // values in the TaskRecord. - rti.activityValues = new ActivityManager.RecentsActivityValues(); - for (--activityNdx; activityNdx >= 0; --activityNdx) { - final ActivityRecord r = activities.get(activityNdx); - if (r.activityValues != null) { - if (rti.activityValues.label == null) { - rti.activityValues.label = r.activityValues.label; - tr.lastActivityValues.label = r.activityValues.label; - } - if (rti.activityValues.icon == null) { - rti.activityValues.icon = r.activityValues.icon; - tr.lastActivityValues.icon = r.activityValues.icon; - } - if (rti.activityValues.colorPrimary == 0) { - rti.activityValues.colorPrimary = r.activityValues.colorPrimary; - tr.lastActivityValues.colorPrimary = r.activityValues.colorPrimary; - } - } - } - } else { - // If there are no activity records in this task, then we use the last - // resolved values - rti.activityValues = - new ActivityManager.RecentsActivityValues(tr.lastActivityValues); - } + rti.taskDescription = new ActivityManager.TaskDescription(tr.lastTaskDescription); return rti; } @@ -7261,11 +7218,12 @@ public final class ActivityManagerService extends ActivityManagerNative } @Override - public void setRecentsActivityValues(IBinder token, ActivityManager.RecentsActivityValues rav) { + public void setTaskDescription(IBinder token, ActivityManager.TaskDescription td) { synchronized (this) { ActivityRecord r = ActivityRecord.isInStackLocked(token); if (r != null) { - r.activityValues = rav; + r.taskDescription = td; + r.task.updateTaskDescription(); } } } diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java index 9582ac7..dbe2ca1 100755 --- a/services/core/java/com/android/server/am/ActivityRecord.java +++ b/services/core/java/com/android/server/am/ActivityRecord.java @@ -149,7 +149,7 @@ final class ActivityRecord { boolean mStartingWindowShown = false; ActivityContainer mInitialActivityContainer; - ActivityManager.RecentsActivityValues activityValues; // the recents information for this activity + ActivityManager.TaskDescription taskDescription; // the recents information for this activity void dump(PrintWriter pw, String prefix) { final long now = SystemClock.uptimeMillis(); diff --git a/services/core/java/com/android/server/am/TaskRecord.java b/services/core/java/com/android/server/am/TaskRecord.java index be884e7..6d66b29 100644 --- a/services/core/java/com/android/server/am/TaskRecord.java +++ b/services/core/java/com/android/server/am/TaskRecord.java @@ -58,8 +58,8 @@ final class TaskRecord extends ThumbnailHolder { // This represents the last resolved activity values for this task // NOTE: This value needs to be persisted with each task - ActivityManager.RecentsActivityValues lastActivityValues = - new ActivityManager.RecentsActivityValues(); + ActivityManager.TaskDescription lastTaskDescription = + new ActivityManager.TaskDescription(); /** List of all activities in the task arranged in history order */ final ArrayList<ActivityRecord> mActivities = new ArrayList<ActivityRecord>(); @@ -486,6 +486,48 @@ final class TaskRecord extends ThumbnailHolder { return null; } + /** Updates the last task description values. */ + void updateTaskDescription() { + // Traverse upwards looking for any break between main task activities and + // utility activities. + int activityNdx; + final int numActivities = mActivities.size(); + for (activityNdx = Math.min(numActivities, 1); activityNdx < numActivities; + ++activityNdx) { + final ActivityRecord r = mActivities.get(activityNdx); + if (r.intent != null && + (r.intent.getFlags() & Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET) + != 0) { + break; + } + } + if (activityNdx > 0) { + // Traverse downwards starting below break looking for set label, icon. + // Note that if there are activities in the task but none of them set the + // recent activity values, then we do not fall back to the last set + // values in the TaskRecord. + String label = null; + Bitmap icon = null; + int colorPrimary = 0; + for (--activityNdx; activityNdx >= 0; --activityNdx) { + final ActivityRecord r = mActivities.get(activityNdx); + if (r.taskDescription != null) { + if (label == null) { + label = r.taskDescription.getLabel(); + } + if (icon == null) { + icon = r.taskDescription.getIcon(); + } + if (colorPrimary == 0) { + colorPrimary = r.taskDescription.getPrimaryColor(); + + } + } + } + lastTaskDescription = new ActivityManager.TaskDescription(label, icon, colorPrimary); + } + } + void dump(PrintWriter pw, String prefix) { if (numActivities != 0 || rootWasReset || userId != 0 || numFullscreen != 0) { pw.print(prefix); pw.print("numActivities="); pw.print(numActivities); |