Merge "Add annotations and finals to PermissionGroupInfo"

This commit is contained in:
Philip P. Moltmann
2019-03-05 19:26:54 +00:00
committed by Android (Google) Code Review
5 changed files with 76 additions and 32 deletions

View File

@@ -11825,15 +11825,15 @@ package android.content.pm {
}
public class PermissionGroupInfo extends android.content.pm.PackageItemInfo implements android.os.Parcelable {
ctor public PermissionGroupInfo();
ctor public PermissionGroupInfo(android.content.pm.PermissionGroupInfo);
ctor @Deprecated public PermissionGroupInfo();
ctor @Deprecated public PermissionGroupInfo(@NonNull android.content.pm.PermissionGroupInfo);
method public int describeContents();
method public CharSequence loadDescription(android.content.pm.PackageManager);
method @Nullable public CharSequence loadDescription(@NonNull android.content.pm.PackageManager);
field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.PermissionGroupInfo> CREATOR;
field public static final int FLAG_PERSONAL_INFO = 1; // 0x1
field public int descriptionRes;
field @StringRes public int descriptionRes;
field public int flags;
field public CharSequence nonLocalizedDescription;
field @Nullable public CharSequence nonLocalizedDescription;
field public int priority;
}

View File

@@ -1709,9 +1709,9 @@ package android.content.pm {
}
public class PermissionGroupInfo extends android.content.pm.PackageItemInfo implements android.os.Parcelable {
field @StringRes public int backgroundRequestDetailResourceId;
field @StringRes public int backgroundRequestResourceId;
field @StringRes public int requestDetailResourceId;
field @StringRes public final int backgroundRequestDetailResourceId;
field @StringRes public final int backgroundRequestResourceId;
field @StringRes public final int requestDetailResourceId;
field @StringRes public int requestRes;
}

View File

