Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7e068848 authored by Chris Li's avatar Chris Li Committed by Android (Google) Code Review
Browse files

Merge "Defer transition ready when during applyTransaction" into main

parents 39028262 f2811b31
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -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
+8 −12
Original line number Diff line number Diff line
@@ -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) {
@@ -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();
        }
@@ -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:
@@ -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;
                }