/**
   * Perform the bookmarks export.
   *
   * @param fileName The export file name.
   */
  private void doExportBookmarks(String fileName) {
    if (ApplicationUtils.checkCardState(this)) {
      mProgressDialog =
          ProgressDialog.show(
              this,
              this.getResources().getString(R.string.Commons_PleaseWait),
              this.getResources().getString(R.string.BookmarksListActivity_ExportingBookmarks));

      new XmlBookmarksExporter(fileName);
    }
  }
  @TargetApi(8)
  @Override
  public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {

    StringBuilder sb = new StringBuilder();

    sb.append(view.getResources().getString(R.string.Commons_SslWarningsHeader));
    sb.append("\n\n");

    if (error.hasError(SslError.SSL_UNTRUSTED)) {
      sb.append(" - ");
      sb.append(view.getResources().getString(R.string.Commons_SslUntrusted));
      sb.append("\n");
    }

    if (error.hasError(SslError.SSL_IDMISMATCH)) {
      sb.append(" - ");
      sb.append(view.getResources().getString(R.string.Commons_SslIDMismatch));
      sb.append("\n");
    }

    if (error.hasError(SslError.SSL_EXPIRED)) {
      sb.append(" - ");
      sb.append(view.getResources().getString(R.string.Commons_SslExpired));
      sb.append("\n");
    }

    if (error.hasError(SslError.SSL_NOTYETVALID)) {
      sb.append(" - ");
      sb.append(view.getResources().getString(R.string.Commons_SslNotYetValid));
      sb.append("\n");
    }

    ApplicationUtils.showContinueCancelDialog(
        view.getContext(),
        android.R.drawable.ic_dialog_info,
        view.getResources().getString(R.string.Commons_SslWarning),
        sb.toString(),
        new DialogInterface.OnClickListener() {
          @Override
          public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss();
            handler.proceed();
          }
        },
        new DialogInterface.OnClickListener() {
          @Override
          public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss();
            handler.cancel();
          }
        });
  }
 /** Show a confirmation dialog for bookmarks clearing. Perform the clear if required. */
 private void clearBookmarks() {
   ApplicationUtils.showYesNoDialog(
       this,
       android.R.drawable.ic_dialog_alert,
       R.string.BookmarksListActivity_ClearBookmarks,
       R.string.Commons_NoUndoMessage,
       new DialogInterface.OnClickListener() {
         @Override
         public void onClick(DialogInterface dialog, int which) {
           dialog.dismiss();
           doClearBookmarks();
         }
       });
 }
  /** Display a confirmation dialog and perform the bookmarks export. */
  private void exportBookmarks() {

    final String fileName = DateUtils.getNowForFileName() + ".xml";

    ApplicationUtils.showOkCancelDialog(
        this,
        android.R.drawable.ic_dialog_info,
        this.getString(R.string.BookmarksListActivity_ExportDialogTitle),
        String.format(
            this.getString(R.string.BookmarksListActivity_ExportDialogMessage),
            IOUtils.getBookmarksExportFolder().getAbsolutePath() + "/" + fileName),
        new DialogInterface.OnClickListener() {

          @Override
          public void onClick(DialogInterface dialog, int which) {

            doExportBookmarks(fileName);
          }
        });
  }
  @Override
  public void onPageStarted(WebView view, String url, Bitmap favicon) {

    // Some magic here: when performing WebView.loadDataWithBaseURL, the url is
    // "file:///android_asset/startpage,
    // whereas when the doing a "previous" or "next", the url is "about:start", and we need to
    // perform the
    // loadDataWithBaseURL here, otherwise it won't load.
    if (url.equals(Constants.URL_ABOUT_START)) {
      view.loadDataWithBaseURL(
          "file:///android_asset/startpage/",
          ApplicationUtils.getStartPage(view.getContext()),
          "text/html",
          "UTF-8",
          "about:start");
    }

    ((CustomWebView) view).notifyPageStarted();
    mMainActivity.onPageStarted(url);

    super.onPageStarted(view, url, favicon);
  }
  /** Fill the bookmark to the list UI. */
  private void fillData() {
    mCursor =
        BookmarksProviderWrapper.getStockBookmarks(
            getContentResolver(),
            PreferenceManager.getDefaultSharedPreferences(this)
                .getInt(Constants.PREFERENCES_BOOKMARKS_SORT_MODE, 0));
    startManagingCursor(mCursor);

    String[] from = new String[] {Browser.BookmarkColumns.TITLE, Browser.BookmarkColumns.URL};
    int[] to = new int[] {R.id.BookmarkRow_Title, R.id.BookmarkRow_Url};

    mCursorAdapter =
        new BookmarksCursorAdapter(
            this,
            R.layout.bookmark_row,
            mCursor,
            from,
            to,
            ApplicationUtils.getFaviconSizeForBookmarks(this));

    mList.setAdapter(mCursorAdapter);

    setAnimation();
  }
  @Override
  public boolean onContextItemSelected(MenuItem item) {
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();

    Intent i;
    BookmarkItem bookmarkItem =
        BookmarksProviderWrapper.getStockBookmarkById(getContentResolver(), info.id);

    switch (item.getItemId()) {
      case MENU_OPEN_IN_TAB:
        i = new Intent();
        i.putExtra(Constants.EXTRA_ID_NEW_TAB, true);

        if (bookmarkItem != null) {
          i.putExtra(Constants.EXTRA_ID_URL, bookmarkItem.getUrl());
        } else {
          i.putExtra(
              Constants.EXTRA_ID_URL,
              PreferenceManager.getDefaultSharedPreferences(BookmarksListActivity.this)
                  .getString(Constants.PREFERENCES_GENERAL_HOME_PAGE, Constants.URL_ABOUT_START));
        }

        if (getParent() != null) {
          getParent().setResult(RESULT_OK, i);
        } else {
          setResult(RESULT_OK, i);
        }

        finish();
        return true;

      case MENU_EDIT_BOOKMARK:
        if (bookmarkItem != null) {
          i = new Intent(this, EditBookmarkActivity.class);
          i.putExtra(Constants.EXTRA_ID_BOOKMARK_ID, info.id);
          i.putExtra(Constants.EXTRA_ID_BOOKMARK_TITLE, bookmarkItem.getTitle());
          i.putExtra(Constants.EXTRA_ID_BOOKMARK_URL, bookmarkItem.getUrl());

          startActivityForResult(i, ACTIVITY_EDIT_BOOKMARK);
        }
        return true;

      case MENU_COPY_URL:
        if (bookmarkItem != null) {
          ApplicationUtils.copyTextToClipboard(
              this, bookmarkItem.getUrl(), getString(R.string.Commons_UrlCopyToastMessage));
        }
        return true;

      case MENU_SHARE:
        if (bookmarkItem != null) {
          ApplicationUtils.sharePage(this, bookmarkItem.getTitle(), bookmarkItem.getUrl());
        }
        return true;

      case MENU_DELETE_BOOKMARK:
        // mDbAdapter.deleteBookmark(info.id);
        BookmarksProviderWrapper.deleteStockBookmark(getContentResolver(), info.id);
        fillData();
        return true;
      default:
        return super.onContextItemSelected(item);
    }
  }