Merge "Rename cellbroadcast's authority and fix permission check" am: 0eb00a9292
am: e5270b1659

Change-Id: I879e81e723b32263bd4a88f216704ef09298807c
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index f558bb8..3b95bce 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -108,11 +108,10 @@
                   android:writePermission="android.permission.MODIFY_PHONE_STATE" />
 
         <provider android:name="CellBroadcastProvider"
-                  android:authorities="cellbroadcasts"
+                  android:authorities="cellbroadcasts_fwk"
                   android:exported="true"
                   android:singleUser="true"
-                  android:multiprocess="false"
-                  android:readPermission="android.permission.READ_CELL_BROADCASTS" />
+                  android:multiprocess="false" />
 
         <provider android:name="HbpcdLookupProvider"
                   android:authorities="hbpcd_lookup"
diff --git a/src/com/android/providers/telephony/CellBroadcastProvider.java b/src/com/android/providers/telephony/CellBroadcastProvider.java
index 3c6c51c..c50fbf2 100644
--- a/src/com/android/providers/telephony/CellBroadcastProvider.java
+++ b/src/com/android/providers/telephony/CellBroadcastProvider.java
@@ -78,7 +78,10 @@
 
     /** Authority string for content URIs. */
     @VisibleForTesting
-    public static final String AUTHORITY = "cellbroadcasts";
+    public static final String AUTHORITY = "cellbroadcasts_fwk";
+
+    /** Content uri of this provider. */
+    public static final Uri CONTENT_URI = Uri.parse("content://cellbroadcasts_fwk");
 
     @VisibleForTesting
     public PermissionChecker mPermissionChecker;
@@ -171,9 +174,9 @@
                 long row = getWritableDatabase().insertOrThrow(CELL_BROADCASTS_TABLE_NAME, null,
                         values);
                 if (row > 0) {
-                    Uri newUri = ContentUris.withAppendedId(CellBroadcasts.CONTENT_URI, row);
+                    Uri newUri = ContentUris.withAppendedId(CONTENT_URI, row);
                     getContext().getContentResolver()
-                            .notifyChange(CellBroadcasts.CONTENT_URI, null /* observer */);
+                            .notifyChange(CONTENT_URI, null /* observer */);
                     return newUri;
                 } else {
                     Log.e(TAG, "Insert record failed because of unknown reason, uri = " + uri);
@@ -300,14 +303,14 @@
     private class CellBroadcastPermissionChecker implements PermissionChecker {
         @Override
         public boolean hasWritePermission() {
-            // Only the phone process has the write permission for CellBroadcast content provider.
+            // Only the phone process has the write permission to modify this provider. 
             return Binder.getCallingUid() == Process.PHONE_UID;
         }
 
         @Override
         public boolean hasReadPermission() {
-            return getContext().checkCallingOrSelfPermission(
-                    "android.permission.READ_CELL_BROADCASTS") == PackageManager.PERMISSION_GRANTED;
+            // Only the phone process has the read permission to query data from this provider. 
+            return Binder.getCallingUid() == Process.PHONE_UID;
         }
     }
 }
