summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--PermissionController/src/com/android/permissioncontroller/permission/service/v33/SafetyCenterQsTileService.kt2
-rw-r--r--PermissionController/src/com/android/permissioncontroller/permission/ui/GrantPermissionsActivity.java10
-rw-r--r--tests/cts/permissionmultidevice/src/android/permissionmultidevice/cts/AppPermissionsTest.kt136
-rw-r--r--tests/cts/role/src/android/app/role/cts/RoleManagerTest.java2
4 files changed, 89 insertions, 61 deletions
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/service/v33/SafetyCenterQsTileService.kt b/PermissionController/src/com/android/permissioncontroller/permission/service/v33/SafetyCenterQsTileService.kt
index 6ffd894ce..a69b78a06 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/service/v33/SafetyCenterQsTileService.kt
+++ b/PermissionController/src/com/android/permissioncontroller/permission/service/v33/SafetyCenterQsTileService.kt
@@ -27,6 +27,7 @@ import android.provider.DeviceConfig
import android.safetycenter.SafetyCenterManager
import android.service.quicksettings.Tile
import android.service.quicksettings.TileService
+import android.text.TextUtils
import android.util.Log
import com.android.modules.utils.build.SdkLevel
import com.android.permissioncontroller.R
@@ -68,6 +69,7 @@ class SafetyCenterQsTileService : TileService() {
qsTile.label = getString(R.string.safety_privacy_qs_tile_title)
qsTile.subtitle = getString(R.string.safety_privacy_qs_tile_subtitle)
+ qsTile.contentDescription = TextUtils.concat(qsTile.label, ", ", qsTile.subtitle)
qsTile.state = Tile.STATE_ACTIVE
qsTile.updateTile()
}
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/GrantPermissionsActivity.java b/PermissionController/src/com/android/permissioncontroller/permission/ui/GrantPermissionsActivity.java
index aedfe4715..7c7de5716 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/ui/GrantPermissionsActivity.java
+++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/GrantPermissionsActivity.java
@@ -881,10 +881,12 @@ public class GrantPermissionsActivity extends SettingsActivity
super.onSaveInstanceState(outState);
if (SdkLevel.isAtLeastV() && Flags.enhancedConfirmationModeApisEnabled()) {
- outState.putStringArrayList(KEY_RESTRICTED_REQUESTED_PERMISSIONS, new ArrayList<>(
- mRestrictedRequestedPermissionGroups));
- outState.putStringArrayList(KEY_UNRESTRICTED_REQUESTED_PERMISSIONS, new ArrayList<>(
- mUnrestrictedRequestedPermissions));
+ outState.putStringArrayList(KEY_RESTRICTED_REQUESTED_PERMISSIONS,
+ mRestrictedRequestedPermissionGroups != null ? new ArrayList<>(
+ mRestrictedRequestedPermissionGroups) : null);
+ outState.putStringArrayList(KEY_UNRESTRICTED_REQUESTED_PERMISSIONS,
+ mUnrestrictedRequestedPermissions != null ? new ArrayList<>(
+ mUnrestrictedRequestedPermissions) : null);
outState.putStringArray(KEY_ORIGINAL_REQUESTED_PERMISSIONS,
mOriginalRequestedPermissions);
}
diff --git a/tests/cts/permissionmultidevice/src/android/permissionmultidevice/cts/AppPermissionsTest.kt b/tests/cts/permissionmultidevice/src/android/permissionmultidevice/cts/AppPermissionsTest.kt
index 6b28f766f..00df03e51 100644
--- a/tests/cts/permissionmultidevice/src/android/permissionmultidevice/cts/AppPermissionsTest.kt
+++ b/tests/cts/permissionmultidevice/src/android/permissionmultidevice/cts/AppPermissionsTest.kt
@@ -36,7 +36,6 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SdkSuppress
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.uiautomator.By
-import androidx.test.uiautomator.UiObject2
import androidx.test.uiautomator.UiScrollable
import androidx.test.uiautomator.UiSelector
import com.android.compatibility.common.util.SystemUtil.eventually
@@ -129,10 +128,11 @@ class AppPermissionsTest {
verifyPermissionMessage()
- val radioButtons = getRadioButtons()
- assertEquals(true, radioButtons["ALLOW_FOREGROUND_ONLY_RADIO_BUTTON"]!!.isChecked)
- assertEquals(false, radioButtons["ASK_RADIO_BUTTON"]!!.isChecked)
- assertEquals(false, radioButtons["DENY_RADIO_BUTTON"]!!.isChecked)
+ verifyRadioButtonStates(
+ allowForegroundChecked = true,
+ askChecked = false,
+ denyChecked = false
+ )
}
@RequiresFlagsEnabled(
@@ -145,7 +145,8 @@ class AppPermissionsTest {
openAppPermissionsScreen()
clickPermissionItem(externalDeviceCameraText)
- getRadioButtons()["ASK_RADIO_BUTTON"]!!.click()
+ clickAskButton()
+
verifyAskSelection()
}
@@ -159,7 +160,8 @@ class AppPermissionsTest {
openAppPermissionsScreen()
clickPermissionItem(externalDeviceCameraText)
- getRadioButtons()["DENY_RADIO_BUTTON"]!!.click()
+ clickDenyButton()
+
verifyDenySelection()
}
@@ -173,13 +175,14 @@ class AppPermissionsTest {
openAppPermissionsScreen()
clickPermissionItem(externalDeviceCameraText)
- getRadioButtons()["ASK_RADIO_BUTTON"]!!.click()
- val radioButtons = getRadioButtons()
- assertEquals(false, radioButtons["ALLOW_FOREGROUND_ONLY_RADIO_BUTTON"]!!.isChecked)
- assertEquals(true, radioButtons["ASK_RADIO_BUTTON"]!!.isChecked)
- assertEquals(false, radioButtons["DENY_RADIO_BUTTON"]!!.isChecked)
+ clickAskButton()
+ verifyRadioButtonStates(
+ allowForegroundChecked = false,
+ askChecked = true,
+ denyChecked = false
+ )
- radioButtons["ALLOW_FOREGROUND_ONLY_RADIO_BUTTON"]!!.click()
+ clickAllowForegroundButton()
verifyAllowedSelection()
}
@@ -212,12 +215,13 @@ class AppPermissionsTest {
clickPermissionItem(externalDeviceCameraText)
- val radioButtons = getRadioButtons()
- assertEquals(true, radioButtons["ALLOW_FOREGROUND_ONLY_RADIO_BUTTON"]!!.isChecked)
- assertEquals(false, radioButtons["ASK_RADIO_BUTTON"]!!.isChecked)
- assertEquals(false, radioButtons["DENY_RADIO_BUTTON"]!!.isChecked)
+ verifyRadioButtonStates(
+ allowForegroundChecked = true,
+ askChecked = false,
+ denyChecked = false
+ )
- radioButtons["DENY_RADIO_BUTTON"]!!.click()
+ clickDenyButton()
UiAutomatorUtils2.getUiDevice().pressBack()
@@ -235,10 +239,11 @@ class AppPermissionsTest {
private fun verifyAskSelection() {
verifyPermissionMessage()
- val radioButtons = getRadioButtons()
- assertEquals(false, radioButtons["ALLOW_FOREGROUND_ONLY_RADIO_BUTTON"]!!.isChecked)
- assertEquals(true, radioButtons["ASK_RADIO_BUTTON"]!!.isChecked)
- assertEquals(false, radioButtons["DENY_RADIO_BUTTON"]!!.isChecked)
+ verifyRadioButtonStates(
+ allowForegroundChecked = false,
+ askChecked = true,
+ denyChecked = false
+ )
UiAutomatorUtils2.getUiDevice().pressBack()
@@ -261,10 +266,11 @@ class AppPermissionsTest {
private fun verifyDenySelection() {
verifyPermissionMessage()
- val radioButtons = getRadioButtons()
- assertEquals(false, radioButtons["ALLOW_FOREGROUND_ONLY_RADIO_BUTTON"]!!.isChecked)
- assertEquals(false, radioButtons["ASK_RADIO_BUTTON"]!!.isChecked)
- assertEquals(true, radioButtons["DENY_RADIO_BUTTON"]!!.isChecked)
+ verifyRadioButtonStates(
+ allowForegroundChecked = false,
+ askChecked = false,
+ denyChecked = true
+ )
UiAutomatorUtils2.getUiDevice().pressBack()
@@ -287,10 +293,11 @@ class AppPermissionsTest {
private fun verifyAllowedSelection() {
verifyPermissionMessage()
- val radioButtons = getRadioButtons()
- assertEquals(true, radioButtons["ALLOW_FOREGROUND_ONLY_RADIO_BUTTON"]!!.isChecked)
- assertEquals(false, radioButtons["ASK_RADIO_BUTTON"]!!.isChecked)
- assertEquals(false, radioButtons["DENY_RADIO_BUTTON"]!!.isChecked)
+ verifyRadioButtonStates(
+ allowForegroundChecked = true,
+ askChecked = false,
+ denyChecked = false
+ )
UiAutomatorUtils2.getUiDevice().pressBack()
@@ -350,45 +357,60 @@ class AppPermissionsTest {
return grantInfoMap
}
- // Use of "eventually" and invoking "isChecked" is to mitigate StaleObjectException that
- // intermittently observed on cf_x86_64_tablet_hsum-trunk_staging-userdebug
- private fun getRadioButtons(): Map<String, UiObject2> {
- val map = mutableMapOf<String, UiObject2>()
+ private fun verifyRadioButtonStates(
+ allowForegroundChecked: Boolean,
+ askChecked: Boolean,
+ denyChecked: Boolean
+ ) {
eventually {
- val allowButton =
+ assertEquals(
+ allowForegroundChecked,
UiAutomatorUtils2.waitFindObject(By.res(ALLOW_FOREGROUND_ONLY_RADIO_BUTTON))
- allowButton.isChecked
- map["ALLOW_FOREGROUND_ONLY_RADIO_BUTTON"] = allowButton
-
- val askButton = UiAutomatorUtils2.waitFindObject(By.res(ASK_RADIO_BUTTON))
- askButton.isChecked
- map["ASK_RADIO_BUTTON"] = askButton
-
- val denyButton = UiAutomatorUtils2.waitFindObject(By.res(DENY_RADIO_BUTTON))
- denyButton.isChecked
- map["DENY_RADIO_BUTTON"] = denyButton
+ .isChecked
+ )
+ assertEquals(
+ askChecked,
+ UiAutomatorUtils2.waitFindObject(By.res(ASK_RADIO_BUTTON)).isChecked
+ )
+ assertEquals(
+ denyChecked,
+ UiAutomatorUtils2.waitFindObject(By.res(DENY_RADIO_BUTTON)).isChecked
+ )
}
- return map
}
private fun openAppPermissionsScreen() {
- instrumentation.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)
- }
- )
- eventually { UiAutomatorUtils.click(By.text("Permissions")) }
+ eventually {
+ instrumentation.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)
+ }
+ )
+ UiAutomatorUtils2.waitFindObject(By.text("Permissions"), 12000).click()
+ }
}
- private fun getScrollableRecyclerView(): UiScrollable =
- UiScrollable(UiSelector().resourceId(RECYCLER_VIEW))
+ private fun getScrollableRecyclerView(): UiScrollable {
+ // Wait for object to load
+ UiAutomatorUtils2.waitFindObject(By.res(RECYCLER_VIEW))
+ return UiScrollable(UiSelector().resourceId(RECYCLER_VIEW))
+ }
private fun clickPermissionItem(permissionItemName: String) =
UiAutomatorUtils2.waitFindObject(By.text(permissionItemName)).click()
+ private fun clickAllowForegroundButton() =
+ UiAutomatorUtils2.waitFindObject(By.res(ALLOW_FOREGROUND_ONLY_RADIO_BUTTON)).click()
+
+ private fun clickAskButton() =
+ UiAutomatorUtils2.waitFindObject(By.res(ASK_RADIO_BUTTON)).click()
+
+ private fun clickDenyButton() =
+ UiAutomatorUtils2.waitFindObject(By.res(DENY_RADIO_BUTTON)).click()
+
private fun grantRunTimePermission() =
permissionManager.grantRuntimePermission(
APP_PACKAGE_NAME,
diff --git a/tests/cts/role/src/android/app/role/cts/RoleManagerTest.java b/tests/cts/role/src/android/app/role/cts/RoleManagerTest.java
index e6b27382f..2e32a3f90 100644
--- a/tests/cts/role/src/android/app/role/cts/RoleManagerTest.java
+++ b/tests/cts/role/src/android/app/role/cts/RoleManagerTest.java
@@ -255,6 +255,7 @@ public class RoleManagerTest {
@RequiresFlagsEnabled(Flags.FLAG_ENHANCED_CONFIRMATION_MODE_APIS_ENABLED)
@FlakyTest(bugId = 288468003, detail = "CtsRoleTestCases is breaching 20min SLO")
public void requestRoleThenBlockRequestRoleDialogByRestrictedSettingDialog() throws Exception {
+ assumeTrue(sRoleManager.isRoleAvailable(RoleManager.ROLE_SMS));
assumeFalse(sIsWatch || sIsAutomotive || sIsTelevision);
runWithShellPermissionIdentity(
() -> setEnhancedConfirmationRestrictedAppOpMode(sContext, APP_PACKAGE_NAME,
@@ -675,6 +676,7 @@ public class RoleManagerTest {
@FlakyTest(bugId = 288468003, detail = "CtsRoleTestCases is breaching 20min SLO")
public void openDefaultAppDetailsOnHandHeldThenRestrictedAppIsNotSelectableAsDefaultApp()
throws Exception {
+ assumeTrue(sRoleManager.isRoleAvailable(RoleManager.ROLE_DIALER));
assumeFalse(sIsWatch || sIsAutomotive || sIsTelevision);
runWithShellPermissionIdentity(
() -> setEnhancedConfirmationRestrictedAppOpMode(sContext, APP_PACKAGE_NAME,