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(() -> {