mark conversation as read upon open

Conversation list does not yet reflect the state change, but if
you force it to reload (e.g. switch accounts), you'll see that
the state did change.

Change-Id: I88117226e3579d2739497b03354dda2bb96a5984
diff --git a/src/com/android/mail/providers/Conversation.java b/src/com/android/mail/providers/Conversation.java
index bd38135..6969468 100644
--- a/src/com/android/mail/providers/Conversation.java
+++ b/src/com/android/mail/providers/Conversation.java
@@ -27,6 +27,7 @@
 
 import com.android.mail.browse.ConversationCursor.ConversationOperation;
 import com.android.mail.browse.ConversationCursor.ConversationProvider;
+import com.android.mail.providers.UIProvider.ConversationColumns;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -249,6 +250,16 @@
     }
 
     /**
+     * Mark a single conversation read/unread.
+     * @param context the caller's context
+     * @param read true for read, false for unread
+     * @return the sequence number of the operation (for undo)
+     */
+    public int markRead(Context context, boolean read) {
+        return updateBoolean(context, ConversationColumns.READ, read);
+    }
+
+    /**
      * Delete a group of conversations immediately in the UI and in a single transaction in the
      * underlying provider
      * @param context the caller's context
diff --git a/src/com/android/mail/ui/ConversationViewFragment.java b/src/com/android/mail/ui/ConversationViewFragment.java
index b23c0ce..9e4ebb7 100644
--- a/src/com/android/mail/ui/ConversationViewFragment.java
+++ b/src/com/android/mail/ui/ConversationViewFragment.java
@@ -37,6 +37,8 @@
 import android.webkit.ConsoleMessage;
 import android.webkit.WebChromeClient;
 import android.webkit.WebSettings;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
 import android.widget.Adapter;
 import android.widget.ResourceCursorAdapter;
 import android.widget.TextView;
@@ -84,6 +86,8 @@
 
     private final MailJsBridge mJsBridge = new MailJsBridge();
 
+    private final WebViewClient mWebViewClient = new ConversationWebViewClient();
+
     private static final String ARG_ACCOUNT = "account";
     private static final String ARG_CONVERSATION = "conversation";
 
@@ -154,7 +158,7 @@
         mWebView = (ConversationWebView) rootView.findViewById(R.id.webview);
 
         mWebView.addJavascriptInterface(mJsBridge, "mail");
-
+        mWebView.setWebViewClient(mWebViewClient);
         mWebView.setWebChromeClient(new WebChromeClient() {
             @Override
             public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
@@ -296,6 +300,21 @@
         return ints;
     }
 
+    private class ConversationWebViewClient extends WebViewClient {
+
+        @Override
+        public void onPageFinished(WebView view, String url) {
+            super.onPageFinished(view, url);
+
+            // TODO: save off individual message unread state (here, or in onLoadFinished?) so
+            // 'mark unread' restores the original unread state for each individual message
+
+            // mark as read upon open
+            mConversation.markRead(mContext, true /* read */);
+        }
+
+    }
+
     /**
      * NOTE: all public methods must be listed in the proguard flags so that they can be accessed
      * via reflection and not stripped.