Collect permission type field
Bug: 159808141
Test: Build ongoing to confirm
Signed-off-by: Tom Bell <bellthomas@google.com>
Change-Id: Ie43b0db5f174b786d6d581cacb4309b9f97a9758
diff --git a/common/device-side/device-info/src/com/android/compatibility/common/deviceinfo/PackageDeviceInfo.java b/common/device-side/device-info/src/com/android/compatibility/common/deviceinfo/PackageDeviceInfo.java
index 10364af..735b805 100644
--- a/common/device-side/device-info/src/com/android/compatibility/common/deviceinfo/PackageDeviceInfo.java
+++ b/common/device-side/device-info/src/com/android/compatibility/common/deviceinfo/PackageDeviceInfo.java
@@ -41,6 +41,9 @@
@TargetApi(Build.VERSION_CODES.N)
public class PackageDeviceInfo extends DeviceInfo {
+ private static final String PLATFORM = "android";
+ private static final String PLATFORM_PERMISSION_PREFIX = "android.";
+
private static final String PACKAGE = "package";
private static final String NAME = "name";
private static final String VERSION_NAME = "version_name";
@@ -56,6 +59,11 @@
private static final String PERMISSION_PROTECTION = "protection_level";
private static final String PERMISSION_PROTECTION_FLAGS = "protection_level_flags";
+ private static final String PERMISSION_TYPE = "type";
+ private static final int PERMISSION_TYPE_SYSTEM = 1;
+ private static final int PERMISSION_TYPE_OEM = 2;
+ private static final int PERMISSION_TYPE_CUSTOM = 3;
+
private static final String HAS_SYSTEM_UID = "has_system_uid";
private static final String SHARES_INSTALL_PERMISSION = "shares_install_packages_permission";
@@ -86,13 +94,20 @@
final ComponentName defaultAccessibilityComponent = getDefaultAccessibilityComponent();
+ // Platform permission data used to tag permissions information with sourcing information
+ final PackageInfo platformInfo = pm.getPackageInfo(PLATFORM , PackageManager.GET_PERMISSIONS);
+ final Set<String> platformPermissions = new HashSet<String>();
+ for (PermissionInfo permission : platformInfo.permissions) {
+ platformPermissions.add(permission.name);
+ }
+
store.startArray(PACKAGE);
for (PackageInfo pkg : allPackages) {
store.startGroup();
store.addResult(NAME, pkg.packageName);
store.addResult(VERSION_NAME, pkg.versionName);
- collectPermissions(store, pm, pkg);
+ collectPermissions(store, pm, platformPermissions, pkg);
collectionApplicationInfo(store, pm, pkg);
store.addResult(HAS_DEFAULT_NOTIFICATION_ACCESS,
@@ -118,6 +133,7 @@
private static void collectPermissions(DeviceInfoStore store,
PackageManager pm,
+ Set<String> systemPermissions,
PackageInfo pkg) throws IOException
{
store.startArray(REQUESTED_PERMISSIONS);
@@ -129,6 +145,21 @@
store.startGroup();
store.addResult(PERMISSION_NAME, permission);
writePermissionsDetails(pi, store);
+
+ if (permission == null) continue;
+
+ final boolean isPlatformPermission = systemPermissions.contains(permission);
+ if (isPlatformPermission) {
+ final boolean isAndroidPermission = permission.startsWith(PLATFORM_PERMISSION_PREFIX);
+ if (isAndroidPermission) {
+ store.addResult(PERMISSION_TYPE, PERMISSION_TYPE_SYSTEM);
+ } else {
+ store.addResult(PERMISSION_TYPE, PERMISSION_TYPE_OEM);
+ }
+ } else {
+ store.addResult(PERMISSION_TYPE, PERMISSION_TYPE_CUSTOM);
+ }
+
store.endGroup();
} catch (PackageManager.NameNotFoundException e) {
// ignore unrecognized permission and continue
diff --git a/common/device-side/test-app/AndroidManifest.xml b/common/device-side/test-app/AndroidManifest.xml
index 3aa5dc5..70b3d08 100755
--- a/common/device-side/test-app/AndroidManifest.xml
+++ b/common/device-side/test-app/AndroidManifest.xml
@@ -20,6 +20,7 @@
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
+ <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
<application>
<uses-library android:name="android.test.runner" />