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

Commit 5831c74c authored by Wei Sheng Shih's avatar Wei Sheng Shih Committed by Android (Google) Code Review
Browse files

Merge "Consider last parent when compose transition." into udc-dev

parents 895e7a93 c5371886
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -720,9 +720,10 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler {

        if (a != null) {
            if (!a.isInitialized()) {
                final int width = endBounds.width();
                final int height = endBounds.height();
                a.initialize(width, height, width, height);
                final Rect animationRange = TransitionUtil.isClosingType(changeMode)
                        ? change.getStartAbsBounds() : change.getEndAbsBounds();
                a.initialize(animationRange.width(), animationRange.height(),
                        endBounds.width(), endBounds.height());
            }
            a.restrictDuration(MAX_ANIMATION_DURATION);
            a.scaleCurrentDuration(mTransitionAnimationScaleSetting);
+25 −8
Original line number Diff line number Diff line
@@ -3290,6 +3290,12 @@ class Task extends TaskFragment {
            scheduleAnimation();
        }

        // Let organizer manage task visibility for shell transition. So don't change it's
        // visibility during collecting.
        if (mTransitionController.isCollecting() && mCreatedByOrganizer) {
            return;
        }

        // We intend to let organizer manage task visibility but it doesn't
        // have enough information until we finish shell transitions.
        // In the mean time we do an easy fix here.
@@ -5687,6 +5693,13 @@ class Task extends TaskFragment {
    }

    private boolean moveTaskToBackInner(@NonNull Task task) {
        if (mTransitionController.isShellTransitionsEnabled()) {
            // Preventing from update surface position for WindowState if configuration changed,
            // because the position is depends on WindowFrame, so update the position before
            // relayout will only update it to "old" position.
            mAtmService.deferWindowLayout();
        }
        try {
            moveToBack("moveTaskToBackInner", task);

            if (inPinnedWindowingMode()) {
@@ -5697,7 +5710,11 @@ class Task extends TaskFragment {
            mRootWindowContainer.ensureVisibilityAndConfig(null /* starting */,
                    mDisplayContent.mDisplayId, false /* markFrozenIfConfigChanged */,
                    false /* deferResume */);

        } finally {
            if (mTransitionController.isShellTransitionsEnabled()) {
                mAtmService.continueWindowLayout();
            }
        }
        ActivityRecord topActivity = getDisplayArea().topRunningActivity();
        Task topRootTask = topActivity.getRootTask();
        if (topRootTask != null && topRootTask != this && topActivity.isState(RESUMED)) {
+23 −3
Original line number Diff line number Diff line
@@ -2244,11 +2244,17 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
            WindowContainer<?> ancestor = findCommonAncestor(sortedTargets, wc);

            // Make leash based on highest (z-order) direct child of ancestor with a participant.
            // Check whether the ancestor is belonged to last parent, shouldn't happen.
            final boolean hasReparent = !wc.isDescendantOf(ancestor);
            WindowContainer leashReference = wc;
            if (hasReparent) {
                Slog.e(TAG, "Did not find common ancestor! Ancestor= " + ancestor
                        + " target= " + wc);
            } else {
                while (leashReference.getParent() != ancestor) {
                    leashReference = leashReference.getParent();
                }

            }
            final SurfaceControl rootLeash = leashReference.makeAnimationLeash().setName(
                    "Transition Root: " + leashReference.getName()).build();
            rootLeash.setUnreleasedWarningCallSite("Transition.calculateTransitionRoots");
@@ -2453,6 +2459,20 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
                // Skip the non-app window or windows on a different display
                continue;
            }
            // Re-initiate the last parent as the initial ancestor instead of the top target.
            // When move a leaf task from organized task to display area, try to keep the transition
            // root be the original organized task for close transition animation.
            // Otherwise, shell will use wrong root layer to play animation.
            // Note: Since the target is sorted, so only need to do this at the lowest target.
            if (change.mStartParent != null && wc.getParent() != null
                    && change.mStartParent.isAttached() && wc.getParent() != change.mStartParent
                    && i == targets.size() - 1) {
                final int transitionMode = change.getTransitMode(wc);
                if (transitionMode == TRANSIT_CLOSE || transitionMode == TRANSIT_TO_BACK) {
                    ancestor = change.mStartParent;
                    continue;
                }
            }
            while (!wc.isDescendantOf(ancestor)) {
                ancestor = ancestor.getParent();
            }