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) {
         }
     }