Loading services/core/java/com/android/server/wm/ActivityTaskManagerService.java +9 −3 Original line number Diff line number Diff line Loading @@ -3387,9 +3387,15 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { final List<RemoteAction> actions = r.pictureInPictureArgs.getActions(); mRootWindowContainer.moveActivityToPinnedRootTask( r, "enterPictureInPictureMode"); final Task rootTask = r.getRootTask(); rootTask.setPictureInPictureAspectRatio(aspectRatio); rootTask.setPictureInPictureActions(actions); final Task task = r.getTask(); task.setPictureInPictureAspectRatio(aspectRatio); task.setPictureInPictureActions(actions); // Continue the pausing process after entering pip. if (task.getPausingActivity() == r) { task.schedulePauseActivity(r, false /* userLeaving */, false /* pauseImmediately */, "auto-pip"); } } }; Loading services/core/java/com/android/server/wm/Task.java +21 −17 Original line number Diff line number Diff line Loading @@ -5771,23 +5771,8 @@ class Task extends WindowContainer<WindowContainer> { + "directly: %s", prev); didAutoPip = mAtmService.enterPictureInPictureMode(prev, prev.pictureInPictureArgs); mPausingActivity = null; } else { ProtoLog.v(WM_DEBUG_STATES, "Enqueueing pending pause: %s", prev); try { EventLogTags.writeWmPauseActivity(prev.mUserId, System.identityHashCode(prev), prev.shortComponentName, "userLeaving=" + userLeaving, reason); mAtmService.getLifecycleManager().scheduleTransaction(prev.app.getThread(), prev.appToken, PauseActivityItem.obtain(prev.finishing, userLeaving, prev.configChangeFlags, pauseImmediately)); } catch (Exception e) { // Ignore exception, if process died other code will cleanup. Slog.w(TAG, "Exception thrown during pause", e); mPausingActivity = null; mLastPausedActivity = null; mTaskSupervisor.mNoHistoryActivities.remove(prev); } schedulePauseActivity(prev, userLeaving, pauseImmediately, reason); } } else { mPausingActivity = null; Loading @@ -5802,7 +5787,7 @@ class Task extends WindowContainer<WindowContainer> { } // If already entered PIP mode, no need to keep pausing. if (mPausingActivity != null && !didAutoPip) { if (mPausingActivity != null) { // Have the window manager pause its key dispatching until the new // activity has started. If we're pausing the activity just because // the screen is being turned off and the UI is sleeping, don't interrupt Loading Loading @@ -5835,6 +5820,25 @@ class Task extends WindowContainer<WindowContainer> { } } void schedulePauseActivity(ActivityRecord prev, boolean userLeaving, boolean pauseImmediately, String reason) { ProtoLog.v(WM_DEBUG_STATES, "Enqueueing pending pause: %s", prev); try { EventLogTags.writeWmPauseActivity(prev.mUserId, System.identityHashCode(prev), prev.shortComponentName, "userLeaving=" + userLeaving, reason); mAtmService.getLifecycleManager().scheduleTransaction(prev.app.getThread(), prev.appToken, PauseActivityItem.obtain(prev.finishing, userLeaving, prev.configChangeFlags, pauseImmediately)); } catch (Exception e) { // Ignore exception, if process died other code will cleanup. Slog.w(TAG, "Exception thrown during pause", e); mPausingActivity = null; mLastPausedActivity = null; mTaskSupervisor.mNoHistoryActivities.remove(prev); } } @VisibleForTesting void completePauseLocked(boolean resumeNext, ActivityRecord resuming) { // Complete the pausing process of a pausing activity, so it doesn't make sense to Loading Loading
services/core/java/com/android/server/wm/ActivityTaskManagerService.java +9 −3 Original line number Diff line number Diff line Loading @@ -3387,9 +3387,15 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { final List<RemoteAction> actions = r.pictureInPictureArgs.getActions(); mRootWindowContainer.moveActivityToPinnedRootTask( r, "enterPictureInPictureMode"); final Task rootTask = r.getRootTask(); rootTask.setPictureInPictureAspectRatio(aspectRatio); rootTask.setPictureInPictureActions(actions); final Task task = r.getTask(); task.setPictureInPictureAspectRatio(aspectRatio); task.setPictureInPictureActions(actions); // Continue the pausing process after entering pip. if (task.getPausingActivity() == r) { task.schedulePauseActivity(r, false /* userLeaving */, false /* pauseImmediately */, "auto-pip"); } } }; Loading
services/core/java/com/android/server/wm/Task.java +21 −17 Original line number Diff line number Diff line Loading @@ -5771,23 +5771,8 @@ class Task extends WindowContainer<WindowContainer> { + "directly: %s", prev); didAutoPip = mAtmService.enterPictureInPictureMode(prev, prev.pictureInPictureArgs); mPausingActivity = null; } else { ProtoLog.v(WM_DEBUG_STATES, "Enqueueing pending pause: %s", prev); try { EventLogTags.writeWmPauseActivity(prev.mUserId, System.identityHashCode(prev), prev.shortComponentName, "userLeaving=" + userLeaving, reason); mAtmService.getLifecycleManager().scheduleTransaction(prev.app.getThread(), prev.appToken, PauseActivityItem.obtain(prev.finishing, userLeaving, prev.configChangeFlags, pauseImmediately)); } catch (Exception e) { // Ignore exception, if process died other code will cleanup. Slog.w(TAG, "Exception thrown during pause", e); mPausingActivity = null; mLastPausedActivity = null; mTaskSupervisor.mNoHistoryActivities.remove(prev); } schedulePauseActivity(prev, userLeaving, pauseImmediately, reason); } } else { mPausingActivity = null; Loading @@ -5802,7 +5787,7 @@ class Task extends WindowContainer<WindowContainer> { } // If already entered PIP mode, no need to keep pausing. if (mPausingActivity != null && !didAutoPip) { if (mPausingActivity != null) { // Have the window manager pause its key dispatching until the new // activity has started. If we're pausing the activity just because // the screen is being turned off and the UI is sleeping, don't interrupt Loading Loading @@ -5835,6 +5820,25 @@ class Task extends WindowContainer<WindowContainer> { } } void schedulePauseActivity(ActivityRecord prev, boolean userLeaving, boolean pauseImmediately, String reason) { ProtoLog.v(WM_DEBUG_STATES, "Enqueueing pending pause: %s", prev); try { EventLogTags.writeWmPauseActivity(prev.mUserId, System.identityHashCode(prev), prev.shortComponentName, "userLeaving=" + userLeaving, reason); mAtmService.getLifecycleManager().scheduleTransaction(prev.app.getThread(), prev.appToken, PauseActivityItem.obtain(prev.finishing, userLeaving, prev.configChangeFlags, pauseImmediately)); } catch (Exception e) { // Ignore exception, if process died other code will cleanup. Slog.w(TAG, "Exception thrown during pause", e); mPausingActivity = null; mLastPausedActivity = null; mTaskSupervisor.mNoHistoryActivities.remove(prev); } } @VisibleForTesting void completePauseLocked(boolean resumeNext, ActivityRecord resuming) { // Complete the pausing process of a pausing activity, so it doesn't make sense to Loading