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