Merge "Log DHCP replies that we can't parse."
diff --git a/core/java/android/provider/ContactsContract.java b/core/java/android/provider/ContactsContract.java
index bf7f3cb..396cf19 100644
--- a/core/java/android/provider/ContactsContract.java
+++ b/core/java/android/provider/ContactsContract.java
@@ -2201,7 +2201,6 @@
         public static final long DAYS_KEPT_MILLISECONDS = 1000L * 60L * 60L * 24L * (long)DAYS_KEPT;
     }
 
-
     protected interface RawContactsColumns {
         /**
          * A reference to the {@link ContactsContract.Contacts#_ID} that this
@@ -8921,4 +8920,147 @@
             public static final String EXTRA_DATA_SET = "android.provider.extra.DATA_SET";
         }
     }
+
+    /**
+     * @hide
+     */
+    protected interface MetadataSyncColumns {
+
+        /**
+         * The raw contact backup id.
+         * A reference to the {@link ContactsContract.RawContacts#BACKUP_ID} that save the
+         * persistent unique id for each raw contact within its source system.
+         *
+         * @hide
+         */
+        public static final String RAW_CONTACT_BACKUP_ID = "raw_contact_backup_id";
+
+        /**
+         * The account type to which the raw_contact of this item is associated. See
+         * {@link RawContacts#ACCOUNT_TYPE}
+         *
+         * @hide
+         */
+        public static final String ACCOUNT_TYPE = "account_type";
+
+        /**
+         * The account name to which the raw_contact of this item is associated. See
+         * {@link RawContacts#ACCOUNT_NAME}
+         *
+         * @hide
+         */
+        public static final String ACCOUNT_NAME = "account_name";
+
+        /**
+         * The data set within the account that the raw_contact of this row belongs to. This allows
+         * multiple sync adapters for the same account type to distinguish between
+         * each others' data.
+         * {@link RawContacts#DATA_SET}
+         *
+         * @hide
+         */
+        public static final String DATA_SET = "data_set";
+
+        /**
+         * A text column contains the Json string got from People API. The Json string contains
+         * all the metadata related to the raw contact, i.e., all the data fields and
+         * aggregation exceptions.
+         *
+         * Here is an example of the Json string got from the actual schema.
+         * <pre>
+         *     {
+         *       "unique_contact_id": {
+         *         "account_type": "CUSTOM_ACCOUNT",
+         *         "custom_account_type": "facebook",
+         *         "account_name": "android-test",
+         *         "contact_id": "1111111",
+         *         "data_set": "FOCUS"
+         *       },
+         *       "contact_prefs": {
+         *         "send_to_voicemail": true,
+         *         "starred": false,
+         *         "pinned": 2
+         *       },
+         *       "aggregation_data": [
+         *         {
+         *           "type": "TOGETHER",
+         *           "contact_ids": [
+         *             {
+         *               "account_type": "GOOGLE_ACCOUNT",
+         *               "account_name": "android-test2",
+         *               "contact_id": "2222222",
+         *               "data_set": "GOOGLE_PLUS"
+         *             },
+         *             {
+         *               "account_type": "GOOGLE_ACCOUNT",
+         *               "account_name": "android-test3",
+         *               "contact_id": "3333333",
+         *               "data_set": "CUSTOM",
+         *               "custom_data_set": "custom type"
+         *             }
+         *           ]
+         *         }
+         *       ],
+         *       "field_data": [
+         *         {
+         *           "field_data_id": "1001",
+         *           "field_data_prefs": {
+         *             "is_primary": true,
+         *             "is_super_primary": true
+         *           },
+         *           "usage_stats": [
+         *             {
+         *               "usage_type": "CALL",
+         *               "last_time_used": 10000001,
+         *               "usage_count": 10
+         *             }
+         *           ]
+         *         }
+         *       ]
+         *     }
+         * </pre>
+         *
+         * @hide
+         */
+        public static final String DATA = "data";
+
+        /**
+         * The "deleted" flag: "0" by default, "1" if the row has been marked
+         * for deletion. When {@link android.content.ContentResolver#delete} is
+         * called on a raw contact, updating MetadataSync table to set the flag of the raw contact
+         * as "1", then metadata sync adapter deletes the raw contact metadata on the server.
+         * <P>Type: INTEGER</P>
+         *
+         * @hide
+         */
+        public static final String DELETED = "deleted";
+    }
+
+    /**
+     * Constants for the metadata sync table. This table is used to cache the metadata_sync data
+     * from server before it is merged into other CP2 tables.
+     *
+     * @hide
+     */
+    public static final class MetadataSync implements BaseColumns, MetadataSyncColumns {
+
+        /** The authority for the contacts metadata */
+        public static final String METADATA_AUTHORITY = "com.android.contacts.metadata";
+
+        /** A content:// style uri to the authority for the contacts metadata */
+        public static final Uri METADATA_AUTHORITY_URI = Uri.parse(
+                "content://" + METADATA_AUTHORITY);
+
+        /**
+         * This utility class cannot be instantiated
+         */
+        private MetadataSync() {
+        }
+
+        /**
+         * The content:// style URI for this table.
+         */
+        public static final Uri CONTENT_URI = Uri.withAppendedPath(METADATA_AUTHORITY_URI,
+                "metadata_sync");
+    }
 }