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

Commit ff02566e authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Move requestPictureInPictureMode to internal"

parents adefce94 76d21d09
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -141,7 +141,6 @@ package android.app {
    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public boolean moveTopActivityToPinnedRootTask(int, @NonNull android.graphics.Rect);
    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public void removeRootTasksInWindowingModes(@NonNull int[]);
    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public void removeRootTasksWithActivityTypes(@NonNull int[]);
    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public void requestPictureInPictureMode(@NonNull android.os.IBinder);
    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public void resizePrimarySplitScreen(@NonNull android.graphics.Rect, @NonNull android.graphics.Rect);
    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public void resizeTask(int, android.graphics.Rect);
    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public boolean setTaskWindowingMode(int, int, boolean) throws java.lang.SecurityException;
+0 −14
Original line number Diff line number Diff line
@@ -418,20 +418,6 @@ public class ActivityTaskManager {
        }
    }

    /**
     * Requests that an activity should enter picture-in-picture mode if possible.
     * @hide
     */
    @TestApi
    @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS)
    public void requestPictureInPictureMode(@NonNull IBinder token) {
        try {
            getService().requestPictureInPictureMode(token);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    /**
     * @return whether the UI mode of the given config supports error dialogs (ANR, crash, etc).
     * @hide
+0 −1
Original line number Diff line number Diff line
@@ -258,7 +258,6 @@ interface IActivityTaskManager {

    void suppressResizeConfigChanges(boolean suppress);
    boolean moveTopActivityToPinnedRootTask(int rootTaskId, in Rect bounds);
    void requestPictureInPictureMode(in IBinder token);

    /**
     * Resizes the docked stack, and all other stacks as the result of the dock stack bounds change.
+35 −0
Original line number Diff line number Diff line
@@ -39,12 +39,15 @@ import static com.android.server.wm.ActivityTaskManagerService.enforceNotIsolate
import static com.android.server.wm.Task.ActivityState.DESTROYED;
import static com.android.server.wm.Task.ActivityState.DESTROYING;

import android.annotation.NonNull;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityOptions;
import android.app.ActivityTaskManager;
import android.app.IActivityClientController;
import android.app.PictureInPictureParams;
import android.app.servertransaction.ClientTransaction;
import android.app.servertransaction.EnterPipRequestedItem;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@@ -736,6 +739,38 @@ class ActivityClientController extends IActivityClientController.Stub {
        return r;
    }

    /**
     * Requests that an activity should enter picture-in-picture mode if possible. This method may
     * be used by the implementation of non-phone form factors.
     */
    void requestPictureInPictureMode(@NonNull ActivityRecord r) {
        if (r.inPinnedWindowingMode()) {
            throw new IllegalStateException("Activity is already in PIP mode");
        }

        final boolean canEnterPictureInPicture = r.checkEnterPictureInPictureState(
                "requestPictureInPictureMode", /* beforeStopping */ false);
        if (!canEnterPictureInPicture) {
            throw new IllegalStateException(
                    "Requested PIP on an activity that doesn't support it");
        }

        if (r.pictureInPictureArgs.isAutoEnterEnabled()) {
            mService.enterPictureInPictureMode(r, r.pictureInPictureArgs);
            return;
        }

        try {
            final ClientTransaction transaction = ClientTransaction.obtain(
                    r.app.getThread(), r.token);
            transaction.addCallback(EnterPipRequestedItem.obtain());
            mService.getLifecycleManager().scheduleTransaction(transaction);
        } catch (Exception e) {
            Slog.w(TAG, "Failed to send enter pip requested item: "
                    + r.intent.getComponent(), e);
        }
    }

    @Override
    public void toggleFreeformWindowingMode(IBinder token) {
        final long ident = Binder.clearCallingIdentity();
+2 −58
Original line number Diff line number Diff line
@@ -148,8 +148,6 @@ import android.app.WindowConfiguration;
import android.app.admin.DevicePolicyCache;
import android.app.assist.AssistContent;
import android.app.assist.AssistStructure;
import android.app.servertransaction.ClientTransaction;
import android.app.servertransaction.EnterPipRequestedItem;
import android.app.usage.UsageStatsManagerInternal;
import android.content.ActivityNotFoundException;
import android.content.ComponentName;
@@ -3253,23 +3251,15 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
        }
    }

    @VisibleForTesting
    boolean isInPictureInPictureMode(ActivityRecord r) {
        return r != null
                && r.getRootTask() != null
                && r.inPinnedWindowingMode()
                && r.getRootTask().isInTask(r) != null;
    }

    /**
     * Puts the given activity in picture in picture mode if possible.
     *
     * @return true if the activity is now in picture-in-picture mode, or false if it could not
     * enter picture-in-picture mode.
     */
    boolean enterPictureInPictureMode(ActivityRecord r, final PictureInPictureParams params) {
    boolean enterPictureInPictureMode(@NonNull ActivityRecord r, PictureInPictureParams params) {
        // If the activity is already in picture in picture mode, then just return early
        if (isInPictureInPictureMode(r)) {
        if (r.inPinnedWindowingMode()) {
            return true;
        }

@@ -3754,52 +3744,6 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
        }
    }

    /**
     * Requests that an activity should enter picture-in-picture mode if possible.
     */
    @Override
    public void requestPictureInPictureMode(IBinder token) throws RemoteException {
        enforceTaskPermission("requestPictureInPictureMode");
        final long origId = Binder.clearCallingIdentity();
        try {
            synchronized (mGlobalLock) {
                final ActivityRecord activity = ActivityRecord.forTokenLocked(token);
                if (activity == null) {
                    return;
                }

                if (isInPictureInPictureMode(activity)) {
                    throw new IllegalStateException("Activity is already in PIP mode");
                }

                final boolean canEnterPictureInPicture = activity.checkEnterPictureInPictureState(
                        "requestPictureInPictureMode", /* beforeStopping */ false);
                if (!canEnterPictureInPicture) {
                    throw new IllegalStateException(
                            "Requested PIP on an activity that doesn't support it");
                }

                if (activity.pictureInPictureArgs.isAutoEnterEnabled()) {
                    enterPictureInPictureMode(activity, activity.pictureInPictureArgs);
                    return;
                }

                try {
                    final ClientTransaction transaction = ClientTransaction.obtain(
                            activity.app.getThread(),
                            activity.token);
                    transaction.addCallback(EnterPipRequestedItem.obtain());
                    getLifecycleManager().scheduleTransaction(transaction);
                } catch (Exception e) {
                    Slog.w(TAG, "Failed to send enter pip requested item: "
                            + activity.intent.getComponent(), e);
                }
            }
        } finally {
            Binder.restoreCallingIdentity(origId);
        }
    }

    void dumpLastANRLocked(PrintWriter pw) {
        pw.println("ACTIVITY MANAGER LAST ANR (dumpsys activity lastanr)");
        if (mLastANRState == null) {
Loading