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

Commit 675c5548 authored by Riddle Hsu's avatar Riddle Hsu
Browse files

Let default transition handler animate customized animation

Otherwise ActivityEmbeddingController will use default task
fragment animation, which may add edge extension on an translucent
style activity with x-translate. That looks weird.

Bug: 273434356
Test: Use ActivityOptions#makeCustomAnimation in an embedded
      activity to start next activity in the same task fragment.
      It should not show edge extension and default translate
      animation.

Change-Id: I9ab8cab6b9b46b4a358b2852dbbadd3a0e449aca
parent 25aa2d3c
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -20,6 +20,8 @@ import static android.app.ActivityOptions.ANIM_SCENE_TRANSITION;
import static android.window.TransitionInfo.FLAG_FILLS_TASK;
import static android.window.TransitionInfo.FLAG_IN_TASK_WITH_EMBEDDED_ACTIVITY;

import static com.android.wm.shell.transition.DefaultTransitionHandler.isSupportedOverrideAnimation;

import static java.util.Objects.requireNonNull;

import android.content.Context;
@@ -113,8 +115,11 @@ public class ActivityEmbeddingController implements Transitions.TransitionHandle
            return false;
        }
        final TransitionInfo.AnimationOptions options = info.getAnimationOptions();
        if (options != null && options.getType() == ANIM_SCENE_TRANSITION) {
        if (options != null
                // Scene-transition will be handled by app side.
                && (options.getType() == ANIM_SCENE_TRANSITION
                // Use default transition handler to animate override animation.
                || isSupportedOverrideAnimation(options))) {
            return false;
        }

+12 −0
Original line number Diff line number Diff line
@@ -873,6 +873,18 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler {
        }
    }

    /**
     * Returns {@code true} if the default transition handler can run the override animation.
     * @see #loadAnimation(TransitionInfo, TransitionInfo.Change, int, boolean)
     */
    public static boolean isSupportedOverrideAnimation(
            @NonNull TransitionInfo.AnimationOptions options) {
        final int animType = options.getType();
        return animType == ANIM_CUSTOM || animType == ANIM_SCALE_UP
                || animType == ANIM_THUMBNAIL_SCALE_UP || animType == ANIM_THUMBNAIL_SCALE_DOWN
                || animType == ANIM_CLIP_REVEAL || animType == ANIM_OPEN_CROSS_PROFILE_APPS;
    }

    private static void applyTransformation(long time, SurfaceControl.Transaction t,
            SurfaceControl leash, Animation anim, Transformation transformation, float[] matrix,
            Point position, float cornerRadius, @Nullable Rect immutableClipRect) {