Set display change ready only if no one sets

Otherwise it will break some cases explicitly set ready to false,
such as if there is activity switch.

Bug: 268506437
Test: atest NexusLauncherTests:TaplTestsLauncher3
Test: Simulate the sequence: setRequestedOrientation()
       -> finishActivity() -> startTransition().
      The task surface should be visible.
Change-Id: Ie76092420a9285401818fd96fe36971e2890cb3d
This commit is contained in:
Riddle Hsu
2023-02-14 00:53:17 +08:00
parent a9233ab0fe
commit 906c8f0fa5

View File

@@ -2019,7 +2019,13 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
final DisplayContent dc = wc.asDisplayContent();
if (dc == null || !mChanges.get(dc).hasChanged()) continue;
dc.sendNewConfiguration();
setReady(dc, true);
// Set to ready if no other change controls the ready state. But if there is, such as
// if an activity is pausing, it will call setReady(ar, false) and wait for the next
// resumed activity. Then do not set to ready because the transition only contains
// partial participants. Otherwise the transition may only handle HIDE and miss OPEN.
if (!mReadyTracker.mUsed) {
setReady(dc, true);
}
}
}