Hookup ui for marking a conversation important/ not important.

Change-Id: Ic699aa172adccb335d67978abf4c0bd95d958a61
diff --git a/gmail_src/com/android/mail/providers/proto/boot/GmailAccountService.java b/gmail_src/com/android/mail/providers/proto/boot/GmailAccountService.java
index bd0aff7..a5041fa 100644
--- a/gmail_src/com/android/mail/providers/proto/boot/GmailAccountService.java
+++ b/gmail_src/com/android/mail/providers/proto/boot/GmailAccountService.java
@@ -151,7 +151,8 @@
                     AccountCapabilities.THREADED_CONVERSATIONS |
                     AccountCapabilities.MULTIPLE_FOLDERS_PER_CONV |
                     AccountCapabilities.UNDO |
-                    AccountCapabilities.HELP_CONTENT);
+                    AccountCapabilities.HELP_CONTENT |
+                    AccountCapabilities.MARK_IMPORTANT);
             final AccountCacheProvider.CachedAccount cachedAccount =
                     new AccountCacheProvider.CachedAccount(gmailAccountId,
                             account.name,
diff --git a/src/com/android/mail/browse/SelectedConversationsActionMenu.java b/src/com/android/mail/browse/SelectedConversationsActionMenu.java
index 62102de..0695965 100644
--- a/src/com/android/mail/browse/SelectedConversationsActionMenu.java
+++ b/src/com/android/mail/browse/SelectedConversationsActionMenu.java
@@ -149,6 +149,12 @@
             case R.id.change_folder:
                 showChangeFoldersDialog();
                 break;
+            case R.id.mark_important:
+                markConversationsImportant(true);
+                break;
+            case R.id.mark_not_important:
+                markConversationsImportant(false);
+                break;
             default:
                 handled = false;
                 break;
@@ -165,6 +171,16 @@
         mListAdapter.notifyDataSetChanged();
     }
 
+    private void markConversationsImportant(boolean important) {
+        Collection<Conversation> conversations = mSelectionSet.values();
+        int priority = important ? UIProvider.ConversationPriority.HIGH
+                : UIProvider.ConversationPriority.LOW;
+        Conversation.updateInt(mContext, conversations, ConversationColumns.PRIORITY, priority);
+        mSelectionSet.clear();
+        // Redraw with changes
+        mListAdapter.notifyDataSetChanged();
+    }
+
     private void starConversations(boolean star) {
         Collection<Conversation> conversations = mSelectionSet.values();
         if (conversations.size() > 0) {
@@ -247,6 +263,8 @@
         Collection<Conversation> conversations = mSelectionSet.values();
         boolean showStar = false;
         boolean showMarkUnread = false;
+        boolean showMarkImportant = false;
+
         for (Conversation conversation : conversations) {
             if (!conversation.starred) {
                 showStar = true;
@@ -254,7 +272,10 @@
             if (conversation.read) {
                 showMarkUnread = true;
             }
-            if (showMarkUnread && showStar) {
+            if (!conversation.isImportant()) {
+                showMarkImportant = true;
+            }
+            if (showStar && showMarkUnread && showMarkImportant) {
                 break;
             }
         }
@@ -274,6 +295,13 @@
                 mFolder.supportsCapability(FolderCapabilities.ARCHIVE));
         final MenuItem mute = menu.findItem(R.id.mute);
         mute.setVisible(mAccount.supportsCapability(UIProvider.AccountCapabilities.MUTE));
+        final MenuItem markImportant = menu.findItem(R.id.mark_important);
+        markImportant.setVisible(showMarkImportant
+                && mAccount.supportsCapability(UIProvider.AccountCapabilities.MARK_IMPORTANT));
+        final MenuItem markNotImportant = menu.findItem(R.id.mark_not_important);
+        markNotImportant.setVisible(!showMarkImportant
+                && mAccount.supportsCapability(UIProvider.AccountCapabilities.MARK_IMPORTANT));
+
         return true;
     }
 
diff --git a/src/com/android/mail/providers/Conversation.java b/src/com/android/mail/providers/Conversation.java
index 4376b6a..0138a9d 100644
--- a/src/com/android/mail/providers/Conversation.java
+++ b/src/com/android/mail/providers/Conversation.java
@@ -145,9 +145,35 @@
         }
     }
 
+    /**
+     * Get if this conversation is marked as high priority.
+     */
+    public boolean isImportant() {
+        return priority == UIProvider.ConversationPriority.HIGH;
+    }
+
     // Below are methods that update Conversation data (update/delete)
 
     /**
+     * Update an integer column for a single conversation (see updateBoolean below)
+     */
+    public int updateInt(Context context, String columnName, int value) {
+        ArrayList<Conversation> conversations = new ArrayList<Conversation>();
+        conversations.add(this);
+        return updateInt(context, conversations, columnName, value);
+    }
+
+    /**
+     * Update an integer column for a group of conversations (see updateValues below)
+     */
+    public static int updateInt(Context context, Collection<Conversation> conversations,
+            String columnName, int value) {
+        ContentValues cv = new ContentValues();
+        cv.put(columnName, value);
+        return updateValues(context, conversations, cv);
+    }
+
+    /**
      * Update a boolean column for a single conversation (see updateBoolean below)
      */
     public int updateBoolean(Context context, String columnName, boolean value) {
diff --git a/src/com/android/mail/providers/UIProvider.java b/src/com/android/mail/providers/UIProvider.java
index 2331ddc..cccafce 100644
--- a/src/com/android/mail/providers/UIProvider.java
+++ b/src/com/android/mail/providers/UIProvider.java
@@ -193,6 +193,10 @@
          * Whether the account provides help content.
          */
         public static final int HELP_CONTENT = 0x4000;
+        /**
+         * Whether the account provides a mechanism for marking conversations as important.
+         */
+        public static final int MARK_IMPORTANT = 0x8000;
     }
 
     public static final class AccountColumns {