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

    switch (item.getItemId()) {
      case CONTEXT_MENU_MARK:
        mPositionInCardsList = info.position;
        DeckTask.launchDeckTask(
            DeckTask.TASK_TYPE_MARK_CARD,
            mMarkCardHandler,
            new DeckTask.TaskData(0, mDeck, mSelectedCard));
        return true;
      case CONTEXT_MENU_SUSPEND:
        mPositionInCardsList = info.position;
        DeckTask.launchDeckTask(
            DeckTask.TASK_TYPE_SUSPEND_CARD,
            mSuspendCardHandler,
            new DeckTask.TaskData(0, mDeck, mSelectedCard));
        return true;
      case CONTEXT_MENU_DELETE:
        mPositionInCardsList = info.position;

        Dialog dialog;
        Resources res = getResources();
        StyledDialog.Builder builder = new StyledDialog.Builder(this);
        builder.setTitle(res.getString(R.string.delete_card_title));
        builder.setIcon(android.R.drawable.ic_dialog_alert);
        builder.setMessage(
            String.format(
                res.getString(R.string.delete_card_message),
                mCards.get(mPositionInCardsList).get("question"),
                mCards.get(mPositionInCardsList).get("answer")));
        builder.setPositiveButton(
            res.getString(R.string.yes),
            new DialogInterface.OnClickListener() {
              @Override
              public void onClick(DialogInterface dialog, int which) {
                DeckTask.launchDeckTask(
                    DeckTask.TASK_TYPE_DELETE_CARD,
                    mDeleteCardHandler,
                    new DeckTask.TaskData(0, mDeck, mSelectedCard));
              }
            });
        builder.setNegativeButton(res.getString(R.string.no), null);
        dialog = builder.create();
        dialog.show();
        return true;
      case CONTEXT_MENU_DETAILS:
        Themes.htmlOkDialog(
                this,
                getResources().getString(R.string.card_browser_card_details),
                mSelectedCard.getCardDetails(this, true))
            .show();
        return true;
      default:
        return super.onContextItemSelected(item);
    }
  }
 private void getCards() {
   DeckTask.launchDeckTask(
       DeckTask.TASK_TYPE_LOAD_CARDS,
       mLoadCardsHandler,
       new DeckTask.TaskData(
           mDeck,
           getResources().getStringArray(R.array.card_browser_order_values)[mSelectedOrder]));
 }
  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == EDIT_CARD && resultCode == RESULT_OK) {
      Log.i(AnkiDroidApp.TAG, "Saving card...");
      DeckTask.launchDeckTask(
          DeckTask.TASK_TYPE_UPDATE_FACT,
          mUpdateCardHandler,
          new DeckTask.TaskData(0, mDeck, mSelectedCard));
      // TODO: code to save the changes made to the current card.
    } else if (requestCode == ADD_FACT && resultCode == RESULT_OK) {
      getCards();
    }
  }
 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
   switch (item.getItemId()) {
     case MENU_UNDO:
       DeckTask.launchDeckTask(
           DeckTask.TASK_TYPE_UNDO, mUndoRedoHandler, new DeckTask.TaskData(0, mDeck, 0, true));
       return true;
     case MENU_REDO:
       DeckTask.launchDeckTask(
           DeckTask.TASK_TYPE_REDO, mUndoRedoHandler, new DeckTask.TaskData(0, mDeck, 0, true));
       return true;
     case MENU_ADD_FACT:
       startActivityForResult(new Intent(CardBrowser.this, FactAdder.class), ADD_FACT);
       if (Integer.valueOf(android.os.Build.VERSION.SDK) > 4) {
         ActivityTransitionAnimation.slide(CardBrowser.this, ActivityTransitionAnimation.LEFT);
       }
       return true;
     case MENU_SHOW_MARKED:
       mShowOnlyMarSus = true;
       mSearchEditText.setHint(R.string.card_browser_show_marked);
       mCards.clear();
       for (int i = 0; i < mAllCards.size(); i++) {
         if ((mAllCards
                         .get(i)
                         .get("question")
                         .toLowerCase()
                         .indexOf(mSearchEditText.getText().toString().toLowerCase())
                     != -1
                 || mAllCards
                         .get(i)
                         .get("answer")
                         .toLowerCase()
                         .indexOf(mSearchEditText.getText().toString().toLowerCase())
                     != -1)
             && mAllCards.get(i).get("marSus").subSequence(0, 1).equals("1")) {
           mCards.add(mAllCards.get(i));
         }
       }
       updateList();
       return true;
     case MENU_SELECT_SUSPENDED:
       mShowOnlyMarSus = true;
       mSearchEditText.setHint(R.string.card_browser_show_suspended);
       mCards.clear();
       for (int i = 0; i < mAllCards.size(); i++) {
         if ((mAllCards
                         .get(i)
                         .get("question")
                         .toLowerCase()
                         .indexOf(mSearchEditText.getText().toString().toLowerCase())
                     != -1
                 || mAllCards
                         .get(i)
                         .get("answer")
                         .toLowerCase()
                         .indexOf(mSearchEditText.getText().toString().toLowerCase())
                     != -1)
             && mAllCards.get(i).get("marSus").subSequence(1, 2).equals("1")) {
           mCards.add(mAllCards.get(i));
         }
       }
       updateList();
       return true;
     case MENU_SELECT_TAG:
       recreateTagsDialog();
       mTagsDialog.show();
       return true;
     case MENU_CHANGE_ORDER:
       showDialog(DIALOG_ORDER);
       return true;
   }
   return false;
 }