Merge "Add features and data_usage columns to calls table."
diff --git a/src/com/android/providers/contacts/CallLogProvider.java b/src/com/android/providers/contacts/CallLogProvider.java
index a4e642c..886f484 100644
--- a/src/com/android/providers/contacts/CallLogProvider.java
+++ b/src/com/android/providers/contacts/CallLogProvider.java
@@ -74,7 +74,9 @@
         sCallsProjectionMap.put(Calls.NUMBER_PRESENTATION, Calls.NUMBER_PRESENTATION);
         sCallsProjectionMap.put(Calls.DATE, Calls.DATE);
         sCallsProjectionMap.put(Calls.DURATION, Calls.DURATION);
+        sCallsProjectionMap.put(Calls.DATA_USAGE, Calls.DATA_USAGE);
         sCallsProjectionMap.put(Calls.TYPE, Calls.TYPE);
+        sCallsProjectionMap.put(Calls.FEATURES, Calls.FEATURES);
         sCallsProjectionMap.put(Calls.PHONE_ACCOUNT_COMPONENT_NAME, Calls.PHONE_ACCOUNT_COMPONENT_NAME);
         sCallsProjectionMap.put(Calls.PHONE_ACCOUNT_ID, Calls.PHONE_ACCOUNT_ID);
         sCallsProjectionMap.put(Calls.NEW, Calls.NEW);
diff --git a/src/com/android/providers/contacts/ContactsDatabaseHelper.java b/src/com/android/providers/contacts/ContactsDatabaseHelper.java
index b7f16bb..956513c 100644
--- a/src/com/android/providers/contacts/ContactsDatabaseHelper.java
+++ b/src/com/android/providers/contacts/ContactsDatabaseHelper.java
@@ -114,7 +114,7 @@
      *   900-999 L
      * </pre>
      */
-    static final int DATABASE_VERSION = 903;
+    static final int DATABASE_VERSION = 904;
 
     public interface Tables {
         public static final String CONTACTS = "contacts";
@@ -1465,7 +1465,9 @@
                         Calls.PRESENTATION_ALLOWED + "," +
                 Calls.DATE + " INTEGER," +
                 Calls.DURATION + " INTEGER," +
+                Calls.DATA_USAGE + " INTEGER," +
                 Calls.TYPE + " INTEGER," +
+                Calls.FEATURES + " INTEGER NOT NULL DEFAULT 0," +
                 Calls.PHONE_ACCOUNT_COMPONENT_NAME + " TEXT," +
                 Calls.PHONE_ACCOUNT_ID + " TEXT," +
                 Calls.NEW + " INTEGER," +
@@ -2752,6 +2754,11 @@
             oldVersion = 903;
         }
 
+        if (oldVersion < 904) {
+            upgradeToVersion904(db);
+            oldVersion = 904;
+        }
+
         if (upgradeViewsAndTriggers) {
             createContactsViews(db);
             createGroupsView(db);
@@ -4057,8 +4064,8 @@
 
     private void upgradeToVersion902(SQLiteDatabase db) {
         // adding account identifier to call log table
-        db.execSQL("ALTER TABLE calls ADD "+ Calls.PHONE_ACCOUNT_COMPONENT_NAME + " TEXT;");
-        db.execSQL("ALTER TABLE calls ADD "+ Calls.PHONE_ACCOUNT_ID + " TEXT;");
+        db.execSQL("ALTER TABLE calls ADD subscription_component_name TEXT;");
+        db.execSQL("ALTER TABLE calls ADD subscription_id TEXT;");
     }
 
     /**
@@ -4114,6 +4121,15 @@
         }
     }
 
+    /**
+     * Updates the calls table in the database to include the call_duration and features columns.
+     * @param db The database to update.
+     */
+    private void upgradeToVersion904(SQLiteDatabase db) {
+        db.execSQL("ALTER TABLE calls ADD features INTEGER NOT NULL DEFAULT 0;");
+        db.execSQL("ALTER TABLE calls ADD data_usage INTEGER;");
+    }
+
     public String extractHandleFromEmailAddress(String email) {
         Rfc822Token[] tokens = Rfc822Tokenizer.tokenize(email);
         if (tokens.length == 0) {
diff --git a/tests/src/com/android/providers/contacts/CallLogProviderTest.java b/tests/src/com/android/providers/contacts/CallLogProviderTest.java
index 6a9410f..f1787fa 100644
--- a/tests/src/com/android/providers/contacts/CallLogProviderTest.java
+++ b/tests/src/com/android/providers/contacts/CallLogProviderTest.java
@@ -180,10 +180,12 @@
                 sComponentName, "sub0", Uri.parse("tel:000-000-0000"), "", "", true, true);
 
         Uri uri = Calls.addCall(ci, getMockContext(), "1-800-263-7643",
-                PhoneConstants.PRESENTATION_ALLOWED, Calls.OUTGOING_TYPE, subscription, 2000, 40);
+                PhoneConstants.PRESENTATION_ALLOWED, Calls.OUTGOING_TYPE, Calls.FEATURES_NONE,
+                subscription, 2000, 40, null);
 
         ContentValues values = new ContentValues();
         values.put(Calls.TYPE, Calls.OUTGOING_TYPE);
+        values.put(Calls.FEATURES, Calls.FEATURES_NONE);
         values.put(Calls.NUMBER, "1-800-263-7643");
         values.put(Calls.NUMBER_PRESENTATION, Calls.PRESENTATION_ALLOWED);
         values.put(Calls.DATE, 2000);
@@ -195,6 +197,9 @@
         values.put(Calls.GEOCODED_LOCATION, "usa");
         values.put(Calls.PHONE_ACCOUNT_COMPONENT_NAME, "com.android.telecomm/TelecommServiceImpl");
         values.put(Calls.PHONE_ACCOUNT_ID, "sub0");
+        // Casting null to Long as there are many forms of "put" which have nullable second
+        // parameters and the compiler needs a hint as to which form is correct.
+        values.put(Calls.DATA_USAGE, (Long) null);
         assertStoredValues(uri, values);
     }