GroupsTest.java revision 47fd3881dfd2a21de29e917b6114974ff0a67b1b
1ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey/* 2ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey * Copyright (C) 2009 The Android Open Source Project 3ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey * 4ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey * Licensed under the Apache License, Version 2.0 (the "License"); 5ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey * you may not use this file except in compliance with the License. 6ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey * You may obtain a copy of the License at 7ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey * 8ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey * http://www.apache.org/licenses/LICENSE-2.0 9ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey * 10ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey * Unless required by applicable law or agreed to in writing, software 11ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey * distributed under the License is distributed on an "AS IS" BASIS, 12ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey * See the License for the specific language governing permissions and 14ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey * limitations under the License. 15ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey */ 16ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey 1728f8857b1b46bde18b85c6d3c2a63ac44c3c2e1cEvan Millarpackage com.android.providers.contacts; 18ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey 191a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkeyimport com.google.android.collect.Lists; 201a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey 215aec18c7ba70a011ffff949cfa3faaffce0a79c7Jeff Sharkeyimport android.accounts.Account; 221a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkeyimport android.content.ContentProviderOperation; 236cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikovimport android.content.ContentUris; 246cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikovimport android.content.ContentValues; 251a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkeyimport android.content.OperationApplicationException; 26ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkeyimport android.database.Cursor; 276cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikovimport android.net.Uri; 281a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkeyimport android.os.RemoteException; 291a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkeyimport android.provider.ContactsContract; 301a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkeyimport android.provider.ContactsContract.AggregationExceptions; 315aec18c7ba70a011ffff949cfa3faaffce0a79c7Jeff Sharkeyimport android.provider.ContactsContract.Contacts; 32ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkeyimport android.provider.ContactsContract.Groups; 331a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkeyimport android.provider.ContactsContract.Settings; 34ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkeyimport android.provider.ContactsContract.CommonDataKinds.GroupMembership; 35ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkeyimport android.test.suitebuilder.annotation.LargeTest; 368920a04b4a68ed6b548bcdef5ca8736dcf8b69b1Omari Stephensimport android.test.suitebuilder.annotation.MediumTest; 37ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey 381a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkeyimport java.util.ArrayList; 391a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey 40ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey/** 41ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey * Unit tests for {@link Groups} and {@link GroupMembership}. 42ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey * 43ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey * Run the test like this: 44ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey * <code> 458920a04b4a68ed6b548bcdef5ca8736dcf8b69b1Omari Stephens * adb shell am instrument -e class com.android.providers.contacts.GroupsTest -w \ 4628f8857b1b46bde18b85c6d3c2a63ac44c3c2e1cEvan Millar * com.android.providers.contacts.tests/android.test.InstrumentationTestRunner 47ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey * </code> 48ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey */ 49bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikovpublic class GroupsTest extends BaseContactsProvider2Test { 50ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey 51ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey private static final String GROUP_GREY = "Grey"; 52ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey private static final String GROUP_RED = "Red"; 53ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey private static final String GROUP_GREEN = "Green"; 54ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey private static final String GROUP_BLUE = "Blue"; 55ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey 56ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey private static final String PERSON_ALPHA = "Alpha"; 57ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey private static final String PERSON_BRAVO = "Bravo"; 58ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey private static final String PERSON_CHARLIE = "Charlie"; 59ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey private static final String PERSON_DELTA = "Delta"; 60ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey 61ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey private static final String PHONE_ALPHA = "555-1111"; 62ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey private static final String PHONE_BRAVO_1 = "555-2222"; 63ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey private static final String PHONE_BRAVO_2 = "555-3333"; 64ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey private static final String PHONE_CHARLIE_1 = "555-4444"; 65ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey private static final String PHONE_CHARLIE_2 = "555-5555"; 66ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey 678920a04b4a68ed6b548bcdef5ca8736dcf8b69b1Omari Stephens @LargeTest 68ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey public void testGroupSummary() { 69ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey 70ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey // Clear any existing data before starting 71bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov // TODO make the provider wipe data automatically 72bee1a6b2e7cbea778195890e442c9e50f2a4e6d9Dmitri Plotnikov ((SynchronousContactsProvider2)mActor.provider).wipeData(); 73ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey 74ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey // Create a handful of groups 75ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey long groupGrey = mActor.createGroup(GROUP_GREY); 76ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey long groupRed = mActor.createGroup(GROUP_RED); 77ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey long groupGreen = mActor.createGroup(GROUP_GREEN); 78ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey long groupBlue = mActor.createGroup(GROUP_BLUE); 79ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey 80ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey // Create a handful of contacts 8147fd3881dfd2a21de29e917b6114974ff0a67b1bDmitri Plotnikov long contactAlpha = mActor.createRawContact(false, PERSON_ALPHA); 8247fd3881dfd2a21de29e917b6114974ff0a67b1bDmitri Plotnikov long contactBravo = mActor.createRawContact(false, PERSON_BRAVO); 8347fd3881dfd2a21de29e917b6114974ff0a67b1bDmitri Plotnikov long contactCharlie = mActor.createRawContact(false, PERSON_CHARLIE); 8447fd3881dfd2a21de29e917b6114974ff0a67b1bDmitri Plotnikov long contactCharlieDupe = mActor.createRawContact(false, PERSON_CHARLIE); 8547fd3881dfd2a21de29e917b6114974ff0a67b1bDmitri Plotnikov setAggregationException( 8647fd3881dfd2a21de29e917b6114974ff0a67b1bDmitri Plotnikov AggregationExceptions.TYPE_KEEP_TOGETHER, contactCharlie, contactCharlieDupe); 8747fd3881dfd2a21de29e917b6114974ff0a67b1bDmitri Plotnikov long contactDelta = mActor.createRawContact(false, PERSON_DELTA); 88ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey 896bc46c9f22aaa9e68f344b171426fc686d3b536aDmitri Plotnikov assertAggregated(contactCharlie, contactCharlieDupe); 90ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey 91ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey // Add phone numbers to specific contacts 92ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey mActor.createPhone(contactAlpha, PHONE_ALPHA); 93ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey mActor.createPhone(contactBravo, PHONE_BRAVO_1); 94ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey mActor.createPhone(contactBravo, PHONE_BRAVO_2); 95ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey mActor.createPhone(contactCharlie, PHONE_CHARLIE_1); 96ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey mActor.createPhone(contactCharlieDupe, PHONE_CHARLIE_2); 97ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey 98ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey // Add contacts to various mixture of groups. Grey will have all 99ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey // contacts, Red only with phone numbers, Green with no phones, and Blue 100ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey // with no contacts at all. 101ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey mActor.createGroupMembership(contactAlpha, groupGrey); 102ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey mActor.createGroupMembership(contactBravo, groupGrey); 103ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey mActor.createGroupMembership(contactCharlie, groupGrey); 104ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey mActor.createGroupMembership(contactDelta, groupGrey); 105ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey 106ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey mActor.createGroupMembership(contactAlpha, groupRed); 107ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey mActor.createGroupMembership(contactBravo, groupRed); 108ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey mActor.createGroupMembership(contactCharlie, groupRed); 109ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey 110ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey mActor.createGroupMembership(contactDelta, groupGreen); 111ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey 112ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey // Walk across groups summary cursor and verify returned counts. 113ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey final Cursor cursor = mActor.resolver.query(Groups.CONTENT_SUMMARY_URI, 114ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey Projections.PROJ_SUMMARY, null, null, null); 115ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey 116ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey // Require that each group has a summary row 117ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey assertTrue("Didn't return summary for all groups", (cursor.getCount() == 4)); 118ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey 119ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey while (cursor.moveToNext()) { 120ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey final long groupId = cursor.getLong(Projections.COL_ID); 121ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey final int summaryCount = cursor.getInt(Projections.COL_SUMMARY_COUNT); 122ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey final int summaryWithPhones = cursor.getInt(Projections.COL_SUMMARY_WITH_PHONES); 123ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey 124ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey if (groupId == groupGrey) { 125ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey // Grey should have four aggregates, three with phones. 1266bc46c9f22aaa9e68f344b171426fc686d3b536aDmitri Plotnikov assertEquals("Incorrect Grey count", 4, summaryCount); 1276bc46c9f22aaa9e68f344b171426fc686d3b536aDmitri Plotnikov assertEquals("Incorrect Grey with phones count", 3, summaryWithPhones); 128ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey } else if (groupId == groupRed) { 129ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey // Red should have 3 aggregates, all with phones. 1306bc46c9f22aaa9e68f344b171426fc686d3b536aDmitri Plotnikov assertEquals("Incorrect Red count", 3, summaryCount); 1316bc46c9f22aaa9e68f344b171426fc686d3b536aDmitri Plotnikov assertEquals("Incorrect Red with phones count", 3, summaryWithPhones); 132ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey } else if (groupId == groupGreen) { 133ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey // Green should have 1 aggregate, none with phones. 1346bc46c9f22aaa9e68f344b171426fc686d3b536aDmitri Plotnikov assertEquals("Incorrect Green count", 1, summaryCount); 1356bc46c9f22aaa9e68f344b171426fc686d3b536aDmitri Plotnikov assertEquals("Incorrect Green with phones count", 0, summaryWithPhones); 136ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey } else if (groupId == groupBlue) { 137ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey // Blue should have no contacts. 1386bc46c9f22aaa9e68f344b171426fc686d3b536aDmitri Plotnikov assertEquals("Incorrect Blue count", 0, summaryCount); 1396bc46c9f22aaa9e68f344b171426fc686d3b536aDmitri Plotnikov assertEquals("Incorrect Blue with phones count", 0, summaryWithPhones); 140ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey } else { 141ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey fail("Unrecognized group in summary cursor"); 142ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey } 143ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey } 1440265a180cf027d149f11f8750652ac67ea08ca24Dmitri Plotnikov cursor.close(); 145ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey } 146ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey 1478920a04b4a68ed6b548bcdef5ca8736dcf8b69b1Omari Stephens @MediumTest 1489261b2141aa90a4fed632fd6da03026d4c216280Fred Quintana public void testGroupDirtySetOnChange() { 1499261b2141aa90a4fed632fd6da03026d4c216280Fred Quintana Uri uri = ContentUris.withAppendedId(Groups.CONTENT_URI, 1509261b2141aa90a4fed632fd6da03026d4c216280Fred Quintana createGroup(mAccount, "gsid1", "title1")); 1519261b2141aa90a4fed632fd6da03026d4c216280Fred Quintana assertDirty(uri, true); 152718b97b3bb9f084ad3f3e25bd5c1c01d3e8a8144Jeff Sharkey clearDirty(uri); 1539261b2141aa90a4fed632fd6da03026d4c216280Fred Quintana assertDirty(uri, false); 1549261b2141aa90a4fed632fd6da03026d4c216280Fred Quintana } 1559261b2141aa90a4fed632fd6da03026d4c216280Fred Quintana 1568920a04b4a68ed6b548bcdef5ca8736dcf8b69b1Omari Stephens @MediumTest 15773776ffd5c00e94db987ee30864e9c7a8396d22dDmitri Plotnikov public void testMarkAsDirtyParameter() { 15873776ffd5c00e94db987ee30864e9c7a8396d22dDmitri Plotnikov Uri uri = ContentUris.withAppendedId(Groups.CONTENT_URI, 15973776ffd5c00e94db987ee30864e9c7a8396d22dDmitri Plotnikov createGroup(mAccount, "gsid1", "title1")); 160718b97b3bb9f084ad3f3e25bd5c1c01d3e8a8144Jeff Sharkey clearDirty(uri); 161e246689441b2ff39cb97de277d6caeec95358863Jeff Sharkey Uri updateUri = setCallerIsSyncAdapter(uri, mAccount); 16273776ffd5c00e94db987ee30864e9c7a8396d22dDmitri Plotnikov 16373776ffd5c00e94db987ee30864e9c7a8396d22dDmitri Plotnikov ContentValues values = new ContentValues(); 16473776ffd5c00e94db987ee30864e9c7a8396d22dDmitri Plotnikov values.put(Groups.NOTES, "New notes"); 16573776ffd5c00e94db987ee30864e9c7a8396d22dDmitri Plotnikov mResolver.update(updateUri, values, null, null); 16673776ffd5c00e94db987ee30864e9c7a8396d22dDmitri Plotnikov assertDirty(uri, false); 16773776ffd5c00e94db987ee30864e9c7a8396d22dDmitri Plotnikov } 16873776ffd5c00e94db987ee30864e9c7a8396d22dDmitri Plotnikov 1698920a04b4a68ed6b548bcdef5ca8736dcf8b69b1Omari Stephens @MediumTest 1701fd9b53d9e5d8ea87b69a51fb084c6f0d9f7c93eFred Quintana public void testGroupDirtyClearedWhenSetExplicitly() { 1711fd9b53d9e5d8ea87b69a51fb084c6f0d9f7c93eFred Quintana Uri uri = ContentUris.withAppendedId(Groups.CONTENT_URI, 1721fd9b53d9e5d8ea87b69a51fb084c6f0d9f7c93eFred Quintana createGroup(mAccount, "gsid1", "title1")); 1731fd9b53d9e5d8ea87b69a51fb084c6f0d9f7c93eFred Quintana assertDirty(uri, true); 1741fd9b53d9e5d8ea87b69a51fb084c6f0d9f7c93eFred Quintana 1751fd9b53d9e5d8ea87b69a51fb084c6f0d9f7c93eFred Quintana ContentValues values = new ContentValues(); 1761fd9b53d9e5d8ea87b69a51fb084c6f0d9f7c93eFred Quintana values.put(Groups.DIRTY, 0); 1771fd9b53d9e5d8ea87b69a51fb084c6f0d9f7c93eFred Quintana values.put(Groups.NOTES, "other notes"); 178718b97b3bb9f084ad3f3e25bd5c1c01d3e8a8144Jeff Sharkey assertEquals(1, mResolver.update(uri, values, null, null)); 1791fd9b53d9e5d8ea87b69a51fb084c6f0d9f7c93eFred Quintana 1801fd9b53d9e5d8ea87b69a51fb084c6f0d9f7c93eFred Quintana assertDirty(uri, false); 1811fd9b53d9e5d8ea87b69a51fb084c6f0d9f7c93eFred Quintana } 1821fd9b53d9e5d8ea87b69a51fb084c6f0d9f7c93eFred Quintana 1838920a04b4a68ed6b548bcdef5ca8736dcf8b69b1Omari Stephens @MediumTest 18494021b213e4db367f60b30fcbfe9019e28571784Fred Quintana public void testGroupDeletion1() { 18594021b213e4db367f60b30fcbfe9019e28571784Fred Quintana long groupId = createGroup(mAccount, "g1", "gt1"); 18694021b213e4db367f60b30fcbfe9019e28571784Fred Quintana Uri uri = ContentUris.withAppendedId(Groups.CONTENT_URI, groupId); 18794021b213e4db367f60b30fcbfe9019e28571784Fred Quintana 18894021b213e4db367f60b30fcbfe9019e28571784Fred Quintana assertEquals(1, getCount(uri, null, null)); 18994021b213e4db367f60b30fcbfe9019e28571784Fred Quintana mResolver.delete(uri, null, null); 19094021b213e4db367f60b30fcbfe9019e28571784Fred Quintana assertEquals(1, getCount(uri, null, null)); 1915870f2dcc2ac7715b2c078a886ee346622e7887eDmitri Plotnikov assertStoredValue(uri, Groups.DELETED, "1"); 19294021b213e4db367f60b30fcbfe9019e28571784Fred Quintana 193e246689441b2ff39cb97de277d6caeec95358863Jeff Sharkey Uri permanentDeletionUri = setCallerIsSyncAdapter(uri, mAccount); 19494021b213e4db367f60b30fcbfe9019e28571784Fred Quintana mResolver.delete(permanentDeletionUri, null, null); 19594021b213e4db367f60b30fcbfe9019e28571784Fred Quintana assertEquals(0, getCount(uri, null, null)); 19694021b213e4db367f60b30fcbfe9019e28571784Fred Quintana } 19794021b213e4db367f60b30fcbfe9019e28571784Fred Quintana 1988920a04b4a68ed6b548bcdef5ca8736dcf8b69b1Omari Stephens @MediumTest 19994021b213e4db367f60b30fcbfe9019e28571784Fred Quintana public void testGroupDeletion2() { 20094021b213e4db367f60b30fcbfe9019e28571784Fred Quintana long groupId = createGroup(mAccount, "g1", "gt1"); 20194021b213e4db367f60b30fcbfe9019e28571784Fred Quintana Uri uri = ContentUris.withAppendedId(Groups.CONTENT_URI, groupId); 20294021b213e4db367f60b30fcbfe9019e28571784Fred Quintana 20394021b213e4db367f60b30fcbfe9019e28571784Fred Quintana assertEquals(1, getCount(uri, null, null)); 204e246689441b2ff39cb97de277d6caeec95358863Jeff Sharkey Uri permanentDeletionUri = setCallerIsSyncAdapter(uri, mAccount); 20594021b213e4db367f60b30fcbfe9019e28571784Fred Quintana mResolver.delete(permanentDeletionUri, null, null); 20694021b213e4db367f60b30fcbfe9019e28571784Fred Quintana assertEquals(0, getCount(uri, null, null)); 20794021b213e4db367f60b30fcbfe9019e28571784Fred Quintana } 20894021b213e4db367f60b30fcbfe9019e28571784Fred Quintana 2098920a04b4a68ed6b548bcdef5ca8736dcf8b69b1Omari Stephens @MediumTest 2109261b2141aa90a4fed632fd6da03026d4c216280Fred Quintana public void testGroupVersionUpdates() { 2119261b2141aa90a4fed632fd6da03026d4c216280Fred Quintana Uri uri = ContentUris.withAppendedId(Groups.CONTENT_URI, 2129261b2141aa90a4fed632fd6da03026d4c216280Fred Quintana createGroup(mAccount, "gsid1", "title1")); 2139261b2141aa90a4fed632fd6da03026d4c216280Fred Quintana long version = getVersion(uri); 2149261b2141aa90a4fed632fd6da03026d4c216280Fred Quintana ContentValues values = new ContentValues(); 2159261b2141aa90a4fed632fd6da03026d4c216280Fred Quintana values.put(Groups.TITLE, "title2"); 2169261b2141aa90a4fed632fd6da03026d4c216280Fred Quintana mResolver.update(uri, values, null, null); 2179261b2141aa90a4fed632fd6da03026d4c216280Fred Quintana assertEquals(version + 1, getVersion(uri)); 2189261b2141aa90a4fed632fd6da03026d4c216280Fred Quintana } 2196cffee46a1334d2b3ed19f436b27638451541044Dmitri Plotnikov 220ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey private interface Projections { 221ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey public static final String[] PROJ_SUMMARY = new String[] { 222ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey Groups._ID, 223ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey Groups.SUMMARY_COUNT, 224ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey Groups.SUMMARY_WITH_PHONES, 225ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey }; 226ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey 227ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey public static final int COL_ID = 0; 228ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey public static final int COL_SUMMARY_COUNT = 1; 229ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey public static final int COL_SUMMARY_WITH_PHONES = 2; 230ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey } 231ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey 2325aec18c7ba70a011ffff949cfa3faaffce0a79c7Jeff Sharkey private static final Account sTestAccount = new Account("user@example.com", "com.example"); 2331a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey private static final Account sSecondAccount = new Account("other@example.net", "net.example"); 2345aec18c7ba70a011ffff949cfa3faaffce0a79c7Jeff Sharkey private static final String GROUP_ID = "testgroup"; 2355aec18c7ba70a011ffff949cfa3faaffce0a79c7Jeff Sharkey 2361a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey public void assertRawContactVisible(long rawContactId, boolean expected) { 2371a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey final long contactId = this.queryContactId(rawContactId); 2381a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey assertContactVisible(contactId, expected); 2391a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey } 2401a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey 2411a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey public void assertContactVisible(long contactId, boolean expected) { 2421a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey final Cursor cursor = mResolver.query(Contacts.CONTENT_URI, new String[] { 2435aec18c7ba70a011ffff949cfa3faaffce0a79c7Jeff Sharkey Contacts.IN_VISIBLE_GROUP 2441a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey }, Contacts._ID + "=" + contactId, null, null); 2455aec18c7ba70a011ffff949cfa3faaffce0a79c7Jeff Sharkey assertTrue("Contact not found", cursor.moveToFirst()); 2461a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey final boolean actual = (cursor.getInt(0) != 0); 2475aec18c7ba70a011ffff949cfa3faaffce0a79c7Jeff Sharkey cursor.close(); 2481a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey assertEquals("Unexpected visibility", expected, actual); 2491a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey } 2501a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey 2511a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey public ContentProviderOperation buildVisibleAssert(long contactId, boolean visible) { 2521a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey return ContentProviderOperation.newAssertQuery(Contacts.CONTENT_URI).withSelection( 2531a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey Contacts._ID + "=" + contactId + " AND " + Contacts.IN_VISIBLE_GROUP + "=" 2541a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey + (visible ? 1 : 0), null).withExpectedCount(1).build(); 2555aec18c7ba70a011ffff949cfa3faaffce0a79c7Jeff Sharkey } 2565aec18c7ba70a011ffff949cfa3faaffce0a79c7Jeff Sharkey 2578920a04b4a68ed6b548bcdef5ca8736dcf8b69b1Omari Stephens @LargeTest 2581a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey public void testDelayVisibleTransaction() throws RemoteException, OperationApplicationException { 2595aec18c7ba70a011ffff949cfa3faaffce0a79c7Jeff Sharkey final ContentValues values = new ContentValues(); 2605aec18c7ba70a011ffff949cfa3faaffce0a79c7Jeff Sharkey 2615aec18c7ba70a011ffff949cfa3faaffce0a79c7Jeff Sharkey final long groupId = this.createGroup(sTestAccount, GROUP_ID, GROUP_ID, 1); 2625aec18c7ba70a011ffff949cfa3faaffce0a79c7Jeff Sharkey final Uri groupUri = ContentUris.withAppendedId(Groups.CONTENT_URI, groupId); 2635aec18c7ba70a011ffff949cfa3faaffce0a79c7Jeff Sharkey 2641a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey // Create contact with specific membership 2655aec18c7ba70a011ffff949cfa3faaffce0a79c7Jeff Sharkey final long rawContactId = this.createRawContact(sTestAccount); 2665aec18c7ba70a011ffff949cfa3faaffce0a79c7Jeff Sharkey final long contactId = this.queryContactId(rawContactId); 2675aec18c7ba70a011ffff949cfa3faaffce0a79c7Jeff Sharkey final Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId); 2685aec18c7ba70a011ffff949cfa3faaffce0a79c7Jeff Sharkey 2695aec18c7ba70a011ffff949cfa3faaffce0a79c7Jeff Sharkey this.insertGroupMembership(rawContactId, groupId); 2705aec18c7ba70a011ffff949cfa3faaffce0a79c7Jeff Sharkey 2711a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey final ArrayList<ContentProviderOperation> oper = Lists.newArrayList(); 2721a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey 2731a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey // Update visibility inside a transaction and assert that inside the 2741a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey // transaction it hasn't been updated yet. 2751a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey oper.add(buildVisibleAssert(contactId, true)); 2761a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey oper.add(ContentProviderOperation.newUpdate(groupUri).withValue(Groups.GROUP_VISIBLE, 0) 2771a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey .build()); 2781a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey oper.add(buildVisibleAssert(contactId, true)); 2791a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey mResolver.applyBatch(ContactsContract.AUTHORITY, oper); 2801a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey 2811a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey // After previous transaction finished, visibility should be updated 2821a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey oper.clear(); 2831a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey oper.add(buildVisibleAssert(contactId, false)); 2841a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey mResolver.applyBatch(ContactsContract.AUTHORITY, oper); 2851a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey } 2861a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey 2871a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey public void testLocalSingleVisible() { 2881a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey final long rawContactId = this.createRawContact(); 2891a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey 2901a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey // Single, local contacts should always be visible 2911a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey assertRawContactVisible(rawContactId, true); 2921a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey } 2931a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey 2941a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey public void testLocalMixedVisible() { 2951a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey // Aggregate, when mixed with local, should become visible 2961a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey final long rawContactId1 = this.createRawContact(); 2971a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey final long rawContactId2 = this.createRawContact(sTestAccount); 2981a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey 2991a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey final long groupId = this.createGroup(sTestAccount, GROUP_ID, GROUP_ID, 0); 3001a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey this.insertGroupMembership(rawContactId2, groupId); 3011a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey 3021a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey // Make sure they are still apart 3031a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey assertNotAggregated(rawContactId1, rawContactId2); 3041a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey assertRawContactVisible(rawContactId1, true); 3051a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey assertRawContactVisible(rawContactId2, false); 3061a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey 3071a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey // Force together and see what happens 3081a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey final ContentValues values = new ContentValues(); 3091a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey values.put(AggregationExceptions.TYPE, AggregationExceptions.TYPE_KEEP_TOGETHER); 3101a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey values.put(AggregationExceptions.RAW_CONTACT_ID1, rawContactId1); 3111a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey values.put(AggregationExceptions.RAW_CONTACT_ID2, rawContactId2); 3121a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey mResolver.update(AggregationExceptions.CONTENT_URI, values, null, null); 3131a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey 3141a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey assertRawContactVisible(rawContactId1, true); 3151a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey assertRawContactVisible(rawContactId2, true); 3161a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey } 3171a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey 3181a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey public void testUngroupedVisible() { 3191a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey final long rawContactId = this.createRawContact(sTestAccount); 3201a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey 3211a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey final ContentValues values = new ContentValues(); 3221a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey values.put(Settings.ACCOUNT_NAME, sTestAccount.name); 3231a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey values.put(Settings.ACCOUNT_TYPE, sTestAccount.type); 3241a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey values.put(Settings.UNGROUPED_VISIBLE, 0); 3251a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey mResolver.insert(Settings.CONTENT_URI, values); 3261a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey 3271a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey assertRawContactVisible(rawContactId, false); 3281a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey 3291a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey values.clear(); 3301a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey values.put(Settings.UNGROUPED_VISIBLE, 1); 3311a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey mResolver.update(Settings.CONTENT_URI, values, Settings.ACCOUNT_NAME + "=? AND " 3321a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey + Settings.ACCOUNT_TYPE + "=?", new String[] { 3331a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey sTestAccount.name, sTestAccount.type 3341a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey }); 3355aec18c7ba70a011ffff949cfa3faaffce0a79c7Jeff Sharkey 3361a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey assertRawContactVisible(rawContactId, true); 3371a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey } 3381a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey 3391a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey public void testMultipleSourcesVisible() { 3401a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey final long rawContactId1 = this.createRawContact(sTestAccount); 3411a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey final long rawContactId2 = this.createRawContact(sSecondAccount); 3421a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey 3431a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey final long groupId = this.createGroup(sTestAccount, GROUP_ID, GROUP_ID, 0); 3441a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey this.insertGroupMembership(rawContactId1, groupId); 3451a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey 3461a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey // Make sure still invisible 3471a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey assertRawContactVisible(rawContactId1, false); 3481a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey assertRawContactVisible(rawContactId2, false); 3491a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey 3501a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey // Make group visible 3511a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey final ContentValues values = new ContentValues(); 3525aec18c7ba70a011ffff949cfa3faaffce0a79c7Jeff Sharkey values.put(Groups.GROUP_VISIBLE, 1); 3531a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey mResolver.update(Groups.CONTENT_URI, values, Groups._ID + "=" + groupId, null); 3545aec18c7ba70a011ffff949cfa3faaffce0a79c7Jeff Sharkey 3551a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey assertRawContactVisible(rawContactId1, true); 3561a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey assertRawContactVisible(rawContactId2, false); 3571a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey 3581a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey // Force them together 3591a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey values.clear(); 3601a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey values.put(AggregationExceptions.TYPE, AggregationExceptions.TYPE_KEEP_TOGETHER); 3611a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey values.put(AggregationExceptions.RAW_CONTACT_ID1, rawContactId1); 3621a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey values.put(AggregationExceptions.RAW_CONTACT_ID2, rawContactId2); 3631a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey mResolver.update(AggregationExceptions.CONTENT_URI, values, null, null); 3641a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey 3651a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey assertRawContactVisible(rawContactId1, true); 3661a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey assertRawContactVisible(rawContactId2, true); 3671a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey 3681a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey // Make group invisible 3691a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey values.clear(); 3701a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey values.put(Groups.GROUP_VISIBLE, 0); 3711a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey mResolver.update(Groups.CONTENT_URI, values, Groups._ID + "=" + groupId, null); 3721a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey 3731a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey assertRawContactVisible(rawContactId1, false); 3741a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey assertRawContactVisible(rawContactId2, false); 3751a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey 3761a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey // Turn on ungrouped for first 3771a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey values.clear(); 3781a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey values.put(Settings.ACCOUNT_NAME, sTestAccount.name); 3791a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey values.put(Settings.ACCOUNT_TYPE, sTestAccount.type); 3801a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey values.put(Settings.UNGROUPED_VISIBLE, 1); 3811a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey mResolver.insert(Settings.CONTENT_URI, values); 3821a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey 3831a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey assertRawContactVisible(rawContactId1, false); 3841a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey assertRawContactVisible(rawContactId2, false); 3851a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey 3861a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey // Turn on ungrouped for second account 3875aec18c7ba70a011ffff949cfa3faaffce0a79c7Jeff Sharkey values.clear(); 3881a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey values.put(Settings.ACCOUNT_NAME, sSecondAccount.name); 3891a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey values.put(Settings.ACCOUNT_TYPE, sSecondAccount.type); 3901a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey values.put(Settings.UNGROUPED_VISIBLE, 1); 3911a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey mResolver.insert(Settings.CONTENT_URI, values); 3921a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey 3931a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey assertRawContactVisible(rawContactId1, true); 3941a21fa6383449df4bf0d46138a23aa02dfa235a0Jeff Sharkey assertRawContactVisible(rawContactId2, true); 3955aec18c7ba70a011ffff949cfa3faaffce0a79c7Jeff Sharkey } 396ca8172420c0913dff96ea607d477d8b8abfe5ddbJeff Sharkey} 397