Verify WindowContext#registerComponentCallbacks
Bug: 181134729
Test: atest WindowContextTests
Change-Id: I4ed49cd7e08c9ec58682834b760b10f3ffa5292d
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/WindowContextTests.java b/tests/framework/base/windowmanager/src/android/server/wm/WindowContextTests.java
index cd66878..36f9890 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/WindowContextTests.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/WindowContextTests.java
@@ -22,10 +22,12 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+import android.content.ComponentCallbacks;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
+import android.content.res.Configuration;
import android.graphics.Rect;
import android.os.IBinder;
import android.platform.test.annotations.AppModeFull;
@@ -33,8 +35,13 @@
import android.view.View;
import android.view.WindowManager;
+import androidx.annotation.NonNull;
+
import org.junit.Test;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
/**
* Tests that verify the behavior of window context
*
@@ -99,4 +106,45 @@
windowContext.unbindService(serviceConnection);
}
}
+
+ /**
+ * Verify if the {@link ComponentCallbacks#onConfigurationChanged(Configuration)} callback
+ * is received when the window context configuration changes.
+ */
+ @Test
+ public void testWindowContextRegisterComponentCallbacks() throws Exception {
+ final TestComponentCallbacks callbacks = new TestComponentCallbacks();
+ final WindowManagerState.DisplayContent display = createManagedVirtualDisplaySession()
+ .setSimulateDisplay(true).createDisplay();
+ final Context windowContext = createWindowContext(display.mId);
+ final DisplayMetricsSession displayMetricsSession =
+ createManagedDisplayMetricsSession(display.mId);
+
+ windowContext.registerComponentCallbacks(callbacks);
+
+ callbacks.mLatch = new CountDownLatch(1);
+
+ displayMetricsSession.changeDisplayMetrics(1.2 /* sizeRatio */, 1.1 /* densityRatio */);
+
+ // verify if there is a gicallback from the window context configuration change.
+ assertTrue(callbacks.mLatch.await(4, TimeUnit.SECONDS));
+ Rect bounds = callbacks.mConfiguration.windowConfiguration.getBounds();
+ assertBoundsEquals(displayMetricsSession.getDisplayMetrics(), bounds);
+
+ windowContext.unregisterComponentCallbacks(callbacks);
+ }
+
+ private static class TestComponentCallbacks implements ComponentCallbacks {
+ private Configuration mConfiguration;
+ private CountDownLatch mLatch = new CountDownLatch(1);
+
+ @Override
+ public void onConfigurationChanged(@NonNull Configuration newConfig) {
+ mConfiguration = newConfig;
+ mLatch.countDown();
+ }
+
+ @Override
+ public void onLowMemory() {}
+ }
}