PeopleActivityTest.java revision e0b2f1e2d01d1ac52ba207dc7ce76971d853298e
132bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov/* 232bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * Copyright (C) 2010 The Android Open Source Project 332bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * 432bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * Licensed under the Apache License, Version 2.0 (the "License"); 532bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * you may not use this file except in compliance with the License. 632bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * You may obtain a copy of the License at 732bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * 832bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * http://www.apache.org/licenses/LICENSE-2.0 932bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * 1032bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * Unless required by applicable law or agreed to in writing, software 1132bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * distributed under the License is distributed on an "AS IS" BASIS, 1232bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1332bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * See the License for the specific language governing permissions and 1432bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * limitations under the License. 1532bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov */ 1632bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov 1732bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikovpackage com.android.contacts.activities; 1832bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov 19e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.content.ContentValues; 20e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.content.Intent; 21e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.content.Loader; 22e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.net.Uri; 23e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.os.AsyncTask; 24e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.provider.ContactsContract; 25e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.provider.ContactsContract.ContactCounts; 26e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.provider.ContactsContract.Contacts; 27e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.provider.ContactsContract.Directory; 28e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.provider.ContactsContract.Groups; 29e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.provider.ContactsContract.ProviderStatus; 30e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.provider.Settings; 31e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.test.ActivityInstrumentationTestCase2; 32e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.test.suitebuilder.annotation.SmallTest; 33e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport android.widget.TextView; 34e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Cheng 3525d91b36a70474ed05c72a7b06a2dc44a0505476Daniel Lehmannimport com.android.contacts.ContactPhotoManager; 361173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikovimport com.android.contacts.ContactsApplication; 3732bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikovimport com.android.contacts.R; 38ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikovimport com.android.contacts.detail.ContactDetailFragment; 3934ce5e98f78b46b858d8afd450d1153c1d985426Flavio Lerdaimport com.android.contacts.interactions.TestLoaderManager; 40ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikovimport com.android.contacts.list.ContactBrowseListFragment; 411173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikovimport com.android.contacts.model.AccountType; 421173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikovimport com.android.contacts.model.AccountTypeManager; 432b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoroimport com.android.contacts.model.AccountWithDataSet; 441dc28bef7d5353310359c3711b6cdac390d8a2e0Dmitri Plotnikovimport com.android.contacts.model.BaseAccountType; 451173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikovimport com.android.contacts.test.InjectedServices; 4632bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikovimport com.android.contacts.tests.mocks.ContactsMockContext; 471173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikovimport com.android.contacts.tests.mocks.MockAccountTypeManager; 4825d91b36a70474ed05c72a7b06a2dc44a0505476Daniel Lehmannimport com.android.contacts.tests.mocks.MockContactPhotoManager; 4932bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikovimport com.android.contacts.tests.mocks.MockContentProvider; 50ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikovimport com.android.contacts.tests.mocks.MockContentProvider.Query; 51072d91171c749f43b64900118e6f4dcbdd7b1097Dmitri Plotnikovimport com.android.contacts.tests.mocks.MockSharedPreferences; 5257b4c0d00fd7eac4658c4b40f9643fe1227e70a7Daniel Lehmannimport com.android.contacts.util.PhoneCapabilityTester; 5332bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov 5432bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov/** 55e7d15fb4bacfe85e175aa8012f9af8d41a2cfa15Makoto Onuki * This test is so outdated that it's disabled temporarily. TODO Update the test and re-enable it. 56e7d15fb4bacfe85e175aa8012f9af8d41a2cfa15Makoto Onuki * 579856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan * Tests for {@link PeopleActivity}. 5832bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * 5932bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * Running all tests: 6032bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * 6132bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * runtest contacts 6232bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * or 6332bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * adb shell am instrument \ 6432bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov * -w com.android.contacts.tests/android.test.InstrumentationTestRunner 65e7d15fb4bacfe85e175aa8012f9af8d41a2cfa15Makoto Onuki * 6632bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov */ 670454960b4b9e43b75bbfd0fb296c25d59111a765Daisuke Miyakawa@SmallTest 689856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuanpublic class PeopleActivityTest 699856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan extends ActivityInstrumentationTestCase2<PeopleActivity> 7032bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov{ 71072d91171c749f43b64900118e6f4dcbdd7b1097Dmitri Plotnikov static { 72072d91171c749f43b64900118e6f4dcbdd7b1097Dmitri Plotnikov // AsyncTask class needs to be initialized on the main thread. 73072d91171c749f43b64900118e6f4dcbdd7b1097Dmitri Plotnikov AsyncTask.init(); 74072d91171c749f43b64900118e6f4dcbdd7b1097Dmitri Plotnikov } 75072d91171c749f43b64900118e6f4dcbdd7b1097Dmitri Plotnikov 76ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov private static final String TEST_ACCOUNT = "testAccount"; 77ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov private static final String TEST_ACCOUNT_TYPE = "testAccountType"; 78ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov 7932bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov private ContactsMockContext mContext; 8032bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov private MockContentProvider mContactsProvider; 811173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov private MockContentProvider mSettingsProvider; 8232bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov 839856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan public PeopleActivityTest() { 849856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan super(PeopleActivity.class); 8532bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov } 8632bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov 8732bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov @Override 8832bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov public void setUp() { 8932bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov mContext = new ContactsMockContext(getInstrumentation().getTargetContext()); 9032bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov mContactsProvider = mContext.getContactsProvider(); 911173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov mSettingsProvider = mContext.getSettingsProvider(); 921173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov InjectedServices services = new InjectedServices(); 931173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov services.setContentResolver(mContext.getContentResolver()); 94072d91171c749f43b64900118e6f4dcbdd7b1097Dmitri Plotnikov services.setSharedPreferences(new MockSharedPreferences()); 9525d91b36a70474ed05c72a7b06a2dc44a0505476Daniel Lehmann services.setSystemService(ContactPhotoManager.CONTACT_PHOTO_SERVICE, 9625d91b36a70474ed05c72a7b06a2dc44a0505476Daniel Lehmann new MockContactPhotoManager()); 9796e87fd6e808e9d853263ffeb5104f3253a18639Daniel Lehmann AccountType accountType = new BaseAccountType() { 9896e87fd6e808e9d853263ffeb5104f3253a18639Daniel Lehmann @Override 9996e87fd6e808e9d853263ffeb5104f3253a18639Daniel Lehmann public boolean areContactsWritable() { 10096e87fd6e808e9d853263ffeb5104f3253a18639Daniel Lehmann return false; 10196e87fd6e808e9d853263ffeb5104f3253a18639Daniel Lehmann } 10296e87fd6e808e9d853263ffeb5104f3253a18639Daniel Lehmann }; 103ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov accountType.accountType = TEST_ACCOUNT_TYPE; 10432bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov 1052b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro AccountWithDataSet account = new AccountWithDataSet(TEST_ACCOUNT, TEST_ACCOUNT_TYPE, null); 1061173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov 1071173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov services.setSystemService(AccountTypeManager.ACCOUNT_TYPE_SERVICE, 1081173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov new MockAccountTypeManager( 1092b3f3c54d3beb017b2f59f19e9ce0ecc3e039dbcDave Santoro new AccountType[] { accountType }, new AccountWithDataSet[] { account })); 1101173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov ContactsApplication.injectServices(services); 1111173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov } 11232bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov 11351ada3680de8700bc273a7e652886823f4c1981fHugo Hudson @Override 11451ada3680de8700bc273a7e652886823f4c1981fHugo Hudson protected void tearDown() throws Exception { 11551ada3680de8700bc273a7e652886823f4c1981fHugo Hudson ContactsApplication.injectServices(null); 11651ada3680de8700bc273a7e652886823f4c1981fHugo Hudson super.tearDown(); 11751ada3680de8700bc273a7e652886823f4c1981fHugo Hudson } 11851ada3680de8700bc273a7e652886823f4c1981fHugo Hudson 1191173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov public void testSingleAccountNoGroups() { 120e7d15fb4bacfe85e175aa8012f9af8d41a2cfa15Makoto Onuki 121e7d15fb4bacfe85e175aa8012f9af8d41a2cfa15Makoto Onuki if (true) { // Need this to avoid "unreachable statement" 122e7d15fb4bacfe85e175aa8012f9af8d41a2cfa15Makoto Onuki return; // Disabled for now. 123e7d15fb4bacfe85e175aa8012f9af8d41a2cfa15Makoto Onuki } 124e7d15fb4bacfe85e175aa8012f9af8d41a2cfa15Makoto Onuki 12557b4c0d00fd7eac4658c4b40f9643fe1227e70a7Daniel Lehmann // This two-pane UI test only makes sense if we run with two panes. 12657b4c0d00fd7eac4658c4b40f9643fe1227e70a7Daniel Lehmann // Let's ignore this in the single pane case 12757b4c0d00fd7eac4658c4b40f9643fe1227e70a7Daniel Lehmann if (!PhoneCapabilityTester.isUsingTwoPanes(mContext)) return; 12857b4c0d00fd7eac4658c4b40f9643fe1227e70a7Daniel Lehmann 1291173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov expectSettingsQueriesAndReturnDefault(); 13032bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov expectProviderStatusQueryAndReturnNormal(); 13132bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov expectGroupsQueryAndReturnEmpty(); 132ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov expectContactListQuery(100); 133ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov expectContactLookupQuery("lu1", 1, "lu1", 1); 134ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov expectContactEntityQuery("lu1", 1); 13532bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov 1361173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov setActivityIntent(new Intent(Intent.ACTION_DEFAULT)); 13732bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov 1389856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan PeopleActivity activity = getActivity(); 13932bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov 1401173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov getInstrumentation().waitForIdleSync(); 14132bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov 142ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov ContactBrowseListFragment listFragment = activity.getListFragment(); 143ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov ContactDetailFragment detailFragment = activity.getDetailFragment(); 144ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov 145ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov Loader<?> filterLoader = 146ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov activity.getLoaderManager().getLoader(R.id.contact_list_filter_loader); 147ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov Loader<?> listLoader = 148ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov listFragment.getLoaderManager().getLoader(0); 149ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov 150ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov // TODO: wait for detail loader 151ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov // TODO: wait for lookup key loading 15234ce5e98f78b46b858d8afd450d1153c1d985426Flavio Lerda TestLoaderManager.waitForLoaders(filterLoader, listLoader); 15332bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov 15432bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov getInstrumentation().waitForIdleSync(); 15532bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov 15632bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov mContext.verify(); 157ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov 158ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov TextView nameText = (TextView) detailFragment.getView().findViewById(R.id.name); 159ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov assertEquals("Contact 1", nameText.getText()); 16032bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov } 16132bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov 1621173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov private void expectSettingsQueriesAndReturnDefault() { 1631173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov mSettingsProvider 1641173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov .expectQuery(Settings.System.CONTENT_URI) 1651173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov .withProjection(Settings.System.VALUE) 1661173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov .withSelection(Settings.System.NAME + "=?", 1671173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov ContactsContract.Preferences.DISPLAY_ORDER) 1681173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov .returnRow(ContactsContract.Preferences.DISPLAY_ORDER_PRIMARY) 1691173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov .anyNumberOfTimes(); 1701173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov mSettingsProvider 1711173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov .expectQuery(Settings.System.CONTENT_URI) 1721173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov .withProjection(Settings.System.VALUE) 1731173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov .withSelection(Settings.System.NAME + "=?", 1741173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov ContactsContract.Preferences.SORT_ORDER) 1751173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov .returnRow(ContactsContract.Preferences.SORT_ORDER_PRIMARY) 1761173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov .anyNumberOfTimes(); 1771173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov } 1781173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov 17932bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov private void expectProviderStatusQueryAndReturnNormal() { 18032bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov mContactsProvider 18132bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov .expectQuery(ProviderStatus.CONTENT_URI) 18232bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov .withProjection(ProviderStatus.STATUS, ProviderStatus.DATA1) 1831173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov .returnRow(ProviderStatus.STATUS_NORMAL, null) 1841173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov .anyNumberOfTimes(); 18532bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov } 18632bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov 18732bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov private void expectGroupsQueryAndReturnEmpty() { 18832bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov mContactsProvider 18932bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov .expectQuery(Groups.CONTENT_URI) 19032bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov .withAnyProjection() 19132bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov .withAnySelection() 1921173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov .returnEmptyCursor() 1931173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov .anyNumberOfTimes(); 1941173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov } 1951173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov 196ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov private void expectContactListQuery(int count) { 1971173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov Uri uri = Contacts.CONTENT_URI.buildUpon() 1981173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov .appendQueryParameter(ContactCounts.ADDRESS_BOOK_INDEX_EXTRAS, "true") 1991173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov .appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY, 2001173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov String.valueOf(Directory.DEFAULT)) 2011173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov .build(); 2021173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov 203ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov Query query = mContactsProvider 204ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov .expectQuery(uri) 205ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov .withAnyProjection() 206ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov .withSortOrder(Contacts.SORT_KEY_PRIMARY); 207ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov for (int i = 1; i <= count; i++) { 208ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov ContentValues values = new ContentValues(); 209ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov values.put(Contacts._ID, i); 210ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov values.put(Contacts.DISPLAY_NAME, "Contact " + i); 211ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov values.put(Contacts.SORT_KEY_PRIMARY, "contact " + i); 212ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov values.put(Contacts.LOOKUP_KEY, "lu" + i); 213ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov query.returnRow(values); 214ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov } 215ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov } 216ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov 217ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov private void expectContactLookupQuery( 218ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov String lookupKey, long id, String returnLookupKey, long returnId) { 219ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov Uri uri = Contacts.getLookupUri(id, lookupKey); 220ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov mContactsProvider.expectTypeQuery(uri, Contacts.CONTENT_ITEM_TYPE); 221ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov mContactsProvider 222ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov .expectQuery(uri) 223ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov .withProjection(Contacts._ID, Contacts.LOOKUP_KEY) 224ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov .returnRow(returnId, returnLookupKey); 225ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov } 226ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov 227ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov private void expectContactEntityQuery(String lookupKey, int contactId) { 228ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov Uri uri = Uri.withAppendedPath( 229ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov Contacts.getLookupUri(contactId, lookupKey), Contacts.Entity.CONTENT_DIRECTORY); 230ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov ContentValues row1 = new ContentValues(); 231ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov row1.put(Contacts.Entity.DATA_ID, 1); 232ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov row1.put(Contacts.Entity.LOOKUP_KEY, lookupKey); 233ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov row1.put(Contacts.Entity.CONTACT_ID, contactId); 234ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov row1.put(Contacts.Entity.DISPLAY_NAME, "Contact " + contactId); 235ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov row1.put(Contacts.Entity.ACCOUNT_NAME, TEST_ACCOUNT); 236ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov row1.put(Contacts.Entity.ACCOUNT_TYPE, TEST_ACCOUNT_TYPE); 2371173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov mContactsProvider 2381173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov .expectQuery(uri) 2391173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov .withAnyProjection() 2401173ae29217fc83f254404f8a5fa10419ee83c93Dmitri Plotnikov .withAnySortOrder() 241ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov .returnRow(row1) 242ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov .anyNumberOfTimes(); 24332bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov } 24432bac64a51c274da61c61e1fade129b6d90e6095Dmitri Plotnikov} 245