Loading core/api/test-current.txt +0 −1 Original line number Diff line number Diff line Loading @@ -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; Loading core/java/android/app/ActivityTaskManager.java +0 −14 Original line number Diff line number Diff line Loading @@ -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 Loading core/java/android/app/IActivityTaskManager.aidl +0 −1 Original line number Diff line number Diff line Loading @@ -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. Loading services/core/java/com/android/server/wm/ActivityClientController.java +35 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); Loading services/core/java/com/android/server/wm/ActivityTaskManagerService.java +2 −58 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; } Loading Loading @@ -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 Loading
core/api/test-current.txt +0 −1 Original line number Diff line number Diff line Loading @@ -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; Loading
core/java/android/app/ActivityTaskManager.java +0 −14 Original line number Diff line number Diff line Loading @@ -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 Loading
core/java/android/app/IActivityTaskManager.aidl +0 −1 Original line number Diff line number Diff line Loading @@ -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. Loading
services/core/java/com/android/server/wm/ActivityClientController.java +35 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); Loading
services/core/java/com/android/server/wm/ActivityTaskManagerService.java +2 −58 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; } Loading Loading @@ -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