Make the "Most visited" page have a thumbnail viewing mode.

Start capturing screenshots for all visited pages, and show them
in a grid view on the most visited page.  Modify the BrowserBookmarks-
Page and Adapter so they can be used for the "Most visited" page.
Also change some of the ids for context menu items to be the same
in the browser and history context menus, for simplicity in
handling them in BrowserBookmarksPage.
diff --git a/src/com/android/browser/BrowserBookmarksAdapter.java b/src/com/android/browser/BrowserBookmarksAdapter.java
index c3ccdfd..bf74ba2 100644
--- a/src/com/android/browser/BrowserBookmarksAdapter.java
+++ b/src/com/android/browser/BrowserBookmarksAdapter.java
@@ -52,10 +52,9 @@
     private ContentResolver         mContentResolver;
     private boolean                 mDataValid;
     private boolean                 mGridMode;
-
-    // When true, this adapter is used to pick a bookmark to create a shortcut
-    private boolean mCreateShortcut;
-    private int mExtraOffset;
+    private boolean                 mMostVisited;
+    private boolean                 mNeedsOffset;
+    private int                     mExtraOffset;
 
     // Implementation of WebIconDatabase.IconListener
     private class IconReceiver implements IconListener {
@@ -74,10 +73,10 @@
      *                  appropriately after a search.
      */
     public BrowserBookmarksAdapter(BrowserBookmarksPage b, String curPage,
-            String curTitle, boolean createShortcut) {
-        mDataValid = false;
-        mCreateShortcut = createShortcut;
-        mExtraOffset = createShortcut ? 0 : 1;
+            String curTitle, boolean createShortcut, boolean mostVisited) {
+        mNeedsOffset = !(createShortcut || mostVisited);
+        mMostVisited = mostVisited;
+        mExtraOffset = mNeedsOffset ? 1 : 0;
         mBookmarksPage = b;
         mCurrentPage = b.getResources().getString(R.string.current_page)
                 + curPage;
@@ -85,9 +84,14 @@
         mContentResolver = b.getContentResolver();
         mGridMode = false;
 
+        String whereClause;
         // FIXME: Should have a default sort order that the user selects.
-        String whereClause = Browser.BookmarkColumns.BOOKMARK + " != 0";
         String orderBy = Browser.BookmarkColumns.VISITS + " DESC";
+        if (mostVisited) {
+            whereClause = Browser.BookmarkColumns.VISITS + " != 0";
+        } else {
+            whereClause = Browser.BookmarkColumns.BOOKMARK + " != 0";
+        }
         mCursor = b.managedQuery(Browser.BOOKMARKS_URI,
                 Browser.HISTORY_PROJECTION, whereClause, null, orderBy);
         mCursor.registerContentObserver(new ChangeObserver());
@@ -264,7 +268,7 @@
 
     private static void updateBookmarkFavicon(ContentResolver cr,
             String originalUrl, String url, Bitmap favicon) {
-        final Cursor c = queryBookmarksForUrl(cr, originalUrl, url);
+        final Cursor c = queryBookmarksForUrl(cr, originalUrl, url, true);
         if (c == null) {
             return;
         }
@@ -285,7 +289,7 @@
     }
 
     /* package */ static Cursor queryBookmarksForUrl(ContentResolver cr,
-            String originalUrl, String url) {
+            String originalUrl, String url, boolean onlyBookmarks) {
         if (cr == null || url == null) {
             return null;
         }
@@ -309,11 +313,13 @@
         // http://www.google.com/m?some_query)
         final String[] selArgs = new String[] {
             originalUrlNoQuery, urlNoQuery, originalUrl, url };
-        final String where = "(" + BookmarkColumns.URL + " == ? OR "
+        String where = BookmarkColumns.URL + " == ? OR "
                 + BookmarkColumns.URL + " == ? OR "
                 + BookmarkColumns.URL + " GLOB ? || '*' OR "
-                + BookmarkColumns.URL + " GLOB ? || '*') AND "
-                + BookmarkColumns.BOOKMARK + " == 1";
+                + BookmarkColumns.URL + " GLOB ? || '*'";
+        if (onlyBookmarks) {
+            where = "(" + where + ") AND " + BookmarkColumns.BOOKMARK + " == 1";
+        }
         final String[] projection =
                 new String[] { Browser.BookmarkColumns._ID };
         return cr.query(Browser.BOOKMARKS_URI, projection, where, selArgs,
@@ -411,7 +417,7 @@
             ImageView thumb = (ImageView) convertView.findViewById(R.id.thumb);
             TextView tv = (TextView) convertView.findViewById(R.id.label);
 
-            if (0 == position && !mCreateShortcut) {
+            if (0 == position && mNeedsOffset) {
                 // This is to create a bookmark for the current page.
                 holder.setVisibility(View.VISIBLE);
                 tv.setText(mCurrentTitle);
@@ -436,7 +442,7 @@
             return convertView;
 
         }
-        if (position == 0 && !mCreateShortcut) {
+        if (position == 0 && mNeedsOffset) {
             AddNewBookmark b;
             if (convertView instanceof AddNewBookmark) {
                 b = (AddNewBookmark) convertView;
@@ -446,10 +452,20 @@
             b.setUrl(mCurrentPage);
             return b;
         }
-        if (convertView == null || !(convertView instanceof BookmarkItem)) {
-            convertView = new BookmarkItem(mBookmarksPage);
+        if (mMostVisited) {
+            if (convertView == null || !(convertView instanceof HistoryItem)) {
+                convertView = new HistoryItem(mBookmarksPage);
+            }
+        } else {
+            if (convertView == null || !(convertView instanceof BookmarkItem)) {
+                convertView = new BookmarkItem(mBookmarksPage);
+            }
         }
-        bind((BookmarkItem)convertView, position);
+        bind((BookmarkItem) convertView, position);
+        if (mMostVisited) {
+            ((HistoryItem) convertView).setIsBookmark(
+                    getIsBookmark(position));
+        }
         return convertView;
     }
 
@@ -491,6 +507,17 @@
     }
 
     /**
+     * Return whether or not this item represents a bookmarked site.
+     */
+    public boolean getIsBookmark(int position) {
+        if (position < mExtraOffset || position > mCount) {
+            return false;
+        }
+        mCursor.moveToPosition(position - mExtraOffset);
+        return (1 == mCursor.getInt(Browser.HISTORY_PROJECTION_BOOKMARK_INDEX));
+    }
+
+    /**
      * Private helper function to return the title or url.
      */
     private String getString(int cursorIndex, int position) {