diff options
| author | Dianne Hackborn <hackbod@google.com> | 2012-09-16 16:42:42 -0700 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-09-16 16:42:43 -0700 |
| commit | b137c8065db941b23ab23f6550a1c65693039ff5 (patch) | |
| tree | 9cf3fef5d9b0b9f0ba226df1b30e6d062362fe96 /core/java/android | |
| parent | a40b2b3457e233d5f601260761d1f39e894eb384 (diff) | |
| parent | 2ca2c8787130506d350d997c18bbc274faf88e37 (diff) | |
| download | frameworks_base-b137c8065db941b23ab23f6550a1c65693039ff5.zip frameworks_base-b137c8065db941b23ab23f6550a1c65693039ff5.tar.gz frameworks_base-b137c8065db941b23ab23f6550a1c65693039ff5.tar.bz2 | |
Merge "More adjustments to permissions." into jb-mr1-dev
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/content/pm/PackageParser.java | 3 | ||||
| -rw-r--r-- | core/java/android/content/pm/PermissionInfo.java | 45 | ||||
| -rwxr-xr-x | core/java/android/widget/AppSecurityPermissions.java | 14 |
3 files changed, 43 insertions, 19 deletions
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java index 5ebca9e..0a22fca 100644 --- a/core/java/android/content/pm/PackageParser.java +++ b/core/java/android/content/pm/PackageParser.java @@ -1543,6 +1543,9 @@ public class PackageParser { com.android.internal.R.styleable.AndroidManifestPermission_protectionLevel, PermissionInfo.PROTECTION_NORMAL); + perm.info.flags = sa.getInt( + com.android.internal.R.styleable.AndroidManifestPermission_permissionFlags, 0); + sa.recycle(); if (perm.info.protectionLevel == -1) { diff --git a/core/java/android/content/pm/PermissionInfo.java b/core/java/android/content/pm/PermissionInfo.java index 69b812c..5a63e5f 100644 --- a/core/java/android/content/pm/PermissionInfo.java +++ b/core/java/android/content/pm/PermissionInfo.java @@ -79,11 +79,34 @@ public class PermissionInfo extends PackageItemInfo implements Parcelable { public static final int PROTECTION_MASK_FLAGS = 0xf0; /** + * The level of access this permission is protecting, as per + * {@link android.R.attr#protectionLevel}. Values may be + * {@link #PROTECTION_NORMAL}, {@link #PROTECTION_DANGEROUS}, or + * {@link #PROTECTION_SIGNATURE}. May also include the additional + * flags {@link #PROTECTION_FLAG_SYSTEM} or {@link #PROTECTION_FLAG_DEVELOPMENT} + * (which only make sense in combination with the base + * {@link #PROTECTION_SIGNATURE}. + */ + public int protectionLevel; + + /** * The group this permission is a part of, as per * {@link android.R.attr#permissionGroup}. */ public String group; - + + /** + * Flag for {@link #flags}, corresponding to <code>costsMoney</code> + * value of {@link android.R.attr#permissionFlags}. + */ + public static final int FLAG_COSTS_MONEY = 1<<0; + + /** + * Additional flags about this permission as given by + * {@link android.R.attr#permissionFlags}. + */ + public int flags; + /** * A string resource identifier (in the package's resources) of this * permission's description. From the "description" attribute or, @@ -99,17 +122,6 @@ public class PermissionInfo extends PackageItemInfo implements Parcelable { */ public CharSequence nonLocalizedDescription; - /** - * The level of access this permission is protecting, as per - * {@link android.R.attr#protectionLevel}. Values may be - * {@link #PROTECTION_NORMAL}, {@link #PROTECTION_DANGEROUS}, or - * {@link #PROTECTION_SIGNATURE}. May also include the additional - * flags {@link #PROTECTION_FLAG_SYSTEM} or {@link #PROTECTION_FLAG_DEVELOPMENT} - * (which only make sense in combination with the base - * {@link #PROTECTION_SIGNATURE}. - */ - public int protectionLevel; - /** @hide */ public static int fixProtectionLevel(int level) { if (level == PROTECTION_SIGNATURE_OR_SYSTEM) { @@ -149,9 +161,10 @@ public class PermissionInfo extends PackageItemInfo implements Parcelable { public PermissionInfo(PermissionInfo orig) { super(orig); + protectionLevel = orig.protectionLevel; + flags = orig.flags; group = orig.group; descriptionRes = orig.descriptionRes; - protectionLevel = orig.protectionLevel; nonLocalizedDescription = orig.nonLocalizedDescription; } @@ -191,9 +204,10 @@ public class PermissionInfo extends PackageItemInfo implements Parcelable { public void writeToParcel(Parcel dest, int parcelableFlags) { super.writeToParcel(dest, parcelableFlags); + dest.writeInt(protectionLevel); + dest.writeInt(flags); dest.writeString(group); dest.writeInt(descriptionRes); - dest.writeInt(protectionLevel); TextUtils.writeToParcel(nonLocalizedDescription, dest, parcelableFlags); } @@ -209,9 +223,10 @@ public class PermissionInfo extends PackageItemInfo implements Parcelable { private PermissionInfo(Parcel source) { super(source); + protectionLevel = source.readInt(); + flags = source.readInt(); group = source.readString(); descriptionRes = source.readInt(); - protectionLevel = source.readInt(); nonLocalizedDescription = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source); } } diff --git a/core/java/android/widget/AppSecurityPermissions.java b/core/java/android/widget/AppSecurityPermissions.java index 76b34ef..f79ec42 100755 --- a/core/java/android/widget/AppSecurityPermissions.java +++ b/core/java/android/widget/AppSecurityPermissions.java @@ -67,7 +67,7 @@ public class AppSecurityPermissions { public static final int WHICH_ALL = 0xffff; private final static String TAG = "AppSecurityPermissions"; - private boolean localLOGV = false; + private final static boolean localLOGV = false; private Context mContext; private LayoutInflater mInflater; private PackageManager mPm; @@ -189,6 +189,8 @@ public class AppSecurityPermissions { permGrpIcon.setImageDrawable(icon); permNameView.setText(label); setOnClickListener(this); + if (localLOGV) Log.i(TAG, "Made perm item " + perm.name + + ": " + label + " in group " + grp.name); } @Override @@ -531,7 +533,9 @@ public class AppSecurityPermissions { MyPermissionGroupInfo grp, MyPermissionInfo perm, boolean first, CharSequence newPermPrefix) { PermissionItemView permView = (PermissionItemView)inflater.inflate( - R.layout.app_permission_item, null); + (perm.flags & PermissionInfo.FLAG_COSTS_MONEY) != 0 + ? R.layout.app_permission_item_money : R.layout.app_permission_item, + null); permView.setPermission(grp, perm, first, newPermPrefix); return permView; } @@ -568,6 +572,8 @@ public class AppSecurityPermissions { // already granted, they will not be granted as part of the install. if ((existingReqFlags&PackageInfo.REQUESTED_PERMISSION_GRANTED) != 0 && (pInfo.protectionLevel & PermissionInfo.PROTECTION_FLAG_DEVELOPMENT) != 0) { + if (localLOGV) Log.i(TAG, "Special perm " + pInfo.name + + ": protlevel=0x" + Integer.toHexString(pInfo.protectionLevel)); return true; } return false; @@ -650,9 +656,9 @@ public class AppSecurityPermissions { mPermGroupsList.add(pgrp); } Collections.sort(mPermGroupsList, mPermGroupComparator); - if (false) { + if (localLOGV) { for (MyPermissionGroupInfo grp : mPermGroupsList) { - Log.i("foo", "Group " + grp.name + " personal=" + Log.i(TAG, "Group " + grp.name + " personal=" + ((grp.flags&PermissionGroupInfo.FLAG_PERSONAL_INFO) != 0) + " priority=" + grp.priority); } |
