diff options
author | Marcus Hagerott <mhagerott@google.com> | 2021-03-24 17:10:14 -0700 |
---|---|---|
committer | Marcus Hagerott <mhagerott@google.com> | 2021-04-08 12:45:34 -0700 |
commit | bb9032379c2da8e360fd6d1c94e5df3dd0ac07a0 (patch) | |
tree | 39d273f22d7eef4bcb98cfba59ca338ab93dd10a /tests/src/com/android | |
parent | 1a288acf42307b4cce6c8387c60b193d508dc687 (diff) | |
download | ContactsProvider-bb9032379c2da8e360fd6d1c94e5df3dd0ac07a0.tar.gz |
Consolidate settings and accounts tables
This is primarily to allow settings for the local account.
Test: atest ContactsProviderTests CtsContactsProviderTestCases
Bug: 166446448
Change-Id: I3589b55c202346986bead0e3b1c290552b33312b
Diffstat (limited to 'tests/src/com/android')
3 files changed, 190 insertions, 15 deletions
diff --git a/tests/src/com/android/providers/contacts/BaseContactsProvider2Test.java b/tests/src/com/android/providers/contacts/BaseContactsProvider2Test.java index 816d10d7..971656b5 100644 --- a/tests/src/com/android/providers/contacts/BaseContactsProvider2Test.java +++ b/tests/src/com/android/providers/contacts/BaseContactsProvider2Test.java @@ -219,12 +219,12 @@ public abstract class BaseContactsProvider2Test extends PhotoLoadingTestCase { return ContentUris.parseId(mResolver.insert(uri, values)); } - protected void createSettings(Account account, String shouldSync, String ungroupedVisible) { - createSettings(new AccountWithDataSet(account.name, account.type, null), + protected Uri createSettings(Account account, String shouldSync, String ungroupedVisible) { + return createSettings(new AccountWithDataSet(account.name, account.type, null), shouldSync, ungroupedVisible); } - protected void createSettings(AccountWithDataSet account, String shouldSync, + protected Uri createSettings(AccountWithDataSet account, String shouldSync, String ungroupedVisible) { ContentValues values = new ContentValues(); values.put(Settings.ACCOUNT_NAME, account.getAccountName()); @@ -234,7 +234,7 @@ public abstract class BaseContactsProvider2Test extends PhotoLoadingTestCase { } values.put(Settings.SHOULD_SYNC, shouldSync); values.put(Settings.UNGROUPED_VISIBLE, ungroupedVisible); - mResolver.insert(Settings.CONTENT_URI, values); + return mResolver.insert(Settings.CONTENT_URI, values); } protected Uri insertOrganization(long rawContactId, ContentValues values) { diff --git a/tests/src/com/android/providers/contacts/ContactsDatabaseHelperUpgradeTest.java b/tests/src/com/android/providers/contacts/ContactsDatabaseHelperUpgradeTest.java index d50a2922..b3a4c53d 100644 --- a/tests/src/com/android/providers/contacts/ContactsDatabaseHelperUpgradeTest.java +++ b/tests/src/com/android/providers/contacts/ContactsDatabaseHelperUpgradeTest.java @@ -33,7 +33,6 @@ import android.provider.ContactsContract.Groups; import android.provider.ContactsContract.PhotoFiles; import android.provider.ContactsContract.PinnedPositions; import android.provider.ContactsContract.RawContacts; -import android.provider.ContactsContract.Settings; import android.provider.ContactsContract.StatusUpdates; import android.provider.ContactsContract.StreamItemPhotos; import android.provider.ContactsContract.StreamItems; @@ -122,6 +121,7 @@ public class ContactsDatabaseHelperUpgradeTest extends BaseDatabaseHelperUpgrade int oldVersion = 1108; oldVersion = upgradeTo1109(oldVersion); + oldVersion = upgradeTo1600(oldVersion); oldVersion = upgrade(oldVersion, ContactsDatabaseHelper.DATABASE_VERSION); assertEquals(ContactsDatabaseHelper.DATABASE_VERSION, oldVersion); assertDatabaseStructureSameAsList(TABLE_LIST, /* isNewDatabase =*/ false); @@ -192,6 +192,57 @@ public class ContactsDatabaseHelperUpgradeTest extends BaseDatabaseHelperUpgrade return MY_VERSION; } + private int upgradeTo1600(int upgradeFrom) { + final int MY_VERSION = 1600; + + executeSqlFromAssetFile(getTestContext(), mDb, "upgradeTest/pre_upgrade1600.sql"); + + mHelper.onUpgrade(mDb, upgradeFrom, MY_VERSION); + + try (Cursor c = mDb.rawQuery("select " + + "_id, account_name, account_type, data_set, ungrouped_visible, should_sync " + + "from accounts order by _id", null)) { + BaseContactsProvider2Test.assertCursorValuesOrderly(c, + cv(Contacts._ID, 1, + "account_name", null, + "account_type", null, + "data_set", null, + "ungrouped_visible", 1, + "should_sync", 0 + ), + cv(Contacts._ID, 2, + "account_name", "visible", + "account_type", "type1", + "data_set", null, + "ungrouped_visible", 1, + "should_sync", 1 + ), + cv(Contacts._ID, 3, + "account_name", "visible", + "account_type", "type1", + "data_set", "ds_not_visible", + "ungrouped_visible", 0, + "should_sync", 1 + ), + cv(Contacts._ID, 4, + "account_name", "not_syncable", + "account_type", "type1", + "data_set", null, + "ungrouped_visible", 0, + "should_sync", 0 + ), + cv(Contacts._ID, 5, + "account_name", "no_settings", + "account_type", "type2", + "data_set", null, + "ungrouped_visible", 0, + "should_sync", 1 + )); + } + + return MY_VERSION; + } + private int upgrade(int upgradeFrom, int upgradeTo) { if (upgradeFrom < upgradeTo) { mHelper.onUpgrade(mDb, upgradeFrom, upgradeTo); @@ -222,6 +273,8 @@ public class ContactsDatabaseHelperUpgradeTest extends BaseDatabaseHelperUpgrade new TableColumn(AccountsColumns.DATA_SET, TEXT, false, null), new TableColumn(AccountsColumns.SIM_SLOT_INDEX, INTEGER, false, null), new TableColumn(AccountsColumns.SIM_EF_TYPE, INTEGER, false, null), + new TableColumn(AccountsColumns.UNGROUPED_VISIBLE, INTEGER, true, "0"), + new TableColumn(AccountsColumns.SHOULD_SYNC, INTEGER, true, "1") }; private static final TableColumn[] CONTACTS_COLUMNS = new TableColumn[] { @@ -417,14 +470,6 @@ public class ContactsDatabaseHelperUpgradeTest extends BaseDatabaseHelperUpgrade new TableColumn(AggregationExceptions.RAW_CONTACT_ID2, INTEGER, false, null), }; - private static final TableColumn[] SETTINGS_COLUMNS = new TableColumn[] { - new TableColumn(Settings.ACCOUNT_NAME, STRING, true, null), - new TableColumn(Settings.ACCOUNT_TYPE, STRING, true, null), - new TableColumn(Settings.DATA_SET, STRING, false, null), - new TableColumn(Settings.UNGROUPED_VISIBLE, INTEGER, true, "0"), - new TableColumn(Settings.SHOULD_SYNC, INTEGER, true, "1"), - }; - private static final TableColumn[] VISIBLE_CONTACTS_COLUMNS = new TableColumn[] { new TableColumn(Contacts._ID, INTEGER, false, null), }; @@ -567,7 +612,6 @@ public class ContactsDatabaseHelperUpgradeTest extends BaseDatabaseHelperUpgrade new TableListEntry(Tables.NICKNAME_LOOKUP, NICKNAME_LOOKUP_COLUMNS), new TableListEntry(Tables.GROUPS, GROUPS_COLUMNS), new TableListEntry(Tables.AGGREGATION_EXCEPTIONS, AGGREGATION_EXCEPTIONS_COLUMNS), - new TableListEntry(Tables.SETTINGS, SETTINGS_COLUMNS), new TableListEntry(Tables.VISIBLE_CONTACTS, VISIBLE_CONTACTS_COLUMNS), new TableListEntry(Tables.DEFAULT_DIRECTORY, DEFAULT_DIRECTORY_COLUMNS), new TableListEntry("calls", CALLS_COLUMNS, false), diff --git a/tests/src/com/android/providers/contacts/ContactsProvider2Test.java b/tests/src/com/android/providers/contacts/ContactsProvider2Test.java index 031d2172..0bcab462 100644 --- a/tests/src/com/android/providers/contacts/ContactsProvider2Test.java +++ b/tests/src/com/android/providers/contacts/ContactsProvider2Test.java @@ -77,6 +77,7 @@ import android.util.ArraySet; import com.android.internal.util.ArrayUtils; import com.android.providers.contacts.ContactsActor.AlteringUserContext; import com.android.providers.contacts.ContactsActor.MockUserManager; +import com.android.providers.contacts.ContactsDatabaseHelper.AccountsColumns; import com.android.providers.contacts.ContactsDatabaseHelper.AggregationExceptionColumns; import com.android.providers.contacts.ContactsDatabaseHelper.ContactsColumns; import com.android.providers.contacts.ContactsDatabaseHelper.DataUsageStatColumns; @@ -84,6 +85,7 @@ import com.android.providers.contacts.ContactsDatabaseHelper.DbProperties; import com.android.providers.contacts.ContactsDatabaseHelper.PresenceColumns; import com.android.providers.contacts.ContactsDatabaseHelper.RawContactsColumns; import com.android.providers.contacts.ContactsDatabaseHelper.Tables; +import com.android.providers.contacts.tests.R; import com.android.providers.contacts.testutil.CommonDatabaseUtils; import com.android.providers.contacts.testutil.ContactUtil; import com.android.providers.contacts.testutil.DataUtil; @@ -91,7 +93,6 @@ import com.android.providers.contacts.testutil.DatabaseAsserts; import com.android.providers.contacts.testutil.DeletedContactUtil; import com.android.providers.contacts.testutil.RawContactUtil; import com.android.providers.contacts.testutil.TestUtil; -import com.android.providers.contacts.tests.R; import com.android.providers.contacts.util.NullContentProvider; import com.android.providers.contacts.util.UserUtils; @@ -4242,6 +4243,136 @@ public class ContactsProvider2Test extends BaseContactsProvider2Test { new String[] {"c", "d", "plus"}, Settings.SHOULD_SYNC, "0"); } + public void testSettingsDeletion() { + Account account = new Account("a", "b"); + Uri settingUri = createSettings(account, "0", "1"); + long rawContactId = RawContactUtil.createRawContact(mResolver, account); + + int count = mResolver.delete(settingUri, null, null); + + // Settings cannot be deleted when there are still raw contacts for the account. + assertEquals(0, count); + + assertStoredValue(Settings.CONTENT_URI, + Settings.ACCOUNT_NAME + "= ? AND " + Settings.ACCOUNT_TYPE + "= ?", + new String[] {"a", "b"}, Settings.UNGROUPED_VISIBLE, "1"); + + RawContactUtil.delete(mResolver, rawContactId, true); + + count = mResolver.delete(settingUri, null, null); + + assertEquals(1, count); + assertRowCount(0, Settings.CONTENT_URI, null, null); + } + + public void testSettingsUpdate() { + Account account1 = new Account("a", "b"); + Account account2 = new Account("c", "d"); + Account account3 = new Account("e", "f"); + createSettings(account1, "0", "0"); + createSettings(account2, "0", "0"); + createSettings(account3, "0", "0"); + + ContentValues values = new ContentValues(); + values.put(Settings.UNGROUPED_VISIBLE, 1); + int count = mResolver.update(Settings.CONTENT_URI, values, null, null); + + assertEquals(3, count); + assertStoredValues(Settings.CONTENT_URI, + cv(Settings.UNGROUPED_VISIBLE, 1), + cv(Settings.UNGROUPED_VISIBLE, 1), + cv(Settings.UNGROUPED_VISIBLE, 1)); + + values.put(Settings.SHOULD_SYNC, 1); + count = mResolver.update(Settings.CONTENT_URI, values, + Settings.ACCOUNT_NAME + "=?", new String[] {"a"}); + + assertEquals(1, count); + assertStoredValues(Settings.CONTENT_URI, + cv(Settings.ACCOUNT_NAME, "a", + Settings.SHOULD_SYNC, 1), + cv(Settings.ACCOUNT_NAME, "c", + Settings.SHOULD_SYNC, 0), + cv(Settings.ACCOUNT_NAME, "e", + Settings.SHOULD_SYNC, 0)); + + values.clear(); + // Settings are stored in the accounts table but updates shouldn't be allowed to modify + // the other non-Settings columns. + values.put(Settings.ACCOUNT_NAME, "x"); + values.put(Settings.ACCOUNT_TYPE, "y"); + values.put(Settings.DATA_SET, "z"); + mResolver.update(Settings.CONTENT_URI, values, null, null); + + values.put(AccountsColumns.SIM_EF_TYPE, 1); + values.put(AccountsColumns.SIM_SLOT_INDEX, 1); + try { + mResolver.update(Settings.CONTENT_URI, values, null, null); + } catch (Exception e) { + // ignored. We just care that the update didn't change the data + } + + assertStoredValuesDb("SELECT * FROM " + Tables.ACCOUNTS, null, + cv( + Settings.ACCOUNT_NAME, "a", + Settings.ACCOUNT_TYPE, "b", + Settings.DATA_SET, null, + AccountsColumns.SIM_SLOT_INDEX, null, + AccountsColumns.SIM_EF_TYPE, null + ), + cv( + Settings.ACCOUNT_NAME, "c", + Settings.ACCOUNT_TYPE, "d", + Settings.DATA_SET, null, + AccountsColumns.SIM_SLOT_INDEX, null, + AccountsColumns.SIM_EF_TYPE, null + ), + cv( + Settings.ACCOUNT_NAME, "e", + Settings.ACCOUNT_TYPE, "f", + Settings.DATA_SET, null, + AccountsColumns.SIM_SLOT_INDEX, null, + AccountsColumns.SIM_EF_TYPE, null + )); + } + + public void testSettingsLocalAccount() { + AccountWithDataSet localAccount = AccountWithDataSet.LOCAL; + + // It's not possible to insert the local account directly into settings but it will be + // created automatically when a raw contact is created for it. + RawContactUtil.createRawContactWithAccountDataSet( + mResolver, localAccount.getAccountName(), + localAccount.getAccountType(), localAccount.getDataSet()); + + ContentValues values = new ContentValues(); + values.put(Settings.ACCOUNT_NAME, localAccount.getAccountName()); + values.put(Settings.ACCOUNT_TYPE, localAccount.getAccountType()); + values.put(Settings.DATA_SET, localAccount.getDataSet()); + ContentValues expectedValues = new ContentValues(values); + // The defaults for the local account are opposite of other accounts. + expectedValues.put(Settings.UNGROUPED_VISIBLE, "1"); + expectedValues.put(Settings.SHOULD_SYNC, "0"); + + assertStoredValues(Settings.CONTENT_URI, expectedValues); + + values.put(Settings.SHOULD_SYNC, 1); + values.put(Settings.UNGROUPED_VISIBLE, 0); + mResolver.update(Settings.CONTENT_URI, values, null, null); + + expectedValues.put(Settings.UNGROUPED_VISIBLE, "0"); + expectedValues.put(Settings.SHOULD_SYNC, "1"); + assertStoredValues(Settings.CONTENT_URI, expectedValues); + + // Empty strings should also be the local account. + values.put(Settings.ACCOUNT_NAME, ""); + values.put(Settings.ACCOUNT_TYPE, ""); + values.put(Settings.DATA_SET, ""); + mResolver.insert(Settings.CONTENT_URI, values); + + assertRowCount(1, Settings.CONTENT_URI, null, null); + } + public void testDisplayNameParsingWhenPartsUnspecified() { long rawContactId = RawContactUtil.createRawContact(mResolver); ContentValues values = new ContentValues(); |