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 19c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikovimport android.app.SearchManager; 20bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikovimport android.content.ContentProvider; 21bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikovimport android.content.ContentUris; 22bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikovimport android.content.ContentValues; 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; 351c8e40c18f92722b9bec6e8ce2e345a9828efa16Dmitri Plotnikovimport android.provider.Contacts.Settings; 3642c817741879588db9014739f4dc194621e97381Dmitri Plotnikovimport android.provider.ContactsContract; 3724c1d384b45a6d3c1cc959062a9d4308335fabbfDave Santoroimport android.test.suitebuilder.annotation.MediumTest; 38bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 39bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikovimport java.io.IOException; 40bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 41bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov/** 42bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov * Tests for legacy contacts APIs. 438920a04b4a68ed6b548bcdef5ca8736dcf8b69b1Omari Stephens * 448920a04b4a68ed6b548bcdef5ca8736dcf8b69b1Omari Stephens * Run the test like this: 458920a04b4a68ed6b548bcdef5ca8736dcf8b69b1Omari Stephens * <code> 468920a04b4a68ed6b548bcdef5ca8736dcf8b69b1Omari Stephens * adb shell am instrument -e class com.android.providers.contacts.LegacyContactsProviderTest -w \ 478920a04b4a68ed6b548bcdef5ca8736dcf8b69b1Omari Stephens * com.android.providers.contacts.tests/android.test.InstrumentationTestRunner 488920a04b4a68ed6b548bcdef5ca8736dcf8b69b1Omari Stephens * </code> 4924c1d384b45a6d3c1cc959062a9d4308335fabbfDave Santoro * 5024c1d384b45a6d3c1cc959062a9d4308335fabbfDave Santoro * Note that this SHOULD be a large test, but had to be bumped down to medium due to a bug in the 5124c1d384b45a6d3c1cc959062a9d4308335fabbfDave Santoro * SQLite cleanup code. 52bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov */ 5324c1d384b45a6d3c1cc959062a9d4308335fabbfDave Santoro@MediumTest 541c8e40c18f92722b9bec6e8ce2e345a9828efa16Dmitri Plotnikov@SuppressWarnings("deprecation") 55bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikovpublic class LegacyContactsProviderTest extends BaseContactsProvider2Test { 56bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 57bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov @Override 58bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov protected Class<? extends ContentProvider> getProviderClass() { 59038a60f1920d798bc391a376e81980921a75cc34Fred Quintana return SynchronousContactsProvider2.class; 60bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 61bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 62bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov @Override 63bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov protected String getAuthority() { 64bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov return Contacts.AUTHORITY; 65bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 66bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 67bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov public void testPeopleInsert() { 68bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 69bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov putContactValues(values); 70bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 71bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri uri = mResolver.insert(People.CONTENT_URI, values); 72bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(uri, values); 735dec8cf5a992bac38c0e81d744fc77d748e926aaDmitri Plotnikov assertSelection(People.CONTENT_URI, values, "people", People._ID, ContentUris.parseId(uri)); 74bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 75bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 7667b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov public void testPeopleUpdate() { 7767b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov ContentValues values = new ContentValues(); 7867b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov putContactValues(values); 7967b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov 8067b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov Uri uri = mResolver.insert(People.CONTENT_URI, values); 8167b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov long personId = ContentUris.parseId(uri); 8267b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov assertStoredValues(uri, values); 8367b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov assertSelection(People.CONTENT_URI, values, "people", People._ID, personId); 8467b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov 8567b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov values.clear(); 8667b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov putContactValues2(values); 8767b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov mResolver.update(uri, values, null, null); 8867b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov assertStoredValues(uri, values); 8967b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov 9067b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov values.clear(); 9167b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov putContactValues(values); 9267b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov mResolver.update(People.CONTENT_URI, values, People._ID + "=" + personId, null); 9367b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov assertStoredValues(uri, values); 9467b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov } 9567b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov 9633b41fdb8d7c3c654cb070799c9d6e2b4ab16078Dmitri Plotnikov public void testPeopleDelete() { 97bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 98bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.NAME, "John Doe"); 99bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri personId = mResolver.insert(People.CONTENT_URI, values); 100bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.delete(personId, null, null); 101bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 102bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Cursor c = mResolver.query(personId, null, People.NAME + "='John Doe'" , null, null); 103bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertEquals("Record count after deletion", 0, c.getCount()); 104bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov c.close(); 105bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 106bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov try { 107bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.query(People.DELETED_CONTENT_URI, null, null, null, null); 108bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } catch (UnsupportedOperationException e) { 109bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Expected exception 110bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 111bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 112bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 113445ca81effbb0d61c7bc0033acf2d3dfd228fd4eDmitri Plotnikov public void testPeopleFilter() { 114bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 115bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.NAME, "Deer Doe"); 116bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.insert(People.CONTENT_URI, values); 117bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 118bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 119bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.NAME, "Dear Dough"); 120bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.insert(People.CONTENT_URI, values); 121bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 122bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 123bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.NAME, "D.R. Dauwe"); 124bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.insert(People.CONTENT_URI, values); 125bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 126bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertFilteredContacts("d", "Deer Doe", "Dear Dough", "D.R. Dauwe"); 127bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertFilteredContacts("de", "Deer Doe", "Dear Dough"); 128bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertFilteredContacts("dee", "Deer Doe"); 129bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertFilteredContacts("der"); 130bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 131bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 1320f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov public void testDefaultDisplayName() { 133bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 134bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.NAME, "John Doe"); 135bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri personUri = mResolver.insert(People.CONTENT_URI, values); 1365870f2dcc2ac7715b2c078a886ee346622e7887eDmitri Plotnikov assertStoredValue(personUri, People.DISPLAY_NAME, "John Doe"); 137bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 138bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 1393cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov public void testPrimaryOrganization() { 140bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 141bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov final Uri personUri = mResolver.insert(People.CONTENT_URI, values); 142bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long personId = ContentUris.parseId(personUri); 143bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 144bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Primary 145bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 146bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Organizations.ISPRIMARY, 1); 147bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Organizations.COMPANY, "Google"); 148bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Organizations.TYPE, Organizations.TYPE_WORK); 149bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Organizations.PERSON_ID, personId); 150bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri orgUri1 = mResolver.insert(Organizations.CONTENT_URI, values); 151bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 152bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Non-primary 153bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 154bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Organizations.COMPANY, "Acme"); 155bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Organizations.TYPE, Organizations.TYPE_WORK); 156bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Organizations.PERSON_ID, personId); 157bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri orgUri2 = mResolver.insert(Organizations.CONTENT_URI, values); 158bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 159bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 160bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.PRIMARY_ORGANIZATION_ID, ContentUris.parseId(orgUri1)); 161bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.DISPLAY_NAME, "Google"); 162bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(personUri, values); 163bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 164bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Remove the original primary organization 165bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.delete(orgUri1, null, null); 166bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 167bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 168bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.PRIMARY_ORGANIZATION_ID, ContentUris.parseId(orgUri2)); 169bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.DISPLAY_NAME, "Acme"); 170bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(personUri, values); 171bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 172bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Remove the remaining organization 173bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.delete(orgUri2, null, null); 174bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 175bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 176bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.putNull(People.PRIMARY_ORGANIZATION_ID); 177bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.putNull(People.DISPLAY_NAME); 178bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(personUri, values); 179bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 180bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 181e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov public void testPrimaryPhone() { 182bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 183ee56e80dcab0ca58f81dc5318db8d0c453d75903Dmitri Plotnikov putContactValuesExceptName(values); 184ee56e80dcab0ca58f81dc5318db8d0c453d75903Dmitri Plotnikov 185bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri personUri = mResolver.insert(People.CONTENT_URI, values); 186bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long personId = ContentUris.parseId(personUri); 187bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 188bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Primary 189bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 190bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Phones.ISPRIMARY, 1); 191bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Phones.TYPE, Phones.TYPE_WORK); 192bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Phones.PERSON_ID, personId); 193bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Phones.NUMBER, "12345"); 194bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri phoneUri1 = mResolver.insert(Phones.CONTENT_URI, values); 195bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 196bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Non-primary 197bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 198bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Phones.TYPE, Phones.TYPE_WORK); 199bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Phones.PERSON_ID, personId); 200bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Phones.NUMBER, "67890"); 201bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri phoneUri2 = mResolver.insert(Phones.CONTENT_URI, values); 202bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 203bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 204bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.PRIMARY_PHONE_ID, ContentUris.parseId(phoneUri1)); 205bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.DISPLAY_NAME, "12345"); 206bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(personUri, values); 207bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 208ee56e80dcab0ca58f81dc5318db8d0c453d75903Dmitri Plotnikov values.clear(); 209ee56e80dcab0ca58f81dc5318db8d0c453d75903Dmitri Plotnikov putContactValuesExceptName(values); 210ee56e80dcab0ca58f81dc5318db8d0c453d75903Dmitri Plotnikov values.put(People.PRIMARY_PHONE_ID, ContentUris.parseId(phoneUri1)); 211ee56e80dcab0ca58f81dc5318db8d0c453d75903Dmitri Plotnikov assertStoredValues(phoneUri2, values); 212ee56e80dcab0ca58f81dc5318db8d0c453d75903Dmitri Plotnikov 213bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Remove the primary phone number 214bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.delete(phoneUri1, null, null); 215bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 216bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 217bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.PRIMARY_PHONE_ID, ContentUris.parseId(phoneUri2)); 218bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.DISPLAY_NAME, "67890"); 219bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(personUri, values); 220bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 221bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Remove the remaining phone number 222bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.delete(phoneUri2, null, null); 223bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 224bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 225bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.putNull(People.PRIMARY_PHONE_ID); 226bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.putNull(People.DISPLAY_NAME); 227bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(personUri, values); 228bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 229bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 230bce6ee29f2d971ceae2bfce85a06bb3ecec6537aDmitri Plotnikov public void testEmailCrud() { 231bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 232bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri personUri = mResolver.insert(People.CONTENT_URI, values); 233bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long personId = ContentUris.parseId(personUri); 234bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 235bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Primary 236bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 237bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.PERSON_ID, personId); 238bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.KIND, Contacts.KIND_EMAIL); 239bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.TYPE, ContactMethods.TYPE_HOME); 240bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.DATA, "foo@acme.com"); 241bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.ISPRIMARY, 1); 242bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri emailUri1 = mResolver.insert(ContactMethods.CONTENT_URI, values); 243bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 24461efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov assertEquals(ContactMethods.CONTENT_EMAIL_ITEM_TYPE, mResolver.getType(emailUri1)); 24561efab87c2c8166b3cd69ed1a908d1c0d7271d0bDmitri Plotnikov 246bce6ee29f2d971ceae2bfce85a06bb3ecec6537aDmitri Plotnikov assertStoredValues(ContactMethods.CONTENT_URI, 247bce6ee29f2d971ceae2bfce85a06bb3ecec6537aDmitri Plotnikov ContactMethods._ID + "=" + ContentUris.parseId(emailUri1), null, values); 248bce6ee29f2d971ceae2bfce85a06bb3ecec6537aDmitri Plotnikov assertStoredValues(ContactMethods.CONTENT_EMAIL_URI, 249bce6ee29f2d971ceae2bfce85a06bb3ecec6537aDmitri Plotnikov ContactMethods._ID + "=" + ContentUris.parseId(emailUri1), null, values); 250bce6ee29f2d971ceae2bfce85a06bb3ecec6537aDmitri Plotnikov } 251bce6ee29f2d971ceae2bfce85a06bb3ecec6537aDmitri Plotnikov 252bce6ee29f2d971ceae2bfce85a06bb3ecec6537aDmitri Plotnikov public void testPrimaryEmail() { 253bce6ee29f2d971ceae2bfce85a06bb3ecec6537aDmitri Plotnikov ContentValues values = new ContentValues(); 254ee56e80dcab0ca58f81dc5318db8d0c453d75903Dmitri Plotnikov putContactValuesExceptName(values); 255bce6ee29f2d971ceae2bfce85a06bb3ecec6537aDmitri Plotnikov Uri personUri = mResolver.insert(People.CONTENT_URI, values); 256bce6ee29f2d971ceae2bfce85a06bb3ecec6537aDmitri Plotnikov long personId = ContentUris.parseId(personUri); 257bce6ee29f2d971ceae2bfce85a06bb3ecec6537aDmitri Plotnikov 258bce6ee29f2d971ceae2bfce85a06bb3ecec6537aDmitri Plotnikov // Primary 259bce6ee29f2d971ceae2bfce85a06bb3ecec6537aDmitri Plotnikov values.clear(); 260bce6ee29f2d971ceae2bfce85a06bb3ecec6537aDmitri Plotnikov values.put(ContactMethods.PERSON_ID, personId); 261bce6ee29f2d971ceae2bfce85a06bb3ecec6537aDmitri Plotnikov values.put(ContactMethods.KIND, Contacts.KIND_EMAIL); 262bce6ee29f2d971ceae2bfce85a06bb3ecec6537aDmitri Plotnikov values.put(ContactMethods.TYPE, ContactMethods.TYPE_HOME); 263bce6ee29f2d971ceae2bfce85a06bb3ecec6537aDmitri Plotnikov values.put(ContactMethods.DATA, "foo@acme.com"); 264bce6ee29f2d971ceae2bfce85a06bb3ecec6537aDmitri Plotnikov values.put(ContactMethods.ISPRIMARY, 1); 265bce6ee29f2d971ceae2bfce85a06bb3ecec6537aDmitri Plotnikov Uri emailUri1 = mResolver.insert(ContactMethods.CONTENT_URI, values); 266bce6ee29f2d971ceae2bfce85a06bb3ecec6537aDmitri Plotnikov 267bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Non-primary 268bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 269bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.PERSON_ID, personId); 270bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.KIND, Contacts.KIND_EMAIL); 271bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.TYPE, ContactMethods.TYPE_WORK); 272bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.DATA, "bar@acme.com"); 273bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri emailUri2 = mResolver.insert(ContactMethods.CONTENT_URI, values); 274bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 275bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 276bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.PRIMARY_EMAIL_ID, ContentUris.parseId(emailUri1)); 277bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.DISPLAY_NAME, "foo@acme.com"); 278bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(personUri, values); 279bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 280ee56e80dcab0ca58f81dc5318db8d0c453d75903Dmitri Plotnikov values.clear(); 281ee56e80dcab0ca58f81dc5318db8d0c453d75903Dmitri Plotnikov putContactValuesExceptName(values); 282ee56e80dcab0ca58f81dc5318db8d0c453d75903Dmitri Plotnikov values.put(People.PRIMARY_EMAIL_ID, ContentUris.parseId(emailUri1)); 283ee56e80dcab0ca58f81dc5318db8d0c453d75903Dmitri Plotnikov assertStoredValues(emailUri2, values); 284ee56e80dcab0ca58f81dc5318db8d0c453d75903Dmitri Plotnikov 285bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Remove the primary email 286bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.delete(emailUri1, null, null); 287bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 288bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 289bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.PRIMARY_EMAIL_ID, ContentUris.parseId(emailUri2)); 290bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.DISPLAY_NAME, "bar@acme.com"); 291bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(personUri, values); 292bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 293bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Remove the remaining email 294bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.delete(emailUri2, null, null); 295bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 296bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 297bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.putNull(People.PRIMARY_EMAIL_ID); 298bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.putNull(People.DISPLAY_NAME); 299bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(personUri, values); 300bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 301bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 302bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov public void testMarkAsContacted() { 303bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 304bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri personUri = mResolver.insert(People.CONTENT_URI, values); 305bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long personId = ContentUris.parseId(personUri); 306bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 307bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov int timesContactedBefore = 308bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Integer.parseInt(getStoredValue(personUri, People.TIMES_CONTACTED)); 309bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long timeBefore = System.currentTimeMillis(); 310bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov People.markAsContacted(mResolver, personId); 311bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long timeAfter = System.currentTimeMillis(); 312bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 313bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long lastContacted = Long.parseLong(getStoredValue(personUri, People.LAST_TIME_CONTACTED)); 314bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov int timesContactedAfter = 315bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Integer.parseInt(getStoredValue(personUri, People.TIMES_CONTACTED)); 316bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 317bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertTrue(lastContacted >= timeBefore); 318bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertTrue(lastContacted <= timeAfter); 319bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertEquals(timesContactedAfter, timesContactedBefore + 1); 320bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 321bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 3223cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov public void testOrganizationsInsert() { 323bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 324bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri personUri = mResolver.insert(People.CONTENT_URI, values); 325bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long personId = ContentUris.parseId(personUri); 326bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 327bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 328bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Organizations.COMPANY, "Sierra"); 329bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Organizations.PERSON_ID, personId); 330bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Organizations.TYPE, Organizations.TYPE_CUSTOM); 331bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Organizations.LABEL, "Club"); 332bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Organizations.TITLE, "Member"); 333bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Organizations.ISPRIMARY, 1); 334bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 335bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri uri = mResolver.insert(Organizations.CONTENT_URI, values); 336bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(uri, values); 337d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov assertSelection(Organizations.CONTENT_URI, values, 3385dec8cf5a992bac38c0e81d744fc77d748e926aaDmitri Plotnikov "organizations", Organizations._ID, ContentUris.parseId(uri)); 339bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 340bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertPersonIdConstraint(Organizations.CONTENT_URI, Organizations.TYPE, 341bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Organizations.TYPE_WORK); 342bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 343bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertTypeAndLabelConstraints(Organizations.CONTENT_URI, Organizations.PERSON_ID, personId, 344bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Organizations.TYPE, Organizations.TYPE_CUSTOM, Organizations.TYPE_OTHER, 345bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Organizations.LABEL); 346e06751fce696a31fcba173821dbe78b08bae20beDmitri Plotnikov 347e06751fce696a31fcba173821dbe78b08bae20beDmitri Plotnikov 348e06751fce696a31fcba173821dbe78b08bae20beDmitri Plotnikov Uri twigUri = Uri.withAppendedPath(personUri, Organizations.CONTENT_DIRECTORY); 349e06751fce696a31fcba173821dbe78b08bae20beDmitri Plotnikov assertStoredValues(twigUri, values); 350e06751fce696a31fcba173821dbe78b08bae20beDmitri Plotnikov 351e06751fce696a31fcba173821dbe78b08bae20beDmitri Plotnikov Uri twigUriWithId = ContentUris.withAppendedId(twigUri, ContentUris.parseId(uri)); 352e06751fce696a31fcba173821dbe78b08bae20beDmitri Plotnikov assertStoredValues(twigUriWithId, values); 353bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 354bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 355044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov public void testOrganizationsUpdate() { 356044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov ContentValues values = new ContentValues(); 357044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov Uri personUri = mResolver.insert(People.CONTENT_URI, values); 358044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov long personId = ContentUris.parseId(personUri); 359044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 360044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.clear(); 361044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(Organizations.COMPANY, "Sierra"); 362044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(Organizations.PERSON_ID, personId); 363044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(Organizations.TYPE, Organizations.TYPE_CUSTOM); 364044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(Organizations.LABEL, "Club"); 365044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(Organizations.TITLE, "Member"); 366044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(Organizations.ISPRIMARY, 0); 367044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 368044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov Uri uri = mResolver.insert(Organizations.CONTENT_URI, values); 369044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 370044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.clear(); 371044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(Organizations.COMPANY, "Planetary"); 372044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(Organizations.PERSON_ID, personId); 373044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(Organizations.TYPE, Organizations.TYPE_CUSTOM); 374044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(Organizations.LABEL, "Society"); 375044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(Organizations.TITLE, "Chair"); 376044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(Organizations.ISPRIMARY, 1); 377044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 378044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov mResolver.update(uri, values, null, null); 379044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 380044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov assertStoredValues(uri, values); 381044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 382044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 383e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov public void testPhonesInsert() { 384bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 385bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov putContactValues(values); 386bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri personUri = mResolver.insert(People.CONTENT_URI, values); 387bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long personId = ContentUris.parseId(personUri); 388bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 389bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 390bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Phones.PERSON_ID, personId); 391bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Phones.TYPE, Phones.TYPE_CUSTOM); 392bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Phones.LABEL, "Directory"); 393bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Phones.NUMBER, "1-800-4664-411"); 394bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Phones.ISPRIMARY, 1); 395bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 396bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri uri = mResolver.insert(Phones.CONTENT_URI, values); 39742c817741879588db9014739f4dc194621e97381Dmitri Plotnikov ContentValues expectedResults[] = new ContentValues[1]; 398bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Adding another value to assert 399892a3d9ded5c64a63ae3d5d5c52c59528b466c93Dmitri Plotnikov expectedResults[0] = new ContentValues(values); 40042c817741879588db9014739f4dc194621e97381Dmitri Plotnikov expectedResults[0].put(Phones.NUMBER_KEY, "11446640081"); 40142c817741879588db9014739f4dc194621e97381Dmitri Plotnikov 402bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // The result is joined with People 403892a3d9ded5c64a63ae3d5d5c52c59528b466c93Dmitri Plotnikov putContactValues(expectedResults[0]); 404892a3d9ded5c64a63ae3d5d5c52c59528b466c93Dmitri Plotnikov assertStoredValues(uri, expectedResults); 4055dec8cf5a992bac38c0e81d744fc77d748e926aaDmitri Plotnikov assertSelection(Phones.CONTENT_URI, values, "phones", 406d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Phones._ID, ContentUris.parseId(uri)); 407bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 408bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Access the phone through People 409bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri twigUri = Uri.withAppendedPath(personUri, People.Phones.CONTENT_DIRECTORY); 410892a3d9ded5c64a63ae3d5d5c52c59528b466c93Dmitri Plotnikov assertStoredValues(twigUri, expectedResults); 411bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 412bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Now the person should be joined with Phone 413bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 414bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov putContactValues(values); 415bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.TYPE, Phones.TYPE_CUSTOM); 416bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.LABEL, "Directory"); 417bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.NUMBER, "1-800-4664-411"); 418bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(personUri, values); 419bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 420bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertPersonIdConstraint(Phones.CONTENT_URI, Phones.TYPE, Phones.TYPE_WORK); 421bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 422bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertTypeAndLabelConstraints(Phones.CONTENT_URI, Phones.PERSON_ID, personId, Phones.TYPE, 423bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Phones.TYPE_CUSTOM, Phones.TYPE_OTHER, Phones.LABEL); 424bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 425bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 426044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov public void testPhonesUpdate() { 427044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov ContentValues values = new ContentValues(); 428044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov Uri personUri = mResolver.insert(People.CONTENT_URI, values); 429044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov long personId = ContentUris.parseId(personUri); 430044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 431044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.clear(); 432044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(Phones.PERSON_ID, personId); 433044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(Phones.TYPE, Phones.TYPE_CUSTOM); 434044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(Phones.LABEL, "Directory"); 435044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(Phones.NUMBER, "1-800-4664-411"); 436044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(Phones.ISPRIMARY, 0); 437044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 438044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov Uri uri = mResolver.insert(Phones.CONTENT_URI, values); 439044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 440044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.clear(); 441044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(Phones.PERSON_ID, personId); 442044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(Phones.TYPE, Phones.TYPE_FAX_HOME); 443044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.putNull(Phones.LABEL); 444044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(Phones.NUMBER, "1-800-555-4663"); 445044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(Phones.ISPRIMARY, 1); 446044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 447044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov mResolver.update(uri, values, null, null); 448044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 44942c817741879588db9014739f4dc194621e97381Dmitri Plotnikov ContentValues[] expectedValues = new ContentValues[1]; 450892a3d9ded5c64a63ae3d5d5c52c59528b466c93Dmitri Plotnikov expectedValues[0] = values; 45142c817741879588db9014739f4dc194621e97381Dmitri Plotnikov expectedValues[0].put(Phones.NUMBER_KEY, "36645550081"); 452892a3d9ded5c64a63ae3d5d5c52c59528b466c93Dmitri Plotnikov assertStoredValues(uri, expectedValues); 453044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 454044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 455fb362d1a5df250a49fad06db323b0d41fe0e3757Dmitri Plotnikov public void testPhonesFilterQuery() { 456fb362d1a5df250a49fad06db323b0d41fe0e3757Dmitri Plotnikov ContentValues values = new ContentValues(); 457fb362d1a5df250a49fad06db323b0d41fe0e3757Dmitri Plotnikov putContactValues(values); 458fb362d1a5df250a49fad06db323b0d41fe0e3757Dmitri Plotnikov Uri personUri = mResolver.insert(People.CONTENT_URI, values); 459fb362d1a5df250a49fad06db323b0d41fe0e3757Dmitri Plotnikov long personId = ContentUris.parseId(personUri); 460fb362d1a5df250a49fad06db323b0d41fe0e3757Dmitri Plotnikov 461fb362d1a5df250a49fad06db323b0d41fe0e3757Dmitri Plotnikov values.clear(); 462fb362d1a5df250a49fad06db323b0d41fe0e3757Dmitri Plotnikov values.put(Phones.PERSON_ID, personId); 463fb362d1a5df250a49fad06db323b0d41fe0e3757Dmitri Plotnikov values.put(Phones.TYPE, Phones.TYPE_CUSTOM); 464fb362d1a5df250a49fad06db323b0d41fe0e3757Dmitri Plotnikov values.put(Phones.LABEL, "Directory"); 465892a3d9ded5c64a63ae3d5d5c52c59528b466c93Dmitri Plotnikov values.put(Phones.NUMBER, "800-4664-411"); 466fb362d1a5df250a49fad06db323b0d41fe0e3757Dmitri Plotnikov values.put(Phones.ISPRIMARY, 1); 467fb362d1a5df250a49fad06db323b0d41fe0e3757Dmitri Plotnikov 468fb362d1a5df250a49fad06db323b0d41fe0e3757Dmitri Plotnikov Uri uri = mResolver.insert(Phones.CONTENT_URI, values); 469fb362d1a5df250a49fad06db323b0d41fe0e3757Dmitri Plotnikov 470892a3d9ded5c64a63ae3d5d5c52c59528b466c93Dmitri Plotnikov Uri filterUri1 = Uri.withAppendedPath(Phones.CONTENT_FILTER_URL, "18004664411"); 47142c817741879588db9014739f4dc194621e97381Dmitri Plotnikov ContentValues[] expectedValues = new ContentValues[1]; 472892a3d9ded5c64a63ae3d5d5c52c59528b466c93Dmitri Plotnikov expectedValues[0] = values; 47342c817741879588db9014739f4dc194621e97381Dmitri Plotnikov expectedValues[0].put(Phones.NUMBER_KEY, "1144664008"); 474892a3d9ded5c64a63ae3d5d5c52c59528b466c93Dmitri Plotnikov assertStoredValues(filterUri1, expectedValues); 475fb362d1a5df250a49fad06db323b0d41fe0e3757Dmitri Plotnikov 476fb362d1a5df250a49fad06db323b0d41fe0e3757Dmitri Plotnikov Uri filterUri2 = Uri.withAppendedPath(Phones.CONTENT_FILTER_URL, "7773334444"); 477fb362d1a5df250a49fad06db323b0d41fe0e3757Dmitri Plotnikov assertEquals(0, getCount(filterUri2, null, null)); 478fb362d1a5df250a49fad06db323b0d41fe0e3757Dmitri Plotnikov } 479fb362d1a5df250a49fad06db323b0d41fe0e3757Dmitri Plotnikov 480e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov public void testEmailInsert() { 481044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov assertContactMethodInsert(Contacts.KIND_EMAIL, 482044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov ContactMethods.TYPE_CUSTOM, "Some other way", "foo@acme.com", null, true); 483044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 484044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 485044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov public void testEmailUpdate() { 486044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov assertContactMethodUpdate(Contacts.KIND_EMAIL, 487044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov ContactMethods.TYPE_CUSTOM, "Some other way", "foo@acme.com", null, false, 488044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov ContactMethods.TYPE_HOME, null, "bar@acme.com", "aux", true); 489e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov } 490e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 4910126458fabecb6514bf6d368ae6a066a78856a91Dmitri Plotnikov public void testImInsertStandard() { 492044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov assertContactMethodInsert(Contacts.KIND_IM, 493044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov ContactMethods.TYPE_CUSTOM, "Some other way", "pre:3", "Bar", true); 494044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 495044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 496044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov public void testImUpdateStandard() { 497044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov assertContactMethodUpdate(Contacts.KIND_IM, 498044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov ContactMethods.TYPE_CUSTOM, "Some other way", "pre:3", "Bar", false, 499044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov ContactMethods.TYPE_WORK, null, "pre:4", "Buz", true); 5000126458fabecb6514bf6d368ae6a066a78856a91Dmitri Plotnikov } 5010126458fabecb6514bf6d368ae6a066a78856a91Dmitri Plotnikov 5020126458fabecb6514bf6d368ae6a066a78856a91Dmitri Plotnikov public void testImInsertCustom() { 503044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov assertContactMethodInsert(Contacts.KIND_IM, 504044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov ContactMethods.TYPE_CUSTOM, "Some other way", "custom:my_proto", "Bar", true); 505044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 506044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 507044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov public void testImUpdateCustom() { 508044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov assertContactMethodUpdate(Contacts.KIND_IM, 509044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov ContactMethods.TYPE_CUSTOM, "Some other way", "custom:my_proto", "Bar", false, 510044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov ContactMethods.TYPE_HOME, null, "custom:my_other_proto", "Buz", true); 511e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov } 512e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 513e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov public void testPostalInsert() { 514044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov assertContactMethodInsert(Contacts.KIND_POSTAL, 515044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov ContactMethods.TYPE_CUSTOM, "Some other way", "Foo", "Bar", true); 516044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 517044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 518044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov public void testPostalUpdate() { 519044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov assertContactMethodUpdate(Contacts.KIND_POSTAL, 520044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov ContactMethods.TYPE_CUSTOM, "Some other way", "Foo", "Bar", false, 521044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov ContactMethods.TYPE_WORK, null, "Biz", "Baz", true); 522e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov } 523e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov 524e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov private void assertContactMethodInsert(int kind, int type, String label, String data, 525e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov String auxData, boolean primary) { 526bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 527bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov putContactValues(values); 528bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov final Uri personUri = mResolver.insert(People.CONTENT_URI, values); 529bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long personId = ContentUris.parseId(personUri); 530bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 531bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 532bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.PERSON_ID, personId); 533e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov values.put(ContactMethods.KIND, kind); 534e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov values.put(ContactMethods.TYPE, type); 535e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov values.put(ContactMethods.LABEL, label); 536e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov values.put(ContactMethods.DATA, data); 537e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov values.put(ContactMethods.AUX_DATA, auxData); 538e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov values.put(ContactMethods.ISPRIMARY, primary ? 1 : 0); 539bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 540bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri uri = mResolver.insert(ContactMethods.CONTENT_URI, values); 541bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 542bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // The result is joined with People 543bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov putContactValues(values); 544bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(uri, values); 5455dec8cf5a992bac38c0e81d744fc77d748e926aaDmitri Plotnikov assertSelection(ContactMethods.CONTENT_URI, values, "contact_methods", 546d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov ContactMethods._ID, ContentUris.parseId(uri)); 547bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 548e80e514a6175ad2ee03ea6eff6201e0e47d5a710Dmitri Plotnikov // Access the contact method through People 549bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri twigUri = Uri.withAppendedPath(personUri, People.ContactMethods.CONTENT_DIRECTORY); 550bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(twigUri, values); 551bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 552bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertPersonIdConstraint(ContactMethods.CONTENT_URI, ContactMethods.TYPE, 553bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContactMethods.TYPE_WORK); 554bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 555bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertTypeAndLabelConstraints(ContactMethods.CONTENT_URI, ContactMethods.PERSON_ID, 556bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov personId, ContactMethods.TYPE, ContactMethods.TYPE_CUSTOM, 557bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContactMethods.TYPE_OTHER, ContactMethods.LABEL); 558bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 559bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 560044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov private void assertContactMethodUpdate(int kind, 561044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov int type1, String label1, String data1, String auxData1, boolean primary1, 562044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov int type2, String label2, String data2, String auxData2, boolean primary2) { 563044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov ContentValues values = new ContentValues(); 564044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov putContactValues(values); 565044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov final Uri personUri = mResolver.insert(People.CONTENT_URI, values); 566044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov long personId = ContentUris.parseId(personUri); 567044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 568044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.clear(); 569044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(ContactMethods.PERSON_ID, personId); 570044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(ContactMethods.KIND, kind); 571044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(ContactMethods.TYPE, type1); 572044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(ContactMethods.LABEL, label1); 573044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(ContactMethods.DATA, data1); 574044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(ContactMethods.AUX_DATA, auxData1); 575044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(ContactMethods.ISPRIMARY, primary1 ? 1 : 0); 576044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 577044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov Uri uri = mResolver.insert(ContactMethods.CONTENT_URI, values); 578044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 579044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.clear(); 580044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(ContactMethods.TYPE, type2); 581044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(ContactMethods.LABEL, label2); 582044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(ContactMethods.DATA, data2); 583044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(ContactMethods.AUX_DATA, auxData2); 584044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(ContactMethods.ISPRIMARY, primary2 ? 1 : 0); 585044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov mResolver.update(uri, values, null, null); 586044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 587044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov assertStoredValues(uri, values); 588044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 589044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 5900f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov public void testExtensionsInsert() { 591bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 592bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov final Uri personUri = mResolver.insert(People.CONTENT_URI, values); 593bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long personId = ContentUris.parseId(personUri); 594bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 595bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 596bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Extensions.PERSON_ID, personId); 597bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Extensions.NAME, "Foo"); 598bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Extensions.VALUE, "Bar"); 599bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 600bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri uri = mResolver.insert(Extensions.CONTENT_URI, values); 601bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(uri, values); 6025dec8cf5a992bac38c0e81d744fc77d748e926aaDmitri Plotnikov assertSelection(Extensions.CONTENT_URI, values, "extensions", 603d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov Extensions._ID, ContentUris.parseId(uri)); 604bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 605bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Access the extensions through People 606bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri twigUri = Uri.withAppendedPath(personUri, People.Extensions.CONTENT_DIRECTORY); 607bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(twigUri, values); 608bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 609bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 610044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov public void testExtensionsUpdate() { 611044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov ContentValues values = new ContentValues(); 612044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov final Uri personUri = mResolver.insert(People.CONTENT_URI, values); 613044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov long personId = ContentUris.parseId(personUri); 614044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 615044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.clear(); 616044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(Extensions.PERSON_ID, personId); 617044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(Extensions.NAME, "Foo"); 618044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(Extensions.VALUE, "Bar"); 619044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 620044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov Uri uri = mResolver.insert(Extensions.CONTENT_URI, values); 621044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 622044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.clear(); 623044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(Extensions.NAME, "Biz"); 624044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(Extensions.VALUE, "Baz"); 625044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov mResolver.update(uri, values, null, null); 626044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 627044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov assertStoredValues(uri, values); 628044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 629044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 6300f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov public void testGroupsInsert() { 631bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 632bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Groups.NAME, "Galois"); 633bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Groups.NOTES, "Abel"); 6340f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov values.put(Groups.SYSTEM_ID, "12345"); 635bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 636bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri groupUri = mResolver.insert(Groups.CONTENT_URI, values); 637bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(groupUri, values); 638bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 639bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 640044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov public void testGroupsUpdate() { 641044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov ContentValues values = new ContentValues(); 642044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(Groups.NAME, "Galois"); 643044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(Groups.NOTES, "Abel"); 644044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(Groups.SYSTEM_ID, "12345"); 645044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 646044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov Uri groupUri = mResolver.insert(Groups.CONTENT_URI, values); 647044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 648044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.clear(); 649044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(Groups.NAME, "Klein"); 650044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(Groups.NOTES, "Vierergruppe"); 651044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(Groups.SYSTEM_ID, "1234"); 652044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov mResolver.update(groupUri, values, null, null); 653044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov assertStoredValues(groupUri, values); 654044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov } 655044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 6560f8f3b3e4a6ad18c5868d0215cc137845a2ddc74Dmitri Plotnikov public void testGroupMembershipsInsert() { 657bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 658bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Groups.NOTES, "Abel"); 65971e051c79a57af70ec7b095074c3e7faf9507b52Dmitri Plotnikov Uri groupUri = insertLegacyGroup("Galois", values); 66071e051c79a57af70ec7b095074c3e7faf9507b52Dmitri Plotnikov Uri personUri = insertPerson("Klein", values); 66171e051c79a57af70ec7b095074c3e7faf9507b52Dmitri Plotnikov Uri membershipUri = insertLegacyGroupMembership(groupUri, personUri, values); 662d4b57da3f07bc530db69015d363c61a768a4713aDmitri Plotnikov values.put(Groups.NAME, "Galois"); 663d4b57da3f07bc530db69015d363c61a768a4713aDmitri Plotnikov values.put(Groups.NOTES, "Abel"); 664d4b57da3f07bc530db69015d363c61a768a4713aDmitri Plotnikov 665d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov assertStoredValues(membershipUri, values); 6665dec8cf5a992bac38c0e81d744fc77d748e926aaDmitri Plotnikov assertSelection(GroupMembership.CONTENT_URI, values, "groupmembership", 667d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov GroupMembership._ID, ContentUris.parseId(membershipUri)); 668bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 669bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri personsGroupsUri = Uri.withAppendedPath(personUri, GroupMembership.CONTENT_DIRECTORY); 670d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov assertStoredValues(personsGroupsUri, values); 671bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 672bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 673d51a83ac4f8032b62d9a23b90a8f43d6b7eb2dbbDmitri Plotnikov public void testAddToGroup() { 674bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 675bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri personUri = mResolver.insert(People.CONTENT_URI, values); 676bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long personId = ContentUris.parseId(personUri); 677bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 678bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 679bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Groups.NAME, "Galois"); 680bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri groupUri = mResolver.insert(Groups.CONTENT_URI, values); 681bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 682bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov People.addToGroup(mResolver, personId, "Galois"); 683bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 684bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 685bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(GroupMembership.GROUP_ID, ContentUris.parseId(groupUri)); 686bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(GroupMembership.PERSON_ID, personId); 687bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 688bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri personsGroupsUri = Uri.withAppendedPath(personUri, GroupMembership.CONTENT_DIRECTORY); 689bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(personsGroupsUri, values); 690bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 691bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 69271e051c79a57af70ec7b095074c3e7faf9507b52Dmitri Plotnikov public void testGroupMembersByGroupName() { 69371e051c79a57af70ec7b095074c3e7faf9507b52Dmitri Plotnikov ContentValues values = new ContentValues(); 69471e051c79a57af70ec7b095074c3e7faf9507b52Dmitri Plotnikov Uri groupUri1 = insertLegacyGroup("Galois", values); 69571e051c79a57af70ec7b095074c3e7faf9507b52Dmitri Plotnikov Uri personUri1 = insertPerson("Klein", values); 69671e051c79a57af70ec7b095074c3e7faf9507b52Dmitri Plotnikov insertLegacyGroupMembership(groupUri1, personUri1, values); 69771e051c79a57af70ec7b095074c3e7faf9507b52Dmitri Plotnikov 69871e051c79a57af70ec7b095074c3e7faf9507b52Dmitri Plotnikov Uri groupUri2 = insertLegacyGroup("Euler", values); 69971e051c79a57af70ec7b095074c3e7faf9507b52Dmitri Plotnikov Uri personUri2 = insertPerson("Lagrange", values); 70071e051c79a57af70ec7b095074c3e7faf9507b52Dmitri Plotnikov insertLegacyGroupMembership(groupUri2, personUri2, values); 70171e051c79a57af70ec7b095074c3e7faf9507b52Dmitri Plotnikov 70271e051c79a57af70ec7b095074c3e7faf9507b52Dmitri Plotnikov // NOTE: testing non-public API support 70371e051c79a57af70ec7b095074c3e7faf9507b52Dmitri Plotnikov assertStoredValue(Uri.parse("content://contacts/groups/name/Galois/members"), 70471e051c79a57af70ec7b095074c3e7faf9507b52Dmitri Plotnikov People.NAME, "Klein"); 70571e051c79a57af70ec7b095074c3e7faf9507b52Dmitri Plotnikov assertStoredValue(Uri.parse("content://contacts/groups/name/Euler/members"), 70671e051c79a57af70ec7b095074c3e7faf9507b52Dmitri Plotnikov People.NAME, "Lagrange"); 70771e051c79a57af70ec7b095074c3e7faf9507b52Dmitri Plotnikov } 70871e051c79a57af70ec7b095074c3e7faf9507b52Dmitri Plotnikov 709c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov public void testPhotoUpdate() throws Exception { 710f547fd54d7933e1c03af4a8dc10560c71c38f6b8Dave Santoro byte[] photo = loadPhotoFromResource( 711f547fd54d7933e1c03af4a8dc10560c71c38f6b8Dave Santoro com.android.providers.contacts.tests.R.drawable.earth_small, PhotoSize.ORIGINAL); 712f547fd54d7933e1c03af4a8dc10560c71c38f6b8Dave Santoro byte[] thumbnailedPhoto = loadPhotoFromResource( 713f547fd54d7933e1c03af4a8dc10560c71c38f6b8Dave Santoro com.android.providers.contacts.tests.R.drawable.earth_small, PhotoSize.THUMBNAIL); 714bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 715bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 716bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri personUri = mResolver.insert(People.CONTENT_URI, values); 717bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 718bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 719bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Photos.DATA, photo); 720c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov values.put(Photos.LOCAL_VERSION, "10"); 721c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov // FIXME this column was unavailable for update in legacy ContactsProvider 722c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov // values.put(Photos.DOWNLOAD_REQUIRED, 1); 723c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov values.put(Photos.EXISTS_ON_SERVER, 1); 724c6ad6f6c5690a28bacb9fa0f4357ea8c8a91e3baDmitri Plotnikov values.put(Photos.SYNC_ERROR, "404 does not exist"); 725bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 726bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri photoUri = Uri.withAppendedPath(personUri, Photos.CONTENT_DIRECTORY); 727bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.update(photoUri, values, null, null); 728f547fd54d7933e1c03af4a8dc10560c71c38f6b8Dave Santoro values.put(Photos.DATA, thumbnailedPhoto); 729bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(photoUri, values); 730044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 731044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov long photoId = Long.parseLong(getStoredValue(photoUri, Photos._ID)); 732044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov 733044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov values.put(Photos.LOCAL_VERSION, "11"); 734f547fd54d7933e1c03af4a8dc10560c71c38f6b8Dave Santoro values.put(Photos.DATA, photo); 735044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov Uri contentUri = ContentUris.withAppendedId(Photos.CONTENT_URI, photoId); 736044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov mResolver.update(contentUri, values, null, null); 737f547fd54d7933e1c03af4a8dc10560c71c38f6b8Dave Santoro values.put(Photos.DATA, thumbnailedPhoto); 738044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov assertStoredValues(contentUri, values); 739044685c79fb8fb6e15479d0e68d60f8630f6be43Dmitri Plotnikov assertStoredValues(photoUri, values); 740bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 741bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 742c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov /** 743c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov * Capturing the search suggestion requirements in test cases as a reference. 744c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov */ 745c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov public void testSearchSuggestionsNotInMyContacts() throws Exception { 746c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov // We don't provide compatibility for search suggestions 747038a60f1920d798bc391a376e81980921a75cc34Fred Quintana return; 748c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov } 749c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov 750c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov /** 751c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov * Capturing the search suggestion requirements in test cases as a reference. 752c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov */ 753c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov public void testSearchSuggestionsByName() throws Exception { 754c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov 755c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov // We don't provide compatibility for search suggestions 756038a60f1920d798bc391a376e81980921a75cc34Fred Quintana return; 757c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov } 758c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov 759c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov private void assertSearchSuggestion(boolean name, boolean photo, boolean organization, 760c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov boolean phone, boolean email, String query, boolean expectIcon1Uri, String expectedIcon2, 761c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov String expectedText1, String expectedText2) throws IOException { 762c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov ContentValues values = new ContentValues(); 763c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov 764c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov if (name) { 765c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov values.put(People.NAME, "Deer Dough"); 766c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov } 767c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov 768c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov final Uri personUri = mResolver.insert(People.CONTENT_URI, values); 769c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov long personId = ContentUris.parseId(personUri); 770c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov 771c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov People.addToMyContactsGroup(mResolver, personId); 772c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov 773c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov if (photo) { 774c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov values.clear(); 775c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov byte[] photoData = loadTestPhoto(); 776c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov values.put(Photos.DATA, photoData); 777c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov values.put(Photos.LOCAL_VERSION, "1"); 778c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov values.put(Photos.EXISTS_ON_SERVER, 0); 779c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov Uri photoUri = Uri.withAppendedPath(personUri, Photos.CONTENT_DIRECTORY); 780c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov mResolver.update(photoUri, values, null, null); 781c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov } 782c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov 783c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov if (organization) { 784c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov values.clear(); 785c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov values.put(Organizations.ISPRIMARY, 1); 786c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov values.put(Organizations.COMPANY, "Google"); 787c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov values.put(Organizations.TYPE, Organizations.TYPE_WORK); 788c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov values.put(Organizations.PERSON_ID, personId); 789c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov mResolver.insert(Organizations.CONTENT_URI, values); 790c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov } 791c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov 792c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov if (email) { 793c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov values.clear(); 794c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov values.put(ContactMethods.PERSON_ID, personId); 795c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov values.put(ContactMethods.KIND, Contacts.KIND_EMAIL); 796c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov values.put(ContactMethods.TYPE, ContactMethods.TYPE_HOME); 797c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov values.put(ContactMethods.DATA, "foo@acme.com"); 798c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov values.put(ContactMethods.ISPRIMARY, 1); 799c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov mResolver.insert(ContactMethods.CONTENT_URI, values); 800c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov 801c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov 802c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov String protocol = ContactMethods 803c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov .encodePredefinedImProtocol(ContactMethods.PROTOCOL_GOOGLE_TALK); 804c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov values.clear(); 805c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov values.put(Presence.IM_PROTOCOL, protocol); 806c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov values.put(Presence.IM_HANDLE, "foo@acme.com"); 807c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov values.put(Presence.IM_ACCOUNT, "foo"); 808c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov values.put(Presence.PRESENCE_STATUS, Presence.OFFLINE); 809c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov values.put(Presence.PRESENCE_CUSTOM_STATUS, "Coding for Android"); 810c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov mResolver.insert(Presence.CONTENT_URI, values); 811c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov } 812c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov 813c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov if (phone) { 814c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov values.clear(); 815c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov values.put(Phones.PERSON_ID, personId); 816c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov values.put(Phones.TYPE, Phones.TYPE_HOME); 817c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov values.put(Phones.NUMBER, "1-800-4664-411"); 818c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov values.put(Phones.ISPRIMARY, 1); 819c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov mResolver.insert(Phones.CONTENT_URI, values); 820c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov } 821c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov 822c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov Uri searchUri = new Uri.Builder().scheme("content").authority(Contacts.AUTHORITY) 823c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov .appendPath(SearchManager.SUGGEST_URI_PATH_QUERY).appendPath(query).build(); 824c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov 825c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov Cursor c = mResolver.query(searchUri, null, null, null, null); 826c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov assertEquals(1, c.getCount()); 827c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov c.moveToFirst(); 828c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov values.clear(); 829c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov 830c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov String icon1 = c.getString(c.getColumnIndex(SearchManager.SUGGEST_COLUMN_ICON_1)); 831c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov if (expectIcon1Uri) { 832c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov assertTrue(icon1.startsWith("content:")); 833c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov } else { 834c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov assertEquals(String.valueOf(com.android.internal.R.drawable.ic_contact_picture), icon1); 835c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov } 836c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov 837c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov // SearchManager does not declare a constant for _id 838c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov values.put("_id", personId); 839c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov values.put(SearchManager.SUGGEST_COLUMN_ICON_2, expectedIcon2); 840c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov values.put(SearchManager.SUGGEST_COLUMN_INTENT_DATA_ID, personId); 841c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov values.put(SearchManager.SUGGEST_COLUMN_SHORTCUT_ID, personId); 842c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov values.put(SearchManager.SUGGEST_COLUMN_TEXT_1, expectedText1); 843c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov values.put(SearchManager.SUGGEST_COLUMN_TEXT_2, expectedText2); 844c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov assertCursorValues(c, values); 845c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov c.close(); 846c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov 847c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov // Cleanup 848c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov mResolver.delete(personUri, null, null); 849c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov } 850c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov 851c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov /** 852c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov * Capturing the search suggestion requirements in test cases as a reference. 853c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov */ 854c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov public void testSearchSuggestionsByPhoneNumber() throws Exception { 855c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov // We don't provide compatibility for search suggestions 856038a60f1920d798bc391a376e81980921a75cc34Fred Quintana return; 857c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov } 858c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov 8591c8e40c18f92722b9bec6e8ce2e345a9828efa16Dmitri Plotnikov public void testSettings() throws Exception { 8601c8e40c18f92722b9bec6e8ce2e345a9828efa16Dmitri Plotnikov mActor.addAuthority(ContactsContract.AUTHORITY); 8611c8e40c18f92722b9bec6e8ce2e345a9828efa16Dmitri Plotnikov 8621c8e40c18f92722b9bec6e8ce2e345a9828efa16Dmitri Plotnikov ContentValues values = new ContentValues(); 8631c8e40c18f92722b9bec6e8ce2e345a9828efa16Dmitri Plotnikov values.put(Settings._SYNC_ACCOUNT, "foo"); 8641c8e40c18f92722b9bec6e8ce2e345a9828efa16Dmitri Plotnikov values.put(Settings._SYNC_ACCOUNT_TYPE, "bar"); 8651c8e40c18f92722b9bec6e8ce2e345a9828efa16Dmitri Plotnikov values.put(Settings.KEY, Settings.SYNC_EVERYTHING); 8661c8e40c18f92722b9bec6e8ce2e345a9828efa16Dmitri Plotnikov values.put(Settings.VALUE, 7); 8671c8e40c18f92722b9bec6e8ce2e345a9828efa16Dmitri Plotnikov mResolver.update(Settings.CONTENT_URI, values, null, null); 8681c8e40c18f92722b9bec6e8ce2e345a9828efa16Dmitri Plotnikov 8691c8e40c18f92722b9bec6e8ce2e345a9828efa16Dmitri Plotnikov assertStoredValue(Settings.CONTENT_URI, Settings._SYNC_ACCOUNT + "='foo' AND " 8701c8e40c18f92722b9bec6e8ce2e345a9828efa16Dmitri Plotnikov + Settings.KEY + "='" + Settings.SYNC_EVERYTHING + "'", null, Settings.VALUE, "7"); 8711c8e40c18f92722b9bec6e8ce2e345a9828efa16Dmitri Plotnikov 8721c8e40c18f92722b9bec6e8ce2e345a9828efa16Dmitri Plotnikov assertStoredValue(ContactsContract.Settings.CONTENT_URI, 8731c8e40c18f92722b9bec6e8ce2e345a9828efa16Dmitri Plotnikov ContactsContract.Settings.ACCOUNT_NAME + "='foo'", 8741c8e40c18f92722b9bec6e8ce2e345a9828efa16Dmitri Plotnikov null, ContactsContract.Settings.SHOULD_SYNC, "7"); 8751c8e40c18f92722b9bec6e8ce2e345a9828efa16Dmitri Plotnikov 8761c8e40c18f92722b9bec6e8ce2e345a9828efa16Dmitri Plotnikov values.clear(); 8771c8e40c18f92722b9bec6e8ce2e345a9828efa16Dmitri Plotnikov values.put(ContactsContract.Settings.SHOULD_SYNC, 8); 8781c8e40c18f92722b9bec6e8ce2e345a9828efa16Dmitri Plotnikov mResolver.update(ContactsContract.Settings.CONTENT_URI, values, 8791c8e40c18f92722b9bec6e8ce2e345a9828efa16Dmitri Plotnikov ContactsContract.Settings.ACCOUNT_NAME + "='foo'", null); 8801c8e40c18f92722b9bec6e8ce2e345a9828efa16Dmitri Plotnikov 8811c8e40c18f92722b9bec6e8ce2e345a9828efa16Dmitri Plotnikov assertStoredValue(Settings.CONTENT_URI, Settings._SYNC_ACCOUNT + "='foo' AND " 8821c8e40c18f92722b9bec6e8ce2e345a9828efa16Dmitri Plotnikov + Settings.KEY + "='" + Settings.SYNC_EVERYTHING + "'", null, Settings.VALUE, "8"); 8831c8e40c18f92722b9bec6e8ce2e345a9828efa16Dmitri Plotnikov } 8841c8e40c18f92722b9bec6e8ce2e345a9828efa16Dmitri Plotnikov 88571e051c79a57af70ec7b095074c3e7faf9507b52Dmitri Plotnikov private Uri insertPerson(String name, ContentValues values) { 88671e051c79a57af70ec7b095074c3e7faf9507b52Dmitri Plotnikov values.put(People.NAME, name); 88771e051c79a57af70ec7b095074c3e7faf9507b52Dmitri Plotnikov return mResolver.insert(People.CONTENT_URI, values); 88871e051c79a57af70ec7b095074c3e7faf9507b52Dmitri Plotnikov } 88971e051c79a57af70ec7b095074c3e7faf9507b52Dmitri Plotnikov 89071e051c79a57af70ec7b095074c3e7faf9507b52Dmitri Plotnikov private Uri insertLegacyGroup(String name, ContentValues values) { 89171e051c79a57af70ec7b095074c3e7faf9507b52Dmitri Plotnikov values.put(Groups.NAME, name); 89271e051c79a57af70ec7b095074c3e7faf9507b52Dmitri Plotnikov return mResolver.insert(Groups.CONTENT_URI, values); 89371e051c79a57af70ec7b095074c3e7faf9507b52Dmitri Plotnikov } 89471e051c79a57af70ec7b095074c3e7faf9507b52Dmitri Plotnikov 89571e051c79a57af70ec7b095074c3e7faf9507b52Dmitri Plotnikov private Uri insertLegacyGroupMembership(Uri groupUri, Uri personUri, ContentValues values) { 89671e051c79a57af70ec7b095074c3e7faf9507b52Dmitri Plotnikov long groupId = ContentUris.parseId(groupUri); 89771e051c79a57af70ec7b095074c3e7faf9507b52Dmitri Plotnikov long personId = ContentUris.parseId(personUri); 89871e051c79a57af70ec7b095074c3e7faf9507b52Dmitri Plotnikov 89971e051c79a57af70ec7b095074c3e7faf9507b52Dmitri Plotnikov values.clear(); 90071e051c79a57af70ec7b095074c3e7faf9507b52Dmitri Plotnikov values.put(GroupMembership.GROUP_ID, groupId); 90171e051c79a57af70ec7b095074c3e7faf9507b52Dmitri Plotnikov values.put(GroupMembership.PERSON_ID, personId); 90271e051c79a57af70ec7b095074c3e7faf9507b52Dmitri Plotnikov Uri membershipUri = mResolver.insert(GroupMembership.CONTENT_URI, values); 90371e051c79a57af70ec7b095074c3e7faf9507b52Dmitri Plotnikov return membershipUri; 90471e051c79a57af70ec7b095074c3e7faf9507b52Dmitri Plotnikov } 90571e051c79a57af70ec7b095074c3e7faf9507b52Dmitri Plotnikov 906bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov private void putContactValues(ContentValues values) { 907ee56e80dcab0ca58f81dc5318db8d0c453d75903Dmitri Plotnikov putContactValuesExceptName(values); 908bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.NAME, "Deer Dough"); 909ee56e80dcab0ca58f81dc5318db8d0c453d75903Dmitri Plotnikov } 910ee56e80dcab0ca58f81dc5318db8d0c453d75903Dmitri Plotnikov 911ee56e80dcab0ca58f81dc5318db8d0c453d75903Dmitri Plotnikov private void putContactValuesExceptName(ContentValues values) { 912ee56e80dcab0ca58f81dc5318db8d0c453d75903Dmitri Plotnikov // Populating only unhidden columns 913bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.NOTES, "Cash Cow"); 914bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.TIMES_CONTACTED, 3); 915bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.LAST_TIME_CONTACTED, 10); 916bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.CUSTOM_RINGTONE, "ringtone"); 917bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.SEND_TO_VOICEMAIL, 1); 918bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.STARRED, 1); 919bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 920bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 92167b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov private void putContactValues2(ContentValues values) { 92267b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov // Populating only unhidden columns 92367b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov values.put(People.NAME, "John Doe"); 92467b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov values.put(People.PHONETIC_NAME, "jon dawe"); 92567b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov values.put(People.NOTES, "Poor Johnny"); 92667b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov values.put(People.TIMES_CONTACTED, 4); 92767b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov values.put(People.LAST_TIME_CONTACTED, 11); 92867b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov values.put(People.CUSTOM_RINGTONE, "rangtone"); 92967b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov values.put(People.SEND_TO_VOICEMAIL, 0); 93067b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov values.put(People.STARRED, 0); 93167b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov } 93267b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov 933bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov private void assertFilteredContacts(String filter, String... expectedNames) { 934bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri filterUri = Uri.withAppendedPath(People.CONTENT_FILTER_URI, filter); 935bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Cursor c = mResolver.query(filterUri, null, null, null, null); 936bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov try { 937bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertEquals("Record count", expectedNames.length, c.getCount()); 938bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov int column = c.getColumnIndex(People.NAME); 939bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov for (int i = 0; i < expectedNames.length; i++) { 940bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov c.moveToNext(); 941bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertEquals(expectedNames[i], c.getString(column)); 942bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 943bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } finally { 944bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov c.close(); 945bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 946bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 947bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 948bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov private void assertPersonIdConstraint(Uri uri, String typeColumn, int defaultType) { 949bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 950bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(typeColumn, defaultType); 951bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov try { 952bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.insert(uri, values); 953bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov fail("Inserted row without person ID"); 954bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } catch (Exception e) { 955bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Exception expected 956bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 957bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 958bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 959bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov private void assertTypeAndLabelConstraints(Uri uri, String personIdColumn, long personId, 960bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov String typeColumn, int defaultType, int otherType, String labelColumn) { 961bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 962bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(personIdColumn, personId); 963bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(labelColumn, "Foo"); 964622e0a2f00b3de248926ec9e89b11a6425919819Jeff Sharkey 965bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov try { 966bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.insert(uri, values); 967622e0a2f00b3de248926ec9e89b11a6425919819Jeff Sharkey fail("Inserted row with label without defining type"); 968bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } catch (Exception e) { 969bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Exception expected 970bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 971bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 972bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 9735dec8cf5a992bac38c0e81d744fc77d748e926aaDmitri Plotnikov protected void assertSelection(Uri uri, ContentValues values, String legacyTable, 9745dec8cf5a992bac38c0e81d744fc77d748e926aaDmitri Plotnikov String idColumn, long id) { 97567b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov values.put(idColumn, id); 97667b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov String qualified = legacyTable + "." + idColumn; 97767b73a3e6bc186aa83915275bde6eeeeea5e97cfDmitri Plotnikov super.assertSelection(uri, values, qualified, id); 978c70dc0e38ff82c6e6d6b7458637c54fbdf446aacDmitri Plotnikov } 979bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov} 980