Merge "Add tests to verify aspect ratio updates"

This commit is contained in:
Jorge Gil
2020-10-26 21:04:38 +00:00
committed by Android (Google) Code Review
2 changed files with 84 additions and 7 deletions

View File

@@ -60,6 +60,7 @@ import android.window.WindowContainerToken;
import android.window.WindowContainerTransaction;
import android.window.WindowContainerTransactionCallback;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.jank.InteractionJankMonitor;
import com.android.internal.os.SomeArgs;
import com.android.wm.shell.R;
@@ -550,7 +551,8 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
return null;
}
private void enterPipWithAlphaAnimation(Rect destinationBounds, long durationMs) {
@VisibleForTesting
void enterPipWithAlphaAnimation(Rect destinationBounds, long durationMs) {
// If we are fading the PIP in, then we should move the pip to the final location as
// soon as possible, but set the alpha immediately since the transaction can take a
// while to process

View File

@@ -16,14 +16,29 @@
package com.android.wm.shell.pip;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.verify;
import static junit.framework.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.app.ActivityManager;
import android.app.PictureInPictureParams;
import android.content.ComponentName;
import android.graphics.Rect;
import android.os.RemoteException;
import android.test.suitebuilder.annotation.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.util.Rational;
import android.view.DisplayInfo;
import android.window.WindowContainerToken;
import com.android.wm.shell.ShellTaskOrganizer;
import com.android.wm.shell.common.DisplayController;
@@ -52,14 +67,19 @@ public class PipTaskOrganizerTest extends PipTestCase {
@Mock private PipUiEventLogger mMockPipUiEventLogger;
@Mock private Optional<SplitScreen> mMockOptionalSplitScreen;
@Mock private ShellTaskOrganizer mMockShellTaskOrganizer;
@Mock private PipBoundsState mMockPipBoundsState;
private PipBoundsState mPipBoundsState;
private ComponentName mComponent1;
@Before
public void setUp() throws RemoteException {
MockitoAnnotations.initMocks(this);
mSpiedPipTaskOrganizer = new PipTaskOrganizer(mContext, mMockPipBoundsState,
mComponent1 = new ComponentName(mContext, "component1");
mPipBoundsState = new PipBoundsState();
mSpiedPipTaskOrganizer = spy(new PipTaskOrganizer(mContext, mPipBoundsState,
mMockPipBoundsHandler, mMockPipSurfaceTransactionHelper, mMockOptionalSplitScreen,
mMockdDisplayController, mMockPipUiEventLogger, mMockShellTaskOrganizer);
mMockdDisplayController, mMockPipUiEventLogger, mMockShellTaskOrganizer));
preparePipTaskOrg();
}
@Test
@@ -71,4 +91,59 @@ public class PipTaskOrganizerTest extends PipTestCase {
public void instantiatePipTaskOrganizer_addsDisplayWindowListener() {
verify(mMockdDisplayController).addDisplayWindowListener(any());
}
@Test
public void startSwipePipToHome_updatesAspectRatio() {
final Rational aspectRatio = new Rational(2, 1);
mSpiedPipTaskOrganizer.startSwipePipToHome(mComponent1, null, createPipParams(aspectRatio));
assertEquals(aspectRatio.floatValue(), mPipBoundsState.getAspectRatio(), 0.01f);
}
@Test
public void onTaskAppeared_updatesAspectRatio() {
final Rational aspectRatio = new Rational(2, 1);
mSpiedPipTaskOrganizer.onTaskAppeared(createTaskInfo(
createPipParams(aspectRatio)), null /* leash */);
assertEquals(aspectRatio.floatValue(), mPipBoundsState.getAspectRatio(), 0.01f);
}
@Test
public void onTaskInfoChanged_updatesAspectRatioIfChanged() {
final Rational startAspectRatio = new Rational(2, 1);
final Rational newAspectRatio = new Rational(1, 2);
mSpiedPipTaskOrganizer.onTaskAppeared(createTaskInfo(
createPipParams(startAspectRatio)), null /* leash */);
mSpiedPipTaskOrganizer.onTaskInfoChanged(createTaskInfo(createPipParams(newAspectRatio)));
assertEquals(newAspectRatio.floatValue(), mPipBoundsState.getAspectRatio(), 0.01f);
}
private void preparePipTaskOrg() {
final DisplayInfo info = new DisplayInfo();
when(mMockPipBoundsHandler.getDestinationBounds(any(), any())).thenReturn(new Rect());
when(mMockPipBoundsHandler.getDestinationBounds(any(), any(), anyBoolean()))
.thenReturn(new Rect());
when(mMockPipBoundsHandler.getDisplayInfo()).thenReturn(info);
mSpiedPipTaskOrganizer.setOneShotAnimationType(PipAnimationController.ANIM_TYPE_ALPHA);
doNothing().when(mSpiedPipTaskOrganizer).enterPipWithAlphaAnimation(any(), anyLong());
doNothing().when(mSpiedPipTaskOrganizer).scheduleAnimateResizePip(any(), anyInt(), any());
}
private static ActivityManager.RunningTaskInfo createTaskInfo(PictureInPictureParams params) {
final ActivityManager.RunningTaskInfo info = new ActivityManager.RunningTaskInfo();
info.token = mock(WindowContainerToken.class);
info.pictureInPictureParams = params;
return info;
}
private static PictureInPictureParams createPipParams(Rational aspectRatio) {
return new PictureInPictureParams.Builder()
.setAspectRatio(aspectRatio)
.build();
}
}