BaseContactsProvider2Test.java revision bee1a6b2e7cbea778195890e442c9e50f2a4e6d9
1d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov/* 2d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov * Copyright (C) 2009 The Android Open Source Project 3d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov * 4d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov * Licensed under the Apache License, Version 2.0 (the "License"); 5d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov * you may not use this file except in compliance with the License. 6d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov * You may obtain a copy of the License at 7d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov * 8d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov * http://www.apache.org/licenses/LICENSE-2.0 9d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov * 10d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov * Unless required by applicable law or agreed to in writing, software 11d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov * distributed under the License is distributed on an "AS IS" BASIS, 12d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov * See the License for the specific language governing permissions and 14d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov * limitations under the License. 15d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov */ 1628f8857b1b46bde18b85c6d3c2a63ac44c3c2e1cEvan Millarpackage com.android.providers.contacts; 17d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov 1828f8857b1b46bde18b85c6d3c2a63ac44c3c2e1cEvan Millarimport static com.android.providers.contacts.ContactsActor.PACKAGE_GREY; 19d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov 2028f8857b1b46bde18b85c6d3c2a63ac44c3c2e1cEvan Millarimport com.android.providers.contacts.ContactsActor; 21bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar 22bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikovimport android.content.ContentProvider; 23d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.content.ContentUris; 24d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.content.ContentValues; 25d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.database.Cursor; 26d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.net.Uri; 27bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikovimport android.provider.ContactsContract; 28d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.provider.ContactsContract.Aggregates; 29d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.provider.ContactsContract.AggregationExceptions; 30d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.provider.ContactsContract.Contacts; 31d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.provider.ContactsContract.Data; 32bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millarimport android.provider.ContactsContract.Presence; 33bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millarimport android.provider.ContactsContract.CommonDataKinds.Im; 34d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.StructuredName; 35a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.Email; 36a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.Nickname; 37bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.Phone; 38d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.test.AndroidTestCase; 39d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.test.mock.MockContentResolver; 40d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovimport android.test.suitebuilder.annotation.LargeTest; 41bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikovimport android.util.Log; 42bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 43bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikovimport java.util.Locale; 44d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov 45d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov/** 46d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov * A common superclass for {@link ContactsProvider2}-related tests. 47d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov */ 48d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov@LargeTest 49d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikovpublic abstract class BaseContactsProvider2Test extends AndroidTestCase { 50d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov 51d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov protected static final String PACKAGE = "ContactsProvider2Test"; 52d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov 53bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov protected ContactsActor mActor; 54d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov protected MockContentResolver mResolver; 55d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov 56bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov protected Class<? extends ContentProvider> getProviderClass() { 57bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov return SynchronousContactsProvider2.class; 58bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 59bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 60bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov protected String getAuthority() { 61bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov return ContactsContract.AUTHORITY; 62bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 63bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 64d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov @Override 65d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov protected void setUp() throws Exception { 66d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov super.setUp(); 67d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov 68bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mActor = new ContactsActor(getContext(), PACKAGE_GREY, getProviderClass(), getAuthority()); 69d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov mResolver = mActor.resolver; 70d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov } 71d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov 72d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov protected long createContact() { 73d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov ContentValues values = new ContentValues(); 74d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov values.put(Contacts.PACKAGE, mActor.packageName); 75d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov Uri contactUri = mResolver.insert(Contacts.CONTENT_URI, values); 76d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov return ContentUris.parseId(contactUri); 77d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov } 78d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov 79d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov protected Uri insertStructuredName(long contactId, String givenName, String familyName) { 80d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov ContentValues values = new ContentValues(); 81d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov StringBuilder sb = new StringBuilder(); 82d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov if (givenName != null) { 83d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov sb.append(givenName); 84d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov } 85d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov if (givenName != null && familyName != null) { 86d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov sb.append(" "); 87d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov } 88d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov if (familyName != null) { 89d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov sb.append(familyName); 90d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov } 91d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov values.put(StructuredName.DISPLAY_NAME, sb.toString()); 92d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov values.put(StructuredName.GIVEN_NAME, givenName); 93d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov values.put(StructuredName.FAMILY_NAME, familyName); 94d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov 954097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov return insertStructuredName(contactId, values); 964097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov } 974097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov 984097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov protected Uri insertStructuredName(long contactId, ContentValues values) { 994097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov values.put(Data.CONTACT_ID, contactId); 1004097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE); 101d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov Uri resultUri = mResolver.insert(Data.CONTENT_URI, values); 102d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov return resultUri; 103d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov } 104d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov 105bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov protected Uri insertPhoneNumber(long contactId, String phoneNumber) { 106bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov ContentValues values = new ContentValues(); 107bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov values.put(Data.CONTACT_ID, contactId); 108bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE); 109bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov values.put(Phone.NUMBER, phoneNumber); 110bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov 111bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov Uri resultUri = mResolver.insert(Data.CONTENT_URI, values); 112bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov return resultUri; 113bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov } 114bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov 115a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov protected Uri insertEmail(long contactId, String email) { 116a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov ContentValues values = new ContentValues(); 117a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov values.put(Data.CONTACT_ID, contactId); 118a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE); 119a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov values.put(Email.DATA, email); 120a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov 121a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov Uri resultUri = mResolver.insert(Data.CONTENT_URI, values); 122a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov return resultUri; 123a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov } 124a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov 125a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov protected Uri insertNickname(long contactId, String nickname) { 126a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov ContentValues values = new ContentValues(); 127a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov values.put(Data.CONTACT_ID, contactId); 128a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov values.put(Data.MIMETYPE, Nickname.CONTENT_ITEM_TYPE); 129a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov values.put(Nickname.NAME, nickname); 130a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov 131a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov Uri resultUri = mResolver.insert(Data.CONTENT_URI, values); 132a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov return resultUri; 133a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov } 134a5ad551e1753086825499f1aeb6415bb986f3588Dmitri Plotnikov 135bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar protected Uri insertPresence(int protocol, String handle, int presence) { 136bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar ContentValues values = new ContentValues(); 137bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar values.put(Presence.IM_PROTOCOL, protocol); 138bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar values.put(Presence.IM_HANDLE, handle); 139bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar values.put(Presence.PRESENCE_STATUS, presence); 140bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar 141bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar Uri resultUri = mResolver.insert(Presence.CONTENT_URI, values); 142bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar return resultUri; 143bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar } 144bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar 145bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar protected Uri insertImHandle(long contactId, int protocol, String handle) { 146bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar ContentValues values = new ContentValues(); 147bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar values.put(Data.CONTACT_ID, contactId); 148bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar values.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE); 149bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar values.put(Im.PROTOCOL, protocol); 150bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar values.put(Im.DATA, handle); 151bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar 152bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar Uri resultUri = mResolver.insert(Data.CONTENT_URI, values); 153bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar return resultUri; 154bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar } 155bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar 156d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov protected void setAggregationException(int type, long aggregateId, long contactId) { 157d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov ContentValues values = new ContentValues(); 158d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov values.put(AggregationExceptions.AGGREGATE_ID, aggregateId); 159d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov values.put(AggregationExceptions.CONTACT_ID, contactId); 160d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov values.put(AggregationExceptions.TYPE, type); 161d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov mResolver.update(AggregationExceptions.CONTENT_URI, values, null, null); 162d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov } 163d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov 164d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov protected Cursor queryContact(long contactId) { 165d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov return mResolver.query(ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId), null, 166d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov null, null, null); 167d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov } 168d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov 169d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov protected Cursor queryAggregate(long aggregateId) { 170d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov return mResolver.query(ContentUris.withAppendedId(Aggregates.CONTENT_URI, aggregateId), 171d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov null, null, null, null); 172d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov } 173d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov 174bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar protected Cursor queryAggregateSummary(long aggregateId, String[] projection) { 175bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar return mResolver.query(ContentUris.withAppendedId(Aggregates.CONTENT_SUMMARY_URI, 176bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar aggregateId), projection, null, null, null); 177bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar } 178bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar 179bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar protected Cursor queryAggregateSummary() { 180bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar return mResolver.query(Aggregates.CONTENT_SUMMARY_URI, null, null, null, null); 181bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar } 182bc5c799a52b5bde2f273efd118ebe2228c3d8f15Evan Millar 183d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov protected long queryAggregateId(long contactId) { 184d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov Cursor c = queryContact(contactId); 185d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov assertTrue(c.moveToFirst()); 186d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov long aggregateId = c.getLong(c.getColumnIndex(Contacts.AGGREGATE_ID)); 187d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov c.close(); 188d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov return aggregateId; 189d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov } 190d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov 191d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov protected String queryDisplayName(long aggregateId) { 192d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov Cursor c = queryAggregate(aggregateId); 193d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov assertTrue(c.moveToFirst()); 194d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov String displayName = c.getString(c.getColumnIndex(Aggregates.DISPLAY_NAME)); 195d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov c.close(); 196d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov return displayName; 197d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov } 198d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov 199bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov protected void assertAggregated(long contactId1, long contactId2) { 200bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov long aggregateId1 = queryAggregateId(contactId1); 201bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov long aggregateId2 = queryAggregateId(contactId2); 202bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov assertTrue(aggregateId1 == aggregateId2); 203bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov } 204bf659107617a6291ba8bfeebc3f2e50138075ab5Dmitri Plotnikov 205d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov protected void assertAggregated(long contactId1, long contactId2, String expectedDisplayName) { 206d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov long aggregateId1 = queryAggregateId(contactId1); 207d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov long aggregateId2 = queryAggregateId(contactId2); 208d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov assertTrue(aggregateId1 == aggregateId2); 209d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov 210d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov String displayName = queryDisplayName(aggregateId1); 211d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov assertEquals(expectedDisplayName, displayName); 212d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov } 213d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov 214d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov protected void assertNotAggregated(long contactId1, long contactId2) { 215d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov long aggregateId1 = queryAggregateId(contactId1); 216d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov long aggregateId2 = queryAggregateId(contactId2); 217d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov assertTrue(aggregateId1 != aggregateId2); 218d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov } 2194097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov 2204097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov protected void assertStructuredName(long contactId, String prefix, String givenName, 2214097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov String middleName, String familyName, String suffix) { 2224097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov Uri uri = Uri.withAppendedPath(ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId), 2234097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov Contacts.Data.CONTENT_DIRECTORY); 2244097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov 2254097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov final String[] projection = new String[] { 2264097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov StructuredName.PREFIX, StructuredName.GIVEN_NAME, StructuredName.MIDDLE_NAME, 2274097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov StructuredName.FAMILY_NAME, StructuredName.SUFFIX 2284097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov }; 2294097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov 2304097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov Cursor c = mResolver.query(uri, projection, Data.MIMETYPE + "='" 2314097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov + StructuredName.CONTENT_ITEM_TYPE + "'", null, null); 2324097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov 2334097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov assertTrue(c.moveToFirst()); 2344097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov assertEquals(prefix, c.getString(0)); 2354097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov assertEquals(givenName, c.getString(1)); 2364097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov assertEquals(middleName, c.getString(2)); 2374097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov assertEquals(familyName, c.getString(3)); 2384097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov assertEquals(suffix, c.getString(4)); 2394097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov c.close(); 2404097855e2d672b3f8e1c5c8a169efb80203bf53eDmitri Plotnikov } 241d35d9c748af4c3182679c4c546137acfc11eb7a8Dmitri Plotnikov} 242