LegacyContactsProviderTest.java revision 3cebbf7141252768d3e272e049e9c5b0cb9d710e
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 Plotnikovimport java.util.Map; 41bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikovimport java.util.Set; 42bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 43bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov/** 44bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov * Tests for legacy contacts APIs. 45bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov */ 46bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov@LargeTest 47bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikovpublic class LegacyContactsProviderTest extends BaseContactsProvider2Test { 48bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 49f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov private static final boolean USE_LEGACY_PROVIDER = false; 50f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov 51bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov @Override 52bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov protected Class<? extends ContentProvider> getProviderClass() { 53f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov return USE_LEGACY_PROVIDER ? ContactsProvider.class : SynchronousContactsProvider2.class; 54bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 55bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 56bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov @Override 57bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov protected String getAuthority() { 58bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov return Contacts.AUTHORITY; 59bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 60bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 61bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov public void testPeopleInsert() { 62bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 63bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov putContactValues(values); 64bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 65bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri uri = mResolver.insert(People.CONTENT_URI, values); 66bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(uri, values); 67bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 68bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 69f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov // TODO fix and reenable the test 70f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov public void __testPeopleDelete() { 71bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 72bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.NAME, "John Doe"); 73bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri personId = mResolver.insert(People.CONTENT_URI, values); 74bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.delete(personId, null, null); 75bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 76bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Cursor c = mResolver.query(personId, null, People.NAME + "='John Doe'" , null, null); 77bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertEquals("Record count after deletion", 0, c.getCount()); 78bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov c.close(); 79bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 80bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov try { 81bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.query(People.DELETED_CONTENT_URI, null, null, null, null); 82bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } catch (UnsupportedOperationException e) { 83bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Expected exception 84bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 85bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 86bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 87f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov // TODO fix and reenable the test 88f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov public void __testPeopleFilter() { 89bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 90bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.NAME, "Deer Doe"); 91bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.insert(People.CONTENT_URI, values); 92bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 93bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 94bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.NAME, "Dear Dough"); 95bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.insert(People.CONTENT_URI, values); 96bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 97bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 98bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.NAME, "D.R. Dauwe"); 99bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.insert(People.CONTENT_URI, values); 100bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 101bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertFilteredContacts("d", "Deer Doe", "Dear Dough", "D.R. Dauwe"); 102bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertFilteredContacts("de", "Deer Doe", "Dear Dough"); 103bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertFilteredContacts("dee", "Deer Doe"); 104bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertFilteredContacts("der"); 105bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 106bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 107f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov // TODO fix and reenable the test 108f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov public void __testDefaultDisplayName() { 109bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 110bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.NAME, "John Doe"); 111bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri personUri = mResolver.insert(People.CONTENT_URI, values); 112bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(personUri, People.DISPLAY_NAME, "John Doe"); 113bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 114bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 1153cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov public void testPrimaryOrganization() { 116bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 117bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov final Uri personUri = mResolver.insert(People.CONTENT_URI, values); 118bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long personId = ContentUris.parseId(personUri); 119bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 120bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Primary 121bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 122bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Organizations.ISPRIMARY, 1); 123bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Organizations.COMPANY, "Google"); 124bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Organizations.TYPE, Organizations.TYPE_WORK); 125bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Organizations.PERSON_ID, personId); 126bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri orgUri1 = mResolver.insert(Organizations.CONTENT_URI, values); 127bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 128bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Non-primary 129bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 130bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Organizations.COMPANY, "Acme"); 131bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Organizations.TYPE, Organizations.TYPE_WORK); 132bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Organizations.PERSON_ID, personId); 133bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri orgUri2 = mResolver.insert(Organizations.CONTENT_URI, values); 134bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 135bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 136bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.PRIMARY_ORGANIZATION_ID, ContentUris.parseId(orgUri1)); 137bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.DISPLAY_NAME, "Google"); 138bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(personUri, values); 139bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 140bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Remove the original primary organization 141bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.delete(orgUri1, null, null); 142bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 143bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 144bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.PRIMARY_ORGANIZATION_ID, ContentUris.parseId(orgUri2)); 145bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.DISPLAY_NAME, "Acme"); 146bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(personUri, values); 147bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 148bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Remove the remaining organization 149bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.delete(orgUri2, null, null); 150bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 151bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 152bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.putNull(People.PRIMARY_ORGANIZATION_ID); 153bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.putNull(People.DISPLAY_NAME); 154bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(personUri, values); 155bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 156bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 157f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov // TODO fix and reenable the test 158f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov public void __testPrimaryPhone() { 159bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 160bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri personUri = mResolver.insert(People.CONTENT_URI, values); 161bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long personId = ContentUris.parseId(personUri); 162bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 163bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Primary 164bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 165bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Phones.ISPRIMARY, 1); 166bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Phones.TYPE, Phones.TYPE_WORK); 167bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Phones.PERSON_ID, personId); 168bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Phones.NUMBER, "12345"); 169bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri phoneUri1 = mResolver.insert(Phones.CONTENT_URI, values); 170bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 171bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Non-primary 172bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 173bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Phones.TYPE, Phones.TYPE_WORK); 174bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Phones.PERSON_ID, personId); 175bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Phones.NUMBER, "67890"); 176bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri phoneUri2 = mResolver.insert(Phones.CONTENT_URI, values); 177bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 178bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 179bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.PRIMARY_PHONE_ID, ContentUris.parseId(phoneUri1)); 180bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.DISPLAY_NAME, "12345"); 181bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(personUri, values); 182bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 183bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Remove the primary phone number 184bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.delete(phoneUri1, null, null); 185bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 186bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 187bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.PRIMARY_PHONE_ID, ContentUris.parseId(phoneUri2)); 188bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.DISPLAY_NAME, "67890"); 189bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(personUri, values); 190bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 191bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Remove the remaining phone number 192bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.delete(phoneUri2, null, null); 193bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 194bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 195bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.putNull(People.PRIMARY_PHONE_ID); 196bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.putNull(People.DISPLAY_NAME); 197bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(personUri, values); 198bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 199bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 200f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov // TODO fix and reenable the test 201f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov public void __testPrimaryEmail() { 202bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 203bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri personUri = mResolver.insert(People.CONTENT_URI, values); 204bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long personId = ContentUris.parseId(personUri); 205bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 206bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Primary 207bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 208bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.PERSON_ID, personId); 209bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.KIND, Contacts.KIND_EMAIL); 210bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.TYPE, ContactMethods.TYPE_HOME); 211bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.DATA, "foo@acme.com"); 212bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.ISPRIMARY, 1); 213bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri emailUri1 = mResolver.insert(ContactMethods.CONTENT_URI, values); 214bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 215bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Non-primary 216bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 217bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.PERSON_ID, personId); 218bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.KIND, Contacts.KIND_EMAIL); 219bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.TYPE, ContactMethods.TYPE_WORK); 220bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.DATA, "bar@acme.com"); 221bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri emailUri2 = mResolver.insert(ContactMethods.CONTENT_URI, values); 222bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 223bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 224bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.PRIMARY_EMAIL_ID, ContentUris.parseId(emailUri1)); 225bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.DISPLAY_NAME, "foo@acme.com"); 226bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(personUri, values); 227bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 228bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Remove the primary email 229bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.delete(emailUri1, null, null); 230bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 231bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 232bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.PRIMARY_EMAIL_ID, ContentUris.parseId(emailUri2)); 233bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.DISPLAY_NAME, "bar@acme.com"); 234bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(personUri, values); 235bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 236bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Remove the remaining email 237bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.delete(emailUri2, null, null); 238bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 239bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 240bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.putNull(People.PRIMARY_EMAIL_ID); 241bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.putNull(People.DISPLAY_NAME); 242bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(personUri, values); 243bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 244bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 245bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov public void testMarkAsContacted() { 246bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 247bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri personUri = mResolver.insert(People.CONTENT_URI, values); 248bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long personId = ContentUris.parseId(personUri); 249bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 250bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov int timesContactedBefore = 251bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Integer.parseInt(getStoredValue(personUri, People.TIMES_CONTACTED)); 252bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long timeBefore = System.currentTimeMillis(); 253bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov People.markAsContacted(mResolver, personId); 254bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long timeAfter = System.currentTimeMillis(); 255bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 256bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long lastContacted = Long.parseLong(getStoredValue(personUri, People.LAST_TIME_CONTACTED)); 257bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov int timesContactedAfter = 258bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Integer.parseInt(getStoredValue(personUri, People.TIMES_CONTACTED)); 259bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 260bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertTrue(lastContacted >= timeBefore); 261bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertTrue(lastContacted <= timeAfter); 262bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertEquals(timesContactedAfter, timesContactedBefore + 1); 263bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 264bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 2653cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov public void testOrganizationsInsert() { 266bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 267bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri personUri = mResolver.insert(People.CONTENT_URI, values); 268bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long personId = ContentUris.parseId(personUri); 269bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 270bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 271bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Organizations.COMPANY, "Sierra"); 272bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Organizations.PERSON_ID, personId); 273bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Organizations.TYPE, Organizations.TYPE_CUSTOM); 274bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Organizations.LABEL, "Club"); 275bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Organizations.TITLE, "Member"); 276bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Organizations.ISPRIMARY, 1); 277bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 278bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri uri = mResolver.insert(Organizations.CONTENT_URI, values); 279bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(uri, values); 280bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 281bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertPersonIdConstraint(Organizations.CONTENT_URI, Organizations.TYPE, 282bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Organizations.TYPE_WORK); 283bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 284bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertTypeAndLabelConstraints(Organizations.CONTENT_URI, Organizations.PERSON_ID, personId, 285bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Organizations.TYPE, Organizations.TYPE_CUSTOM, Organizations.TYPE_OTHER, 286bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Organizations.LABEL); 287bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 288bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 289f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov // TODO fix and reenable the test 290f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov public void __testPhonesInsert() { 291bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 292bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov putContactValues(values); 293bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri personUri = mResolver.insert(People.CONTENT_URI, values); 294bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long personId = ContentUris.parseId(personUri); 295bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 296bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 297bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Phones.PERSON_ID, personId); 298bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Phones.TYPE, Phones.TYPE_CUSTOM); 299bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Phones.LABEL, "Directory"); 300bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Phones.NUMBER, "1-800-4664-411"); 301bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Phones.ISPRIMARY, 1); 302bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 303bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri uri = mResolver.insert(Phones.CONTENT_URI, values); 304bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 305bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Adding another value to assert 306bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Phones.NUMBER_KEY, "11446640081"); 307bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 308bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // The result is joined with People 309bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov putContactValues(values); 310bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(uri, values); 311bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 312bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Access the phone through People 313bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri twigUri = Uri.withAppendedPath(personUri, People.Phones.CONTENT_DIRECTORY); 314bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(twigUri, values); 315bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 316bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Now the person should be joined with Phone 317bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 318bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov putContactValues(values); 319bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.TYPE, Phones.TYPE_CUSTOM); 320bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.LABEL, "Directory"); 321bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.NUMBER, "1-800-4664-411"); 322bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(personUri, values); 323bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 324bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertPersonIdConstraint(Phones.CONTENT_URI, Phones.TYPE, Phones.TYPE_WORK); 325bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 326bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertTypeAndLabelConstraints(Phones.CONTENT_URI, Phones.PERSON_ID, personId, Phones.TYPE, 327bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Phones.TYPE_CUSTOM, Phones.TYPE_OTHER, Phones.LABEL); 328bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 329bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 330f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov // TODO fix and reenable the test 331f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov public void __testContactMethodsInsert() { 332bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 333bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov putContactValues(values); 334bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov final Uri personUri = mResolver.insert(People.CONTENT_URI, values); 335bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long personId = ContentUris.parseId(personUri); 336bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 337bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 338bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.PERSON_ID, personId); 339bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.KIND, Contacts.KIND_POSTAL); 340bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.TYPE, ContactMethods.TYPE_CUSTOM); 341bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.LABEL, "Some other way"); 342bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.DATA, "Foo"); 343bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.AUX_DATA, "Bar"); 344bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.ISPRIMARY, 1); 345bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 346bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri uri = mResolver.insert(ContactMethods.CONTENT_URI, values); 347bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 348bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // The result is joined with People 349bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov putContactValues(values); 350bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(uri, values); 351bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 352bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Access the email through People 353bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri twigUri = Uri.withAppendedPath(personUri, People.ContactMethods.CONTENT_DIRECTORY); 354bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(twigUri, values); 355bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 356bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertPersonIdConstraint(ContactMethods.CONTENT_URI, ContactMethods.TYPE, 357bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContactMethods.TYPE_WORK); 358bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 359bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertTypeAndLabelConstraints(ContactMethods.CONTENT_URI, ContactMethods.PERSON_ID, 360bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov personId, ContactMethods.TYPE, ContactMethods.TYPE_CUSTOM, 361bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContactMethods.TYPE_OTHER, ContactMethods.LABEL); 362bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 363bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 364f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov // TODO fix and reenable the test 365f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov public void __testExtensionsInsert() { 366bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 367bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov final Uri personUri = mResolver.insert(People.CONTENT_URI, values); 368bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long personId = ContentUris.parseId(personUri); 369bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 370bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 371bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Extensions.PERSON_ID, personId); 372bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Extensions.NAME, "Foo"); 373bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Extensions.VALUE, "Bar"); 374bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 375bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri uri = mResolver.insert(Extensions.CONTENT_URI, values); 376bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(uri, values); 377bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 378bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Access the extensions through People 379bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri twigUri = Uri.withAppendedPath(personUri, People.Extensions.CONTENT_DIRECTORY); 380bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(twigUri, values); 381bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 382bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 383f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov // TODO fix and reenable the test 384f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov public void __testGroupsInsert() { 385bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 386bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Groups.NAME, "Galois"); 387bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Groups.NOTES, "Abel"); 388bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 389bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri groupUri = mResolver.insert(Groups.CONTENT_URI, values); 390bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(groupUri, values); 391bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 392bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 393f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov // TODO fix and reenable the test 394f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov public void __testGroupMembershipsInsert() { 395bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 396bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Groups.NAME, "Galois"); 397bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Groups.NOTES, "Abel"); 398bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri groupUri = mResolver.insert(Groups.CONTENT_URI, values); 399bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 400bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 401bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.NAME, "Klein"); 402bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri personUri = mResolver.insert(People.CONTENT_URI, values); 403bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 404bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long groupId = ContentUris.parseId(groupUri); 405bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long personId = ContentUris.parseId(personUri); 406bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 407bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values1 = new ContentValues(); 408bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values1.put(GroupMembership.GROUP_ID, groupId); 409bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values1.put(GroupMembership.PERSON_ID, personId); 410bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri membershipUri = mResolver.insert(GroupMembership.CONTENT_URI, values1); 411bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(membershipUri, values1); 412bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 413bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri personsGroupsUri = Uri.withAppendedPath(personUri, GroupMembership.CONTENT_DIRECTORY); 414bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(personsGroupsUri, values1); 415bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 416bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 417f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov // TODO fix and reenable the test 418f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov public void __testAddToGroup() { 419bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 420bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri personUri = mResolver.insert(People.CONTENT_URI, values); 421bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long personId = ContentUris.parseId(personUri); 422bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 423bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 424bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Groups.NAME, "Galois"); 425bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri groupUri = mResolver.insert(Groups.CONTENT_URI, values); 426bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 427bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov People.addToGroup(mResolver, personId, "Galois"); 428bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 429bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 430bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(GroupMembership.GROUP_ID, ContentUris.parseId(groupUri)); 431bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(GroupMembership.PERSON_ID, personId); 432bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 433bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri personsGroupsUri = Uri.withAppendedPath(personUri, GroupMembership.CONTENT_DIRECTORY); 434bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(personsGroupsUri, values); 435bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 436bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 437f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov // TODO fix and reenable the test 438f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov public void __testPresenceInsertMatchOnHandle() { 439bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 440bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov putContactValues(values); 441bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri personUri = mResolver.insert(People.CONTENT_URI, values); 442bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long personId = ContentUris.parseId(personUri); 443bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 444bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov String encodedProtocol = 445bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContactMethods.encodePredefinedImProtocol(ContactMethods.PROTOCOL_GOOGLE_TALK); 446bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 447bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 448bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.PERSON_ID, personId); 449bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.KIND, Contacts.KIND_IM); 450bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.TYPE, ContactMethods.TYPE_HOME); 451bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.DATA, "Android"); 452bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.AUX_DATA, encodedProtocol); 453bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.insert(ContactMethods.CONTENT_URI, values); 454bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 455bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 456bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Presence.IM_PROTOCOL, encodedProtocol); 457bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Presence.IM_HANDLE, "Android"); 458bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Presence.IM_ACCOUNT, "foo"); 459bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 460bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri presenceUri = mResolver.insert(Presence.CONTENT_URI, values); 461bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 462bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Presence.PERSON_ID, personId); 463bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 464bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Presence is joined with People 465bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov putContactValues(values); 466bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(presenceUri, values); 467bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 468bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 469f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov // TODO fix and reenable the test 470f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov public void __testPresenceInsertMatchOnEmail() { 471bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 472bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov putContactValues(values); 473bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri personUri = mResolver.insert(People.CONTENT_URI, values); 474bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov long personId = ContentUris.parseId(personUri); 475bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 476bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov String protocol = 477bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContactMethods.encodePredefinedImProtocol(ContactMethods.PROTOCOL_GOOGLE_TALK); 478bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 479bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 480bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.PERSON_ID, personId); 481bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.KIND, Contacts.KIND_EMAIL); 482bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.TYPE, ContactMethods.TYPE_HOME); 483bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(ContactMethods.DATA, "Android@android.com"); 484bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.insert(ContactMethods.CONTENT_URI, values); 485bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 486bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 487bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Presence.IM_PROTOCOL, protocol); 488bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Presence.IM_HANDLE, "Android@android.com"); 489bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Presence.IM_ACCOUNT, "foo"); 490bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Presence.PRESENCE_STATUS, Presence.OFFLINE); 491bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Presence.PRESENCE_CUSTOM_STATUS, "Coding for Android"); 492bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 493bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri presenceUri = mResolver.insert(Presence.CONTENT_URI, values); 494bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 495bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Presence.PERSON_ID, personId); 496bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(presenceUri, values); 497bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 498bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Now the person should be joined with Presence 499bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 500bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov putContactValues(values); 501bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.IM_PROTOCOL, protocol); 502bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.IM_HANDLE, "Android@android.com"); 503bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.IM_ACCOUNT, "foo"); 504bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.PRESENCE_STATUS, Presence.OFFLINE); 505bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.PRESENCE_CUSTOM_STATUS, "Coding for Android"); 506bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(personUri, values); 507bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 508bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 509f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov // TODO fix and reenable the test 510f4e1358f1c8f5fe5e9e7689e36e04c57c2385169Dmitri Plotnikov public void __testPhotoUpdate() throws Exception { 511bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov byte[] photo = loadTestPhoto(); 512bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 513bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 514bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri personUri = mResolver.insert(People.CONTENT_URI, values); 515bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 516bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 517bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(Photos.DATA, photo); 518bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 519bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri photoUri = Uri.withAppendedPath(personUri, Photos.CONTENT_DIRECTORY); 520bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.update(photoUri, values, null, null); 521bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertStoredValues(photoUri, values); 522bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 523bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 524bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov private void putContactValues(ContentValues values) { 525bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Populating only unhidden columns 526bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.NAME, "Deer Dough"); 527bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.PHONETIC_NAME, "Dear Doe"); 528bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.NOTES, "Cash Cow"); 529bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.TIMES_CONTACTED, 3); 530bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.LAST_TIME_CONTACTED, 10); 531bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.CUSTOM_RINGTONE, "ringtone"); 532bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.SEND_TO_VOICEMAIL, 1); 533bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(People.STARRED, 1); 534bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 535bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 536bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov private byte[] loadTestPhoto() throws IOException { 537bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov final Resources resources = getContext().getResources(); 538bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov InputStream is = 539bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov resources.openRawResource(com.android.internal.R.drawable.ic_contact_picture); 540bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ByteArrayOutputStream os = new ByteArrayOutputStream(); 541bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov byte[] buffer = new byte[1000]; 542bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov int count; 543bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov while((count = is.read(buffer)) != -1) { 544bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov os.write(buffer, 0, count); 545bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 546bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov return os.toByteArray(); 547bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 548bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 549bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov private void assertFilteredContacts(String filter, String... expectedNames) { 550bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Uri filterUri = Uri.withAppendedPath(People.CONTENT_FILTER_URI, filter); 551bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Cursor c = mResolver.query(filterUri, null, null, null, null); 552bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov try { 553bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertEquals("Record count", expectedNames.length, c.getCount()); 554bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov int column = c.getColumnIndex(People.NAME); 555bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov for (int i = 0; i < expectedNames.length; i++) { 556bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov c.moveToNext(); 557bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertEquals(expectedNames[i], c.getString(column)); 558bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 559bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } finally { 560bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov c.close(); 561bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 562bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 563bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 564bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov private void assertPersonIdConstraint(Uri uri, String typeColumn, int defaultType) { 565bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 566bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(typeColumn, defaultType); 567bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov try { 568bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.insert(uri, values); 569bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov fail("Inserted row without person ID"); 570bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } catch (Exception e) { 571bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Exception expected 572bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 573bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 574bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 575bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov private void assertTypeAndLabelConstraints(Uri uri, String personIdColumn, long personId, 576bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov String typeColumn, int defaultType, int otherType, String labelColumn) { 577bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ContentValues values = new ContentValues(); 578bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(personIdColumn, personId); 579bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(typeColumn, defaultType); 580bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov try { 581bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.insert(uri, values); 582bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov fail("Inserted row with custom type but without label"); 583bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } catch (Exception e) { 584bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Exception expected 585bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 586bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 587bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 588bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(personIdColumn, personId); 589bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov try { 590bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.insert(uri, values); 591bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov fail("Inserted row without either type or label"); 592bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } catch (Exception e) { 593bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Exception expected 594bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 595bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 596bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.clear(); 597bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(personIdColumn, personId); 598bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(typeColumn, otherType); 599bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov values.put(labelColumn, "Foo"); 600bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov try { 601bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov mResolver.insert(uri, values); 6023cebbf7141252768d3e272e049e9c5b0cb9d710eDmitri Plotnikov fail("Inserted row with both type and label"); 603bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } catch (Exception e) { 604bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // Exception expected 605bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 606bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 607bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 608bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov private void assertStoredValues(Uri rowUri, String column, String expectedValue) { 609bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov String value = getStoredValue(rowUri, column); 610bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertEquals("Column value " + column, expectedValue, value); 611bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 612bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 613bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov private String getStoredValue(Uri rowUri, String column) { 614bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov String value; 615bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Cursor c = mResolver.query(rowUri, new String[] { column }, null, null, null); 616bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov try { 617bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov c.moveToFirst(); 618bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov value = c.getString(c.getColumnIndex(column)); 619bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } finally { 620bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov c.close(); 621bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 622bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov return value; 623bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 624bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 625bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov private void assertStoredValues(Uri rowUri, ContentValues expectedValues) { 626bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Cursor c = mResolver.query(rowUri, null, null, null, null); 627bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov try { 628bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertEquals("Record count", 1, c.getCount()); 629bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov c.moveToFirst(); 630bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertCursorValues(c, expectedValues); 631bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } finally { 632bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov c.close(); 633bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 634bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 635bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov 636bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov private void assertCursorValues(Cursor cursor, ContentValues expectedValues) { 637bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Set<Map.Entry<String, Object>> entries = expectedValues.valueSet(); 638bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov for (Map.Entry<String, Object> entry : entries) { 639bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov String column = entry.getKey(); 640bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov int index = cursor.getColumnIndex(column); 641bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertTrue("No such column: " + column, index != -1); 642bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov Object expectedValue = expectedValues.get(column); 643bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov String value; 644bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov if (expectedValue instanceof byte[]) { 645bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov expectedValue = Hex.encodeHex((byte[])expectedValue, false); 646bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov value = Hex.encodeHex(cursor.getBlob(index), false); 647bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } else { 648bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov expectedValue = expectedValues.getAsString(column); 649bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov value = cursor.getString(index); 650bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 651bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov assertEquals("Column value " + column, expectedValue, value); 652bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 653bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov } 654bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov} 655