LegacyContactsProviderTest.java revision 445ca81effbb0d61c7bc0033acf2d3dfd228fd4e
1bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov/* 2bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov * Copyright (C) 2009 The Android Open Source Project 3bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov * 4bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov * Licensed under the Apache License, Version 2.0 (the "License"); 5bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov * you may not use this file except in compliance with the License. 6bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov * You may obtain a copy of the License at 7bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov * 8bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov * http://www.apache.org/licenses/LICENSE-2.0 9bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov * 10bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov * Unless required by applicable law or agreed to in writing, software 11bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov * distributed under the License is distributed on an "AS IS" BASIS, 12bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov * See the License for the specific language governing permissions and 14bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov * limitations under the License. 15bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov */ 16bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 17bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikovpackage com.android.providers.contacts; 18bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 19bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikovimport android.content.ContentProvider; 20bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikovimport android.content.ContentUris; 21bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikovimport android.content.ContentValues; 22bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikovimport android.content.res.Resources; 23bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikovimport android.database.Cursor; 24bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikovimport android.net.Uri; 25bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikovimport android.provider.Contacts; 26bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikovimport android.provider.Contacts.ContactMethods; 27bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikovimport android.provider.Contacts.Extensions; 28bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikovimport android.provider.Contacts.GroupMembership; 29bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikovimport android.provider.Contacts.Groups; 30bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikovimport android.provider.Contacts.Organizations; 31bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikovimport android.provider.Contacts.People; 32bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikovimport android.provider.Contacts.Phones; 33bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikovimport android.provider.Contacts.Photos; 34bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikovimport android.provider.Contacts.Presence; 35bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikovimport android.test.suitebuilder.annotation.LargeTest; 36bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 37bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikovimport java.io.ByteArrayOutputStream; 38bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikovimport java.io.IOException; 39bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikovimport java.io.InputStream; 40bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 41bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov/** 42bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov * Tests for legacy contacts APIs. 43bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov */ 44bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov@LargeTest 45bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikovpublic class LegacyContactsProviderTest extends BaseContactsProvider2Test { 46bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 47f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov private static final boolean USE_LEGACY_PROVIDER = false; 48f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 49bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov @Override 50bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov protected Class<? extends ContentProvider> getProviderClass() { 51f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov return USE_LEGACY_PROVIDER ? ContactsProvider.class : SynchronousContactsProvider2.class; 52bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 53bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 54bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov @Override 55bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov protected String getAuthority() { 56bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov return Contacts.AUTHORITY; 57bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 58bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 59bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov public void testPeopleInsert() { 60bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 61bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov putContactValues(values); 62bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 63bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri uri = mResolver.insert(People.CONTENT_URI, values); 64bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(uri, values); 65d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov assertSelection(People.CONTENT_URI, values, People._ID, ContentUris.parseId(uri)); 66bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 67bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 68f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov // TODO fix and reenable the test 69f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov public void __testPeopleDelete() { 70bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 71bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.NAME, "John Doe"); 72bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri personId = mResolver.insert(People.CONTENT_URI, values); 73bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.delete(personId, null, null); 74bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 75bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Cursor c = mResolver.query(personId, null, People.NAME + "='John Doe'" , null, null); 76bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertEquals("Record count after deletion", 0, c.getCount()); 77bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov c.close(); 78bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 79bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov try { 80bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.query(People.DELETED_CONTENT_URI, null, null, null, null); 81bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } catch (UnsupportedOperationException e) { 82bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Expected exception 83bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 84bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 85bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 86445ca81effbb0d61c7bc0033acf2d3dfd228fd4eDmitri Plotnikov public void testPeopleFilter() { 87bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 88bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.NAME, "Deer Doe"); 89bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.insert(People.CONTENT_URI, values); 90bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 91bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 92bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.NAME, "Dear Dough"); 93bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.insert(People.CONTENT_URI, values); 94bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 95bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 96bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.NAME, "D.R. Dauwe"); 97bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.insert(People.CONTENT_URI, values); 98bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 99bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertFilteredContacts("d", "Deer Doe", "Dear Dough", "D.R. Dauwe"); 100bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertFilteredContacts("de", "Deer Doe", "Dear Dough"); 101bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertFilteredContacts("dee", "Deer Doe"); 102bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertFilteredContacts("der"); 103bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 104bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 1050f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov public void testDefaultDisplayName() { 106bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 107bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.NAME, "John Doe"); 108bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri personUri = mResolver.insert(People.CONTENT_URI, values); 109bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(personUri, People.DISPLAY_NAME, "John Doe"); 110bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 111bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 1123cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov public void testPrimaryOrganization() { 113bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 114bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov final Uri personUri = mResolver.insert(People.CONTENT_URI, values); 115bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long personId = ContentUris.parseId(personUri); 116bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 117bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Primary 118bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 119bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Organizations.ISPRIMARY, 1); 120bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Organizations.COMPANY, "Google"); 121bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Organizations.TYPE, Organizations.TYPE_WORK); 122bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Organizations.PERSON_ID, personId); 123bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri orgUri1 = mResolver.insert(Organizations.CONTENT_URI, values); 124bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 125bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Non-primary 126bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 127bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Organizations.COMPANY, "Acme"); 128bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Organizations.TYPE, Organizations.TYPE_WORK); 129bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Organizations.PERSON_ID, personId); 130bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri orgUri2 = mResolver.insert(Organizations.CONTENT_URI, values); 131bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 132bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 133bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.PRIMARY_ORGANIZATION_ID, ContentUris.parseId(orgUri1)); 134bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.DISPLAY_NAME, "Google"); 135bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(personUri, values); 136bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 137bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Remove the original primary organization 138bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.delete(orgUri1, null, null); 139bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 140bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 141bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.PRIMARY_ORGANIZATION_ID, ContentUris.parseId(orgUri2)); 142bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.DISPLAY_NAME, "Acme"); 143bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(personUri, values); 144bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 145bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Remove the remaining organization 146bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.delete(orgUri2, null, null); 147bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 148bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 149bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.putNull(People.PRIMARY_ORGANIZATION_ID); 150bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.putNull(People.DISPLAY_NAME); 151bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(personUri, values); 152bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 153bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 154e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov public void testPrimaryPhone() { 155bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 156bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri personUri = mResolver.insert(People.CONTENT_URI, values); 157bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long personId = ContentUris.parseId(personUri); 158bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 159bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Primary 160bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 161bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Phones.ISPRIMARY, 1); 162bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Phones.TYPE, Phones.TYPE_WORK); 163bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Phones.PERSON_ID, personId); 164bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Phones.NUMBER, "12345"); 165bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri phoneUri1 = mResolver.insert(Phones.CONTENT_URI, values); 166bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 167bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Non-primary 168bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 169bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Phones.TYPE, Phones.TYPE_WORK); 170bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Phones.PERSON_ID, personId); 171bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Phones.NUMBER, "67890"); 172bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri phoneUri2 = mResolver.insert(Phones.CONTENT_URI, values); 173bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 174bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 175bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.PRIMARY_PHONE_ID, ContentUris.parseId(phoneUri1)); 176bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.DISPLAY_NAME, "12345"); 177bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(personUri, values); 178bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 179bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Remove the primary phone number 180bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.delete(phoneUri1, null, null); 181bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 182bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 183bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.PRIMARY_PHONE_ID, ContentUris.parseId(phoneUri2)); 184bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.DISPLAY_NAME, "67890"); 185bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(personUri, values); 186bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 187bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Remove the remaining phone number 188bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.delete(phoneUri2, null, null); 189bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 190bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 191bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.putNull(People.PRIMARY_PHONE_ID); 192bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.putNull(People.DISPLAY_NAME); 193bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(personUri, values); 194bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 195bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 196e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov public void testPrimaryEmail() { 197bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 198bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri personUri = mResolver.insert(People.CONTENT_URI, values); 199bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long personId = ContentUris.parseId(personUri); 200bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 201bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Primary 202bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 203bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.PERSON_ID, personId); 204bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.KIND, Contacts.KIND_EMAIL); 205bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.TYPE, ContactMethods.TYPE_HOME); 206bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.DATA, "foo@acme.com"); 207bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.ISPRIMARY, 1); 208bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri emailUri1 = mResolver.insert(ContactMethods.CONTENT_URI, values); 209bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 210bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Non-primary 211bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 212bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.PERSON_ID, personId); 213bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.KIND, Contacts.KIND_EMAIL); 214bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.TYPE, ContactMethods.TYPE_WORK); 215bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.DATA, "bar@acme.com"); 216bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri emailUri2 = mResolver.insert(ContactMethods.CONTENT_URI, values); 217bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 218bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 219bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.PRIMARY_EMAIL_ID, ContentUris.parseId(emailUri1)); 220bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.DISPLAY_NAME, "foo@acme.com"); 221bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(personUri, values); 222bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 223bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Remove the primary email 224bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.delete(emailUri1, null, null); 225bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 226bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 227bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.PRIMARY_EMAIL_ID, ContentUris.parseId(emailUri2)); 228bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.DISPLAY_NAME, "bar@acme.com"); 229bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(personUri, values); 230bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 231bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Remove the remaining email 232bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.delete(emailUri2, null, null); 233bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 234bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 235bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.putNull(People.PRIMARY_EMAIL_ID); 236bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.putNull(People.DISPLAY_NAME); 237bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(personUri, values); 238bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 239bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 240bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov public void testMarkAsContacted() { 241bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 242bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri personUri = mResolver.insert(People.CONTENT_URI, values); 243bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long personId = ContentUris.parseId(personUri); 244bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 245bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov int timesContactedBefore = 246bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Integer.parseInt(getStoredValue(personUri, People.TIMES_CONTACTED)); 247bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long timeBefore = System.currentTimeMillis(); 248bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov People.markAsContacted(mResolver, personId); 249bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long timeAfter = System.currentTimeMillis(); 250bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 251bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long lastContacted = Long.parseLong(getStoredValue(personUri, People.LAST_TIME_CONTACTED)); 252bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov int timesContactedAfter = 253bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Integer.parseInt(getStoredValue(personUri, People.TIMES_CONTACTED)); 254bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 255bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertTrue(lastContacted >= timeBefore); 256bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertTrue(lastContacted <= timeAfter); 257bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertEquals(timesContactedAfter, timesContactedBefore + 1); 258bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 259bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 2603cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov public void testOrganizationsInsert() { 261bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 262bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri personUri = mResolver.insert(People.CONTENT_URI, values); 263bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long personId = ContentUris.parseId(personUri); 264bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 265bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 266bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Organizations.COMPANY, "Sierra"); 267bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Organizations.PERSON_ID, personId); 268bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Organizations.TYPE, Organizations.TYPE_CUSTOM); 269bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Organizations.LABEL, "Club"); 270bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Organizations.TITLE, "Member"); 271bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Organizations.ISPRIMARY, 1); 272bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 273bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri uri = mResolver.insert(Organizations.CONTENT_URI, values); 274bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(uri, values); 275d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov assertSelection(Organizations.CONTENT_URI, values, 276d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Organizations._ID, ContentUris.parseId(uri)); 277bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 278bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertPersonIdConstraint(Organizations.CONTENT_URI, Organizations.TYPE, 279bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Organizations.TYPE_WORK); 280bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 281bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertTypeAndLabelConstraints(Organizations.CONTENT_URI, Organizations.PERSON_ID, personId, 282bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Organizations.TYPE, Organizations.TYPE_CUSTOM, Organizations.TYPE_OTHER, 283bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Organizations.LABEL); 284bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 285bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 286e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov public void testPhonesInsert() { 287bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 288bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov putContactValues(values); 289bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri personUri = mResolver.insert(People.CONTENT_URI, values); 290bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long personId = ContentUris.parseId(personUri); 291bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 292bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 293bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Phones.PERSON_ID, personId); 294bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Phones.TYPE, Phones.TYPE_CUSTOM); 295bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Phones.LABEL, "Directory"); 296bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Phones.NUMBER, "1-800-4664-411"); 297bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Phones.ISPRIMARY, 1); 298bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 299bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri uri = mResolver.insert(Phones.CONTENT_URI, values); 300bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 301bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Adding another value to assert 302bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Phones.NUMBER_KEY, "11446640081"); 303bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 304bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // The result is joined with People 305bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov putContactValues(values); 306bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(uri, values); 307d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov assertSelection(Phones.CONTENT_URI, values, 308d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Phones._ID, ContentUris.parseId(uri)); 309bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 310bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Access the phone through People 311bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri twigUri = Uri.withAppendedPath(personUri, People.Phones.CONTENT_DIRECTORY); 312bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(twigUri, values); 313bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 314bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Now the person should be joined with Phone 315bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 316bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov putContactValues(values); 317bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.TYPE, Phones.TYPE_CUSTOM); 318bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.LABEL, "Directory"); 319bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.NUMBER, "1-800-4664-411"); 320bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(personUri, values); 321bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 322bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertPersonIdConstraint(Phones.CONTENT_URI, Phones.TYPE, Phones.TYPE_WORK); 323bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 324bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertTypeAndLabelConstraints(Phones.CONTENT_URI, Phones.PERSON_ID, personId, Phones.TYPE, 325bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Phones.TYPE_CUSTOM, Phones.TYPE_OTHER, Phones.LABEL); 326bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 327bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 328e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov public void testEmailInsert() { 329e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov assertContactMethodInsert(Contacts.KIND_EMAIL, ContactMethods.TYPE_CUSTOM, 330e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov "Some other way", "foo@acme.com", null, true); 331e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov } 332e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 333e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov public void testImInsert() { 334e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov assertContactMethodInsert(Contacts.KIND_IM, ContactMethods.TYPE_CUSTOM, "Some other way", 335e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov "Foo", "Bar", true); 336e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov } 337e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 338e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov public void testPostalInsert() { 339e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov assertContactMethodInsert(Contacts.KIND_POSTAL, ContactMethods.TYPE_CUSTOM, 340e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov "Some other way", "Foo", "Bar", true); 341e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov } 342e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 343e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov private void assertContactMethodInsert(int kind, int type, String label, String data, 344e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov String auxData, boolean primary) { 345bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 346bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov putContactValues(values); 347bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov final Uri personUri = mResolver.insert(People.CONTENT_URI, values); 348bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long personId = ContentUris.parseId(personUri); 349bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 350bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 351bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.PERSON_ID, personId); 352e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov values.put(ContactMethods.KIND, kind); 353e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov values.put(ContactMethods.TYPE, type); 354e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov values.put(ContactMethods.LABEL, label); 355e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov values.put(ContactMethods.DATA, data); 356e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov values.put(ContactMethods.AUX_DATA, auxData); 357e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov values.put(ContactMethods.ISPRIMARY, primary ? 1 : 0); 358bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 359bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri uri = mResolver.insert(ContactMethods.CONTENT_URI, values); 360bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 361bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // The result is joined with People 362bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov putContactValues(values); 363bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(uri, values); 364d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov assertSelection(ContactMethods.CONTENT_URI, values, 365d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov ContactMethods._ID, ContentUris.parseId(uri)); 366bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 367e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov // Access the contact method through People 368bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri twigUri = Uri.withAppendedPath(personUri, People.ContactMethods.CONTENT_DIRECTORY); 369bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(twigUri, values); 370bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 371bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertPersonIdConstraint(ContactMethods.CONTENT_URI, ContactMethods.TYPE, 372bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContactMethods.TYPE_WORK); 373bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 374bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertTypeAndLabelConstraints(ContactMethods.CONTENT_URI, ContactMethods.PERSON_ID, 375bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov personId, ContactMethods.TYPE, ContactMethods.TYPE_CUSTOM, 376bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContactMethods.TYPE_OTHER, ContactMethods.LABEL); 377bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 378bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 3790f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov public void testExtensionsInsert() { 380bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 381bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov final Uri personUri = mResolver.insert(People.CONTENT_URI, values); 382bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long personId = ContentUris.parseId(personUri); 383bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 384bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 385bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Extensions.PERSON_ID, personId); 386bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Extensions.NAME, "Foo"); 387bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Extensions.VALUE, "Bar"); 388bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 389bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri uri = mResolver.insert(Extensions.CONTENT_URI, values); 390bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(uri, values); 391d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov assertSelection(Extensions.CONTENT_URI, values, 392d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Extensions._ID, ContentUris.parseId(uri)); 393bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 394bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Access the extensions through People 395bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri twigUri = Uri.withAppendedPath(personUri, People.Extensions.CONTENT_DIRECTORY); 396bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(twigUri, values); 397bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 398bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 3990f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov public void testGroupsInsert() { 400bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 401bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Groups.NAME, "Galois"); 402bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Groups.NOTES, "Abel"); 4030f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov values.put(Groups.SYSTEM_ID, "12345"); 404bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 405bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri groupUri = mResolver.insert(Groups.CONTENT_URI, values); 406bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(groupUri, values); 407bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 408bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 4090f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov public void testGroupMembershipsInsert() { 410bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 411bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Groups.NAME, "Galois"); 412bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Groups.NOTES, "Abel"); 413bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri groupUri = mResolver.insert(Groups.CONTENT_URI, values); 414bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 415bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 416bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.NAME, "Klein"); 417bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri personUri = mResolver.insert(People.CONTENT_URI, values); 418bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 419bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long groupId = ContentUris.parseId(groupUri); 420bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long personId = ContentUris.parseId(personUri); 421bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 422d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov values.clear(); 423d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov values.put(GroupMembership.GROUP_ID, groupId); 424d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov values.put(GroupMembership.PERSON_ID, personId); 425d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Uri membershipUri = mResolver.insert(GroupMembership.CONTENT_URI, values); 426d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov assertStoredValues(membershipUri, values); 427d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov assertSelection(GroupMembership.CONTENT_URI, values, 428d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov GroupMembership._ID, ContentUris.parseId(membershipUri)); 429bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 430bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri personsGroupsUri = Uri.withAppendedPath(personUri, GroupMembership.CONTENT_DIRECTORY); 431d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov assertStoredValues(personsGroupsUri, values); 432bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 433bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 434d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov public void testAddToGroup() { 435bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 436bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri personUri = mResolver.insert(People.CONTENT_URI, values); 437bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long personId = ContentUris.parseId(personUri); 438bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 439bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 440bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Groups.NAME, "Galois"); 441bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri groupUri = mResolver.insert(Groups.CONTENT_URI, values); 442bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 443bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov People.addToGroup(mResolver, personId, "Galois"); 444bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 445bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 446bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(GroupMembership.GROUP_ID, ContentUris.parseId(groupUri)); 447bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(GroupMembership.PERSON_ID, personId); 448bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 449bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri personsGroupsUri = Uri.withAppendedPath(personUri, GroupMembership.CONTENT_DIRECTORY); 450bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(personsGroupsUri, values); 451bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 452bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 45370b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov public void testPresenceInsertMatchOnHandle() { 454bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 455bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov putContactValues(values); 456bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri personUri = mResolver.insert(People.CONTENT_URI, values); 457bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long personId = ContentUris.parseId(personUri); 458bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 459bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov String encodedProtocol = 460bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContactMethods.encodePredefinedImProtocol(ContactMethods.PROTOCOL_GOOGLE_TALK); 461bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 462bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 463bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.PERSON_ID, personId); 464bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.KIND, Contacts.KIND_IM); 465bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.TYPE, ContactMethods.TYPE_HOME); 466bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.DATA, "Android"); 467bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.AUX_DATA, encodedProtocol); 468bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.insert(ContactMethods.CONTENT_URI, values); 469bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 470bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 471bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Presence.IM_PROTOCOL, encodedProtocol); 472bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Presence.IM_HANDLE, "Android"); 473bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Presence.IM_ACCOUNT, "foo"); 47470b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov values.put(Presence.PRESENCE_STATUS, Presence.OFFLINE); 47570b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov values.put(Presence.PRESENCE_CUSTOM_STATUS, "Coding for Android"); 476bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 477bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri presenceUri = mResolver.insert(Presence.CONTENT_URI, values); 47870b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov assertSelection(Presence.CONTENT_URI, values, 47970b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov Presence._ID, ContentUris.parseId(presenceUri)); 480bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 481bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Presence.PERSON_ID, personId); 48270b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov assertStoredValues(presenceUri, values); 483bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 48470b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov // Now the person should be joined with Presence 48570b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov values.clear(); 486bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov putContactValues(values); 48770b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov values.put(People.IM_PROTOCOL, encodedProtocol); 48870b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov values.put(People.IM_HANDLE, "Android"); 48970b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov values.put(People.IM_ACCOUNT, "foo"); 49070b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov values.put(People.PRESENCE_STATUS, Presence.OFFLINE); 49170b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov values.put(People.PRESENCE_CUSTOM_STATUS, "Coding for Android"); 49270b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov assertStoredValues(personUri, values); 493bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 494bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 49570b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov public void testPresenceInsertMatchOnEmail() { 496bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 497bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov putContactValues(values); 498bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri personUri = mResolver.insert(People.CONTENT_URI, values); 499bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long personId = ContentUris.parseId(personUri); 500bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 501bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov String protocol = 502bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContactMethods.encodePredefinedImProtocol(ContactMethods.PROTOCOL_GOOGLE_TALK); 503bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 504bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 505bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.PERSON_ID, personId); 506bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.KIND, Contacts.KIND_EMAIL); 507bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.TYPE, ContactMethods.TYPE_HOME); 508bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.DATA, "Android@android.com"); 509bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.insert(ContactMethods.CONTENT_URI, values); 510bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 511bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 512bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Presence.IM_PROTOCOL, protocol); 513bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Presence.IM_HANDLE, "Android@android.com"); 514bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Presence.IM_ACCOUNT, "foo"); 515bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Presence.PRESENCE_STATUS, Presence.OFFLINE); 516bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Presence.PRESENCE_CUSTOM_STATUS, "Coding for Android"); 517bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 518bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri presenceUri = mResolver.insert(Presence.CONTENT_URI, values); 519bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 520bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Presence.PERSON_ID, personId); 521bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(presenceUri, values); 52270b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov assertSelection(Presence.CONTENT_URI, values, 52370b5ee6864cb3368d24a9e876fb93008997b12dfDmitri Plotnikov Presence._ID, ContentUris.parseId(presenceUri)); 524bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 525bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Now the person should be joined with Presence 526bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 527bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov putContactValues(values); 528bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.IM_PROTOCOL, protocol); 529bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.IM_HANDLE, "Android@android.com"); 530bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.IM_ACCOUNT, "foo"); 531bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.PRESENCE_STATUS, Presence.OFFLINE); 532bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.PRESENCE_CUSTOM_STATUS, "Coding for Android"); 533bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(personUri, values); 534bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 535bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 536c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov public void testPhotoUpdate() throws Exception { 537bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov byte[] photo = loadTestPhoto(); 538bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 539bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 540bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri personUri = mResolver.insert(People.CONTENT_URI, values); 541bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 542bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 543bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Photos.DATA, photo); 544c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov values.put(Photos.LOCAL_VERSION, "10"); 545c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov values.put(Photos.DOWNLOAD_REQUIRED, 1); 546c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov values.put(Photos.EXISTS_ON_SERVER, 1); 547c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov values.put(Photos.SYNC_ERROR, "404 does not exist"); 548bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 549bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri photoUri = Uri.withAppendedPath(personUri, Photos.CONTENT_DIRECTORY); 550bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.update(photoUri, values, null, null); 551bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(photoUri, values); 552bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 553bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 554bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov private void putContactValues(ContentValues values) { 555bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Populating only unhidden columns 556bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.NAME, "Deer Dough"); 557bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.PHONETIC_NAME, "Dear Doe"); 558bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.NOTES, "Cash Cow"); 559bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.TIMES_CONTACTED, 3); 560bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.LAST_TIME_CONTACTED, 10); 561bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.CUSTOM_RINGTONE, "ringtone"); 562bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.SEND_TO_VOICEMAIL, 1); 563bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.STARRED, 1); 564bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 565bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 566bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov private byte[] loadTestPhoto() throws IOException { 567bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov final Resources resources = getContext().getResources(); 568bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov InputStream is = 569bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov resources.openRawResource(com.android.internal.R.drawable.ic_contact_picture); 570bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ByteArrayOutputStream os = new ByteArrayOutputStream(); 571bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov byte[] buffer = new byte[1000]; 572bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov int count; 573bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov while((count = is.read(buffer)) != -1) { 574bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov os.write(buffer, 0, count); 575bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 576bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov return os.toByteArray(); 577bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 578bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 579bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov private void assertFilteredContacts(String filter, String... expectedNames) { 580bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri filterUri = Uri.withAppendedPath(People.CONTENT_FILTER_URI, filter); 581bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Cursor c = mResolver.query(filterUri, null, null, null, null); 582bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov try { 583bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertEquals("Record count", expectedNames.length, c.getCount()); 584bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov int column = c.getColumnIndex(People.NAME); 585bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov for (int i = 0; i < expectedNames.length; i++) { 586bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov c.moveToNext(); 587bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertEquals(expectedNames[i], c.getString(column)); 588bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 589bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } finally { 590bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov c.close(); 591bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 592bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 593bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 594bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov private void assertPersonIdConstraint(Uri uri, String typeColumn, int defaultType) { 595bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 596bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(typeColumn, defaultType); 597bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov try { 598bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.insert(uri, values); 599bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov fail("Inserted row without person ID"); 600bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } catch (Exception e) { 601bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Exception expected 602bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 603bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 604bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 605bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov private void assertTypeAndLabelConstraints(Uri uri, String personIdColumn, long personId, 606bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov String typeColumn, int defaultType, int otherType, String labelColumn) { 607bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 608bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(personIdColumn, personId); 609bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(typeColumn, defaultType); 610bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov try { 611bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.insert(uri, values); 612bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov fail("Inserted row with custom type but without label"); 613bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } catch (Exception e) { 614bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Exception expected 615bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 616bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 617bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 618bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(personIdColumn, personId); 619bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov try { 620bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.insert(uri, values); 621bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov fail("Inserted row without either type or label"); 622bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } catch (Exception e) { 623bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Exception expected 624bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 625bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 626bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 627bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(personIdColumn, personId); 628bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(typeColumn, otherType); 629bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(labelColumn, "Foo"); 630bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov try { 631bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.insert(uri, values); 6323cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov fail("Inserted row with both type and label"); 633bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } catch (Exception e) { 634bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Exception expected 635bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 636bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 637bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 638bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov} 639