@Override
  public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    AdapterView.AdapterContextMenuInfo i = (AdapterView.AdapterContextMenuInfo) menuInfo;

    MenuInflater inflater = getMenuInflater();
    if (mMostVisited) {
      inflater.inflate(R.menu.historycontext, menu);
    } else {
      inflater.inflate(R.menu.bookmarkscontext, menu);
    }

    if (0 == i.position && !mMostVisited) {
      menu.setGroupVisible(R.id.CONTEXT_MENU, false);
      if (mAddHeader == null) {
        mAddHeader = new AddNewBookmark(BrowserBookmarksPage.this);
      } else if (mAddHeader.getParent() != null) {
        ((ViewGroup) mAddHeader.getParent()).removeView(mAddHeader);
      }
      mAddHeader.setUrl(getIntent().getStringExtra("url"));
      menu.setHeaderView(mAddHeader);
      return;
    }
    if (mMostVisited) {
      if ((mViewMode == BookmarkViewMode.LIST && ((HistoryItem) i.targetView).isBookmark())
          || mBookmarksAdapter.getIsBookmark(i.position)) {
        MenuItem item = menu.findItem(R.id.save_to_bookmarks_menu_id);
        item.setTitle(R.string.remove_from_bookmarks);
      }
    } else {
      // The historycontext menu has no ADD_MENU group.
      menu.setGroupVisible(R.id.ADD_MENU, false);
    }
    if (mDisableNewWindow) {
      menu.findItem(R.id.new_window_context_menu_id).setVisible(false);
    }
    if (mContextHeader == null) {
      mContextHeader = new BookmarkItem(BrowserBookmarksPage.this);
    } else if (mContextHeader.getParent() != null) {
      ((ViewGroup) mContextHeader.getParent()).removeView(mContextHeader);
    }
    if (mViewMode == BookmarkViewMode.GRID) {
      mBookmarksAdapter.populateBookmarkItem(mContextHeader, i.position);
    } else {
      BookmarkItem b = (BookmarkItem) i.targetView;
      b.copyTo(mContextHeader);
    }
    menu.setHeaderView(mContextHeader);
  }
  @Override
  public boolean onContextItemSelected(MenuItem item) {
    // It is possible that the view has been canceled when we get to
    // this point as back has a higher priority
    if (mCanceled) {
      return true;
    }
    AdapterView.AdapterContextMenuInfo i = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
    // If we have no menu info, we can't tell which item was selected.
    if (i == null) {
      return true;
    }

    switch (item.getItemId()) {
      case R.id.new_context_menu_id:
        saveCurrentPage();
        break;
      case R.id.open_context_menu_id:
        loadUrl(i.position);
        break;
      case R.id.edit_context_menu_id:
        editBookmark(i.position);
        break;
      case R.id.shortcut_context_menu_id:
        final Intent send = createShortcutIntent(i.position);
        send.setAction(INSTALL_SHORTCUT);
        sendBroadcast(send);
        break;
      case R.id.delete_context_menu_id:
        if (mMostVisited) {
          Browser.deleteFromHistory(getContentResolver(), getUrl(i.position));
          refreshList();
        } else {
          displayRemoveBookmarkDialog(i.position);
        }
        break;
      case R.id.new_window_context_menu_id:
        openInNewWindow(i.position);
        break;
      case R.id.share_link_context_menu_id:
        BrowserActivity.sharePage(
            BrowserBookmarksPage.this,
            mBookmarksAdapter.getTitle(i.position),
            getUrl(i.position),
            getFavicon(i.position),
            mBookmarksAdapter.getScreenshot(i.position));
        break;
      case R.id.copy_url_context_menu_id:
        copy(getUrl(i.position));
        break;
      case R.id.homepage_context_menu_id:
        BrowserSettings.getInstance().setHomePage(this, getUrl(i.position));
        Toast.makeText(this, R.string.homepage_set, Toast.LENGTH_LONG).show();
        break;
        // Only for the Most visited page
      case R.id.save_to_bookmarks_menu_id:
        boolean isBookmark;
        String name;
        String url;
        if (mViewMode == BookmarkViewMode.GRID) {
          isBookmark = mBookmarksAdapter.getIsBookmark(i.position);
          name = mBookmarksAdapter.getTitle(i.position);
          url = mBookmarksAdapter.getUrl(i.position);
        } else {
          HistoryItem historyItem = ((HistoryItem) i.targetView);
          isBookmark = historyItem.isBookmark();
          name = historyItem.getName();
          url = historyItem.getUrl();
        }
        // If the site is bookmarked, the item becomes remove from
        // bookmarks.
        if (isBookmark) {
          Bookmarks.removeFromBookmarks(this, getContentResolver(), url, name);
        } else {
          Browser.saveBookmark(this, name, url);
        }
        break;
      default:
        return super.onContextItemSelected(item);
    }
    return true;
  }