Loading libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java +37 −0 Original line number Diff line number Diff line Loading @@ -89,6 +89,7 @@ import com.android.wm.shell.splitscreen.SplitScreenController; import com.android.wm.shell.transition.Transitions; import java.io.PrintWriter; import java.util.List; import java.util.Objects; import java.util.Optional; import java.util.function.Consumer; Loading Loading @@ -116,6 +117,8 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener, */ private static final int CONTENT_OVERLAY_FADE_OUT_DELAY_MS = 500; private static final int CRASH_RECOVERY_CHECK_DELAY_MS = 3000; private final Context mContext; private final SyncTransactionQueue mSyncTransactionQueue; private final PipBoundsState mPipBoundsState; Loading Loading @@ -323,6 +326,8 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener, @Nullable SurfaceControl mSwipePipToHomeOverlay; private Runnable mRemoveStaledPinnedTaskRunnable; public PipTaskOrganizer(Context context, @NonNull SyncTransactionQueue syncTransactionQueue, @NonNull PipTransitionState pipTransitionState, Loading Loading @@ -371,6 +376,14 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener, mPipTransitionController.setPipOrganizer(this); displayController.addDisplayWindowListener(this); pipTransitionController.registerPipTransitionCallback(mPipTransitionCallback); mPipTransitionState.addOnPipTransitionStateChangedListener( (oldState, newState) -> { if (mPipTransitionState.isEnteringPip() && mRemoveStaledPinnedTaskRunnable != null) { mMainExecutor.removeCallbacks(mRemoveStaledPinnedTaskRunnable); mRemoveStaledPinnedTaskRunnable = null; } }); } public PipTransitionController getTransitionController() { Loading Loading @@ -721,6 +734,30 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener, mPictureInPictureParams.getSubtitle()); } mRemoveStaledPinnedTaskRunnable = () -> { ProtoLog.w(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE, "SystemUI reboot detected, remove staled PiP task"); // Remove the staled Task by matching component name. final ComponentName toRemove = info.topActivity; try { List<ActivityManager.RunningTaskInfo> tasks = ActivityTaskManager.getService() .getTasks(10 /* maxNum */, false /* filterOnlyVisibleRecents */, false /* keepIntentExtra */, Display.DEFAULT_DISPLAY); for (ActivityManager.RunningTaskInfo task : tasks) { if (toRemove.equals(task.topActivity)) { ActivityTaskManager.getService().removeTask(task.taskId); } } } catch (RemoteException e) { ProtoLog.e(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE, "%s: Failed to remove PiP, %s", TAG, e); } }; mMainExecutor.executeDelayed(mRemoveStaledPinnedTaskRunnable, CRASH_RECOVERY_CHECK_DELAY_MS); mPipUiEventLoggerLogger.setTaskInfo(mTaskInfo); // If the displayId of the task is different than what PipBoundsHandler has, then update Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java +37 −0 Original line number Diff line number Diff line Loading @@ -89,6 +89,7 @@ import com.android.wm.shell.splitscreen.SplitScreenController; import com.android.wm.shell.transition.Transitions; import java.io.PrintWriter; import java.util.List; import java.util.Objects; import java.util.Optional; import java.util.function.Consumer; Loading Loading @@ -116,6 +117,8 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener, */ private static final int CONTENT_OVERLAY_FADE_OUT_DELAY_MS = 500; private static final int CRASH_RECOVERY_CHECK_DELAY_MS = 3000; private final Context mContext; private final SyncTransactionQueue mSyncTransactionQueue; private final PipBoundsState mPipBoundsState; Loading Loading @@ -323,6 +326,8 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener, @Nullable SurfaceControl mSwipePipToHomeOverlay; private Runnable mRemoveStaledPinnedTaskRunnable; public PipTaskOrganizer(Context context, @NonNull SyncTransactionQueue syncTransactionQueue, @NonNull PipTransitionState pipTransitionState, Loading Loading @@ -371,6 +376,14 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener, mPipTransitionController.setPipOrganizer(this); displayController.addDisplayWindowListener(this); pipTransitionController.registerPipTransitionCallback(mPipTransitionCallback); mPipTransitionState.addOnPipTransitionStateChangedListener( (oldState, newState) -> { if (mPipTransitionState.isEnteringPip() && mRemoveStaledPinnedTaskRunnable != null) { mMainExecutor.removeCallbacks(mRemoveStaledPinnedTaskRunnable); mRemoveStaledPinnedTaskRunnable = null; } }); } public PipTransitionController getTransitionController() { Loading Loading @@ -721,6 +734,30 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener, mPictureInPictureParams.getSubtitle()); } mRemoveStaledPinnedTaskRunnable = () -> { ProtoLog.w(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE, "SystemUI reboot detected, remove staled PiP task"); // Remove the staled Task by matching component name. final ComponentName toRemove = info.topActivity; try { List<ActivityManager.RunningTaskInfo> tasks = ActivityTaskManager.getService() .getTasks(10 /* maxNum */, false /* filterOnlyVisibleRecents */, false /* keepIntentExtra */, Display.DEFAULT_DISPLAY); for (ActivityManager.RunningTaskInfo task : tasks) { if (toRemove.equals(task.topActivity)) { ActivityTaskManager.getService().removeTask(task.taskId); } } } catch (RemoteException e) { ProtoLog.e(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE, "%s: Failed to remove PiP, %s", TAG, e); } }; mMainExecutor.executeDelayed(mRemoveStaledPinnedTaskRunnable, CRASH_RECOVERY_CHECK_DELAY_MS); mPipUiEventLoggerLogger.setTaskInfo(mTaskInfo); // If the displayId of the task is different than what PipBoundsHandler has, then update Loading