summaryrefslogtreecommitdiffstats
path: root/src/com/android/providers/contacts/CallLogProvider.java
diff options
context:
space:
mode:
authorDebashish Chatterjee <debashishc@google.com>2011-06-07 17:33:21 +0100
committerDebashish Chatterjee <debashishc@google.com>2011-06-15 14:36:26 +0100
commit59f6477e10203617f504857f7e9aee2fda393f4f (patch)
tree5ee6d35501a8146e33c621ef43a671b8d3452d76 /src/com/android/providers/contacts/CallLogProvider.java
parent46abbb56764add30cb6e6506f55d8dededc88113 (diff)
downloadpackages_providers_ContactsProvider-59f6477e10203617f504857f7e9aee2fda393f4f.zip
packages_providers_ContactsProvider-59f6477e10203617f504857f7e9aee2fda393f4f.tar.gz
packages_providers_ContactsProvider-59f6477e10203617f504857f7e9aee2fda393f4f.tar.bz2
Introduced new voicemail fields in 'calls' table.
The 'calls' table is going to be shared between the existing call_log provider, and to be added voicemail provider. This change adds all the columns needed to support voicemail in the 'calls' table. The call_log provider, however, uses only one additional field 'voicemail_uri', whereas all other new fields will exclusively be used the new voicemail provider. The change also ensures that the voicemail provider specific fields are not exposed through the call_log provider. Change-Id: Ieea4b14052b7e7e9db0e674138772b4e06b3f074
Diffstat (limited to 'src/com/android/providers/contacts/CallLogProvider.java')
-rw-r--r--src/com/android/providers/contacts/CallLogProvider.java34
1 files changed, 24 insertions, 10 deletions
diff --git a/src/com/android/providers/contacts/CallLogProvider.java b/src/com/android/providers/contacts/CallLogProvider.java
index ae43c88..689e6be 100644
--- a/src/com/android/providers/contacts/CallLogProvider.java
+++ b/src/com/android/providers/contacts/CallLogProvider.java
@@ -32,6 +32,7 @@ import android.provider.CallLog;
import android.provider.CallLog.Calls;
import java.util.HashMap;
+import java.util.Set;
/**
* Call log content provider.
@@ -62,6 +63,7 @@ public class CallLogProvider extends ContentProvider {
sCallsProjectionMap.put(Calls.DURATION, Calls.DURATION);
sCallsProjectionMap.put(Calls.TYPE, Calls.TYPE);
sCallsProjectionMap.put(Calls.NEW, Calls.NEW);
+ sCallsProjectionMap.put(Calls.VOICEMAIL_URI, Calls.VOICEMAIL_URI);
sCallsProjectionMap.put(Calls.CACHED_NAME, Calls.CACHED_NAME);
sCallsProjectionMap.put(Calls.CACHED_NUMBER_TYPE, Calls.CACHED_NUMBER_TYPE);
sCallsProjectionMap.put(Calls.CACHED_NUMBER_LABEL, Calls.CACHED_NUMBER_LABEL);
@@ -93,25 +95,26 @@ public class CallLogProvider extends ContentProvider {
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
String sortOrder) {
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
+ qb.setTables(Tables.CALLS);
+ qb.setProjectionMap(sCallsProjectionMap);
+ qb.setStrict(true);
+
int match = sURIMatcher.match(uri);
switch (match) {
- case CALLS: {
- qb.setTables("calls");
- qb.setProjectionMap(sCallsProjectionMap);
+ case CALLS:
break;
- }
case CALLS_ID: {
- qb.setTables("calls");
- qb.setProjectionMap(sCallsProjectionMap);
- qb.appendWhere("calls._id=");
- qb.appendWhere(uri.getPathSegments().get(1));
+ try {
+ Long id = Long.valueOf(uri.getPathSegments().get(1));
+ qb.appendWhere(Calls._ID + "=" + id.toString());
+ } catch (NumberFormatException e) {
+ throw new IllegalArgumentException("Invalid call id in uri: " + uri, e);
+ }
break;
}
case CALLS_FILTER: {
- qb.setTables("calls");
- qb.setProjectionMap(sCallsProjectionMap);
String phoneNumber = uri.getPathSegments().get(2);
qb.appendWhere("PHONE_NUMBERS_EQUAL(number, ");
qb.appendWhereEscapeString(phoneNumber);
@@ -148,6 +151,7 @@ public class CallLogProvider extends ContentProvider {
@Override
public Uri insert(Uri uri, ContentValues values) {
+ checkForSupportedColumns(values);
// Inserted the current country code, so we know the country
// the number belongs to.
values.put(Calls.COUNTRY_ISO, getCurrentCountryIso());
@@ -166,6 +170,7 @@ public class CallLogProvider extends ContentProvider {
@Override
public int update(Uri url, ContentValues values, String selection, String[] selectionArgs) {
+ checkForSupportedColumns(values);
final SQLiteDatabase db = mDbHelper.getWritableDatabase();
String where;
final int matchedUriId = sURIMatcher.match(url);
@@ -216,4 +221,13 @@ public class CallLogProvider extends ContentProvider {
protected String getCurrentCountryIso() {
return mCountryMonitor.getCountryIso();
}
+
+ /** Checks if ContentValues contains none other than supported columns. */
+ private void checkForSupportedColumns(ContentValues values) {
+ for (String requestedColumn : values.keySet()) {
+ if (!sCallsProjectionMap.keySet().contains(requestedColumn)) {
+ throw new IllegalArgumentException("Column '" + requestedColumn + "' is invalid.");
+ }
+ }
+ }
}