Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 974f55fa authored by Winson Chung's avatar Winson Chung Committed by Android (Google) Code Review
Browse files

Merge "Saving additional context when taking task screenshots."

parents 208ff92d c809cbb9
Loading
Loading
Loading
Loading
+87 −4
Original line number Diff line number Diff line
@@ -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();
@@ -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) {
@@ -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>() {
@@ -1582,10 +1669,6 @@ public class ActivityManager {
                return new TaskThumbnail[size];
            }
        };

        private TaskThumbnail(Parcel source) {
            readFromParcel(source);
        }
    }

    /** @hide */
+12 −2
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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) {
@@ -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;
+1 −1
Original line number Diff line number Diff line
@@ -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);
            }
+5 −0
Original line number Diff line number Diff line
@@ -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;

@@ -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) {
+1 −1
Original line number Diff line number Diff line
@@ -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