summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Attwell <brianattwell@google.com>2015-01-28 12:12:10 -0800
committerBrian Attwell <brianattwell@google.com>2015-01-28 12:16:04 -0800
commitc44ee526c56d2f5e680cef24897cff3a922d6a2f (patch)
tree7f60ffd6681ad1180e77205ff35236eaeee1ec7a
parent75b452b88ad2841415a48e95706f538428ec200a (diff)
downloadpackages_providers_ContactsProvider-c44ee526c56d2f5e680cef24897cff3a922d6a2f.zip
packages_providers_ContactsProvider-c44ee526c56d2f5e680cef24897cff3a922d6a2f.tar.gz
packages_providers_ContactsProvider-c44ee526c56d2f5e680cef24897cff3a922d6a2f.tar.bz2
Additional change to IS_SUPER_PRIMARY
Noticed clearSuperPrimarySetting() sometimes clears all mimetypes's is_super_primary flag values sometimes, even mimetypes that aren't contained in both raw contacts. This doesn't appear to have been the intended behavior. Looks like a simple bug. Wrote a unit test and fixed the bug. Added a new method to DataUtil used inside the unit test. This method wasn't strictly necessary. But it is very useful in later CLs. (Part #2 or "Remove NAME_VERIFIED" series of CLs) Bug: 5080996 Bug: 18777272 Change-Id: I354ffe51ea64cc532387d7ba79fbb6d2389d662e
-rw-r--r--src/com/android/providers/contacts/aggregation/ContactAggregator.java7
-rw-r--r--tests/src/com/android/providers/contacts/aggregation/ContactAggregatorTest.java22
-rw-r--r--tests/src/com/android/providers/contacts/testutil/DataUtil.java14
3 files changed, 37 insertions, 6 deletions
diff --git a/src/com/android/providers/contacts/aggregation/ContactAggregator.java b/src/com/android/providers/contacts/aggregation/ContactAggregator.java
index ab87c7e..5c7858e 100644
--- a/src/com/android/providers/contacts/aggregation/ContactAggregator.java
+++ b/src/com/android/providers/contacts/aggregation/ContactAggregator.java
@@ -940,11 +940,8 @@ public class ContactAggregator {
" WHERE " + RawContacts.CONTACT_ID + "=?1)" +
" OR " + Data.RAW_CONTACT_ID + "=?2)";
- if (index > 0) {
- mimeTypeCondition.append(')');
- superPrimaryUpdateSql += mimeTypeCondition.toString();
- }
-
+ mimeTypeCondition.append(')');
+ superPrimaryUpdateSql += mimeTypeCondition.toString();
db.execSQL(superPrimaryUpdateSql, args);
}
diff --git a/tests/src/com/android/providers/contacts/aggregation/ContactAggregatorTest.java b/tests/src/com/android/providers/contacts/aggregation/ContactAggregatorTest.java
index 09ee207..9aecd13 100644
--- a/tests/src/com/android/providers/contacts/aggregation/ContactAggregatorTest.java
+++ b/tests/src/com/android/providers/contacts/aggregation/ContactAggregatorTest.java
@@ -1615,6 +1615,28 @@ public class ContactAggregatorTest extends BaseContactsProvider2Test {
assertSuperPrimary(ContentUris.parseId(uri_org2), false);
}
+ public void testAggregation_clearSuperPrimarySingleMimetype() {
+ // Setup: two raw contacts, each has a single name. One of the names is super primary.
+ long rawContactId1 = RawContactUtil.createRawContact(mResolver, ACCOUNT_1);
+ long rawContactId2 = RawContactUtil.createRawContact(mResolver, ACCOUNT_1);
+ final Uri uri = DataUtil.insertStructuredName(mResolver, rawContactId1, "name1",
+ null, null, /* isSuperPrimary = */ true);
+ final Uri uri2 = DataUtil.insertStructuredName(mResolver, rawContactId2, "name2",
+ null, null, /* isSuperPrimary = */ false);
+
+ // Sanity check.
+ assertStoredValue(uri, Data.IS_SUPER_PRIMARY, 1);
+ assertStoredValue(uri2, Data.IS_SUPER_PRIMARY, 0);
+
+ // Action: aggregate
+ setAggregationException(AggregationExceptions.TYPE_KEEP_TOGETHER, rawContactId1,
+ rawContactId2);
+
+ // Verify: super primary values are unchanged
+ assertStoredValue(uri, Data.IS_SUPER_PRIMARY, 1);
+ assertStoredValue(uri2, Data.IS_SUPER_PRIMARY, 0);
+ }
+
public void testNotAggregate_TooManyRawContactsInCandidate() {
long preId= 0;
for (int i = 0; i < ContactAggregator.AGGREGATION_CONTACT_SIZE_LIMIT; i++) {
diff --git a/tests/src/com/android/providers/contacts/testutil/DataUtil.java b/tests/src/com/android/providers/contacts/testutil/DataUtil.java
index 194e67d..1f4f35a 100644
--- a/tests/src/com/android/providers/contacts/testutil/DataUtil.java
+++ b/tests/src/com/android/providers/contacts/testutil/DataUtil.java
@@ -22,6 +22,7 @@ import android.content.ContentValues;
import android.net.Uri;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.StructuredName;
+import android.provider.ContactsContract.Data;
import android.test.mock.MockContentResolver;
/**
@@ -59,6 +60,13 @@ public class DataUtil {
public static Uri insertStructuredName(
ContentResolver resolver, long rawContactId, String givenName, String familyName,
String phoneticGiven) {
+ return insertStructuredName(resolver, rawContactId, givenName, familyName, phoneticGiven,
+ /* isSuperPrimary = true */ false);
+ }
+
+ public static Uri insertStructuredName(
+ ContentResolver resolver, long rawContactId, String givenName, String familyName,
+ String phoneticGiven, boolean isSuperPrimary) {
ContentValues values = new ContentValues();
StringBuilder sb = new StringBuilder();
if (givenName != null) {
@@ -79,7 +87,11 @@ public class DataUtil {
if (phoneticGiven != null) {
values.put(StructuredName.PHONETIC_GIVEN_NAME, phoneticGiven);
}
+ if (isSuperPrimary) {
+ values.put(Data.IS_PRIMARY, 1);
+ values.put(Data.IS_SUPER_PRIMARY, 1);
+ }
return insertStructuredName(resolver, rawContactId, values);
}
-}
+} \ No newline at end of file