summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/cts/permission/src/android/permission/cts/DevicePermissionsTest.kt182
-rw-r--r--tests/cts/permissionpolicy/res/raw/android_manifest.xml12
-rw-r--r--tests/cts/permissionui/src/android/permissionui/cts/BaseUsePermissionTest.kt6
-rw-r--r--tests/cts/permissionui/src/android/permissionui/cts/PermissionDecisionsTest.kt25
-rw-r--r--tests/cts/permissionui/src/android/permissionui/cts/PermissionSplitTest.kt10
-rw-r--r--tests/cts/rolemultiuser/src/android/app/rolemultiuser/cts/RoleManagerMultiUserTest.kt236
-rw-r--r--tests/cts/safetycenter/AndroidTest.xml4
-rw-r--r--tests/functional/safetycenter/multiusers/AndroidTest.xml4
-rw-r--r--tests/functional/safetycenter/safetycenteractivity/AndroidTest.xml4
-rw-r--r--tests/functional/safetycenter/singleuser/AndroidTest.xml4
-rw-r--r--tests/functional/safetycenter/subpages/AndroidTest.xml4
-rw-r--r--tests/hostside/safetycenter/AndroidTest.xml4
12 files changed, 328 insertions, 167 deletions
diff --git a/tests/cts/permission/src/android/permission/cts/DevicePermissionsTest.kt b/tests/cts/permission/src/android/permission/cts/DevicePermissionsTest.kt
index ff333c6a0..145936382 100644
--- a/tests/cts/permission/src/android/permission/cts/DevicePermissionsTest.kt
+++ b/tests/cts/permission/src/android/permission/cts/DevicePermissionsTest.kt
@@ -22,6 +22,10 @@ import android.app.ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND_S
import android.app.Instrumentation
import android.companion.virtual.VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT
import android.companion.virtual.VirtualDeviceManager.VirtualDevice
+import android.companion.virtual.VirtualDeviceParams
+import android.companion.virtual.VirtualDeviceParams.DEVICE_POLICY_CUSTOM
+import android.companion.virtual.VirtualDeviceParams.DEVICE_POLICY_DEFAULT
+import android.companion.virtual.VirtualDeviceParams.POLICY_TYPE_AUDIO
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager.FLAG_PERMISSION_ONE_TIME
@@ -33,10 +37,7 @@ import android.content.pm.PackageManager.PERMISSION_GRANTED
import android.os.Build
import android.os.UserHandle
import android.permission.PermissionManager
-import android.permission.flags.Flags
import android.platform.test.annotations.AppModeFull
-import android.platform.test.annotations.RequiresFlagsDisabled
-import android.platform.test.annotations.RequiresFlagsEnabled
import android.platform.test.flag.junit.DeviceFlagsValueProvider
import android.virtualdevice.cts.common.VirtualDeviceRule
import androidx.test.ext.junit.runners.AndroidJUnit4
@@ -66,18 +67,25 @@ class DevicePermissionsTest {
private lateinit var permissionManager: PermissionManager
@get:Rule
- var mVirtualDeviceRule = VirtualDeviceRule.withAdditionalPermissions(
+ var mVirtualDeviceRule =
+ VirtualDeviceRule.withAdditionalPermissions(
Manifest.permission.GRANT_RUNTIME_PERMISSIONS,
Manifest.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS,
Manifest.permission.REVOKE_RUNTIME_PERMISSIONS,
- Manifest.permission.GET_RUNTIME_PERMISSIONS
+ Manifest.permission.GET_RUNTIME_PERMISSIONS,
)
@Rule @JvmField val mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule()
@Before
fun setup() {
- virtualDevice = mVirtualDeviceRule.createManagedVirtualDevice()
+ virtualDevice =
+ mVirtualDeviceRule.createManagedVirtualDevice(
+ // Without custom audio policy, the RECORD_AUDIO permission won't be device aware.
+ VirtualDeviceParams.Builder()
+ .setDevicePolicy(POLICY_TYPE_AUDIO, DEVICE_POLICY_CUSTOM)
+ .build()
+ )
virtualDeviceContext = defaultDeviceContext.createDeviceContext(virtualDevice.deviceId)
permissionManager = virtualDeviceContext.getSystemService(PermissionManager::class.java)!!
persistentDeviceId = virtualDevice.persistentDeviceId!!
@@ -89,43 +97,47 @@ class DevicePermissionsTest {
runShellCommandOrThrow("pm uninstall $TEST_PACKAGE_NAME")
}
- @RequiresFlagsEnabled(
- Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS_ENABLED,
- Flags.FLAG_DEVICE_AWARE_PERMISSIONS_ENABLED
- )
@Test
- fun testDeviceAwareRuntimePermissionIsGranted() {
- grantPermissionAndAssertGranted(Manifest.permission.CAMERA, virtualDeviceContext)
+ fun virtualDeviceDefaultPolicy_deviceAwarePermissionFallsBackToDefaultDevice() {
+ virtualDevice =
+ mVirtualDeviceRule.createManagedVirtualDevice(
+ // With default audio policy, the RECORD_AUDIO permission won't be device aware.
+ VirtualDeviceParams.Builder()
+ .setDevicePolicy(POLICY_TYPE_AUDIO, DEVICE_POLICY_DEFAULT)
+ .build()
+ )
+ virtualDeviceContext = defaultDeviceContext.createDeviceContext(virtualDevice.deviceId)
+
+ grantPermissionAndAssertGranted(DEVICE_AWARE_PERMISSION, defaultDeviceContext)
+ assertPermission(DEVICE_AWARE_PERMISSION, PERMISSION_GRANTED, virtualDeviceContext)
}
- @RequiresFlagsDisabled(Flags.FLAG_DEVICE_AWARE_PERMISSIONS_ENABLED)
@Test
- fun testDeviceAwareRuntimePermissionGrantIsInherited() {
- grantPermissionAndAssertGranted(Manifest.permission.CAMERA, defaultDeviceContext)
+ fun virtualDeviceCustomPolicy_deviceAwarePermissionGrantedOnVirtualDevice() {
+ // When a device aware permission is granted on the default device, it's not automatically
+ // granted on the virtual device.
+ grantPermissionAndAssertGranted(DEVICE_AWARE_PERMISSION, defaultDeviceContext)
+ assertPermission(DEVICE_AWARE_PERMISSION, PERMISSION_DENIED, virtualDeviceContext)
- assertPermission(Manifest.permission.CAMERA, PERMISSION_GRANTED, virtualDeviceContext)
+ grantPermissionAndAssertGranted(DEVICE_AWARE_PERMISSION, virtualDeviceContext)
}
@Test
- fun testNonDeviceAwareRuntimePermissionGrantIsInherited() {
+ fun normalPermissionGrantedOnDefaultDevice_isGrantedOnVirtualDevice() {
grantPermissionAndAssertGranted(NON_DEVICE_AWARE_PERMISSION, defaultDeviceContext)
assertPermission(NON_DEVICE_AWARE_PERMISSION, PERMISSION_GRANTED, virtualDeviceContext)
}
- @RequiresFlagsEnabled(
- Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS_ENABLED,
- Flags.FLAG_DEVICE_AWARE_PERMISSIONS_ENABLED
- )
@Test
- fun testDeviceAwareRuntimePermissionIsRevoked() {
+ fun virtualDeviceCustomPolicy_deviceAwarePermissionIsRevoked() {
grantPermissionAndAssertGranted(DEVICE_AWARE_PERMISSION, virtualDeviceContext)
revokePermissionAndAssertDenied(DEVICE_AWARE_PERMISSION, virtualDeviceContext)
}
@Test
- fun testNonDeviceAwareRuntimePermissionIsRevokedForDefaultDevice() {
+ fun normalPermissionRevokedFromVirtualDevice_isAlsoRevokedOnDefaultDevice() {
grantPermissionAndAssertGranted(NON_DEVICE_AWARE_PERMISSION, defaultDeviceContext)
assertPermission(NON_DEVICE_AWARE_PERMISSION, PERMISSION_GRANTED, virtualDeviceContext)
// Revoke call from virtualDeviceContext should revoke for default device as well.
@@ -134,24 +146,24 @@ class DevicePermissionsTest {
}
@Test
- fun testNormalPermissionGrantIsInherited() {
+ fun normalPermission_isInheritedOnVirtualDevice() {
assertPermission(Manifest.permission.INTERNET, PERMISSION_GRANTED, virtualDeviceContext)
}
@Test
- fun testSignaturePermissionGrantIsInherited() {
+ fun signaturePermission_isInheritedOnVirtualDevice() {
assertPermission(CUSTOM_SIGNATURE_PERMISSION, PERMISSION_GRANTED, virtualDeviceContext)
}
@Test
- fun testOneTimePermissionIsRevoked() {
+ fun virtualDeviceCustomPolicy_oneTimePermissionIsRevoked() {
grantPermissionAndAssertGranted(DEVICE_AWARE_PERMISSION, virtualDeviceContext)
virtualDeviceContext.packageManager.updatePermissionFlags(
DEVICE_AWARE_PERMISSION,
TEST_PACKAGE_NAME,
FLAG_PERMISSION_ONE_TIME,
FLAG_PERMISSION_ONE_TIME,
- UserHandle.of(virtualDeviceContext.userId)
+ UserHandle.of(virtualDeviceContext.userId),
)
permissionManager.startOneTimePermissionSession(
@@ -159,19 +171,15 @@ class DevicePermissionsTest {
0,
0,
IMPORTANCE_FOREGROUND,
- IMPORTANCE_FOREGROUND_SERVICE
+ IMPORTANCE_FOREGROUND_SERVICE,
)
eventually {
assertPermission(DEVICE_AWARE_PERMISSION, PERMISSION_DENIED, virtualDeviceContext)
}
}
- @RequiresFlagsEnabled(
- Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS_ENABLED,
- Flags.FLAG_DEVICE_AWARE_PERMISSIONS_ENABLED
- )
@Test
- fun testRevokeSelfPermissionOnKill() {
+ fun virtualDeviceCustomPolicy_revokeSelfPermissionOnKill_permissionIsRevoked() {
grantPermissionAndAssertGranted(DEVICE_AWARE_PERMISSION, virtualDeviceContext)
revokeSelfPermission(DEVICE_AWARE_PERMISSION, virtualDeviceContext)
@@ -180,105 +188,90 @@ class DevicePermissionsTest {
}
}
- @RequiresFlagsEnabled(
- Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS_ENABLED,
- Flags.FLAG_DEVICE_AWARE_PERMISSIONS_ENABLED
- )
@Test
- fun testGrantAndRevokeDeviceAwarePermissionByPersistentDeviceId() {
- val deviceAwarePermission = DEVICE_AWARE_PERMISSION
-
+ fun usePersistentDeviceIdToRevokeDeviceAwarePermission_permissionIsRevoked() {
permissionManager.grantRuntimePermission(
TEST_PACKAGE_NAME,
- deviceAwarePermission,
- persistentDeviceId
+ DEVICE_AWARE_PERMISSION,
+ persistentDeviceId,
)
assertThat(
permissionManager.checkPermission(
- deviceAwarePermission,
+ DEVICE_AWARE_PERMISSION,
TEST_PACKAGE_NAME,
- virtualDevice.persistentDeviceId!!
+ virtualDevice.persistentDeviceId!!,
)
)
.isEqualTo(PERMISSION_GRANTED)
assertThat(
permissionManager.checkPermission(
- deviceAwarePermission,
+ DEVICE_AWARE_PERMISSION,
TEST_PACKAGE_NAME,
- PERSISTENT_DEVICE_ID_DEFAULT
+ PERSISTENT_DEVICE_ID_DEFAULT,
)
)
.isEqualTo(PERMISSION_DENIED)
permissionManager.revokeRuntimePermission(
TEST_PACKAGE_NAME,
- deviceAwarePermission,
+ DEVICE_AWARE_PERMISSION,
persistentDeviceId,
- "test"
+ "test",
)
assertThat(
permissionManager.checkPermission(
- deviceAwarePermission,
+ DEVICE_AWARE_PERMISSION,
TEST_PACKAGE_NAME,
- virtualDevice.persistentDeviceId!!
+ virtualDevice.persistentDeviceId!!,
)
)
.isEqualTo(PERMISSION_DENIED)
}
- @RequiresFlagsEnabled(
- Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS_ENABLED,
- Flags.FLAG_DEVICE_AWARE_PERMISSIONS_ENABLED
- )
@Test
- fun testUpdateAndGetPermissionFlagsByPersistentDeviceId() {
- val deviceAwarePermission = DEVICE_AWARE_PERMISSION
+ fun updateAndGetPermissionFlagsByPersistentDeviceId() {
val flagMask = FLAG_PERMISSION_USER_SET or FLAG_PERMISSION_USER_FIXED
val flag = FLAG_PERMISSION_USER_SET
assertThat(
permissionManager.getPermissionFlags(
TEST_PACKAGE_NAME,
- deviceAwarePermission,
- persistentDeviceId
+ DEVICE_AWARE_PERMISSION,
+ persistentDeviceId,
)
)
.isEqualTo(0)
permissionManager.updatePermissionFlags(
TEST_PACKAGE_NAME,
- deviceAwarePermission,
+ DEVICE_AWARE_PERMISSION,
persistentDeviceId,
flagMask,
- flag
+ flag,
)
assertThat(
permissionManager.getPermissionFlags(
TEST_PACKAGE_NAME,
- deviceAwarePermission,
- persistentDeviceId
+ DEVICE_AWARE_PERMISSION,
+ persistentDeviceId,
)
)
.isEqualTo(FLAG_PERMISSION_USER_SET)
}
- @RequiresFlagsEnabled(
- Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS_ENABLED,
- Flags.FLAG_DEVICE_AWARE_PERMISSIONS_ENABLED
- )
@Test
- fun testAllPermissionStatesApiGrantForVirtualDevice() {
+ fun permissionGrantedOnVirtualDevice_reflectedInGetAllPermissionStatesApi() {
// Setting a flag explicitly so that the permission consistently stays in the state
permissionManager.updatePermissionFlags(
TEST_PACKAGE_NAME,
DEVICE_AWARE_PERMISSION,
PERSISTENT_DEVICE_ID_DEFAULT,
FLAG_PERMISSION_USER_SENSITIVE_WHEN_GRANTED,
- FLAG_PERMISSION_USER_SENSITIVE_WHEN_GRANTED
+ FLAG_PERMISSION_USER_SENSITIVE_WHEN_GRANTED,
)
assertThat(
@@ -291,7 +284,7 @@ class DevicePermissionsTest {
permissionManager.grantRuntimePermission(
TEST_PACKAGE_NAME,
DEVICE_AWARE_PERMISSION,
- persistentDeviceId
+ persistentDeviceId,
)
val permissionStateMap =
@@ -312,7 +305,7 @@ class DevicePermissionsTest {
TEST_PACKAGE_NAME,
DEVICE_AWARE_PERMISSION,
persistentDeviceId,
- "test"
+ "test",
)
assertThat(
@@ -323,12 +316,8 @@ class DevicePermissionsTest {
.isFalse()
}
- @RequiresFlagsEnabled(
- Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS_ENABLED,
- Flags.FLAG_DEVICE_AWARE_PERMISSIONS_ENABLED
- )
@Test
- fun testAllPermissionStatesApiFlagsForVirtualDevice() {
+ fun setPermissionFlagOnVirtualDevice_reflectedInGetAllPermissionStatesApi() {
val flagMask = FLAG_PERMISSION_USER_SET or FLAG_PERMISSION_USER_FIXED
val flag = FLAG_PERMISSION_USER_SET
@@ -340,7 +329,7 @@ class DevicePermissionsTest {
DEVICE_AWARE_PERMISSION,
persistentDeviceId,
flagMask,
- flag
+ flag,
)
assertThat(
@@ -349,7 +338,7 @@ class DevicePermissionsTest {
.getAllPermissionStates(TEST_PACKAGE_NAME, persistentDeviceId)[
DEVICE_AWARE_PERMISSION]!!
.flags,
- flag
+ flag,
)
)
.isTrue()
@@ -360,15 +349,14 @@ class DevicePermissionsTest {
.getAllPermissionStates(TEST_PACKAGE_NAME, persistentDeviceId)[
DEVICE_AWARE_PERMISSION]!!
.flags,
- FLAG_PERMISSION_USER_FIXED
+ FLAG_PERMISSION_USER_FIXED,
)
)
.isFalse()
}
- @RequiresFlagsEnabled(Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS_ENABLED)
@Test
- fun testAllPermissionStatesApiGrantForDefaultDevice() {
+ fun permissionGrantedOnDefaultDevice_reflectedInGetAllPermissionStatesApi() {
// Setting a flag explicitly so that the permission consistently stays in the state upon
// revoke
permissionManager.updatePermissionFlags(
@@ -376,13 +364,13 @@ class DevicePermissionsTest {
DEVICE_AWARE_PERMISSION,
PERSISTENT_DEVICE_ID_DEFAULT,
FLAG_PERMISSION_USER_SENSITIVE_WHEN_GRANTED,
- FLAG_PERMISSION_USER_SENSITIVE_WHEN_GRANTED
+ FLAG_PERMISSION_USER_SENSITIVE_WHEN_GRANTED,
)
permissionManager.grantRuntimePermission(
TEST_PACKAGE_NAME,
DEVICE_AWARE_PERMISSION,
- PERSISTENT_DEVICE_ID_DEFAULT
+ PERSISTENT_DEVICE_ID_DEFAULT,
)
assertThat(
@@ -404,7 +392,7 @@ class DevicePermissionsTest {
TEST_PACKAGE_NAME,
DEVICE_AWARE_PERMISSION,
PERSISTENT_DEVICE_ID_DEFAULT,
- "test"
+ "test",
)
assertThat(
@@ -416,9 +404,8 @@ class DevicePermissionsTest {
.isFalse()
}
- @RequiresFlagsEnabled(Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS_ENABLED)
@Test
- fun testAllPermissionStatesApiFlagsForDefaultDevice() {
+ fun setPermissionFlagOnDefaultDevice_reflectedInGetAllPermissionStatesApi() {
val flagMask = FLAG_PERMISSION_USER_SET or FLAG_PERMISSION_USER_FIXED
val flag = FLAG_PERMISSION_USER_SET
@@ -434,7 +421,7 @@ class DevicePermissionsTest {
DEVICE_AWARE_PERMISSION,
PERSISTENT_DEVICE_ID_DEFAULT,
flagMask,
- flag
+ flag,
)
assertThat(
@@ -443,7 +430,7 @@ class DevicePermissionsTest {
.getAllPermissionStates(TEST_PACKAGE_NAME, PERSISTENT_DEVICE_ID_DEFAULT)[
DEVICE_AWARE_PERMISSION]!!
.flags,
- flag
+ flag,
)
)
.isTrue()
@@ -454,19 +441,18 @@ class DevicePermissionsTest {
.getAllPermissionStates(TEST_PACKAGE_NAME, PERSISTENT_DEVICE_ID_DEFAULT)[
DEVICE_AWARE_PERMISSION]!!
.flags,
- FLAG_PERMISSION_USER_FIXED
+ FLAG_PERMISSION_USER_FIXED,
)
)
.isFalse()
}
- @RequiresFlagsEnabled(Flags.FLAG_DEVICE_AWARE_PERMISSION_APIS_ENABLED)
@Test
- fun testAllPermissionStatesApiThatNonDeviceAwareRuntimePermissionGrantIsNotInherited() {
+ fun getAllPermissionStates_normalPermissionIsNotInherited() {
permissionManager.grantRuntimePermission(
TEST_PACKAGE_NAME,
NON_DEVICE_AWARE_PERMISSION,
- PERSISTENT_DEVICE_ID_DEFAULT
+ PERSISTENT_DEVICE_ID_DEFAULT,
)
assertThat(
@@ -501,7 +487,7 @@ class DevicePermissionsTest {
context.packageManager.grantRuntimePermission(
TEST_PACKAGE_NAME,
permissionName,
- UserHandle.of(context.userId)
+ UserHandle.of(context.userId),
)
assertPermission(permissionName, PERMISSION_GRANTED, context)
}
@@ -510,18 +496,14 @@ class DevicePermissionsTest {
context.packageManager.revokeRuntimePermission(
TEST_PACKAGE_NAME,
permissionName,
- UserHandle.of(context.userId)
+ UserHandle.of(context.userId),
)
assertPermission(permissionName, PERMISSION_DENIED, context)
}
- private fun assertPermission(
- permissionName: String,
- permissionState: Int,
- context: Context,
- ) {
- assertThat(context.packageManager.checkPermission(permissionName, TEST_PACKAGE_NAME))
- .isEqualTo(permissionState)
+ private fun assertPermission(permissionName: String, permissionState: Int, context: Context) {
+ val uid = defaultDeviceContext.packageManager.getApplicationInfo(TEST_PACKAGE_NAME, 0).uid
+ assertThat(context.checkPermission(permissionName, -1, uid)).isEqualTo(permissionState)
}
companion object {
diff --git a/tests/cts/permissionpolicy/res/raw/android_manifest.xml b/tests/cts/permissionpolicy/res/raw/android_manifest.xml
index 9ad619596..2547b9786 100644
--- a/tests/cts/permissionpolicy/res/raw/android_manifest.xml
+++ b/tests/cts/permissionpolicy/res/raw/android_manifest.xml
@@ -7759,7 +7759,17 @@
@FlaggedApi("com.android.server.telecom.flags.telecom_resolve_hidden_dependencies")
@hide -->
<permission android:name="android.permission.READ_BLOCKED_NUMBERS"
- android:protectionLevel="signature" />
+ android:protectionLevel="signature"
+ android:featureFlag="!android.permission.flags.grant_read_blocked_numbers_to_system_ui_intelligence" />
+
+ <!-- Allows the holder to read blocked numbers. See
+ {@link android.provider.BlockedNumberContract}.
+ @SystemApi
+ @FlaggedApi("com.android.server.telecom.flags.telecom_resolve_hidden_dependencies")
+ @hide -->
+ <permission android:name="android.permission.READ_BLOCKED_NUMBERS"
+ android:protectionLevel="signature|role"
+ android:featureFlag="android.permission.flags.grant_read_blocked_numbers_to_system_ui_intelligence" />
<!-- Allows the holder to write blocked numbers. See
{@link android.provider.BlockedNumberContract}.
diff --git a/tests/cts/permissionui/src/android/permissionui/cts/BaseUsePermissionTest.kt b/tests/cts/permissionui/src/android/permissionui/cts/BaseUsePermissionTest.kt
index ccc5a0a5e..f52e32344 100644
--- a/tests/cts/permissionui/src/android/permissionui/cts/BaseUsePermissionTest.kt
+++ b/tests/cts/permissionui/src/android/permissionui/cts/BaseUsePermissionTest.kt
@@ -38,6 +38,7 @@ import android.provider.DeviceConfig
import android.provider.Settings
import android.text.Spanned
import android.text.style.ClickableSpan
+import android.util.Log
import android.view.View
import android.view.accessibility.AccessibilityNodeInfo
import androidx.test.uiautomator.By
@@ -51,6 +52,7 @@ import com.android.compatibility.common.util.SystemUtil
import com.android.compatibility.common.util.SystemUtil.callWithShellPermissionIdentity
import com.android.compatibility.common.util.SystemUtil.eventually
import com.android.compatibility.common.util.SystemUtil.runWithShellPermissionIdentity
+import com.android.compatibility.common.util.UiDumpUtils
import com.android.modules.utils.build.SdkLevel
import java.util.concurrent.CompletableFuture
import java.util.concurrent.TimeUnit
@@ -64,6 +66,7 @@ import org.junit.Before
abstract class BaseUsePermissionTest : BasePermissionTest() {
companion object {
+ const val LOG_TAG = "BaseUsePermissionTest"
const val APP_APK_NAME_31 = "CtsUsePermissionApp31.apk"
const val APP_APK_NAME_31_WITH_ASL = "CtsUsePermissionApp31WithAsl.apk"
const val APP_APK_NAME_LATEST = "CtsUsePermissionAppLatest.apk"
@@ -791,6 +794,9 @@ abstract class BaseUsePermissionTest : BasePermissionTest() {
)
if (timeoutOccurred) {
+ val uiDump = StringBuilder()
+ UiDumpUtils.dumpNodes(uiDump)
+ Log.w(LOG_TAG, "Timed out waiting for window transition, UI dump: $uiDump")
throw RuntimeException("Timed out waiting for window transition.")
}
}
diff --git a/tests/cts/permissionui/src/android/permissionui/cts/PermissionDecisionsTest.kt b/tests/cts/permissionui/src/android/permissionui/cts/PermissionDecisionsTest.kt
index ae6e33b2a..e4ee52186 100644
--- a/tests/cts/permissionui/src/android/permissionui/cts/PermissionDecisionsTest.kt
+++ b/tests/cts/permissionui/src/android/permissionui/cts/PermissionDecisionsTest.kt
@@ -53,7 +53,8 @@ class PermissionDecisionsTest : BaseUsePermissionTest() {
openPermissionDecisions()
waitFindObject(
By.hasChild(
- By.text("You gave $APP_PACKAGE_NAME access to location").displayId(displayId))
+ By.text("You gave $APP_PACKAGE_NAME access to location").displayId(displayId)
+ )
.hasChild(By.text("Today").displayId(displayId))
.displayId(displayId)
)
@@ -69,7 +70,8 @@ class PermissionDecisionsTest : BaseUsePermissionTest() {
openPermissionDecisions()
waitFindObject(
By.hasChild(
- By.text("You denied $APP_PACKAGE_NAME access to location").displayId(displayId))
+ By.text("You denied $APP_PACKAGE_NAME access to location").displayId(displayId)
+ )
.hasChild(By.text("Today").displayId(displayId))
.displayId(displayId)
)
@@ -86,11 +88,13 @@ class PermissionDecisionsTest : BaseUsePermissionTest() {
openPermissionDecisions()
assertNull(
waitFindObjectOrNull(
- By.hasChild(By.text("You denied $APP_PACKAGE_NAME access to location")
- .displayId(displayId))
+ By.hasChild(
+ By.text("You denied $APP_PACKAGE_NAME access to location")
+ .displayId(displayId)
+ )
.hasChild(By.text("Today").displayId(displayId))
.displayId(displayId),
- ASSERT_ABSENT_SELECTOR_TIMEOUT_MS
+ ASSERT_ABSENT_SELECTOR_TIMEOUT_MS,
)
)
}
@@ -105,8 +109,10 @@ class PermissionDecisionsTest : BaseUsePermissionTest() {
openPermissionDecisions()
waitFindObject(
- By.hasChild(By.text("You gave $APP_PACKAGE_NAME access to location")
- .displayId(displayId))
+ By.hasChild(
+ By.text("You gave $APP_PACKAGE_NAME access to location")
+ .displayId(displayId)
+ )
.hasChild(By.text("Today").displayId(displayId))
.displayId(displayId)
)
@@ -121,7 +127,8 @@ class PermissionDecisionsTest : BaseUsePermissionTest() {
pressBack()
waitFindObject(
By.hasChild(
- By.text("You denied $APP_PACKAGE_NAME access to location").displayId(displayId))
+ By.text("You denied $APP_PACKAGE_NAME access to location").displayId(displayId)
+ )
.hasChild(By.text("Today").displayId(displayId))
.displayId(displayId)
)
@@ -132,7 +139,7 @@ class PermissionDecisionsTest : BaseUsePermissionTest() {
SystemUtil.runWithShellPermissionIdentity {
context.startActivity(
Intent(PermissionManager.ACTION_REVIEW_PERMISSION_DECISIONS).apply {
- addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+ addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)
}
)
}
diff --git a/tests/cts/permissionui/src/android/permissionui/cts/PermissionSplitTest.kt b/tests/cts/permissionui/src/android/permissionui/cts/PermissionSplitTest.kt
index c2b5447dd..17cef0e31 100644
--- a/tests/cts/permissionui/src/android/permissionui/cts/PermissionSplitTest.kt
+++ b/tests/cts/permissionui/src/android/permissionui/cts/PermissionSplitTest.kt
@@ -16,6 +16,7 @@
package android.permissionui.cts
+import android.content.pm.PackageManager
import android.health.connect.HealthPermissions
import android.os.Build
import android.permission.flags.Flags.FLAG_REPLACE_BODY_SENSOR_PERMISSION_ENABLED
@@ -25,6 +26,7 @@ import android.platform.test.flag.junit.DeviceFlagsValueProvider
import androidx.test.filters.FlakyTest
import androidx.test.filters.SdkSuppress
import org.junit.Assume.assumeFalse
+import org.junit.Assume.assumeTrue
import org.junit.Before
import org.junit.Rule
import org.junit.Test
@@ -33,6 +35,12 @@ import org.junit.Test
@FlakyTest
class PermissionSplitTest : BaseUsePermissionTest() {
+ companion object {
+ @JvmStatic
+ private val supportHeartrate =
+ packageManager.hasSystemFeature(PackageManager.FEATURE_SENSOR_HEART_RATE)
+ }
+
@Rule @JvmField val mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule()
@Before
@@ -146,6 +154,7 @@ class PermissionSplitTest : BaseUsePermissionTest() {
@RequiresFlagsEnabled(FLAG_REPLACE_BODY_SENSOR_PERMISSION_ENABLED)
@Test
fun testBodySensorSplitOnBaklava_splitToReadHeartRate() {
+ assumeTrue(supportHeartrate)
installPackage(APP_APK_PATH_30_WITH_BACKGROUND)
assertAppHasPermission(android.Manifest.permission.BODY_SENSORS, false)
assertAppHasPermission(HealthPermissions.READ_HEART_RATE, false)
@@ -195,6 +204,7 @@ class PermissionSplitTest : BaseUsePermissionTest() {
}
private fun testBodySensorPermissionSplitToBodySensorsBackground(expectSplit: Boolean) {
+ assumeTrue(supportHeartrate)
assertAppHasPermission(android.Manifest.permission.BODY_SENSORS, false)
assertAppHasPermission(android.Manifest.permission.BODY_SENSORS_BACKGROUND, false)
diff --git a/tests/cts/rolemultiuser/src/android/app/rolemultiuser/cts/RoleManagerMultiUserTest.kt b/tests/cts/rolemultiuser/src/android/app/rolemultiuser/cts/RoleManagerMultiUserTest.kt
index 98aa5fbf1..3e24d5025 100644
--- a/tests/cts/rolemultiuser/src/android/app/rolemultiuser/cts/RoleManagerMultiUserTest.kt
+++ b/tests/cts/rolemultiuser/src/android/app/rolemultiuser/cts/RoleManagerMultiUserTest.kt
@@ -27,10 +27,12 @@ import android.os.Process
import android.os.UserHandle
import android.os.UserManager.DISALLOW_CONFIG_DEFAULT_APPS
import android.provider.Settings
+import android.util.Log
import android.util.Pair
import androidx.test.filters.SdkSuppress
import androidx.test.rule.ActivityTestRule
import androidx.test.uiautomator.By
+import com.android.bedstead.enterprise.annotations.EnsureDoesNotHaveUserRestriction
import com.android.bedstead.enterprise.annotations.EnsureHasNoWorkProfile
import com.android.bedstead.enterprise.annotations.EnsureHasUserRestriction
import com.android.bedstead.enterprise.annotations.EnsureHasWorkProfile
@@ -53,6 +55,7 @@ import com.android.bedstead.nene.TestApis.context
import com.android.bedstead.nene.TestApis.permissions
import com.android.bedstead.nene.TestApis.users
import com.android.bedstead.nene.types.OptionalBoolean
+import com.android.bedstead.nene.userrestrictions.CommonUserRestrictions.DISALLOW_ADD_MANAGED_PROFILE
import com.android.bedstead.nene.users.UserReference
import com.android.bedstead.nene.users.UserType
import com.android.bedstead.permissions.CommonPermissions.INTERACT_ACROSS_USERS_FULL
@@ -69,7 +72,6 @@ import com.android.compatibility.common.util.UiAutomatorUtils2.waitFindObject
import com.android.compatibility.common.util.UiAutomatorUtils2.waitFindObjectOrNull
import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertWithMessage
-import java.util.Objects
import java.util.concurrent.CompletableFuture
import java.util.concurrent.TimeUnit
import java.util.function.Consumer
@@ -94,16 +96,24 @@ class RoleManagerMultiUserTest {
ActivityTestRule(WaitForResultActivity::class.java)
@Before
- @Throws(java.lang.Exception::class)
fun setUp() {
assumeTrue(RoleManagerUtil.isCddCompliantScreenSize())
installAppForAllUsers()
+
+ // If "none" selected in test, ensure we re-enable fallback for other test runs
+ permissions().withPermission(MANAGE_ROLE_HOLDERS, INTERACT_ACROSS_USERS_FULL).use {
+ setRoleFallbackEnabledForAllUsers()
+ }
}
@After
- @Throws(java.lang.Exception::class)
fun tearDown() {
uninstallAppForAllUsers()
+
+ // If "none" selected in test, ensure we re-enable fallback for other test runs
+ permissions().withPermission(MANAGE_ROLE_HOLDERS, INTERACT_ACROSS_USERS_FULL).use {
+ setRoleFallbackEnabledForAllUsers()
+ }
}
@RequireFlagsEnabled(com.android.permission.flags.Flags.FLAG_CROSS_USER_ROLE_ENABLED)
@@ -315,7 +325,7 @@ class RoleManagerMultiUserTest {
// initialUser needs to be not the targetUser
val targetActiveUser = users().current().userHandle()
val initialUser =
- if (Objects.equals(targetActiveUser, deviceState.initialUser().userHandle())) {
+ if (targetActiveUser == deviceState.initialUser().userHandle()) {
deviceState.workProfile().userHandle()
} else {
deviceState.initialUser().userHandle()
@@ -378,7 +388,7 @@ class RoleManagerMultiUserTest {
val initialUser = deviceState.workProfile().userHandle()
// setActiveUserForRole and getActiveUserForRole is used to ensure initial active users
// state and requires INTERACT_ACROSS_USERS_FULL
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL).use {
roleManager.setActiveUserForRole(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME, initialUser, 0)
assertThat(roleManager.getActiveUserForRole(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME))
.isEqualTo(initialUser)
@@ -406,7 +416,7 @@ class RoleManagerMultiUserTest {
// getActiveUserForRole is used to ensure addRoleHolderAsUser didn't set active user, and
// requires INTERACT_ACROSS_USERS_FULL
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL).use {
assertThat(roleManager.getActiveUserForRole(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME))
.isEqualTo(initialUser)
}
@@ -471,6 +481,47 @@ class RoleManagerMultiUserTest {
assertExpectedProfileHasRoleUsingGetRoleHoldersAsUser(targetActiveUser)
}
+ @RequireFlagsEnabled(
+ com.android.permission.flags.Flags.FLAG_CROSS_USER_ROLE_ENABLED,
+ com.android.permission.flags.Flags.FLAG_CROSS_USER_ROLE_UX_BUGFIX_ENABLED,
+ )
+ @EnsureHasPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS)
+ @EnsureHasWorkProfile
+ @RequireRunOnPrimaryUser
+ @Test
+ @Throws(java.lang.Exception::class)
+ fun addRoleHolderAsUserReenablesFallbackOnProfileParent() {
+ // Set other user as active
+ val initialUserReference = deviceState.initialUser()
+ val initialUser = initialUserReference.userHandle()
+ roleManager.setActiveUserForRole(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME, initialUser, 0)
+ assertThat(roleManager.getActiveUserForRole(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME))
+ .isEqualTo(initialUser)
+
+ val profileParentRoleManager = getRoleManagerForUser(initialUserReference)
+ profileParentRoleManager.setRoleFallbackEnabled(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME, false)
+ assertThat(
+ profileParentRoleManager.isRoleFallbackEnabled(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME)
+ )
+ .isFalse()
+
+ val targetActiveUser = deviceState.workProfile().userHandle()
+ val future = CallbackFuture()
+ roleManager.addRoleHolderAsUser(
+ PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME,
+ APP_PACKAGE_NAME,
+ 0,
+ targetActiveUser,
+ context.mainExecutor,
+ future,
+ )
+ assertThat(future.get(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)).isTrue()
+ assertThat(
+ profileParentRoleManager.isRoleFallbackEnabled(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME)
+ )
+ .isTrue()
+ }
+
@RequireFlagsEnabled(com.android.permission.flags.Flags.FLAG_CROSS_USER_ROLE_ENABLED)
@EnsureHasPermission(MANAGE_DEFAULT_APPLICATIONS)
@EnsureDoesNotHavePermission(INTERACT_ACROSS_USERS_FULL)
@@ -483,7 +534,7 @@ class RoleManagerMultiUserTest {
val initialUser = deviceState.workProfile().userHandle()
// setActiveUserForRole and getActiveUserForRole is used to ensure initial active users
// state and requires INTERACT_ACROSS_USERS_FULL
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL).use {
roleManager.setActiveUserForRole(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME, initialUser, 0)
assertThat(roleManager.getActiveUserForRole(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME))
.isEqualTo(initialUser)
@@ -503,7 +554,7 @@ class RoleManagerMultiUserTest {
// getActiveUserForRole is used to ensure setDefaultApplication didn't set active user,
// and requires INTERACT_ACROSS_USERS_FULL
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL).use {
assertThat(roleManager.getActiveUserForRole(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME))
.isEqualTo(initialUser)
}
@@ -565,11 +616,56 @@ class RoleManagerMultiUserTest {
eventually { assertExpectedProfileHasRoleUsingGetDefaultApplication(targetActiveUser) }
}
+ @RequireFlagsEnabled(
+ com.android.permission.flags.Flags.FLAG_CROSS_USER_ROLE_ENABLED,
+ com.android.permission.flags.Flags.FLAG_CROSS_USER_ROLE_UX_BUGFIX_ENABLED,
+ )
+ @EnsureHasPermission(
+ INTERACT_ACROSS_USERS_FULL,
+ MANAGE_DEFAULT_APPLICATIONS,
+ MANAGE_ROLE_HOLDERS,
+ )
+ @EnsureHasWorkProfile
+ @RequireRunOnPrimaryUser
+ @Test
+ @Throws(java.lang.Exception::class)
+ fun setDefaultApplicationReenablesFallbackOnProfileParent() {
+ // Set other user as active
+ val initialUserReference = deviceState.initialUser()
+ val initialUser = initialUserReference.userHandle()
+ roleManager.setActiveUserForRole(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME, initialUser, 0)
+ assertThat(roleManager.getActiveUserForRole(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME))
+ .isEqualTo(initialUser)
+
+ val profileParentRoleManager = getRoleManagerForUser(initialUserReference)
+ profileParentRoleManager.setRoleFallbackEnabled(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME, false)
+ assertThat(
+ profileParentRoleManager.isRoleFallbackEnabled(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME)
+ )
+ .isFalse()
+
+ val future = CallbackFuture()
+ getRoleManagerForUser(deviceState.workProfile())
+ .setDefaultApplication(
+ PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME,
+ APP_PACKAGE_NAME,
+ 0,
+ context.mainExecutor,
+ future,
+ )
+ assertThat(future.get(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)).isTrue()
+ assertThat(
+ profileParentRoleManager.isRoleFallbackEnabled(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME)
+ )
+ .isTrue()
+ }
+
@RequireFlagsEnabled(com.android.permission.flags.Flags.FLAG_CROSS_USER_ROLE_ENABLED)
@EnsureHasPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS)
@EnsureCanAddUser
@EnsureHasNoWorkProfile
@RequireRunOnPrimaryUser
+ @EnsureDoesNotHaveUserRestriction(DISALLOW_ADD_MANAGED_PROFILE)
@Test
@Throws(Exception::class)
fun ensureActiveUserSetToParentOnUserRemoved() {
@@ -1279,7 +1375,7 @@ class RoleManagerMultiUserTest {
// setDefaultHoldersForTestForAllUsers and setRoleVisibleForTestForAllUsers require
// INTERACT_ACROSS_USERS_FULL and MANAGE_ROLE_HOLDERS permissions to validate cross user
// role active user and role holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
// Set test default role holder. Ensures fallbacks to a default holder
setDefaultHoldersForTestForAllUsers()
setRoleVisibleForTestForAllUsers()
@@ -1306,7 +1402,7 @@ class RoleManagerMultiUserTest {
// getActiveUserForRole and getRoleHoldersAsUser require INTERACT_ACROSS_USERS_FULL and
// MANAGE_ROLE_HOLDERS permissions to validate cross user role active user and role
// holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
assertThat(roleManager.getActiveUserForRole(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME))
.isEqualTo(targetActiveUser)
assertExpectedProfileHasRoleUsingGetRoleHoldersAsUser(targetActiveUser)
@@ -1315,7 +1411,7 @@ class RoleManagerMultiUserTest {
// clearDefaultHoldersForTestForAllUsers and clearRoleVisibleForTestForAllUsers require
// INTERACT_ACROSS_USERS_FULL and MANAGE_ROLE_HOLDERS permissions to validate cross user
// role active user and role holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
clearDefaultHoldersForTestForAllUsers()
clearRoleVisibleForTestForAllUsers()
}
@@ -1332,7 +1428,7 @@ class RoleManagerMultiUserTest {
// setDefaultHoldersForTestForAllUsers and setRoleVisibleForTestForAllUsers require
// INTERACT_ACROSS_USERS_FULL and MANAGE_ROLE_HOLDERS permissions to validate cross user
// role active user and role holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
// Set test default role holder. Ensures fallbacks to a default holder
setDefaultHoldersForTestForAllUsers()
setRoleVisibleForTestForAllUsers()
@@ -1359,7 +1455,7 @@ class RoleManagerMultiUserTest {
// getActiveUserForRole and getRoleHoldersAsUser require INTERACT_ACROSS_USERS_FULL and
// MANAGE_ROLE_HOLDERS permissions to validate cross user role active user and role
// holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
assertThat(roleManager.getActiveUserForRole(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME))
.isEqualTo(targetActiveUser)
assertExpectedProfileHasRoleUsingGetRoleHoldersAsUser(targetActiveUser)
@@ -1368,7 +1464,7 @@ class RoleManagerMultiUserTest {
// clearDefaultHoldersForTestForAllUsers and clearRoleVisibleForTestForAllUsers require
// INTERACT_ACROSS_USERS_FULL and MANAGE_ROLE_HOLDERS permissions to validate cross user
// role active user and role holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
clearDefaultHoldersForTestForAllUsers()
clearRoleVisibleForTestForAllUsers()
}
@@ -1385,7 +1481,7 @@ class RoleManagerMultiUserTest {
// setDefaultHoldersForTestForAllUsers and setRoleVisibleForTestForAllUsers require
// INTERACT_ACROSS_USERS_FULL and MANAGE_ROLE_HOLDERS permissions to validate cross user
// role active user and role holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
// Set test default role holder. Ensures fallbacks to a default holder
setDefaultHoldersForTestForAllUsers()
setRoleVisibleForTestForAllUsers()
@@ -1410,7 +1506,7 @@ class RoleManagerMultiUserTest {
// getActiveUserForRole and getRoleHoldersAsUser require INTERACT_ACROSS_USERS_FULL and
// MANAGE_ROLE_HOLDERS permissions to validate cross user role active user and role
// holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
assertThat(roleManager.getActiveUserForRole(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME))
.isEqualTo(deviceState.initialUser().userHandle())
assertNoRoleHoldersUsingGetRoleHoldersAsUser()
@@ -1419,7 +1515,7 @@ class RoleManagerMultiUserTest {
// clearDefaultHoldersForTestForAllUsers and clearRoleVisibleForTestForAllUsers require
// INTERACT_ACROSS_USERS_FULL and MANAGE_ROLE_HOLDERS permissions to validate cross user
// role active user and role holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
clearDefaultHoldersForTestForAllUsers()
clearRoleVisibleForTestForAllUsers()
}
@@ -1436,7 +1532,7 @@ class RoleManagerMultiUserTest {
// setDefaultHoldersForTestForAllUsers and setRoleVisibleForTestForAllUsers require
// INTERACT_ACROSS_USERS_FULL and MANAGE_ROLE_HOLDERS permissions to validate cross user
// role active user and role holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
// Set test default role holder. Ensures fallbacks to a default holder
setDefaultHoldersForTestForAllUsers()
setRoleVisibleForTestForAllUsers()
@@ -1463,7 +1559,7 @@ class RoleManagerMultiUserTest {
// getActiveUserForRole and getRoleHoldersAsUser require INTERACT_ACROSS_USERS_FULL and
// MANAGE_ROLE_HOLDERS permissions to validate cross user role active user and role
// holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
assertThat(roleManager.getActiveUserForRole(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME))
.isEqualTo(targetActiveUser)
assertExpectedProfileHasRoleUsingGetRoleHoldersAsUser(targetActiveUser)
@@ -1472,7 +1568,7 @@ class RoleManagerMultiUserTest {
// clearDefaultHoldersForTestForAllUsers and clearRoleVisibleForTestForAllUsers require
// INTERACT_ACROSS_USERS_FULL and MANAGE_ROLE_HOLDERS permissions to validate cross user
// role active user and role holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
clearDefaultHoldersForTestForAllUsers()
clearRoleVisibleForTestForAllUsers()
}
@@ -1489,7 +1585,7 @@ class RoleManagerMultiUserTest {
// setDefaultHoldersForTestForAllUsers and setRoleVisibleForTestForAllUsers require
// INTERACT_ACROSS_USERS_FULL and MANAGE_ROLE_HOLDERS permissions to validate cross user
// role active user and role holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
// Set test default role holder. Ensures fallbacks to a default holder
setDefaultHoldersForTestForAllUsers()
setRoleVisibleForTestForAllUsers()
@@ -1516,7 +1612,7 @@ class RoleManagerMultiUserTest {
// getActiveUserForRole and getRoleHoldersAsUser require INTERACT_ACROSS_USERS_FULL and
// MANAGE_ROLE_HOLDERS permissions to validate cross user role active user and role
// holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
assertThat(roleManager.getActiveUserForRole(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME))
.isEqualTo(targetActiveUser)
assertExpectedProfileHasRoleUsingGetRoleHoldersAsUser(targetActiveUser)
@@ -1525,7 +1621,7 @@ class RoleManagerMultiUserTest {
// clearDefaultHoldersForTestForAllUsers and clearRoleVisibleForTestForAllUsers require
// INTERACT_ACROSS_USERS_FULL and MANAGE_ROLE_HOLDERS permissions to validate cross user
// role active user and role holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
clearDefaultHoldersForTestForAllUsers()
clearRoleVisibleForTestForAllUsers()
}
@@ -1542,7 +1638,7 @@ class RoleManagerMultiUserTest {
// setDefaultHoldersForTestForAllUsers and setRoleVisibleForTestForAllUsers require
// INTERACT_ACROSS_USERS_FULL and MANAGE_ROLE_HOLDERS permissions to validate cross user
// role active user and role holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
// Set test default role holder. Ensures fallbacks to a default holder
setDefaultHoldersForTestForAllUsers()
setRoleVisibleForTestForAllUsers()
@@ -1567,7 +1663,7 @@ class RoleManagerMultiUserTest {
// getActiveUserForRole and getRoleHoldersAsUser require INTERACT_ACROSS_USERS_FULL and
// MANAGE_ROLE_HOLDERS permissions to validate cross user role active user and role
// holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
assertThat(roleManager.getActiveUserForRole(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME))
.isEqualTo(deviceState.initialUser().userHandle())
assertNoRoleHoldersUsingGetRoleHoldersAsUser()
@@ -1576,7 +1672,7 @@ class RoleManagerMultiUserTest {
// clearDefaultHoldersForTestForAllUsers and clearRoleVisibleForTestForAllUsers require
// INTERACT_ACROSS_USERS_FULL and MANAGE_ROLE_HOLDERS permissions to validate cross user
// role active user and role holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
clearDefaultHoldersForTestForAllUsers()
clearRoleVisibleForTestForAllUsers()
}
@@ -1645,7 +1741,12 @@ class RoleManagerMultiUserTest {
getUiDevice().waitForIdle()
// CollapsingToolbar title can't be found by text, so using description instead.
- assertNull(waitFindObjectOrNull(By.desc(PROFILE_GROUP_EXCLUSIVITY_ROLE_LABEL)))
+ assertNull(
+ waitFindObjectOrNull(
+ By.desc(PROFILE_GROUP_EXCLUSIVITY_ROLE_LABEL),
+ IDLE_TIMEOUT_MILLIS,
+ )
+ )
pressBack()
pressBack()
@@ -1681,7 +1782,12 @@ class RoleManagerMultiUserTest {
getUiDevice().waitForIdle()
// CollapsingToolbar title can't be found by text, so using description instead.
- assertNull(waitFindObjectOrNull(By.desc(PROFILE_GROUP_EXCLUSIVITY_ROLE_LABEL)))
+ assertNull(
+ waitFindObjectOrNull(
+ By.desc(PROFILE_GROUP_EXCLUSIVITY_ROLE_LABEL),
+ IDLE_TIMEOUT_MILLIS,
+ )
+ )
pressBack()
pressBack()
@@ -1816,7 +1922,8 @@ class RoleManagerMultiUserTest {
if (isWatch) {
assertNull(
waitFindObjectOrNull(
- By.clickable(true).checked(true).hasDescendant(By.text(targetAppLabel))
+ By.clickable(true).checked(true).hasDescendant(By.text(targetAppLabel)),
+ IDLE_TIMEOUT_MILLIS,
)
)
} else {
@@ -1824,7 +1931,8 @@ class RoleManagerMultiUserTest {
waitFindObjectOrNull(
By.clickable(true)
.hasDescendant(By.checkable(true).checked(true))
- .hasDescendant(By.text(targetAppLabel))
+ .hasDescendant(By.text(targetAppLabel)),
+ IDLE_TIMEOUT_MILLIS,
)
)
}
@@ -1895,7 +2003,8 @@ class RoleManagerMultiUserTest {
if (isWatch) {
assertNull(
waitFindObjectOrNull(
- By.clickable(true).checked(true).hasDescendant(By.text(targetAppLabel))
+ By.clickable(true).checked(true).hasDescendant(By.text(targetAppLabel)),
+ IDLE_TIMEOUT_MILLIS,
)
)
} else {
@@ -1903,7 +2012,8 @@ class RoleManagerMultiUserTest {
waitFindObjectOrNull(
By.clickable(true)
.hasDescendant(By.checkable(true).checked(true))
- .hasDescendant(By.text(targetAppLabel))
+ .hasDescendant(By.text(targetAppLabel)),
+ IDLE_TIMEOUT_MILLIS,
)
)
}
@@ -1934,7 +2044,7 @@ class RoleManagerMultiUserTest {
// setDefaultHoldersForTestForAllUsers and setRoleVisibleForTestForAllUsers require
// INTERACT_ACROSS_USERS_FULL and MANAGE_ROLE_HOLDERS permissions to validate cross user
// role active user and role holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
// Set test default role holder. Ensures fallbacks to a default holder
setDefaultHoldersForTestForAllUsers()
setRoleVisibleForTestForAllUsers()
@@ -1961,7 +2071,7 @@ class RoleManagerMultiUserTest {
// getActiveUserForRole and getRoleHoldersAsUser require INTERACT_ACROSS_USERS_FULL and
// MANAGE_ROLE_HOLDERS permissions to validate cross user role active user and role
// holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
assertThat(roleManager.getActiveUserForRole(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME))
.isEqualTo(targetActiveUser)
assertExpectedProfileHasRoleUsingGetRoleHoldersAsUser(targetActiveUser)
@@ -1970,7 +2080,7 @@ class RoleManagerMultiUserTest {
// clearDefaultHoldersForTestForAllUsers and clearRoleVisibleForTestForAllUsers require
// INTERACT_ACROSS_USERS_FULL and MANAGE_ROLE_HOLDERS permissions to validate cross user
// role active user and role holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
clearDefaultHoldersForTestForAllUsers()
clearRoleVisibleForTestForAllUsers()
}
@@ -1991,7 +2101,7 @@ class RoleManagerMultiUserTest {
// setDefaultHoldersForTestForAllUsers and setRoleVisibleForTestForAllUsers require
// INTERACT_ACROSS_USERS_FULL and MANAGE_ROLE_HOLDERS permissions to validate cross user
// role active user and role holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
// Set test default role holder. Ensures fallbacks to a default holder
setDefaultHoldersForTestForAllUsers()
setRoleVisibleForTestForAllUsers()
@@ -2016,7 +2126,7 @@ class RoleManagerMultiUserTest {
// clearDefaultHoldersForTestForAllUsers and clearRoleVisibleForTestForAllUsers require
// INTERACT_ACROSS_USERS_FULL and MANAGE_ROLE_HOLDERS permissions to validate cross user
// role active user and role holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
clearDefaultHoldersForTestForAllUsers()
clearRoleVisibleForTestForAllUsers()
}
@@ -2037,7 +2147,7 @@ class RoleManagerMultiUserTest {
// setDefaultHoldersForTestForAllUsers and setRoleVisibleForTestForAllUsers require
// INTERACT_ACROSS_USERS_FULL and MANAGE_ROLE_HOLDERS permissions to validate cross user
// role active user and role holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
// Set test default role holder. Ensures fallbacks to a default holder
setDefaultHoldersForTestForAllUsers()
setRoleVisibleForTestForAllUsers()
@@ -2062,17 +2172,15 @@ class RoleManagerMultiUserTest {
// clearDefaultHoldersForTestForAllUsers and clearRoleVisibleForTestForAllUsers require
// INTERACT_ACROSS_USERS_FULL and MANAGE_ROLE_HOLDERS permissions to validate cross user
// role active user and role holder states
- permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use { _ ->
+ permissions().withPermission(INTERACT_ACROSS_USERS_FULL, MANAGE_ROLE_HOLDERS).use {
clearDefaultHoldersForTestForAllUsers()
clearRoleVisibleForTestForAllUsers()
}
}
}
- @Throws(java.lang.Exception::class)
private fun installAppForAllUsers() {
SystemUtil.runShellCommandOrThrow("pm install -r --user all $APP_APK_PATH")
- SystemUtil.waitForBroadcasts()
}
private fun uninstallAppForAllUsers() {
@@ -2099,8 +2207,7 @@ class RoleManagerMultiUserTest {
}
val result: Pair<Int, Intent?> = clickButtonAndWaitForResult(allow)
val expectedResult =
- if (allow && Objects.equals(targetActiveUser, users().instrumented().userHandle()))
- Activity.RESULT_OK
+ if (allow && targetActiveUser == users().instrumented().userHandle()) Activity.RESULT_OK
else Activity.RESULT_CANCELED
assertThat(result.first).isEqualTo(expectedResult)
@@ -2118,7 +2225,8 @@ class RoleManagerMultiUserTest {
}
private fun roleRequestNotShown() {
- val requestRoleItem = waitFindObjectOrNull(By.textStartsWith(APP_LABEL))
+ val requestRoleItem =
+ waitFindObjectOrNull(By.textStartsWith(APP_LABEL), IDLE_TIMEOUT_MILLIS)
assertNull(requestRoleItem)
val result: Pair<Int, Intent?> = waitForResult()
@@ -2148,9 +2256,9 @@ class RoleManagerMultiUserTest {
) {
for (userReference in users().profileGroup(deviceState.initialUser())) {
val user = userReference.userHandle()
- if (Objects.equals(user, expectedActiveUser)) {
- val roleHolders =
- roleManager.getRoleHoldersAsUser(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME, user)
+ val roleHolders =
+ roleManager.getRoleHoldersAsUser(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME, user)
+ if (user == expectedActiveUser) {
assertWithMessage(
"Expected user ${user.identifier} to have a role holder for " +
" $PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME"
@@ -2169,9 +2277,7 @@ class RoleManagerMultiUserTest {
"Expected user ${user.identifier} to not have a role holder for" +
" $PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME"
)
- .that(
- roleManager.getRoleHoldersAsUser(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME, user)
- )
+ .that(roleHolders)
.isEmpty()
}
}
@@ -2183,7 +2289,7 @@ class RoleManagerMultiUserTest {
for (userReference in users().profileGroup(deviceState.initialUser())) {
val userRoleManager = getRoleManagerForUser(userReference)
val user = userReference.userHandle()
- if (Objects.equals(user, expectedActiveUser)) {
+ if (user == expectedActiveUser) {
assertWithMessage("Expected default application for user ${user.identifier}")
.that(
userRoleManager.getDefaultApplication(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME)
@@ -2203,7 +2309,7 @@ class RoleManagerMultiUserTest {
private fun setDefaultHoldersForTestForAllUsers() {
// Set test default role holder. Ensures fallbacks to a default holder
for (userRoleManager in
- users().profileGroup(deviceState.initialUser()).map { getRoleManagerForUser(it) }) {
+ users().profileGroup(users().current()).map { getRoleManagerForUser(it) }) {
userRoleManager.setDefaultHoldersForTest(
PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME,
listOf(APP_PACKAGE_NAME),
@@ -2214,7 +2320,7 @@ class RoleManagerMultiUserTest {
private fun clearDefaultHoldersForTestForAllUsers() {
// Set test default role holder. Ensures fallbacks to a default holder
for (userRoleManager in
- users().profileGroup(deviceState.initialUser()).map { getRoleManagerForUser(it) }) {
+ users().profileGroup(users().current()).map { getRoleManagerForUser(it) }) {
userRoleManager.setDefaultHoldersForTest(
PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME,
emptyList(),
@@ -2225,7 +2331,7 @@ class RoleManagerMultiUserTest {
private fun setRoleVisibleForTestForAllUsers() {
// Set test default role holder. Ensures fallbacks to a default holder
for (userRoleManager in
- users().profileGroup(deviceState.initialUser()).map { getRoleManagerForUser(it) }) {
+ users().profileGroup(users().current()).map { getRoleManagerForUser(it) }) {
userRoleManager.setRoleVisibleForTest(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME, true)
}
}
@@ -2233,11 +2339,28 @@ class RoleManagerMultiUserTest {
private fun clearRoleVisibleForTestForAllUsers() {
// Set test default role holder. Ensures fallbacks to a default holder
for (userRoleManager in
- users().profileGroup(deviceState.initialUser()).map { getRoleManagerForUser(it) }) {
+ users().profileGroup(users().current()).map { getRoleManagerForUser(it) }) {
userRoleManager.setRoleVisibleForTest(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME, false)
}
}
+ private fun setRoleFallbackEnabledForAllUsers() {
+ for (userReference in users().profileGroup(users().current())) {
+ try {
+ val userRoleManager = getRoleManagerForUser(userReference)
+ userRoleManager.setRoleFallbackEnabled(PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME, true)
+ } catch (e: Exception) {
+ Log.w(
+ LOG_TAG,
+ "Encountered error setting fallback enabled for" +
+ " $PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME@" +
+ "${userReference.userHandle().identifier}",
+ e,
+ )
+ }
+ }
+ }
+
private fun getRoleManagerForUser(user: UserReference): RoleManager {
val userContext = context().androidContextAsUser(user)
return userContext.getSystemService(RoleManager::class.java)
@@ -2250,7 +2373,10 @@ class RoleManagerMultiUserTest {
}
companion object {
+ private val LOG_TAG = RoleManagerMultiUserTest::class.java.simpleName
+
private const val TIMEOUT_MILLIS: Long = (15 * 1000).toLong()
+ private const val IDLE_TIMEOUT_MILLIS: Long = (2 * 1000).toLong()
private const val PROFILE_GROUP_EXCLUSIVITY_ROLE_NAME =
RoleManager.ROLE_RESERVED_FOR_TESTING_PROFILE_GROUP_EXCLUSIVITY
private const val PROFILE_GROUP_EXCLUSIVITY_ROLE_LABEL =
diff --git a/tests/cts/safetycenter/AndroidTest.xml b/tests/cts/safetycenter/AndroidTest.xml
index 6d8c3069c..ed161f0b6 100644
--- a/tests/cts/safetycenter/AndroidTest.xml
+++ b/tests/cts/safetycenter/AndroidTest.xml
@@ -47,6 +47,10 @@
<!-- Disable syncing to prevent overwriting flags during testing. -->
<option name="run-command" value="device_config set_sync_disabled_for_tests persistent" />
<option name="teardown-command" value="device_config set_sync_disabled_for_tests none" />
+ <!-- Belt-and-braces attempt to dismiss keyguard. Tradefed should have already done this
+ for us, but this is a precaution in an attempt to mitigate b/379620557. -->
+ <option name="run-command" value="input keyevent KEYCODE_WAKEUP" />
+ <option name="run-command" value="wm dismiss-keyguard" />
<!-- Dismiss any system dialogs (e.g. crashes, ANR). -->
<option name="run-command" value="am broadcast -a android.intent.action.CLOSE_SYSTEM_DIALOGS --receiver-foreground" />
</target_preparer>
diff --git a/tests/functional/safetycenter/multiusers/AndroidTest.xml b/tests/functional/safetycenter/multiusers/AndroidTest.xml
index 20032357a..bfb7fdbf2 100644
--- a/tests/functional/safetycenter/multiusers/AndroidTest.xml
+++ b/tests/functional/safetycenter/multiusers/AndroidTest.xml
@@ -47,6 +47,10 @@
<!-- Disable syncing to prevent overwriting flags during testing. -->
<option name="run-command" value="device_config set_sync_disabled_for_tests persistent" />
<option name="teardown-command" value="device_config set_sync_disabled_for_tests none" />
+ <!-- Belt-and-braces attempt to dismiss keyguard. Tradefed should have already done this
+ for us, but this is a precaution in an attempt to mitigate b/379620557. -->
+ <option name="run-command" value="input keyevent KEYCODE_WAKEUP" />
+ <option name="run-command" value="wm dismiss-keyguard" />
<!-- Dismiss any system dialogs (e.g. crashes, ANR). -->
<option name="run-command" value="am broadcast -a android.intent.action.CLOSE_SYSTEM_DIALOGS --receiver-foreground" />
</target_preparer>
diff --git a/tests/functional/safetycenter/safetycenteractivity/AndroidTest.xml b/tests/functional/safetycenter/safetycenteractivity/AndroidTest.xml
index a1826653f..ee79dcd2a 100644
--- a/tests/functional/safetycenter/safetycenteractivity/AndroidTest.xml
+++ b/tests/functional/safetycenter/safetycenteractivity/AndroidTest.xml
@@ -47,6 +47,10 @@
<!-- Disable syncing to prevent overwriting flags during testing. -->
<option name="run-command" value="device_config set_sync_disabled_for_tests persistent" />
<option name="teardown-command" value="device_config set_sync_disabled_for_tests none" />
+ <!-- Belt-and-braces attempt to dismiss keyguard. Tradefed should have already done this
+ for us, but this is a precaution in an attempt to mitigate b/379620557. -->
+ <option name="run-command" value="input keyevent KEYCODE_WAKEUP" />
+ <option name="run-command" value="wm dismiss-keyguard" />
<!-- Dismiss any system dialogs (e.g. crashes, ANR). -->
<option name="run-command" value="am broadcast -a android.intent.action.CLOSE_SYSTEM_DIALOGS --receiver-foreground" />
</target_preparer>
diff --git a/tests/functional/safetycenter/singleuser/AndroidTest.xml b/tests/functional/safetycenter/singleuser/AndroidTest.xml
index af040eb6f..f778ca93e 100644
--- a/tests/functional/safetycenter/singleuser/AndroidTest.xml
+++ b/tests/functional/safetycenter/singleuser/AndroidTest.xml
@@ -47,8 +47,8 @@
<!-- Disable syncing to prevent overwriting flags during testing. -->
<option name="run-command" value="device_config set_sync_disabled_for_tests persistent" />
<option name="teardown-command" value="device_config set_sync_disabled_for_tests none" />
- <!-- TODO(b/379928062): Ensure device not on lockscreen. Reassess when keyguard bug is
- closed -->
+ <!-- Belt-and-braces attempt to dismiss keyguard. Tradefed should have already done this
+ for us, but this is a precaution in an attempt to mitigate b/379620557. -->
<option name="run-command" value="input keyevent KEYCODE_WAKEUP" />
<option name="run-command" value="wm dismiss-keyguard" />
<!-- Dismiss any system dialogs (e.g. crashes, ANR). -->
diff --git a/tests/functional/safetycenter/subpages/AndroidTest.xml b/tests/functional/safetycenter/subpages/AndroidTest.xml
index c3245e9d7..ac493841f 100644
--- a/tests/functional/safetycenter/subpages/AndroidTest.xml
+++ b/tests/functional/safetycenter/subpages/AndroidTest.xml
@@ -47,6 +47,10 @@
<!-- Disable syncing to prevent overwriting flags during testing. -->
<option name="run-command" value="device_config set_sync_disabled_for_tests persistent" />
<option name="teardown-command" value="device_config set_sync_disabled_for_tests none" />
+ <!-- Belt-and-braces attempt to dismiss keyguard. Tradefed should have already done this
+ for us, but this is a precaution in an attempt to mitigate b/379620557. -->
+ <option name="run-command" value="input keyevent KEYCODE_WAKEUP" />
+ <option name="run-command" value="wm dismiss-keyguard" />
<!-- Dismiss any system dialogs (e.g. crashes, ANR). -->
<option name="run-command" value="am broadcast -a android.intent.action.CLOSE_SYSTEM_DIALOGS --receiver-foreground" />
</target_preparer>
diff --git a/tests/hostside/safetycenter/AndroidTest.xml b/tests/hostside/safetycenter/AndroidTest.xml
index a28b70c3c..41f0bcc40 100644
--- a/tests/hostside/safetycenter/AndroidTest.xml
+++ b/tests/hostside/safetycenter/AndroidTest.xml
@@ -32,6 +32,10 @@
<!-- Disable syncing to prevent overwriting flags during testing. -->
<option name="run-command" value="device_config set_sync_disabled_for_tests persistent" />
<option name="teardown-command" value="device_config set_sync_disabled_for_tests none" />
+ <!-- Belt-and-braces attempt to dismiss keyguard. Tradefed should have already done this
+ for us, but this is a precaution in an attempt to mitigate b/379620557. -->
+ <option name="run-command" value="input keyevent KEYCODE_WAKEUP" />
+ <option name="run-command" value="wm dismiss-keyguard" />
<!-- Dismiss any system dialogs (e.g. crashes, ANR). -->
<option name="run-command" value="am broadcast -a android.intent.action.CLOSE_SYSTEM_DIALOGS --receiver-foreground" />
</target_preparer>