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

Commit d6fd6bfc authored by Cairn Overturf's avatar Cairn Overturf Committed by Android (Google) Code Review
Browse files

Merge "Fix PiP2 unit tests when enable_pip_box_shadows is enabled" into main

parents c0924e53 8bfab84b
Loading
Loading
Loading
Loading
+3 −1
Original line number Original line Diff line number Diff line
@@ -267,13 +267,15 @@ public abstract class Pip2Module {
    @WMSingleton
    @WMSingleton
    @Provides
    @Provides
    static PipTaskListener providePipTaskListener(Context context,
    static PipTaskListener providePipTaskListener(Context context,
            @NonNull PipSurfaceTransactionHelper pipSurfaceTransactionHelper,
            ShellTaskOrganizer shellTaskOrganizer,
            ShellTaskOrganizer shellTaskOrganizer,
            PipTransitionState pipTransitionState,
            PipTransitionState pipTransitionState,
            PipScheduler pipScheduler,
            PipScheduler pipScheduler,
            PipBoundsState pipBoundsState,
            PipBoundsState pipBoundsState,
            PipBoundsAlgorithm pipBoundsAlgorithm,
            PipBoundsAlgorithm pipBoundsAlgorithm,
            @ShellMainThread ShellExecutor mainExecutor) {
            @ShellMainThread ShellExecutor mainExecutor) {
        return new PipTaskListener(context, shellTaskOrganizer, pipTransitionState,
        return new PipTaskListener(context, pipSurfaceTransactionHelper, shellTaskOrganizer,
                pipTransitionState,
                pipScheduler, pipBoundsState, pipBoundsAlgorithm, mainExecutor);
                pipScheduler, pipBoundsState, pipBoundsAlgorithm, mainExecutor);
    }
    }


+2 −1
Original line number Original line Diff line number Diff line
@@ -75,6 +75,7 @@ public class PipTaskListener implements ShellTaskOrganizer.TaskListener,
    private final @NonNull PipSurfaceTransactionHelper mSurfaceTransactionHelper;
    private final @NonNull PipSurfaceTransactionHelper mSurfaceTransactionHelper;


    public PipTaskListener(Context context,
    public PipTaskListener(Context context,
            @NonNull PipSurfaceTransactionHelper pipSurfaceTransactionHelper,
            ShellTaskOrganizer shellTaskOrganizer,
            ShellTaskOrganizer shellTaskOrganizer,
            PipTransitionState pipTransitionState,
            PipTransitionState pipTransitionState,
            PipScheduler pipScheduler,
            PipScheduler pipScheduler,
@@ -103,7 +104,7 @@ public class PipTaskListener implements ShellTaskOrganizer.TaskListener,
        mPipBoundsState.addOnPipComponentChangedListener(((oldPipComponent, newPipComponent) ->
        mPipBoundsState.addOnPipComponentChangedListener(((oldPipComponent, newPipComponent) ->
                mPictureInPictureParams = new PictureInPictureParams.Builder().build()));
                mPictureInPictureParams = new PictureInPictureParams.Builder().build()));


        mSurfaceTransactionHelper = new PipSurfaceTransactionHelper(context);
        mSurfaceTransactionHelper = pipSurfaceTransactionHelper;
    }
    }


    void setPictureInPictureParams(@Nullable PictureInPictureParams params) {
    void setPictureInPictureParams(@Nullable PictureInPictureParams params) {
+23 −2
Original line number Original line Diff line number Diff line
@@ -31,9 +31,10 @@ import android.content.res.Resources;
import android.graphics.Rect;
import android.graphics.Rect;
import android.gui.BorderSettings;
import android.gui.BorderSettings;
import android.gui.BoxShadowSettings;
import android.gui.BoxShadowSettings;
import android.platform.test.annotations.DisableFlags;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.flag.junit.FlagsParameterization;
import android.platform.test.flag.junit.SetFlagsRule;
import android.platform.test.flag.junit.SetFlagsRule;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableLooper;
import android.view.SurfaceControl;
import android.view.SurfaceControl;


@@ -53,12 +54,19 @@ import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.MockitoAnnotations;


import platform.test.runner.parameterized.ParameterizedAndroidJunit4;
import platform.test.runner.parameterized.Parameters;

import java.util.List;


/**
/**
 * Unit test against {@link PipSurfaceTransactionHelper}.
 * Unit test against {@link PipSurfaceTransactionHelper}.
 */
 */
@SmallTest
@SmallTest
@TestableLooper.RunWithLooper
@TestableLooper.RunWithLooper
@RunWith(AndroidTestingRunner.class)
@EnableFlags(Flags.FLAG_ENABLE_PIP2)
@RunWith(ParameterizedAndroidJunit4.class)
public class PipSurfaceTransactionHelperTest {
public class PipSurfaceTransactionHelperTest {


    private static final int CORNER_RADIUS = 10;
    private static final int CORNER_RADIUS = 10;
@@ -94,6 +102,17 @@ public class PipSurfaceTransactionHelperTest {
            .mockStatic(PipUtils.class)
            .mockStatic(PipUtils.class)
            .build();
            .build();



    @Parameters(name = "{0}")
    public static List<FlagsParameterization> getParams() {
        return FlagsParameterization.allCombinationsOf(
                Flags.FLAG_ENABLE_PIP_BOX_SHADOWS);
    }

    public PipSurfaceTransactionHelperTest(FlagsParameterization flags) {
        mSetFlagsRule.setFlagsParameterization(flags);
    }

    @Before
    @Before
    public void setUp() {
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        MockitoAnnotations.initMocks(this);
@@ -156,6 +175,7 @@ public class PipSurfaceTransactionHelperTest {
    }
    }


    @Test
    @Test
    @DisableFlags(Flags.FLAG_ENABLE_PIP_BOX_SHADOWS)
    public void shadow_doNotApply_setZeroShadowRadius() {
    public void shadow_doNotApply_setZeroShadowRadius() {
        mPipSurfaceTransactionHelper.shadow(mMockTransaction, mTestLeash, false /* apply */);
        mPipSurfaceTransactionHelper.shadow(mMockTransaction, mTestLeash, false /* apply */);


@@ -163,6 +183,7 @@ public class PipSurfaceTransactionHelperTest {
    }
    }


    @Test
    @Test
    @DisableFlags(Flags.FLAG_ENABLE_PIP_BOX_SHADOWS)
    public void shadow_doApply_setExactShadowRadius() {
    public void shadow_doApply_setExactShadowRadius() {
        mPipSurfaceTransactionHelper.shadow(mMockTransaction, mTestLeash, true /* apply */);
        mPipSurfaceTransactionHelper.shadow(mMockTransaction, mTestLeash, true /* apply */);


+67 −53
Original line number Original line Diff line number Diff line
@@ -20,7 +20,6 @@ import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyFloat;
import static org.mockito.ArgumentMatchers.anyFloat;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verify;
@@ -29,32 +28,38 @@ import static org.mockito.Mockito.when;


import android.content.Context;
import android.content.Context;
import android.content.res.Resources;
import android.content.res.Resources;
import android.testing.AndroidTestingRunner;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.flag.junit.FlagsParameterization;
import android.platform.test.flag.junit.SetFlagsRule;
import android.testing.TestableLooper;
import android.testing.TestableLooper;
import android.view.SurfaceControl;
import android.view.SurfaceControl;


import androidx.test.filters.SmallTest;
import androidx.test.filters.SmallTest;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.platform.app.InstrumentationRegistry;


import com.android.wm.shell.R;
import com.android.wm.shell.Flags;
import com.android.wm.shell.pip2.PipSurfaceTransactionHelper;
import com.android.wm.shell.pip2.PipSurfaceTransactionHelper;


import org.junit.Before;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.MockitoAnnotations;


import platform.test.runner.parameterized.ParameterizedAndroidJunit4;
import platform.test.runner.parameterized.Parameters;

import java.util.List;

/**
/**
 * Unit test against {@link PipAlphaAnimator}.
 * Unit test against {@link PipAlphaAnimator}.
 */
 */
@SmallTest
@SmallTest
@TestableLooper.RunWithLooper
@TestableLooper.RunWithLooper
@RunWith(AndroidTestingRunner.class)
@EnableFlags(Flags.FLAG_ENABLE_PIP2)
@RunWith(ParameterizedAndroidJunit4.class)
public class PipAlphaAnimatorTest {
public class PipAlphaAnimatorTest {
    private static final float TEST_CORNER_RADIUS = 1f;
    private static final float TEST_SHADOW_RADIUS = 2f;

    @Mock private Context mMockContext;
    @Mock private Context mMockContext;


    @Mock private Resources mMockResources;
    @Mock private Resources mMockResources;
@@ -64,7 +69,8 @@ public class PipAlphaAnimatorTest {
    @Mock private SurfaceControl.Transaction mMockAnimateTransaction;
    @Mock private SurfaceControl.Transaction mMockAnimateTransaction;
    @Mock private SurfaceControl.Transaction mMockStartTransaction;
    @Mock private SurfaceControl.Transaction mMockStartTransaction;
    @Mock private SurfaceControl.Transaction mMockFinishTransaction;
    @Mock private SurfaceControl.Transaction mMockFinishTransaction;

    @Mock
    private PipSurfaceTransactionHelper mPipSurfaceTransactionHelper;
    @Mock private Runnable mMockStartCallback;
    @Mock private Runnable mMockStartCallback;


    @Mock private Runnable mMockEndCallback;
    @Mock private Runnable mMockEndCallback;
@@ -72,21 +78,29 @@ public class PipAlphaAnimatorTest {
    private PipAlphaAnimator mPipAlphaAnimator;
    private PipAlphaAnimator mPipAlphaAnimator;
    private SurfaceControl mTestLeash;
    private SurfaceControl mTestLeash;


    @Parameters(name = "{0}")
    public static List<FlagsParameterization> getParams() {
        return FlagsParameterization.allCombinationsOf(
                Flags.FLAG_ENABLE_PIP_BOX_SHADOWS);
    }

    @Rule
    public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();

    public PipAlphaAnimatorTest(FlagsParameterization flags) {
        mSetFlagsRule.setFlagsParameterization(flags);
    }

    @Before
    @Before
    public void setUp() {
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        MockitoAnnotations.initMocks(this);
        when(mMockContext.getResources()).thenReturn(mMockResources);
        when(mMockContext.getResources()).thenReturn(mMockResources);
        when(mMockResources.getInteger(anyInt())).thenReturn(0);
        when(mMockResources.getInteger(anyInt())).thenReturn(0);
        when(mMockFactory.getTransaction()).thenReturn(mMockAnimateTransaction);
        when(mMockFactory.getTransaction()).thenReturn(mMockAnimateTransaction);
        when(mMockResources.getDimensionPixelSize(R.dimen.pip_corner_radius))
                .thenReturn((int) TEST_CORNER_RADIUS);
        when(mMockResources.getDimensionPixelSize(R.dimen.pip_shadow_radius))
                .thenReturn((int) TEST_SHADOW_RADIUS);


        prepareTransaction(mMockAnimateTransaction);
        prepareTransaction(mMockAnimateTransaction);
        prepareTransaction(mMockStartTransaction);
        prepareTransaction(mMockStartTransaction);
        prepareTransaction(mMockFinishTransaction);
        prepareTransaction(mMockFinishTransaction);

        mTestLeash = new SurfaceControl.Builder()
        mTestLeash = new SurfaceControl.Builder()
                .setContainerLayer()
                .setContainerLayer()
                .setName("PipAlphaAnimatorTest")
                .setName("PipAlphaAnimatorTest")
@@ -97,7 +111,7 @@ public class PipAlphaAnimatorTest {
    @Test
    @Test
    public void setAnimationStartCallback_fadeInAnimator_callbackStartCallback() {
    public void setAnimationStartCallback_fadeInAnimator_callbackStartCallback() {
        mPipAlphaAnimator = new PipAlphaAnimator(mMockContext,
        mPipAlphaAnimator = new PipAlphaAnimator(mMockContext,
                new PipSurfaceTransactionHelper(mMockContext), mTestLeash, mMockStartTransaction,
                mPipSurfaceTransactionHelper, mTestLeash, mMockStartTransaction,
                mMockFinishTransaction, PipAlphaAnimator.FADE_IN);
                mMockFinishTransaction, PipAlphaAnimator.FADE_IN);


        mPipAlphaAnimator.setAnimationStartCallback(mMockStartCallback);
        mPipAlphaAnimator.setAnimationStartCallback(mMockStartCallback);
@@ -114,7 +128,7 @@ public class PipAlphaAnimatorTest {
    @Test
    @Test
    public void setAnimationEndCallback_fadeInAnimator_callbackStartAndEndCallback() {
    public void setAnimationEndCallback_fadeInAnimator_callbackStartAndEndCallback() {
        mPipAlphaAnimator = new PipAlphaAnimator(mMockContext,
        mPipAlphaAnimator = new PipAlphaAnimator(mMockContext,
                new PipSurfaceTransactionHelper(mMockContext), mTestLeash, mMockStartTransaction,
                mPipSurfaceTransactionHelper, mTestLeash, mMockStartTransaction,
                mMockFinishTransaction, PipAlphaAnimator.FADE_IN);
                mMockFinishTransaction, PipAlphaAnimator.FADE_IN);


        mPipAlphaAnimator.setAnimationStartCallback(mMockStartCallback);
        mPipAlphaAnimator.setAnimationStartCallback(mMockStartCallback);
@@ -131,7 +145,7 @@ public class PipAlphaAnimatorTest {
    @Test
    @Test
    public void onAnimationStart_fadeInAnimator_setCornerAndShadowRadii() {
    public void onAnimationStart_fadeInAnimator_setCornerAndShadowRadii() {
        mPipAlphaAnimator = new PipAlphaAnimator(mMockContext,
        mPipAlphaAnimator = new PipAlphaAnimator(mMockContext,
                new PipSurfaceTransactionHelper(mMockContext), mTestLeash, mMockStartTransaction,
                mPipSurfaceTransactionHelper, mTestLeash, mMockStartTransaction,
                mMockFinishTransaction, PipAlphaAnimator.FADE_IN);
                mMockFinishTransaction, PipAlphaAnimator.FADE_IN);
        mPipAlphaAnimator.setSurfaceControlTransactionFactory(mMockFactory);
        mPipAlphaAnimator.setSurfaceControlTransactionFactory(mMockFactory);


@@ -140,16 +154,16 @@ public class PipAlphaAnimatorTest {
            mPipAlphaAnimator.pause();
            mPipAlphaAnimator.pause();
        });
        });


        verify(mMockStartTransaction, atLeastOnce())
        verify(mPipSurfaceTransactionHelper)
                .setCornerRadius(eq(mTestLeash), eq(TEST_CORNER_RADIUS));
                .round(eq(mMockStartTransaction), eq(mTestLeash), eq(true));
        verify(mMockStartTransaction, atLeastOnce())
        verify(mPipSurfaceTransactionHelper)
                .setShadowRadius(eq(mTestLeash), eq(TEST_SHADOW_RADIUS));
                .shadow(eq(mMockStartTransaction), eq(mTestLeash), eq(true));
    }
    }


    @Test
    @Test
    public void onAnimationStart_fadeOutAnimator_setCornerNoShadowRadii() {
    public void onAnimationStart_fadeOutAnimator_setCornerNoShadowRadii() {
        mPipAlphaAnimator = new PipAlphaAnimator(mMockContext,
        mPipAlphaAnimator = new PipAlphaAnimator(mMockContext,
                new PipSurfaceTransactionHelper(mMockContext), mTestLeash, mMockStartTransaction,
                mPipSurfaceTransactionHelper, mTestLeash, mMockStartTransaction,
                mMockFinishTransaction, PipAlphaAnimator.FADE_OUT);
                mMockFinishTransaction, PipAlphaAnimator.FADE_OUT);
        mPipAlphaAnimator.setSurfaceControlTransactionFactory(mMockFactory);
        mPipAlphaAnimator.setSurfaceControlTransactionFactory(mMockFactory);


@@ -158,18 +172,18 @@ public class PipAlphaAnimatorTest {
            mPipAlphaAnimator.pause();
            mPipAlphaAnimator.pause();
        });
        });


        verify(mMockStartTransaction, atLeastOnce())
        verify(mPipSurfaceTransactionHelper)
                .setCornerRadius(eq(mTestLeash), eq(TEST_CORNER_RADIUS));
                .round(eq(mMockStartTransaction), eq(mTestLeash), eq(true));
        verify(mMockStartTransaction, never())
        verify(mPipSurfaceTransactionHelper, never())
                .setShadowRadius(eq(mTestLeash), eq(TEST_SHADOW_RADIUS));
                .shadow(eq(mMockStartTransaction), eq(mTestLeash), eq(true));
        verify(mMockStartTransaction, atLeastOnce())
        verify(mPipSurfaceTransactionHelper)
                .setShadowRadius(eq(mTestLeash), eq(0f));
                .shadow(eq(mMockStartTransaction), eq(mTestLeash), eq(false));
    }
    }


    @Test
    @Test
    public void onAnimationUpdate_fadeInAnimator_setCornerAndShadowRadii() {
    public void onAnimationUpdate_fadeInAnimator_setCornerAndShadowRadii() {
        mPipAlphaAnimator = new PipAlphaAnimator(mMockContext,
        mPipAlphaAnimator = new PipAlphaAnimator(mMockContext,
                new PipSurfaceTransactionHelper(mMockContext), mTestLeash, mMockStartTransaction,
                mPipSurfaceTransactionHelper, mTestLeash, mMockStartTransaction,
                mMockFinishTransaction, PipAlphaAnimator.FADE_IN);
                mMockFinishTransaction, PipAlphaAnimator.FADE_IN);
        mPipAlphaAnimator.setSurfaceControlTransactionFactory(mMockFactory);
        mPipAlphaAnimator.setSurfaceControlTransactionFactory(mMockFactory);


@@ -178,16 +192,16 @@ public class PipAlphaAnimatorTest {
            mPipAlphaAnimator.pause();
            mPipAlphaAnimator.pause();
        });
        });


        verify(mMockAnimateTransaction, atLeastOnce())
        verify(mPipSurfaceTransactionHelper)
                .setCornerRadius(eq(mTestLeash), eq(TEST_CORNER_RADIUS));
                .round(eq(mMockAnimateTransaction), eq(mTestLeash), eq(true));
        verify(mMockAnimateTransaction, atLeastOnce())
        verify(mPipSurfaceTransactionHelper)
                .setShadowRadius(eq(mTestLeash), eq(TEST_SHADOW_RADIUS));
                .shadow(eq(mMockAnimateTransaction), eq(mTestLeash), eq(true));
    }
    }


    @Test
    @Test
    public void onAnimationUpdate_fadeOutAnimator_setCornerNoShadowRadii() {
    public void onAnimationUpdate_fadeOutAnimator_setCornerNoShadowRadii() {
        mPipAlphaAnimator = new PipAlphaAnimator(mMockContext,
        mPipAlphaAnimator = new PipAlphaAnimator(mMockContext,
                new PipSurfaceTransactionHelper(mMockContext), mTestLeash, mMockStartTransaction,
                mPipSurfaceTransactionHelper, mTestLeash, mMockStartTransaction,
                mMockFinishTransaction, PipAlphaAnimator.FADE_OUT);
                mMockFinishTransaction, PipAlphaAnimator.FADE_OUT);
        mPipAlphaAnimator.setSurfaceControlTransactionFactory(mMockFactory);
        mPipAlphaAnimator.setSurfaceControlTransactionFactory(mMockFactory);


@@ -196,18 +210,18 @@ public class PipAlphaAnimatorTest {
            mPipAlphaAnimator.pause();
            mPipAlphaAnimator.pause();
        });
        });


        verify(mMockAnimateTransaction, atLeastOnce())
        verify(mPipSurfaceTransactionHelper)
                .setCornerRadius(eq(mTestLeash), eq(TEST_CORNER_RADIUS));
                .round(eq(mMockAnimateTransaction), eq(mTestLeash), eq(true));
        verify(mMockAnimateTransaction, never())
        verify(mPipSurfaceTransactionHelper, never())
                .setShadowRadius(eq(mTestLeash), eq(TEST_SHADOW_RADIUS));
                .shadow(eq(mMockAnimateTransaction), eq(mTestLeash), eq(true));
        verify(mMockAnimateTransaction, atLeastOnce())
        verify(mPipSurfaceTransactionHelper)
                .setShadowRadius(eq(mTestLeash), eq(0f));
                .shadow(eq(mMockAnimateTransaction), eq(mTestLeash), eq(false));
    }
    }


    @Test
    @Test
    public void onAnimationEnd_fadeInAnimator_setCornerAndShadowRadii() {
    public void onAnimationEnd_fadeInAnimator_setCornerAndShadowRadii() {
        mPipAlphaAnimator = new PipAlphaAnimator(mMockContext,
        mPipAlphaAnimator = new PipAlphaAnimator(mMockContext,
                new PipSurfaceTransactionHelper(mMockContext), mTestLeash, mMockStartTransaction,
                mPipSurfaceTransactionHelper, mTestLeash, mMockStartTransaction,
                mMockFinishTransaction, PipAlphaAnimator.FADE_IN);
                mMockFinishTransaction, PipAlphaAnimator.FADE_IN);
        mPipAlphaAnimator.setSurfaceControlTransactionFactory(mMockFactory);
        mPipAlphaAnimator.setSurfaceControlTransactionFactory(mMockFactory);


@@ -216,16 +230,16 @@ public class PipAlphaAnimatorTest {
            mPipAlphaAnimator.end();
            mPipAlphaAnimator.end();
        });
        });


        verify(mMockFinishTransaction, atLeastOnce())
        verify(mPipSurfaceTransactionHelper)
                .setCornerRadius(eq(mTestLeash), eq(TEST_CORNER_RADIUS));
                .round(eq(mMockFinishTransaction), eq(mTestLeash), eq(true));
        verify(mMockFinishTransaction, atLeastOnce())
        verify(mPipSurfaceTransactionHelper)
                .setShadowRadius(eq(mTestLeash), eq(TEST_SHADOW_RADIUS));
                .shadow(eq(mMockFinishTransaction), eq(mTestLeash), eq(true));
    }
    }


    @Test
    @Test
    public void onAnimationEnd_fadeOutAnimator_setCornerNoShadowRadii() {
    public void onAnimationEnd_fadeOutAnimator_setCornerNoShadowRadii() {
        mPipAlphaAnimator = new PipAlphaAnimator(mMockContext,
        mPipAlphaAnimator = new PipAlphaAnimator(mMockContext,
                new PipSurfaceTransactionHelper(mMockContext), mTestLeash, mMockStartTransaction,
                mPipSurfaceTransactionHelper, mTestLeash, mMockStartTransaction,
                mMockFinishTransaction, PipAlphaAnimator.FADE_OUT);
                mMockFinishTransaction, PipAlphaAnimator.FADE_OUT);
        mPipAlphaAnimator.setSurfaceControlTransactionFactory(mMockFactory);
        mPipAlphaAnimator.setSurfaceControlTransactionFactory(mMockFactory);


@@ -234,18 +248,18 @@ public class PipAlphaAnimatorTest {
            mPipAlphaAnimator.end();
            mPipAlphaAnimator.end();
        });
        });


        verify(mMockFinishTransaction, atLeastOnce())
        verify(mPipSurfaceTransactionHelper)
                .setCornerRadius(eq(mTestLeash), eq(TEST_CORNER_RADIUS));
                .round(eq(mMockFinishTransaction), eq(mTestLeash), eq(true));
        verify(mMockFinishTransaction, never())
        verify(mPipSurfaceTransactionHelper, never())
                .setShadowRadius(eq(mTestLeash), eq(TEST_SHADOW_RADIUS));
                .shadow(eq(mMockFinishTransaction), eq(mTestLeash), eq(true));
        verify(mMockFinishTransaction, atLeastOnce())
        verify(mPipSurfaceTransactionHelper)
                .setShadowRadius(eq(mTestLeash), eq(0f));
                .shadow(eq(mMockFinishTransaction), eq(mTestLeash), eq(false));
    }
    }


    @Test
    @Test
    public void onAnimationEnd_fadeInAnimator_leashVisibleAtEnd() {
    public void onAnimationEnd_fadeInAnimator_leashVisibleAtEnd() {
        mPipAlphaAnimator = new PipAlphaAnimator(mMockContext,
        mPipAlphaAnimator = new PipAlphaAnimator(mMockContext,
                new PipSurfaceTransactionHelper(mMockContext), mTestLeash, mMockStartTransaction,
                mPipSurfaceTransactionHelper, mTestLeash, mMockStartTransaction,
                mMockFinishTransaction, PipAlphaAnimator.FADE_IN);
                mMockFinishTransaction, PipAlphaAnimator.FADE_IN);
        mPipAlphaAnimator.setSurfaceControlTransactionFactory(mMockFactory);
        mPipAlphaAnimator.setSurfaceControlTransactionFactory(mMockFactory);


@@ -261,7 +275,7 @@ public class PipAlphaAnimatorTest {
    @Test
    @Test
    public void onAnimationEnd_fadeOutAnimator_leashInvisibleAtEnd() {
    public void onAnimationEnd_fadeOutAnimator_leashInvisibleAtEnd() {
        mPipAlphaAnimator = new PipAlphaAnimator(mMockContext,
        mPipAlphaAnimator = new PipAlphaAnimator(mMockContext,
                new PipSurfaceTransactionHelper(mMockContext), mTestLeash, mMockStartTransaction,
                mPipSurfaceTransactionHelper, mTestLeash, mMockStartTransaction,
                mMockFinishTransaction, PipAlphaAnimator.FADE_OUT);
                mMockFinishTransaction, PipAlphaAnimator.FADE_OUT);
        mPipAlphaAnimator.setSurfaceControlTransactionFactory(mMockFactory);
        mPipAlphaAnimator.setSurfaceControlTransactionFactory(mMockFactory);


+46 −27
Original line number Original line Diff line number Diff line
@@ -32,7 +32,9 @@ import android.content.pm.ActivityInfo;
import android.content.res.Resources;
import android.content.res.Resources;
import android.graphics.Matrix;
import android.graphics.Matrix;
import android.graphics.Rect;
import android.graphics.Rect;
import android.testing.AndroidTestingRunner;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.flag.junit.FlagsParameterization;
import android.platform.test.flag.junit.SetFlagsRule;
import android.testing.TestableLooper;
import android.testing.TestableLooper;
import android.view.Surface;
import android.view.Surface;
import android.view.SurfaceControl;
import android.view.SurfaceControl;
@@ -40,26 +42,30 @@ import android.view.SurfaceControl;
import androidx.test.filters.SmallTest;
import androidx.test.filters.SmallTest;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.platform.app.InstrumentationRegistry;


import com.android.wm.shell.R;
import com.android.wm.shell.Flags;
import com.android.wm.shell.pip2.PipSurfaceTransactionHelper;
import com.android.wm.shell.pip2.PipSurfaceTransactionHelper;
import com.android.wm.shell.pip2.phone.PipAppIconOverlay;
import com.android.wm.shell.pip2.phone.PipAppIconOverlay;


import org.junit.Before;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.MockitoAnnotations;


import platform.test.runner.parameterized.ParameterizedAndroidJunit4;
import platform.test.runner.parameterized.Parameters;

import java.util.List;

/**
/**
 * Unit test against {@link PipEnterAnimator}.
 * Unit test against {@link PipEnterAnimator}.
 */
 */
@SmallTest
@SmallTest
@TestableLooper.RunWithLooper
@TestableLooper.RunWithLooper
@RunWith(AndroidTestingRunner.class)
@EnableFlags(Flags.FLAG_ENABLE_PIP2)
@RunWith(ParameterizedAndroidJunit4.class)
public class PipEnterAnimatorTest {
public class PipEnterAnimatorTest {
    private static final float TEST_CORNER_RADIUS = 1f;
    private static final float TEST_SHADOW_RADIUS = 2f;

    @Mock private Context mMockContext;
    @Mock private Context mMockContext;
    @Mock private Resources mMockResources;
    @Mock private Resources mMockResources;
    @Mock private PipSurfaceTransactionHelper.SurfaceControlTransactionFactory mMockFactory;
    @Mock private PipSurfaceTransactionHelper.SurfaceControlTransactionFactory mMockFactory;
@@ -77,6 +83,22 @@ public class PipEnterAnimatorTest {
    private Rect mEndBounds;
    private Rect mEndBounds;
    private PipEnterAnimator mPipEnterAnimator;
    private PipEnterAnimator mPipEnterAnimator;


    @Mock
    private PipSurfaceTransactionHelper mPipSurfaceTransactionHelper;

    @Parameters(name = "{0}")
    public static List<FlagsParameterization> getParams() {
        return FlagsParameterization.allCombinationsOf(
                Flags.FLAG_ENABLE_PIP_BOX_SHADOWS);
    }

    @Rule
    public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();

    public PipEnterAnimatorTest(FlagsParameterization flags) {
        mSetFlagsRule.setFlagsParameterization(flags);
    }

    @Before
    @Before
    public void setUp() {
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        MockitoAnnotations.initMocks(this);
@@ -84,10 +106,6 @@ public class PipEnterAnimatorTest {
        when(mMockResources.getInteger(anyInt())).thenReturn(0);
        when(mMockResources.getInteger(anyInt())).thenReturn(0);
        when(mMockFactory.getTransaction()).thenReturn(mMockAnimateTransaction);
        when(mMockFactory.getTransaction()).thenReturn(mMockAnimateTransaction);
        when(mMockPipAppIconOverlay.getLeash()).thenReturn(mMockAppIconOverlayLeash);
        when(mMockPipAppIconOverlay.getLeash()).thenReturn(mMockAppIconOverlayLeash);
        when(mMockResources.getDimensionPixelSize(R.dimen.pip_corner_radius))
                .thenReturn((int) TEST_CORNER_RADIUS);
        when(mMockResources.getDimensionPixelSize(R.dimen.pip_shadow_radius))
                .thenReturn((int) TEST_SHADOW_RADIUS);


        prepareTransaction(mMockAnimateTransaction);
        prepareTransaction(mMockAnimateTransaction);
        prepareTransaction(mMockStartTransaction);
        prepareTransaction(mMockStartTransaction);
@@ -105,7 +123,7 @@ public class PipEnterAnimatorTest {
        mRotation = Surface.ROTATION_0;
        mRotation = Surface.ROTATION_0;
        mEndBounds = new Rect(100, 100, 500, 500);
        mEndBounds = new Rect(100, 100, 500, 500);
        mPipEnterAnimator = new PipEnterAnimator(mMockContext,
        mPipEnterAnimator = new PipEnterAnimator(mMockContext,
                new PipSurfaceTransactionHelper(mMockContext), mTestLeash,
                mPipSurfaceTransactionHelper, mTestLeash,
                mMockStartTransaction, mMockFinishTransaction,
                mMockStartTransaction, mMockFinishTransaction,
                mEndBounds, mRotation);
                mEndBounds, mRotation);
        mPipEnterAnimator.setSurfaceControlTransactionFactory(mMockFactory);
        mPipEnterAnimator.setSurfaceControlTransactionFactory(mMockFactory);
@@ -121,10 +139,11 @@ public class PipEnterAnimatorTest {
        verifyNoMoreInteractions(mMockEndCallback);
        verifyNoMoreInteractions(mMockEndCallback);


        // Check corner and shadow radii were set
        // Check corner and shadow radii were set
        verify(mMockAnimateTransaction, atLeastOnce())
        verify(mPipSurfaceTransactionHelper, atLeastOnce())
                .setCornerRadius(eq(mTestLeash), eq(TEST_CORNER_RADIUS));
                .round(eq(mMockAnimateTransaction), eq(mTestLeash), eq(true));
        verify(mMockAnimateTransaction, atLeastOnce())
        verify(mPipSurfaceTransactionHelper, atLeastOnce())
                .setShadowRadius(eq(mTestLeash), eq(TEST_SHADOW_RADIUS));
                .shadow(eq(mMockAnimateTransaction), eq(mTestLeash), eq(true));

    }
    }


    @Test
    @Test
@@ -132,7 +151,7 @@ public class PipEnterAnimatorTest {
        mRotation = Surface.ROTATION_0;
        mRotation = Surface.ROTATION_0;
        mEndBounds = new Rect(100, 100, 500, 500);
        mEndBounds = new Rect(100, 100, 500, 500);
        mPipEnterAnimator = new PipEnterAnimator(mMockContext,
        mPipEnterAnimator = new PipEnterAnimator(mMockContext,
                new PipSurfaceTransactionHelper(mMockContext), mTestLeash,
                mPipSurfaceTransactionHelper, mTestLeash,
                mMockStartTransaction, mMockFinishTransaction,
                mMockStartTransaction, mMockFinishTransaction,
                mEndBounds, mRotation);
                mEndBounds, mRotation);
        mPipEnterAnimator.setSurfaceControlTransactionFactory(mMockFactory);
        mPipEnterAnimator.setSurfaceControlTransactionFactory(mMockFactory);
@@ -148,10 +167,10 @@ public class PipEnterAnimatorTest {
        verify(mMockEndCallback).run();
        verify(mMockEndCallback).run();


        // Check corner and shadow radii were set
        // Check corner and shadow radii were set
        verify(mMockAnimateTransaction, atLeastOnce())
        verify(mPipSurfaceTransactionHelper, atLeastOnce())
                .setCornerRadius(eq(mTestLeash), eq(TEST_CORNER_RADIUS));
                .round(eq(mMockAnimateTransaction), eq(mTestLeash), eq(true));
        verify(mMockAnimateTransaction, atLeastOnce())
        verify(mPipSurfaceTransactionHelper, atLeastOnce())
                .setShadowRadius(eq(mTestLeash), eq(TEST_SHADOW_RADIUS));
                .shadow(eq(mMockAnimateTransaction), eq(mTestLeash), eq(true));
    }
    }


    @Test
    @Test
@@ -159,7 +178,7 @@ public class PipEnterAnimatorTest {
        mRotation = Surface.ROTATION_0;
        mRotation = Surface.ROTATION_0;
        mEndBounds = new Rect(100, 100, 500, 500);
        mEndBounds = new Rect(100, 100, 500, 500);
        mPipEnterAnimator = new PipEnterAnimator(mMockContext,
        mPipEnterAnimator = new PipEnterAnimator(mMockContext,
                new PipSurfaceTransactionHelper(mMockContext), mTestLeash,
                mPipSurfaceTransactionHelper, mTestLeash,
                mMockStartTransaction, mMockFinishTransaction,
                mMockStartTransaction, mMockFinishTransaction,
                mEndBounds, mRotation);
                mEndBounds, mRotation);
        mPipEnterAnimator.setSurfaceControlTransactionFactory(mMockFactory);
        mPipEnterAnimator.setSurfaceControlTransactionFactory(mMockFactory);
@@ -177,7 +196,7 @@ public class PipEnterAnimatorTest {
        mRotation = Surface.ROTATION_0;
        mRotation = Surface.ROTATION_0;
        mEndBounds = new Rect(100, 100, 500, 500);
        mEndBounds = new Rect(100, 100, 500, 500);
        mPipEnterAnimator = new PipEnterAnimator(mMockContext,
        mPipEnterAnimator = new PipEnterAnimator(mMockContext,
                new PipSurfaceTransactionHelper(mMockContext), mTestLeash,
                mPipSurfaceTransactionHelper, mTestLeash,
                mMockStartTransaction, mMockFinishTransaction,
                mMockStartTransaction, mMockFinishTransaction,
                mEndBounds, mRotation);
                mEndBounds, mRotation);
        mPipEnterAnimator.setSurfaceControlTransactionFactory(mMockFactory);
        mPipEnterAnimator.setSurfaceControlTransactionFactory(mMockFactory);
@@ -196,7 +215,7 @@ public class PipEnterAnimatorTest {
        mRotation = Surface.ROTATION_0;
        mRotation = Surface.ROTATION_0;
        mEndBounds = new Rect(100, 100, 500, 500);
        mEndBounds = new Rect(100, 100, 500, 500);
        mPipEnterAnimator = new PipEnterAnimator(mMockContext,
        mPipEnterAnimator = new PipEnterAnimator(mMockContext,
                new PipSurfaceTransactionHelper(mMockContext), mTestLeash,
                mPipSurfaceTransactionHelper, mTestLeash,
                mMockStartTransaction, mMockFinishTransaction,
                mMockStartTransaction, mMockFinishTransaction,
                mEndBounds, mRotation);
                mEndBounds, mRotation);
        mPipEnterAnimator.setSurfaceControlTransactionFactory(mMockFactory);
        mPipEnterAnimator.setSurfaceControlTransactionFactory(mMockFactory);
@@ -212,10 +231,10 @@ public class PipEnterAnimatorTest {
                eq(mMockAnimateTransaction), anyFloat(), eq(fraction), eq(mEndBounds));
                eq(mMockAnimateTransaction), anyFloat(), eq(fraction), eq(mEndBounds));


        // Check corner and shadow radii were set
        // Check corner and shadow radii were set
        verify(mMockAnimateTransaction, atLeastOnce())
        verify(mPipSurfaceTransactionHelper, atLeastOnce())
                .setCornerRadius(eq(mTestLeash), eq(TEST_CORNER_RADIUS));
                .round(eq(mMockAnimateTransaction), eq(mTestLeash), eq(true));
        verify(mMockAnimateTransaction, atLeastOnce())
        verify(mPipSurfaceTransactionHelper, atLeastOnce())
                .setShadowRadius(eq(mTestLeash), eq(TEST_SHADOW_RADIUS));
                .shadow(eq(mMockAnimateTransaction), eq(mTestLeash), eq(true));
    }
    }


    // set up transaction chaining
    // set up transaction chaining
Loading