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
This commit is contained in:
Riddle Hsu
2023-06-05 20:45:57 +08:00
parent 25aa2d3c87
commit 675c55481e
2 changed files with 19 additions and 2 deletions

View File

@@ -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) {
// Scene-transition will be handled by app side.
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;
}

View File

@@ -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) {