diff --git a/tests/src/com/android/providers/telephony/CellBroadcastProviderTest.java b/tests/src/com/android/providers/telephony/CellBroadcastProviderTest.java
index 517572e..b5ff07b 100644
--- a/tests/src/com/android/providers/telephony/CellBroadcastProviderTest.java
+++ b/tests/src/com/android/providers/telephony/CellBroadcastProviderTest.java
@@ -40,6 +40,8 @@
 public class CellBroadcastProviderTest extends TestCase {
     private static final String TAG = CellBroadcastProviderTest.class.getSimpleName();
 
+    public static final Uri CONTENT_URI = Uri.parse("content://cellbroadcasts_fwk");
+
     private static final int GEO_SCOPE = 1;
     private static final String PLMN = "123456";
     private static final int LAC = 13;
@@ -117,7 +119,7 @@
     public void testUpdate() {
         // Insert a cellbroadcast to the database.
         ContentValues cv = fakeCellBroadcast();
-        Uri uri = mContentResolver.insert(CellBroadcasts.CONTENT_URI, cv);
+        Uri uri = mContentResolver.insert(CONTENT_URI, cv);
         assertThat(uri).isNotNull();
 
         // Change some fields of this cell broadcast.
@@ -125,11 +127,11 @@
         int receivedTime = 1234555555;
         cv.put(CellBroadcasts.MESSAGE_BROADCASTED, messageBroadcasted);
         cv.put(CellBroadcasts.RECEIVED_TIME, receivedTime);
-        mContentResolver.update(CellBroadcasts.CONTENT_URI, cv, SELECT_BY_ID,
+        mContentResolver.update(CONTENT_URI, cv, SELECT_BY_ID,
                 new String[] { uri.getLastPathSegment() });
 
         // Query and check if the update is successed.
-        Cursor cursor = mContentResolver.query(CellBroadcasts.CONTENT_URI, QUERY_COLUMNS,
+        Cursor cursor = mContentResolver.query(CONTENT_URI, QUERY_COLUMNS,
                 SELECT_BY_ID, new String[] { uri.getLastPathSegment() }, null /* orderBy */);
         cursor.moveToNext();
 
@@ -143,14 +145,14 @@
     @Test
     public void testUpdate_WithoutWritePermission_fail() {
         ContentValues cv = fakeCellBroadcast();
-        Uri uri = mContentResolver.insert(CellBroadcasts.CONTENT_URI, cv);
+        Uri uri = mContentResolver.insert(CONTENT_URI, cv);
         assertThat(uri).isNotNull();
 
         // Revoke the write permission
         doReturn(false).when(mMockPermissionChecker).hasWritePermission();
 
         try {
-            mContentResolver.update(CellBroadcasts.CONTENT_URI, cv, SELECT_BY_ID,
+            mContentResolver.update(CONTENT_URI, cv, SELECT_BY_ID,
                     new String[] { uri.getLastPathSegment() });
             fail();
         } catch (SecurityException ex) {
@@ -165,19 +167,19 @@
         ContentValues cv = fakeCellBroadcast();
         cv.put(CellBroadcasts.MESSAGE_BROADCASTED, 0);
         for (int i = 0; i < messageNotBroadcastedCount; i++) {
-            mContentResolver.insert(CellBroadcasts.CONTENT_URI, cv);
+            mContentResolver.insert(CONTENT_URI, cv);
         }
 
         // Insert some cell broadcasts which message_broadcasted is true
         int messageBroadcastedCount = 6;
         cv.put(CellBroadcasts.MESSAGE_BROADCASTED, 1);
         for (int i = 0; i < messageBroadcastedCount; i++) {
-            mContentResolver.insert(CellBroadcasts.CONTENT_URI, cv);
+            mContentResolver.insert(CONTENT_URI, cv);
         }
 
         // Query the broadcast with message_broadcasted is false
         Cursor cursor = mContentResolver.query(
-                CellBroadcasts.CONTENT_URI,
+                CONTENT_URI,
                 QUERY_COLUMNS,
                 String.format("%s=?", CellBroadcasts.MESSAGE_BROADCASTED), /* selection */
                 new String[] {"0"}, /* selectionArgs */
@@ -187,14 +189,14 @@
 
     @Test
     public void testDelete_withoutWritePermission_throwSecurityException() {
-        Uri uri = mContentResolver.insert(CellBroadcasts.CONTENT_URI, fakeCellBroadcast());
+        Uri uri = mContentResolver.insert(CONTENT_URI, fakeCellBroadcast());
         assertThat(uri).isNotNull();
 
         // Revoke the write permission
         doReturn(false).when(mMockPermissionChecker).hasWritePermission();
 
         try {
-            mContentResolver.delete(CellBroadcasts.CONTENT_URI, SELECT_BY_ID,
+            mContentResolver.delete(CONTENT_URI, SELECT_BY_ID,
                     new String[] { uri.getLastPathSegment() });
             fail();
         } catch (SecurityException ex) {
@@ -207,24 +209,24 @@
     public void testDelete_oneRecord_success() {
         // Insert a cellbroadcast to the database.
         ContentValues cv = fakeCellBroadcast();
-        Uri uri = mContentResolver.insert(CellBroadcasts.CONTENT_URI, cv);
+        Uri uri = mContentResolver.insert(CONTENT_URI, cv);
         assertThat(uri).isNotNull();
 
         String[] selectionArgs = new String[] { uri.getLastPathSegment() };
 
         // Ensure the cell broadcast is inserted.
-        Cursor cursor = mContentResolver.query(CellBroadcasts.CONTENT_URI, QUERY_COLUMNS,
+        Cursor cursor = mContentResolver.query(CONTENT_URI, QUERY_COLUMNS,
                 SELECT_BY_ID, selectionArgs, null /* orderBy */);
         assertThat(cursor.getCount()).isEqualTo(1);
         cursor.close();
 
         // Delete the cell broadcast
-        int rowCount = mContentResolver.delete(CellBroadcasts.CONTENT_URI, SELECT_BY_ID,
+        int rowCount = mContentResolver.delete(CONTENT_URI, SELECT_BY_ID,
                 selectionArgs);
         assertThat(rowCount).isEqualTo(1);
 
         // Ensure the cell broadcast is deleted.
-        cursor = mContentResolver.query(CellBroadcasts.CONTENT_URI, QUERY_COLUMNS, SELECT_BY_ID,
+        cursor = mContentResolver.query(CONTENT_URI, QUERY_COLUMNS, SELECT_BY_ID,
                 selectionArgs, null /* orderBy */);
         assertThat(cursor.getCount()).isEqualTo(0);
         cursor.close();
@@ -233,23 +235,23 @@
     @Test
     public void testDelete_all_success() {
         // Insert a cellbroadcast to the database.
-        mContentResolver.insert(CellBroadcasts.CONTENT_URI, fakeCellBroadcast());
-        mContentResolver.insert(CellBroadcasts.CONTENT_URI, fakeCellBroadcast());
+        mContentResolver.insert(CONTENT_URI, fakeCellBroadcast());
+        mContentResolver.insert(CONTENT_URI, fakeCellBroadcast());
 
         // Ensure the cell broadcast are inserted.
-        Cursor cursor = mContentResolver.query(CellBroadcasts.CONTENT_URI, QUERY_COLUMNS,
+        Cursor cursor = mContentResolver.query(CONTENT_URI, QUERY_COLUMNS,
                 null /* selection */, null /* selectionArgs */, null /* orderBy */);
         assertThat(cursor.getCount()).isEqualTo(2);
         cursor.close();
 
         // Delete all cell broadcasts.
         int rowCount = mContentResolver.delete(
-                CellBroadcasts.CONTENT_URI, null /* selection */, null /* selectionArgs */);
+                CONTENT_URI, null /* selection */, null /* selectionArgs */);
         assertThat(rowCount).isEqualTo(2);
         cursor.close();
 
         // Ensure all cell broadcasts are deleted.
-        cursor = mContentResolver.query(CellBroadcasts.CONTENT_URI, QUERY_COLUMNS,
+        cursor = mContentResolver.query(CONTENT_URI, QUERY_COLUMNS,
                 null /* selection */, null /* selectionArgs */, null /* orderBy */);
         assertThat(cursor.getCount()).isEqualTo(0);
         cursor.close();
@@ -260,7 +262,7 @@
         doReturn(false).when(mMockPermissionChecker).hasWritePermission();
 
         try {
-            mContentResolver.insert(CellBroadcasts.CONTENT_URI, fakeCellBroadcast());
+            mContentResolver.insert(CONTENT_URI, fakeCellBroadcast());
             fail();
         } catch (SecurityException ex) {
             // pass the test
@@ -270,13 +272,13 @@
     @Test
     public void testInsertAndQuery() {
         // Insert a cell broadcast message
-        Uri uri = mContentResolver.insert(CellBroadcasts.CONTENT_URI, fakeCellBroadcast());
+        Uri uri = mContentResolver.insert(CONTENT_URI, fakeCellBroadcast());
 
         // Verify that the return uri is not null and the record is inserted into the database
         // correctly.
         assertThat(uri).isNotNull();
         Cursor cursor = mContentResolver.query(
-                CellBroadcasts.CONTENT_URI, QUERY_COLUMNS, SELECT_BY_ID,
+                CONTENT_URI, QUERY_COLUMNS, SELECT_BY_ID,
                 new String[] { uri.getLastPathSegment() }, null /* orderBy */);
         assertThat(cursor.getCount()).isEqualTo(1);