summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Richard MacGregor <rmacgregor@google.com> 2024-12-19 16:24:50 -0800
committer Richard MacGregor <rmacgregor@google.com> 2025-01-15 11:46:29 -0800
commitd15cbbe77a45aa04e780ac4580b221acbd8844c4 (patch)
treec590487cc4ad2f64d234feeb30c7a8db2c0c534c
parentb8f6a1265df44cf22b11bd187af33a103e49acb6 (diff)
Fix rolebehavior ability to override role visible
Fix bug where if role was `visible="false"` in roles.xml, then RoleBehavior was not able to enable it by overriding RoleBehavior.isVisibleAsUser() Bug: 383126474 Flag: EXEMPT bugfix Relnote: N/A Test: atest RoleManagerTest Test: atest RoleMultiUserTest Test: atest RoleParserTest Change-Id: Ib07ea13199641d4301f397452d4b03f173cf376f
-rw-r--r--PermissionController/res/xml/roles.xml2
-rw-r--r--PermissionController/role-controller/java/com/android/role/controller/behavior/AssistantRoleBehavior.java2
-rw-r--r--PermissionController/role-controller/java/com/android/role/controller/behavior/BrowserRoleBehavior.java2
-rw-r--r--PermissionController/role-controller/java/com/android/role/controller/behavior/DialerRoleBehavior.java2
-rw-r--r--PermissionController/role-controller/java/com/android/role/controller/behavior/EmergencyRoleBehavior.java2
-rw-r--r--PermissionController/role-controller/java/com/android/role/controller/behavior/HomeRoleBehavior.java2
-rw-r--r--PermissionController/role-controller/java/com/android/role/controller/behavior/ReservedForTestingProfileGroupExclusivityRoleBehavior.java2
-rw-r--r--PermissionController/role-controller/java/com/android/role/controller/behavior/SmsRoleBehavior.java2
-rw-r--r--PermissionController/role-controller/java/com/android/role/controller/model/Role.java20
-rw-r--r--PermissionController/role-controller/java/com/android/role/controller/model/RoleBehavior.java8
-rw-r--r--PermissionController/role-controller/java/com/android/role/controller/model/RoleParser.java3
11 files changed, 31 insertions, 16 deletions
diff --git a/PermissionController/res/xml/roles.xml b/PermissionController/res/xml/roles.xml
index 69ea7b1b7..2fd5d6ac5 100644
--- a/PermissionController/res/xml/roles.xml
+++ b/PermissionController/res/xml/roles.xml
@@ -1885,7 +1885,7 @@
shortLabel="@string/role_for_testing_profile_group_exclusivity_short_label"
showNone="true"
uiBehavior="ReservedForTestingProfileGroupExclusivityRoleUiBehavior"
- visible="true"/>
+ visible="false"/>
<!---
~ A role for the vendor package that provides privacy-preserving intelligent processor for
diff --git a/PermissionController/role-controller/java/com/android/role/controller/behavior/AssistantRoleBehavior.java b/PermissionController/role-controller/java/com/android/role/controller/behavior/AssistantRoleBehavior.java
index d025d1b03..1dc0aea48 100644
--- a/PermissionController/role-controller/java/com/android/role/controller/behavior/AssistantRoleBehavior.java
+++ b/PermissionController/role-controller/java/com/android/role/controller/behavior/AssistantRoleBehavior.java
@@ -230,7 +230,7 @@ public class AssistantRoleBehavior implements RoleBehavior {
}
@Override
- public boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user,
+ public Boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user,
@NonNull Context context) {
return VisibilityMixin.isVisible("config_showDefaultAssistant", false, user, context);
}
diff --git a/PermissionController/role-controller/java/com/android/role/controller/behavior/BrowserRoleBehavior.java b/PermissionController/role-controller/java/com/android/role/controller/behavior/BrowserRoleBehavior.java
index 0261e1eee..95b86f0ca 100644
--- a/PermissionController/role-controller/java/com/android/role/controller/behavior/BrowserRoleBehavior.java
+++ b/PermissionController/role-controller/java/com/android/role/controller/behavior/BrowserRoleBehavior.java
@@ -157,7 +157,7 @@ public class BrowserRoleBehavior implements RoleBehavior {
}
@Override
- public boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user,
+ public Boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user,
@NonNull Context context) {
return VisibilityMixin.isVisible("config_showBrowserRole", true, user, context);
}
diff --git a/PermissionController/role-controller/java/com/android/role/controller/behavior/DialerRoleBehavior.java b/PermissionController/role-controller/java/com/android/role/controller/behavior/DialerRoleBehavior.java
index 153f4a6b4..aa0902136 100644
--- a/PermissionController/role-controller/java/com/android/role/controller/behavior/DialerRoleBehavior.java
+++ b/PermissionController/role-controller/java/com/android/role/controller/behavior/DialerRoleBehavior.java
@@ -80,7 +80,7 @@ public class DialerRoleBehavior implements RoleBehavior {
}
@Override
- public boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user,
+ public Boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user,
@NonNull Context context) {
return VisibilityMixin.isVisible("config_showDialerRole", true, user, context);
}
diff --git a/PermissionController/role-controller/java/com/android/role/controller/behavior/EmergencyRoleBehavior.java b/PermissionController/role-controller/java/com/android/role/controller/behavior/EmergencyRoleBehavior.java
index f19c86596..4a52b0b03 100644
--- a/PermissionController/role-controller/java/com/android/role/controller/behavior/EmergencyRoleBehavior.java
+++ b/PermissionController/role-controller/java/com/android/role/controller/behavior/EmergencyRoleBehavior.java
@@ -71,7 +71,7 @@ public class EmergencyRoleBehavior implements RoleBehavior {
}
@Override
- public boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user,
+ public Boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user,
@NonNull Context context) {
return VisibilityMixin.isVisible("config_showDefaultEmergency", false, user, context);
}
diff --git a/PermissionController/role-controller/java/com/android/role/controller/behavior/HomeRoleBehavior.java b/PermissionController/role-controller/java/com/android/role/controller/behavior/HomeRoleBehavior.java
index 8c1446b50..b226674a0 100644
--- a/PermissionController/role-controller/java/com/android/role/controller/behavior/HomeRoleBehavior.java
+++ b/PermissionController/role-controller/java/com/android/role/controller/behavior/HomeRoleBehavior.java
@@ -186,7 +186,7 @@ public class HomeRoleBehavior implements RoleBehavior {
}
@Override
- public boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user,
+ public Boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user,
@NonNull Context context) {
return VisibilityMixin.isVisible("config_showDefaultHome", false, user, context);
}
diff --git a/PermissionController/role-controller/java/com/android/role/controller/behavior/ReservedForTestingProfileGroupExclusivityRoleBehavior.java b/PermissionController/role-controller/java/com/android/role/controller/behavior/ReservedForTestingProfileGroupExclusivityRoleBehavior.java
index f02b4d90c..5299886f6 100644
--- a/PermissionController/role-controller/java/com/android/role/controller/behavior/ReservedForTestingProfileGroupExclusivityRoleBehavior.java
+++ b/PermissionController/role-controller/java/com/android/role/controller/behavior/ReservedForTestingProfileGroupExclusivityRoleBehavior.java
@@ -49,7 +49,7 @@ public class ReservedForTestingProfileGroupExclusivityRoleBehavior implements Ro
}
@Override
- public boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user,
+ public Boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user,
@NonNull Context context) {
if (RoleFlags.isProfileGroupExclusivityAvailable()) {
Context userContext = UserUtils.getUserContext(context, user);
diff --git a/PermissionController/role-controller/java/com/android/role/controller/behavior/SmsRoleBehavior.java b/PermissionController/role-controller/java/com/android/role/controller/behavior/SmsRoleBehavior.java
index 4aff8a163..ee429c10e 100644
--- a/PermissionController/role-controller/java/com/android/role/controller/behavior/SmsRoleBehavior.java
+++ b/PermissionController/role-controller/java/com/android/role/controller/behavior/SmsRoleBehavior.java
@@ -133,7 +133,7 @@ public class SmsRoleBehavior implements RoleBehavior {
}
@Override
- public boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user,
+ public Boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user,
@NonNull Context context) {
return VisibilityMixin.isVisible("config_showSmsRole", true, user, context);
}
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 9773b93a9..5109e505b 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
@@ -1098,11 +1098,23 @@ public class Role {
* @return whether this role should be visible to user
*/
public boolean isVisibleAsUser(@NonNull UserHandle user, @NonNull Context context) {
- RoleBehavior behavior = getBehavior();
- if (behavior == null) {
- return isVisible();
+ if (mBehavior != null) {
+ Boolean isVisibleAsUser = mBehavior.isVisibleAsUser(this, user, context);
+ if (isVisibleAsUser != null) {
+ if (isVisibleAsUser && mStatic) {
+ throw new IllegalArgumentException("static=\"true\" is invalid for a visible "
+ + "role: " + mName);
+ }
+ if (isVisibleAsUser && (mDescriptionResource == 0
+ || mLabelResource == 0
+ || mShortLabelResource == 0)) {
+ throw new IllegalArgumentException("description, label, and shortLabel are "
+ + "required for a visible role: " + mName);
+ }
+ return isVisibleAsUser;
+ }
}
- return isVisible() && behavior.isVisibleAsUser(this, user, context);
+ return isVisible();
}
/**
diff --git a/PermissionController/role-controller/java/com/android/role/controller/model/RoleBehavior.java b/PermissionController/role-controller/java/com/android/role/controller/model/RoleBehavior.java
index 86ca8e2ce..3b08265d1 100644
--- a/PermissionController/role-controller/java/com/android/role/controller/model/RoleBehavior.java
+++ b/PermissionController/role-controller/java/com/android/role/controller/model/RoleBehavior.java
@@ -23,7 +23,6 @@ import android.os.UserHandle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
-import java.util.Collections;
import java.util.List;
/**
@@ -129,11 +128,12 @@ public interface RoleBehavior {
* @param user the user to check for
* @param context the `Context` to retrieve system services
*
- * @return whether this role should be visible to user
+ * @return whether this role should be visible to user, or {@code null} if not overridden
*/
- default boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user,
+ @Nullable
+ default Boolean isVisibleAsUser(@NonNull Role role, @NonNull UserHandle user,
@NonNull Context context) {
- return true;
+ return null;
}
/**
diff --git a/PermissionController/role-controller/java/com/android/role/controller/model/RoleParser.java b/PermissionController/role-controller/java/com/android/role/controller/model/RoleParser.java
index 4b05554e3..9c3746b79 100644
--- a/PermissionController/role-controller/java/com/android/role/controller/model/RoleParser.java
+++ b/PermissionController/role-controller/java/com/android/role/controller/model/RoleParser.java
@@ -413,6 +413,9 @@ public class RoleParser {
skipCurrentTag(parser);
return null;
}
+ } else if (behavior != null) {
+ labelResource = getAttributeResourceValue(parser, ATTRIBUTE_LABEL, 0);
+ shortLabelResource = getAttributeResourceValue(parser, ATTRIBUTE_SHORT_LABEL, 0);
} else {
labelResource = 0;
shortLabelResource = 0;