Throw SecurityException when secondary user attempts to access BlockedNumberProvider.
SecurityException is semantically more accurate than UnsupportedOperationException as the provider supports the operation.
BUG: 28294786
Change-Id: I2cfd304076648f6505e8a6a7ae718130a3a26b14
diff --git a/src/com/android/providers/blockednumber/BlockedNumberProvider.java b/src/com/android/providers/blockednumber/BlockedNumberProvider.java
index 4d0193b..6d96188 100644
--- a/src/com/android/providers/blockednumber/BlockedNumberProvider.java
+++ b/src/com/android/providers/blockednumber/BlockedNumberProvider.java
@@ -525,7 +525,7 @@
private void checkForPermissionAndPrimaryUser(String permission) {
checkForPermission(permission);
if (!canCurrentUserBlockUsers()) {
- throw new UnsupportedOperationException();
+ throwCurrentUserNotPermittedSecurityException();
}
}
@@ -547,7 +547,7 @@
private void enforceSystemPermissionAndUser(String permission) {
if (!canCurrentUserBlockUsers()) {
- throw new UnsupportedOperationException();
+ throwCurrentUserNotPermittedSecurityException();
}
if (!passesSystemPermissionCheck(permission)) {
@@ -567,4 +567,8 @@
private void throwSecurityException() {
throw new SecurityException("Caller must be system, default dialer or default SMS app");
}
+
+ private void throwCurrentUserNotPermittedSecurityException() {
+ throw new SecurityException("The current user cannot perform this operation");
+ }
}
diff --git a/tests/src/com/android/providers/blockednumber/BlockedNumberProviderTest.java b/tests/src/com/android/providers/blockednumber/BlockedNumberProviderTest.java
index 19185be..6c703b8 100644
--- a/tests/src/com/android/providers/blockednumber/BlockedNumberProviderTest.java
+++ b/tests/src/com/android/providers/blockednumber/BlockedNumberProviderTest.java
@@ -529,32 +529,33 @@
try {
insert(cv(BlockedNumbers.COLUMN_ORIGINAL_NUMBER, "123"));
- fail("UnsupportedOperationException expected");
- } catch (UnsupportedOperationException expected) {
+ fail("SecurityException expected");
+ } catch (SecurityException expected) {
+ assertTrue(expected.getMessage().contains("current user"));
}
try {
mResolver.query(BlockedNumbers.CONTENT_URI, null, null, null, null);
- fail("UnsupportedOperationException expected");
- } catch (UnsupportedOperationException expected) {
+ fail("SecurityException expected");
+ } catch (SecurityException expected) {
}
try {
mResolver.delete(BlockedNumbers.CONTENT_URI, null, null);
- fail("UnsupportedOperationException expected");
- } catch (UnsupportedOperationException expected) {
+ fail("SecurityException expected");
+ } catch (SecurityException expected) {
}
try {
BlockedNumberContract.isBlocked(mMockContext, "123");
- fail("UnsupportedOperationException expected");
- } catch (UnsupportedOperationException expected) {
+ fail("SecurityException expected");
+ } catch (SecurityException expected) {
}
try {
BlockedNumberContract.unblock(mMockContext, "123");
- fail("UnsupportedOperationException expected");
- } catch (UnsupportedOperationException expected) {
+ fail("SecurityException expected");
+ } catch (SecurityException expected) {
}
}