Upgrade step to fill raw_contacts.last_time_contacted.

Replace raw_contacts.last_time_contacted with data_usage_stat.last_time_used
if it's bigger.

Bug 6326418

Change-Id: I052a7fb92e69cf35f8e37a9be1b074f480e96071
diff --git a/src/com/android/providers/contacts/ContactsDatabaseHelper.java b/src/com/android/providers/contacts/ContactsDatabaseHelper.java
index 1f6c966..5ca4394 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 = 700;
+    static final int DATABASE_VERSION = 701;
 
     private static final String DATABASE_NAME = "contacts2.db";
     private static final String DATABASE_PRESENCE = "presence_db";
@@ -2375,6 +2375,11 @@
             oldVersion = 700;
         }
 
+        if (oldVersion < 701) {
+            upgradeToVersion701(db);
+            oldVersion = 701;
+        }
+
         if (upgradeViewsAndTriggers) {
             createContactsViews(db);
             createGroupsView(db);
@@ -3685,6 +3690,17 @@
         db.execSQL(sb.toString());
     }
 
+    private void upgradeToVersion701(SQLiteDatabase db) {
+        db.execSQL("UPDATE raw_contacts SET last_time_contacted =" +
+                " max(ifnull(last_time_contacted, 0), " +
+                " ifnull((SELECT max(last_time_used) " +
+                    " FROM data JOIN data_usage_stat ON (data._id = data_usage_stat.data_id)" +
+                    " WHERE data.raw_contact_id = raw_contacts._id), 0))");
+        // Replace 0 with null.  This isn't really necessary, but we do this anyway for consistency.
+        db.execSQL("UPDATE raw_contacts SET last_time_contacted = null" +
+                " where last_time_contacted = 0");
+    }
+
     public String extractHandleFromEmailAddress(String email) {
         Rfc822Token[] tokens = Rfc822Tokenizer.tokenize(email);
         if (tokens.length == 0) {