summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/cts/permissionui/src/android/permissionui/cts/AppDataSharingUpdatesTest.kt7
-rw-r--r--tests/cts/permissionui/src/android/permissionui/cts/BasePermissionTest.kt15
-rw-r--r--tests/cts/permissionui/src/android/permissionui/cts/BaseUsePermissionTest.kt210
-rw-r--r--tests/cts/permissionui/src/android/permissionui/cts/CameraMicIndicatorsPermissionTest.kt7
-rw-r--r--tests/cts/permissionui/src/android/permissionui/cts/LocationAccuracyTest.kt3
-rw-r--r--tests/cts/permissionui/src/android/permissionui/cts/LocationProviderInterceptDialogTest.kt28
-rw-r--r--tests/cts/permissionui/src/android/permissionui/cts/MediaPermissionTest.kt6
-rw-r--r--tests/cts/permissionui/src/android/permissionui/cts/MediaPermissionUpgradeTest.kt3
-rw-r--r--tests/cts/permissionui/src/android/permissionui/cts/NotificationPermissionTest.kt6
-rw-r--r--tests/cts/permissionui/src/android/permissionui/cts/PermissionDecisionsTest.kt17
-rw-r--r--tests/cts/permissionui/src/android/permissionui/cts/PermissionGroupTest.kt7
-rw-r--r--tests/cts/permissionui/src/android/permissionui/cts/PermissionRationalePermissionGrantDialogTest.kt2
-rw-r--r--tests/cts/permissionui/src/android/permissionui/cts/PermissionRationaleTest.kt19
-rw-r--r--tests/cts/permissionui/src/android/permissionui/cts/PermissionReviewTest.kt1
-rw-r--r--tests/cts/permissionui/src/android/permissionui/cts/PermissionSplitTest.kt14
-rwxr-xr-xtests/cts/permissionui/src/android/permissionui/cts/PermissionTest22.kt3
-rw-r--r--tests/cts/permissionui/src/android/permissionui/cts/PermissionTest23.kt30
-rw-r--r--tests/cts/permissionui/src/android/permissionui/cts/PermissionTest29.kt33
-rw-r--r--tests/cts/permissionui/src/android/permissionui/cts/PermissionTest30.kt16
-rw-r--r--tests/cts/permissionui/src/android/permissionui/cts/PermissionUsageInfoTest.kt19
-rw-r--r--tests/cts/permissionui/src/android/permissionui/cts/PhotoPickerPermissionTest.kt134
-rw-r--r--tests/cts/permissionui/src/android/permissionui/cts/ReviewAccessibilityServicesTest.kt25
22 files changed, 373 insertions, 232 deletions
diff --git a/tests/cts/permissionui/src/android/permissionui/cts/AppDataSharingUpdatesTest.kt b/tests/cts/permissionui/src/android/permissionui/cts/AppDataSharingUpdatesTest.kt
index 6b7fe51f8..efdbea6d1 100644
--- a/tests/cts/permissionui/src/android/permissionui/cts/AppDataSharingUpdatesTest.kt
+++ b/tests/cts/permissionui/src/android/permissionui/cts/AppDataSharingUpdatesTest.kt
@@ -258,10 +258,8 @@ class AppDataSharingUpdatesTest : BaseUsePermissionTest() {
try {
findView(By.descContains(DATA_SHARING_UPDATES), true)
findView(By.textContains(LEARN_ABOUT_DATA_SHARING), true)
- waitForIdle()
- click(By.textContains(LEARN_ABOUT_DATA_SHARING))
- waitForIdle()
+ clickAndWaitForWindowTransition(By.textContains(LEARN_ABOUT_DATA_SHARING))
eventually({assertHelpCenterLinkClickSuccessful()}, HELP_CENTER_TIMEOUT_MILLIS)
} finally {
@@ -297,9 +295,8 @@ class AppDataSharingUpdatesTest : BaseUsePermissionTest() {
findView(By.descContains(DATA_SHARING_UPDATES), true)
findView(By.textContains(UPDATES_IN_LAST_30_DAYS), true)
findView(By.textContains(APP_PACKAGE_NAME_SUBSTRING), true)
- waitForIdle()
- click(By.textContains(APP_PACKAGE_NAME_SUBSTRING))
+ clickAndWaitForWindowTransition(By.textContains(APP_PACKAGE_NAME_SUBSTRING))
findView(By.descContains(LOCATION_PERMISSION), true)
findView(By.textContains(APP_PACKAGE_NAME), true)
diff --git a/tests/cts/permissionui/src/android/permissionui/cts/BasePermissionTest.kt b/tests/cts/permissionui/src/android/permissionui/cts/BasePermissionTest.kt
index 5028384dc..a99357ba0 100644
--- a/tests/cts/permissionui/src/android/permissionui/cts/BasePermissionTest.kt
+++ b/tests/cts/permissionui/src/android/permissionui/cts/BasePermissionTest.kt
@@ -51,6 +51,7 @@ import androidx.test.uiautomator.UiDevice
import androidx.test.uiautomator.UiObject2
import androidx.test.uiautomator.UiScrollable
import androidx.test.uiautomator.UiSelector
+import androidx.test.uiautomator.Until
import com.android.compatibility.common.util.DisableAnimationRule
import com.android.compatibility.common.util.FreezeRotationRule
import com.android.compatibility.common.util.SystemUtil.runShellCommand
@@ -86,6 +87,7 @@ abstract class BasePermissionTest {
const val UNEXPECTED_TIMEOUT_MILLIS = 1000
const val TIMEOUT_MILLIS: Long = 20000
const val PACKAGE_INSTALLER_TIMEOUT = 60000L
+ const val NEW_WINDOW_TIMEOUT_MILLIS: Long = 20_000
@JvmStatic
protected val instrumentation: Instrumentation =
@@ -283,23 +285,19 @@ abstract class BasePermissionTest {
}
protected fun waitFindObject(selector: BySelector): UiObject2 {
- waitForIdle()
return findObjectWithRetry({ t -> UiAutomatorUtils2.waitFindObject(selector, t) })!!
}
protected fun waitFindObject(selector: BySelector, timeoutMillis: Long): UiObject2 {
- waitForIdle()
return findObjectWithRetry({ t -> UiAutomatorUtils2.waitFindObject(selector, t) },
timeoutMillis)!!
}
protected fun waitFindObjectOrNull(selector: BySelector): UiObject2? {
- waitForIdle()
return findObjectWithRetry({ t -> UiAutomatorUtils2.waitFindObjectOrNull(selector, t) })
}
protected fun waitFindObjectOrNull(selector: BySelector, timeoutMillis: Long): UiObject2? {
- waitForIdle()
return findObjectWithRetry({ t -> UiAutomatorUtils2.waitFindObjectOrNull(selector, t) },
timeoutMillis)
}
@@ -308,7 +306,6 @@ abstract class BasePermissionTest {
automatorMethod: (timeoutMillis: Long) -> UiObject2?,
timeoutMillis: Long = 20_000L
): UiObject2? {
- waitForIdle()
val startTime = SystemClock.elapsedRealtime()
return try {
automatorMethod(timeoutMillis)
@@ -323,7 +320,11 @@ abstract class BasePermissionTest {
protected fun click(selector: BySelector, timeoutMillis: Long = 20_000) {
waitFindObject(selector, timeoutMillis).click()
- waitForIdle()
+ }
+
+ protected fun clickAndWaitForWindowTransition(selector: BySelector, timeoutMillis: Long = 20_000) {
+ waitFindObject(selector, timeoutMillis)
+ .clickAndWait(Until.newWindow(), NEW_WINDOW_TIMEOUT_MILLIS)
}
protected fun findView(selector: BySelector, expected: Boolean) {
@@ -374,12 +375,10 @@ abstract class BasePermissionTest {
protected fun pressBack() {
uiDevice.pressBack()
- waitForIdle()
}
protected fun pressHome() {
uiDevice.pressHome()
- waitForIdle()
}
protected fun pressDPadDown() {
diff --git a/tests/cts/permissionui/src/android/permissionui/cts/BaseUsePermissionTest.kt b/tests/cts/permissionui/src/android/permissionui/cts/BaseUsePermissionTest.kt
index ef5208c09..58165574b 100644
--- a/tests/cts/permissionui/src/android/permissionui/cts/BaseUsePermissionTest.kt
+++ b/tests/cts/permissionui/src/android/permissionui/cts/BaseUsePermissionTest.kt
@@ -44,6 +44,7 @@ import androidx.test.uiautomator.StaleObjectException
import androidx.test.uiautomator.UiObjectNotFoundException
import androidx.test.uiautomator.UiScrollable
import androidx.test.uiautomator.UiSelector
+import androidx.test.uiautomator.Until
import com.android.compatibility.common.util.SystemUtil
import com.android.compatibility.common.util.SystemUtil.callWithShellPermissionIdentity
import com.android.compatibility.common.util.SystemUtil.eventually
@@ -56,6 +57,7 @@ import org.junit.Assert.assertEquals
import org.junit.Assert.assertNotNull
import org.junit.Assert.assertTrue
import org.junit.Before
+import java.util.concurrent.CompletableFuture
abstract class BaseUsePermissionTest : BasePermissionTest() {
companion object {
@@ -358,7 +360,6 @@ abstract class BaseUsePermissionTest : BasePermissionTest() {
return
}
- waitForIdle()
waitFindObjectOrNull(By.res("android:id/button1"), timeoutMillis)?.let {
try {
it.click()
@@ -381,15 +382,16 @@ abstract class BaseUsePermissionTest : BasePermissionTest() {
protected fun clickPermissionReviewContinue() {
if (isAutomotive || isWatch) {
- click(By.text(getPermissionControllerString("review_button_continue")))
+ clickAndWaitForWindowTransition(
+ By.text(getPermissionControllerString("review_button_continue")))
} else {
- click(By.res("com.android.permissioncontroller:id/continue_button"))
+ clickAndWaitForWindowTransition(
+ By.res("com.android.permissioncontroller:id/continue_button"))
}
}
protected fun clickPermissionReviewContinueAndClearSdkWarning() {
clickPermissionReviewContinue()
- waitForIdle()
clearTargetSdkWarning()
}
@@ -530,16 +532,15 @@ abstract class BaseUsePermissionTest : BasePermissionTest() {
protected fun clickPermissionReviewCancel() {
if (isAutomotive || isWatch) {
- click(By.text(getPermissionControllerString("review_button_cancel")))
+ clickAndWaitForWindowTransition(By.text(getPermissionControllerString("review_button_cancel")))
} else {
- click(By.res("com.android.permissioncontroller:id/cancel_button"))
+ clickAndWaitForWindowTransition(By.res("com.android.permissioncontroller:id/cancel_button"))
}
}
protected fun approvePermissionReview() {
startAppActivityAndAssertResultCode(Activity.RESULT_OK) {
clickPermissionReviewContinueAndClearSdkWarning()
- waitForIdle()
}
}
@@ -572,54 +573,70 @@ abstract class BaseUsePermissionTest : BasePermissionTest() {
protected inline fun requestAppPermissionsForNoResult(
vararg permissions: String?,
- block: () -> Unit
+ crossinline block: () -> Unit
) {
// Request the permissions
- context.startActivity(
- Intent().apply {
- component = ComponentName(
- APP_PACKAGE_NAME, "$APP_PACKAGE_NAME.RequestPermissionsActivity"
- )
- putExtra("$APP_PACKAGE_NAME.PERMISSIONS", permissions)
- addFlags(FLAG_ACTIVITY_NEW_TASK or FLAG_ACTIVITY_CLEAR_TASK)
- }
- )
- waitForIdle()
+ doAndWaitForWindowTransition {
+ context.startActivity(
+ Intent().apply {
+ component = ComponentName(
+ APP_PACKAGE_NAME, "$APP_PACKAGE_NAME.RequestPermissionsActivity"
+ )
+ putExtra("$APP_PACKAGE_NAME.PERMISSIONS", permissions)
+ addFlags(FLAG_ACTIVITY_NEW_TASK or FLAG_ACTIVITY_CLEAR_TASK)
+ }
+ )
+ }
// Perform the post-request action
block()
}
protected inline fun requestAppPermissions(
- vararg permissions: String?,
- askTwice: Boolean = false,
- block: () -> Unit
+ vararg permissions: String?,
+ askTwice: Boolean = false,
+ waitForWindowTransition: Boolean = true,
+ crossinline block: () -> Unit
): Instrumentation.ActivityResult {
// Request the permissions
- val future = startActivityForFuture(
- Intent().apply {
- component = ComponentName(
- APP_PACKAGE_NAME, "$APP_PACKAGE_NAME.RequestPermissionsActivity"
- )
- putExtra("$APP_PACKAGE_NAME.PERMISSIONS", permissions)
- putExtra("$APP_PACKAGE_NAME.ASK_TWICE", askTwice)
- }
- )
- waitForIdle()
+ lateinit var future: CompletableFuture<Instrumentation.ActivityResult>
+ doAndWaitForWindowTransition {
+ future = startActivityForFuture(
+ Intent().apply {
+ component = ComponentName(
+ APP_PACKAGE_NAME, "$APP_PACKAGE_NAME.RequestPermissionsActivity"
+ )
+ putExtra("$APP_PACKAGE_NAME.PERMISSIONS", permissions)
+ putExtra("$APP_PACKAGE_NAME.ASK_TWICE", askTwice)
+ }
+ )
+ }
// Notification permission prompt is shown first, so get it out of the way
clickNotificationPermissionRequestAllowButtonIfAvailable()
// Perform the post-request action
- block()
+ if (waitForWindowTransition) {
+ doAndWaitForWindowTransition {
+ block()
+ }
+ } else {
+ block()
+ }
return future.get(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)
}
protected inline fun requestAppPermissionsAndAssertResult(
- permissions: Array<out String?>,
- permissionAndExpectedGrantResults: Array<out Pair<String?, Boolean>>,
- askTwice: Boolean = false,
- block: () -> Unit
+ permissions: Array<out String?>,
+ permissionAndExpectedGrantResults: Array<out Pair<String?, Boolean>>,
+ askTwice: Boolean = false,
+ waitForWindowTransition: Boolean = true,
+ crossinline block: () -> Unit
) {
- val result = requestAppPermissions(*permissions, askTwice = askTwice, block = block)
+ val result = requestAppPermissions(
+ *permissions,
+ askTwice = askTwice,
+ waitForWindowTransition = waitForWindowTransition,
+ block = block
+ )
assertEquals(Activity.RESULT_OK, result.resultCode)
val responseSize: Int =
@@ -643,6 +660,7 @@ abstract class BaseUsePermissionTest : BasePermissionTest() {
.map { it == PackageManager.PERMISSION_GRANTED }
)
)
+
permissionAndExpectedGrantResults.forEach {
it.first?.let { permission ->
assertAppHasPermission(permission, it.second)
@@ -651,15 +669,29 @@ abstract class BaseUsePermissionTest : BasePermissionTest() {
}
protected inline fun requestAppPermissionsAndAssertResult(
- vararg permissionAndExpectedGrantResults: Pair<String?, Boolean>,
- askTwice: Boolean = false,
- block: () -> Unit
- ) = requestAppPermissionsAndAssertResult(
- permissionAndExpectedGrantResults.map { it.first }.toTypedArray(),
- permissionAndExpectedGrantResults,
- askTwice,
- block
- )
+ vararg permissionAndExpectedGrantResults: Pair<String?, Boolean>,
+ askTwice: Boolean = false,
+ waitForWindowTransition: Boolean = true,
+ crossinline block: () -> Unit
+ ) {
+ requestAppPermissionsAndAssertResult(
+ permissionAndExpectedGrantResults.map { it.first }.toTypedArray(),
+ permissionAndExpectedGrantResults,
+ askTwice,
+ waitForWindowTransition,
+ block
+ )
+ }
+
+ // Performs the requested action and returns, waiting for a new window transition if at least
+ // one has not already occurred while the action took place.
+ protected inline fun doAndWaitForWindowTransition(
+ crossinline block: () -> Unit
+ ) {
+ uiDevice.performActionAndWait({
+ block()
+ }, Until.newWindow(), NEW_WINDOW_TIMEOUT_MILLIS)
+ }
protected fun findPermissionRequestAllowButton(timeoutMillis: Long = 20000) {
if (isAutomotive) {
@@ -740,7 +772,7 @@ abstract class BaseUsePermissionTest : BasePermissionTest() {
protected fun clickPermissionRequestAllowForegroundButton(timeoutMillis: Long = 10_000) {
if (isAutomotive) {
click(By.text(
- getPermissionControllerString(ALLOW_FOREGROUND_BUTTON_TEXT)), timeoutMillis)
+ getPermissionControllerString(ALLOW_FOREGROUND_BUTTON_TEXT)), timeoutMillis)
} else {
click(By.res(ALLOW_FOREGROUND_BUTTON), timeoutMillis)
}
@@ -759,12 +791,10 @@ abstract class BaseUsePermissionTest : BasePermissionTest() {
eventually({
clicksDenyInSettings()
}, TIMEOUT_MILLIS * 2)
- waitForIdle()
pressBack()
}
protected fun clickPermissionRequestSettingsLink() {
- waitForIdle()
eventually {
// UiObject2 doesn't expose CharSequence.
val node = if (isAutomotive) {
@@ -784,9 +814,10 @@ abstract class BaseUsePermissionTest : BasePermissionTest() {
val text = node.text as Spanned
val clickableSpan = text.getSpans(0, text.length, ClickableSpan::class.java)[0]
// We could pass in null here in Java, but we need an instance in Kotlin.
- clickableSpan.onClick(View(context))
+ doAndWaitForWindowTransition {
+ clickableSpan.onClick(View(context))
+ }
}
- waitForIdle()
}
protected fun clickPermissionRequestDenyAndDontAskAgainButton() {
@@ -819,13 +850,11 @@ abstract class BaseUsePermissionTest : BasePermissionTest() {
}
protected fun clickPermissionRationaleContentInAppPermission() {
- waitForIdle()
- click(By.res(APP_PERMISSION_RATIONALE_CONTENT_VIEW))
+ clickAndWaitForWindowTransition(By.res(APP_PERMISSION_RATIONALE_CONTENT_VIEW))
}
protected fun clickPermissionRationaleViewInGrantDialog() {
- waitForIdle()
- click(By.res(GRANT_DIALOG_PERMISSION_RATIONALE_CONTAINER_VIEW))
+ clickAndWaitForWindowTransition(By.res(GRANT_DIALOG_PERMISSION_RATIONALE_CONTAINER_VIEW))
}
protected fun grantAppPermissionsByUi(vararg permissions: String) {
@@ -863,23 +892,24 @@ abstract class BaseUsePermissionTest : BasePermissionTest() {
eventually({
try {
// Open the app details settings
- context.startActivity(
- Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply {
- data = Uri.fromParts("package", APP_PACKAGE_NAME, null)
- addCategory(Intent.CATEGORY_DEFAULT)
- addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
- addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
- }
- )
+ doAndWaitForWindowTransition {
+ context.startActivity(
+ Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply {
+ data = Uri.fromParts("package", APP_PACKAGE_NAME, null)
+ addCategory(Intent.CATEGORY_DEFAULT)
+ addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+ addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
+ }
+ )
+ }
if (isTv) {
- waitForIdle()
pressDPadDown()
pressDPadDown()
pressDPadDown()
pressDPadDown()
}
// Open the permissions UI
- click(byTextRes(R.string.permissions).enabled(true))
+ clickAndWaitForWindowTransition(byTextRes(R.string.permissions).enabled(true))
} catch (e: Exception) {
pressBack()
throw e
@@ -907,32 +937,35 @@ abstract class BaseUsePermissionTest : BasePermissionTest() {
navigateToAppPermissionSettings()
val permissionLabel = getPermissionLabel(permission)
if (isWatch) {
- click(By.text(permissionLabel), 40_000)
+ clickAndWaitForWindowTransition(By.text(permissionLabel), 40_000)
} else {
clickPermissionControllerUi(By.text(permissionLabel))
}
return
}
-
- runWithShellPermissionIdentity {
- context.startActivity(
- Intent(Intent.ACTION_MANAGE_APP_PERMISSION).apply {
- putExtra(Intent.EXTRA_PACKAGE_NAME, APP_PACKAGE_NAME)
- putExtra(Intent.EXTRA_PERMISSION_NAME, permission)
- putExtra(Intent.EXTRA_USER, Process.myUserHandle())
- addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
- addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
- })
+ doAndWaitForWindowTransition {
+ runWithShellPermissionIdentity {
+ context.startActivity(
+ Intent(Intent.ACTION_MANAGE_APP_PERMISSION).apply {
+ putExtra(Intent.EXTRA_PACKAGE_NAME, APP_PACKAGE_NAME)
+ putExtra(Intent.EXTRA_PERMISSION_NAME, permission)
+ putExtra(Intent.EXTRA_USER, Process.myUserHandle())
+ addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+ addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
+ })
+ }
}
}
/** Starts activity with intent [ACTION_REVIEW_APP_DATA_SHARING_UPDATES]. */
fun startAppDataSharingUpdatesActivity() {
- runWithShellPermissionIdentity {
- context.startActivity(
+ doAndWaitForWindowTransition {
+ runWithShellPermissionIdentity {
+ context.startActivity(
Intent(ACTION_REVIEW_APP_DATA_SHARING_UPDATES).apply {
addFlags(FLAG_ACTIVITY_NEW_TASK)
})
+ }
}
}
@@ -964,15 +997,17 @@ abstract class BaseUsePermissionTest : BasePermissionTest() {
clickPermissionControllerUi(By.text(permissionLabel))
}
} else {
- runWithShellPermissionIdentity {
- context.startActivity(
- Intent(Intent.ACTION_MANAGE_APP_PERMISSION).apply {
- putExtra(Intent.EXTRA_PACKAGE_NAME, APP_PACKAGE_NAME)
- putExtra(Intent.EXTRA_PERMISSION_NAME, permission)
- putExtra(Intent.EXTRA_USER, Process.myUserHandle())
- addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
- addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
- })
+ doAndWaitForWindowTransition {
+ runWithShellPermissionIdentity {
+ context.startActivity(
+ Intent(Intent.ACTION_MANAGE_APP_PERMISSION).apply {
+ putExtra(Intent.EXTRA_PACKAGE_NAME, APP_PACKAGE_NAME)
+ putExtra(Intent.EXTRA_PERMISSION_NAME, permission)
+ putExtra(Intent.EXTRA_USER, Process.myUserHandle())
+ addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+ addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
+ })
+ }
}
}
@@ -1181,7 +1216,6 @@ abstract class BaseUsePermissionTest : BasePermissionTest() {
)
}
)
- waitForIdle()
clickNotificationPermissionRequestAllowButtonIfAvailable()
val result = future.get(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)
assertEquals(Activity.RESULT_OK, result.resultCode)
diff --git a/tests/cts/permissionui/src/android/permissionui/cts/CameraMicIndicatorsPermissionTest.kt b/tests/cts/permissionui/src/android/permissionui/cts/CameraMicIndicatorsPermissionTest.kt
index 11d3845ba..df099658f 100644
--- a/tests/cts/permissionui/src/android/permissionui/cts/CameraMicIndicatorsPermissionTest.kt
+++ b/tests/cts/permissionui/src/android/permissionui/cts/CameraMicIndicatorsPermissionTest.kt
@@ -568,17 +568,12 @@ class CameraMicIndicatorsPermissionTest : StsExtraBusinessLogicTestCase {
private fun pressBack() {
uiDevice.pressBack()
- waitForIdle()
}
private fun pressHome() {
uiDevice.pressHome()
- waitForIdle()
}
- private fun waitForIdle() =
- uiAutomation.waitForIdle(IDLE_TIMEOUT_MILLIS, TIMEOUT_MILLIS)
-
private fun changeSafetyCenterFlag(safetyCenterEnabled: String) {
runWithShellPermissionIdentity {
DeviceConfig.setProperty(DeviceConfig.NAMESPACE_PRIVACY,
@@ -596,7 +591,6 @@ class CameraMicIndicatorsPermissionTest : StsExtraBusinessLogicTestCase {
}
protected fun waitFindObject(selector: BySelector): UiObject2? {
- waitForIdle()
return findObjectWithRetry({ t -> UiAutomatorUtils2.waitFindObject(selector, t) })
}
@@ -604,7 +598,6 @@ class CameraMicIndicatorsPermissionTest : StsExtraBusinessLogicTestCase {
automatorMethod: (timeoutMillis: Long) -> UiObject2?,
timeoutMillis: Long = TIMEOUT_MILLIS
): UiObject2? {
- waitForIdle()
val startTime = SystemClock.elapsedRealtime()
return try {
automatorMethod(timeoutMillis)
diff --git a/tests/cts/permissionui/src/android/permissionui/cts/LocationAccuracyTest.kt b/tests/cts/permissionui/src/android/permissionui/cts/LocationAccuracyTest.kt
index a904549b4..1a13d688f 100644
--- a/tests/cts/permissionui/src/android/permissionui/cts/LocationAccuracyTest.kt
+++ b/tests/cts/permissionui/src/android/permissionui/cts/LocationAccuracyTest.kt
@@ -145,7 +145,8 @@ class LocationAccuracyTest : BaseUsePermissionTest() {
}
assertAppHasPermission(ACCESS_FINE_LOCATION, false)
requestAppPermissionsAndAssertResult(
- ACCESS_FINE_LOCATION to true
+ ACCESS_FINE_LOCATION to true,
+ waitForWindowTransition = false
) { }
}
diff --git a/tests/cts/permissionui/src/android/permissionui/cts/LocationProviderInterceptDialogTest.kt b/tests/cts/permissionui/src/android/permissionui/cts/LocationProviderInterceptDialogTest.kt
index 13c366c4a..b6a8b3fbf 100644
--- a/tests/cts/permissionui/src/android/permissionui/cts/LocationProviderInterceptDialogTest.kt
+++ b/tests/cts/permissionui/src/android/permissionui/cts/LocationProviderInterceptDialogTest.kt
@@ -27,6 +27,7 @@ import android.permission.cts.PermissionUtils
import android.platform.test.annotations.FlakyTest
import androidx.test.filters.SdkSuppress
import androidx.test.uiautomator.By
+import androidx.test.uiautomator.Until
import com.android.compatibility.common.util.AppOpsUtils
import com.android.compatibility.common.util.CddTest
import com.android.compatibility.common.util.SystemUtil
@@ -67,7 +68,7 @@ class LocationProviderInterceptDialogTest : BaseUsePermissionTest() {
@MtsIgnore(bugId = 288471744)
fun clickLocationPermission_showDialog_clickOk() {
openPermissionScreenForApp()
- click(By.text("Location"))
+ clickAndWaitForWindowTransition(By.text("Location"))
findView(
By.textContains("Location access can be modified from location settings"),
true)
@@ -79,11 +80,11 @@ class LocationProviderInterceptDialogTest : BaseUsePermissionTest() {
@MtsIgnore(bugId = 288471744)
fun clickLocationPermission_showDialog_clickLocationAccess() {
openPermissionScreenForApp()
- click(By.text("Location"))
+ clickAndWaitForWindowTransition(By.text("Location"))
findView(
By.textContains("Location access can be modified from location settings"),
true)
- click(By.res(LOCATION_ACCESS_BUTTON_RES))
+ clickAndWaitForWindowTransition(By.res(LOCATION_ACCESS_BUTTON_RES))
findView(By.res(USE_LOCATION_LABEL_ID), true)
}
@@ -98,16 +99,17 @@ class LocationProviderInterceptDialogTest : BaseUsePermissionTest() {
private fun openPermissionScreenForApp() {
restartPermissionController()
- SystemUtil.runWithShellPermissionIdentity {
- context.startActivity(
- Intent(ACTION_MANAGE_APP_PERMISSIONS).apply {
- addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
- addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
- putExtra(EXTRA_PACKAGE_NAME, MIC_LOCATION_PROVIDER_APP_PACKAGE_NAME)
- }
- )
- }
- waitForIdle()
+ uiDevice.performActionAndWait({
+ SystemUtil.runWithShellPermissionIdentity {
+ context.startActivity(
+ Intent(ACTION_MANAGE_APP_PERMISSIONS).apply {
+ addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+ addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
+ putExtra(EXTRA_PACKAGE_NAME, MIC_LOCATION_PROVIDER_APP_PACKAGE_NAME)
+ }
+ )
+ }
+ }, Until.newWindow(), NEW_WINDOW_TIMEOUT_MILLIS)
}
private fun restartPermissionController() {
diff --git a/tests/cts/permissionui/src/android/permissionui/cts/MediaPermissionTest.kt b/tests/cts/permissionui/src/android/permissionui/cts/MediaPermissionTest.kt
index 1dc21fcea..3258efa3a 100644
--- a/tests/cts/permissionui/src/android/permissionui/cts/MediaPermissionTest.kt
+++ b/tests/cts/permissionui/src/android/permissionui/cts/MediaPermissionTest.kt
@@ -111,7 +111,8 @@ class MediaPermissionTest : BaseUsePermissionTest() {
installPackage(APP_APK_PATH_MEDIA_PERMISSION_33_WITH_STORAGE)
requestAppPermissions(
Manifest.permission.READ_EXTERNAL_STORAGE,
- Manifest.permission.WRITE_EXTERNAL_STORAGE
+ Manifest.permission.WRITE_EXTERNAL_STORAGE,
+ waitForWindowTransition = false
) {
}
assertStorageAndMediaPermissionState(false)
@@ -167,7 +168,8 @@ class MediaPermissionTest : BaseUsePermissionTest() {
setRevokeWhenRequested("android.permission.READ_MEDIA_IMAGES")
requestAppPermissionsAndAssertResult(
- Manifest.permission.READ_EXTERNAL_STORAGE to true
+ Manifest.permission.READ_EXTERNAL_STORAGE to true,
+ waitForWindowTransition = false
) {
// No dialog should appear
}
diff --git a/tests/cts/permissionui/src/android/permissionui/cts/MediaPermissionUpgradeTest.kt b/tests/cts/permissionui/src/android/permissionui/cts/MediaPermissionUpgradeTest.kt
index bed5c225f..17a7a8c5c 100644
--- a/tests/cts/permissionui/src/android/permissionui/cts/MediaPermissionUpgradeTest.kt
+++ b/tests/cts/permissionui/src/android/permissionui/cts/MediaPermissionUpgradeTest.kt
@@ -52,7 +52,8 @@ class MediaPermissionUpgradeTest : BaseUsePermissionTest() {
requestAppPermissionsAndAssertResult(
READ_MEDIA_AUDIO to true,
READ_MEDIA_VIDEO to true,
- READ_MEDIA_IMAGES to true
+ READ_MEDIA_IMAGES to true,
+ waitForWindowTransition = false
) {
// Don't click any grant dialog buttons because no grant dialog should appear
}
diff --git a/tests/cts/permissionui/src/android/permissionui/cts/NotificationPermissionTest.kt b/tests/cts/permissionui/src/android/permissionui/cts/NotificationPermissionTest.kt
index f7dfbfdf5..33b01307b 100644
--- a/tests/cts/permissionui/src/android/permissionui/cts/NotificationPermissionTest.kt
+++ b/tests/cts/permissionui/src/android/permissionui/cts/NotificationPermissionTest.kt
@@ -32,6 +32,7 @@ import android.platform.test.annotations.FlakyTest
import android.provider.Settings
import androidx.test.filters.SdkSuppress
import androidx.test.uiautomator.By
+import androidx.test.uiautomator.Until
import com.android.compatibility.common.util.SystemUtil
import com.android.compatibility.common.util.SystemUtil.callWithShellPermissionIdentity
import com.android.compatibility.common.util.SystemUtil.runWithShellPermissionIdentity
@@ -388,13 +389,14 @@ class NotificationPermissionTest : BaseUsePermissionTest() {
val options = ActivityOptions.makeBasic()
options.isEligibleForLegacyPermissionPrompt = isEligibleForPromptOption
- context.startActivity(intent, options.toBundle())
+ uiDevice.performActionAndWait({
+ context.startActivity(intent, options.toBundle())
+ }, Until.newWindow(), NEW_WINDOW_TIMEOUT_MILLIS)
// Watch does not have app bar
if (!isWatch) {
waitFindObject(By.textContains(ACTIVITY_LABEL))
}
- waitForIdle()
}
private fun assertDialogNotShowing(timeoutMillis: Long = EXPECTED_TIMEOUT_MS) {
diff --git a/tests/cts/permissionui/src/android/permissionui/cts/PermissionDecisionsTest.kt b/tests/cts/permissionui/src/android/permissionui/cts/PermissionDecisionsTest.kt
index ad7da60ae..36c5f455a 100644
--- a/tests/cts/permissionui/src/android/permissionui/cts/PermissionDecisionsTest.kt
+++ b/tests/cts/permissionui/src/android/permissionui/cts/PermissionDecisionsTest.kt
@@ -23,6 +23,7 @@ import android.permission.PermissionManager
import android.platform.test.annotations.FlakyTest
import androidx.test.filters.SdkSuppress
import androidx.test.uiautomator.By
+import androidx.test.uiautomator.Until
import com.android.compatibility.common.util.SystemUtil
import org.junit.Assert.assertNull
import org.junit.Assume.assumeTrue
@@ -118,12 +119,14 @@ class PermissionDecisionsTest : BaseUsePermissionTest() {
}
private fun openPermissionDecisions() {
- SystemUtil.runWithShellPermissionIdentity {
- context.startActivity(
- Intent(PermissionManager.ACTION_REVIEW_PERMISSION_DECISIONS).apply {
- addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
- }
- )
- }
+ uiDevice.performActionAndWait({
+ SystemUtil.runWithShellPermissionIdentity {
+ context.startActivity(
+ Intent(PermissionManager.ACTION_REVIEW_PERMISSION_DECISIONS).apply {
+ addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+ }
+ )
+ }
+ }, Until.newWindow(), NEW_WINDOW_TIMEOUT_MILLIS)
}
}
diff --git a/tests/cts/permissionui/src/android/permissionui/cts/PermissionGroupTest.kt b/tests/cts/permissionui/src/android/permissionui/cts/PermissionGroupTest.kt
index 6c2fe25e5..182fb4164 100644
--- a/tests/cts/permissionui/src/android/permissionui/cts/PermissionGroupTest.kt
+++ b/tests/cts/permissionui/src/android/permissionui/cts/PermissionGroupTest.kt
@@ -62,8 +62,11 @@ class PermissionGroupTest : BaseUsePermissionTest() {
assertAppHasPermission(android.Manifest.permission.RECEIVE_SMS, true)
// Request both permissions, and expect that SEND_SMS is granted
- requestAppPermissionsAndAssertResult(android.Manifest.permission.RECEIVE_SMS to true,
- android.Manifest.permission.SEND_SMS to true) { }
+ requestAppPermissionsAndAssertResult(
+ android.Manifest.permission.RECEIVE_SMS to true,
+ android.Manifest.permission.SEND_SMS to true,
+ waitForWindowTransition = false
+ ) { }
assertAppHasPermission(android.Manifest.permission.SEND_SMS, true)
}
diff --git a/tests/cts/permissionui/src/android/permissionui/cts/PermissionRationalePermissionGrantDialogTest.kt b/tests/cts/permissionui/src/android/permissionui/cts/PermissionRationalePermissionGrantDialogTest.kt
index 06b4552f4..74f3d74ea 100644
--- a/tests/cts/permissionui/src/android/permissionui/cts/PermissionRationalePermissionGrantDialogTest.kt
+++ b/tests/cts/permissionui/src/android/permissionui/cts/PermissionRationalePermissionGrantDialogTest.kt
@@ -276,10 +276,8 @@ class PermissionRationalePermissionGrantDialogTest : BaseUsePermissionTest() {
requestAppPermissionsForNoResult(ACCESS_FINE_LOCATION) {
clickPermissionRationaleViewInGrantDialog()
- waitForIdle()
assertPermissionRationaleDialogIsVisible(true)
pressBack()
- waitForIdle()
assertPermissionRationaleDialogIsVisible(false)
assertPermissionRationaleContainerOnGrantDialogIsVisible(true)
}
diff --git a/tests/cts/permissionui/src/android/permissionui/cts/PermissionRationaleTest.kt b/tests/cts/permissionui/src/android/permissionui/cts/PermissionRationaleTest.kt
index cf080f745..feac46ec9 100644
--- a/tests/cts/permissionui/src/android/permissionui/cts/PermissionRationaleTest.kt
+++ b/tests/cts/permissionui/src/android/permissionui/cts/PermissionRationaleTest.kt
@@ -30,6 +30,7 @@ import android.util.Log
import android.view.View
import androidx.test.filters.SdkSuppress
import androidx.test.uiautomator.By
+import androidx.test.uiautomator.Until
import com.android.compatibility.common.util.DeviceConfigStateChangerRule
import com.android.compatibility.common.util.SystemUtil
import com.android.compatibility.common.util.SystemUtil.eventually
@@ -148,7 +149,7 @@ class PermissionRationaleTest : BaseUsePermissionTest() {
clickHelpCenterLink()
- eventually({assertHelpCenterLinkClickSuccessful()}, HELP_CENTER_TIMEOUT_MILLIS)
+ eventually({assertHelpCenterLinkClickSuccessful()}, NEW_WINDOW_TIMEOUT_MILLIS)
}
@Test
@@ -235,9 +236,10 @@ class PermissionRationaleTest : BaseUsePermissionTest() {
val text = node.text as Spanned
val clickableSpan = text.getSpans(0, text.length, ClickableSpan::class.java)[0]
// We could pass in null here in Java, but we need an instance in Kotlin.
- clickableSpan.onClick(View(context))
+ uiDevice.performActionAndWait({
+ clickableSpan.onClick(View(context))
+ }, Until.newWindow(), NEW_WINDOW_TIMEOUT_MILLIS)
}
- waitForIdle()
}
private fun clickHelpCenterLink() {
@@ -252,9 +254,10 @@ class PermissionRationaleTest : BaseUsePermissionTest() {
val text = node.text as Spanned
val clickableSpan = text.getSpans(0, text.length, ClickableSpan::class.java)[0]
// We could pass in null here in Java, but we need an instance in Kotlin.
- clickableSpan.onClick(View(context))
+ uiDevice.performActionAndWait({
+ clickableSpan.onClick(View(context))
+ }, Until.newWindow(), NEW_WINDOW_TIMEOUT_MILLIS)
}
- waitForIdle()
}
private fun clickSettingsLink() {
@@ -269,9 +272,10 @@ class PermissionRationaleTest : BaseUsePermissionTest() {
val text = node.text as Spanned
val clickableSpan = text.getSpans(0, text.length, ClickableSpan::class.java)[0]
// We could pass in null here in Java, but we need an instance in Kotlin.
- clickableSpan.onClick(View(context))
+ uiDevice.performActionAndWait({
+ clickableSpan.onClick(View(context))
+ }, Until.newWindow(), NEW_WINDOW_TIMEOUT_MILLIS)
}
- waitForIdle()
}
private fun clicksSettings_doesNothing_leaves() {
@@ -391,6 +395,5 @@ class PermissionRationaleTest : BaseUsePermissionTest() {
"com.android.permissioncontroller:id/settings_message"
private const val HELP_CENTER_URL_ID = "data_sharing_help_center_link"
- private const val HELP_CENTER_TIMEOUT_MILLIS: Long = 20000
}
}
diff --git a/tests/cts/permissionui/src/android/permissionui/cts/PermissionReviewTest.kt b/tests/cts/permissionui/src/android/permissionui/cts/PermissionReviewTest.kt
index 8e890b230..ea834210f 100644
--- a/tests/cts/permissionui/src/android/permissionui/cts/PermissionReviewTest.kt
+++ b/tests/cts/permissionui/src/android/permissionui/cts/PermissionReviewTest.kt
@@ -95,6 +95,7 @@ class PermissionReviewTest : BaseUsePermissionTest() {
startAppActivityAndAssertResultCode(Activity.RESULT_OK) {
// Deny
clickPermissionControllerUi(By.text("Calendar"))
+
// Confirm deny
click(By.res("android:id/button1"))
diff --git a/tests/cts/permissionui/src/android/permissionui/cts/PermissionSplitTest.kt b/tests/cts/permissionui/src/android/permissionui/cts/PermissionSplitTest.kt
index bfd0e4bac..8319c1c68 100644
--- a/tests/cts/permissionui/src/android/permissionui/cts/PermissionSplitTest.kt
+++ b/tests/cts/permissionui/src/android/permissionui/cts/PermissionSplitTest.kt
@@ -83,12 +83,15 @@ class PermissionSplitTest : BaseUsePermissionTest() {
assertAppHasPermission(android.Manifest.permission.ACCESS_BACKGROUND_LOCATION, false)
requestAppPermissionsAndAssertResult(
- android.Manifest.permission.ACCESS_FINE_LOCATION to true
+ android.Manifest.permission.ACCESS_FINE_LOCATION to true,
+ waitForWindowTransition = false
) {
if (expectSplit) {
clickPermissionRequestSettingsLinkAndAllowAlways()
} else {
- clickPermissionRequestAllowForegroundButton()
+ doAndWaitForWindowTransition {
+ clickPermissionRequestAllowForegroundButton()
+ }
}
}
@@ -100,12 +103,15 @@ class PermissionSplitTest : BaseUsePermissionTest() {
assertAppHasPermission(android.Manifest.permission.BODY_SENSORS_BACKGROUND, false)
requestAppPermissionsAndAssertResult(
- android.Manifest.permission.BODY_SENSORS to true
+ android.Manifest.permission.BODY_SENSORS to true,
+ waitForWindowTransition = false
) {
if (expectSplit) {
clickPermissionRequestSettingsLinkAndAllowAlways()
} else {
- clickPermissionRequestAllowForegroundButton()
+ doAndWaitForWindowTransition {
+ clickPermissionRequestAllowForegroundButton()
+ }
}
}
diff --git a/tests/cts/permissionui/src/android/permissionui/cts/PermissionTest22.kt b/tests/cts/permissionui/src/android/permissionui/cts/PermissionTest22.kt
index 6206a0300..a0db7eb7f 100755
--- a/tests/cts/permissionui/src/android/permissionui/cts/PermissionTest22.kt
+++ b/tests/cts/permissionui/src/android/permissionui/cts/PermissionTest22.kt
@@ -60,7 +60,8 @@ class PermissionTest22 : BaseUsePermissionTest() {
// Request the permission and do nothing
// Expect the permission is not granted
requestAppPermissionsAndAssertResult(
- arrayOf(android.Manifest.permission.SEND_SMS), emptyArray()
+ arrayOf(android.Manifest.permission.SEND_SMS), emptyArray(),
+ waitForWindowTransition = false
) {}
}
}
diff --git a/tests/cts/permissionui/src/android/permissionui/cts/PermissionTest23.kt b/tests/cts/permissionui/src/android/permissionui/cts/PermissionTest23.kt
index cc29fd328..a7a8a533c 100644
--- a/tests/cts/permissionui/src/android/permissionui/cts/PermissionTest23.kt
+++ b/tests/cts/permissionui/src/android/permissionui/cts/PermissionTest23.kt
@@ -116,7 +116,10 @@ class PermissionTest23 : BaseUsePermissionTest() {
// Request the permission and do nothing
// Expect the permission is granted
- requestAppPermissionsAndAssertResult(android.Manifest.permission.WRITE_CONTACTS to true) {}
+ requestAppPermissionsAndAssertResult(
+ android.Manifest.permission.WRITE_CONTACTS to true,
+ waitForWindowTransition = false
+ ) {}
}
@Test
@@ -136,7 +139,10 @@ class PermissionTest23 : BaseUsePermissionTest() {
// Request the permission and do nothing
// Expect the permission is not granted
- requestAppPermissionsAndAssertResult(android.Manifest.permission.WRITE_CONTACTS to false) {}
+ requestAppPermissionsAndAssertResult(
+ android.Manifest.permission.WRITE_CONTACTS to false,
+ waitForWindowTransition = false
+ ) {}
}
@FlakyTest
@@ -170,7 +176,6 @@ class PermissionTest23 : BaseUsePermissionTest() {
askTwice = true
) {
clickPermissionRequestDenyButton()
- waitForIdle()
denyPermissionRequestWithPrejudice()
}
@@ -197,7 +202,8 @@ class PermissionTest23 : BaseUsePermissionTest() {
// Request the permission and do nothing
// Expect the permission is not granted
requestAppPermissionsAndAssertResult(
- android.Manifest.permission.BIND_PRINT_SERVICE to false
+ android.Manifest.permission.BIND_PRINT_SERVICE to false,
+ waitForWindowTransition = false
) {}
}
@@ -208,7 +214,10 @@ class PermissionTest23 : BaseUsePermissionTest() {
// Request the permission and do nothing
// Expect the permission is not granted
- requestAppPermissionsAndAssertResult(NON_EXISTENT_PERMISSION to false) {}
+ requestAppPermissionsAndAssertResult(
+ NON_EXISTENT_PERMISSION to false,
+ waitForWindowTransition = false
+ ) {}
}
@Test
@@ -267,7 +276,11 @@ class PermissionTest23 : BaseUsePermissionTest() {
val permissions: Array<String?> = arrayOf(null)
val results: Array<Pair<String?, Boolean>> = arrayOf()
// Go through normal grant flow
- requestAppPermissionsAndAssertResult(permissions, results) {}
+ requestAppPermissionsAndAssertResult(
+ permissions,
+ results,
+ waitForWindowTransition = false
+ ) {}
}
@Test
@@ -297,7 +310,10 @@ class PermissionTest23 : BaseUsePermissionTest() {
fun testInvalidPermission() {
// Request the permission and allow it
// Expect the permission is not granted
- requestAppPermissionsAndAssertResult(INVALID_PERMISSION to false) {}
+ requestAppPermissionsAndAssertResult(
+ INVALID_PERMISSION to false,
+ waitForWindowTransition = false
+ ) {}
}
@Test
diff --git a/tests/cts/permissionui/src/android/permissionui/cts/PermissionTest29.kt b/tests/cts/permissionui/src/android/permissionui/cts/PermissionTest29.kt
index 5e1b0d28f..2a9261163 100644
--- a/tests/cts/permissionui/src/android/permissionui/cts/PermissionTest29.kt
+++ b/tests/cts/permissionui/src/android/permissionui/cts/PermissionTest29.kt
@@ -48,7 +48,8 @@ class PermissionTest29 : BaseUsePermissionTest() {
@Test
fun testRequestOnlyBackgroundNotPossible() {
requestAppPermissionsAndAssertResult(
- android.Manifest.permission.ACCESS_BACKGROUND_LOCATION to false
+ android.Manifest.permission.ACCESS_BACKGROUND_LOCATION to false,
+ waitForWindowTransition = false
) {}
assertAppHasPermission(android.Manifest.permission.ACCESS_BACKGROUND_LOCATION, false)
@@ -58,7 +59,8 @@ class PermissionTest29 : BaseUsePermissionTest() {
fun testRequestBoth() {
requestAppPermissionsAndAssertResult(
android.Manifest.permission.ACCESS_FINE_LOCATION to true,
- android.Manifest.permission.ACCESS_BACKGROUND_LOCATION to true
+ android.Manifest.permission.ACCESS_BACKGROUND_LOCATION to true,
+ waitForWindowTransition = false
) {
clickPermissionRequestSettingsLinkAndAllowAlways()
}
@@ -77,7 +79,8 @@ class PermissionTest29 : BaseUsePermissionTest() {
// Step 2: request background only
requestAppPermissionsAndAssertResult(
- android.Manifest.permission.ACCESS_BACKGROUND_LOCATION to true
+ android.Manifest.permission.ACCESS_BACKGROUND_LOCATION to true,
+ waitForWindowTransition = false
) {
clickPermissionRequestSettingsLinkAndAllowAlways()
}
@@ -98,7 +101,8 @@ class PermissionTest29 : BaseUsePermissionTest() {
// Step 2: grant background
requestAppPermissionsAndAssertResult(
android.Manifest.permission.ACCESS_FINE_LOCATION to true,
- android.Manifest.permission.ACCESS_BACKGROUND_LOCATION to true
+ android.Manifest.permission.ACCESS_BACKGROUND_LOCATION to true,
+ waitForWindowTransition = false
) {
clickPermissionRequestSettingsLinkAndAllowAlways()
}
@@ -127,7 +131,8 @@ class PermissionTest29 : BaseUsePermissionTest() {
// Step 3: All further requests should be denied automatically
requestAppPermissionsAndAssertResult(
android.Manifest.permission.ACCESS_FINE_LOCATION to false,
- android.Manifest.permission.ACCESS_BACKGROUND_LOCATION to false
+ android.Manifest.permission.ACCESS_BACKGROUND_LOCATION to false,
+ waitForWindowTransition = false
) {}
}
@@ -138,27 +143,33 @@ class PermissionTest29 : BaseUsePermissionTest() {
// Step 1: Request both, go to settings, do nothing
requestAppPermissionsAndAssertResult(
android.Manifest.permission.ACCESS_FINE_LOCATION to true,
- android.Manifest.permission.ACCESS_BACKGROUND_LOCATION to false
+ android.Manifest.permission.ACCESS_BACKGROUND_LOCATION to false,
+ waitForWindowTransition = false
) {
openSettingsThenDoNothingThenLeave()
assertAppHasPermission(android.Manifest.permission.ACCESS_FINE_LOCATION, false)
assertAppHasPermission(android.Manifest.permission.ACCESS_BACKGROUND_LOCATION, false)
- clickPermissionRequestAllowForegroundButton()
+ doAndWaitForWindowTransition {
+ clickPermissionRequestAllowForegroundButton()
+ }
}
// Step 2: Upgrade foreground to background, go to settings, do nothing
requestAppPermissionsAndAssertResult(
android.Manifest.permission.ACCESS_FINE_LOCATION to true,
- android.Manifest.permission.ACCESS_BACKGROUND_LOCATION to false
+ android.Manifest.permission.ACCESS_BACKGROUND_LOCATION to false,
+ waitForWindowTransition = false
) {
openSettingsThenDoNothingThenLeave()
assertAppHasPermission(android.Manifest.permission.ACCESS_FINE_LOCATION, true)
assertAppHasPermission(android.Manifest.permission.ACCESS_BACKGROUND_LOCATION, false)
- clickPermissionRequestNoUpgradeAndDontAskAgainButton()
+ doAndWaitForWindowTransition {
+ clickPermissionRequestNoUpgradeAndDontAskAgainButton()
+ }
}
}
@@ -187,10 +198,10 @@ class PermissionTest29 : BaseUsePermissionTest() {
requestAppPermissions(
android.Manifest.permission.ACCESS_FINE_LOCATION,
- android.Manifest.permission.ACCESS_BACKGROUND_LOCATION
+ android.Manifest.permission.ACCESS_BACKGROUND_LOCATION,
+ waitForWindowTransition = false
) {
clickPermissionRequestSettingsLinkAndDeny()
- waitForIdle()
pressBack()
}
diff --git a/tests/cts/permissionui/src/android/permissionui/cts/PermissionTest30.kt b/tests/cts/permissionui/src/android/permissionui/cts/PermissionTest30.kt
index bcf01265c..4555fb83c 100644
--- a/tests/cts/permissionui/src/android/permissionui/cts/PermissionTest30.kt
+++ b/tests/cts/permissionui/src/android/permissionui/cts/PermissionTest30.kt
@@ -38,8 +38,11 @@ class PermissionTest30 : BaseUsePermissionTest() {
assertAppHasPermission(ACCESS_FINE_LOCATION, false)
assertAppHasPermission(ACCESS_BACKGROUND_LOCATION, false)
- requestAppPermissionsAndAssertResult(ACCESS_FINE_LOCATION to false,
- ACCESS_BACKGROUND_LOCATION to false) {
+ requestAppPermissionsAndAssertResult(
+ ACCESS_FINE_LOCATION to false,
+ ACCESS_BACKGROUND_LOCATION to false,
+ waitForWindowTransition = false
+ ) {
// Do nothing, should be automatically denied
}
}
@@ -54,9 +57,11 @@ class PermissionTest30 : BaseUsePermissionTest() {
clickPermissionRequestAllowForegroundButton()
}
- requestAppPermissionsAndAssertResult(ACCESS_BACKGROUND_LOCATION to true) {
+ requestAppPermissionsAndAssertResult(
+ ACCESS_BACKGROUND_LOCATION to true,
+ waitForWindowTransition = false
+ ) {
clickAllowAlwaysInSettings()
- waitForIdle()
pressBack()
}
}
@@ -76,7 +81,8 @@ class PermissionTest30 : BaseUsePermissionTest() {
"accuracy options. Please update the system with " +
"the latest (at least Oct, 2021) mainline modules.",
locationAccuracyOptions)
- return
+ // Close dialog
+ clickPermissionRequestDenyButton()
}
}
}
diff --git a/tests/cts/permissionui/src/android/permissionui/cts/PermissionUsageInfoTest.kt b/tests/cts/permissionui/src/android/permissionui/cts/PermissionUsageInfoTest.kt
index 7f61014cb..0e462e503 100644
--- a/tests/cts/permissionui/src/android/permissionui/cts/PermissionUsageInfoTest.kt
+++ b/tests/cts/permissionui/src/android/permissionui/cts/PermissionUsageInfoTest.kt
@@ -19,6 +19,7 @@ package android.permissionui.cts
import android.content.Intent
import android.platform.test.annotations.FlakyTest
import androidx.test.uiautomator.By
+import androidx.test.uiautomator.Until
import com.android.compatibility.common.util.SystemUtil.runWithShellPermissionIdentity
import org.junit.Assume.assumeFalse
import org.junit.Before
@@ -43,14 +44,16 @@ class PermissionUsageInfoTest : BaseUsePermissionTest() {
@Test
fun testPermissionUsageInfo() {
- runWithShellPermissionIdentity {
- context.startActivity(
- Intent(Intent.ACTION_MANAGE_APP_PERMISSIONS).apply {
- putExtra(Intent.EXTRA_PACKAGE_NAME, APP_PACKAGE_NAME)
- addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
- }
- )
- }
+ uiDevice.performActionAndWait({
+ runWithShellPermissionIdentity {
+ context.startActivity(
+ Intent(Intent.ACTION_MANAGE_APP_PERMISSIONS).apply {
+ putExtra(Intent.EXTRA_PACKAGE_NAME, APP_PACKAGE_NAME)
+ addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+ }
+ )
+ }
+ }, Until.newWindow(), NEW_WINDOW_TIMEOUT_MILLIS)
click(By.res("com.android.permissioncontroller:id/icon"))
}
}
diff --git a/tests/cts/permissionui/src/android/permissionui/cts/PhotoPickerPermissionTest.kt b/tests/cts/permissionui/src/android/permissionui/cts/PhotoPickerPermissionTest.kt
index df422acfb..b7d4f5dfb 100644
--- a/tests/cts/permissionui/src/android/permissionui/cts/PhotoPickerPermissionTest.kt
+++ b/tests/cts/permissionui/src/android/permissionui/cts/PhotoPickerPermissionTest.kt
@@ -130,8 +130,12 @@ class PhotoPickerPermissionTest : BaseUsePermissionTest() {
installPackage(APP_APK_PATH_IMPLICIT_USER_SELECT_STORAGE)
requestAppPermissionsAndAssertResult(
arrayOf(READ_MEDIA_IMAGES, READ_MEDIA_VISUAL_USER_SELECTED),
- arrayOf(READ_MEDIA_IMAGES to false, READ_MEDIA_VISUAL_USER_SELECTED to false)) {
- click(By.res(SELECT_BUTTON))
+ arrayOf(READ_MEDIA_IMAGES to false, READ_MEDIA_VISUAL_USER_SELECTED to false),
+ waitForWindowTransition = false
+ ) {
+ doAndWaitForWindowTransition {
+ click(By.res(SELECT_BUTTON))
+ }
findImageOrVideo(expected = true)
uiDevice.pressBack()
}
@@ -142,9 +146,14 @@ class PhotoPickerPermissionTest : BaseUsePermissionTest() {
@Test
fun testImplicitUserSelectHasOneTimeGrantsWithoutAppOp() {
installPackage(APP_APK_PATH_IMPLICIT_USER_SELECT_STORAGE)
- requestAppPermissionsAndAssertResult(arrayOf(READ_MEDIA_IMAGES),
- arrayOf(READ_MEDIA_IMAGES to true)) {
- click(By.res(SELECT_BUTTON))
+ requestAppPermissionsAndAssertResult(
+ arrayOf(READ_MEDIA_IMAGES),
+ arrayOf(READ_MEDIA_IMAGES to true),
+ waitForWindowTransition = false
+ ) {
+ doAndWaitForWindowTransition {
+ click(By.res(SELECT_BUTTON))
+ }
clickImageOrVideo()
clickAllow()
}
@@ -175,7 +184,7 @@ class PhotoPickerPermissionTest : BaseUsePermissionTest() {
assertAppHasPermission(READ_MEDIA_VISUAL_USER_SELECTED, true)
}
- requestAppPermissions(READ_MEDIA_IMAGES) {
+ requestAppPermissions(READ_MEDIA_IMAGES, waitForWindowTransition = false) {
waitFindObject(By.res(DONT_SELECT_MORE_BUTTON))
uiDevice.pressBack()
}
@@ -186,8 +195,12 @@ class PhotoPickerPermissionTest : BaseUsePermissionTest() {
installPackage(APP_APK_PATH_LATEST)
requestAppPermissionsAndAssertResult(
arrayOf(READ_MEDIA_IMAGES, READ_MEDIA_VISUAL_USER_SELECTED),
- arrayOf(READ_MEDIA_IMAGES to false, READ_MEDIA_VISUAL_USER_SELECTED to true)) {
- click(By.res(SELECT_BUTTON))
+ arrayOf(READ_MEDIA_IMAGES to false, READ_MEDIA_VISUAL_USER_SELECTED to true),
+ waitForWindowTransition = false
+ ) {
+ doAndWaitForWindowTransition {
+ click(By.res(SELECT_BUTTON))
+ }
clickImageOrVideo()
clickAllow()
}
@@ -199,21 +212,29 @@ class PhotoPickerPermissionTest : BaseUsePermissionTest() {
@Test
fun testNonImplicitAutomaticallyShowsPickerWhenUserFixed() {
installPackage(APP_APK_PATH_LATEST)
- requestAppPermissions(READ_MEDIA_IMAGES) {
- click(By.res(SELECT_BUTTON))
+ requestAppPermissions(READ_MEDIA_IMAGES, waitForWindowTransition = false) {
+ doAndWaitForWindowTransition {
+ click(By.res(SELECT_BUTTON))
+ }
clickImageOrVideo()
- clickAllow()
+ doAndWaitForWindowTransition {
+ clickAllow()
+ }
}
- requestAppPermissions(READ_MEDIA_IMAGES) {
- click(By.res(SELECT_BUTTON))
+ requestAppPermissions(READ_MEDIA_IMAGES, waitForWindowTransition = false) {
+ doAndWaitForWindowTransition {
+ click(By.res(SELECT_BUTTON))
+ }
clickImageOrVideo()
- clickAllow()
+ doAndWaitForWindowTransition {
+ clickAllow()
+ }
}
assertPermissionFlags(READ_MEDIA_VISUAL_USER_SELECTED, FLAG_PERMISSION_USER_FIXED to true)
- requestAppPermissions(READ_MEDIA_IMAGES) {
+ requestAppPermissions(READ_MEDIA_IMAGES, waitForWindowTransition = false) {
findImageOrVideo(expected = true)
uiDevice.pressBack()
}
@@ -222,15 +243,19 @@ class PhotoPickerPermissionTest : BaseUsePermissionTest() {
@Test
fun testRequestedPermsFilterMediaType() {
installPackage(APP_APK_PATH_LATEST)
- requestAppPermissions(READ_MEDIA_IMAGES) {
- click(By.res(SELECT_BUTTON))
+ requestAppPermissions(READ_MEDIA_IMAGES, waitForWindowTransition = false) {
+ doAndWaitForWindowTransition {
+ click(By.res(SELECT_BUTTON))
+ }
findImageOrVideo(expected = true)
findVideo(expected = false)
uiDevice.pressBack()
}
- requestAppPermissions(READ_MEDIA_VIDEO) {
- click(By.res(SELECT_BUTTON))
+ requestAppPermissions(READ_MEDIA_VIDEO, waitForWindowTransition = false) {
+ doAndWaitForWindowTransition {
+ click(By.res(SELECT_BUTTON))
+ }
findVideo(expected = true)
uiDevice.pressBack()
}
@@ -310,7 +335,7 @@ class PhotoPickerPermissionTest : BaseUsePermissionTest() {
requestedPerms.contains(READ_MEDIA_VISUAL_USER_SELECTED))
}
- requestAppPermissions(READ_MEDIA_IMAGES) {
+ requestAppPermissions(READ_MEDIA_IMAGES, waitForWindowTransition = false) {
findView(By.res(SELECT_BUTTON), expected = false)
pressBack()
}
@@ -322,11 +347,17 @@ class PhotoPickerPermissionTest : BaseUsePermissionTest() {
@Test
fun testAppCantRequestOnlyPartialStoragePerms() {
installPackage(APP_APK_PATH_IMPLICIT_USER_SELECT_STORAGE)
- requestAppPermissionsAndAssertResult(READ_MEDIA_VISUAL_USER_SELECTED to false) {}
+ requestAppPermissionsAndAssertResult(
+ READ_MEDIA_VISUAL_USER_SELECTED to false,
+ waitForWindowTransition = false
+ ) {}
uninstallPackage(APP_PACKAGE_NAME)
installPackage(APP_APK_PATH_LATEST)
- requestAppPermissionsAndAssertResult(READ_MEDIA_VISUAL_USER_SELECTED to false,
- ACCESS_MEDIA_LOCATION to false) {}
+ requestAppPermissionsAndAssertResult(
+ READ_MEDIA_VISUAL_USER_SELECTED to false,
+ ACCESS_MEDIA_LOCATION to false,
+ waitForWindowTransition = false
+ ) {}
}
@Test
@@ -335,16 +366,25 @@ class PhotoPickerPermissionTest : BaseUsePermissionTest() {
requestAppPermissions(ACCESS_MEDIA_LOCATION) {
click(By.res(ALLOW_ALL_BUTTON))
}
- requestAppPermissionsAndAssertResult(READ_MEDIA_IMAGES to true,
- READ_MEDIA_VIDEO to true) {}
+ requestAppPermissionsAndAssertResult(
+ READ_MEDIA_IMAGES to true,
+ READ_MEDIA_VIDEO to true,
+ waitForWindowTransition = false
+ ) {}
}
@Test
fun testExplicitAppCannotExpandAccessMediaLocation() {
installPackage(APP_APK_PATH_LATEST)
- requestAppPermissionsAndAssertResult(READ_MEDIA_IMAGES to false,
- ACCESS_MEDIA_LOCATION to true, READ_MEDIA_VISUAL_USER_SELECTED to true) {
- click(By.res(SELECT_BUTTON))
+ requestAppPermissionsAndAssertResult(
+ READ_MEDIA_IMAGES to false,
+ ACCESS_MEDIA_LOCATION to true,
+ READ_MEDIA_VISUAL_USER_SELECTED to true,
+ waitForWindowTransition = false
+ ) {
+ doAndWaitForWindowTransition {
+ click(By.res(SELECT_BUTTON))
+ }
clickImageOrVideo()
clickAllow()
}
@@ -356,8 +396,11 @@ class PhotoPickerPermissionTest : BaseUsePermissionTest() {
@Test
fun testExplicitAppCannotRequestOnlyPartialAccess() {
installPackage(APP_APK_PATH_LATEST)
- requestAppPermissionsAndAssertResult(ACCESS_MEDIA_LOCATION to false,
- READ_MEDIA_VISUAL_USER_SELECTED to false) {
+ requestAppPermissionsAndAssertResult(
+ ACCESS_MEDIA_LOCATION to false,
+ READ_MEDIA_VISUAL_USER_SELECTED to false,
+ waitForWindowTransition = false
+ ) {
findView(By.res(SELECT_BUTTON), expected = false)
}
}
@@ -365,11 +408,18 @@ class PhotoPickerPermissionTest : BaseUsePermissionTest() {
@Test
fun testMorePhotosDialogShowsAfterClickingSelect() {
installPackage(APP_APK_PATH_LATEST)
- requestAppPermissionsAndAssertResult(READ_MEDIA_IMAGES to false,
- ACCESS_MEDIA_LOCATION to true, READ_MEDIA_VISUAL_USER_SELECTED to true) {
- click(By.res(SELECT_BUTTON))
+ requestAppPermissionsAndAssertResult(
+ READ_MEDIA_IMAGES to false,
+ ACCESS_MEDIA_LOCATION to true, READ_MEDIA_VISUAL_USER_SELECTED to true,
+ waitForWindowTransition = false
+ ) {
+ doAndWaitForWindowTransition {
+ click(By.res(SELECT_BUTTON))
+ }
clickImageOrVideo()
- clickAllow()
+ doAndWaitForWindowTransition {
+ clickAllow()
+ }
}
requestAppPermissions(READ_MEDIA_IMAGES, READ_MEDIA_VIDEO) {
@@ -381,11 +431,18 @@ class PhotoPickerPermissionTest : BaseUsePermissionTest() {
@Test
fun testAMLNotGrantedIfNotRequested() {
installPackage(APP_APK_PATH_LATEST)
- requestAppPermissionsAndAssertResult(READ_MEDIA_IMAGES to false,
- READ_MEDIA_VISUAL_USER_SELECTED to true) {
- click(By.res(SELECT_BUTTON))
+ requestAppPermissionsAndAssertResult(
+ READ_MEDIA_IMAGES to false,
+ READ_MEDIA_VISUAL_USER_SELECTED to true,
+ waitForWindowTransition = false
+ ) {
+ doAndWaitForWindowTransition {
+ click(By.res(SELECT_BUTTON))
+ }
clickImageOrVideo()
- clickAllow()
+ doAndWaitForWindowTransition {
+ clickAllow()
+ }
}
assertAppHasPermission(ACCESS_MEDIA_LOCATION, false)
}
@@ -396,7 +453,6 @@ class PhotoPickerPermissionTest : BaseUsePermissionTest() {
private fun clickAllow() {
click(By.res(PhotoPickerUtils.getAllowId(context)))
- waitForIdle()
}
private fun findImageOrVideo(expected: Boolean) {
diff --git a/tests/cts/permissionui/src/android/permissionui/cts/ReviewAccessibilityServicesTest.kt b/tests/cts/permissionui/src/android/permissionui/cts/ReviewAccessibilityServicesTest.kt
index 86f294875..05cd6e497 100644
--- a/tests/cts/permissionui/src/android/permissionui/cts/ReviewAccessibilityServicesTest.kt
+++ b/tests/cts/permissionui/src/android/permissionui/cts/ReviewAccessibilityServicesTest.kt
@@ -31,6 +31,7 @@ import androidx.test.uiautomator.Configurator
import androidx.test.uiautomator.StaleObjectException
import androidx.test.uiautomator.UiDevice
import androidx.test.uiautomator.UiObject2
+import androidx.test.uiautomator.Until
import com.android.compatibility.common.util.SystemUtil
import com.android.compatibility.common.util.UiAutomatorUtils2.waitFindObjectOrNull
import java.util.regex.Pattern
@@ -55,6 +56,7 @@ class ReviewAccessibilityServicesTest {
companion object {
private const val EXPECTED_TIMEOUT_MS = 500L
+ private const val NEW_WINDOW_TIMEOUT_MILLIS: Long = 20_000
}
@get:Rule
@@ -127,7 +129,6 @@ class ReviewAccessibilityServicesTest {
accessibilityServiceRule.enableService()
accessibilityServiceRule2.enableService()
startAccessibilityActivity()
- uiDevice.waitForIdle()
findTestService2(true)!!.click()
waitForSettingsButtonToDisappear()
findTestService2(true)
@@ -138,16 +139,18 @@ class ReviewAccessibilityServicesTest {
val automan =
InstrumentationRegistry.getInstrumentation()
.getUiAutomation(UiAutomation.FLAG_DONT_SUPPRESS_ACCESSIBILITY_SERVICES)
- automan.adoptShellPermissionIdentity()
- try {
- context.startActivity(
- Intent(Intent.ACTION_REVIEW_ACCESSIBILITY_SERVICES)
- .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK))
- } catch (e: Exception) {
- throw RuntimeException("Caught exception", e)
- } finally {
- automan.dropShellPermissionIdentity()
- }
+ uiDevice.performActionAndWait({
+ automan.adoptShellPermissionIdentity()
+ try {
+ context.startActivity(
+ Intent(Intent.ACTION_REVIEW_ACCESSIBILITY_SERVICES)
+ .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK))
+ } catch (e: Exception) {
+ throw RuntimeException("Caught exception", e)
+ } finally {
+ automan.dropShellPermissionIdentity()
+ }
+ }, Until.newWindow(), NEW_WINDOW_TIMEOUT_MILLIS)
}
private fun findTestService(shouldBePresent: Boolean): UiObject2? {