diff options
author | Daisuke Miyakawa <dmiyakawa@google.com> | 2011-06-01 21:48:29 -0700 |
---|---|---|
committer | Daisuke Miyakawa <dmiyakawa@google.com> | 2011-06-02 20:59:13 -0700 |
commit | 37f0bdbb0a99b12abcc319f49a2caa5ab648add0 (patch) | |
tree | dc1cd97c05c18c8b7158814995f241f35e5229b4 /tests | |
parent | 17a22fae02931ae536f35293ca13a8de53439f72 (diff) | |
download | packages_providers_ContactsProvider-37f0bdbb0a99b12abcc319f49a2caa5ab648add0.zip packages_providers_ContactsProvider-37f0bdbb0a99b12abcc319f49a2caa5ab648add0.tar.gz packages_providers_ContactsProvider-37f0bdbb0a99b12abcc319f49a2caa5ab648add0.tar.bz2 |
Remove stale rows in directory table.
When upgrading from mr0 to mr2, we encounter some crashes on
email compose. It is because BaseEmailAddressAdapter uses directory
API, and the API has wrong resouce id in it. We need to remove
rows which don't correspond to any directory provider.
Bug: 4479240
Change-Id: Ife87a4a2ccad5d2a784eb5bd6ca56061a22c1787
Diffstat (limited to 'tests')
-rw-r--r-- | tests/src/com/android/providers/contacts/ContactDirectoryManagerTest.java | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/tests/src/com/android/providers/contacts/ContactDirectoryManagerTest.java b/tests/src/com/android/providers/contacts/ContactDirectoryManagerTest.java index 9ebc3d9..a0941a3 100644 --- a/tests/src/com/android/providers/contacts/ContactDirectoryManagerTest.java +++ b/tests/src/com/android/providers/contacts/ContactDirectoryManagerTest.java @@ -78,6 +78,8 @@ public class ContactDirectoryManagerTest extends BaseContactsProvider2Test { 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( @@ -309,6 +311,72 @@ public class ContactDirectoryManagerTest extends BaseContactsProvider2Test { 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"))); + + 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( |