diff options
author | Makoto Onuki <omakoto@google.com> | 2012-04-11 11:07:26 -0700 |
---|---|---|
committer | Makoto Onuki <omakoto@google.com> | 2012-04-20 14:45:07 -0700 |
commit | 0992b9d4969ed0eee6e879db94292b635229e2b7 (patch) | |
tree | 6759f884a9f84441a695235988a715e7cdf19e9a /src/com/android/providers/contacts/SearchIndexManager.java | |
parent | 18cb61aa592aa2c02c7f583f608ad0f8832f5742 (diff) | |
download | packages_providers_ContactsProvider-0992b9d4969ed0eee6e879db94292b635229e2b7.zip packages_providers_ContactsProvider-0992b9d4969ed0eee6e879db94292b635229e2b7.tar.gz packages_providers_ContactsProvider-0992b9d4969ed0eee6e879db94292b635229e2b7.tar.bz2 |
New aggregation logic
Now a raw contact can be merged into a contact containing raw contacts from
the same account if there's at least one raw contact in those raw contacts
that shares at least one email address, phone number, or identity.
Now the aggregation logic version is 3.
Also:
- Make sure changes to the identity triggers aggregation.
- Stop re-using some HashMaps/HashSets, as they don't shirink the internal
table when clear()ed. During the aggregation update we may put a bunch of
stuff into those, and we want to make sure that we don't keep unnecessarily
bit internal tables after the upgrade. This should be okay with the modern
dalvik GC.
Change-Id: I855085d334679363cf9bffb918ca2ceb0cfe77f5
Diffstat (limited to 'src/com/android/providers/contacts/SearchIndexManager.java')
-rw-r--r-- | src/com/android/providers/contacts/SearchIndexManager.java | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/src/com/android/providers/contacts/SearchIndexManager.java b/src/com/android/providers/contacts/SearchIndexManager.java index f1b7338..5ca9859 100644 --- a/src/com/android/providers/contacts/SearchIndexManager.java +++ b/src/com/android/providers/contacts/SearchIndexManager.java @@ -45,6 +45,8 @@ import java.util.regex.Pattern; public class SearchIndexManager { private static final String TAG = "ContactsFTS"; + private static final boolean VERBOSE_LOGGING = Log.isLoggable(TAG, Log.VERBOSE); + public static final String PROPERTY_SEARCH_INDEX_VERSION = "search_index"; private static final int SEARCH_INDEX_VERSION = 1; @@ -253,33 +255,37 @@ public class SearchIndexManager { } public void updateIndexForRawContacts(Set<Long> contactIds, Set<Long> rawContactIds) { - mSb.setLength(0); - mSb.append("("); + if (VERBOSE_LOGGING) { + Log.v(TAG, "Updating search index for " + contactIds.size() + + " contacts / " + rawContactIds.size() + " raw contacts"); + } + StringBuilder sb = new StringBuilder(); + sb.append("("); if (!contactIds.isEmpty()) { - mSb.append(RawContacts.CONTACT_ID + " IN ("); + sb.append(RawContacts.CONTACT_ID + " IN ("); for (Long contactId : contactIds) { - mSb.append(contactId).append(","); + sb.append(contactId).append(","); } - mSb.setLength(mSb.length() - 1); - mSb.append(')'); + sb.setLength(sb.length() - 1); + sb.append(')'); } if (!rawContactIds.isEmpty()) { if (!contactIds.isEmpty()) { - mSb.append(" OR "); + sb.append(" OR "); } - mSb.append(RawContactsColumns.CONCRETE_ID + " IN ("); + sb.append(RawContactsColumns.CONCRETE_ID + " IN ("); for (Long rawContactId : rawContactIds) { - mSb.append(rawContactId).append(","); + sb.append(rawContactId).append(","); } - mSb.setLength(mSb.length() - 1); - mSb.append(')'); + sb.setLength(sb.length() - 1); + sb.append(')'); } - mSb.append(")"); + sb.append(")"); // The selection to select raw_contacts. - final String rawContactsSelection = mSb.toString(); + final String rawContactsSelection = sb.toString(); // Remove affected search_index rows. final SQLiteDatabase db = mDbHelper.getWritableDatabase(); @@ -292,7 +298,10 @@ public class SearchIndexManager { , null); // Then rebuild index for them. - buildAndInsertIndex(db, rawContactsSelection); + final int count = buildAndInsertIndex(db, rawContactsSelection); + if (VERBOSE_LOGGING) { + Log.v(TAG, "Updated search index for " + count + " contacts"); + } } private int buildAndInsertIndex(SQLiteDatabase db, String selection) { |