resolved conflicts for merge of b8fb609b to jb-mr1-dev

Change-Id: I336ee0b3f041f83a4b4e2c9973abb73852c2cc6f
diff --git a/src/com/android/providers/contacts/VoicemailContentTable.java b/src/com/android/providers/contacts/VoicemailContentTable.java
index 3f00b26..dfa1e76 100644
--- a/src/com/android/providers/contacts/VoicemailContentTable.java
+++ b/src/com/android/providers/contacts/VoicemailContentTable.java
@@ -37,6 +37,7 @@
 import com.android.common.content.ProjectionMap;
 import com.android.providers.contacts.VoicemailContentProvider.UriData;
 import com.android.providers.contacts.util.CloseUtils;
+import com.google.common.collect.ImmutableSet;
 
 import java.io.File;
 import java.io.FileNotFoundException;
@@ -54,6 +55,21 @@
 
     private static final String[] FILENAME_ONLY_PROJECTION = new String[] { Voicemails._DATA };
 
+    private static final ImmutableSet<String> ALLOWED_COLUMNS = new ImmutableSet.Builder<String>()
+            .add(Voicemails._ID)
+            .add(Voicemails.NUMBER)
+            .add(Voicemails.DATE)
+            .add(Voicemails.DURATION)
+            .add(Voicemails.IS_READ)
+            .add(Voicemails.STATE)
+            .add(Voicemails.SOURCE_DATA)
+            .add(Voicemails.SOURCE_PACKAGE)
+            .add(Voicemails.HAS_CONTENT)
+            .add(Voicemails.MIME_TYPE)
+            .add(OpenableColumns.DISPLAY_NAME)
+            .add(OpenableColumns.SIZE)
+            .build();
+
     private final String mTableName;
     private final SQLiteOpenHelper mDbHelper;
     private final Context mContext;
@@ -211,8 +227,10 @@
     @Override
     public int update(UriData uriData, ContentValues values, String selection,
             String[] selectionArgs) {
-        checkForSupportedColumns(mVoicemailProjectionMap, values);
+
+        checkForSupportedColumns(ALLOWED_COLUMNS, values, "Updates are not allowed.");
         checkUpdateSupported(uriData);
+
         final SQLiteDatabase db = mDbHelper.getWritableDatabase();
         // TODO: This implementation does not allow bulk update because it only accepts
         // URI that include message Id. I think we do want to support bulk update.
diff --git a/src/com/android/providers/contacts/util/DbQueryUtils.java b/src/com/android/providers/contacts/util/DbQueryUtils.java
index c853a96..2b976a1 100644
--- a/src/com/android/providers/contacts/util/DbQueryUtils.java
+++ b/src/com/android/providers/contacts/util/DbQueryUtils.java
@@ -20,6 +20,7 @@
 import android.text.TextUtils;
 
 import java.util.HashMap;
+import java.util.Set;
 
 /**
  * Static methods for helping us build database query selection strings.
@@ -83,14 +84,24 @@
     /**
      * Checks if the given ContentValues contains values within the projection
      * map.
+     *
      * @throws IllegalArgumentException if any value in values is not found in
      * the projection map.
      */
     public static void checkForSupportedColumns(HashMap<String, String> projectionMap,
             ContentValues values) {
+        checkForSupportedColumns(projectionMap.keySet(), values, "Is invalid.");
+    }
+
+    /**
+     * @see #checkForSupportedColumns(HashMap, ContentValues)
+     */
+    public static void checkForSupportedColumns(Set<String> allowedColumns, ContentValues values,
+            String msgSuffix) {
         for (String requestedColumn : values.keySet()) {
-            if (!projectionMap.keySet().contains(requestedColumn)) {
-                throw new IllegalArgumentException("Column '" + requestedColumn + "' is invalid.");
+            if (!allowedColumns.contains(requestedColumn)) {
+                throw new IllegalArgumentException("Column '" + requestedColumn + "'. " +
+                        msgSuffix);
             }
         }
     }