summaryrefslogtreecommitdiffstats
path: root/core/java/android
diff options
context:
space:
mode:
authorDianne Hackborn <hackbod@google.com>2012-09-16 16:42:42 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2012-09-16 16:42:43 -0700
commitb137c8065db941b23ab23f6550a1c65693039ff5 (patch)
tree9cf3fef5d9b0b9f0ba226df1b30e6d062362fe96 /core/java/android
parenta40b2b3457e233d5f601260761d1f39e894eb384 (diff)
parent2ca2c8787130506d350d997c18bbc274faf88e37 (diff)
downloadframeworks_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.java3
-rw-r--r--core/java/android/content/pm/PermissionInfo.java45
-rwxr-xr-xcore/java/android/widget/AppSecurityPermissions.java14
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);
}