blob: be14f4504e390727de9890b973382d83b4e3520f [file] [log] [blame]
/*
* Copyright (C) 2010 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.providers.contacts;
import android.accounts.Account;
import android.content.ContentValues;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ProviderInfo;
import android.database.Cursor;
import android.database.MatrixCursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.AggregationExceptions;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Directory;
import android.provider.ContactsContract.RawContacts;
import android.test.mock.MockContentProvider;
import android.test.suitebuilder.annotation.MediumTest;
import android.util.Log;
import com.android.providers.contacts.ContactsDatabaseHelper.AggregationExceptionColumns;
import com.google.android.collect.Lists;
/**
* Unit tests for {@link ContactDirectoryManager}. Run the test like this:
*
adb shell am instrument -e class com.android.providers.contacts.ContactDirectoryManagerTest \
-w com.android.providers.contacts.tests/android.test.InstrumentationTestRunner
*
*/
@MediumTest
public class ContactDirectoryManagerTest extends BaseContactsProvider2Test {
private static final String TAG = "ContactDirectoryManagerTest";
private ContactsMockPackageManager mPackageManager;
private ContactsProvider2 mProvider;
private ContactDirectoryManager mDirectoryManager;
public static class MockContactDirectoryProvider extends MockContentProvider {
private String mAuthority;
private MatrixCursor mResponse;
@Override
public void attachInfoForTesting(Context context, ProviderInfo info) {
mAuthority = info.authority;
}
public MatrixCursor createResponseCursor() {
mResponse = new MatrixCursor(
new String[] { Directory.ACCOUNT_NAME, Directory.ACCOUNT_TYPE,
Directory.DISPLAY_NAME, Directory.TYPE_RESOURCE_ID,
Directory.EXPORT_SUPPORT, Directory.SHORTCUT_SUPPORT,
Directory.PHOTO_SUPPORT });
return mResponse;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
String sortOrder) {
if (uri.toString().equals("content://" + mAuthority + "/directories")) {
// Should tolerate multiple queries.
mResponse.moveToPosition(-1);
return mResponse;
} else if (uri.toString().startsWith("content://" + mAuthority + "/contacts")) {
MatrixCursor cursor = new MatrixCursor(
new String[] { "projection", "selection", "selectionArgs", "sortOrder",
"accountName", "accountType"});
cursor.addRow(new Object[] {
Lists.newArrayList(projection).toString(),
selection,
Lists.newArrayList(selectionArgs).toString(),
sortOrder,
uri.getQueryParameter(RawContacts.ACCOUNT_NAME),
uri.getQueryParameter(RawContacts.ACCOUNT_TYPE),
});
return cursor;
} else if (uri.toString().startsWith(
"content://" + mAuthority + "/aggregation_exceptions")) {
return new MatrixCursor(projection);
}
fail("Unexpected uri: " + uri);
return null;
}
}
@Override
public void setUp() throws Exception {
super.setUp();
mProvider = (ContactsProvider2) getProvider();
mDirectoryManager = mProvider.getContactDirectoryManagerForTest();
mPackageManager = (ContactsMockPackageManager) getProvider()
.getContext().getPackageManager();
}
public void testIsDirectoryProvider() {
ProviderInfo provider = new ProviderInfo();
// No metadata
assertFalse(ContactDirectoryManager.isDirectoryProvider(provider));
// No CONTACT_DIRECTORY_META_DATA
provider.metaData = new Bundle();
assertFalse(ContactDirectoryManager.isDirectoryProvider(provider));
// CONTACT_DIRECTORY_META_DATA is a string
provider.metaData.putString("android.content.ContactDirectory", "");
assertFalse(ContactDirectoryManager.isDirectoryProvider(provider));
// CONTACT_DIRECTORY_META_DATA is false
provider.metaData.putBoolean("android.content.ContactDirectory", false);
assertFalse(ContactDirectoryManager.isDirectoryProvider(provider));
// CONTACT_DIRECTORY_META_DATA is true
provider.metaData.putBoolean("android.content.ContactDirectory", true);
assertTrue(ContactDirectoryManager.isDirectoryProvider(provider));
}
public void testScanAllProviders() throws Exception {
mPackageManager.setInstalledPackages(
Lists.newArrayList(
createProviderPackage("test.package1", "authority1"),
createProviderPackage("test.package2", "authority2"),
createPackage("test.packageX", "authorityX", false)));
MockContactDirectoryProvider provider1 = (MockContactDirectoryProvider) addProvider(
MockContactDirectoryProvider.class, "authority1");
MatrixCursor response1 = provider1.createResponseCursor();
addDirectoryRow(response1, "account-name1", "account-type1", "display-name1", 1,
Directory.EXPORT_SUPPORT_NONE, Directory.SHORTCUT_SUPPORT_NONE,
Directory.PHOTO_SUPPORT_FULL_SIZE_ONLY);
addDirectoryRow(response1, "account-name2", "account-type2", "display-name2", 2,
Directory.EXPORT_SUPPORT_ANY_ACCOUNT, Directory.SHORTCUT_SUPPORT_DATA_ITEMS_ONLY,
Directory.PHOTO_SUPPORT_THUMBNAIL_ONLY);
MockContactDirectoryProvider provider2 = (MockContactDirectoryProvider) addProvider(
MockContactDirectoryProvider.class, "authority2");
MatrixCursor response2 = provider2.createResponseCursor();
addDirectoryRow(response2, "account-name3", "account-type3", "display-name3", 3,
Directory.EXPORT_SUPPORT_SAME_ACCOUNT_ONLY, Directory.SHORTCUT_SUPPORT_FULL,
Directory.PHOTO_SUPPORT_FULL);
mDirectoryManager.scanAllPackages();
Cursor cursor = mResolver.query(Directory.CONTENT_URI, null, null, null, null);
assertEquals(5, cursor.getCount());
cursor.moveToPosition(2);
assertDirectoryRow(cursor, "test.package1", "authority1", "account-name1", "account-type1",
"display-name1", 1, Directory.EXPORT_SUPPORT_NONE, Directory.SHORTCUT_SUPPORT_NONE,
Directory.PHOTO_SUPPORT_FULL_SIZE_ONLY);
cursor.moveToNext();
assertDirectoryRow(cursor, "test.package1", "authority1", "account-name2", "account-type2",
"display-name2", 2, Directory.EXPORT_SUPPORT_ANY_ACCOUNT,
Directory.SHORTCUT_SUPPORT_DATA_ITEMS_ONLY, Directory.PHOTO_SUPPORT_THUMBNAIL_ONLY);
cursor.moveToNext();
assertDirectoryRow(cursor, "test.package2", "authority2", "account-name3", "account-type3",
"display-name3", 3, Directory.EXPORT_SUPPORT_SAME_ACCOUNT_ONLY,
Directory.SHORTCUT_SUPPORT_FULL, Directory.PHOTO_SUPPORT_FULL);
cursor.close();
}
public void testPackageInstalled() throws Exception {
mPackageManager.setInstalledPackages(
Lists.newArrayList(createProviderPackage("test.package1", "authority1"),
createPackage("test.packageX", "authorityX", false)));
MockContactDirectoryProvider provider1 = (MockContactDirectoryProvider) addProvider(
MockContactDirectoryProvider.class, "authority1");
MatrixCursor response1 = provider1.createResponseCursor();
addDirectoryRow(response1, "account-name1", "account-type1", "display-name1", 1,
Directory.EXPORT_SUPPORT_NONE, Directory.SHORTCUT_SUPPORT_NONE,
Directory.PHOTO_SUPPORT_FULL);
mDirectoryManager.scanAllPackages();
// At this point the manager has discovered a single directory (plus two
// standard ones).
Cursor cursor = mResolver.query(Directory.CONTENT_URI, null, null, null, null);
assertEquals(3, cursor.getCount());
cursor.close();
// Pretend to install another package
MockContactDirectoryProvider provider2 = (MockContactDirectoryProvider) addProvider(
MockContactDirectoryProvider.class, "authority2");
MatrixCursor response2 = provider2.createResponseCursor();
addDirectoryRow(response2, "account-name3", "account-type3", "display-name3", 3,
Directory.EXPORT_SUPPORT_SAME_ACCOUNT_ONLY, Directory.SHORTCUT_SUPPORT_FULL,
Directory.PHOTO_SUPPORT_FULL);
mPackageManager.getInstalledPackages(0).add(
createProviderPackage("test.package2", "authority2"));
mProvider.onPackageChanged("test.package2");
cursor = mResolver.query(Directory.CONTENT_URI, null, null, null, null);
assertEquals(4, cursor.getCount());
cursor.moveToPosition(2);
assertDirectoryRow(cursor, "test.package1", "authority1", "account-name1", "account-type1",
"display-name1", 1, Directory.EXPORT_SUPPORT_NONE, Directory.SHORTCUT_SUPPORT_NONE,
Directory.PHOTO_SUPPORT_FULL);
cursor.moveToNext();
assertDirectoryRow(cursor, "test.package2", "authority2", "account-name3", "account-type3",
"display-name3", 3, Directory.EXPORT_SUPPORT_SAME_ACCOUNT_ONLY,
Directory.SHORTCUT_SUPPORT_FULL, Directory.PHOTO_SUPPORT_FULL);
cursor.close();
}
public void testPackageUninstalled() throws Exception {
mPackageManager.setInstalledPackages(
Lists.newArrayList(
createProviderPackage("test.package1", "authority1"),
createProviderPackage("test.package2", "authority2"),
createPackage("test.packageX", "authorityX", false)));
MockContactDirectoryProvider provider1 = (MockContactDirectoryProvider) addProvider(
MockContactDirectoryProvider.class, "authority1");
MatrixCursor response1 = provider1.createResponseCursor();
addDirectoryRow(response1, "account-name1", "account-type1", "display-name1", 1,
Directory.EXPORT_SUPPORT_NONE, Directory.SHORTCUT_SUPPORT_NONE,
Directory.PHOTO_SUPPORT_NONE);
MockContactDirectoryProvider provider2 = (MockContactDirectoryProvider) addProvider(
MockContactDirectoryProvider.class, "authority2");
MatrixCursor response2 = provider2.createResponseCursor();
addDirectoryRow(response2, "account-name3", "account-type3", "display-name3", 3,
Directory.EXPORT_SUPPORT_SAME_ACCOUNT_ONLY, Directory.SHORTCUT_SUPPORT_FULL,
Directory.PHOTO_SUPPORT_FULL);
mDirectoryManager.scanAllPackages();
// At this point the manager has discovered two custom directories.
Cursor cursor = mResolver.query(Directory.CONTENT_URI, null, null, null, null);
assertEquals(4, cursor.getCount());
cursor.close();
// Pretend to uninstall one of the packages
mPackageManager.getInstalledPackages(0).remove(1);
mProvider.onPackageChanged("test.package2");
cursor = mResolver.query(Directory.CONTENT_URI, null, null, null, null);
assertEquals(3, cursor.getCount());
cursor.moveToPosition(2);
assertDirectoryRow(cursor, "test.package1", "authority1", "account-name1", "account-type1",
"display-name1", 1, Directory.EXPORT_SUPPORT_NONE, Directory.SHORTCUT_SUPPORT_NONE,
Directory.PHOTO_SUPPORT_NONE);
cursor.close();
}
public void testPackageReplaced() throws Exception {
mPackageManager.setInstalledPackages(
Lists.newArrayList(
createProviderPackage("test.package1", "authority1"),
createProviderPackage("test.package2", "authority2"),
createPackage("test.packageX", "authorityX", false)));
MockContactDirectoryProvider provider1 = (MockContactDirectoryProvider) addProvider(
MockContactDirectoryProvider.class, "authority1");
MatrixCursor response1 = provider1.createResponseCursor();
addDirectoryRow(response1, "account-name1", "account-type1", "display-name1", 1,
Directory.EXPORT_SUPPORT_NONE, Directory.SHORTCUT_SUPPORT_NONE,
Directory.PHOTO_SUPPORT_NONE);
MockContactDirectoryProvider provider2 = (MockContactDirectoryProvider) addProvider(
MockContactDirectoryProvider.class, "authority2");
MatrixCursor response2 = provider2.createResponseCursor();
addDirectoryRow(response2, "account-name3", "account-type3", "display-name3", 3,
Directory.EXPORT_SUPPORT_SAME_ACCOUNT_ONLY, Directory.SHORTCUT_SUPPORT_FULL,
Directory.PHOTO_SUPPORT_FULL);
mDirectoryManager.scanAllPackages();
// At this point the manager has discovered two custom directories.
Cursor cursor = mResolver.query(Directory.CONTENT_URI, null, null, null, null);
assertEquals(4, cursor.getCount());
cursor.close();
// Pretend to replace the package with a different provider inside
MatrixCursor response3 = provider2.createResponseCursor();
addDirectoryRow(response3, "account-name4", "account-type4", "display-name4", 4,
Directory.EXPORT_SUPPORT_NONE, Directory.SHORTCUT_SUPPORT_NONE,
Directory.PHOTO_SUPPORT_NONE);
mProvider.onPackageChanged("test.package2");
cursor = mResolver.query(Directory.CONTENT_URI, null, null, null, null);
assertEquals(4, cursor.getCount());
cursor.moveToPosition(2);
assertDirectoryRow(cursor, "test.package1", "authority1", "account-name1", "account-type1",
"display-name1", 1, Directory.EXPORT_SUPPORT_NONE, Directory.SHORTCUT_SUPPORT_NONE,
Directory.PHOTO_SUPPORT_NONE);
cursor.moveToNext();
assertDirectoryRow(cursor, "test.package2", "authority2", "account-name4", "account-type4",
"display-name4", 4, Directory.EXPORT_SUPPORT_NONE, Directory.SHORTCUT_SUPPORT_NONE,
Directory.PHOTO_SUPPORT_NONE);
cursor.close();
}
/**
* Tests if the manager works correctly when the package name for a directory is changed
* (on system update).
*/
public void testPackageRenamed() throws Exception {
mPackageManager.setInstalledPackages(
Lists.newArrayList(
createProviderPackage("test.package1", "authority1"),
createProviderPackage("test.package2", "authority2"),
createPackage("test.packageX", "authorityX", false)));
MockContactDirectoryProvider provider1 = (MockContactDirectoryProvider) addProvider(
MockContactDirectoryProvider.class, "authority1");
MatrixCursor response1 = provider1.createResponseCursor();
addDirectoryRow(response1, "account-name1", "account-type1", "display-name1", 1,
Directory.EXPORT_SUPPORT_NONE, Directory.SHORTCUT_SUPPORT_NONE,
Directory.PHOTO_SUPPORT_NONE);
MockContactDirectoryProvider provider2 = (MockContactDirectoryProvider) addProvider(
MockContactDirectoryProvider.class, "authority2");
MatrixCursor response2 = provider2.createResponseCursor();
addDirectoryRow(response2, "account-name2", "account-type2", "display-name2", 2,
Directory.EXPORT_SUPPORT_SAME_ACCOUNT_ONLY, Directory.SHORTCUT_SUPPORT_FULL,
Directory.PHOTO_SUPPORT_FULL);
mDirectoryManager.scanAllPackages();
// At this point the manager has discovered two custom directories.
Cursor cursor = mResolver.query(Directory.CONTENT_URI, null, null, null, null);
assertEquals(4, cursor.getCount());
cursor.close();
// Pretend to rename the package name of a package on system update.
PackageInfo info = mPackageManager.getInstalledPackages(0).get(1);
info.packageName = "test.package3";
info.providers[0].packageName = "test.package3";
MatrixCursor response3 = provider2.createResponseCursor();
// Change resource id.
addDirectoryRow(response3, "account-name2", "account-type2", "display-name2", 3,
Directory.EXPORT_SUPPORT_SAME_ACCOUNT_ONLY, Directory.SHORTCUT_SUPPORT_FULL,
Directory.PHOTO_SUPPORT_FULL);
// When this happens on reboot, scanAllPackages() is called instead of onPackageChanged()
// (as part of ContactsProvider2 initialization).
// Accounts won't be affected so false should be passed here.
mDirectoryManager.scanAllPackages(false);
cursor = mResolver.query(Directory.CONTENT_URI, null, null, null, null);
// We should have columns for default, local_invisible, test.package1, and test.package3.
// The row for test.package2 should not remain.
assertEquals(4, cursor.getCount());
cursor.moveToPosition(2);
assertDirectoryRow(cursor, "test.package1", "authority1", "account-name1", "account-type1",
"display-name1", 1, Directory.EXPORT_SUPPORT_NONE, Directory.SHORTCUT_SUPPORT_NONE,
Directory.PHOTO_SUPPORT_NONE);
cursor.moveToNext();
assertDirectoryRow(cursor, "test.package3", "authority2", "account-name2", "account-type2",
"display-name2", 3, Directory.EXPORT_SUPPORT_SAME_ACCOUNT_ONLY,
Directory.SHORTCUT_SUPPORT_FULL, Directory.PHOTO_SUPPORT_FULL);
cursor.close();
}
public void testAccountRemoval() throws Exception {
mPackageManager.setInstalledPackages(
Lists.newArrayList(
createProviderPackage("test.package1", "authority1"),
createProviderPackage("test.package2", "authority2"),
createPackage("test.packageX", "authorityX", false)));
MockContactDirectoryProvider provider1 = (MockContactDirectoryProvider) addProvider(
MockContactDirectoryProvider.class, "authority1");
Account[] accounts = new Account[]{
new Account("account-name1", "account-type1"),
new Account("account-name2", "account-type2")};
mActor.setAccounts(accounts);
((ContactsProvider2)getProvider()).onAccountsUpdated(accounts);
MatrixCursor response1 = provider1.createResponseCursor();
addDirectoryRow(response1, "account-name1", "account-type1", "display-name1", 1,
Directory.EXPORT_SUPPORT_NONE, Directory.SHORTCUT_SUPPORT_NONE,
Directory.PHOTO_SUPPORT_NONE);
addDirectoryRow(response1, "account-name2", "account-type2", "display-name2", 2,
Directory.EXPORT_SUPPORT_ANY_ACCOUNT, Directory.SHORTCUT_SUPPORT_DATA_ITEMS_ONLY,
Directory.PHOTO_SUPPORT_FULL_SIZE_ONLY);
mDirectoryManager.scanAllPackages();
accounts = new Account[]{new Account("account-name1", "account-type1")};
mActor.setAccounts(accounts);
((ContactsProvider2)getProvider()).onAccountsUpdated(accounts);
Cursor cursor = mResolver.query(Directory.CONTENT_URI, null, null, null, null);
assertEquals(3, cursor.getCount());
cursor.moveToPosition(2);
assertDirectoryRow(cursor, "test.package1", "authority1", "account-name1", "account-type1",
"display-name1", 1, Directory.EXPORT_SUPPORT_NONE, Directory.SHORTCUT_SUPPORT_NONE,
Directory.PHOTO_SUPPORT_NONE);
cursor.close();
}
public void testNotifyDirectoryChange() throws Exception {
mPackageManager.setInstalledPackages(
Lists.newArrayList(createProviderPackage("test.package1", "authority1"),
createPackage("test.packageX", "authorityX", false)));
MockContactDirectoryProvider provider1 = (MockContactDirectoryProvider) addProvider(
MockContactDirectoryProvider.class, "authority1");
MatrixCursor response1 = provider1.createResponseCursor();
addDirectoryRow(response1, "account-name1", "account-type1", "display-name1", 1,
Directory.EXPORT_SUPPORT_NONE, Directory.SHORTCUT_SUPPORT_NONE,
Directory.PHOTO_SUPPORT_NONE);
mDirectoryManager.scanAllPackages();
// Pretend to replace the package with a different provider inside
MatrixCursor response2 = provider1.createResponseCursor();
addDirectoryRow(response2, "account-name2", "account-type2", "display-name2", 2,
Directory.EXPORT_SUPPORT_ANY_ACCOUNT, Directory.SHORTCUT_SUPPORT_FULL,
Directory.PHOTO_SUPPORT_FULL);
ContactsContract.Directory.notifyDirectoryChange(mResolver);
Cursor cursor = mResolver.query(Directory.CONTENT_URI, null, null, null, null);
assertEquals(3, cursor.getCount());
cursor.moveToPosition(2);
assertDirectoryRow(cursor, "test.package1", "authority1", "account-name2", "account-type2",
"display-name2", 2, Directory.EXPORT_SUPPORT_ANY_ACCOUNT,
Directory.SHORTCUT_SUPPORT_FULL, Directory.PHOTO_SUPPORT_FULL);
cursor.close();
}
public void testForwardingToDirectoryProvider() throws Exception {
mPackageManager.setInstalledPackages(
Lists.newArrayList(createProviderPackage("test.package1", "authority1"),
createPackage("test.packageX", "authorityX", false)));
MockContactDirectoryProvider provider1 = (MockContactDirectoryProvider) addProvider(
MockContactDirectoryProvider.class, "authority1");
MatrixCursor response1 = provider1.createResponseCursor();
addDirectoryRow(response1, "account-name1", "account-type1", "display-name1", 1,
Directory.EXPORT_SUPPORT_NONE, Directory.SHORTCUT_SUPPORT_NONE,
Directory.PHOTO_SUPPORT_NONE);
mDirectoryManager.scanAllPackages();
Cursor cursor = mResolver.query(
Directory.CONTENT_URI, new String[] { Directory._ID }, null, null, null);
cursor.moveToPosition(2);
long directoryId = cursor.getLong(0);
cursor.close();
Uri contentUri = Contacts.CONTENT_URI.buildUpon().appendQueryParameter(
ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(directoryId)).build();
// The request should be forwarded to TestProvider, which will simply
// package arguments and return them to us for verification
cursor = mResolver.query(contentUri,
new String[]{"f1", "f2"}, "query", new String[]{"s1", "s2"}, "so");
assertNotNull(cursor);
assertEquals(1, cursor.getCount());
cursor.moveToFirst();
assertEquals("[f1, f2]", cursor.getString(cursor.getColumnIndex("projection")));
assertEquals("query", cursor.getString(cursor.getColumnIndex("selection")));
assertEquals("[s1, s2]", cursor.getString(cursor.getColumnIndex("selectionArgs")));
assertEquals("so", cursor.getString(cursor.getColumnIndex("sortOrder")));
assertEquals("account-name1", cursor.getString(cursor.getColumnIndex("accountName")));
assertEquals("account-type1", cursor.getString(cursor.getColumnIndex("accountType")));
cursor.close();
}
public void testProjectionPopulated() throws Exception {
mPackageManager.setInstalledPackages(
Lists.newArrayList(createProviderPackage("test.package1", "authority1"),
createPackage("test.packageX", "authorityX", false)));
MockContactDirectoryProvider provider1 = (MockContactDirectoryProvider) addProvider(
MockContactDirectoryProvider.class, "authority1");
MatrixCursor response1 = provider1.createResponseCursor();
addDirectoryRow(response1, "account-name1", "account-type1", "display-name1", 1,
Directory.EXPORT_SUPPORT_NONE, Directory.SHORTCUT_SUPPORT_NONE,
Directory.PHOTO_SUPPORT_NONE);
mDirectoryManager.scanAllPackages();
Cursor cursor = mResolver.query(
Directory.CONTENT_URI, new String[] { Directory._ID }, null, null, null);
cursor.moveToPosition(2);
long directoryId = cursor.getLong(0);
cursor.close();
Uri contentUri = AggregationExceptions.CONTENT_URI.buildUpon().appendQueryParameter(
ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(directoryId)).build();
// The request should be forwarded to TestProvider, which will return an empty cursor
// but the projection should be correctly populated by ContactProvider
assertProjection(contentUri, new String[]{
AggregationExceptionColumns._ID,
AggregationExceptions.TYPE,
AggregationExceptions.RAW_CONTACT_ID1,
AggregationExceptions.RAW_CONTACT_ID2,
});
}
/**
* Test {@link ContactDirectoryManager#getDirectoryProviderPackages} with the actual
* package manager, and see if it returns the google sync package.
*/
public void testGetDirectoryProviderPackages() {
final PackageManager pm = getContext().getPackageManager();
final String googleSync = "com.google.android.syncadapters.contacts";
// Skip if the package is not installed.
try {
pm.getPackageInfo(googleSync, 0);
} catch (NameNotFoundException e) {
Log.w(TAG, googleSync + " not installed. Skipping...");
return;
}
// If installed, getDirectoryProviderPackages() should return it.
assertTrue(ContactDirectoryManager.getDirectoryProviderPackages(pm).contains(googleSync));
}
protected PackageInfo createProviderPackage(String packageName, String authority) {
return createPackage(packageName, authority, true);
}
protected PackageInfo createPackage(String packageName, String authority,
boolean isDirectoryProvider) {
PackageInfo providerPackage = new PackageInfo();
providerPackage.packageName = packageName;
ProviderInfo providerInfo = new ProviderInfo();
providerInfo.packageName = providerPackage.packageName;
providerInfo.authority = authority;
if (isDirectoryProvider) {
providerInfo.metaData = new Bundle();
providerInfo.metaData.putBoolean("android.content.ContactDirectory", true);
}
providerPackage.providers = new ProviderInfo[] { providerInfo };
return providerPackage;
}
protected void addDirectoryRow(MatrixCursor cursor, String accountName, String accountType,
String displayName, int typeResourceId, int exportSupport, int shortcutSupport,
int photoSupport) {
Object[] row = new Object[cursor.getColumnCount()];
row[cursor.getColumnIndex(Directory.ACCOUNT_NAME)] = accountName;
row[cursor.getColumnIndex(Directory.ACCOUNT_TYPE)] = accountType;
row[cursor.getColumnIndex(Directory.DISPLAY_NAME)] = displayName;
row[cursor.getColumnIndex(Directory.TYPE_RESOURCE_ID)] = typeResourceId;
row[cursor.getColumnIndex(Directory.EXPORT_SUPPORT)] = exportSupport;
row[cursor.getColumnIndex(Directory.SHORTCUT_SUPPORT)] = shortcutSupport;
row[cursor.getColumnIndex(Directory.PHOTO_SUPPORT)] = photoSupport;
cursor.addRow(row);
}
protected void assertDirectoryRow(Cursor cursor, String packageName, String authority,
String accountName, String accountType, String displayName, int typeResourceId,
int exportSupport, int shortcutSupport, int photoSupport) {
ContentValues values = new ContentValues();
values.put(Directory.PACKAGE_NAME, packageName);
values.put(Directory.DIRECTORY_AUTHORITY, authority);
values.put(Directory.ACCOUNT_NAME, accountName);
values.put(Directory.ACCOUNT_TYPE, accountType);
values.put(Directory.DISPLAY_NAME, displayName);
values.put(Directory.TYPE_RESOURCE_ID, typeResourceId);
values.put(Directory.EXPORT_SUPPORT, exportSupport);
values.put(Directory.SHORTCUT_SUPPORT, shortcutSupport);
values.put(Directory.PHOTO_SUPPORT, photoSupport);
assertCursorValues(cursor, values);
}
}