Loading core/java/android/window/flags/windowing_sdk.aconfig +10 −0 Original line number Diff line number Diff line Loading @@ -89,3 +89,13 @@ flag { bug: "306666082" is_fixed_read_only: true } flag { namespace: "windowing_sdk" name: "always_defer_transition_when_apply_wct" description: "Report error when defer transition fails when it should not" bug: "335562144" metadata { purpose: PURPOSE_BUGFIX } } No newline at end of file services/core/java/com/android/server/wm/WindowOrganizerController.java +8 −12 Original line number Diff line number Diff line Loading @@ -609,6 +609,11 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub ProtoLog.v(WM_DEBUG_WINDOW_ORGANIZER, "Apply window transaction, syncId=%d", syncId); mService.deferWindowLayout(); mService.mTaskSupervisor.setDeferRootVisibilityUpdate(true /* deferUpdate */); final boolean shouldDeferTransitionReady = transition != null && !t.isEmpty() && (transition.isCollecting() || Flags.alwaysDeferTransitionWhenApplyWct()); if (shouldDeferTransitionReady) { transition.deferTransitionReady(); } try { final ArraySet<WindowContainer<?>> haveConfigChanges = new ArraySet<>(); if (transition != null) { Loading Loading @@ -761,6 +766,9 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub mService.mWindowManager.mWindowPlacerLocked.requestTraversal(); } } finally { if (shouldDeferTransitionReady) { transition.continueTransitionReady(); } mService.mTaskSupervisor.setDeferRootVisibilityUpdate(false /* deferUpdate */); mService.continueWindowLayout(); } Loading Loading @@ -1102,14 +1110,8 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub launchOpts.remove(WindowContainerTransaction.HierarchyOp.LAUNCH_KEY_TASK_ID); final SafeActivityOptions safeOptions = SafeActivityOptions.fromBundle(launchOpts, caller.mPid, caller.mUid); if (transition != null) { transition.deferTransitionReady(); } waitAsyncStart(() -> mService.mTaskSupervisor.startActivityFromRecents( caller.mPid, caller.mUid, taskId, safeOptions)); if (transition != null) { transition.continueTransitionReady(); } break; } case HIERARCHY_OP_TYPE_REORDER: Loading Loading @@ -1187,17 +1189,11 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub activityOptions.setCallerDisplayId(DEFAULT_DISPLAY); } final Bundle options = activityOptions != null ? activityOptions.toBundle() : null; if (transition != null) { transition.deferTransitionReady(); } int res = waitAsyncStart(() -> mService.mAmInternal.sendIntentSender( hop.getPendingIntent().getTarget(), hop.getPendingIntent().getWhitelistToken(), 0 /* code */, hop.getActivityIntent(), resolvedType, null /* finishReceiver */, null /* requiredPermission */, options)); if (transition != null) { transition.continueTransitionReady(); } if (ActivityManager.isStartResultSuccessful(res)) { effects |= TRANSACT_EFFECTS_LIFECYCLE; } Loading Loading
core/java/android/window/flags/windowing_sdk.aconfig +10 −0 Original line number Diff line number Diff line Loading @@ -89,3 +89,13 @@ flag { bug: "306666082" is_fixed_read_only: true } flag { namespace: "windowing_sdk" name: "always_defer_transition_when_apply_wct" description: "Report error when defer transition fails when it should not" bug: "335562144" metadata { purpose: PURPOSE_BUGFIX } } No newline at end of file
services/core/java/com/android/server/wm/WindowOrganizerController.java +8 −12 Original line number Diff line number Diff line Loading @@ -609,6 +609,11 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub ProtoLog.v(WM_DEBUG_WINDOW_ORGANIZER, "Apply window transaction, syncId=%d", syncId); mService.deferWindowLayout(); mService.mTaskSupervisor.setDeferRootVisibilityUpdate(true /* deferUpdate */); final boolean shouldDeferTransitionReady = transition != null && !t.isEmpty() && (transition.isCollecting() || Flags.alwaysDeferTransitionWhenApplyWct()); if (shouldDeferTransitionReady) { transition.deferTransitionReady(); } try { final ArraySet<WindowContainer<?>> haveConfigChanges = new ArraySet<>(); if (transition != null) { Loading Loading @@ -761,6 +766,9 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub mService.mWindowManager.mWindowPlacerLocked.requestTraversal(); } } finally { if (shouldDeferTransitionReady) { transition.continueTransitionReady(); } mService.mTaskSupervisor.setDeferRootVisibilityUpdate(false /* deferUpdate */); mService.continueWindowLayout(); } Loading Loading @@ -1102,14 +1110,8 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub launchOpts.remove(WindowContainerTransaction.HierarchyOp.LAUNCH_KEY_TASK_ID); final SafeActivityOptions safeOptions = SafeActivityOptions.fromBundle(launchOpts, caller.mPid, caller.mUid); if (transition != null) { transition.deferTransitionReady(); } waitAsyncStart(() -> mService.mTaskSupervisor.startActivityFromRecents( caller.mPid, caller.mUid, taskId, safeOptions)); if (transition != null) { transition.continueTransitionReady(); } break; } case HIERARCHY_OP_TYPE_REORDER: Loading Loading @@ -1187,17 +1189,11 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub activityOptions.setCallerDisplayId(DEFAULT_DISPLAY); } final Bundle options = activityOptions != null ? activityOptions.toBundle() : null; if (transition != null) { transition.deferTransitionReady(); } int res = waitAsyncStart(() -> mService.mAmInternal.sendIntentSender( hop.getPendingIntent().getTarget(), hop.getPendingIntent().getWhitelistToken(), 0 /* code */, hop.getActivityIntent(), resolvedType, null /* finishReceiver */, null /* requiredPermission */, options)); if (transition != null) { transition.continueTransitionReady(); } if (ActivityManager.isStartResultSuccessful(res)) { effects |= TRANSACT_EFFECTS_LIFECYCLE; } Loading