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

Commit 76d21d09 authored by Riddle Hsu's avatar Riddle Hsu
Browse files

Move requestPictureInPictureMode to internal

There is no usage of ActivityTaskManager#requestPictureInPictureMode.
Only keep the server side method for the reference from the
implementation of other type device.

Bug: 174041144
Bug: 174040691
Test: ActivityTaskManagerServiceTests

Change-Id: Iac27a542f1ef693850336e31627bdb6629ee3d4e
parent 331168f1
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;
@@ -3254,23 +3252,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;
        }

@@ -3755,52 +3745,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