@@ -45,6 +45,7 @@ import android.annotation.IntDef;
import android.annotation.IntRange;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.StringRes;
import android.annotation.TestApi;
import android.annotation.UnsupportedAppUsage;
import android.app.ActivityTaskManager;
@@ -3260,10 +3261,21 @@ public class PackageParser {
private boolean parsePermissionGroup(Package owner, int flags, Resources res,
XmlResourceParser parser, String[] outError)
throws XmlPullParserException, IOException {
PermissionGroup perm = new PermissionGroup(owner);
TypedArray sa = res.obtainAttributes(parser,
com.android.internal.R.styleable.AndroidManifestPermissionGroup);
int requestDetailResourceId = sa.getResourceId(
com.android.internal.R.styleable.AndroidManifestPermissionGroup_requestDetail, 0);
int backgroundRequestResourceId = sa.getResourceId(
com.android.internal.R.styleable.AndroidManifestPermissionGroup_backgroundRequest,
0);
int backgroundRequestDetailResourceId = sa.getResourceId(
com.android.internal.R.styleable
.AndroidManifestPermissionGroup_backgroundRequestDetail, 0);
PermissionGroup perm = new PermissionGroup(owner, requestDetailResourceId,
backgroundRequestResourceId, backgroundRequestDetailResourceId);
if (!parsePackageItemInfo(owner, perm.info, outError,
"<permission-group>", sa, true /*nameRequired*/,
com.android.internal.R.styleable.AndroidManifestPermissionGroup_name,
@@ -3282,14 +3294,6 @@ public class PackageParser {
0);
perm.info.requestRes = sa.getResourceId(
com.android.internal.R.styleable.AndroidManifestPermissionGroup_request, 0);
perm.info.requestDetailResourceId = sa.getResourceId(
com.android.internal.R.styleable.AndroidManifestPermissionGroup_requestDetail, 0);
perm.info.backgroundRequestResourceId = sa.getResourceId(
com.android.internal.R.styleable.AndroidManifestPermissionGroup_backgroundRequest,
0);
perm.info.backgroundRequestDetailResourceId = sa.getResourceId(
com.android.internal.R.styleable
.AndroidManifestPermissionGroup_backgroundRequestDetail, 0);
perm.info.flags = sa.getInt(
com.android.internal.R.styleable.AndroidManifestPermissionGroup_permissionGroupFlags, 0);
perm.info.priority = sa.getInt(
@@ -7676,9 +7680,12 @@ public class PackageParser {
@UnsupportedAppUsage
public final PermissionGroupInfo info;
public PermissionGroup(Package _owner) {
super(_owner);
info = new PermissionGroupInfo();
public PermissionGroup(Package owner, @StringRes int requestDetailResourceId,
@StringRes int backgroundRequestResourceId,
@StringRes int backgroundRequestDetailResourceId) {
super(owner);
info = new PermissionGroupInfo(requestDetailResourceId, backgroundRequestResourceId,
backgroundRequestDetailResourceId);
}
public PermissionGroup(Package _owner, PermissionGroupInfo _info) {

View File

@@ -16,12 +16,20 @@
package android.content.pm;
import static android.content.res.Resources.ID_NULL;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.StringRes;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
* Information you can retrieve about a particular security permission
* group known to the system. This corresponds to information collected from the
@@ -33,7 +41,7 @@ public class PermissionGroupInfo extends PackageItemInfo implements Parcelable {
* permission's description. From the "description" attribute or,
* if not set, 0.
*/
public int descriptionRes;
public @StringRes int descriptionRes;
/**
* A string resource identifier (in the package's resources) used to request the permissions.
@@ -54,7 +62,7 @@ public class PermissionGroupInfo extends PackageItemInfo implements Parcelable {
* @hide
*/
@SystemApi
public @StringRes int requestDetailResourceId;
public final @StringRes int requestDetailResourceId;
/**
* A string resource identifier (in the package's resources) used when requesting background
@@ -66,7 +74,7 @@ public class PermissionGroupInfo extends PackageItemInfo implements Parcelable {
* @hide
*/
@SystemApi
public @StringRes int backgroundRequestResourceId;
public final @StringRes int backgroundRequestResourceId;
/**
* A string resource identifier (in the package's resources) used as subtitle when requesting
@@ -78,7 +86,7 @@ public class PermissionGroupInfo extends PackageItemInfo implements Parcelable {
* @hide
*/
@SystemApi
public @StringRes int backgroundRequestDetailResourceId;
public final @StringRes int backgroundRequestDetailResourceId;
/**
* The description string provided in the AndroidManifest file, if any. You
@@ -86,7 +94,7 @@ public class PermissionGroupInfo extends PackageItemInfo implements Parcelable {
* is in a resource. You probably want
* {@link PermissionInfo#loadDescription} instead.
*/
public CharSequence nonLocalizedDescription;
public @Nullable CharSequence nonLocalizedDescription;
/**
* Flag for {@link #flags}, corresponding to <code>personalInfo</code>
@@ -94,21 +102,48 @@ public class PermissionGroupInfo extends PackageItemInfo implements Parcelable {
*/
public static final int FLAG_PERSONAL_INFO = 1<<0;
/** @hide */
@IntDef(flag = true, prefix = { "FLAG_" }, value = {
FLAG_PERSONAL_INFO,
})
@Retention(RetentionPolicy.SOURCE)
public @interface Flags {}
/**
* Additional flags about this group as given by
* {@link android.R.attr#permissionGroupFlags}.
*/
public int flags;
public @Flags int flags;
/**
* Prioritization of this group, for visually sorting with other groups.
*/
public int priority;
public PermissionGroupInfo() {
/**
* @hide
*/
public PermissionGroupInfo(@StringRes int requestDetailResourceId,
@StringRes int backgroundRequestResourceId,
@StringRes int backgroundRequestDetailResourceId) {
this.requestDetailResourceId = requestDetailResourceId;
this.backgroundRequestResourceId = backgroundRequestResourceId;
this.backgroundRequestDetailResourceId = backgroundRequestDetailResourceId;
}
public PermissionGroupInfo(PermissionGroupInfo orig) {
/**
* @deprecated Should only be created by the system.
*/
@Deprecated
public PermissionGroupInfo() {
this(ID_NULL, ID_NULL, ID_NULL);
}
/**
* @deprecated Should only be created by the system.
*/
@Deprecated
public PermissionGroupInfo(@NonNull PermissionGroupInfo orig) {
super(orig);
descriptionRes = orig.descriptionRes;
requestRes = orig.requestRes;
@@ -131,7 +166,7 @@ public class PermissionGroupInfo extends PackageItemInfo implements Parcelable {
* @return Returns a CharSequence containing the permission's description.
* If there is no description, null is returned.
*/
public CharSequence loadDescription(PackageManager pm) {
public @Nullable CharSequence loadDescription(@NonNull PackageManager pm) {
if (nonLocalizedDescription != null) {
return nonLocalizedDescription;
}
@@ -166,7 +201,7 @@ public class PermissionGroupInfo extends PackageItemInfo implements Parcelable {
dest.writeInt(priority);
}
public static final @android.annotation.NonNull Creator<PermissionGroupInfo> CREATOR =
public static final @NonNull Creator<PermissionGroupInfo> CREATOR =
new Creator<PermissionGroupInfo>() {
public PermissionGroupInfo createFromParcel(Parcel source) {
return new PermissionGroupInfo(source);

View File

@@ -15,6 +15,8 @@
*/
package com.android.server.pm;
import static android.content.res.Resources.ID_NULL;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertSame;
@@ -454,7 +456,7 @@ public class PackageParserTest {
pkg.applicationInfo = new ApplicationInfo();
pkg.permissions.add(new PackageParser.Permission(pkg));
pkg.permissionGroups.add(new PackageParser.PermissionGroup(pkg));
pkg.permissionGroups.add(new PackageParser.PermissionGroup(pkg, ID_NULL, ID_NULL, ID_NULL));
final PackageParser.ParseComponentArgs dummy = new PackageParser.ParseComponentArgs(
pkg, new String[1], 0, 0, 0, 0, 0, 0, null, 0, 0, 0);