diff options
author | Debashish Chatterjee <debashishc@google.com> | 2011-06-07 17:33:21 +0100 |
---|---|---|
committer | Debashish Chatterjee <debashishc@google.com> | 2011-06-15 14:36:26 +0100 |
commit | 59f6477e10203617f504857f7e9aee2fda393f4f (patch) | |
tree | 5ee6d35501a8146e33c621ef43a671b8d3452d76 /src/com/android/providers/contacts/CallLogProvider.java | |
parent | 46abbb56764add30cb6e6506f55d8dededc88113 (diff) | |
download | packages_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.java | 34 |
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."); + } + } + } } |