summaryrefslogtreecommitdiffstats
path: root/src/com/android/providers/contacts/SearchIndexManager.java
diff options
context:
space:
mode:
authorMakoto Onuki <omakoto@google.com>2012-04-11 11:07:26 -0700
committerMakoto Onuki <omakoto@google.com>2012-04-20 14:45:07 -0700
commit0992b9d4969ed0eee6e879db94292b635229e2b7 (patch)
tree6759f884a9f84441a695235988a715e7cdf19e9a /src/com/android/providers/contacts/SearchIndexManager.java
parent18cb61aa592aa2c02c7f583f608ad0f8832f5742 (diff)
downloadpackages_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.java37
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) {