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

Commit 0e97993c authored by Evan Rosky's avatar Evan Rosky Committed by Automerger Merge Worker
Browse files

Merge "Use activity-exit animation for translucent-only close" into udc-dev...

Merge "Use activity-exit animation for translucent-only close" into udc-dev am: d31c9412 am: c4337adf

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/23439461



Change-Id: I2fe30c96254faefc3d984d248330af0599f5d5e4
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 2e652f18 c4337adf
Loading
Loading
Loading
Loading
+35 −0
Original line number Diff line number Diff line
@@ -327,6 +327,7 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler {
        final int wallpaperTransit = getWallpaperTransitType(info);
        boolean isDisplayRotationAnimationStarted = false;
        final boolean isDreamTransition = isDreamTransition(info);
        final boolean isOnlyTranslucent = isOnlyTranslucent(info);

        for (int i = info.getChanges().size() - 1; i >= 0; --i) {
            final TransitionInfo.Change change = info.getChanges().get(i);
@@ -452,6 +453,17 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler {
                            final int layer = zSplitLine + numChanges - i;
                            startTransaction.setLayer(change.getLeash(), layer);
                        }
                    } else if (isOnlyTranslucent && TransitionUtil.isOpeningType(info.getType())
                                && TransitionUtil.isClosingType(mode)) {
                        // If there is a closing translucent task in an OPENING transition, we will
                        // actually select a CLOSING animation, so move the closing task into
                        // the animating part of the z-order.

                        // See Transitions#setupAnimHierarchy for details about these variables.
                        final int numChanges = info.getChanges().size();
                        final int zSplitLine = numChanges + 1;
                        final int layer = zSplitLine + numChanges - i;
                        startTransaction.setLayer(change.getLeash(), layer);
                    }
                }

@@ -543,6 +555,29 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler {
        return false;
    }

    /**
     * Does `info` only contain translucent visibility changes (CHANGEs are ignored). We select
     * different animations and z-orders for these
     */
    private static boolean isOnlyTranslucent(@NonNull TransitionInfo info) {
        int translucentOpen = 0;
        int translucentClose = 0;
        for (int i = info.getChanges().size() - 1; i >= 0; --i) {
            final TransitionInfo.Change change = info.getChanges().get(i);
            if (change.getMode() == TRANSIT_CHANGE) continue;
            if (change.hasFlags(FLAG_TRANSLUCENT)) {
                if (TransitionUtil.isOpeningType(change.getMode())) {
                    translucentOpen += 1;
                } else {
                    translucentClose += 1;
                }
            } else {
                return false;
            }
        }
        return (translucentOpen + translucentClose) > 0;
    }

    @Override
    public void mergeAnimation(@NonNull IBinder transition, @NonNull TransitionInfo info,
            @NonNull SurfaceControl.Transaction t, @NonNull IBinder mergeTarget,
+5 −4
Original line number Diff line number Diff line
@@ -103,10 +103,11 @@ public class TransitionAnimationHelper {
            // We will translucent open animation for translucent activities and tasks. Choose
            // WindowAnimation_activityOpenEnterAnimation and set translucent here, then
            // TransitionAnimation loads appropriate animation later.
            if ((changeFlags & FLAG_TRANSLUCENT) != 0 && enter) {
                translucent = true;
            }
            if (isTask && !translucent) {
            translucent = (changeFlags & FLAG_TRANSLUCENT) != 0;
            if (isTask && translucent && !enter) {
                // For closing translucent tasks, use the activity close animation
                animAttr = R.styleable.WindowAnimation_activityCloseExitAnimation;
            } else if (isTask && !translucent) {
                animAttr = enter
                        ? R.styleable.WindowAnimation_taskOpenEnterAnimation
                        : R.styleable.WindowAnimation_taskOpenExitAnimation;
+2 −2
Original line number Diff line number Diff line
@@ -570,8 +570,8 @@ public class Transitions implements RemoteCallable<Transitions>,
                    layer = zSplitLine + numChanges - i;
                }
            } else { // CHANGE or other
                if (isClosing) {
                    // Put below CLOSE mode.
                if (isClosing || TransitionUtil.isOrderOnly(change)) {
                    // Put below CLOSE mode (in the "static" section).
                    layer = zSplitLine - i;
                } else {
                    // Put above CLOSE mode.