Loading libs/WindowManager/Shell/src/com/android/wm/shell/common/pip/IPip.aidl +3 −3 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.wm.shell.common.pip; import android.app.ActivityManager; import android.app.PictureInPictureParams; import android.view.SurfaceControl; import android.content.ComponentName; Loading @@ -41,9 +42,8 @@ interface IPip { bounds * @return destination bounds the PiP window should land into */ Rect startSwipePipToHome(in ComponentName componentName, in ActivityInfo activityInfo, in PictureInPictureParams pictureInPictureParams, int launcherRotation, in Rect hotseatKeepClearArea) = 1; Rect startSwipePipToHome(in ActivityManager.RunningTaskInfo taskInfo, int launcherRotation, in Rect hotseatKeepClearArea) = 1; /** * Notifies the swiping Activity to PiP onto home transition is finished Loading libs/WindowManager/Shell/src/com/android/wm/shell/dagger/pip/Pip2Module.java +2 −1 Original line number Diff line number Diff line Loading @@ -83,13 +83,14 @@ public abstract class Pip2Module { @NonNull PipTransitionState pipStackListenerController, @NonNull PipDisplayLayoutState pipDisplayLayoutState, @NonNull PipUiStateChangeController pipUiStateChangeController, DisplayController displayController, Optional<DesktopUserRepositories> desktopUserRepositoriesOptional, Optional<DesktopWallpaperActivityTokenProvider> desktopWallpaperActivityTokenProviderOptional) { return new PipTransition(context, shellInit, shellTaskOrganizer, transitions, pipBoundsState, null, pipBoundsAlgorithm, pipTaskListener, pipScheduler, pipStackListenerController, pipDisplayLayoutState, pipUiStateChangeController, desktopUserRepositoriesOptional, pipUiStateChangeController, displayController, desktopUserRepositoriesOptional, desktopWallpaperActivityTokenProviderOptional); } Loading libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java +5 −5 Original line number Diff line number Diff line Loading @@ -1317,14 +1317,14 @@ public class PipController implements PipTransitionController.PipTransitionCallb } @Override public Rect startSwipePipToHome(ComponentName componentName, ActivityInfo activityInfo, PictureInPictureParams pictureInPictureParams, int launcherRotation, Rect keepClearArea) { public Rect startSwipePipToHome(ActivityManager.RunningTaskInfo taskInfo, int launcherRotation, Rect keepClearArea) { Rect[] result = new Rect[1]; executeRemoteCallWithTaskPermission(mController, "startSwipePipToHome", (controller) -> { result[0] = controller.startSwipePipToHome(componentName, activityInfo, pictureInPictureParams, launcherRotation, keepClearArea); result[0] = controller.startSwipePipToHome(taskInfo.topActivity, taskInfo.topActivityInfo, taskInfo.pictureInPictureParams, launcherRotation, keepClearArea); }, true /* blocking */); return result[0]; } Loading libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipController.java +18 −6 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ import androidx.annotation.Nullable; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.protolog.ProtoLog; import com.android.internal.util.Preconditions; import com.android.window.flags.Flags; import com.android.wm.shell.R; import com.android.wm.shell.ShellTaskOrganizer; import com.android.wm.shell.common.DisplayChangeController; Loading Loading @@ -358,10 +359,21 @@ public class PipController implements ConfigurationChangeListener, // private Rect getSwipePipToHomeBounds(ComponentName componentName, ActivityInfo activityInfo, PictureInPictureParams pictureInPictureParams, int displayId, PictureInPictureParams pictureInPictureParams, int launcherRotation, Rect hotseatKeepClearArea) { ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE, "getSwipePipToHomeBounds: %s", componentName); // If PiP is enabled on Connected Displays, update PipDisplayLayoutState to have the correct // display info that PiP is entering in. if (Flags.enableConnectedDisplaysPip()) { final DisplayLayout displayLayout = mDisplayController.getDisplayLayout(displayId); if (displayLayout != null) { mPipDisplayLayoutState.setDisplayId(displayId); mPipDisplayLayoutState.setDisplayLayout(displayLayout); } } // Preemptively add the keep clear area for Hotseat, so that it is taken into account // when calculating the entry destination bounds of PiP window. mPipBoundsState.setNamedUnrestrictedKeepClearArea( Loading Loading @@ -592,14 +604,14 @@ public class PipController implements ConfigurationChangeListener, } @Override public Rect startSwipePipToHome(ComponentName componentName, ActivityInfo activityInfo, PictureInPictureParams pictureInPictureParams, int launcherRotation, Rect keepClearArea) { public Rect startSwipePipToHome(ActivityManager.RunningTaskInfo taskInfo, int launcherRotation, Rect keepClearArea) { Rect[] result = new Rect[1]; executeRemoteCallWithTaskPermission(mController, "startSwipePipToHome", (controller) -> { result[0] = controller.getSwipePipToHomeBounds(componentName, activityInfo, pictureInPictureParams, launcherRotation, keepClearArea); result[0] = controller.getSwipePipToHomeBounds(taskInfo.topActivity, taskInfo.topActivityInfo, taskInfo.displayId, taskInfo.pictureInPictureParams, launcherRotation, keepClearArea); }, true /* blocking */); return result[0]; } Loading libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipTransition.java +16 −0 Original line number Diff line number Diff line Loading @@ -59,6 +59,8 @@ import com.android.internal.util.Preconditions; import com.android.window.flags.Flags; import com.android.wm.shell.ShellTaskOrganizer; import com.android.wm.shell.common.ComponentUtils; import com.android.wm.shell.common.DisplayController; import com.android.wm.shell.common.DisplayLayout; import com.android.wm.shell.common.pip.PipBoundsAlgorithm; import com.android.wm.shell.common.pip.PipBoundsState; import com.android.wm.shell.common.pip.PipDisplayLayoutState; Loading Loading @@ -112,6 +114,7 @@ public class PipTransition extends PipTransitionController implements private final PipScheduler mPipScheduler; private final PipTransitionState mPipTransitionState; private final PipDisplayLayoutState mPipDisplayLayoutState; private final DisplayController mDisplayController; private final Optional<DesktopUserRepositories> mDesktopUserRepositoriesOptional; private final Optional<DesktopWallpaperActivityTokenProvider> mDesktopWallpaperActivityTokenProviderOptional; Loading Loading @@ -151,6 +154,7 @@ public class PipTransition extends PipTransitionController implements PipTransitionState pipTransitionState, PipDisplayLayoutState pipDisplayLayoutState, PipUiStateChangeController pipUiStateChangeController, DisplayController displayController, Optional<DesktopUserRepositories> desktopUserRepositoriesOptional, Optional<DesktopWallpaperActivityTokenProvider> desktopWallpaperActivityTokenProviderOptional) { Loading @@ -164,6 +168,7 @@ public class PipTransition extends PipTransitionController implements mPipTransitionState = pipTransitionState; mPipTransitionState.addPipTransitionStateChangedListener(this); mPipDisplayLayoutState = pipDisplayLayoutState; mDisplayController = displayController; mDesktopUserRepositoriesOptional = desktopUserRepositoriesOptional; mDesktopWallpaperActivityTokenProviderOptional = desktopWallpaperActivityTokenProviderOptional; Loading Loading @@ -824,6 +829,17 @@ public class PipTransition extends PipTransitionController implements mPipBoundsState.setBoundsStateForEntry(pipTask.topActivity, pipTask.topActivityInfo, pipParams, mPipBoundsAlgorithm); // If PiP is enabled on Connected Displays, update PipDisplayLayoutState to have the correct // display info that PiP is entering in. if (Flags.enableConnectedDisplaysPip()) { final DisplayLayout displayLayout = mDisplayController.getDisplayLayout( pipTask.displayId); if (displayLayout != null) { mPipDisplayLayoutState.setDisplayId(pipTask.displayId); mPipDisplayLayoutState.setDisplayLayout(displayLayout); } } // calculate the entry bounds and notify core to move task to pinned with final bounds final Rect entryBounds = mPipBoundsAlgorithm.getEntryDestinationBounds(); mPipBoundsState.setBounds(entryBounds); Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/common/pip/IPip.aidl +3 −3 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.wm.shell.common.pip; import android.app.ActivityManager; import android.app.PictureInPictureParams; import android.view.SurfaceControl; import android.content.ComponentName; Loading @@ -41,9 +42,8 @@ interface IPip { bounds * @return destination bounds the PiP window should land into */ Rect startSwipePipToHome(in ComponentName componentName, in ActivityInfo activityInfo, in PictureInPictureParams pictureInPictureParams, int launcherRotation, in Rect hotseatKeepClearArea) = 1; Rect startSwipePipToHome(in ActivityManager.RunningTaskInfo taskInfo, int launcherRotation, in Rect hotseatKeepClearArea) = 1; /** * Notifies the swiping Activity to PiP onto home transition is finished Loading
libs/WindowManager/Shell/src/com/android/wm/shell/dagger/pip/Pip2Module.java +2 −1 Original line number Diff line number Diff line Loading @@ -83,13 +83,14 @@ public abstract class Pip2Module { @NonNull PipTransitionState pipStackListenerController, @NonNull PipDisplayLayoutState pipDisplayLayoutState, @NonNull PipUiStateChangeController pipUiStateChangeController, DisplayController displayController, Optional<DesktopUserRepositories> desktopUserRepositoriesOptional, Optional<DesktopWallpaperActivityTokenProvider> desktopWallpaperActivityTokenProviderOptional) { return new PipTransition(context, shellInit, shellTaskOrganizer, transitions, pipBoundsState, null, pipBoundsAlgorithm, pipTaskListener, pipScheduler, pipStackListenerController, pipDisplayLayoutState, pipUiStateChangeController, desktopUserRepositoriesOptional, pipUiStateChangeController, displayController, desktopUserRepositoriesOptional, desktopWallpaperActivityTokenProviderOptional); } Loading
libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java +5 −5 Original line number Diff line number Diff line Loading @@ -1317,14 +1317,14 @@ public class PipController implements PipTransitionController.PipTransitionCallb } @Override public Rect startSwipePipToHome(ComponentName componentName, ActivityInfo activityInfo, PictureInPictureParams pictureInPictureParams, int launcherRotation, Rect keepClearArea) { public Rect startSwipePipToHome(ActivityManager.RunningTaskInfo taskInfo, int launcherRotation, Rect keepClearArea) { Rect[] result = new Rect[1]; executeRemoteCallWithTaskPermission(mController, "startSwipePipToHome", (controller) -> { result[0] = controller.startSwipePipToHome(componentName, activityInfo, pictureInPictureParams, launcherRotation, keepClearArea); result[0] = controller.startSwipePipToHome(taskInfo.topActivity, taskInfo.topActivityInfo, taskInfo.pictureInPictureParams, launcherRotation, keepClearArea); }, true /* blocking */); return result[0]; } Loading
libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipController.java +18 −6 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ import androidx.annotation.Nullable; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.protolog.ProtoLog; import com.android.internal.util.Preconditions; import com.android.window.flags.Flags; import com.android.wm.shell.R; import com.android.wm.shell.ShellTaskOrganizer; import com.android.wm.shell.common.DisplayChangeController; Loading Loading @@ -358,10 +359,21 @@ public class PipController implements ConfigurationChangeListener, // private Rect getSwipePipToHomeBounds(ComponentName componentName, ActivityInfo activityInfo, PictureInPictureParams pictureInPictureParams, int displayId, PictureInPictureParams pictureInPictureParams, int launcherRotation, Rect hotseatKeepClearArea) { ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE, "getSwipePipToHomeBounds: %s", componentName); // If PiP is enabled on Connected Displays, update PipDisplayLayoutState to have the correct // display info that PiP is entering in. if (Flags.enableConnectedDisplaysPip()) { final DisplayLayout displayLayout = mDisplayController.getDisplayLayout(displayId); if (displayLayout != null) { mPipDisplayLayoutState.setDisplayId(displayId); mPipDisplayLayoutState.setDisplayLayout(displayLayout); } } // Preemptively add the keep clear area for Hotseat, so that it is taken into account // when calculating the entry destination bounds of PiP window. mPipBoundsState.setNamedUnrestrictedKeepClearArea( Loading Loading @@ -592,14 +604,14 @@ public class PipController implements ConfigurationChangeListener, } @Override public Rect startSwipePipToHome(ComponentName componentName, ActivityInfo activityInfo, PictureInPictureParams pictureInPictureParams, int launcherRotation, Rect keepClearArea) { public Rect startSwipePipToHome(ActivityManager.RunningTaskInfo taskInfo, int launcherRotation, Rect keepClearArea) { Rect[] result = new Rect[1]; executeRemoteCallWithTaskPermission(mController, "startSwipePipToHome", (controller) -> { result[0] = controller.getSwipePipToHomeBounds(componentName, activityInfo, pictureInPictureParams, launcherRotation, keepClearArea); result[0] = controller.getSwipePipToHomeBounds(taskInfo.topActivity, taskInfo.topActivityInfo, taskInfo.displayId, taskInfo.pictureInPictureParams, launcherRotation, keepClearArea); }, true /* blocking */); return result[0]; } Loading
libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipTransition.java +16 −0 Original line number Diff line number Diff line Loading @@ -59,6 +59,8 @@ import com.android.internal.util.Preconditions; import com.android.window.flags.Flags; import com.android.wm.shell.ShellTaskOrganizer; import com.android.wm.shell.common.ComponentUtils; import com.android.wm.shell.common.DisplayController; import com.android.wm.shell.common.DisplayLayout; import com.android.wm.shell.common.pip.PipBoundsAlgorithm; import com.android.wm.shell.common.pip.PipBoundsState; import com.android.wm.shell.common.pip.PipDisplayLayoutState; Loading Loading @@ -112,6 +114,7 @@ public class PipTransition extends PipTransitionController implements private final PipScheduler mPipScheduler; private final PipTransitionState mPipTransitionState; private final PipDisplayLayoutState mPipDisplayLayoutState; private final DisplayController mDisplayController; private final Optional<DesktopUserRepositories> mDesktopUserRepositoriesOptional; private final Optional<DesktopWallpaperActivityTokenProvider> mDesktopWallpaperActivityTokenProviderOptional; Loading Loading @@ -151,6 +154,7 @@ public class PipTransition extends PipTransitionController implements PipTransitionState pipTransitionState, PipDisplayLayoutState pipDisplayLayoutState, PipUiStateChangeController pipUiStateChangeController, DisplayController displayController, Optional<DesktopUserRepositories> desktopUserRepositoriesOptional, Optional<DesktopWallpaperActivityTokenProvider> desktopWallpaperActivityTokenProviderOptional) { Loading @@ -164,6 +168,7 @@ public class PipTransition extends PipTransitionController implements mPipTransitionState = pipTransitionState; mPipTransitionState.addPipTransitionStateChangedListener(this); mPipDisplayLayoutState = pipDisplayLayoutState; mDisplayController = displayController; mDesktopUserRepositoriesOptional = desktopUserRepositoriesOptional; mDesktopWallpaperActivityTokenProviderOptional = desktopWallpaperActivityTokenProviderOptional; Loading Loading @@ -824,6 +829,17 @@ public class PipTransition extends PipTransitionController implements mPipBoundsState.setBoundsStateForEntry(pipTask.topActivity, pipTask.topActivityInfo, pipParams, mPipBoundsAlgorithm); // If PiP is enabled on Connected Displays, update PipDisplayLayoutState to have the correct // display info that PiP is entering in. if (Flags.enableConnectedDisplaysPip()) { final DisplayLayout displayLayout = mDisplayController.getDisplayLayout( pipTask.displayId); if (displayLayout != null) { mPipDisplayLayoutState.setDisplayId(pipTask.displayId); mPipDisplayLayoutState.setDisplayLayout(displayLayout); } } // calculate the entry bounds and notify core to move task to pinned with final bounds final Rect entryBounds = mPipBoundsAlgorithm.getEntryDestinationBounds(); mPipBoundsState.setBounds(entryBounds); Loading