@Override
 public void onItemClick(Conversation conversation, View view) {
   if (mAdapter.isInMultiSelectMode()) {
     mAdapter.toggleSelection(conversation.getThreadId());
   } else {
     ((MainActivity) mContext).setConversation(conversation.getThreadId(), -1, null, true);
   }
 }
  @Override
  public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);

    // Make sure we're only touching the conversation menu
    if (menu.findItem(R.id.menu_search) != null) {
      if (mAdapter.isInMultiSelectMode()) {
        menu.findItem(R.id.menu_search).setVisible(false);
        menu.findItem(R.id.menu_delete).setVisible(true);
        menu.findItem(R.id.menu_mark_read).setVisible(true);
      } else {
        menu.findItem(R.id.menu_search).setVisible(true);
        menu.findItem(R.id.menu_delete).setVisible(false);
        menu.findItem(R.id.menu_mark_read).setVisible(false);
      }
    } else {
      mAdapter.disableMultiSelectMode(false);
    }
  }
  @Override
  public void onItemLongClick(final Conversation conversation, View view) {
    if (mAdapter.isInMultiSelectMode()) {
      mAdapter.toggleSelection(conversation.getThreadId());
      return;
    }

    final long threadId = conversation.getThreadId();
    final String name = conversation.getRecipients().formatNames(", ");

    final ConversationPrefsHelper conversationPrefs =
        new ConversationPrefsHelper(mContext, threadId);
    final boolean muted = !conversationPrefs.getNotificationsEnabled();

    final QKDialog dialog = new QKDialog().setContext(mContext).setTitle(name);

    if (!mAdapter.isInMultiSelectMode()) {
      dialog.addMenuItem(R.string.menu_multi_select, MENU_MULTI_SELECT);
    }

    if (muted) {
      dialog.addMenuItem(R.string.menu_unmute_conversation, MENU_UNMUTE_CONVERSATION);
    } else {
      dialog.addMenuItem(R.string.menu_mute_conversation, MENU_MUTE_CONVERSATION);
    }

    if (conversation.hasUnreadMessages()) {
      dialog.addMenuItem(R.string.menu_mark_read, MENU_MARK_READ);
    } else {
      dialog.addMenuItem(R.string.menu_mark_unread, MENU_MARK_UNREAD);
    }

    dialog.addMenuItem(R.string.menu_notification_settings, MENU_NOTIFICATION_SETTINGS);
    dialog.addMenuItem(R.string.menu_view_details, MENU_VIEW_DETAILS);

    if (conversation.hasError()) {
      dialog.addMenuItem(R.string.delete_all_failed, MENU_DELETE_FAILED);
    }

    dialog.addMenuItem(R.string.menu_delete_conversation, MENU_DELETE_CONVERSATION);

    dialog
        .buildMenu(
            new AdapterView.OnItemClickListener() {
              @Override
              public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                switch ((int) id) {
                  case MENU_MUTE_CONVERSATION:
                    conversationPrefs.putBoolean(SettingsFragment.NOTIFICATIONS, false);
                    mAdapter.notifyDataSetChanged();
                    break;

                  case MENU_UNMUTE_CONVERSATION:
                    conversationPrefs.putBoolean(SettingsFragment.NOTIFICATIONS, true);
                    mAdapter.notifyDataSetChanged();
                    break;

                  case MENU_NOTIFICATION_SETTINGS:
                    ConversationNotificationSettingsDialog.newInstance(threadId, name)
                        .setContext(mContext)
                        .show(((MainActivity) mContext).getFragmentManager(), "notification prefs");
                    break;

                  case MENU_VIEW_DETAILS:
                    mConversationDetailsDialog.showDetails(conversation);
                    break;

                  case MENU_MARK_READ:
                    new ConversationLegacy(mContext, threadId).markRead();
                    break;

                  case MENU_MARK_UNREAD:
                    new ConversationLegacy(mContext, threadId).markUnread();
                    break;

                  case MENU_MULTI_SELECT:
                    mAdapter.setSelected(threadId);
                    break;

                  case MENU_DELETE_CONVERSATION:
                    DialogHelper.showDeleteConversationDialog((MainActivity) mContext, threadId);
                    break;
                  case MENU_DELETE_FAILED:
                    // Deletes all failed messages from all conversations
                    DialogHelper.showDeleteFailedMessagesDialog((MainActivity) mContext, threadId);
                    break;
                }
              }
            })
        .show(mContext.getFragmentManager(), "conversation options");
  }