MediaStoreUiTest.java: fix missing permissions from calling app.
testImageCaptureWithInadequeteLocationPermissions needs to grant the
package itself adequete location permissions before testing for better
strictness.
Bug: 133853633
Test: runtest -x MediaStoreUiTest.java with GCA / Camera2.
Change-Id: I09875e15b2b80c67ea0d90d1a371ae10efc300b8
Signed-off-by: Jayant Chowdhary <jchowdhary@google.com>
diff --git a/tests/providerui/AndroidManifest.xml b/tests/providerui/AndroidManifest.xml
index 3e7329c..8434397 100644
--- a/tests/providerui/AndroidManifest.xml
+++ b/tests/providerui/AndroidManifest.xml
@@ -19,6 +19,9 @@
package="android.providerui.cts">
<uses-permission android:name="android.permission.CAMERA" />
+ <uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION" />
+ <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
+ <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
diff --git a/tests/providerui/src/android/providerui/cts/MediaStoreUiTest.java b/tests/providerui/src/android/providerui/cts/MediaStoreUiTest.java
index 529ed68..7746c98 100644
--- a/tests/providerui/src/android/providerui/cts/MediaStoreUiTest.java
+++ b/tests/providerui/src/android/providerui/cts/MediaStoreUiTest.java
@@ -232,14 +232,6 @@
}
}
- private void maybeRevokeRuntimePermission(String pkg, Set<String> requested, String permission)
- throws NameNotFoundException {
- if (requested.contains(permission)) {
- InstrumentationRegistry.getInstrumentation().getUiAutomation()
- .revokeRuntimePermission(pkg, permission);
- }
- }
-
/**
* Verify that whoever handles {@link MediaStore#ACTION_IMAGE_CAPTURE} can
* correctly write the contents into a passed {@code content://} Uri.
@@ -280,17 +272,26 @@
// Figure out who is going to answer the phone
final ResolveInfo ri = mContext.getPackageManager().resolveActivity(intent, 0);
- final String pkg = ri.activityInfo.packageName;
+ final String answeringPkg = ri.activityInfo.packageName;
Log.d(TAG, "We're probably launching " + ri);
- final PackageInfo pi = mContext.getPackageManager().getPackageInfo(pkg,
+ final PackageInfo pi = mContext.getPackageManager().getPackageInfo(answeringPkg,
PackageManager.GET_PERMISSIONS);
- final Set<String> req = new HashSet<>();
- req.addAll(Arrays.asList(pi.requestedPermissions));
+ final Set<String> answeringReq = new HashSet<>();
+ answeringReq.addAll(Arrays.asList(pi.requestedPermissions));
+ // Grant the 'answering' app all the permissions they might want.
+ maybeGrantRuntimePermission(answeringPkg, answeringReq, CAMERA);
+ maybeGrantRuntimePermission(answeringPkg, answeringReq, ACCESS_FINE_LOCATION);
+ maybeGrantRuntimePermission(answeringPkg, answeringReq, ACCESS_COARSE_LOCATION);
+ maybeGrantRuntimePermission(answeringPkg, answeringReq, ACCESS_BACKGROUND_LOCATION);
+ maybeGrantRuntimePermission(answeringPkg, answeringReq, RECORD_AUDIO);
+ maybeGrantRuntimePermission(answeringPkg, answeringReq, READ_EXTERNAL_STORAGE);
+ maybeGrantRuntimePermission(answeringPkg, answeringReq, WRITE_EXTERNAL_STORAGE);
+ SystemClock.sleep(DateUtils.SECOND_IN_MILLIS);
- grantRequisitePermissions(pkg, req, locationPermissions);
+ grantSelfRequisitePermissions(locationPermissions);
- Result result = getImageCaptureIntentResult(intent, pkg);
+ Result result = getImageCaptureIntentResult(intent, answeringPkg);
assertTrue("exists", target.exists());
assertTrue("has data", target.length() > 65536);
@@ -305,31 +306,20 @@
Boolean hasLocation = exif.getLatLong(latLong);
assertTrue("Should not contain location information latitude: " + latLong[0] +
" longitude: " + latLong[1], !hasLocation);
- revokeRequisitePermissions(pkg, req, locationPermissions);
}
- private void grantRequisitePermissions(String pkg, Set<String> req,
- Set<String> locationPermissions) throws Exception {
- // Grant them all the permissions they might want.
- maybeGrantRuntimePermission(pkg, req, CAMERA);
- maybeGrantRuntimePermission(pkg, req, RECORD_AUDIO);
- maybeGrantRuntimePermission(pkg, req, READ_EXTERNAL_STORAGE);
- maybeGrantRuntimePermission(pkg, req, WRITE_EXTERNAL_STORAGE);
- SystemClock.sleep(DateUtils.SECOND_IN_MILLIS);
- for (String perm : locationPermissions) {
- maybeGrantRuntimePermission(pkg, req, perm);
- }
- }
-
- private void revokeRequisitePermissions(String pkg, Set<String> req, Set<String> perms)
+ private void grantSelfRequisitePermissions(Set<String> locationPermissions)
throws Exception {
- // So that the other tests don't start with this permission granted.
- for (String perm : perms) {
- maybeRevokeRuntimePermission(pkg, req, perm);
+ String selfPkg = mContext.getPackageName();
+ for (String perm : locationPermissions) {
+ InstrumentationRegistry.getInstrumentation().getUiAutomation()
+ .grantRuntimePermission(selfPkg, perm);
+ assertTrue("Permission " + perm + "could not be granted",
+ mContext.checkSelfPermission(perm) == PackageManager.PERMISSION_GRANTED);
}
}
- private Result getImageCaptureIntentResult(Intent intent, String pkg)
+ private Result getImageCaptureIntentResult(Intent intent, String answeringPkg)
throws Exception {
mActivity.startActivityForResult(intent, REQUEST_CODE);
@@ -354,12 +344,12 @@
// Hrm, that didn't work; let's try an alternative approach of digging
// around for a shutter button
if (result == null) {
- maybeClick(new UiSelector().resourceId(pkg + ":id/shutter_button"));
+ maybeClick(new UiSelector().resourceId(answeringPkg + ":id/shutter_button"));
mDevice.waitForIdle();
SystemClock.sleep(5 * DateUtils.SECOND_IN_MILLIS);
- maybeClick(new UiSelector().resourceId(pkg + ":id/shutter_button"));
+ maybeClick(new UiSelector().resourceId(answeringPkg + ":id/shutter_button"));
mDevice.waitForIdle();
- maybeClick(new UiSelector().resourceId(pkg + ":id/done_button"));
+ maybeClick(new UiSelector().resourceId(answeringPkg + ":id/done_button"));
mDevice.waitForIdle();
result = mActivity.getResult(15, TimeUnit.SECONDS);
@@ -368,10 +358,10 @@
// Grr, let's try hunting around even more
if (result == null) {
- maybeClick(By.pkg(pkg).descContains("Capture"));
+ maybeClick(By.pkg(answeringPkg).descContains("Capture"));
mDevice.waitForIdle();
SystemClock.sleep(5 * DateUtils.SECOND_IN_MILLIS);
- maybeClick(By.pkg(pkg).descContains("Done"));
+ maybeClick(By.pkg(answeringPkg).descContains("Done"));
mDevice.waitForIdle();
result = mActivity.getResult(15, TimeUnit.SECONDS);