Loading services/core/java/com/android/server/wm/ActivityTaskSupervisor.java +14 −0 Original line number Diff line number Diff line Loading @@ -347,6 +347,12 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks { */ private int mVisibilityTransactionDepth; /** * Whether to the visibility updates that started from {@code RootWindowContainer} should be * deferred. */ private boolean mDeferRootVisibilityUpdate; private ActivityMetricsLogger mActivityMetricsLogger; /** Check if placing task or activity on specified display is allowed. */ Loading Loading @@ -2263,6 +2269,14 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks { return mVisibilityTransactionDepth > 0; } void setDeferRootVisibilityUpdate(boolean deferUpdate) { mDeferRootVisibilityUpdate = deferUpdate; } boolean isRootVisibilityUpdateDeferred() { return mDeferRootVisibilityUpdate; } /** * Called when the state or visibility of an attached activity is changed. * Loading services/core/java/com/android/server/wm/RootWindowContainer.java +2 −1 Original line number Diff line number Diff line Loading @@ -1973,7 +1973,8 @@ class RootWindowContainer extends WindowContainer<DisplayContent> */ void ensureActivitiesVisible(ActivityRecord starting, int configChanges, boolean preserveWindows, boolean notifyClients) { if (mTaskSupervisor.inActivityVisibilityUpdate()) { if (mTaskSupervisor.inActivityVisibilityUpdate() || mTaskSupervisor.isRootVisibilityUpdateDeferred()) { // Don't do recursive work. return; } Loading services/core/java/com/android/server/wm/Task.java +4 −2 Original line number Diff line number Diff line Loading @@ -4500,9 +4500,11 @@ class Task extends TaskFragment { mAtmService.continueWindowLayout(); } if (!mTaskSupervisor.isRootVisibilityUpdateDeferred()) { mRootWindowContainer.ensureActivitiesVisible(null, 0, PRESERVE_WINDOWS); mRootWindowContainer.resumeFocusedTasksTopActivities(); } } void resumeNextFocusAfterReparent() { adjustFocusToNextFocusableTask("reparent", true /* allowFocusSelf */, Loading services/core/java/com/android/server/wm/WindowOrganizerController.java +3 −0 Original line number Diff line number Diff line Loading @@ -275,6 +275,7 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub int effects = 0; ProtoLog.v(WM_DEBUG_WINDOW_ORGANIZER, "Apply window transaction, syncId=%d", syncId); mService.deferWindowLayout(); mService.mTaskSupervisor.setDeferRootVisibilityUpdate(true /* deferUpdate */); try { if (transition != null) { // First check if we have a display rotation transition and if so, update it. Loading Loading @@ -363,6 +364,7 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub task.setMainWindowSizeChangeTransaction(sft); } if ((effects & TRANSACT_EFFECTS_LIFECYCLE) != 0) { mService.mTaskSupervisor.setDeferRootVisibilityUpdate(false /* deferUpdate */); // Already calls ensureActivityConfig mService.mRootWindowContainer.ensureActivitiesVisible(null, 0, PRESERVE_WINDOWS); mService.mRootWindowContainer.resumeFocusedTasksTopActivities(); Loading @@ -384,6 +386,7 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub mService.addWindowLayoutReasons(LAYOUT_REASON_CONFIG_CHANGED); } } finally { mService.mTaskSupervisor.setDeferRootVisibilityUpdate(false /* deferUpdate */); mService.continueWindowLayout(); } } Loading Loading
services/core/java/com/android/server/wm/ActivityTaskSupervisor.java +14 −0 Original line number Diff line number Diff line Loading @@ -347,6 +347,12 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks { */ private int mVisibilityTransactionDepth; /** * Whether to the visibility updates that started from {@code RootWindowContainer} should be * deferred. */ private boolean mDeferRootVisibilityUpdate; private ActivityMetricsLogger mActivityMetricsLogger; /** Check if placing task or activity on specified display is allowed. */ Loading Loading @@ -2263,6 +2269,14 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks { return mVisibilityTransactionDepth > 0; } void setDeferRootVisibilityUpdate(boolean deferUpdate) { mDeferRootVisibilityUpdate = deferUpdate; } boolean isRootVisibilityUpdateDeferred() { return mDeferRootVisibilityUpdate; } /** * Called when the state or visibility of an attached activity is changed. * Loading
services/core/java/com/android/server/wm/RootWindowContainer.java +2 −1 Original line number Diff line number Diff line Loading @@ -1973,7 +1973,8 @@ class RootWindowContainer extends WindowContainer<DisplayContent> */ void ensureActivitiesVisible(ActivityRecord starting, int configChanges, boolean preserveWindows, boolean notifyClients) { if (mTaskSupervisor.inActivityVisibilityUpdate()) { if (mTaskSupervisor.inActivityVisibilityUpdate() || mTaskSupervisor.isRootVisibilityUpdateDeferred()) { // Don't do recursive work. return; } Loading
services/core/java/com/android/server/wm/Task.java +4 −2 Original line number Diff line number Diff line Loading @@ -4500,9 +4500,11 @@ class Task extends TaskFragment { mAtmService.continueWindowLayout(); } if (!mTaskSupervisor.isRootVisibilityUpdateDeferred()) { mRootWindowContainer.ensureActivitiesVisible(null, 0, PRESERVE_WINDOWS); mRootWindowContainer.resumeFocusedTasksTopActivities(); } } void resumeNextFocusAfterReparent() { adjustFocusToNextFocusableTask("reparent", true /* allowFocusSelf */, Loading
services/core/java/com/android/server/wm/WindowOrganizerController.java +3 −0 Original line number Diff line number Diff line Loading @@ -275,6 +275,7 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub int effects = 0; ProtoLog.v(WM_DEBUG_WINDOW_ORGANIZER, "Apply window transaction, syncId=%d", syncId); mService.deferWindowLayout(); mService.mTaskSupervisor.setDeferRootVisibilityUpdate(true /* deferUpdate */); try { if (transition != null) { // First check if we have a display rotation transition and if so, update it. Loading Loading @@ -363,6 +364,7 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub task.setMainWindowSizeChangeTransaction(sft); } if ((effects & TRANSACT_EFFECTS_LIFECYCLE) != 0) { mService.mTaskSupervisor.setDeferRootVisibilityUpdate(false /* deferUpdate */); // Already calls ensureActivityConfig mService.mRootWindowContainer.ensureActivitiesVisible(null, 0, PRESERVE_WINDOWS); mService.mRootWindowContainer.resumeFocusedTasksTopActivities(); Loading @@ -384,6 +386,7 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub mService.addWindowLayoutReasons(LAYOUT_REASON_CONFIG_CHANGED); } } finally { mService.mTaskSupervisor.setDeferRootVisibilityUpdate(false /* deferUpdate */); mService.continueWindowLayout(); } } Loading