Better error messages when permissions can't be granted or dropped.
Test: atest CtsDevicePolicyTestCases
Bug: 197627508
Change-Id: I2630ad802ce4cc8746f33d18f1e3a7180c5d3bce
diff --git a/common/device-side/bedstead/nene/src/main/java/com/android/bedstead/nene/permissions/Permissions.java b/common/device-side/bedstead/nene/src/main/java/com/android/bedstead/nene/permissions/Permissions.java
index 35b2d4e..c6edd7d 100644
--- a/common/device-side/bedstead/nene/src/main/java/com/android/bedstead/nene/permissions/Permissions.java
+++ b/common/device-side/bedstead/nene/src/main/java/com/android/bedstead/nene/permissions/Permissions.java
@@ -182,8 +182,10 @@
sInstrumentedPackage.grantPermission(sUser, permission);
} else {
removePermissionContextsUntilCanApply();
- throw new NeneException("PermissionContext requires granting "
- + permission + " but cannot.");
+
+ throwPermissionException("PermissionContext requires granting "
+ + permission + " but cannot.", permission, sUser,
+ resolvedInstrumentedPackage);
}
}
@@ -195,8 +197,9 @@
adoptedShellPermissions.add(permission);
} else { // We can't deny a permission to ourselves
removePermissionContextsUntilCanApply();
- throw new NeneException("PermissionContext requires denying "
- + permission + " but cannot.");
+ throwPermissionException("PermissionContext requires denying "
+ + permission + " but cannot.", permission, sUser,
+ resolvedInstrumentedPackage);
}
}
@@ -207,6 +210,30 @@
}
}
+ private void throwPermissionException(
+ String message, String permission, UserReference user, Package instrumentedPackage) {
+ String protectionLevel = "Permission not found";
+ try {
+ protectionLevel = Integer.toString(sPackageManager.getPermissionInfo(
+ permission, /* flags= */ 0).protectionLevel);
+ } catch (PackageManager.NameNotFoundException e) {
+ Log.e(LOG_TAG, "Permission not found", e);
+ }
+
+ throw new NeneException(message + "\n\nRunning On User: " + user
+ + "\nPermission: " + permission
+ + "\nPermission protection level: " + protectionLevel
+ + "\nPermission state: " + sContext.checkSelfPermission(permission)
+ + "\nInstrumented Package: " + instrumentedPackage.packageName()
+ + "\n\nGranted Permissions:\n"
+ + instrumentedPackage.grantedPermissions(user)
+ + "\n\nRequested Permissions:\n"
+ + instrumentedPackage.requestedPermissions()
+ + "\n\nCan adopt shell permissions: " + SUPPORTS_ADOPT_SHELL_PERMISSIONS
+ + "\nShell permissions:"
+ + sShellPackage.requestedPermissions());
+ }
+
void clearPermissions() {
mPermissionContexts.clear();
applyPermissions();