summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--PermissionController/res/values-ar/strings.xml4
-rw-r--r--PermissionController/res/values-ja/strings.xml4
-rw-r--r--PermissionController/res/values-nb/strings.xml2
-rw-r--r--PermissionController/res/values-pl/strings.xml2
-rw-r--r--PermissionController/res/values/strings.xml16
-rw-r--r--PermissionController/role-controller/java/com/android/role/controller/model/Role.java9
-rw-r--r--PermissionController/src/com/android/permissioncontroller/ecm/EnhancedConfirmationDialogActivity.kt15
-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.kt183
11 files changed, 207 insertions, 69 deletions
diff --git a/PermissionController/res/values-ar/strings.xml b/PermissionController/res/values-ar/strings.xml
index 5381d11b4..e22ec0182 100644
--- a/PermissionController/res/values-ar/strings.xml
+++ b/PermissionController/res/values-ar/strings.xml
@@ -475,7 +475,7 @@
<string name="permgrouprequest_device_aware_storage_isolated" msgid="6463062962458809752">"‏هل تريد السماح لـ &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; بالوصول إلى الصور والوسائط على &lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/b&gt;؟"</string>
<string name="permgrouprequest_contacts" msgid="8391550064551053695">"‏هل تريد السماح لتطبيق &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; بالوصول إلى جهات الاتصال؟"</string>
<string name="permgrouprequest_device_aware_contacts" msgid="731025863972535928">"‏هل تريد السماح لـ &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; بالوصول إلى جهات اتصالك على &lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/b&gt;؟"</string>
- <string name="permgrouprequest_location" msgid="6990232580121067883">"‏هل تريد السماح لتطبيق &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; بالوصول إلى الموقع الجغرافي لهذا الجهاز؟"</string>
+ <string name="permgrouprequest_location" msgid="6990232580121067883">"‏هل مطلوب السماح لتطبيق &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; بالوصول إلى الموقع الجغرافي لهذا الجهاز؟"</string>
<string name="permgrouprequest_device_aware_location" msgid="6075412127429878638">"‏هل تريد السماح لـ &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; بالوصول إلى الموقع الجغرافي الخاص بـ &lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/b&gt;؟"</string>
<string name="permgrouprequestdetail_location" msgid="2635935335778429894">"لن يكون بإمكان التطبيق الوصول إلى الموقع الجغرافي إلا عند استخدامك لهذا التطبيق."</string>
<string name="permgroupbackgroundrequest_location" msgid="1085680897265734809">"‏هل تريد السماح لتطبيق &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; بالوصول إلى الموقع الجغرافي لهذا الجهاز؟"</string>
@@ -495,7 +495,7 @@
<string name="permgrouprequest_coarselocation_imagetext" msgid="8650605041483025297">"تقريبي"</string>
<string name="permgrouprequest_calendar" msgid="1493150855673603806">"‏هل تريد السماح لتطبيق &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; بالوصول إلى التقويم؟"</string>
<string name="permgrouprequest_device_aware_calendar" msgid="7161929851377463612">"‏هل تريد السماح لـ &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; بالوصول إلى تقويمك على &lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/b&gt;؟"</string>
- <string name="permgrouprequest_sms" msgid="5672063688745420991">"‏هل تريد السماح لتطبيق &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; بإرسال رسائل SMS وعرضها؟"</string>
+ <string name="permgrouprequest_sms" msgid="5672063688745420991">"‏هل مطلوب السماح لتطبيق <xliff:g id="APP_NAME">%1$s</xliff:g> بإرسال رسائل SMS وعرضها؟"</string>
<string name="permgrouprequest_device_aware_sms" msgid="6639977653040502291">"‏هل تريد السماح لـ &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; بإرسال الرسائل القصيرة وعرضها على &lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/b&gt;؟"</string>
<string name="permgrouprequest_storage" msgid="8717773092518621602">"‏هل تريد السماح لتطبيق &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; بالوصول إلى الصور والوسائط والملفات على جهازك؟"</string>
<string name="permgrouprequest_device_aware_storage" msgid="6933251810928606636">"‏هل تريد السماح لـ &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; بالوصول إلى الصور والوسائط والملفات على &lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/b&gt;؟"</string>
diff --git a/PermissionController/res/values-ja/strings.xml b/PermissionController/res/values-ja/strings.xml
index 43e204b69..0be93d464 100644
--- a/PermissionController/res/values-ja/strings.xml
+++ b/PermissionController/res/values-ja/strings.xml
@@ -491,8 +491,8 @@
<string name="permgrouprequest_device_aware_fineupgrade" msgid="4453775952305587571">"&lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/b&gt;の位置情報に対する &lt;b&gt;<xliff:g id="APP_NAME">&lt;b&gt;%1$s&lt;/b&gt;</xliff:g>&lt;/b&gt; のアクセス権を「おおよそ」から「正確」に変更しますか?"</string>
<string name="permgrouprequest_coarselocation" msgid="7244605063736425232">"このデバイスのおおよその位置情報へのアクセスを &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; に許可しますか?"</string>
<string name="permgrouprequest_device_aware_coarselocation" msgid="8367540370912066757">"&lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/b&gt;のおおよその位置情報へのアクセスを &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; に許可しますか?"</string>
- <string name="permgrouprequest_finelocation_imagetext" msgid="1313062433398914334">"正確"</string>
- <string name="permgrouprequest_coarselocation_imagetext" msgid="8650605041483025297">"おおよそ"</string>
+ <string name="permgrouprequest_finelocation_imagetext" msgid="1313062433398914334">"正確な位置"</string>
+ <string name="permgrouprequest_coarselocation_imagetext" msgid="8650605041483025297">"おおよその位置"</string>
<string name="permgrouprequest_calendar" msgid="1493150855673603806">"カレンダーへのアクセスを「&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;」に許可しますか?"</string>
<string name="permgrouprequest_device_aware_calendar" msgid="7161929851377463612">"&lt;b&gt;<xliff:g id="DEVICE_NAME">%2$s</xliff:g>&lt;/b&gt;内のカレンダーへのアクセスを &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; に許可しますか?"</string>
<string name="permgrouprequest_sms" msgid="5672063688745420991">"SMS メッセージの送信と表示を「&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;」に許可しますか?"</string>
diff --git a/PermissionController/res/values-nb/strings.xml b/PermissionController/res/values-nb/strings.xml
index e2930ac8a..3835d7573 100644
--- a/PermissionController/res/values-nb/strings.xml
+++ b/PermissionController/res/values-nb/strings.xml
@@ -443,7 +443,7 @@
<string name="default_app_recommended" msgid="5669584821778942909">"Optimalisert for enheten"</string>
<string name="default_app_others" msgid="7793029848126079876">"Andre"</string>
<string name="default_app_none" msgid="9084592086808194457">"Ingen"</string>
- <string name="default_app_system_default" msgid="6218386768175513760">"(System-&amp;shy;standard)"</string>
+ <string name="default_app_system_default" msgid="6218386768175513760">"(System-&amp;#173;standard)"</string>
<string name="default_app_no_apps" msgid="115720991680586885">"Ingen apper"</string>
<string name="default_payment_app_other_nfc_services" msgid="5957633798695758917">"Andre NFC-tjenester"</string>
<string name="car_default_app_selected" msgid="5416420830430644174">"Valgt"</string>
diff --git a/PermissionController/res/values-pl/strings.xml b/PermissionController/res/values-pl/strings.xml
index 8316ac98c..0aefe4a69 100644
--- a/PermissionController/res/values-pl/strings.xml
+++ b/PermissionController/res/values-pl/strings.xml
@@ -348,7 +348,7 @@
<string name="no_apps_allowed" msgid="7718822655254468631">"Nie zezwolono żadnym aplikacjom"</string>
<string name="no_apps_allowed_full" msgid="8011716991498934104">"Brak aplikacji z uprawnieniami dla wszystkich plików"</string>
<string name="no_apps_allowed_scoped" msgid="4908850477787659501">"Brak aplikacji z uprawnieniami tylko dla multimediów"</string>
- <string name="no_apps_denied" msgid="7663435886986784743">"Nie zabroniono dostępu żadnym aplikacjom"</string>
+ <string name="no_apps_denied" msgid="7663435886986784743">"Nie odmówiono dostępu żadnym aplikacjom"</string>
<string name="car_permission_selected" msgid="180837028920791596">"Wybrana"</string>
<string name="settings" msgid="5409109923158713323">"Ustawienia"</string>
<string name="accessibility_service_dialog_title_single" msgid="7956432823014102366">"Usługa <xliff:g id="SERVICE_NAME">%s</xliff:g> ma pełny dostęp do urządzenia"</string>
diff --git a/PermissionController/res/values/strings.xml b/PermissionController/res/values/strings.xml
index 5714a2460..f5a997674 100644
--- a/PermissionController/res/values/strings.xml
+++ b/PermissionController/res/values/strings.xml
@@ -1409,9 +1409,7 @@
<!-- Content for dialog shown when the user should confirm an incident / bug report.
[CHAR LIMIT=none] -->
- <string name="incident_report_dialog_text">"<xliff:g id="app_name" example="Gmail">%1$s</xliff:g> is requesting to upload a bug report from this device taken on <xliff:g id="date" example="December 26, 2018">%2$s</xliff:g> at <xliff:g id="time" example="1:20 PM">%3$s</xliff:g>. Bug reports include personal information about your device or logged by apps, for example, user names, location data, device identifiers, and network information. Only share bug reports with people and apps you trust with this information.
-
-Allow <xliff:g id="app_name" example="Gmail">%4$s</xliff:g> to upload a bug report?"</string>
+ <string name="incident_report_dialog_text">"<xliff:g id="app_name" example="Gmail">%1$s</xliff:g> is requesting to upload a bug report from this device taken on <xliff:g id="date" example="December 26, 2018">%2$s</xliff:g> at <xliff:g id="time" example="1:20 PM">%3$s</xliff:g>. Bug reports include personal information about your device or logged by apps, for example, user names, location data, device identifiers, and network information. Only share bug reports with people and apps you trust with this information.\n\nAllow <xliff:g id="app_name" example="Gmail">%4$s</xliff:g> to upload a bug report?"</string>
<!-- Content for dialog shown when there was an error parsing the incident / bug report.
[CHAR LIMIT=none] -->
@@ -2031,17 +2029,15 @@ Allow <xliff:g id="app_name" example="Gmail">%4$s</xliff:g> to upload a bug repo
<!--Title for dialog displayed to tell user that settings are blocked due to the phone state (such as being in a call with an unknown number) [CHAR LIMIT=50] -->
<string name="enhanced_confirmation_phone_state_dialog_title">Can\u2019t complete action during call</string>
<!--Content for dialog displayed to tell user that settings are blocked due to the phone state (such as being in a call with an unknown number) [CHAR LIMIT=NONE] -->
- <string name="enhanced_confirmation_phone_state_dialog_desc"><xliff:g id="setting_description" example="allowing apps to install other apps">%1$s</xliff:g>\n\n
- This setting is blocked to protect your device and data</string>
+ <string name="enhanced_confirmation_phone_state_dialog_desc">This setting is blocked to protect your device and data.<xliff:g id="scam_use_setting_description" example="scammers may ask you to allow apps to install other apps">%1$s</xliff:g></string>
<!--Content explaining that the "install other apps" setting is blocked due to the phone state in a dialog displayed to the user [CHAR LIMIT=NONE] -->
- <string name="enhanced_confirmation_phone_state_dialog_install_desc_prefix">Scammers may try to install harmful apps by asking you to install unknown apps from a new source.</string>
+ <string name="enhanced_confirmation_phone_state_dialog_install_desc"><xliff:g id="empty_line">\n\n</xliff:g>Scammers may try to install harmful apps by asking you to install unknown apps from a new source.</string>
<!--Content explaining that the "enable accessibility service" setting is blocked due to the phone state in a dialog displayed to the user [CHAR LIMIT=NONE] -->
- <string name="enhanced_confirmation_phone_state_dialog_a11y_desc_prefix">Scammers may try to take control of your device by asking you to allow accessibility access for an app.</string>
-
- <!--Content explaining that a generic setting is blocked due to the phone state in a dialog displayed to the user [CHAR LIMIT=NONE] -->
- <string name="enhanced_confirmation_phone_state_dialog_generic_desc_prefix">Scammers may attempt to harm your device with this setting.</string>
+ <string name="enhanced_confirmation_phone_state_dialog_a11y_desc"><xliff:g id="empty_line">\n\n</xliff:g>Scammers may try to take control of your device by asking you to allow accessibility access for an app.</string>
+ <!--Content explaining that a generic setting is blocked due to the phone state in a dialog displayed to the user. currently empty [CHAR LIMIT=NONE] -->
+ <string name="enhanced_confirmation_phone_state_dialog_generic_desc" />
<!--Title for dialog displayed to tell user that permissions are blocked by setting restrictions [CHAR LIMIT=50] -->
<string name="enhanced_confirmation_dialog_title_permission">App was denied access to <xliff:g id="permission_name" example="contacts">%1$s</xliff:g></string>
diff --git a/PermissionController/role-controller/java/com/android/role/controller/model/Role.java b/PermissionController/role-controller/java/com/android/role/controller/model/Role.java
index 6a7251563..0f79b19c0 100644
--- a/PermissionController/role-controller/java/com/android/role/controller/model/Role.java
+++ b/PermissionController/role-controller/java/com/android/role/controller/model/Role.java
@@ -992,7 +992,14 @@ public class Role {
*/
public void onHolderAddedAsUser(@NonNull String packageName, @NonNull UserHandle user,
@NonNull Context context) {
- RoleManagerCompat.setRoleFallbackEnabledAsUser(this, true, user, context);
+ if (RoleFlags.isProfileGroupExclusivityAvailable()
+ && com.android.permission.flags.Flags.crossUserRoleUxBugfixEnabled()
+ && getExclusivity() == Role.EXCLUSIVITY_PROFILE_GROUP) {
+ UserHandle profileParent = UserUtils.getProfileParentOrSelf(user, context);
+ RoleManagerCompat.setRoleFallbackEnabledAsUser(this, true, profileParent, context);
+ } else {
+ RoleManagerCompat.setRoleFallbackEnabledAsUser(this, true, user, context);
+ }
}
/**
diff --git a/PermissionController/src/com/android/permissioncontroller/ecm/EnhancedConfirmationDialogActivity.kt b/PermissionController/src/com/android/permissioncontroller/ecm/EnhancedConfirmationDialogActivity.kt
index d3c7e3a0b..c5191938e 100644
--- a/PermissionController/src/com/android/permissioncontroller/ecm/EnhancedConfirmationDialogActivity.kt
+++ b/PermissionController/src/com/android/permissioncontroller/ecm/EnhancedConfirmationDialogActivity.kt
@@ -153,8 +153,8 @@ class EnhancedConfirmationDialogActivity : FragmentActivity() {
var message: CharSequence?
if (settingType == SettingType.BLOCKED_DUE_TO_PHONE_STATE) {
title = settingType.titleRes?.let { context.getString(it) }
- val messagePrefix = getPhoneStateMessagePrefix(context, settingIdentifier)
- message = settingType.messageRes?.let { context.getString(it, messagePrefix) }
+ val settingMessage = getPhoneStateSettingMessage(context, settingIdentifier)
+ message = settingType.messageRes?.let { context.getString(it, settingMessage) }
} else {
val url =
context.getString(R.string.help_url_action_disabled_by_restricted_settings)
@@ -165,18 +165,17 @@ class EnhancedConfirmationDialogActivity : FragmentActivity() {
return Setting(title, message)
}
- private fun getPhoneStateMessagePrefix(
+ private fun getPhoneStateSettingMessage(
context: Context,
settingsIdentifier: String,
): String {
return context.getString(
when (settingsIdentifier) {
AppOpsManager.OPSTR_BIND_ACCESSIBILITY_SERVICE ->
- R.string.enhanced_confirmation_phone_state_dialog_a11y_desc_prefix
+ R.string.enhanced_confirmation_phone_state_dialog_a11y_desc
AppOpsManager.OPSTR_REQUEST_INSTALL_PACKAGES ->
- R.string.enhanced_confirmation_phone_state_dialog_install_desc_prefix
- else ->
- R.string.enhanced_confirmation_phone_state_dialog_generic_desc_prefix
+ R.string.enhanced_confirmation_phone_state_dialog_install_desc
+ else -> R.string.enhanced_confirmation_phone_state_dialog_generic_desc
}
)
}
@@ -278,7 +277,7 @@ class EnhancedConfirmationDialogActivity : FragmentActivity() {
return AlertDialog.Builder(dialogActivity)
.setView(createDialogView(dialogActivity, title, message))
- .setPositiveButton(R.string.enhanced_confirmation_dialog_ok) { _, _ ->
+ .setPositiveButton(R.string.dialog_close) { _, _ ->
dialogActivity.onDialogResult(DialogResult.Okay)
}
.create()
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 f070fa9aa..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,6 +27,7 @@ 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
@@ -95,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)
@@ -379,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)
@@ -407,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)
}
@@ -472,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)
@@ -484,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)
@@ -504,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)
}
@@ -566,6 +616,50 @@ 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
@@ -1281,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()
@@ -1308,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)
@@ -1317,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()
}
@@ -1334,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()
@@ -1361,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)
@@ -1370,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()
}
@@ -1387,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()
@@ -1412,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()
@@ -1421,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()
}
@@ -1438,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()
@@ -1465,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)
@@ -1474,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()
}
@@ -1491,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()
@@ -1518,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)
@@ -1527,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()
}
@@ -1544,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()
@@ -1569,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()
@@ -1578,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()
}
@@ -1950,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()
@@ -1977,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)
@@ -1986,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()
}
@@ -2007,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()
@@ -2032,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()
}
@@ -2053,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()
@@ -2078,7 +2172,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()
}
@@ -2215,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),
@@ -2226,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(),
@@ -2237,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)
}
}
@@ -2245,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)
@@ -2262,6 +2373,8 @@ 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 =