When we compose the TaskDescription for the task, we update it with
information from each activity from top down. If an activity has a
saved icon, the filepath for that icon will be encoded with the user
id of the activity and saved into the task description. However, if
that activity's user is different from the user id of the root
activity of the task, we will later try to fetch the icon with the
user id of the task which will cause an exception to be thrown.
Instead, because the task description describes the task and information
belonging to the task description is always fetched as the user of
that task, we can save the icon with the task's user encoded instead
of the activity's.
Bug:
34692261
Test: Launch primary user activity with a custom task description icon
in a task that is rooted with a work profile activity, then restart
before the primary user activity is finished.
Change-Id: I66240cd488271e677cce7923cfef8e3e0cea5621
if (_taskDescription.getIconFilename() == null &&
(icon = _taskDescription.getIcon()) != null) {
final String iconFilename = createImageFilename(createTime, task.taskId);
- final File iconFile = new File(TaskPersister.getUserImagesDir(userId), iconFilename);
+ final File iconFile = new File(TaskPersister.getUserImagesDir(task.userId),
+ iconFilename);
final String iconFilePath = iconFile.getAbsolutePath();
service.mRecentTasks.saveImage(icon, iconFilePath);
_taskDescription.setIconFilename(iconFilePath);