WindowInsetsController: Verify controller is available after addView
Test: atest WindowInsetsControllerTests
Bug: 155280356
Change-Id: I7022470757c1ca6aaf328fb755d1ea71b688ff78
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/WindowInsetsControllerTests.java b/tests/framework/base/windowmanager/src/android/server/wm/WindowInsetsControllerTests.java
index c960532..b307ae7 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/WindowInsetsControllerTests.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/WindowInsetsControllerTests.java
@@ -16,6 +16,7 @@
package android.server.wm;
+import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
import static android.view.WindowInsets.Type.ime;
import static android.view.WindowInsets.Type.navigationBars;
import static android.view.WindowInsets.Type.statusBars;
@@ -25,6 +26,8 @@
import static androidx.test.InstrumentationRegistry.getInstrumentation;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.notNullValue;
import static org.junit.Assert.assertFalse;
import static org.junit.Assume.assumeTrue;
@@ -35,6 +38,7 @@
import android.platform.test.annotations.Presubmit;
import android.view.MotionEvent;
import android.view.View;
+import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowInsets;
import android.view.WindowInsets.Type;
@@ -48,7 +52,9 @@
import com.android.compatibility.common.util.PollingCheck;
import com.android.compatibility.common.util.SystemUtil;
+import org.junit.Rule;
import org.junit.Test;
+import org.junit.rules.ErrorCollector;
import java.util.ArrayList;
import java.util.List;
@@ -66,6 +72,9 @@
private final static long TIMEOUT = 1000; // milliseconds
private final static AnimationCallback ANIMATION_CALLBACK = new AnimationCallback();
+ @Rule
+ public final ErrorCollector mErrorCollector = new ErrorCollector();
+
@Test
public void testHide() {
final TestActivity activity = startActivity(TestActivity.class);
@@ -236,6 +245,28 @@
}
}
+ @Test
+ public void testWindowInsetsController_availableAfterAddView() throws Exception {
+ final TestHideOnCreateActivity activity = startActivity(TestHideOnCreateActivity.class);
+ final View rootView = activity.getWindow().getDecorView();
+ ANIMATION_CALLBACK.waitForFinishing(TIMEOUT);
+ PollingCheck.waitFor(TIMEOUT,
+ () -> !rootView.getRootWindowInsets().isVisible(statusBars())
+ && !rootView.getRootWindowInsets().isVisible(navigationBars()));
+
+ final View childWindow = new View(activity);
+ getInstrumentation().runOnMainSync(() -> {
+ activity.getWindowManager().addView(childWindow,
+ new ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT));
+ mErrorCollector.checkThat(childWindow.getWindowInsetsController(), is(notNullValue()));
+ });
+ getInstrumentation().waitForIdleSync();
+ getInstrumentation().runOnMainSync(() -> {
+ activity.getWindowManager().removeView(childWindow);
+ });
+
+ }
+
private static void hideInsets(View view, int types) throws InterruptedException {
ANIMATION_CALLBACK.reset();
getInstrumentation().runOnMainSync(() -> {