Loading core/java/android/window/WindowContainerTransaction.java +13 −7 Original line number Diff line number Diff line Loading @@ -567,21 +567,27 @@ public final class WindowContainerTransaction implements Parcelable { } /** * Sets whether back press should be intercepted for the root activity of the given task * container. If true, then * {@link TaskOrganizer#onBackPressedOnTaskRoot(ActivityManager.RunningTaskInfo)} will be * called. * Sets whether back press should be intercepted for the root activity of the given root task * or its children. * * @param container The window container of the task that the intercept-back state is set on. * <p>When {@code true}, the system will invoke * {@link TaskOrganizer#onBackPressedOnTaskRoot(ActivityManager.RunningTaskInfo)}, providing * the {@link ActivityManager.RunningTaskInfo} of the task that received the back press. * This interception mechanism is specifically designed to be applied to the root task * container only. * * @param rootTaskContainer The window container of the task that the intercept-back state is * set on. This parameter is expected to refer to the root task of a * task stack. * @param interceptBackPressed {@code true} to allow back to be intercepted for the root * activity of the task, {@code false} otherwise. * @hide */ @NonNull public WindowContainerTransaction setInterceptBackPressedOnTaskRoot( @NonNull WindowContainerToken container, @NonNull WindowContainerToken rootTaskContainer, boolean interceptBackPressed) { final Change change = getOrCreateChange(container.asBinder()); final Change change = getOrCreateChange(rootTaskContainer.asBinder()); change.mChangeMask |= Change.CHANGE_INTERCEPT_BACK_PRESSED; change.mInterceptBackPressed = interceptBackPressed; return this; Loading libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java +6 −0 Original line number Diff line number Diff line Loading @@ -106,6 +106,12 @@ public class ShellTaskOrganizer extends TaskOrganizer { public interface TaskListener extends TaskVanishedListener, TaskAppearedListener, TaskInfoChangedListener { /** * Invoked when back is pressed on the base activity of the task. If the task is not * organized, there will be no callback. * * @param taskInfo The RunningTaskInfo for the Task which received back event. */ default void onBackPressedOnTaskRoot(RunningTaskInfo taskInfo) {} /** Whether this task listener supports compat UI. */ default boolean supportCompatUI() { Loading services/core/java/com/android/server/wm/ActivityClientController.java +1 −1 Original line number Diff line number Diff line Loading @@ -1818,7 +1818,7 @@ class ActivityClientController extends IActivityClientController.Stub { final ActivityRecord root = task.getRootActivity(false /*ignoreRelinquishIdentity*/, true /*setToBottomIfNone*/); if (r == root && mService.mWindowOrganizerController.mTaskOrganizerController .handleInterceptBackPressedOnTaskRoot(r.getRootTask())) { .handleInterceptBackPressedOnTaskRoot(r)) { // This task is handled by a task organizer that has requested the back // pressed callback. return; Loading services/core/java/com/android/server/wm/TaskOrganizerController.java +13 −2 Original line number Diff line number Diff line Loading @@ -1139,10 +1139,21 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { } } public boolean handleInterceptBackPressedOnTaskRoot(Task task) { if (!shouldInterceptBackPressedOnRootTask(task)) { public boolean handleInterceptBackPressedOnTaskRoot(ActivityRecord r) { // Intercept are set on the root task if (!shouldInterceptBackPressedOnRootTask(r.getRootTask())) { return false; } // Task for which back event is received will be send as part of onBackPressedOnTaskRoot Task task = r.getTask(); if (task.mTaskOrganizer == null) { Slog.w(TAG, "Cannot handle BackPressedOnTaskRoot because task organizer is " + "not present for taskId: " + task.mTaskId); return false; } final TaskOrganizerPendingEventsQueue pendingEventsQueue = mTaskOrganizerStates.get(task.mTaskOrganizer.asBinder()) .mPendingEventsQueue; Loading services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java +2 −0 Original line number Diff line number Diff line Loading @@ -1510,9 +1510,11 @@ public class WindowOrganizerTests extends WindowTestsBase { final ITaskOrganizer organizer = registerMockOrganizer(); final Task rootTask = createRootTask(); final Task task = createTask(rootTask); task.setTaskOrganizer(organizer); final ActivityRecord activity = createActivityRecord(rootTask.mDisplayContent, task); final Task rootTask2 = createRootTask(); final Task task2 = createTask(rootTask2); task2.setTaskOrganizer(organizer); final ActivityRecord activity2 = createActivityRecord(rootTask.mDisplayContent, task2); assertTrue(rootTask.isOrganized()); Loading Loading
core/java/android/window/WindowContainerTransaction.java +13 −7 Original line number Diff line number Diff line Loading @@ -567,21 +567,27 @@ public final class WindowContainerTransaction implements Parcelable { } /** * Sets whether back press should be intercepted for the root activity of the given task * container. If true, then * {@link TaskOrganizer#onBackPressedOnTaskRoot(ActivityManager.RunningTaskInfo)} will be * called. * Sets whether back press should be intercepted for the root activity of the given root task * or its children. * * @param container The window container of the task that the intercept-back state is set on. * <p>When {@code true}, the system will invoke * {@link TaskOrganizer#onBackPressedOnTaskRoot(ActivityManager.RunningTaskInfo)}, providing * the {@link ActivityManager.RunningTaskInfo} of the task that received the back press. * This interception mechanism is specifically designed to be applied to the root task * container only. * * @param rootTaskContainer The window container of the task that the intercept-back state is * set on. This parameter is expected to refer to the root task of a * task stack. * @param interceptBackPressed {@code true} to allow back to be intercepted for the root * activity of the task, {@code false} otherwise. * @hide */ @NonNull public WindowContainerTransaction setInterceptBackPressedOnTaskRoot( @NonNull WindowContainerToken container, @NonNull WindowContainerToken rootTaskContainer, boolean interceptBackPressed) { final Change change = getOrCreateChange(container.asBinder()); final Change change = getOrCreateChange(rootTaskContainer.asBinder()); change.mChangeMask |= Change.CHANGE_INTERCEPT_BACK_PRESSED; change.mInterceptBackPressed = interceptBackPressed; return this; Loading
libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java +6 −0 Original line number Diff line number Diff line Loading @@ -106,6 +106,12 @@ public class ShellTaskOrganizer extends TaskOrganizer { public interface TaskListener extends TaskVanishedListener, TaskAppearedListener, TaskInfoChangedListener { /** * Invoked when back is pressed on the base activity of the task. If the task is not * organized, there will be no callback. * * @param taskInfo The RunningTaskInfo for the Task which received back event. */ default void onBackPressedOnTaskRoot(RunningTaskInfo taskInfo) {} /** Whether this task listener supports compat UI. */ default boolean supportCompatUI() { Loading
services/core/java/com/android/server/wm/ActivityClientController.java +1 −1 Original line number Diff line number Diff line Loading @@ -1818,7 +1818,7 @@ class ActivityClientController extends IActivityClientController.Stub { final ActivityRecord root = task.getRootActivity(false /*ignoreRelinquishIdentity*/, true /*setToBottomIfNone*/); if (r == root && mService.mWindowOrganizerController.mTaskOrganizerController .handleInterceptBackPressedOnTaskRoot(r.getRootTask())) { .handleInterceptBackPressedOnTaskRoot(r)) { // This task is handled by a task organizer that has requested the back // pressed callback. return; Loading
services/core/java/com/android/server/wm/TaskOrganizerController.java +13 −2 Original line number Diff line number Diff line Loading @@ -1139,10 +1139,21 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { } } public boolean handleInterceptBackPressedOnTaskRoot(Task task) { if (!shouldInterceptBackPressedOnRootTask(task)) { public boolean handleInterceptBackPressedOnTaskRoot(ActivityRecord r) { // Intercept are set on the root task if (!shouldInterceptBackPressedOnRootTask(r.getRootTask())) { return false; } // Task for which back event is received will be send as part of onBackPressedOnTaskRoot Task task = r.getTask(); if (task.mTaskOrganizer == null) { Slog.w(TAG, "Cannot handle BackPressedOnTaskRoot because task organizer is " + "not present for taskId: " + task.mTaskId); return false; } final TaskOrganizerPendingEventsQueue pendingEventsQueue = mTaskOrganizerStates.get(task.mTaskOrganizer.asBinder()) .mPendingEventsQueue; Loading
services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java +2 −0 Original line number Diff line number Diff line Loading @@ -1510,9 +1510,11 @@ public class WindowOrganizerTests extends WindowTestsBase { final ITaskOrganizer organizer = registerMockOrganizer(); final Task rootTask = createRootTask(); final Task task = createTask(rootTask); task.setTaskOrganizer(organizer); final ActivityRecord activity = createActivityRecord(rootTask.mDisplayContent, task); final Task rootTask2 = createRootTask(); final Task task2 = createTask(rootTask2); task2.setTaskOrganizer(organizer); final ActivityRecord activity2 = createActivityRecord(rootTask.mDisplayContent, task2); assertTrue(rootTask.isOrganized()); Loading