Merge "Clean up USER_OWNER in contacts provider"
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index ae0502a..ea70f64 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -8,10 +8,12 @@
     <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS" />
     <uses-permission android:name="android.permission.MANAGE_USERS" />
     <uses-permission android:name="android.permission.PROCESS_PHONE_ACCOUNT_REGISTRATION" />
+    <uses-permission android:name="android.permission.READ_CONTACTS" />
     <uses-permission android:name="android.permission.READ_PHONE_STATE" />
     <uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
     <uses-permission android:name="android.permission.SEND_CALL_LOG_CHANGE" />
     <uses-permission android:name="android.permission.UPDATE_APP_OPS_STATS" />
+    <uses-permission android:name="android.permission.WRITE_CONTACTS" />
 
     <permission
             android:name="android.permission.SEND_CALL_LOG_CHANGE"
diff --git a/src/com/android/providers/contacts/CallLogProvider.java b/src/com/android/providers/contacts/CallLogProvider.java
index 4237aa1..64ec14d 100644
--- a/src/com/android/providers/contacts/CallLogProvider.java
+++ b/src/com/android/providers/contacts/CallLogProvider.java
@@ -116,6 +116,7 @@
         sCallsProjectionMap = new HashMap<String, String>();
         sCallsProjectionMap.put(Calls._ID, Calls._ID);
         sCallsProjectionMap.put(Calls.NUMBER, Calls.NUMBER);
+        sCallsProjectionMap.put(Calls.POST_DIAL_DIGITS, Calls.POST_DIAL_DIGITS);
         sCallsProjectionMap.put(Calls.NUMBER_PRESENTATION, Calls.NUMBER_PRESENTATION);
         sCallsProjectionMap.put(Calls.DATE, Calls.DATE);
         sCallsProjectionMap.put(Calls.DURATION, Calls.DURATION);
diff --git a/src/com/android/providers/contacts/ContactsDatabaseHelper.java b/src/com/android/providers/contacts/ContactsDatabaseHelper.java
index 10f6a2d..c32e672 100644
--- a/src/com/android/providers/contacts/ContactsDatabaseHelper.java
+++ b/src/com/android/providers/contacts/ContactsDatabaseHelper.java
@@ -128,7 +128,7 @@
      *   1100-1199 N
      * </pre>
      */
-    static final int DATABASE_VERSION = 1105;
+    static final int DATABASE_VERSION = 1107;
 
     public interface Tables {
         public static final String CONTACTS = "contacts";
@@ -1556,6 +1556,7 @@
                 Calls.NUMBER + " TEXT," +
                 Calls.NUMBER_PRESENTATION + " INTEGER NOT NULL DEFAULT " +
                         Calls.PRESENTATION_ALLOWED + "," +
+                Calls.POST_DIAL_DIGITS + " TEXT NOT NULL DEFAULT ''," +
                 Calls.DATE + " INTEGER," +
                 Calls.DURATION + " INTEGER," +
                 Calls.DATA_USAGE + " INTEGER," +
@@ -3035,6 +3036,16 @@
             oldVersion = 1105;
         }
 
+        if (oldVersion < 1106) {
+            upgradeToVersion1106(db);
+            oldVersion = 1106;
+        }
+
+        if (oldVersion < 1107) {
+            upgradeToVersion1107(db);
+            oldVersion = 1107;
+        }
+
         if (upgradeViewsAndTriggers) {
             createContactsViews(db);
             createGroupsView(db);
@@ -4616,6 +4627,20 @@
                 "account_id);");
     }
 
+    public void upgradeToVersion1106(SQLiteDatabase db) {
+        db.execSQL("ALTER TABLE calls ADD post_dial_digits TEXT NOT NULL DEFAULT ''");
+    }
+
+    public void upgradeToVersion1107(SQLiteDatabase db) {
+        try {
+            db.execSQL("ALTER TABLE calls ADD post_dial_digits TEXT NOT NULL DEFAULT ''");
+        } catch (SQLiteException ignore) {
+            // This is for devices which got initialized without a post_dial_digits
+            // column from version 1106. The exception indicates that the column is
+            // already present, so nothing needs to be done.
+        }
+    }
+
     /**
      * Generate hash_id from data1, data2 and data15 columns.
      * If one of data1 and data2 is not null, using data1 and data2 to get hash_id,