diff options
author | 2025-03-02 17:20:23 -0800 | |
---|---|---|
committer | 2025-03-03 11:18:58 -0800 | |
commit | a9e085ca3e2c193cc4452e6f961c4ed4629ba580 (patch) | |
tree | 53821c3508ebde56082d5e0acd6c088a1af47bb2 /tests | |
parent | 9dc20037e386ce043da72a9e49405accf50649ca (diff) |
Revert^2 "Await permission requests activity state before proceeding"
This reverts commit 9dc20037e386ce043da72a9e49405accf50649ca.
Reason for revert: re-landing after adding try/catch
Change-Id: Id0ca88026cb94a7021c0dc71f30f51ca82d01bc6
LOW_COVERAGE_REASON=TEST_ONLY
Diffstat (limited to 'tests')
-rw-r--r-- | tests/cts/permissionui/src/android/permissionui/cts/BaseUsePermissionTest.kt | 51 |
1 files changed, 36 insertions, 15 deletions
diff --git a/tests/cts/permissionui/src/android/permissionui/cts/BaseUsePermissionTest.kt b/tests/cts/permissionui/src/android/permissionui/cts/BaseUsePermissionTest.kt index f52e32344..1e6923592 100644 --- a/tests/cts/permissionui/src/android/permissionui/cts/BaseUsePermissionTest.kt +++ b/tests/cts/permissionui/src/android/permissionui/cts/BaseUsePermissionTest.kt @@ -36,6 +36,7 @@ import android.os.Build import android.os.Process import android.provider.DeviceConfig import android.provider.Settings +import android.server.wm.WindowManagerStateHelper import android.text.Spanned import android.text.style.ClickableSpan import android.util.Log @@ -247,6 +248,8 @@ abstract class BaseUsePermissionTest : BasePermissionTest() { DENIED_WITH_PREJUDICE } + private val windowManagerStateHelper = WindowManagerStateHelper() + private val platformResources = context.createPackageContext("android", 0).resources private val permissionToLabelResNameMap = mapOf( @@ -674,21 +677,20 @@ abstract class BaseUsePermissionTest : BasePermissionTest() { crossinline block: () -> Unit, ): Instrumentation.ActivityResult { // Request the permissions - 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) - } - ) - } + 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) + } + ) + + waitForPermissionRequestActivity() // Notification permission prompt is shown first, so get it out of the way clickNotificationPermissionRequestAllowButtonIfAvailable() @@ -701,6 +703,25 @@ abstract class BaseUsePermissionTest : BasePermissionTest() { return future.get(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS) } + /** + * This method waits for permission controller activity to be in a valid state, the timeout + * is 5 seconds. + */ + fun waitForPermissionRequestActivity() { + val requestPermissionIntent = Intent(PackageManager.ACTION_REQUEST_PERMISSIONS) + val componentName = + requestPermissionIntent.resolveActivity(context.packageManager) + ?: throw RuntimeException("Permission request is not handled by any activity.") + try { + windowManagerStateHelper.waitForValidState(componentName) + } catch (ex: Exception) { + // It doesn't mean a test would fail, it just meant that the test would proceed before + // waiting for permission request dialog. Permission request dialog should eventually + // come on the screen when ui-automator is trying to search for ui element. + Log.w(LOG_TAG, "Couldn't wait for permission request activity.", ex) + } + } + protected inline fun requestAppPermissionsAndAssertResult( permissions: Array<out String?>, permissionAndExpectedGrantResults: Array<out Pair<String?, Boolean>>, |