summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
Diffstat (limited to 'service')
-rw-r--r--service/java/com/android/role/RoleService.java88
1 files changed, 86 insertions, 2 deletions
diff --git a/service/java/com/android/role/RoleService.java b/service/java/com/android/role/RoleService.java
index 7c2ab01b1..f6c9fc6b6 100644
--- a/service/java/com/android/role/RoleService.java
+++ b/service/java/com/android/role/RoleService.java
@@ -16,6 +16,8 @@
package com.android.role;
+import static android.app.role.RoleManager.ROLE_RESERVED_FOR_TESTING_PROFILE_GROUP_EXCLUSIVITY;
+
import android.Manifest;
import android.annotation.AnyThread;
import android.annotation.MainThread;
@@ -49,6 +51,7 @@ import android.permission.flags.Flags;
import android.permission.internal.compat.UserHandleCompat;
import android.provider.Settings;
import android.text.TextUtils;
+import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.IndentingPrintWriter;
import android.util.Log;
@@ -120,12 +123,21 @@ public class RoleService extends SystemService implements RoleUserState.Callback
defaultApplicationRoles.add(RoleManager.ROLE_WALLET);
}
if (RoleFlags.isProfileGroupExclusivityAvailable()) {
- defaultApplicationRoles.add(
- RoleManager.ROLE_RESERVED_FOR_TESTING_PROFILE_GROUP_EXCLUSIVITY);
+ defaultApplicationRoles.add(ROLE_RESERVED_FOR_TESTING_PROFILE_GROUP_EXCLUSIVITY);
}
DEFAULT_APPLICATION_ROLES = defaultApplicationRoles.toArray(new String[0]);
}
+ private static final String[] TEST_ROLES;
+
+ static {
+ if (RoleFlags.isProfileGroupExclusivityAvailable()) {
+ TEST_ROLES = new String[] {ROLE_RESERVED_FOR_TESTING_PROFILE_GROUP_EXCLUSIVITY};
+ } else {
+ TEST_ROLES = new String[0];
+ }
+ }
+
@NonNull
private final AppOpsManager mAppOpsManager;
@@ -171,6 +183,14 @@ public class RoleService extends SystemService implements RoleUserState.Callback
private final SparseArray<ThrottledRunnable> mGrantDefaultRolesThrottledRunnables =
new SparseArray<>();
+ @GuardedBy("mLock")
+ @NonNull
+ private final Map<String, List<String>> mDefaultHoldersForTest = new ArrayMap<>();
+
+ @GuardedBy("mLock")
+ @NonNull
+ private final Set<String> mRolesVisibleForTest = new ArraySet<>();
+
public RoleService(@NonNull Context context) {
super(context);
@@ -1156,6 +1176,70 @@ public class RoleService extends SystemService implements RoleUserState.Callback
}
@Override
+ public List<String> getDefaultHoldersForTest(String roleName) {
+ Preconditions.checkState(RoleFlags.isProfileGroupExclusivityAvailable(),
+ "getDefaultHoldersForTest not available");
+ getContext().enforceCallingOrSelfPermission(Manifest.permission.MANAGE_ROLE_HOLDERS,
+ "getDefaultHoldersForTest");
+ Preconditions.checkStringNotEmpty(roleName, "roleName cannot be null or empty");
+ Preconditions.checkArgumentIsSupported(TEST_ROLES, roleName);
+
+ synchronized (mLock) {
+ return mDefaultHoldersForTest.getOrDefault(roleName, Collections.emptyList());
+ }
+ }
+
+ @Override
+ public void setDefaultHoldersForTest(String roleName, List<String> packageNames) {
+ Preconditions.checkState(RoleFlags.isProfileGroupExclusivityAvailable(),
+ "setDefaultHoldersForTest not available");
+ getContext().enforceCallingOrSelfPermission(Manifest.permission.MANAGE_ROLE_HOLDERS,
+ "setDefaultHoldersForTest");
+ Preconditions.checkStringNotEmpty(roleName, "roleName cannot be null or empty");
+ Preconditions.checkArgumentIsSupported(TEST_ROLES, roleName);
+
+ synchronized (mLock) {
+ if (packageNames == null || packageNames.isEmpty()) {
+ mDefaultHoldersForTest.remove(roleName);
+ } else {
+ mDefaultHoldersForTest.put(roleName, packageNames);
+ }
+ }
+ }
+
+ @Override
+ public boolean isRoleVisibleForTest(String roleName) {
+ Preconditions.checkState(RoleFlags.isProfileGroupExclusivityAvailable(),
+ "isRoleVisibleForTest not available");
+ getContext().enforceCallingOrSelfPermission(Manifest.permission.MANAGE_ROLE_HOLDERS,
+ "isRoleVisibleForTest");
+ Preconditions.checkStringNotEmpty(roleName, "roleName cannot be null or empty");
+ Preconditions.checkArgumentIsSupported(TEST_ROLES, roleName);
+
+ synchronized (mLock) {
+ return mRolesVisibleForTest.contains(roleName);
+ }
+ }
+
+ @Override
+ public void setRoleVisibleForTest(String roleName, boolean visible) {
+ Preconditions.checkState(RoleFlags.isProfileGroupExclusivityAvailable(),
+ "setRoleVisibleForTest not available");
+ getContext().enforceCallingOrSelfPermission(Manifest.permission.MANAGE_ROLE_HOLDERS,
+ "setRoleVisibleForTest");
+ Preconditions.checkStringNotEmpty(roleName, "roleName cannot be null or empty");
+ Preconditions.checkArgumentIsSupported(TEST_ROLES, roleName);
+
+ synchronized (mLock) {
+ if (visible) {
+ mRolesVisibleForTest.add(roleName);
+ } else {
+ mRolesVisibleForTest.remove(roleName);
+ }
+ }
+ }
+
+ @Override
protected void dump(@NonNull FileDescriptor fd, @NonNull PrintWriter fout,
@Nullable String[] args) {
if (!checkDumpPermission("role", fout)) {