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

Commit 6103255c authored by Chris Li's avatar Chris Li
Browse files

Make sure the parent change is set for changes with intermediate parent

1. When root Task is resized and collected, there can be another WCT
   from TaskFragmentOrganizer later to change the TF in the same
   transition. We want to make sure that the parent change field is
   populated even if the intermediate parent (leaf task) has no change
   (because the snapshot was taken early enough).

2. Ensure the AE window changes that are dependent of Task change is
   updated in start transaction

Bug: 328014766
Test: verify with system split using Settings.
Change-Id: I9dc5c0b866f6ec8dec8878269eb25f90b6100742
parent 42ca889a
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -542,6 +542,9 @@ public final class TransitionInfo implements Parcelable {
        // independent either.
        if (change.getMode() == TRANSIT_CHANGE) return false;

        // Always fold the activity embedding change into the parent change.
        if (change.hasFlags(FLAG_IN_TASK_WITH_EMBEDDED_ACTIVITY)) return false;

        TransitionInfo.Change parentChg = info.getChange(change.getParent());
        while (parentChg != null) {
            // If the parent is a visibility change, it will include the results of all child
+5 −0
Original line number Diff line number Diff line
@@ -496,6 +496,7 @@ public class Transitions implements RemoteCallable<Transitions>,
            if (mode == TRANSIT_TO_FRONT) {
                // When the window is moved to front, make sure the crop is updated to prevent it
                // from using the old crop.
                t.setPosition(leash, change.getEndRelOffset().x, change.getEndRelOffset().y);
                t.setWindowCrop(leash, change.getEndAbsBounds().width(),
                        change.getEndAbsBounds().height());
            }
@@ -507,6 +508,10 @@ public class Transitions implements RemoteCallable<Transitions>,
                    t.setMatrix(leash, 1, 0, 0, 1);
                    t.setAlpha(leash, 1.f);
                    t.setPosition(leash, change.getEndRelOffset().x, change.getEndRelOffset().y);
                    t.setWindowCrop(leash, change.getEndAbsBounds().width(),
                            change.getEndAbsBounds().height());
                } else {
                    t.hide(leash);
                }
                continue;
            }
+9 −1
Original line number Diff line number Diff line
@@ -2468,7 +2468,15 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
            for (WindowContainer<?> p = getAnimatableParent(wc); p != null;
                    p = getAnimatableParent(p)) {
                final ChangeInfo parentChange = changes.get(p);
                if (parentChange == null || !parentChange.hasChanged()) break;
                if (parentChange == null) {
                    break;
                }
                if (!parentChange.hasChanged()) {
                    // In case the target is collected after the parent has been changed, it could
                    // be too late to snapshot the parent change. Skip to see if there is any
                    // parent window further up to be considered as change parent.
                    continue;
                }
                if (p.mRemoteToken == null) {
                    // Intermediate parents must be those that has window to be managed by Shell.
                    continue;