1/ Unify wait for home and recents

Previously there were multiple ways of checking is the home activity was visible.

Now we use a single logic to simplify all tests

Bug: 236131465
Test: atest FlickerLibTest
Change-Id: I9e121449304cb7abfd209f6a57011ae178f24737
diff --git a/libraries/flicker/src/com/android/server/wm/traces/common/WindowManagerConditionsFactory.kt b/libraries/flicker/src/com/android/server/wm/traces/common/WindowManagerConditionsFactory.kt
index 03a7e27..c1b867d 100644
--- a/libraries/flicker/src/com/android/server/wm/traces/common/WindowManagerConditionsFactory.kt
+++ b/libraries/flicker/src/com/android/server/wm/traces/common/WindowManagerConditionsFactory.kt
@@ -16,8 +16,8 @@
 
 package com.android.server.wm.traces.common
 
-import com.android.server.wm.traces.common.layers.Layer
 import com.android.server.wm.traces.common.layers.BaseLayerTraceEntry
+import com.android.server.wm.traces.common.layers.Layer
 import com.android.server.wm.traces.common.layers.Transform
 import com.android.server.wm.traces.common.layers.Transform.Companion.isFlagSet
 import com.android.server.wm.traces.common.service.PlatformConsts
@@ -94,8 +94,11 @@
         }
 
     fun isHomeActivityVisible(): Condition<DUMP> =
-        Condition("isHomeActivityVisible") {
-            it.wmState.homeActivity?.isVisible == true
+        Condition("isHomeActivityVisible") { it.wmState.isHomeActivityVisible }
+
+    fun isRecentsActivityVisible(): Condition<DUMP> =
+        Condition("isRecentsActivityVisible") {
+            it.wmState.isHomeActivityVisible || it.wmState.isRecentsActivityVisible
         }
 
     fun isAppTransitionIdle(
@@ -304,4 +307,4 @@
                     window.isVisible
             }
         }
-}
\ No newline at end of file
+}
diff --git a/libraries/flicker/src/com/android/server/wm/traces/common/windowmanager/WindowManagerState.kt b/libraries/flicker/src/com/android/server/wm/traces/common/windowmanager/WindowManagerState.kt
index 4842d73..375ed11 100644
--- a/libraries/flicker/src/com/android/server/wm/traces/common/windowmanager/WindowManagerState.kt
+++ b/libraries/flicker/src/com/android/server/wm/traces/common/windowmanager/WindowManagerState.kt
@@ -134,8 +134,15 @@
     val homeTask: Task? get() = getStackByActivityType(ACTIVITY_TYPE_HOME)?.topTask
     val recentsTask: Task? get() = getStackByActivityType(ACTIVITY_TYPE_RECENTS)?.topTask
     val homeActivity: Activity? get() = homeTask?.activities?.lastOrNull()
+    val isHomeActivityVisible: Boolean get() {
+        val activity = homeActivity
+        return activity != null && isActivityVisible(activity.name)
+    }
     val recentsActivity: Activity? get() = recentsTask?.activities?.lastOrNull()
-    val isRecentsActivityVisible: Boolean get() = recentsActivity?.isVisible ?: false
+    val isRecentsActivityVisible: Boolean get() {
+        val activity = recentsActivity
+        return activity != null && isActivityVisible(activity.name)
+    }
     val frontWindow: String? get() = windowStates.map { it.title }.firstOrNull()
     val inputMethodWindowState: WindowState?
         get() = getWindowStateForAppToken(inputMethodWindowAppToken)
diff --git a/libraries/flicker/src/com/android/server/wm/traces/parser/windowmanager/WindowManagerStateHelper.kt b/libraries/flicker/src/com/android/server/wm/traces/parser/windowmanager/WindowManagerStateHelper.kt
index bb08c64..e162d5c 100644
--- a/libraries/flicker/src/com/android/server/wm/traces/parser/windowmanager/WindowManagerStateHelper.kt
+++ b/libraries/flicker/src/com/android/server/wm/traces/parser/windowmanager/WindowManagerStateHelper.kt
@@ -24,21 +24,21 @@
 import android.util.Log
 import android.view.Display
 import androidx.test.platform.app.InstrumentationRegistry
-import com.android.server.wm.traces.common.windowmanager.windows.ConfigurationContainer
-import com.android.server.wm.traces.common.windowmanager.windows.WindowContainer
-import com.android.server.wm.traces.common.windowmanager.windows.WindowState
+import com.android.server.wm.flicker.LAUNCHER_COMPONENT
 import com.android.server.wm.traces.common.Condition
 import com.android.server.wm.traces.common.ConditionList
 import com.android.server.wm.traces.common.DeviceStateDump
 import com.android.server.wm.traces.common.FlickerComponentName
 import com.android.server.wm.traces.common.FlickerComponentName.Companion.IME
 import com.android.server.wm.traces.common.FlickerComponentName.Companion.SNAPSHOT
-import com.android.server.wm.traces.parser.LOG_TAG
 import com.android.server.wm.traces.common.WaitCondition
-import com.android.server.wm.traces.common.layers.BaseLayerTraceEntry
 import com.android.server.wm.traces.common.WindowManagerConditionsFactory
+import com.android.server.wm.traces.common.layers.BaseLayerTraceEntry
 import com.android.server.wm.traces.common.region.Region
 import com.android.server.wm.traces.common.windowmanager.WindowManagerState
+import com.android.server.wm.traces.common.windowmanager.windows.ConfigurationContainer
+import com.android.server.wm.traces.common.windowmanager.windows.WindowState
+import com.android.server.wm.traces.parser.LOG_TAG
 import com.android.server.wm.traces.parser.getCurrentStateDump
 
 open class WindowManagerStateHelper @JvmOverloads constructor(
@@ -113,8 +113,7 @@
         "Expected home activity to be visible"
     }
 
-    fun waitForRecentsActivityVisible() = require(
-        waitFor("isRecentsActivityVisible") { it.wmState.isRecentsActivityVisible }) {
+    fun waitForRecentsActivityVisible() = require(waitFor(isRecentsActivityVisible)) {
         "Expected recents activity to be visible"
     }
 
@@ -251,11 +250,20 @@
         @JvmStatic
         val isHomeActivityVisible = ConditionList(
             WindowManagerConditionsFactory.isHomeActivityVisible(),
+            WindowManagerConditionsFactory.isLayerVisible(LAUNCHER_COMPONENT),
             WindowManagerConditionsFactory.isAppTransitionIdle(Display.DEFAULT_DISPLAY),
+            WindowManagerConditionsFactory.hasLayersAnimating().negate(),
             WindowManagerConditionsFactory.isNavBarVisible(),
             WindowManagerConditionsFactory.isStatusBarVisible())
 
         @JvmStatic
+        val isRecentsActivityVisible = ConditionList(
+            WindowManagerConditionsFactory.isRecentsActivityVisible(),
+            WindowManagerConditionsFactory.isLayerVisible(LAUNCHER_COMPONENT),
+            WindowManagerConditionsFactory.isAppTransitionIdle(Display.DEFAULT_DISPLAY),
+            WindowManagerConditionsFactory.hasLayersAnimating().negate())
+
+        @JvmStatic
         val imeGoneCondition = ConditionList(
             WindowManagerConditionsFactory.isLayerVisible(IME).negate(),
             WindowManagerConditionsFactory.isAppTransitionIdle(Display.DEFAULT_DISPLAY))