summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--res/xml/roles.xml3
-rw-r--r--src/com/android/packageinstaller/role/model/Role.java18
-rw-r--r--src/com/android/packageinstaller/role/model/Roles.java35
-rw-r--r--src/com/android/packageinstaller/role/ui/RequestRoleActivity.java6
4 files changed, 44 insertions, 18 deletions
diff --git a/res/xml/roles.xml b/res/xml/roles.xml
index 0750c13c..775ddf45 100644
--- a/res/xml/roles.xml
+++ b/res/xml/roles.xml
@@ -80,8 +80,7 @@
exclusive="true"
showNone="true"
label="@string/role_assistant_label"
- requestDescription="@string/role_assistant_request_description"
- requestTitle="@string/role_assistant_request_title"
+ requestable="false"
shortLabel="@string/role_assistant_short_label">
<required-components>
<!-- Qualified components are determined int AssistantRoleBehavior. This comment here is
diff --git a/src/com/android/packageinstaller/role/model/Role.java b/src/com/android/packageinstaller/role/model/Role.java
index eb63cd24..f3275d78 100644
--- a/src/com/android/packageinstaller/role/model/Role.java
+++ b/src/com/android/packageinstaller/role/model/Role.java
@@ -112,6 +112,12 @@ public class Role {
private final int mRequestTitleResource;
/**
+ * Whether this role is requestable by applications with
+ * {@link android.app.role.RoleManager#createRequestRoleIntent(String)}.
+ */
+ private final boolean mRequestable;
+
+ /**
* The string resource for the short label of this role, currently used when in a list of roles.
*/
@StringRes
@@ -156,9 +162,10 @@ public class Role {
public Role(@NonNull String name, @Nullable RoleBehavior behavior,
@StringRes int descriptionResource, boolean exclusive, @StringRes int labelResource,
@StringRes int requestDescriptionResource, @StringRes int requestTitleResource,
- @StringRes int shortLabelResource, boolean showNone, boolean systemOnly,
- @NonNull List<RequiredComponent> requiredComponents, @NonNull List<String> permissions,
- @NonNull List<AppOp> appOps, @NonNull List<PreferredActivity> preferredActivities) {
+ boolean requestable, @StringRes int shortLabelResource, boolean showNone,
+ boolean systemOnly, @NonNull List<RequiredComponent> requiredComponents,
+ @NonNull List<String> permissions, @NonNull List<AppOp> appOps,
+ @NonNull List<PreferredActivity> preferredActivities) {
mName = name;
mBehavior = behavior;
mDescriptionResource = descriptionResource;
@@ -166,6 +173,7 @@ public class Role {
mLabelResource = labelResource;
mRequestDescriptionResource = requestDescriptionResource;
mRequestTitleResource = requestTitleResource;
+ mRequestable = requestable;
mShortLabelResource = shortLabelResource;
mShowNone = showNone;
mSystemOnly = systemOnly;
@@ -209,6 +217,10 @@ public class Role {
return mRequestTitleResource;
}
+ public boolean isRequestable() {
+ return mRequestable;
+ }
+
@StringRes
public int getShortLabelResource() {
return mShortLabelResource;
diff --git a/src/com/android/packageinstaller/role/model/Roles.java b/src/com/android/packageinstaller/role/model/Roles.java
index 47eea835..1a3af42b 100644
--- a/src/com/android/packageinstaller/role/model/Roles.java
+++ b/src/com/android/packageinstaller/role/model/Roles.java
@@ -76,6 +76,7 @@ public class Roles {
private static final String ATTRIBUTE_LABEL = "label";
private static final String ATTRIBUTE_REQUEST_TITLE = "requestTitle";
private static final String ATTRIBUTE_REQUEST_DESCRIPTION = "requestDescription";
+ private static final String ATTRIBUTE_REQUESTABLE = "requestable";
private static final String ATTRIBUTE_SHORT_LABEL = "shortLabel";
private static final String ATTRIBUTE_SHOW_NONE = "showNone";
private static final String ATTRIBUTE_SYSTEM_ONLY = "systemOnly";
@@ -305,18 +306,26 @@ public class Roles {
return null;
}
- Integer requestDescriptionResource = requireAttributeResourceValue(parser,
- ATTRIBUTE_REQUEST_DESCRIPTION, 0, TAG_ROLE);
- if (requestDescriptionResource == null) {
- skipCurrentTag(parser);
- return null;
- }
+ boolean requestable = getAttributeBooleanValue(parser, ATTRIBUTE_REQUESTABLE, true);
+ Integer requestDescriptionResource;
+ Integer requestTitleResource;
+ if (requestable) {
+ requestDescriptionResource = requireAttributeResourceValue(parser,
+ ATTRIBUTE_REQUEST_DESCRIPTION, 0, TAG_ROLE);
+ if (requestDescriptionResource == null) {
+ skipCurrentTag(parser);
+ return null;
+ }
- Integer requestTitleResource = requireAttributeResourceValue(parser,
- ATTRIBUTE_REQUEST_TITLE, 0, TAG_ROLE);
- if (requestTitleResource == null) {
- skipCurrentTag(parser);
- return null;
+ requestTitleResource = requireAttributeResourceValue(parser, ATTRIBUTE_REQUEST_TITLE, 0,
+ TAG_ROLE);
+ if (requestTitleResource == null) {
+ skipCurrentTag(parser);
+ return null;
+ }
+ } else {
+ requestDescriptionResource = 0;
+ requestTitleResource = 0;
}
Integer shortLabelResource = requireAttributeResourceValue(parser, ATTRIBUTE_SHORT_LABEL, 0,
@@ -402,8 +411,8 @@ public class Roles {
preferredActivities = Collections.emptyList();
}
return new Role(name, behavior, descriptionResource, exclusive, labelResource,
- requestDescriptionResource, requestTitleResource, shortLabelResource, showNone,
- systemOnly, requiredComponents, permissions, appOps, preferredActivities);
+ requestDescriptionResource, requestTitleResource, requestable, shortLabelResource,
+ showNone, systemOnly, requiredComponents, permissions, appOps, preferredActivities);
}
@NonNull
diff --git a/src/com/android/packageinstaller/role/ui/RequestRoleActivity.java b/src/com/android/packageinstaller/role/ui/RequestRoleActivity.java
index 9b06c422..913cceae 100644
--- a/src/com/android/packageinstaller/role/ui/RequestRoleActivity.java
+++ b/src/com/android/packageinstaller/role/ui/RequestRoleActivity.java
@@ -90,6 +90,12 @@ public class RequestRoleActivity extends FragmentActivity {
return;
}
+ if (!role.isRequestable()) {
+ Log.e(LOG_TAG, "Role is not requestable: " + mRoleName);
+ finish();
+ return;
+ }
+
if (!role.isExclusive()) {
Log.e(LOG_TAG, "Role is not exclusive: " + mRoleName);
finish();