Loading core/java/android/app/ActivityManager.java +87 −4 Original line number Diff line number Diff line Loading @@ -1531,14 +1531,90 @@ public class ActivityManager { } } /** * Metadata related to the {@link TaskThumbnail}. * * @hide */ public static class TaskThumbnailInfo implements Parcelable { /** @hide */ public static final String ATTR_TASK_THUMBNAILINFO_PREFIX = "task_thumbnailinfo_"; private static final String ATTR_TASK_WIDTH = ATTR_TASK_THUMBNAILINFO_PREFIX + "task_width"; private static final String ATTR_TASK_HEIGHT = ATTR_TASK_THUMBNAILINFO_PREFIX + "task_height"; private static final String ATTR_SCREEN_ORIENTATION = ATTR_TASK_THUMBNAILINFO_PREFIX + "screen_orientation"; public int taskWidth; public int taskHeight; public int screenOrientation; public TaskThumbnailInfo() { // Do nothing } private TaskThumbnailInfo(Parcel source) { readFromParcel(source); } /** @hide */ public void saveToXml(XmlSerializer out) throws IOException { out.attribute(null, ATTR_TASK_WIDTH, Integer.toString(taskWidth)); out.attribute(null, ATTR_TASK_HEIGHT, Integer.toString(taskHeight)); out.attribute(null, ATTR_SCREEN_ORIENTATION, Integer.toString(screenOrientation)); } /** @hide */ public void restoreFromXml(String attrName, String attrValue) { if (ATTR_TASK_WIDTH.equals(attrName)) { taskWidth = Integer.parseInt(attrValue); } else if (ATTR_TASK_HEIGHT.equals(attrName)) { taskHeight = Integer.parseInt(attrValue); } else if (ATTR_SCREEN_ORIENTATION.equals(attrName)) { screenOrientation = Integer.parseInt(attrValue); } } public int describeContents() { return 0; } public void writeToParcel(Parcel dest, int flags) { dest.writeInt(taskWidth); dest.writeInt(taskHeight); dest.writeInt(screenOrientation); } public void readFromParcel(Parcel source) { taskWidth = source.readInt(); taskHeight = source.readInt(); screenOrientation = source.readInt(); } public static final Creator<TaskThumbnailInfo> CREATOR = new Creator<TaskThumbnailInfo>() { public TaskThumbnailInfo createFromParcel(Parcel source) { return new TaskThumbnailInfo(source); } public TaskThumbnailInfo[] newArray(int size) { return new TaskThumbnailInfo[size]; } }; } /** @hide */ public static class TaskThumbnail implements Parcelable { public Bitmap mainThumbnail; public ParcelFileDescriptor thumbnailFileDescriptor; public TaskThumbnailInfo thumbnailInfo; public TaskThumbnail() { } private TaskThumbnail(Parcel source) { readFromParcel(source); } public int describeContents() { if (thumbnailFileDescriptor != null) { return thumbnailFileDescriptor.describeContents(); Loading @@ -1559,6 +1635,12 @@ public class ActivityManager { } else { dest.writeInt(0); } if (thumbnailInfo != null) { dest.writeInt(1); thumbnailInfo.writeToParcel(dest, flags); } else { dest.writeInt(0); } } public void readFromParcel(Parcel source) { Loading @@ -1572,6 +1654,11 @@ public class ActivityManager { } else { thumbnailFileDescriptor = null; } if (source.readInt() != 0) { thumbnailInfo = TaskThumbnailInfo.CREATOR.createFromParcel(source); } else { thumbnailInfo = null; } } public static final Creator<TaskThumbnail> CREATOR = new Creator<TaskThumbnail>() { Loading @@ -1582,10 +1669,6 @@ public class ActivityManager { return new TaskThumbnail[size]; } }; private TaskThumbnail(Parcel source) { readFromParcel(source); } } /** @hide */ Loading services/core/java/com/android/server/am/ActivityManagerService.java +12 −2 Original line number Diff line number Diff line Loading @@ -114,6 +114,7 @@ import com.android.server.SystemService; import com.android.server.SystemServiceManager; import com.android.server.Watchdog; import com.android.server.am.ActivityStack.ActivityState; import com.android.server.am.ActivityStackSupervisor.ActivityDisplay; import com.android.server.firewall.IntentFirewall; import com.android.server.pm.Installer; import com.android.server.pm.UserManagerService; Loading @@ -134,6 +135,7 @@ import android.app.Activity; import android.app.ActivityManager; import android.app.ActivityManager.RunningTaskInfo; import android.app.ActivityManager.StackInfo; import android.app.ActivityManager.TaskThumbnailInfo; import android.app.ActivityManagerInternal; import android.app.ActivityManagerInternal.SleepToken; import android.app.ActivityManagerNative; Loading Loading @@ -8577,8 +8579,16 @@ public final class ActivityManagerService extends ActivityManagerNative } } // Use the full screen as the context for the task thumbnail final Point displaySize = new Point(); final TaskThumbnailInfo thumbnailInfo = new TaskThumbnailInfo(); r.task.stack.getDisplaySize(displaySize); thumbnailInfo.taskWidth = displaySize.x; thumbnailInfo.taskHeight = displaySize.y; thumbnailInfo.screenOrientation = mConfiguration.orientation; TaskRecord task = new TaskRecord(this, mStackSupervisor.getNextTaskId(), ainfo, intent, description); intent, description, thumbnailInfo); int trimIdx = mRecentTasks.trimForTaskLocked(task, false); if (trimIdx >= 0) { Loading @@ -8597,7 +8607,7 @@ public final class ActivityManagerService extends ActivityManagerNative mRecentTasks.add(task); r.task.stack.addTask(task, false, false); task.setLastThumbnail(thumbnail); task.setLastThumbnailLocked(thumbnail); task.freeLastThumbnail(); return task.taskId; Loading services/core/java/com/android/server/am/ActivityRecord.java +1 −1 Original line number Diff line number Diff line Loading @@ -932,7 +932,7 @@ final class ActivityRecord { if (newThumbnail != null) { if (DEBUG_THUMBNAILS) Slog.i(TAG_THUMBNAILS, "Setting thumbnail of " + this + " to " + newThumbnail); boolean thumbnailUpdated = task.setLastThumbnail(newThumbnail); boolean thumbnailUpdated = task.setLastThumbnailLocked(newThumbnail); if (thumbnailUpdated && isPersistable()) { mStackSupervisor.mService.notifyTaskPersisterLocked(task, false); } Loading services/core/java/com/android/server/am/ActivityStack.java +5 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import static com.android.server.am.ActivityRecord.APPLICATION_ACTIVITY_TYPE; import static com.android.server.am.ActivityStackSupervisor.MOVING; import static com.android.server.am.ActivityStackSupervisor.PRESERVE_WINDOWS; import android.graphics.Point; import android.graphics.Rect; import android.util.ArraySet; Loading Loading @@ -388,6 +389,10 @@ final class ActivityStack { mWindowManager.detachStack(mStackId); } public void getDisplaySize(Point out) { mActivityContainer.mActivityDisplay.mDisplay.getSize(out); } void setBounds(Rect bounds) { mBounds = mFullscreen ? null : new Rect(bounds); if (mTaskPositioner != null) { Loading services/core/java/com/android/server/am/ActivityStackSupervisor.java +1 −1 Original line number Diff line number Diff line Loading @@ -3681,7 +3681,7 @@ public final class ActivityStackSupervisor implements DisplayListener { void handleLaunchTaskBehindCompleteLocked(ActivityRecord r) { r.mLaunchTaskBehind = false; final TaskRecord task = r.task; task.setLastThumbnail(task.stack.screenshotActivities(r)); task.setLastThumbnailLocked(task.stack.screenshotActivities(r)); mRecentTasks.addLocked(task); mService.notifyTaskStackChangedLocked(); mWindowManager.setAppVisibility(r.appToken, false); Loading Loading
core/java/android/app/ActivityManager.java +87 −4 Original line number Diff line number Diff line Loading @@ -1531,14 +1531,90 @@ public class ActivityManager { } } /** * Metadata related to the {@link TaskThumbnail}. * * @hide */ public static class TaskThumbnailInfo implements Parcelable { /** @hide */ public static final String ATTR_TASK_THUMBNAILINFO_PREFIX = "task_thumbnailinfo_"; private static final String ATTR_TASK_WIDTH = ATTR_TASK_THUMBNAILINFO_PREFIX + "task_width"; private static final String ATTR_TASK_HEIGHT = ATTR_TASK_THUMBNAILINFO_PREFIX + "task_height"; private static final String ATTR_SCREEN_ORIENTATION = ATTR_TASK_THUMBNAILINFO_PREFIX + "screen_orientation"; public int taskWidth; public int taskHeight; public int screenOrientation; public TaskThumbnailInfo() { // Do nothing } private TaskThumbnailInfo(Parcel source) { readFromParcel(source); } /** @hide */ public void saveToXml(XmlSerializer out) throws IOException { out.attribute(null, ATTR_TASK_WIDTH, Integer.toString(taskWidth)); out.attribute(null, ATTR_TASK_HEIGHT, Integer.toString(taskHeight)); out.attribute(null, ATTR_SCREEN_ORIENTATION, Integer.toString(screenOrientation)); } /** @hide */ public void restoreFromXml(String attrName, String attrValue) { if (ATTR_TASK_WIDTH.equals(attrName)) { taskWidth = Integer.parseInt(attrValue); } else if (ATTR_TASK_HEIGHT.equals(attrName)) { taskHeight = Integer.parseInt(attrValue); } else if (ATTR_SCREEN_ORIENTATION.equals(attrName)) { screenOrientation = Integer.parseInt(attrValue); } } public int describeContents() { return 0; } public void writeToParcel(Parcel dest, int flags) { dest.writeInt(taskWidth); dest.writeInt(taskHeight); dest.writeInt(screenOrientation); } public void readFromParcel(Parcel source) { taskWidth = source.readInt(); taskHeight = source.readInt(); screenOrientation = source.readInt(); } public static final Creator<TaskThumbnailInfo> CREATOR = new Creator<TaskThumbnailInfo>() { public TaskThumbnailInfo createFromParcel(Parcel source) { return new TaskThumbnailInfo(source); } public TaskThumbnailInfo[] newArray(int size) { return new TaskThumbnailInfo[size]; } }; } /** @hide */ public static class TaskThumbnail implements Parcelable { public Bitmap mainThumbnail; public ParcelFileDescriptor thumbnailFileDescriptor; public TaskThumbnailInfo thumbnailInfo; public TaskThumbnail() { } private TaskThumbnail(Parcel source) { readFromParcel(source); } public int describeContents() { if (thumbnailFileDescriptor != null) { return thumbnailFileDescriptor.describeContents(); Loading @@ -1559,6 +1635,12 @@ public class ActivityManager { } else { dest.writeInt(0); } if (thumbnailInfo != null) { dest.writeInt(1); thumbnailInfo.writeToParcel(dest, flags); } else { dest.writeInt(0); } } public void readFromParcel(Parcel source) { Loading @@ -1572,6 +1654,11 @@ public class ActivityManager { } else { thumbnailFileDescriptor = null; } if (source.readInt() != 0) { thumbnailInfo = TaskThumbnailInfo.CREATOR.createFromParcel(source); } else { thumbnailInfo = null; } } public static final Creator<TaskThumbnail> CREATOR = new Creator<TaskThumbnail>() { Loading @@ -1582,10 +1669,6 @@ public class ActivityManager { return new TaskThumbnail[size]; } }; private TaskThumbnail(Parcel source) { readFromParcel(source); } } /** @hide */ Loading
services/core/java/com/android/server/am/ActivityManagerService.java +12 −2 Original line number Diff line number Diff line Loading @@ -114,6 +114,7 @@ import com.android.server.SystemService; import com.android.server.SystemServiceManager; import com.android.server.Watchdog; import com.android.server.am.ActivityStack.ActivityState; import com.android.server.am.ActivityStackSupervisor.ActivityDisplay; import com.android.server.firewall.IntentFirewall; import com.android.server.pm.Installer; import com.android.server.pm.UserManagerService; Loading @@ -134,6 +135,7 @@ import android.app.Activity; import android.app.ActivityManager; import android.app.ActivityManager.RunningTaskInfo; import android.app.ActivityManager.StackInfo; import android.app.ActivityManager.TaskThumbnailInfo; import android.app.ActivityManagerInternal; import android.app.ActivityManagerInternal.SleepToken; import android.app.ActivityManagerNative; Loading Loading @@ -8577,8 +8579,16 @@ public final class ActivityManagerService extends ActivityManagerNative } } // Use the full screen as the context for the task thumbnail final Point displaySize = new Point(); final TaskThumbnailInfo thumbnailInfo = new TaskThumbnailInfo(); r.task.stack.getDisplaySize(displaySize); thumbnailInfo.taskWidth = displaySize.x; thumbnailInfo.taskHeight = displaySize.y; thumbnailInfo.screenOrientation = mConfiguration.orientation; TaskRecord task = new TaskRecord(this, mStackSupervisor.getNextTaskId(), ainfo, intent, description); intent, description, thumbnailInfo); int trimIdx = mRecentTasks.trimForTaskLocked(task, false); if (trimIdx >= 0) { Loading @@ -8597,7 +8607,7 @@ public final class ActivityManagerService extends ActivityManagerNative mRecentTasks.add(task); r.task.stack.addTask(task, false, false); task.setLastThumbnail(thumbnail); task.setLastThumbnailLocked(thumbnail); task.freeLastThumbnail(); return task.taskId; Loading
services/core/java/com/android/server/am/ActivityRecord.java +1 −1 Original line number Diff line number Diff line Loading @@ -932,7 +932,7 @@ final class ActivityRecord { if (newThumbnail != null) { if (DEBUG_THUMBNAILS) Slog.i(TAG_THUMBNAILS, "Setting thumbnail of " + this + " to " + newThumbnail); boolean thumbnailUpdated = task.setLastThumbnail(newThumbnail); boolean thumbnailUpdated = task.setLastThumbnailLocked(newThumbnail); if (thumbnailUpdated && isPersistable()) { mStackSupervisor.mService.notifyTaskPersisterLocked(task, false); } Loading
services/core/java/com/android/server/am/ActivityStack.java +5 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import static com.android.server.am.ActivityRecord.APPLICATION_ACTIVITY_TYPE; import static com.android.server.am.ActivityStackSupervisor.MOVING; import static com.android.server.am.ActivityStackSupervisor.PRESERVE_WINDOWS; import android.graphics.Point; import android.graphics.Rect; import android.util.ArraySet; Loading Loading @@ -388,6 +389,10 @@ final class ActivityStack { mWindowManager.detachStack(mStackId); } public void getDisplaySize(Point out) { mActivityContainer.mActivityDisplay.mDisplay.getSize(out); } void setBounds(Rect bounds) { mBounds = mFullscreen ? null : new Rect(bounds); if (mTaskPositioner != null) { Loading
services/core/java/com/android/server/am/ActivityStackSupervisor.java +1 −1 Original line number Diff line number Diff line Loading @@ -3681,7 +3681,7 @@ public final class ActivityStackSupervisor implements DisplayListener { void handleLaunchTaskBehindCompleteLocked(ActivityRecord r) { r.mLaunchTaskBehind = false; final TaskRecord task = r.task; task.setLastThumbnail(task.stack.screenshotActivities(r)); task.setLastThumbnailLocked(task.stack.screenshotActivities(r)); mRecentTasks.addLocked(task); mService.notifyTaskStackChangedLocked(); mWindowManager.setAppVisibility(r.appToken, false); Loading