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

Commit fa0dc615 authored by Riddle Hsu's avatar Riddle Hsu
Browse files

Fix missing edge extension for task fragment transition

The change info of task fragment doesn't have activity component.
Besides, because it is a layer effect, it only needs to set once
rather than each animation frame.

Bug: 322036393
Flag: com.android.graphics.libgui.flags.edge_extension_shader
Test: atest CtsWindowManagerDeviceAnimations:ActivityTransitionTests
Test: Switch settings page in folded screen,
      the edge should not be black.
Change-Id: Ic3b7888f126c3039d4be2bc9b706dfacfb224ecf
parent b8debc69
Loading
Loading
Loading
Loading
+3 −10
Original line number Diff line number Diff line
@@ -41,9 +41,9 @@ public class DefaultSurfaceAnimator {
            @NonNull Animation anim, @NonNull SurfaceControl leash,
            @NonNull Runnable finishCallback, @NonNull TransactionPool pool,
            @NonNull ShellExecutor mainExecutor, @Nullable Point position, float cornerRadius,
            @Nullable Rect clipRect, boolean isActivity) {
            @Nullable Rect clipRect) {
        final DefaultAnimationAdapter adapter = new DefaultAnimationAdapter(anim, leash,
                position, clipRect, cornerRadius, isActivity);
                position, clipRect, cornerRadius);
        buildSurfaceAnimation(animations, anim, finishCallback, pool, mainExecutor, adapter);
    }

@@ -138,11 +138,9 @@ public class DefaultSurfaceAnimator {
        @Nullable final Rect mClipRect;
        @Nullable private final Rect mAnimClipRect;
        final float mCornerRadius;
        final boolean mIsActivity;

        DefaultAnimationAdapter(@NonNull Animation anim, @NonNull SurfaceControl leash,
                @Nullable Point position, @Nullable Rect clipRect, float cornerRadius,
                boolean isActivity) {
                @Nullable Point position, @Nullable Rect clipRect, float cornerRadius) {
            super(leash);
            mAnim = anim;
            mPosition = (position != null && (position.x != 0 || position.y != 0))
@@ -150,7 +148,6 @@ public class DefaultSurfaceAnimator {
            mClipRect = (clipRect != null && !clipRect.isEmpty()) ? clipRect : null;
            mAnimClipRect = mClipRect != null ? new Rect() : null;
            mCornerRadius = cornerRadius;
            mIsActivity = isActivity;
        }

        @Override
@@ -160,10 +157,6 @@ public class DefaultSurfaceAnimator {
            final SurfaceControl leash = mLeash;
            transformation.clear();
            mAnim.getTransformation(currentPlayTime, transformation);
            if (com.android.graphics.libgui.flags.Flags.edgeExtensionShader()
                    && mIsActivity && mAnim.getExtensionEdges() != 0) {
                t.setEdgeExtensionEffect(leash, mAnim.getExtensionEdges());
            }
            if (mPosition != null) {
                transformation.getMatrix().postTranslate(mPosition.x, mPosition.y);
            }
+5 −5
Original line number Diff line number Diff line
@@ -506,6 +506,8 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler {

                if (!isTask && a.getExtensionEdges() != 0x0) {
                    if (com.android.graphics.libgui.flags.Flags.edgeExtensionShader()) {
                        startTransaction.setEdgeExtensionEffect(
                                change.getLeash(), a.getExtensionEdges());
                        finishTransaction.setEdgeExtensionEffect(change.getLeash(), /* edge */ 0);
                    } else {
                        if (!TransitionUtil.isOpeningType(mode)) {
@@ -564,7 +566,7 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler {

                buildSurfaceAnimation(animations, a, change.getLeash(), onAnimFinish,
                        mTransactionPool, mMainExecutor, animRelOffset, cornerRadius,
                        clipRect, change.getActivityComponent() != null);
                        clipRect);

                final TransitionInfo.AnimationOptions options;
                if (Flags.moveAnimationOptionsToChange()) {
@@ -876,8 +878,7 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler {
        a.restrictDuration(MAX_ANIMATION_DURATION);
        a.scaleCurrentDuration(mTransitionAnimationScaleSetting);
        buildSurfaceAnimation(animations, a, wt.getSurface(), finisher, mTransactionPool,
                mMainExecutor, change.getEndRelOffset(), cornerRadius, change.getEndAbsBounds(),
                change.getActivityComponent() != null);
                mMainExecutor, change.getEndRelOffset(), cornerRadius, change.getEndAbsBounds());
    }

    private void attachThumbnailAnimation(@NonNull ArrayList<Animator> animations,
@@ -901,8 +902,7 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler {
        a.restrictDuration(MAX_ANIMATION_DURATION);
        a.scaleCurrentDuration(mTransitionAnimationScaleSetting);
        buildSurfaceAnimation(animations, a, wt.getSurface(), finisher, mTransactionPool,
                mMainExecutor, change.getEndRelOffset(), cornerRadius, change.getEndAbsBounds(),
                change.getActivityComponent() != null);
                mMainExecutor, change.getEndRelOffset(), cornerRadius, change.getEndAbsBounds());
    }

    private static int getWallpaperTransitType(TransitionInfo info) {
+3 −3
Original line number Diff line number Diff line
@@ -347,21 +347,21 @@ class ScreenRotationAnimation {
            @NonNull Runnable finishCallback, @NonNull ShellExecutor mainExecutor) {
        buildSurfaceAnimation(animations, mRotateEnterAnimation, getEnterSurface(), finishCallback,
                mTransactionPool, mainExecutor, null /* position */, 0 /* cornerRadius */,
                null /* clipRect */, false /* isActivity */);
                null /* clipRect */);
    }

    private void startScreenshotRotationAnimation(@NonNull ArrayList<Animator> animations,
            @NonNull Runnable finishCallback, @NonNull ShellExecutor mainExecutor) {
        buildSurfaceAnimation(animations, mRotateExitAnimation, mAnimLeash, finishCallback,
                mTransactionPool, mainExecutor, null /* position */, 0 /* cornerRadius */,
                null /* clipRect */, false /* isActivity */);
                null /* clipRect */);
    }

    private void buildScreenshotAlphaAnimation(@NonNull ArrayList<Animator> animations,
            @NonNull Runnable finishCallback, @NonNull ShellExecutor mainExecutor) {
        buildSurfaceAnimation(animations, mRotateAlphaAnimation, mAnimLeash, finishCallback,
                mTransactionPool, mainExecutor, null /* position */, 0 /* cornerRadius */,
                null /* clipRect */, false /* isActivity */);
                null /* clipRect */);
    }

    private void buildLumaAnimation(@NonNull ArrayList<Animator> animations,