Tests Scoped Access Directory 'do not ask again' is cleared when package
is removed.
BUG: 30900628
Change-Id: If48a1e3e519665e7b066eca628d1280f7292d63c
(cherry picked from commit b23b2283696a9be0c6add4231ba1c928ec36f999)
diff --git a/hostsidetests/appsecurity/src/android/appsecurity/cts/DocumentsTestCase.java b/hostsidetests/appsecurity/src/android/appsecurity/cts/DocumentsTestCase.java
index 7bd42b5..009d81b 100644
--- a/hostsidetests/appsecurity/src/android/appsecurity/cts/DocumentsTestCase.java
+++ b/hostsidetests/appsecurity/src/android/appsecurity/cts/DocumentsTestCase.java
@@ -51,10 +51,7 @@
assertNotNull(mAbi);
assertNotNull(mCtsBuild);
- getDevice().uninstallPackage(CLIENT_PKG);
-
- assertNull(getDevice().installPackage(
- MigrationHelper.getTestFile(mCtsBuild, CLIENT_APK), false));
+ reinstallClientPackage();
}
@Override
@@ -68,4 +65,11 @@
throws DeviceNotAvailableException {
Utils.runDeviceTests(getDevice(), packageName, testClassName, testMethodName);
}
+
+ protected void reinstallClientPackage() throws Exception {
+ getDevice().uninstallPackage(CLIENT_PKG);
+
+ assertNull(getDevice().installPackage(
+ MigrationHelper.getTestFile(mCtsBuild, CLIENT_APK), false));
+ }
}
diff --git a/hostsidetests/appsecurity/src/android/appsecurity/cts/ScopedDirectoryAccessTest.java b/hostsidetests/appsecurity/src/android/appsecurity/cts/ScopedDirectoryAccessTest.java
index ffc7597..889b20b 100644
--- a/hostsidetests/appsecurity/src/android/appsecurity/cts/ScopedDirectoryAccessTest.java
+++ b/hostsidetests/appsecurity/src/android/appsecurity/cts/ScopedDirectoryAccessTest.java
@@ -42,6 +42,14 @@
runDeviceTests(CLIENT_PKG, ".ScopedDirectoryAccessClientTest", "testNotAskedAgain");
}
+ public void testDeniesOnceForAllClearedWhenPackageRemoved() throws Exception {
+ runDeviceTests(CLIENT_PKG, ".ScopedDirectoryAccessClientTest",
+ "testRemovePackageStep1UserDenies");
+ reinstallClientPackage();
+ runDeviceTests(CLIENT_PKG, ".ScopedDirectoryAccessClientTest",
+ "testRemovePackageStep2UserAcceptsDoNotClear");
+ }
+
public void testDeniesOnceButAllowsAskingAgain() throws Exception {
runDeviceTests(CLIENT_PKG, ".ScopedDirectoryAccessClientTest",
"testDeniesOnceButAllowsAskingAgain");
diff --git a/hostsidetests/appsecurity/test-apps/DocumentClient/src/com/android/cts/documentclient/DocumentsClientTestCase.java b/hostsidetests/appsecurity/test-apps/DocumentClient/src/com/android/cts/documentclient/DocumentsClientTestCase.java
index e52af73..a26ec2d 100644
--- a/hostsidetests/appsecurity/test-apps/DocumentClient/src/com/android/cts/documentclient/DocumentsClientTestCase.java
+++ b/hostsidetests/appsecurity/test-apps/DocumentClient/src/com/android/cts/documentclient/DocumentsClientTestCase.java
@@ -150,7 +150,15 @@
return result;
}
+ /**
+ * Clears the DocumentsUI package data, unless test name ends on {@code DoNotClear}.
+ */
protected void clearDocumentsUi() throws Exception {
+ final String testName = getName();
+ if (testName.endsWith("DoNotClear")) {
+ Log.d(TAG, "Not clearing DocumentsUI due to test name: " + testName);
+ return;
+ }
executeShellCommand("pm clear com.android.documentsui");
}
}
diff --git a/hostsidetests/appsecurity/test-apps/DocumentClient/src/com/android/cts/documentclient/ScopedDirectoryAccessClientTest.java b/hostsidetests/appsecurity/test-apps/DocumentClient/src/com/android/cts/documentclient/ScopedDirectoryAccessClientTest.java
index a4d35fb..5747adf 100644
--- a/hostsidetests/appsecurity/test-apps/DocumentClient/src/com/android/cts/documentclient/ScopedDirectoryAccessClientTest.java
+++ b/hostsidetests/appsecurity/test-apps/DocumentClient/src/com/android/cts/documentclient/ScopedDirectoryAccessClientTest.java
@@ -117,9 +117,9 @@
if (!supportedHardware()) return;
for (StorageVolume volume : getVolumes()) {
- userAcceptsOpenExternalDirectoryTest(volume, DIRECTORY_PICTURES);
+ userAcceptsTest(volume, DIRECTORY_PICTURES);
if (!volume.isPrimary()) {
- userAcceptsOpenExternalDirectoryTest(volume, DIRECTORY_ROOT);
+ userAcceptsTest(volume, DIRECTORY_ROOT);
}
}
}
@@ -133,7 +133,7 @@
if (!output.isEmpty()) {
fail("Command '" + command + "' failed: '" + output + "'");
}
- userAcceptsOpenExternalDirectoryTest(getPrimaryVolume(), DIRECTORY_PICTURES);
+ userAcceptsTest(getPrimaryVolume(), DIRECTORY_PICTURES);
}
public void testNotAskedAgain() throws Exception {
@@ -141,7 +141,7 @@
for (StorageVolume volume : getVolumes()) {
final String volumeDesc = volume.getDescription(getInstrumentation().getContext());
- final Uri grantedUri = userAcceptsOpenExternalDirectoryTest(volume, DIRECTORY_PICTURES);
+ final Uri grantedUri = userAcceptsTest(volume, DIRECTORY_PICTURES);
// Calls it again - since the permission has been granted, it should return right
// away, without popping up the permissions dialog.
@@ -151,7 +151,7 @@
assertEquals(grantedUri, newData.getData());
// Make sure other directories still require user permission.
- final Uri grantedUri2 = userAcceptsOpenExternalDirectoryTest(volume, DIRECTORY_ALARMS);
+ final Uri grantedUri2 = userAcceptsTest(volume, DIRECTORY_ALARMS);
assertNotEqual(grantedUri, grantedUri2);
}
}
@@ -162,7 +162,7 @@
for (StorageVolume volume : getVolumes()) {
if (volume.isPrimary()) continue;
final String volumeDesc = volume.getDescription(getInstrumentation().getContext());
- final Uri grantedRootUri = userAcceptsOpenExternalDirectoryTest(volume, DIRECTORY_ROOT);
+ final Uri grantedRootUri = userAcceptsTest(volume, DIRECTORY_ROOT);
// Calls it again - since the permission has been granted, it should return right
// away, without popping up the permissions dialog.
@@ -204,7 +204,7 @@
assertActivityFailed();
// Third time is a charm...
- userAcceptsOpenExternalDirectoryTest(volume, dir);
+ userAcceptsTest(volume, dir);
}
}
}
@@ -216,33 +216,44 @@
for (StorageVolume volume : getVolumes()) {
for (String dir : dirs) {
if (volume.isPrimary() && dir == DIRECTORY_ROOT) continue;
- // Rejects the first attempt...
- UiAlertDialog dialog = openExternalDirectoryValidPath(volume, dir);
- dialog.assertDoNotAskAgainVisibility(false);
- dialog.noButton.click();
- assertActivityFailed();
-
- // ...and the second, checking the box
- dialog = openExternalDirectoryValidPath(volume, dir);
- UiObject checkbox = dialog.assertDoNotAskAgainVisibility(true);
- assertTrue("checkbox should not be checkable", checkbox.isCheckable());
- assertFalse("checkbox should not be checked", checkbox.isChecked());
- checkbox.click();
- assertTrue("checkbox should be checked", checkbox.isChecked()); // Sanity check
- assertFalse("allow button should be disabled", dialog.yesButton.isEnabled());
-
- dialog.noButton.click();
- assertActivityFailed();
-
- // Third strike out...
- sendOpenExternalDirectoryIntent(volume, dir);
- assertActivityFailed();
+ deniesOnceForAllTest(volume, dir);
}
}
}
- private Uri userAcceptsOpenExternalDirectoryTest(StorageVolume volume, String directoryName)
- throws Exception {
+ private void deniesOnceForAllTest(StorageVolume volume, String dir) throws Exception {
+ // Rejects the first attempt...
+ UiAlertDialog dialog = openExternalDirectoryValidPath(volume, dir);
+ dialog.assertDoNotAskAgainVisibility(false);
+ dialog.noButton.click();
+ assertActivityFailed();
+
+ // ...and the second, checking the box
+ dialog = openExternalDirectoryValidPath(volume, dir);
+ UiObject checkbox = dialog.assertDoNotAskAgainVisibility(true);
+ assertTrue("checkbox should not be checkable", checkbox.isCheckable());
+ assertFalse("checkbox should not be checked", checkbox.isChecked());
+ checkbox.click();
+ assertTrue("checkbox should be checked", checkbox.isChecked()); // Sanity check
+ assertFalse("allow button should be disabled", dialog.yesButton.isEnabled());
+
+ dialog.noButton.click();
+ assertActivityFailed();
+
+ // Third strike out...
+ sendOpenExternalDirectoryIntent(volume, dir);
+ assertActivityFailed();
+ }
+
+ public void testRemovePackageStep1UserDenies() throws Exception {
+ deniesOnceForAllTest(getPrimaryVolume(), DIRECTORY_NOTIFICATIONS);
+ }
+
+ public void testRemovePackageStep2UserAcceptsDoNotClear() throws Exception {
+ userAcceptsTest(getPrimaryVolume(), DIRECTORY_NOTIFICATIONS);
+ }
+
+ private Uri userAcceptsTest(StorageVolume volume, String directoryName) throws Exception {
// Asserts dialog contain the proper message.
final UiAlertDialog dialog = openExternalDirectoryValidPath(volume, directoryName);
final String message = dialog.messageText.getText();