From 452ff6db94aa0e8cdfc2a8ea60cfdaff5e3de794 Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Wed, 25 Jan 2017 17:58:56 -0800 Subject: [PATCH] DO NOT MERGE Fixing crash in SystemUI fetching task description icons. 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 --- services/core/java/com/android/server/am/ActivityRecord.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java index 7ada47abfada..55c4698528a8 100755 --- a/services/core/java/com/android/server/am/ActivityRecord.java +++ b/services/core/java/com/android/server/am/ActivityRecord.java @@ -1384,7 +1384,8 @@ final class ActivityRecord { 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); -- 2.11.0