summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitPresenter.java12
-rw-r--r--libs/WindowManager/Jetpack/tests/unittest/Android.bp1
-rw-r--r--libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/OverlayPresentationTest.java122
-rw-r--r--libs/WindowManager/Shell/tests/unittest/Android.bp1
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationRunnerTests.java134
5 files changed, 156 insertions, 114 deletions
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitPresenter.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitPresenter.java
index ea60b1531a3f..f1e7ef5ce123 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitPresenter.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitPresenter.java
@@ -1359,4 +1359,16 @@ class SplitPresenter extends JetpackTaskFragmentOrganizer {
return new ParentContainerInfo(taskProperties.getTaskMetrics(), configuration,
windowLayoutInfo);
}
+
+ @VisibleForTesting
+ @NonNull
+ static String positionToString(@ContainerPosition int position) {
+ return switch (position) {
+ case CONTAINER_POSITION_LEFT -> "left";
+ case CONTAINER_POSITION_TOP -> "top";
+ case CONTAINER_POSITION_RIGHT -> "right";
+ case CONTAINER_POSITION_BOTTOM -> "bottom";
+ default -> "Unknown position:" + position;
+ };
+ }
}
diff --git a/libs/WindowManager/Jetpack/tests/unittest/Android.bp b/libs/WindowManager/Jetpack/tests/unittest/Android.bp
index 61ea51a35f58..139ddda5af3c 100644
--- a/libs/WindowManager/Jetpack/tests/unittest/Android.bp
+++ b/libs/WindowManager/Jetpack/tests/unittest/Android.bp
@@ -32,6 +32,7 @@ android_test {
],
static_libs: [
+ "TestParameterInjector",
"androidx.window.extensions",
"androidx.window.extensions.core_core",
"junit",
diff --git a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/OverlayPresentationTest.java b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/OverlayPresentationTest.java
index 325750243744..1c4c8870b26f 100644
--- a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/OverlayPresentationTest.java
+++ b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/OverlayPresentationTest.java
@@ -35,6 +35,7 @@ import static androidx.window.extensions.embedding.SplitPresenter.CONTAINER_POSI
import static androidx.window.extensions.embedding.SplitPresenter.CONTAINER_POSITION_RIGHT;
import static androidx.window.extensions.embedding.SplitPresenter.CONTAINER_POSITION_TOP;
import static androidx.window.extensions.embedding.SplitPresenter.getOverlayPosition;
+import static androidx.window.extensions.embedding.SplitPresenter.positionToString;
import static androidx.window.extensions.embedding.SplitPresenter.sanitizeBounds;
import static androidx.window.extensions.embedding.WindowAttributes.DIM_AREA_ON_TASK;
@@ -78,7 +79,6 @@ import android.window.WindowContainerTransaction;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.test.core.app.ApplicationProvider;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;
import androidx.window.common.DeviceStateManagerFoldingFeatureProducer;
import androidx.window.extensions.layout.WindowLayoutComponentImpl;
@@ -86,6 +86,9 @@ import androidx.window.extensions.layout.WindowLayoutInfo;
import com.android.window.flags.Flags;
+import com.google.testing.junit.testparameterinjector.TestParameter;
+import com.google.testing.junit.testparameterinjector.TestParameterInjector;
+
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -108,7 +111,7 @@ import java.util.List;
@SuppressWarnings("GuardedBy")
@Presubmit
@SmallTest
-@RunWith(AndroidJUnit4.class)
+@RunWith(TestParameterInjector.class)
public class OverlayPresentationTest {
@Rule
public MockitoRule rule = MockitoJUnit.rule();
@@ -875,57 +878,70 @@ public class OverlayPresentationTest {
eq(overlayContainer.getTaskFragmentToken()), eq(activityToken));
}
- // TODO(b/243518738): Rewrite with TestParameter.
- @Test
- public void testGetOverlayPosition() {
- assertWithMessage("It must be position left for left overlay.")
- .that(getOverlayPosition(new Rect(
- TASK_BOUNDS.left,
- TASK_BOUNDS.top,
- TASK_BOUNDS.right / 2,
- TASK_BOUNDS.bottom), TASK_BOUNDS)).isEqualTo(CONTAINER_POSITION_LEFT);
- assertWithMessage("It must be position left for shrunk left overlay.")
- .that(getOverlayPosition(new Rect(
- TASK_BOUNDS.left,
- TASK_BOUNDS.top + 20,
- TASK_BOUNDS.right / 2,
- TASK_BOUNDS.bottom - 20), TASK_BOUNDS)).isEqualTo(CONTAINER_POSITION_LEFT);
- assertWithMessage("It must be position left for top overlay.")
- .that(getOverlayPosition(new Rect(
- TASK_BOUNDS.left,
- TASK_BOUNDS.top,
- TASK_BOUNDS.right,
- TASK_BOUNDS.bottom / 2), TASK_BOUNDS)).isEqualTo(CONTAINER_POSITION_TOP);
- assertWithMessage("It must be position left for shrunk top overlay.")
- .that(getOverlayPosition(new Rect(
- TASK_BOUNDS.left + 20,
- TASK_BOUNDS.top,
- TASK_BOUNDS.right - 20,
- TASK_BOUNDS.bottom / 2), TASK_BOUNDS)).isEqualTo(CONTAINER_POSITION_TOP);
- assertWithMessage("It must be position left for right overlay.")
- .that(getOverlayPosition(new Rect(
- TASK_BOUNDS.right / 2,
- TASK_BOUNDS.top,
- TASK_BOUNDS.right,
- TASK_BOUNDS.bottom), TASK_BOUNDS)).isEqualTo(CONTAINER_POSITION_RIGHT);
- assertWithMessage("It must be position left for shrunk right overlay.")
- .that(getOverlayPosition(new Rect(
- TASK_BOUNDS.right / 2,
- TASK_BOUNDS.top + 20,
- TASK_BOUNDS.right,
- TASK_BOUNDS.bottom - 20), TASK_BOUNDS)).isEqualTo(CONTAINER_POSITION_RIGHT);
- assertWithMessage("It must be position left for bottom overlay.")
- .that(getOverlayPosition(new Rect(
- TASK_BOUNDS.left,
- TASK_BOUNDS.bottom / 2,
- TASK_BOUNDS.right,
- TASK_BOUNDS.bottom), TASK_BOUNDS)).isEqualTo(CONTAINER_POSITION_BOTTOM);
- assertWithMessage("It must be position left for shrunk bottom overlay.")
- .that(getOverlayPosition(new Rect(
- TASK_BOUNDS.left + 20,
- TASK_BOUNDS.bottom / 20,
- TASK_BOUNDS.right - 20,
- TASK_BOUNDS.bottom), TASK_BOUNDS)).isEqualTo(CONTAINER_POSITION_BOTTOM);
+ @Test
+ public void testGetOverlayPosition(@TestParameter OverlayPositionTestParams params) {
+ final Rect taskBounds = new Rect(TASK_BOUNDS);
+ final Rect overlayBounds = params.toOverlayBounds();
+ final int overlayPosition = getOverlayPosition(overlayBounds, taskBounds);
+
+ assertWithMessage("The overlay position must be "
+ + positionToString(params.mPosition) + ", but is "
+ + positionToString(overlayPosition)
+ + ", parent bounds=" + taskBounds + ", overlay bounds=" + overlayBounds)
+ .that(overlayPosition).isEqualTo(params.mPosition);
+ }
+
+ private enum OverlayPositionTestParams {
+ LEFT_OVERLAY(CONTAINER_POSITION_LEFT, false /* shouldBeShrunk */),
+ LEFT_SHRUNK_OVERLAY(CONTAINER_POSITION_LEFT, true /* shouldBeShrunk */),
+ TOP_OVERLAY(CONTAINER_POSITION_TOP, false /* shouldBeShrunk */),
+ TOP_SHRUNK_OVERLAY(CONTAINER_POSITION_TOP, true /* shouldBeShrunk */),
+ RIGHT_OVERLAY(CONTAINER_POSITION_RIGHT, false /* shouldBeShrunk */),
+ RIGHT_SHRUNK_OVERLAY(CONTAINER_POSITION_RIGHT, true /* shouldBeShrunk */),
+ BOTTOM_OVERLAY(CONTAINER_POSITION_BOTTOM, false /* shouldBeShrunk */),
+ BOTTOM_SHRUNK_OVERLAY(CONTAINER_POSITION_BOTTOM, true /* shouldBeShrunk */);
+
+ @SplitPresenter.ContainerPosition
+ private final int mPosition;
+
+ private final boolean mShouldBeShrunk;
+
+ OverlayPositionTestParams(
+ @SplitPresenter.ContainerPosition int position, boolean shouldBeShrunk) {
+ mPosition = position;
+ mShouldBeShrunk = shouldBeShrunk;
+ }
+
+ @NonNull
+ private Rect toOverlayBounds() {
+ Rect r = new Rect(TASK_BOUNDS);
+ final int offset = mShouldBeShrunk ? 20 : 0;
+ switch (mPosition) {
+ case CONTAINER_POSITION_LEFT:
+ r.top += offset;
+ r.right /= 2;
+ r.bottom -= offset;
+ break;
+ case CONTAINER_POSITION_TOP:
+ r.left += offset;
+ r.right -= offset;
+ r.bottom /= 2;
+ break;
+ case CONTAINER_POSITION_RIGHT:
+ r.left = r.right / 2;
+ r.top += offset;
+ r.bottom -= offset;
+ break;
+ case CONTAINER_POSITION_BOTTOM:
+ r.left += offset;
+ r.right -= offset;
+ r.top = r.bottom / 2;
+ break;
+ default:
+ throw new IllegalArgumentException("Invalid position: " + mPosition);
+ }
+ return r;
+ }
}
/**
diff --git a/libs/WindowManager/Shell/tests/unittest/Android.bp b/libs/WindowManager/Shell/tests/unittest/Android.bp
index 6b6954289a34..a0408652a29b 100644
--- a/libs/WindowManager/Shell/tests/unittest/Android.bp
+++ b/libs/WindowManager/Shell/tests/unittest/Android.bp
@@ -37,6 +37,7 @@ android_test {
],
static_libs: [
+ "TestParameterInjector",
"WindowManager-Shell",
"junit",
"flag-junit",
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationRunnerTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationRunnerTests.java
index 55b6bd278f20..bba9418db66a 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationRunnerTests.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationRunnerTests.java
@@ -46,12 +46,14 @@ import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.window.TransitionInfo;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;
import com.android.window.flags.Flags;
import com.android.wm.shell.transition.TransitionInfoBuilder;
+import com.google.testing.junit.testparameterinjector.TestParameter;
+import com.google.testing.junit.testparameterinjector.TestParameterInjector;
+
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -59,6 +61,7 @@ import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import java.util.ArrayList;
+import java.util.Arrays;
/**
* Tests for {@link ActivityEmbeddingAnimationRunner}.
@@ -67,7 +70,7 @@ import java.util.ArrayList;
* atest WMShellUnitTests:ActivityEmbeddingAnimationRunnerTests
*/
@SmallTest
-@RunWith(AndroidJUnit4.class)
+@RunWith(TestParameterInjector.class)
public class ActivityEmbeddingAnimationRunnerTests extends ActivityEmbeddingAnimationTestBase {
@Rule
@@ -204,15 +207,13 @@ public class ActivityEmbeddingAnimationRunnerTests extends ActivityEmbeddingAnim
// TODO(b/243518738): Rewrite with TestParameter
@EnableFlags(Flags.FLAG_ACTIVITY_EMBEDDING_OVERLAY_PRESENTATION_FLAG)
@Test
- public void testCalculateParentBounds_flagEnabled() {
+ public void testCalculateParentBounds_flagEnabled_emptyParentSize() {
TransitionInfo.Change change;
final TransitionInfo.Change stubChange = createChange(0 /* flags */);
final Rect actualParentBounds = new Rect();
- Rect parentBounds = new Rect(0, 0, 2000, 2000);
- Rect endAbsBounds = new Rect(0, 0, 2000, 2000);
change = prepareChangeForParentBoundsCalculationTest(
new Point(0, 0) /* endRelOffset */,
- endAbsBounds,
+ new Rect(0, 0, 2000, 2000),
new Point() /* endParentSize */
);
@@ -220,69 +221,80 @@ public class ActivityEmbeddingAnimationRunnerTests extends ActivityEmbeddingAnim
assertTrue("Parent bounds must be empty because end parent size is not set.",
actualParentBounds.isEmpty());
+ }
- String testString = "Parent start with (0, 0)";
- change = prepareChangeForParentBoundsCalculationTest(
- new Point(endAbsBounds.left - parentBounds.left,
- endAbsBounds.top - parentBounds.top),
- endAbsBounds, new Point(parentBounds.width(), parentBounds.height()));
-
- calculateParentBounds(change, stubChange, actualParentBounds);
-
- assertEquals(testString + ": Parent bounds must be " + parentBounds, parentBounds,
- actualParentBounds);
-
- testString = "Container not start with (0, 0)";
- parentBounds = new Rect(0, 0, 2000, 2000);
- endAbsBounds = new Rect(1000, 500, 2000, 1500);
- change = prepareChangeForParentBoundsCalculationTest(
- new Point(endAbsBounds.left - parentBounds.left,
- endAbsBounds.top - parentBounds.top),
- endAbsBounds, new Point(parentBounds.width(), parentBounds.height()));
-
- calculateParentBounds(change, stubChange, actualParentBounds);
-
- assertEquals(testString + ": Parent bounds must be " + parentBounds, parentBounds,
- actualParentBounds);
-
- testString = "Parent container on the right";
- parentBounds = new Rect(1000, 0, 2000, 2000);
- endAbsBounds = new Rect(1000, 500, 1500, 1500);
- change = prepareChangeForParentBoundsCalculationTest(
- new Point(endAbsBounds.left - parentBounds.left,
- endAbsBounds.top - parentBounds.top),
- endAbsBounds, new Point(parentBounds.width(), parentBounds.height()));
-
- calculateParentBounds(change, stubChange, actualParentBounds);
-
- assertEquals(testString + ": Parent bounds must be " + parentBounds, parentBounds,
- actualParentBounds);
-
- testString = "Parent container on the bottom";
- parentBounds = new Rect(0, 1000, 2000, 2000);
- endAbsBounds = new Rect(500, 1500, 1500, 2000);
- change = prepareChangeForParentBoundsCalculationTest(
+ @EnableFlags(Flags.FLAG_ACTIVITY_EMBEDDING_OVERLAY_PRESENTATION_FLAG)
+ @Test
+ public void testCalculateParentBounds_flagEnabled(
+ @TestParameter ParentBoundsTestParameters params) {
+ final TransitionInfo.Change stubChange = createChange(0 /*flags*/);
+ final Rect parentBounds = params.getParentBounds();
+ final Rect endAbsBounds = params.getEndAbsBounds();
+ final TransitionInfo.Change change = prepareChangeForParentBoundsCalculationTest(
new Point(endAbsBounds.left - parentBounds.left,
endAbsBounds.top - parentBounds.top),
endAbsBounds, new Point(parentBounds.width(), parentBounds.height()));
+ final Rect actualParentBounds = new Rect();
calculateParentBounds(change, stubChange, actualParentBounds);
- assertEquals(testString + ": Parent bounds must be " + parentBounds, parentBounds,
- actualParentBounds);
-
- testString = "Parent container in the middle";
- parentBounds = new Rect(500, 500, 1500, 1500);
- endAbsBounds = new Rect(1000, 500, 1500, 1000);
- change = prepareChangeForParentBoundsCalculationTest(
- new Point(endAbsBounds.left - parentBounds.left,
- endAbsBounds.top - parentBounds.top),
- endAbsBounds, new Point(parentBounds.width(), parentBounds.height()));
-
- calculateParentBounds(change, stubChange, actualParentBounds);
+ assertEquals(parentBounds, actualParentBounds);
+ }
- assertEquals(testString + ": Parent bounds must be " + parentBounds, parentBounds,
- actualParentBounds);
+ private enum ParentBoundsTestParameters {
+ PARENT_START_WITH_0_0(
+ new int[]{0, 0, 2000, 2000},
+ new int[]{0, 0, 2000, 2000}),
+ CONTAINER_NOT_START_WITH_0_0(
+ new int[] {0, 0, 2000, 2000},
+ new int[] {1000, 500, 1500, 1500}),
+ PARENT_ON_THE_RIGHT(
+ new int[] {1000, 0, 2000, 2000},
+ new int[] {1000, 500, 1500, 1500}),
+ PARENT_ON_THE_BOTTOM(
+ new int[] {0, 1000, 2000, 2000},
+ new int[] {500, 1500, 1500, 2000}),
+ PARENT_IN_THE_MIDDLE(
+ new int[] {500, 500, 1500, 1500},
+ new int[] {1000, 500, 1500, 1000});
+
+ /**
+ * An int array to present {left, top, right, bottom} of the parent {@link Rect bounds}.
+ */
+ @NonNull
+ private final int[] mParentBounds;
+
+ /**
+ * An int array to present {left, top, right, bottom} of the absolute container
+ * {@link Rect bounds} after the transition finishes.
+ */
+ @NonNull
+ private final int[] mEndAbsBounds;
+
+ ParentBoundsTestParameters(
+ @NonNull int[] parentBounds, @NonNull int[] endAbsBounds) {
+ mParentBounds = parentBounds;
+ mEndAbsBounds = endAbsBounds;
+ }
+
+ @NonNull
+ private Rect getParentBounds() {
+ return asRect(mParentBounds);
+ }
+
+ @NonNull
+ private Rect getEndAbsBounds() {
+ return asRect(mEndAbsBounds);
+ }
+
+ @NonNull
+ private static Rect asRect(@NonNull int[] bounds) {
+ if (bounds.length != 4) {
+ throw new IllegalArgumentException("There must be exactly 4 elements in bounds, "
+ + "but found " + bounds.length + ": " + Arrays.toString(bounds));
+ }
+ return new Rect(bounds[0], bounds[1], bounds[2], bounds[3]);
+ }
}
@Test