Fail tests which leave unfinished transitions behind

If a test starts a transition without finishing it, it will
cause subsequent tests to fail (sometimes passing itself still).

To help identify which tests cause this, add a check to teardown.

Bug: 183993924
Test: any subclass
Change-Id: Ib240a0c073c2e4eee4241735f0d91331702a6594
diff --git a/tests/framework/base/windowmanager/util/src/android/server/wm/ActivityManagerTestBase.java b/tests/framework/base/windowmanager/util/src/android/server/wm/ActivityManagerTestBase.java
index c2ac37c..e5b46b8 100644
--- a/tests/framework/base/windowmanager/util/src/android/server/wm/ActivityManagerTestBase.java
+++ b/tests/framework/base/windowmanager/util/src/android/server/wm/ActivityManagerTestBase.java
@@ -104,6 +104,7 @@
 import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
@@ -229,6 +230,9 @@
     private static final int UI_MODE_TYPE_MASK = 0x0f;
     private static final int UI_MODE_TYPE_VR_HEADSET = 0x07;
 
+    private static final boolean ENABLE_SHELL_TRANSITIONS =
+            SystemProperties.getBoolean("persist.debug.shell_transit", false);
+
     private static Boolean sHasHomeScreen = null;
     private static Boolean sSupportsSystemDecorsOnSecondaryDisplays = null;
     private static Boolean sSupportsInsecureLockScreen = null;
@@ -615,6 +619,12 @@
         if (mWaitForRotationOnTearDown) {
             mWmState.waitForDisplayUnfrozen();
         }
+
+        if (ENABLE_SHELL_TRANSITIONS) {
+            if (!mWmState.waitForAppTransitionIdleOnDisplay(DEFAULT_DISPLAY)) {
+                fail("Shell Transition left unfinished!");
+            }
+        }
     }
 
     /**