Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9844e24a authored by Hai Zhang's avatar Hai Zhang
Browse files

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
parent 11b877d7
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -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
+15 −3
Original line number Diff line number Diff line
@@ -111,6 +111,12 @@ public class Role {
    @StringRes
    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.
     */
@@ -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;
+22 −13
Original line number Diff line number Diff line
@@ -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,19 +306,27 @@ public class Roles {
            return null;
        }

        Integer requestDescriptionResource = requireAttributeResourceValue(parser,
        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);
            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,
                TAG_ROLE);
@@ -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
+6 −0
Original line number Diff line number Diff line
@@ -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();