Merge "Don't suggest invisible for aggregation" into jb-dev
diff --git a/src/com/android/providers/contacts/ContactsDatabaseHelper.java b/src/com/android/providers/contacts/ContactsDatabaseHelper.java
index 5ca4394..4804897 100644
--- a/src/com/android/providers/contacts/ContactsDatabaseHelper.java
+++ b/src/com/android/providers/contacts/ContactsDatabaseHelper.java
@@ -108,7 +108,7 @@
* 700-799 Jelly Bean
* </pre>
*/
- static final int DATABASE_VERSION = 701;
+ static final int DATABASE_VERSION = 702;
private static final String DATABASE_NAME = "contacts2.db";
private static final String DATABASE_PRESENCE = "presence_db";
@@ -2380,6 +2380,11 @@
oldVersion = 701;
}
+ if (oldVersion < 702) {
+ upgradeToVersion702(db);
+ oldVersion = 702;
+ }
+
if (upgradeViewsAndTriggers) {
createContactsViews(db);
createGroupsView(db);
@@ -3701,6 +3706,83 @@
" where last_time_contacted = 0");
}
+ /**
+ * Pre-HC devices don't have correct "NORMALIZED_NUMBERS". Clear them up.
+ */
+ private void upgradeToVersion702(SQLiteDatabase db) {
+ // All the "correct" Phone.NORMALIZED_NUMBERS should begin with "+". The upgraded data
+ // don't. Find all Phone.NORMALIZED_NUMBERS that don't begin with "+".
+ final int count;
+ final long[] dataIds;
+ final long[] rawContactIds;
+ final String[] phoneNumbers;
+ final StringBuilder sbDataIds;
+ final Cursor c = db.rawQuery(
+ "SELECT _id, raw_contact_id, data1 FROM data " +
+ " WHERE mimetype_id=" +
+ "(SELECT _id FROM mimetypes" +
+ " WHERE mimetype='vnd.android.cursor.item/phone_v2')" +
+ " AND data4 not like '+%'", // "Not like" will exclude nulls too.
+ null);
+ try {
+ count = c.getCount();
+ if (count == 0) {
+ return;
+ }
+ dataIds = new long[count];
+ rawContactIds = new long[count];
+ phoneNumbers = new String[count];
+ sbDataIds = new StringBuilder();
+
+ c.moveToPosition(-1);
+ while (c.moveToNext()) {
+ final int i = c.getPosition();
+ dataIds[i] = c.getLong(0);
+ rawContactIds[i] = c.getLong(1);
+ phoneNumbers[i] = c.getString(2);
+
+ if (sbDataIds.length() > 0) {
+ sbDataIds.append(",");
+ }
+ sbDataIds.append(dataIds[i]);
+ }
+ } finally {
+ c.close();
+ }
+
+ final String dataIdList = sbDataIds.toString();
+
+ // Then, update the Data and PhoneLookup tables.
+
+ // First, just null out all Phone.NORMALIZED_NUMBERS for those.
+ db.execSQL("UPDATE data SET data4 = null" +
+ " WHERE _id IN (" + dataIdList + ")");
+
+ // Then, re-create phone_lookup for them.
+ db.execSQL("DELETE FROM phone_lookup" +
+ " WHERE data_id IN (" + dataIdList + ")");
+
+ for (int i = 0; i < count; i++) {
+ // Mimic how DataRowHandlerForPhoneNumber.insert() works when it can't normalize
+ // numbers.
+ final String phoneNumber = phoneNumbers[i];
+ if (TextUtils.isEmpty(phoneNumber)) continue;
+
+ final String normalized = PhoneNumberUtils.normalizeNumber(phoneNumber);
+ if (TextUtils.isEmpty(normalized)) continue;
+
+ db.execSQL("INSERT INTO phone_lookup" +
+ "(data_id, raw_contact_id, normalized_number, min_match)" +
+ " VALUES(?,?,?,?)",
+ new String[] {
+ String.valueOf(dataIds[i]),
+ String.valueOf(rawContactIds[i]),
+ normalized,
+ PhoneNumberUtils.toCallerIDMinMatch(normalized)
+ });
+ }
+ }
+
public String extractHandleFromEmailAddress(String email) {
Rfc822Token[] tokens = Rfc822Tokenizer.tokenize(email);
if (tokens.length == 0) {