Rename cellbroadcast's authority and fix permission check

Reanme the cellbroadcast's authority to cellbroadcasts_fwk to resolve
the conflict between this provider and cellbroadcast receiver app. This
provider will be eventually removed. The public application should use
the provider in cellbroadcast receiver app to get the cellbroadcast
message.

Only phone process can access this provider.

Bug: 123096618
Test: build
Merged-In: I9447cec0a261c790ac06e83a309268ceac4313df
Change-Id: I9447cec0a261c790ac06e83a309268ceac4313df
(cherry picked from commit de88c3af0b7936f49aebdf243a61f70001724480)
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);