diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/providers/contacts/ContactsProvider2.java | 35 |
1 files changed, 30 insertions, 5 deletions
diff --git a/src/com/android/providers/contacts/ContactsProvider2.java b/src/com/android/providers/contacts/ContactsProvider2.java index 86f6213..3ec15c1 100644 --- a/src/com/android/providers/contacts/ContactsProvider2.java +++ b/src/com/android/providers/contacts/ContactsProvider2.java @@ -5541,12 +5541,17 @@ public class ContactsProvider2 extends AbstractContactsProvider mDbHelper.get().getMimeTypeId(Phone.CONTENT_ITEM_TYPE); final long sipMimeTypeId = mDbHelper.get().getMimeTypeId(SipAddress.CONTENT_ITEM_TYPE); + final String additionalCallableMimeTypes = getCallableMimeTypesFromUri(uri); + String mimeTypeIdClauses = phoneMimeTypeId + ", " + sipMimeTypeId; + if (!TextUtils.isEmpty(additionalCallableMimeTypes)) { + mimeTypeIdClauses += ", " + additionalCallableMimeTypes; + } qb.appendWhere(DbQueryUtils.concatenateClauses( selection, "(" + Contacts.STARRED + "=1", DataColumns.MIMETYPE_ID + " IN (" + - phoneMimeTypeId + ", " + sipMimeTypeId + ")) AND (" + + mimeTypeIdClauses + ")) AND (" + RawContacts.CONTACT_ID + " IN " + Tables.DEFAULT_DIRECTORY + ")")); starredInnerQuery = qb.buildQuery(subProjection, null, null, null, Data.IS_SUPER_PRIMARY + " DESC," + SORT_BY_DATA_USAGE, null); @@ -5575,7 +5580,7 @@ public class ContactsProvider2 extends AbstractContactsProvider selection, "(" + Contacts.STARRED + "=0 OR " + Contacts.STARRED + " IS NULL", DataColumns.MIMETYPE_ID + " IN (" + - phoneMimeTypeId + ", " + sipMimeTypeId + ")) AND (" + + mimeTypeIdClauses + ")) AND (" + RawContacts.CONTACT_ID + " IN " + Tables.DEFAULT_DIRECTORY + ")")); frequentInnerQuery = qb.buildQuery(subProjection, null, null, null, SORT_BY_DATA_USAGE, "25"); @@ -6662,7 +6667,7 @@ public class ContactsProvider2 extends AbstractContactsProvider private String appendMimeTypeQueryParameters(Uri uri) { final String mimeTypesQueryParameter = getQueryParameter(uri, ADDITIONAL_CALLABLE_MIMETYPES_PARAM_KEY); - String appendWhere = ""; + StringBuilder appendWhere = new StringBuilder(); if (!TextUtils.isEmpty(mimeTypesQueryParameter)) { List<String> mimeTypesQueryParameterList = Arrays.asList(mimeTypesQueryParameter.split("\\s*,\\s*")); @@ -6671,11 +6676,31 @@ public class ContactsProvider2 extends AbstractContactsProvider for (String mimeType : mimeTypesQueryParameterList) { long mimeTypeId = mDbHelper.get().getMimeTypeId(mimeType); String mimeTypeIsExpression = DataColumns.MIMETYPE_ID + "=" + mimeTypeId; - appendWhere += " OR (" + mimeTypeIsExpression + ")"; + appendWhere.append(" OR (" + mimeTypeIsExpression + ")"); + } + } + } + return appendWhere.toString(); + } + + private String getCallableMimeTypesFromUri(Uri uri) { + final String mimeTypesQueryParameter = + getQueryParameter(uri, ADDITIONAL_CALLABLE_MIMETYPES_PARAM_KEY); + StringBuilder mimeTypeIds = new StringBuilder(); + if (!TextUtils.isEmpty(mimeTypesQueryParameter)) { + List<String> mimeTypesQueryParameterList = + Arrays.asList(mimeTypesQueryParameter.split("\\s*,\\s*")); + if (mimeTypesQueryParameterList != null && !mimeTypesQueryParameterList.isEmpty()) { + // Parse URI + for (String mimeType : mimeTypesQueryParameterList) { + if (!TextUtils.isEmpty(mimeTypeIds.toString())) { + mimeTypeIds.append(", "); + } + mimeTypeIds.append(mDbHelper.get().getMimeTypeId(mimeType)); } } } - return appendWhere; + return mimeTypeIds.toString(); } // Rewrites query sort orders using SORT_KEY_{PRIMARY, ALTERNATIVE} |