Merge "Move RCS specific canonical address handling"
am: f93a422a30
Change-Id: Icb60640b3eec9318a2045c2e954ef20cd027f7a1
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 125a3ae..9ac0815 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -116,8 +116,7 @@
android:authorities="rcs"
android:multiprocess="false"
android:exported="true"
- android:singleUser="true"
- android:readPermission="android.permission.READ_SMS" />
+ android:singleUser="true" />
<service
android:name=".TelephonyBackupAgent$DeferredSmsMmsRestoreService"
diff --git a/src/com/android/providers/telephony/MmsSmsProvider.java b/src/com/android/providers/telephony/MmsSmsProvider.java
index e2e9a1c..8c3555c 100644
--- a/src/com/android/providers/telephony/MmsSmsProvider.java
+++ b/src/com/android/providers/telephony/MmsSmsProvider.java
@@ -110,7 +110,7 @@
/**
* the name of the table that is used to store the canonical addresses for both SMS and MMS.
*/
- private static final String TABLE_CANONICAL_ADDRESSES = "canonical_addresses";
+ static final String TABLE_CANONICAL_ADDRESSES = "canonical_addresses";
/**
* the name of the table that is used to store the conversation threads.
diff --git a/src/com/android/providers/telephony/RcsProvider.java b/src/com/android/providers/telephony/RcsProvider.java
index db45402..c0ca9e1 100644
--- a/src/com/android/providers/telephony/RcsProvider.java
+++ b/src/com/android/providers/telephony/RcsProvider.java
@@ -119,6 +119,7 @@
private static final int OUTGOING_MESSAGE_ON_GROUP_THREAD_WITH_ID = 41;
private static final int FILE_TRANSFER_WITH_ID = 42;
private static final int EVENT = 43;
+ private static final int CANONICAL_ADDRESS = 44;
SQLiteOpenHelper mDbOpenHelper;
@@ -130,6 +131,8 @@
RcsProviderMessageHelper mMessageHelper;
@VisibleForTesting
RcsProviderEventHelper mEventHelper;
+ @VisibleForTesting
+ RcsProviderCanonicalAddressHelper mCanonicalAddressHelper;
static {
// example URI: content://rcs/thread
@@ -294,17 +297,19 @@
// example URI: content://rcs/event
URL_MATCHER.addURI(AUTHORITY, "event", EVENT);
+
+ URL_MATCHER.addURI(AUTHORITY, "canonical-address", CANONICAL_ADDRESS);
}
@Override
public boolean onCreate() {
- setAppOps(AppOpsManager.OP_READ_SMS, AppOpsManager.OP_WRITE_SMS);
// Use the credential encrypted mmssms.db for RCS messages.
mDbOpenHelper = MmsSmsDatabaseHelper.getInstanceForCe(getContext());
mParticipantHelper = new RcsProviderParticipantHelper(mDbOpenHelper);
mThreadHelper = new RcsProviderThreadHelper(mDbOpenHelper);
mMessageHelper = new RcsProviderMessageHelper(mDbOpenHelper);
mEventHelper = new RcsProviderEventHelper(mDbOpenHelper);
+ mCanonicalAddressHelper = new RcsProviderCanonicalAddressHelper(mDbOpenHelper);
return true;
}
@@ -447,6 +452,9 @@
return mMessageHelper.queryFileTransfer(uri);
case EVENT:
return mEventHelper.queryEvents(queryArgs);
+ case CANONICAL_ADDRESS:
+ String canonicalAddress = uri.getQueryParameter("address");
+ return mCanonicalAddressHelper.getOrCreateCanonicalAddress(canonicalAddress);
default:
Log.e(TAG, "Invalid query: " + uri);
}
diff --git a/src/com/android/providers/telephony/RcsProviderCanonicalAddressHelper.java b/src/com/android/providers/telephony/RcsProviderCanonicalAddressHelper.java
new file mode 100644
index 0000000..496b512
--- /dev/null
+++ b/src/com/android/providers/telephony/RcsProviderCanonicalAddressHelper.java
@@ -0,0 +1,54 @@
+package com.android.providers.telephony;
+
+import android.content.ContentValues;
+import android.database.Cursor;
+import android.database.MatrixCursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteOpenHelper;
+import android.provider.BaseColumns;
+import android.provider.Telephony;
+
+public class RcsProviderCanonicalAddressHelper {
+ SQLiteOpenHelper mSQLiteOpenHelper;
+
+ RcsProviderCanonicalAddressHelper(SQLiteOpenHelper sqLiteOpenHelper) {
+ mSQLiteOpenHelper = sqLiteOpenHelper;
+ }
+
+ Cursor getOrCreateCanonicalAddress(String canonicalAddress) {
+ SQLiteDatabase db = mSQLiteOpenHelper.getReadableDatabase();
+
+ Cursor cursor = db.query(
+ MmsSmsProvider.TABLE_CANONICAL_ADDRESSES,
+ new String[]{BaseColumns._ID}, Telephony.CanonicalAddressesColumns.ADDRESS + "=?",
+ new String[]{canonicalAddress}, null, null, null);
+
+ if (cursor != null && cursor.getCount() > 0) {
+ return cursor;
+ }
+
+ if (cursor != null) {
+ cursor.close();
+ }
+
+ return insertCanonicalAddress(canonicalAddress);
+ }
+
+ private Cursor insertCanonicalAddress(String canonicalAddress) {
+ ContentValues contentValues = new ContentValues();
+ contentValues.put(Telephony.CanonicalAddressesColumns.ADDRESS, canonicalAddress);
+
+ SQLiteDatabase db = mSQLiteOpenHelper.getWritableDatabase();
+
+ long id = db.insert(MmsSmsProvider.TABLE_CANONICAL_ADDRESSES, null, contentValues);
+
+ if (id == -1) {
+ return null;
+ }
+
+ MatrixCursor matrixCursor = new MatrixCursor(new String[]{BaseColumns._ID}, 1);
+ matrixCursor.addRow(new Object[]{id});
+
+ return matrixCursor;
+ }
+}
diff --git a/src/com/android/providers/telephony/RcsProviderParticipantHelper.java b/src/com/android/providers/telephony/RcsProviderParticipantHelper.java
index 065cf81..57223c2 100644
--- a/src/com/android/providers/telephony/RcsProviderParticipantHelper.java
+++ b/src/com/android/providers/telephony/RcsProviderParticipantHelper.java
@@ -259,7 +259,12 @@
return TRANSACTION_FAILED;
}
SQLiteDatabase db = mSqLiteOpenHelper.getWritableDatabase();
- return db.insert(RCS_PARTICIPANT_TABLE, RCS_PARTICIPANT_ID_COLUMN, contentValues);
+ long rowId = db.insert(RCS_PARTICIPANT_TABLE, RCS_PARTICIPANT_ID_COLUMN, contentValues);
+ Log.e(TAG, "Inserted participant with rowId=" + rowId);
+ if (rowId < 0) {
+ return TRANSACTION_FAILED;
+ }
+ return rowId;
}
long insertParticipantIntoP2pThread(Uri uri) {