@@ -1275,22 +1275,27 @@ public class ConversationFragment extends XmppFragment
final Runnable next = new Runnable() {
@Override
public void run() {
- final Attachment attachment = i.next();
- if (attachment.getType() == Attachment.Type.LOCATION) {
- attachLocationToConversation(conversation, attachment.getUri());
- if (i.hasNext()) runOnUiThread(this);
- } else if (attachment.getType() == Attachment.Type.IMAGE) {
- Log.d(
- Config.LOGTAG,
- "ConversationsActivity.commitAttachments() - attaching image to conversations. CHOOSE_IMAGE");
- attachImageToConversation(conversation, attachment.getUri(), attachment.getMime(), i.hasNext() ? this : null);
- } else {
- Log.d(
- Config.LOGTAG,
- "ConversationsActivity.commitAttachments() - attaching file to conversations. CHOOSE_FILE/RECORD_VOICE/RECORD_VIDEO");
- attachFileToConversation(conversation, attachment.getUri(), attachment.getMime(), i.hasNext() ? this : null);
+ try {
+ final Attachment attachment = i.next();
+ if (attachment.getType() == Attachment.Type.LOCATION) {
+ attachLocationToConversation(conversation, attachment.getUri());
+ if (i.hasNext()) runOnUiThread(this);
+ } else if (attachment.getType() == Attachment.Type.IMAGE) {
+ Log.d(
+ Config.LOGTAG,
+ "ConversationsActivity.commitAttachments() - attaching image to conversations. CHOOSE_IMAGE");
+ attachImageToConversation(conversation, attachment.getUri(), attachment.getMime(), i.hasNext() ? this : null);
+ } else {
+ Log.d(
+ Config.LOGTAG,
+ "ConversationsActivity.commitAttachments() - attaching file to conversations. CHOOSE_FILE/RECORD_VOICE/RECORD_VIDEO");
+ attachFileToConversation(conversation, attachment.getUri(), attachment.getMime(), i.hasNext() ? this : null);
+ }
+ i.remove();
+ } catch (final java.util.ConcurrentModificationException e) {
+ // Abort, leave any unsent attachments alone for the user to try again
+ Toast.makeText(activity, "Sometimes went wrong with some attachments. Try again?", Toast.LENGTH_SHORT).show();
}
- i.remove();
mediaPreviewAdapter.notifyDataSetChanged();
toggleInputMethod();
}