summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/framework/base/windowmanager/jetpack/src/android/server/wm/jetpack/extensions/util/TestValueCountConsumer.java20
-rw-r--r--tests/framework/base/windowmanager/jetpack/src/android/server/wm/jetpack/layout/ExtensionWindowLayoutComponentTest.java16
-rw-r--r--tests/framework/base/windowmanager/jetpack/src/android/server/wm/jetpack/utils/TestActivity.java30
-rw-r--r--tests/framework/base/windowmanager/jetpack/src/android/server/wm/jetpack/utils/WindowManagerJetpackTestBase.java14
4 files changed, 65 insertions, 15 deletions
diff --git a/tests/framework/base/windowmanager/jetpack/src/android/server/wm/jetpack/extensions/util/TestValueCountConsumer.java b/tests/framework/base/windowmanager/jetpack/src/android/server/wm/jetpack/extensions/util/TestValueCountConsumer.java
index 34276f0298b..cb3159202df 100644
--- a/tests/framework/base/windowmanager/jetpack/src/android/server/wm/jetpack/extensions/util/TestValueCountConsumer.java
+++ b/tests/framework/base/windowmanager/jetpack/src/android/server/wm/jetpack/extensions/util/TestValueCountConsumer.java
@@ -16,9 +16,13 @@
package android.server.wm.jetpack.extensions.util;
+import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.window.extensions.core.util.function.Consumer;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
@@ -67,6 +71,22 @@ public class TestValueCountConsumer<T> implements Consumer<T> {
}
/**
+ * Returns a list that contains the number of values set in
+ * {@link TestValueCountConsumer#setCount(int)}.
+ */
+ @NonNull
+ public List<T> waitAndGetAllValues() throws InterruptedException {
+ List<T> values = new ArrayList<>();
+ for (int i = 0; i < mCount; i++) {
+ T value = mLinkedBlockingQueue.poll(TIMEOUT_MS, TimeUnit.MILLISECONDS);
+ if (value != null) {
+ values.add(value);
+ }
+ }
+ return Collections.unmodifiableList(values);
+ }
+
+ /**
* Clears the queue of currently recorded values.
*/
public void clearQueue() {
diff --git a/tests/framework/base/windowmanager/jetpack/src/android/server/wm/jetpack/layout/ExtensionWindowLayoutComponentTest.java b/tests/framework/base/windowmanager/jetpack/src/android/server/wm/jetpack/layout/ExtensionWindowLayoutComponentTest.java
index 71a93d4c094..2d943da5795 100644
--- a/tests/framework/base/windowmanager/jetpack/src/android/server/wm/jetpack/layout/ExtensionWindowLayoutComponentTest.java
+++ b/tests/framework/base/windowmanager/jetpack/src/android/server/wm/jetpack/layout/ExtensionWindowLayoutComponentTest.java
@@ -22,6 +22,7 @@ import static android.server.wm.jetpack.extensions.util.ExtensionsUtil.EXTENSION
import static android.server.wm.jetpack.extensions.util.ExtensionsUtil.assertEqualWindowLayoutInfo;
import static android.server.wm.jetpack.extensions.util.ExtensionsUtil.assumeHasDisplayFeatures;
import static android.server.wm.jetpack.extensions.util.ExtensionsUtil.getExtensionWindowLayoutInfo;
+import static android.server.wm.jetpack.extensions.util.ExtensionsUtil.getWindowExtensions;
import static android.server.wm.jetpack.extensions.util.ExtensionsUtil.isExtensionVersionAtLeast;
import static android.server.wm.jetpack.extensions.util.SidecarUtil.assumeSidecarSupportedDevice;
import static android.server.wm.jetpack.extensions.util.SidecarUtil.getSidecarInterface;
@@ -437,16 +438,21 @@ public class ExtensionWindowLayoutComponentTest extends WindowManagerJetpackTest
mWindowLayoutInfo = getExtensionWindowLayoutInfo(configHandlingActivity);
assumeHasDisplayFeatures(mWindowLayoutInfo);
- final WindowLayoutInfo initialInfo = getExtensionWindowLayoutInfo(
- configHandlingActivity);
+ TestValueCountConsumer<WindowLayoutInfo> consumer = new TestValueCountConsumer<>();
+ // We expect 3 values, 1 before entering PiP, one while in PiP, one after exiting PiP.
+ consumer.setCount(3);
+ getWindowExtensions().getWindowLayoutComponent().addWindowLayoutInfoListener(
+ configHandlingActivity, consumer);
enterPipActivityHandlesConfigChanges(configHandlingActivity);
exitPipActivityHandlesConfigChanges(configHandlingActivity);
- final WindowLayoutInfo updatedInfo = getExtensionWindowLayoutInfo(
- configHandlingActivity);
+ List<WindowLayoutInfo> values = consumer.waitAndGetAllValues();
- assertEquals(initialInfo, updatedInfo);
+ assertEquals(3, values.size());
+ assertEquals(mWindowLayoutInfo, values.get(0));
+ assertTrue(values.get(1).getDisplayFeatures().isEmpty());
+ assertEquals(mWindowLayoutInfo, values.get(2));
}
/**
diff --git a/tests/framework/base/windowmanager/jetpack/src/android/server/wm/jetpack/utils/TestActivity.java b/tests/framework/base/windowmanager/jetpack/src/android/server/wm/jetpack/utils/TestActivity.java
index e515baed57c..9161b6d1d1b 100644
--- a/tests/framework/base/windowmanager/jetpack/src/android/server/wm/jetpack/utils/TestActivity.java
+++ b/tests/framework/base/windowmanager/jetpack/src/android/server/wm/jetpack/utils/TestActivity.java
@@ -17,9 +17,11 @@
package android.server.wm.jetpack.utils;
import android.app.Activity;
+import android.content.res.Configuration;
import android.os.Bundle;
import android.view.View;
+import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import java.util.concurrent.CountDownLatch;
@@ -31,6 +33,7 @@ import java.util.concurrent.TimeUnit;
*/
public class TestActivity extends Activity implements View.OnLayoutChangeListener {
private CountDownLatch mLayoutLatch;
+ private CountDownLatch mOnConfigurationChangeLatch = new CountDownLatch(1);
private static CountDownLatch sResumeLatch = new CountDownLatch(1);
@Override
@@ -48,6 +51,12 @@ public class TestActivity extends Activity implements View.OnLayoutChangeListene
}
@Override
+ public void onConfigurationChanged(@NonNull Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+ mOnConfigurationChangeLatch.countDown();
+ }
+
+ @Override
protected void onResume() {
super.onResume();
sResumeLatch.countDown();
@@ -76,6 +85,27 @@ public class TestActivity extends Activity implements View.OnLayoutChangeListene
}
/**
+ * Resets the configuration change counter.
+ */
+ public void resetOnConfigurationChangeCounter() {
+ mOnConfigurationChangeLatch = new CountDownLatch(1);
+ }
+
+ /**
+ * Waits for a configuration change callback.
+ *
+ * @return {@code true} if the configuration change callback is triggered, {@code false}
+ * otherwise.
+ */
+ public boolean waitForConfigurationChange() {
+ try {
+ return mOnConfigurationChangeLatch.await(3, TimeUnit.SECONDS);
+ } catch (InterruptedException e) {
+ return false;
+ }
+ }
+
+ /**
* Resets layout counter when waiting for a layout to happen before calling
* {@link #waitForOnResume()}.
*/
diff --git a/tests/framework/base/windowmanager/jetpack/src/android/server/wm/jetpack/utils/WindowManagerJetpackTestBase.java b/tests/framework/base/windowmanager/jetpack/src/android/server/wm/jetpack/utils/WindowManagerJetpackTestBase.java
index db0edf4dcb6..adfa8042ae7 100644
--- a/tests/framework/base/windowmanager/jetpack/src/android/server/wm/jetpack/utils/WindowManagerJetpackTestBase.java
+++ b/tests/framework/base/windowmanager/jetpack/src/android/server/wm/jetpack/utils/WindowManagerJetpackTestBase.java
@@ -281,28 +281,22 @@ public class WindowManagerJetpackTestBase extends ActivityManagerTestBase {
if (activity.isInPictureInPictureMode()) {
throw new IllegalStateException("Activity must not be in PiP");
}
- activity.resetLayoutCounter();
+ activity.resetOnConfigurationChangeCounter();
// Change the orientation
PictureInPictureParams params = (new PictureInPictureParams.Builder()).build();
activity.enterPictureInPictureMode(params);
- // Wait for the activity to layout, which will happen after the orientation change
- assertTrue(activity.waitForLayout());
- // Check that orientation matches
- assertTrue(activity.isInPictureInPictureMode());
+ activity.waitForConfigurationChange();
}
public static void exitPipActivityHandlesConfigChanges(TestActivity activity) {
if (!activity.isInPictureInPictureMode()) {
throw new IllegalStateException("Activity must be in PiP");
}
- activity.resetLayoutCounter();
+ activity.resetOnConfigurationChangeCounter();
Intent intent = new Intent(activity, activity.getClass());
intent.addFlags(FLAG_ACTIVITY_SINGLE_TOP);
activity.startActivity(intent);
- // Wait for the activity to layout, which will happen after the orientation change
- assertTrue(activity.waitForLayout());
- // Check that orientation matches
- assertFalse(activity.isInPictureInPictureMode());
+ activity.waitForConfigurationChange();
}
public static void setActivityOrientationActivityDoesNotHandleOrientationChanges(