diff options
author | Hai Zhang <zhanghai@google.com> | 2019-04-18 13:32:21 +0800 |
---|---|---|
committer | Hai Zhang <zhanghai@google.com> | 2019-04-18 13:40:48 +0800 |
commit | 9844e24a9e453bf1a8df5f0e10f820d9cbe97b36 (patch) | |
tree | ec938a66874a3741b252a4797df4e4970571315c | |
parent | 11b877d75458605ea2aa6cd7e5947c2de9697986 (diff) | |
download | android_packages_apps_PackageInstaller-9844e24a9e453bf1a8df5f0e10f820d9cbe97b36.tar.gz android_packages_apps_PackageInstaller-9844e24a9e453bf1a8df5f0e10f820d9cbe97b36.tar.bz2 android_packages_apps_PackageInstaller-9844e24a9e453bf1a8df5f0e10f820d9cbe97b36.zip |
Don't allow requesting the assistant role.
By adding a requestable attribute for roles and set it to false for
assistant.
Bug: 130735926
Test: atest RoleManagerTest#requestAssistantRoleThenDeniedAutomatically
Change-Id: I66b4e203f2922645e3a357ca0f628faefadfe344
-rw-r--r-- | res/xml/roles.xml | 3 | ||||
-rw-r--r-- | src/com/android/packageinstaller/role/model/Role.java | 18 | ||||
-rw-r--r-- | src/com/android/packageinstaller/role/model/Roles.java | 35 | ||||
-rw-r--r-- | src/com/android/packageinstaller/role/ui/RequestRoleActivity.java | 6 |
4 files changed, 44 insertions, 18 deletions
diff --git a/res/xml/roles.xml b/res/xml/roles.xml index 617fc4d8..36cc47e1 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 834bd52e..73518869 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(); |