Merge "fix carrierIdentifierTest"
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 48387ba..e57b3b4 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -109,9 +109,7 @@
android:authorities="carrier_identification"
android:exported="true"
android:singleUser="true"
- android:multiprocess="false"
- android:readPermission="android.permission.READ_PRIVILEGED_PHONE_STATE"
- android:writePermission="android.permission.MODIFY_PHONE_STATE" />
+ android:multiprocess="false" />
<service
android:name=".TelephonyBackupAgent$DeferredSmsMmsRestoreService"
diff --git a/src/com/android/providers/telephony/CarrierIdProvider.java b/src/com/android/providers/telephony/CarrierIdProvider.java
index 4b4ce8f..ed590fc 100644
--- a/src/com/android/providers/telephony/CarrierIdProvider.java
+++ b/src/com/android/providers/telephony/CarrierIdProvider.java
@@ -22,6 +22,7 @@
import android.content.Context;
import android.content.SharedPreferences;
import android.content.UriMatcher;
+import android.content.pm.PackageManager;
import android.database.Cursor;
import android.database.MatrixCursor;
import android.database.sqlite.SQLiteDatabase;
@@ -178,6 +179,7 @@
@Override
public Cursor query(Uri uri, String[] projectionIn, String selection,
String[] selectionArgs, String sortOrder) {
+ checkReadPermission();
if (VDBG) {
Log.d(TAG, "query:"
+ " uri=" + uri
@@ -203,6 +205,7 @@
@Override
public Uri insert(Uri uri, ContentValues values) {
+ checkWritePermission();
final long row = getWritableDatabase().insertOrThrow(CARRIER_ID_TABLE, null, values);
if (row > 0) {
final Uri newUri = ContentUris.withAppendedId(CarrierIdentification.CONTENT_URI, row);
@@ -214,6 +217,7 @@
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
+ checkWritePermission();
if (VDBG) {
Log.d(TAG, "delete:"
+ " uri=" + uri
@@ -231,6 +235,7 @@
@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
+ checkWritePermission();
if (VDBG) {
Log.d(TAG, "update:"
+ " uri=" + uri
@@ -510,4 +515,22 @@
buffer.flush();
return buffer.toByteArray();
}
+
+ private void checkReadPermission() {
+ int status = getContext().checkCallingOrSelfPermission(
+ "android.permission.READ_PRIVILEGED_PHONE_STATE");
+ if (status == PackageManager.PERMISSION_GRANTED) {
+ return;
+ }
+ throw new SecurityException("No permission to read Carrier Identification provider");
+ }
+
+ private void checkWritePermission() {
+ int status = getContext().checkCallingOrSelfPermission(
+ "android.permission.MODIFY_PHONE_STATE");
+ if (status == PackageManager.PERMISSION_GRANTED) {
+ return;
+ }
+ throw new SecurityException("No permission to write Carrier Identification provider");
+ }
}