summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSvet Ganov <svetoslavganov@google.com>2015-07-06 15:57:05 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2015-07-06 15:57:05 +0000
commitd8c2bbcf65bc830fcc53e8a8af4ca61440a7adbb (patch)
tree0c26102a4278f1c69e2d8d5d3d1242ed3f116249
parente8b8d30a99d54a9905ef2622832628530b41341e (diff)
parent10c111ed35a0282ddf5dda540c53e3831bc9b0ec (diff)
downloadframeworks_base-d8c2bbcf65bc830fcc53e8a8af4ca61440a7adbb.zip
frameworks_base-d8c2bbcf65bc830fcc53e8a8af4ca61440a7adbb.tar.gz
frameworks_base-d8c2bbcf65bc830fcc53e8a8af4ca61440a7adbb.tar.bz2
am 10c111ed: Merge "Show basic feature warning for default granted permissions" into mnc-dev
* commit '10c111ed35a0282ddf5dda540c53e3831bc9b0ec': Show basic feature warning for default granted permissions
-rw-r--r--api/system-current.txt5
-rw-r--r--core/java/android/content/pm/PackageManager.java32
-rw-r--r--services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java11
-rw-r--r--services/core/java/com/android/server/pm/Settings.java17
4 files changed, 48 insertions, 17 deletions
diff --git a/api/system-current.txt b/api/system-current.txt
index e3f003c..f7955dd 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -9675,11 +9675,6 @@ package android.content.pm {
field public static final java.lang.String FEATURE_WEBVIEW = "android.software.webview";
field public static final java.lang.String FEATURE_WIFI = "android.hardware.wifi";
field public static final java.lang.String FEATURE_WIFI_DIRECT = "android.hardware.wifi.direct";
- field public static final int FLAG_PERMISSION_POLICY_FIXED = 4; // 0x4
- field public static final int FLAG_PERMISSION_REVOKE_ON_UPGRADE = 8; // 0x8
- field public static final int FLAG_PERMISSION_SYSTEM_FIXED = 16; // 0x10
- field public static final int FLAG_PERMISSION_USER_FIXED = 2; // 0x2
- field public static final int FLAG_PERMISSION_USER_SET = 1; // 0x1
field public static final int GET_ACTIVITIES = 1; // 0x1
field public static final int GET_CONFIGURATIONS = 16384; // 0x4000
field public static final int GET_DISABLED_COMPONENTS = 512; // 0x200
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index dd1c5c2..538007a 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -1924,7 +1924,6 @@ public abstract class PackageManager {
*
* @hide
*/
- @SystemApi
public static final int FLAG_PERMISSION_USER_SET = 1 << 0;
/**
@@ -1934,7 +1933,6 @@ public abstract class PackageManager {
*
* @hide
*/
- @SystemApi
public static final int FLAG_PERMISSION_USER_FIXED = 1 << 1;
/**
@@ -1944,7 +1942,6 @@ public abstract class PackageManager {
*
* @hide
*/
- @SystemApi
public static final int FLAG_PERMISSION_POLICY_FIXED = 1 << 2;
/**
@@ -1957,7 +1954,6 @@ public abstract class PackageManager {
*
* @hide
*/
- @SystemApi
public static final int FLAG_PERMISSION_REVOKE_ON_UPGRADE = 1 << 3;
/**
@@ -1966,9 +1962,19 @@ public abstract class PackageManager {
*
* @hide
*/
- @SystemApi
public static final int FLAG_PERMISSION_SYSTEM_FIXED = 1 << 4;
+
+ /**
+ * Permission flag: The permission is granted by default because it
+ * enables app functionality that is expected to work out-of-the-box
+ * for providing a smooth user experience. For example, the phone app
+ * is expected to have the phone permission.
+ *
+ * @hide
+ */
+ public static final int FLAG_PERMISSION_GRANTED_BY_DEFAULT = 1 << 5;
+
/**
* Mask for all permission flags.
*
@@ -2474,7 +2480,8 @@ public abstract class PackageManager {
FLAG_PERMISSION_USER_FIXED,
FLAG_PERMISSION_POLICY_FIXED,
FLAG_PERMISSION_REVOKE_ON_UPGRADE,
- FLAG_PERMISSION_SYSTEM_FIXED})
+ FLAG_PERMISSION_SYSTEM_FIXED,
+ FLAG_PERMISSION_GRANTED_BY_DEFAULT})
@Retention(RetentionPolicy.SOURCE)
public @interface PermissionFlags {}
@@ -4634,6 +4641,19 @@ public abstract class PackageManager {
}
/** {@hide} */
+ public static String permissionFlagToString(int flag) {
+ switch (flag) {
+ case FLAG_PERMISSION_GRANTED_BY_DEFAULT: return "FLAG_PERMISSION_GRANTED_BY_DEFAULT";
+ case FLAG_PERMISSION_POLICY_FIXED: return "FLAG_PERMISSION_POLICY_FIXED";
+ case FLAG_PERMISSION_SYSTEM_FIXED: return "FLAG_PERMISSION_SYSTEM_FIXED";
+ case FLAG_PERMISSION_USER_SET: return "FLAG_PERMISSION_USER_SET";
+ case FLAG_PERMISSION_REVOKE_ON_UPGRADE: return "FLAG_PERMISSION_REVOKE_ON_UPGRADE";
+ case FLAG_PERMISSION_USER_FIXED: return "FLAG_PERMISSION_USER_FIXED";
+ default: return Integer.toString(flag);
+ }
+ }
+
+ /** {@hide} */
public static class LegacyPackageInstallObserver extends PackageInstallObserver {
private final IPackageInstallObserver mLegacy;
diff --git a/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java b/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java
index e459e26..8678d9a 100644
--- a/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java
+++ b/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java
@@ -202,7 +202,8 @@ final class DefaultPermissionGrantPolicy {
mService.grantRuntimePermission(pkg.packageName, permission, userId);
mService.updatePermissionFlags(permission, pkg.packageName,
PackageManager.MASK_PERMISSION_FLAGS,
- PackageManager.FLAG_PERMISSION_SYSTEM_FIXED, userId);
+ PackageManager.FLAG_PERMISSION_SYSTEM_FIXED
+ | PackageManager.FLAG_PERMISSION_GRANTED_BY_DEFAULT, userId);
if (DEBUG) {
Log.i(TAG, "Granted " + permission + " to system component "
+ pkg.packageName);
@@ -768,11 +769,13 @@ final class DefaultPermissionGrantPolicy {
+ pkg.packageName);
}
+ int newFlags = PackageManager.FLAG_PERMISSION_GRANTED_BY_DEFAULT;
if (systemFixed) {
- mService.updatePermissionFlags(permission, pkg.packageName,
- PackageManager.FLAG_PERMISSION_SYSTEM_FIXED,
- PackageManager.FLAG_PERMISSION_SYSTEM_FIXED, userId);
+ newFlags |= PackageManager.FLAG_PERMISSION_SYSTEM_FIXED;
}
+
+ mService.updatePermissionFlags(permission, pkg.packageName,
+ newFlags, newFlags, userId);
}
}
}
diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java
index 0ad2b4a..8ca8331 100644
--- a/services/core/java/com/android/server/pm/Settings.java
+++ b/services/core/java/com/android/server/pm/Settings.java
@@ -4333,12 +4333,25 @@ final class Settings {
}
pw.print(prefix); pw.print(" "); pw.print(permissionState.getName());
pw.print(", granted="); pw.print(permissionState.isGranted());
- pw.print(", flags=0x"); pw.println(Integer.toHexString(
+ pw.print(", flags="); pw.println(permissionFlagsToString(
permissionState.getFlags()));
}
}
}
+ private static String permissionFlagsToString(int flags) {
+ StringBuilder flagsString = new StringBuilder();
+ flagsString.append("[ ");
+ while (flags != 0) {
+ final int flag = 1 << Integer.numberOfTrailingZeros(flags);
+ flags &= ~flag;
+ flagsString.append(PackageManager.permissionFlagToString(flag));
+ flagsString.append(' ');
+ }
+ flagsString.append(']');
+ return flagsString.toString();
+ }
+
void dumpInstallPermissionsLPr(PrintWriter pw, String prefix, ArraySet<String> permissionNames,
PermissionsState permissionsState) {
List<PermissionState> permissionStates = permissionsState.getInstallPermissionStates();
@@ -4351,7 +4364,7 @@ final class Settings {
}
pw.print(prefix); pw.print(" "); pw.print(permissionState.getName());
pw.print(", granted="); pw.print(permissionState.isGranted());
- pw.print(", flags=0x"); pw.println(Integer.toHexString(
+ pw.print(", flags="); pw.println(permissionFlagsToString(
permissionState.getFlags()));
}
}