[27/n] Improve spyOn() on specific Robot
We leave to each Robot the responsibility to spyOn()
only the required objects.
Flag: EXEMPT refactor
Fix: 351763164
Test: atest WmTests:AppCompatAspectRatioOverridesTest
Test: atest WmTests:AppCompatCameraOverridesTest
Test: atest WmTests:AppCompatCameraPolicyTest
Test: atest WmTests:AppCompatOrientationOverridesTest
Test: atest WmTests:AppCompatOrientationPolicyTest
Test: atest WmTests:AppCompatReachabilityOverridesTest
Test: atest WmTests:AppCompatReachabilityPolicyTest
Test: atest WmTests:TransparentPolicyTest
Test: atest WmTests:AppCompatUtilsTest
Change-Id: I42a474c44b3d597b38dec40dd814595bab61e4f0
diff --git a/services/tests/wmtests/src/com/android/server/wm/AppCompatActivityRobot.java b/services/tests/wmtests/src/com/android/server/wm/AppCompatActivityRobot.java
index d582b07..a745724 100644
--- a/services/tests/wmtests/src/com/android/server/wm/AppCompatActivityRobot.java
+++ b/services/tests/wmtests/src/com/android/server/wm/AppCompatActivityRobot.java
@@ -80,19 +80,33 @@
@Nullable
private Consumer<ActivityRecord> mOnPostActivityCreation;
+ @Nullable
+ private Consumer<DisplayContent> mOnPostDisplayContentCreation;
+
AppCompatActivityRobot(@NonNull WindowManagerService wm,
@NonNull ActivityTaskManagerService atm, @NonNull ActivityTaskSupervisor supervisor,
- int displayWidth, int displayHeight) {
+ int displayWidth, int displayHeight,
+ @Nullable Consumer<ActivityRecord> onPostActivityCreation,
+ @Nullable Consumer<DisplayContent> onPostDisplayContentCreation) {
mAtm = atm;
mSupervisor = supervisor;
mDisplayWidth = displayWidth;
mDisplayHeight = displayHeight;
mActivityStack = new TestComponentStack<>();
mTaskStack = new TestComponentStack<>();
+ mOnPostActivityCreation = onPostActivityCreation;
+ mOnPostDisplayContentCreation = onPostDisplayContentCreation;
createNewDisplay();
}
AppCompatActivityRobot(@NonNull WindowManagerService wm,
+ @NonNull ActivityTaskManagerService atm, @NonNull ActivityTaskSupervisor supervisor,
+ int displayWidth, int displayHeight) {
+ this(wm, atm, supervisor, displayWidth, displayHeight, /* onPostActivityCreation */ null,
+ /* onPostDisplayContentCreation */ null);
+ }
+
+ AppCompatActivityRobot(@NonNull WindowManagerService wm,
@NonNull ActivityTaskManagerService atm, @NonNull ActivityTaskSupervisor supervisor) {
this(wm, atm, supervisor, DEFAULT_DISPLAY_WIDTH, DEFAULT_DISPLAY_HEIGHT);
}
@@ -114,7 +128,6 @@
createActivityWithComponentInNewTask(/* inNewTask */ true, /* inNewDisplay */ true);
}
-
void configureTopActivity(float minAspect, float maxAspect, int screenOrientation,
boolean isUnresizable) {
prepareLimitedBounds(mActivityStack.top(), minAspect, maxAspect, screenOrientation,
@@ -260,21 +273,20 @@
void createNewDisplay() {
mDisplayContent = new TestDisplayContent.Builder(mAtm, mDisplayWidth, mDisplayHeight)
.build();
- spyOn(mDisplayContent);
- spyOnAppCompatCameraPolicy();
+ onPostDisplayContentCreation(mDisplayContent);
}
void createNewTask() {
final Task newTask = new WindowTestsBase.TaskBuilder(mSupervisor)
.setDisplay(mDisplayContent).build();
- pushTask(newTask);
+ mTaskStack.push(newTask);
}
void createNewTaskWithBaseActivity() {
final Task newTask = new WindowTestsBase.TaskBuilder(mSupervisor)
.setCreateActivity(true)
.setDisplay(mDisplayContent).build();
- pushTask(newTask);
+ mTaskStack.push(newTask);
pushActivity(newTask.getTopNonFinishingActivity());
}
@@ -408,7 +420,6 @@
*/
@CallSuper
void onPostActivityCreation(@NonNull ActivityRecord activity) {
- spyOn(activity);
spyOn(activity.mLetterboxUiController);
if (mOnPostActivityCreation != null) {
mOnPostActivityCreation.accept(activity);
@@ -416,14 +427,17 @@
}
/**
- * Each Robot can specify its own set of operation to execute on a newly created
- * {@link ActivityRecord}. Most common the use of spyOn().
+ * Specific Robots can override this method to add operation to run on a newly created
+ * {@link DisplayContent}. Common case is to invoke spyOn().
*
- * @param onPostActivityCreation The reference to the code to execute after the creation of a
- * new {@link ActivityRecord}.
+ * @param displayContent The newly created {@link DisplayContent}.
*/
- void setOnPostActivityCreation(@Nullable Consumer<ActivityRecord> onPostActivityCreation) {
- mOnPostActivityCreation = onPostActivityCreation;
+ @CallSuper
+ void onPostDisplayContentCreation(@NonNull DisplayContent displayContent) {
+ spyOn(mDisplayContent);
+ if (mOnPostDisplayContentCreation != null) {
+ mOnPostDisplayContentCreation.accept(mDisplayContent);
+ }
}
private void createActivityWithComponentInNewTask(boolean inNewTask, boolean inNewDisplay) {
@@ -489,28 +503,5 @@
private void pushActivity(@NonNull ActivityRecord activity) {
mActivityStack.push(activity);
onPostActivityCreation(activity);
- // TODO (b/351763164): Use these spyOn calls only when necessary.
- spyOn(activity.mAppCompatController.getTransparentPolicy());
- spyOn(activity.mAppCompatController.getAppCompatAspectRatioOverrides());
- spyOn(activity.mAppCompatController.getAppCompatAspectRatioPolicy());
- spyOn(activity.mAppCompatController.getAppCompatFocusOverrides());
- spyOn(activity.mAppCompatController.getAppCompatResizeOverrides());
- spyOn(activity.mAppCompatController.getAppCompatReachabilityPolicy());
- spyOn(activity.mAppCompatController.getAppCompatReachabilityOverrides());
- }
-
- private void pushTask(@NonNull Task task) {
- spyOn(task);
- mTaskStack.push(task);
- }
-
- private void spyOnAppCompatCameraPolicy() {
- spyOn(mDisplayContent.mAppCompatCameraPolicy);
- if (mDisplayContent.mAppCompatCameraPolicy.hasDisplayRotationCompatPolicy()) {
- spyOn(mDisplayContent.mAppCompatCameraPolicy.mDisplayRotationCompatPolicy);
- }
- if (mDisplayContent.mAppCompatCameraPolicy.hasCameraCompatFreeformPolicy()) {
- spyOn(mDisplayContent.mAppCompatCameraPolicy.mCameraCompatFreeformPolicy);
- }
}
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/AppCompatAspectRatioOverridesTest.java b/services/tests/wmtests/src/com/android/server/wm/AppCompatAspectRatioOverridesTest.java
index a6fd112..1e40aa0 100644
--- a/services/tests/wmtests/src/com/android/server/wm/AppCompatAspectRatioOverridesTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/AppCompatAspectRatioOverridesTest.java
@@ -291,7 +291,6 @@
* Runs a test scenario providing a Robot.
*/
void runTestScenario(@NonNull Consumer<AspectRatioOverridesRobotTest> consumer) {
- spyOn(mWm.mAppCompatConfiguration);
final AspectRatioOverridesRobotTest robot =
new AspectRatioOverridesRobotTest(mWm, mAtm, mSupervisor);
consumer.accept(robot);
@@ -305,6 +304,18 @@
super(wm, atm, supervisor);
}
+ @Override
+ void onPostDisplayContentCreation(@NonNull DisplayContent displayContent) {
+ super.onPostDisplayContentCreation(displayContent);
+ spyOn(displayContent.mAppCompatCameraPolicy);
+ }
+
+ @Override
+ void onPostActivityCreation(@NonNull ActivityRecord activity) {
+ super.onPostActivityCreation(activity);
+ spyOn(activity.mAppCompatController.getAppCompatAspectRatioOverrides());
+ }
+
void checkShouldApplyUserFullscreenOverride(boolean expected) {
assertEquals(expected, getTopActivityAppCompatAspectRatioOverrides()
.shouldApplyUserFullscreenOverride());
diff --git a/services/tests/wmtests/src/com/android/server/wm/AppCompatCameraOverridesTest.java b/services/tests/wmtests/src/com/android/server/wm/AppCompatCameraOverridesTest.java
index de99f54..84ffcb8 100644
--- a/services/tests/wmtests/src/com/android/server/wm/AppCompatCameraOverridesTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/AppCompatCameraOverridesTest.java
@@ -387,6 +387,12 @@
super(wm, atm, supervisor);
}
+ @Override
+ void onPostDisplayContentCreation(@NonNull DisplayContent displayContent) {
+ super.onPostDisplayContentCreation(displayContent);
+ spyOn(displayContent.mAppCompatCameraPolicy);
+ }
+
void checkShouldRefreshActivityForCameraCompat(boolean expected) {
Assert.assertEquals(getAppCompatCameraOverrides()
.shouldRefreshActivityForCameraCompat(), expected);
diff --git a/services/tests/wmtests/src/com/android/server/wm/AppCompatCameraPolicyTest.java b/services/tests/wmtests/src/com/android/server/wm/AppCompatCameraPolicyTest.java
index 0b1bb0f..c42228d 100644
--- a/services/tests/wmtests/src/com/android/server/wm/AppCompatCameraPolicyTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/AppCompatCameraPolicyTest.java
@@ -150,6 +150,12 @@
super(wm, atm, supervisor);
}
+ @Override
+ void onPostDisplayContentCreation(@NonNull DisplayContent displayContent) {
+ super.onPostDisplayContentCreation(displayContent);
+ spyOn(displayContent.mAppCompatCameraPolicy);
+ }
+
void checkTopActivityHasDisplayRotationCompatPolicy(boolean exists) {
Assert.assertEquals(exists, activity().top().mDisplayContent
.mAppCompatCameraPolicy.hasDisplayRotationCompatPolicy());
diff --git a/services/tests/wmtests/src/com/android/server/wm/AppCompatOrientationOverridesTest.java b/services/tests/wmtests/src/com/android/server/wm/AppCompatOrientationOverridesTest.java
index 6c0d8c4..d9b5f37 100644
--- a/services/tests/wmtests/src/com/android/server/wm/AppCompatOrientationOverridesTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/AppCompatOrientationOverridesTest.java
@@ -250,6 +250,12 @@
mTestCurrentTimeMillisSupplier = new CurrentTimeMillisSupplierFake();
}
+ @Override
+ void onPostActivityCreation(@NonNull ActivityRecord activity) {
+ super.onPostActivityCreation(activity);
+ spyOn(activity.mAppCompatController.getAppCompatAspectRatioPolicy());
+ }
+
// Useful to reduce timeout during tests
void prepareMockedTime() {
getTopOrientationOverrides().mOrientationOverridesState.mCurrentTimeMillisSupplier =
diff --git a/services/tests/wmtests/src/com/android/server/wm/AppCompatOrientationPolicyTest.java b/services/tests/wmtests/src/com/android/server/wm/AppCompatOrientationPolicyTest.java
index ad34a6b..f6d0744 100644
--- a/services/tests/wmtests/src/com/android/server/wm/AppCompatOrientationPolicyTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/AppCompatOrientationPolicyTest.java
@@ -536,6 +536,25 @@
}
}
+ @Override
+ void onPostActivityCreation(@NonNull ActivityRecord activity) {
+ super.onPostActivityCreation(activity);
+ spyOn(activity.mAppCompatController.getAppCompatAspectRatioOverrides());
+ spyOn(activity.mAppCompatController.getAppCompatAspectRatioPolicy());
+ }
+
+ @Override
+ void onPostDisplayContentCreation(@NonNull DisplayContent displayContent) {
+ super.onPostDisplayContentCreation(displayContent);
+ spyOn(displayContent.mAppCompatCameraPolicy);
+ if (displayContent.mAppCompatCameraPolicy.hasDisplayRotationCompatPolicy()) {
+ spyOn(displayContent.mAppCompatCameraPolicy.mDisplayRotationCompatPolicy);
+ }
+ if (displayContent.mAppCompatCameraPolicy.hasCameraCompatFreeformPolicy()) {
+ spyOn(displayContent.mAppCompatCameraPolicy.mCameraCompatFreeformPolicy);
+ }
+ }
+
void prepareRelaunchingAfterRequestedOrientationChanged(boolean enabled) {
getTopOrientationOverrides().setRelaunchingAfterRequestedOrientationChanged(enabled);
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/AppCompatReachabilityOverridesTest.java b/services/tests/wmtests/src/com/android/server/wm/AppCompatReachabilityOverridesTest.java
index 47f584a..5ff8f02 100644
--- a/services/tests/wmtests/src/com/android/server/wm/AppCompatReachabilityOverridesTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/AppCompatReachabilityOverridesTest.java
@@ -183,6 +183,7 @@
@Override
void onPostActivityCreation(@NonNull ActivityRecord activity) {
super.onPostActivityCreation(activity);
+ spyOn(activity.mAppCompatController.getAppCompatReachabilityOverrides());
activity.mAppCompatController.getAppCompatReachabilityPolicy()
.setLetterboxInnerBoundsSupplier(mLetterboxInnerBoundsSupplier);
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/AppCompatReachabilityPolicyTest.java b/services/tests/wmtests/src/com/android/server/wm/AppCompatReachabilityPolicyTest.java
index 84f89b5..96734b3 100644
--- a/services/tests/wmtests/src/com/android/server/wm/AppCompatReachabilityPolicyTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/AppCompatReachabilityPolicyTest.java
@@ -247,6 +247,7 @@
@Override
void onPostActivityCreation(@NonNull ActivityRecord activity) {
super.onPostActivityCreation(activity);
+ spyOn(activity.mAppCompatController.getAppCompatReachabilityOverrides());
activity.mAppCompatController.getAppCompatReachabilityPolicy()
.setLetterboxInnerBoundsSupplier(mLetterboxInnerBoundsSupplier);
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/AppCompatRobotBase.java b/services/tests/wmtests/src/com/android/server/wm/AppCompatRobotBase.java
index 57ff4f6..4e58e1d 100644
--- a/services/tests/wmtests/src/com/android/server/wm/AppCompatRobotBase.java
+++ b/services/tests/wmtests/src/com/android/server/wm/AppCompatRobotBase.java
@@ -43,8 +43,8 @@
@NonNull ActivityTaskSupervisor supervisor,
int displayWidth, int displayHeight) {
mActivityRobot = new AppCompatActivityRobot(wm, atm, supervisor,
- displayWidth, displayHeight);
- mActivityRobot.setOnPostActivityCreation(this::onPostActivityCreation);
+ displayWidth, displayHeight, this::onPostActivityCreation,
+ this::onPostDisplayContentCreation);
mConfigurationRobot =
new AppCompatConfigurationRobot(wm.mAppCompatConfiguration);
mOptPropRobot = new AppCompatComponentPropRobot(wm);
@@ -66,6 +66,16 @@
void onPostActivityCreation(@NonNull ActivityRecord activity) {
}
+ /**
+ * Specific Robots can override this method to add operation to run on a newly created
+ * {@link DisplayContent}. Common case is to invoke spyOn().
+ *
+ * @param displayContent THe newly created {@link DisplayContent}.
+ */
+ @CallSuper
+ void onPostDisplayContentCreation(@NonNull DisplayContent displayContent) {
+ }
+
@NonNull
AppCompatConfigurationRobot conf() {
return mConfigurationRobot;
diff --git a/services/tests/wmtests/src/com/android/server/wm/AppCompatUtilsTest.java b/services/tests/wmtests/src/com/android/server/wm/AppCompatUtilsTest.java
index 9e242ee..21fac9b 100644
--- a/services/tests/wmtests/src/com/android/server/wm/AppCompatUtilsTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/AppCompatUtilsTest.java
@@ -16,6 +16,8 @@
package com.android.server.wm;
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
+
import static org.mockito.Mockito.when;
import android.platform.test.annotations.Presubmit;
@@ -42,7 +44,10 @@
@Test
public void getLetterboxReasonString_inSizeCompatMode() {
runTestScenario((robot) -> {
- robot.activity().setTopActivityInSizeCompatMode(/* inScm */ true);
+ robot.applyOnActivity((a) -> {
+ a.createActivityWithComponent();
+ a.setTopActivityInSizeCompatMode(/* inScm */ true);
+ });
robot.checkTopActivityLetterboxReason(/* expected */ "SIZE_COMPAT_MODE");
});
@@ -51,7 +56,10 @@
@Test
public void getLetterboxReasonString_fixedOrientation() {
runTestScenario((robot) -> {
- robot.activity().checkTopActivityInSizeCompatMode(/* inScm */ false);
+ robot.applyOnActivity((a) -> {
+ a.createActivityWithComponent();
+ a.checkTopActivityInSizeCompatMode(/* inScm */ false);
+ });
robot.setIsLetterboxedForFixedOrientationAndAspectRatio(
/* forFixedOrientationAndAspectRatio */ true);
@@ -62,7 +70,10 @@
@Test
public void getLetterboxReasonString_isLetterboxedForDisplayCutout() {
runTestScenario((robot) -> {
- robot.activity().checkTopActivityInSizeCompatMode(/* inScm */ false);
+ robot.applyOnActivity((a) -> {
+ a.createActivityWithComponent();
+ a.checkTopActivityInSizeCompatMode(/* inScm */ false);
+ });
robot.setIsLetterboxedForFixedOrientationAndAspectRatio(
/* forFixedOrientationAndAspectRatio */ false);
robot.setIsLetterboxedForDisplayCutout(/* displayCutout */ true);
@@ -74,7 +85,10 @@
@Test
public void getLetterboxReasonString_aspectRatio() {
runTestScenario((robot) -> {
- robot.activity().checkTopActivityInSizeCompatMode(/* inScm */ false);
+ robot.applyOnActivity((a) -> {
+ a.createActivityWithComponent();
+ a.checkTopActivityInSizeCompatMode(/* inScm */ false);
+ });
robot.setIsLetterboxedForFixedOrientationAndAspectRatio(
/* forFixedOrientationAndAspectRatio */ false);
robot.setIsLetterboxedForDisplayCutout(/* displayCutout */ false);
@@ -87,7 +101,10 @@
@Test
public void getLetterboxReasonString_unknownReason() {
runTestScenario((robot) -> {
- robot.activity().checkTopActivityInSizeCompatMode(/* inScm */ false);
+ robot.applyOnActivity((a) -> {
+ a.createActivityWithComponent();
+ a.checkTopActivityInSizeCompatMode(/* inScm */ false);
+ });
robot.setIsLetterboxedForFixedOrientationAndAspectRatio(
/* forFixedOrientationAndAspectRatio */ false);
robot.setIsLetterboxedForDisplayCutout(/* displayCutout */ false);
@@ -97,7 +114,6 @@
});
}
-
/**
* Runs a test scenario providing a Robot.
*/
@@ -114,10 +130,15 @@
@NonNull ActivityTaskManagerService atm,
@NonNull ActivityTaskSupervisor supervisor) {
super(wm, atm, supervisor);
- activity().createActivityWithComponent();
mWindowState = Mockito.mock(WindowState.class);
}
+ @Override
+ void onPostActivityCreation(@NonNull ActivityRecord activity) {
+ super.onPostActivityCreation(activity);
+ spyOn(activity.mAppCompatController.getAppCompatAspectRatioPolicy());
+ }
+
void setIsLetterboxedForFixedOrientationAndAspectRatio(
boolean forFixedOrientationAndAspectRatio) {
when(activity().top().mAppCompatController.getAppCompatAspectRatioPolicy()
diff --git a/services/tests/wmtests/src/com/android/server/wm/TransparentPolicyTest.java b/services/tests/wmtests/src/com/android/server/wm/TransparentPolicyTest.java
index cbf17c4..97d2131 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TransparentPolicyTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TransparentPolicyTest.java
@@ -22,6 +22,8 @@
import static android.view.Surface.ROTATION_0;
import static android.view.Surface.ROTATION_90;
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
+
import static org.mockito.Mockito.clearInvocations;
import android.platform.test.annotations.Presubmit;
@@ -343,6 +345,12 @@
activity().createNewTaskWithBaseActivity();
}
+ @Override
+ void onPostActivityCreation(@NonNull ActivityRecord activity) {
+ super.onPostActivityCreation(activity);
+ spyOn(activity.mAppCompatController.getTransparentPolicy());
+ }
+
void transparentActivity(@NonNull Consumer<AppCompatTransparentActivityRobot> consumer) {
consumer.accept(mTransparentActivityRobot);
}