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

Commit 32a354bf authored by Evan Rosky's avatar Evan Rosky Committed by Automerger Merge Worker
Browse files

Merge "Hook up shell-transitions screenshotting for recents" into tm-dev am: b4749cce

parents c3858e0f b4749cce
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -267,6 +267,12 @@ interface IActivityTaskManager {
     */
    android.window.TaskSnapshot getTaskSnapshot(int taskId, boolean isLowResolution);

    /**
     * @param taskId the id of the task to take a snapshot of
     * @return a graphic buffer representing a screenshot of a task
     */
    android.window.TaskSnapshot takeTaskSnapshot(int taskId);

    /**
     * Return the user id of last resumed activity.
     */
+11 −1
Original line number Diff line number Diff line
@@ -47,6 +47,7 @@ import android.window.IRemoteTransition;
import android.window.IRemoteTransitionFinishedCallback;
import android.window.PictureInPictureSurfaceTransaction;
import android.window.RemoteTransition;
import android.window.TaskSnapshot;
import android.window.TransitionFilter;
import android.window.TransitionInfo;
import android.window.WindowContainerToken;
@@ -322,7 +323,16 @@ public class RemoteTransitionCompat implements Parcelable {
        }

        @Override public ThumbnailData screenshotTask(int taskId) {
            return mWrapped != null ? mWrapped.screenshotTask(taskId) : null;
            try {
                final TaskSnapshot snapshot =
                        ActivityTaskManager.getService().takeTaskSnapshot(taskId);
                if (snapshot != null) {
                    return new ThumbnailData(snapshot);
                }
            } catch (RemoteException e) {
                Log.e(TAG, "Failed to screenshot task", e);
            }
            return null;
        }

        @Override public void setInputConsumerEnabled(boolean enabled) {
+29 −14
Original line number Diff line number Diff line
@@ -3599,14 +3599,6 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
        mAmInternal.enforceCallingPermission(READ_FRAME_BUFFER, "getTaskSnapshot()");
        final long ident = Binder.clearCallingIdentity();
        try {
            return getTaskSnapshot(taskId, isLowResolution, true /* restoreFromDisk */);
        } finally {
            Binder.restoreCallingIdentity(ident);
        }
    }

    private TaskSnapshot getTaskSnapshot(int taskId, boolean isLowResolution,
            boolean restoreFromDisk) {
            final Task task;
            synchronized (mGlobalLock) {
                task = mRootWindowContainer.anyTaskForId(taskId,
@@ -3617,7 +3609,31 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
                }
            }
            // Don't call this while holding the lock as this operation might hit the disk.
        return task.getSnapshot(isLowResolution, restoreFromDisk);
            return mWindowManager.mTaskSnapshotController.getSnapshot(taskId, task.mUserId,
                    true /* restoreFromDisk */, isLowResolution);
        } finally {
            Binder.restoreCallingIdentity(ident);
        }
    }

    @Override
    public TaskSnapshot takeTaskSnapshot(int taskId) {
        mAmInternal.enforceCallingPermission(READ_FRAME_BUFFER, "takeTaskSnapshot()");
        final long ident = Binder.clearCallingIdentity();
        try {
            synchronized (mGlobalLock) {
                final Task task = mRootWindowContainer.anyTaskForId(taskId,
                        MATCH_ATTACHED_TASK_OR_RECENT_TASKS);
                if (task == null || !task.isVisible()) {
                    Slog.w(TAG, "takeTaskSnapshot: taskId=" + taskId + " not found or not visible");
                    return null;
                }
                return mWindowManager.mTaskSnapshotController.captureTaskSnapshot(
                        task, false /* snapshotHome */);
            }
        } finally {
            Binder.restoreCallingIdentity(ident);
        }
    }

    /** Return the user id of the last resumed activity. */
@@ -6559,8 +6575,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
        @Override
        public TaskSnapshot getTaskSnapshotBlocking(
                int taskId, boolean isLowResolution) {
            return ActivityTaskManagerService.this.getTaskSnapshot(taskId, isLowResolution,
                    true /* restoreFromDisk */);
            return ActivityTaskManagerService.this.getTaskSnapshot(taskId, isLowResolution);
        }

        @Override
+0 −11
Original line number Diff line number Diff line
@@ -967,17 +967,6 @@ class Task extends TaskFragment {
                || targetWindowingMode == WINDOWING_MODE_FREEFORM;
    }

    /**
     * DO NOT HOLD THE ACTIVITY MANAGER LOCK WHEN CALLING THIS METHOD!
     */
    TaskSnapshot getSnapshot(boolean isLowResolution, boolean restoreFromDisk) {

        // TODO: Move this to {@link TaskWindowContainerController} once recent tasks are more
        // synchronized between AM and WM.
        return mAtmService.mWindowManager.getTaskSnapshot(mTaskId, mUserId, isLowResolution,
                restoreFromDisk);
    }

    void touchActiveTime() {
        lastActiveTime = SystemClock.elapsedRealtime();
    }