CTS test for runtime permission grants
Add a test to verify that when an app has <uses-permission> declarations
for multiple permissions within the same conceptual group, and then a runtime
request is issued (and accepted) naming just one of those permissions, the
other manifest-requested permission within the same group is also granted.
Bug 23525514
Change-Id: I3927979751e0650595268ee8a0de86212f5574ca
diff --git a/hostsidetests/appsecurity/src/com/android/cts/appsecurity/PermissionsHostTest.java b/hostsidetests/appsecurity/src/com/android/cts/appsecurity/PermissionsHostTest.java
index 64bd419..20a92aa 100644
--- a/hostsidetests/appsecurity/src/com/android/cts/appsecurity/PermissionsHostTest.java
+++ b/hostsidetests/appsecurity/src/com/android/cts/appsecurity/PermissionsHostTest.java
@@ -106,6 +106,11 @@
runDeviceTests(PKG, ".UsePermissionTest", "testRuntimeGroupGrantSpecificity");
}
+ public void testRuntimeGroupGrantExpansion() throws Exception {
+ assertNull(getDevice().installPackage(mCtsBuild.getTestApp(APK), false, false));
+ runDeviceTests(PKG, ".UsePermissionTest", "testRuntimeGroupGrantExpansion");
+ }
+
public void testCompatDefault() throws Exception {
assertNull(getDevice().installPackage(mCtsBuild.getTestApp(APK_COMPAT), false, false));
runDeviceTests(PKG, ".UsePermissionCompatTest", "testCompatDefault");
diff --git a/hostsidetests/appsecurity/test-apps/UsePermissionApp/AndroidManifest.xml b/hostsidetests/appsecurity/test-apps/UsePermissionApp/AndroidManifest.xml
index f741afc..ece4ebe 100644
--- a/hostsidetests/appsecurity/test-apps/UsePermissionApp/AndroidManifest.xml
+++ b/hostsidetests/appsecurity/test-apps/UsePermissionApp/AndroidManifest.xml
@@ -31,4 +31,8 @@
<!-- Deliberately request WRITE_CONTACTS but *not* READ_CONTACTS -->
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
+ <!-- Request two different permissions within the same group -->
+ <uses-permission android:name="android.permission.SEND_SMS" />
+ <uses-permission android:name="android.permission.RECEIVE_SMS" />
+
</manifest>
diff --git a/hostsidetests/appsecurity/test-apps/UsePermissionApp/src/com/android/cts/usepermission/UsePermissionTest.java b/hostsidetests/appsecurity/test-apps/UsePermissionApp/src/com/android/cts/usepermission/UsePermissionTest.java
index 1e6fe1f..8d3b976 100644
--- a/hostsidetests/appsecurity/test-apps/UsePermissionApp/src/com/android/cts/usepermission/UsePermissionTest.java
+++ b/hostsidetests/appsecurity/test-apps/UsePermissionApp/src/com/android/cts/usepermission/UsePermissionTest.java
@@ -156,4 +156,41 @@
mActivity.finish();
}
+ public void testRuntimeGroupGrantExpansion() throws Exception {
+ // Start out without permission
+ assertEquals(PackageManager.PERMISSION_DENIED, getInstrumentation().getContext()
+ .checkSelfPermission(android.Manifest.permission.RECEIVE_SMS));
+ assertEquals(PackageManager.PERMISSION_DENIED, getInstrumentation().getContext()
+ .checkSelfPermission(android.Manifest.permission.SEND_SMS));
+
+ // Go through normal grant flow
+ mDevice = UiDevice.getInstance(getInstrumentation());
+ mActivity = launchActivity(getInstrumentation().getTargetContext().getPackageName(),
+ MyActivity.class, null);
+ mDevice.waitForIdle();
+
+ // request only one permission from the 'SMS' permission group at runtime,
+ // but two from this group are <uses-permission> in the manifest
+ mActivity.requestPermissions(new String[] {
+ android.Manifest.permission.RECEIVE_SMS }, 44);
+ mDevice.waitForIdle();
+
+ new UiObject(new UiSelector()
+ .resourceId("com.android.packageinstaller:id/permission_allow_button")).click();
+ mDevice.waitForIdle();
+
+ MyActivity.Result result = mActivity.getResult();
+ assertEquals(44, result.requestCode);
+ assertEquals(android.Manifest.permission.RECEIVE_SMS, result.permissions[0]);
+ assertEquals(PackageManager.PERMISSION_GRANTED, result.grantResults[0]);
+
+ // We should now have been granted both of the permissions from this group
+ // that are mentioned in our manifest
+ assertEquals(PackageManager.PERMISSION_GRANTED, getInstrumentation().getContext()
+ .checkSelfPermission(android.Manifest.permission.RECEIVE_SMS));
+ assertEquals(PackageManager.PERMISSION_GRANTED, getInstrumentation().getContext()
+ .checkSelfPermission(android.Manifest.permission.SEND_SMS));
+
+ mActivity.finish();
+ }
}