public int add(final DirectMessage[] msges) {
   int before = items.size();
   int added = 0;
   for (DirectMessage msg : msges) {
     boolean foundConvo = false;
     for (DMConversation convo : items) {
       if (msg.getSenderId() == AccountService.getCurrentAccount().getId()) {
         if (msg.getRecipientId() == convo.getToId()) foundConvo = true;
       } else if (msg.getSenderId() == convo.getToId()) foundConvo = true;
       if (foundConvo) {
         added++;
         for (DirectMessage m : convo.getMessages()) {
           if (m.getId() == msg.getId()) continue;
         }
         convo.add(msg);
         break;
       }
     }
     if (!foundConvo) {
       long toId = msg.getSenderId();
       String toName = msg.getSender().getName();
       String toScreen = msg.getSender().getScreenName();
       if (toId == AccountService.getCurrentAccount().getId()) {
         toId = msg.getRecipientId();
         toName = msg.getRecipient().getName();
         toScreen = msg.getRecipient().getScreenName();
       }
       items.add(new DMConversation(toId, toName, toScreen, msg));
     }
     notifyDataSetChanged();
   }
   if (before == 0) return added;
   else if (added == before) return 0;
   else return (items.size() - before);
 }
 public DMConversation find(String screenName) {
   DMConversation toReturn = null;
   for (DMConversation convo : items) {
     if (convo.getToScreenName().equals(screenName)) {
       toReturn = convo;
       break;
     }
   }
   return toReturn;
 }
 public void remove(DMConversation convo) {
   for (int i = 0; i < items.size(); i++) {
     if (items.get(i).getToId() == convo.getToId()) {
       items.remove(i);
       notifyDataSetChanged();
       break;
     }
   }
 }
 public boolean update(DMConversation convo) {
   boolean found = false;
   for (int i = 0; i < items.size(); i++) {
     if (items.get(i).getToId() == convo.getToId()) {
       found = true;
       items.set(i, convo);
       notifyDataSetChanged();
       break;
     }
   }
   return found;
 }
 @Override
 public View getView(int position, View convertView, ViewGroup parent) {
   RelativeLayout toReturn = null;
   if (convertView != null) toReturn = (RelativeLayout) convertView;
   else
     toReturn =
         (RelativeLayout) LayoutInflater.from(context).inflate(R.layout.dm_convo_item, null);
   final DMConversation curItem = items.get(position);
   RemoteImageView profileImgView =
       (RemoteImageView) toReturn.findViewById(R.id.dmConvoProfileImg);
   if (PreferenceManager.getDefaultSharedPreferences(context)
       .getBoolean("enable_profileimg_download", true)) {
     profileImgView.setImageResource(R.drawable.sillouette);
     profileImgView.setImageURL(Utilities.getUserImage(curItem.getToScreenName(), context));
     profileImgView.setOnClickListener(
         new View.OnClickListener() {
           public void onClick(View v) {
             context.startActivity(
                 new Intent(context, ProfileScreen.class)
                     .putExtra("screen_name", curItem.getToScreenName())
                     .putExtra("account", AccountService.getCurrentAccount().getId())
                     .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
           }
         });
   } else profileImgView.setVisibility(View.GONE);
   final TextView messageTxt = (TextView) toReturn.findViewById(R.id.dmConvoMessageTxt);
   if (curItem.getLastSenderIsMe()) {
     View replyIndic = toReturn.findViewById(R.id.dmConvoReplyIndicator);
     replyIndic.setVisibility(View.VISIBLE);
     RelativeLayout.LayoutParams layoutParams =
         (RelativeLayout.LayoutParams) replyIndic.getLayoutParams();
     layoutParams.addRule(RelativeLayout.RIGHT_OF, R.id.dmConvoProfileImg);
     layoutParams.addRule(RelativeLayout.BELOW, R.id.dmConvoScreenNameTxt);
     layoutParams = (RelativeLayout.LayoutParams) messageTxt.getLayoutParams();
     layoutParams.addRule(RelativeLayout.RIGHT_OF, R.id.dmConvoReplyIndicator);
     layoutParams.addRule(RelativeLayout.BELOW, R.id.dmConvoScreenNameTxt);
     messageTxt.setLayoutParams(layoutParams);
   } else {
     (toReturn.findViewById(R.id.dmConvoReplyIndicator)).setVisibility(View.GONE);
     RelativeLayout.LayoutParams layoutParams =
         (RelativeLayout.LayoutParams) messageTxt.getLayoutParams();
     layoutParams.addRule(RelativeLayout.RIGHT_OF, R.id.dmConvoProfileImg);
     layoutParams.addRule(RelativeLayout.BELOW, R.id.dmConvoScreenNameTxt);
     messageTxt.setLayoutParams(layoutParams);
   }
   FeedListAdapter.ApplyFontSize(messageTxt, context);
   if (PreferenceManager.getDefaultSharedPreferences(context)
       .getBoolean("show_real_names", false)) {
     ((TextView) toReturn.findViewById(R.id.dmConvoScreenNameTxt)).setText(curItem.getToName());
   } else {
     ((TextView) toReturn.findViewById(R.id.dmConvoScreenNameTxt))
         .setText("@" + curItem.getToScreenName());
   }
   messageTxt.setText(
       Utilities.twitterifyText(
           context,
           curItem.getLastMessage().getText().replace("\n", " ").trim(),
           null,
           null,
           true,
           null));
   return toReturn;
 }