diff --git a/res/layout/message_recieved.xml b/res/layout/message_recieved.xml index 32a26c3a1..f4f34232b 100644 --- a/res/layout/message_recieved.xml +++ b/res/layout/message_recieved.xml @@ -28,6 +28,7 @@ android:adjustViewBounds="true" android:maxHeight="288dp" android:maxWidth="288dp" + android:paddingBottom="2dp" /> just now sending… Renew PGP announcement - Decrypting message. please wait… + Decrypting message. Please wait… Conference Details Nickname is already in use Moderator @@ -52,4 +52,6 @@ Add contact unsuccessful delivery rejected + Receiving image file. Please wait… + Preparing image for transmission. Please wait… diff --git a/src/eu/siacs/conversations/entities/Message.java b/src/eu/siacs/conversations/entities/Message.java index a1cf32e83..e2b039670 100644 --- a/src/eu/siacs/conversations/entities/Message.java +++ b/src/eu/siacs/conversations/entities/Message.java @@ -15,6 +15,7 @@ public class Message extends AbstractEntity { public static final int STATUS_SEND = 2; public static final int STATUS_SEND_FAILED = 3; public static final int STATUS_SEND_REJECTED = 4; + public static final int STATUS_PREPARING = 5; public static final int ENCRYPTION_NONE = 0; public static final int ENCRYPTION_PGP = 1; diff --git a/src/eu/siacs/conversations/services/XmppConnectionService.java b/src/eu/siacs/conversations/services/XmppConnectionService.java index df0b287a2..54c1c49bd 100644 --- a/src/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/eu/siacs/conversations/services/XmppConnectionService.java @@ -401,15 +401,28 @@ public class XmppConnectionService extends Service { return this.fileBackend; } - public Message attachImageToConversation(Conversation conversation, String presence, Uri uri) { - Message message = new Message(conversation, "", Message.ENCRYPTION_NONE); - message.setPresence(presence); - message.setType(Message.TYPE_IMAGE); - File file = this.fileBackend.copyImageToPrivateStorage(message, uri); - conversation.getMessages().add(message); - databaseBackend.createMessage(message); - sendMessage(message, null); - return message; + public void attachImageToConversation(final Conversation conversation, final String presence, final Uri uri) { + new Thread(new Runnable() { + + @Override + public void run() { + Message message = new Message(conversation, "", Message.ENCRYPTION_NONE); + message.setPresence(presence); + message.setType(Message.TYPE_IMAGE); + message.setStatus(Message.STATUS_PREPARING); + conversation.getMessages().add(message); + if (convChangedListener!=null) { + convChangedListener.onConversationListChanged(); + } + getFileBackend().copyImageToPrivateStorage(message, uri); + message.setStatus(Message.STATUS_UNSEND); + databaseBackend.createMessage(message); + if (convChangedListener!=null) { + convChangedListener.onConversationListChanged(); + } + sendMessage(message, null); + } + }).start(); } diff --git a/src/eu/siacs/conversations/ui/ConversationFragment.java b/src/eu/siacs/conversations/ui/ConversationFragment.java index d8f9ad3be..ea5f89ebb 100644 --- a/src/eu/siacs/conversations/ui/ConversationFragment.java +++ b/src/eu/siacs/conversations/ui/ConversationFragment.java @@ -205,20 +205,19 @@ public class ConversationFragment extends Fragment { case SENT: view = (View) inflater.inflate(R.layout.message_sent, null); - viewHolder.imageView = (ImageView) view + viewHolder.contact_picture = (ImageView) view .findViewById(R.id.message_photo); - viewHolder.imageView.setImageBitmap(selfBitmap); - viewHolder.indicator = (ImageView) view.findViewById(R.id.security_indicator); + viewHolder.contact_picture.setImageBitmap(selfBitmap); break; case RECIEVED: view = (View) inflater.inflate( R.layout.message_recieved, null); - viewHolder.imageView = (ImageView) view + viewHolder.contact_picture = (ImageView) view .findViewById(R.id.message_photo); - viewHolder.indicator = (ImageView) view.findViewById(R.id.security_indicator); + if (item.getConversation().getMode() == Conversation.MODE_SINGLE) { - viewHolder.imageView.setImageBitmap(mBitmapCache + viewHolder.contact_picture.setImageBitmap(mBitmapCache .get(item.getConversation().getName(useSubject), item .getConversation().getContact(), getActivity() @@ -230,6 +229,7 @@ public class ConversationFragment extends Fragment { viewHolder = null; break; } + viewHolder.indicator = (ImageView) view.findViewById(R.id.security_indicator); viewHolder.image = (ImageView) view.findViewById(R.id.message_image); viewHolder.messageBody = (TextView) view .findViewById(R.id.message_body); @@ -242,29 +242,47 @@ public class ConversationFragment extends Fragment { if (type == RECIEVED) { if (item.getConversation().getMode() == Conversation.MODE_MULTI) { if (item.getCounterpart() != null) { - viewHolder.imageView.setImageBitmap(mBitmapCache + viewHolder.contact_picture.setImageBitmap(mBitmapCache .get(item.getCounterpart(), null, getActivity() .getApplicationContext())); } else { - viewHolder.imageView.setImageBitmap(mBitmapCache + viewHolder.contact_picture.setImageBitmap(mBitmapCache .get(item.getConversation().getName(useSubject), null, getActivity() .getApplicationContext())); } } } + + if (item.getEncryption() == Message.ENCRYPTION_NONE) { + viewHolder.indicator.setVisibility(View.GONE); + } else { + viewHolder.indicator.setVisibility(View.VISIBLE); + } + + if (item.getType() == Message.TYPE_IMAGE) { - viewHolder.image.setVisibility(View.VISIBLE); - if (item.getStatus() != Message.STATUS_RECIEVING) { + if (item.getStatus() == Message.STATUS_PREPARING) { + viewHolder.image.setVisibility(View.GONE); + viewHolder.messageBody.setVisibility(View.VISIBLE); + viewHolder.messageBody.setText(getString(R.string.preparing_image)); + viewHolder.messageBody.setTextColor(0xff33B5E5); + viewHolder.messageBody.setTypeface(null,Typeface.ITALIC); + } else if (item.getStatus() == Message.STATUS_RECIEVING) { + viewHolder.image.setVisibility(View.GONE); + viewHolder.messageBody.setVisibility(View.GONE); + viewHolder.messageBody.setVisibility(View.VISIBLE); + viewHolder.messageBody.setText(getString(R.string.receiving_image)); + viewHolder.messageBody.setTextColor(0xff33B5E5); + viewHolder.messageBody.setTypeface(null,Typeface.ITALIC); + } else { viewHolder.image.setImageBitmap(activity.xmppConnectionService.getFileBackend().getThumbnailFromMessage(item,(int) (metrics.density * 288))); viewHolder.messageBody.setVisibility(View.GONE); - } else { - viewHolder.messageBody.setVisibility(View.VISIBLE); - viewHolder.messageBody.setText("receiving image file"); + viewHolder.image.setVisibility(View.VISIBLE); } } else { - if (viewHolder.image != null) viewHolder.image.setVisibility(View.GONE); + viewHolder.image.setVisibility(View.GONE); viewHolder.messageBody.setVisibility(View.VISIBLE); String body = item.getBody(); if (body != null) { @@ -274,22 +292,17 @@ public class ConversationFragment extends Fragment { viewHolder.messageBody.setTextColor(0xff33B5E5); viewHolder.messageBody.setTypeface(null, Typeface.ITALIC); - viewHolder.indicator.setVisibility(View.VISIBLE); } else if ((item.getEncryption() == Message.ENCRYPTION_OTR)||(item.getEncryption() == Message.ENCRYPTION_DECRYPTED)) { viewHolder.messageBody.setText(body.trim()); viewHolder.messageBody.setTextColor(0xff333333); viewHolder.messageBody.setTypeface(null, Typeface.NORMAL); - viewHolder.indicator.setVisibility(View.VISIBLE); } else { viewHolder.messageBody.setText(body.trim()); viewHolder.messageBody.setTextColor(0xff333333); viewHolder.messageBody.setTypeface(null, Typeface.NORMAL); - viewHolder.indicator.setVisibility(View.GONE); } - } else { - viewHolder.indicator.setVisibility(View.GONE); } } switch (item.getStatus()) { @@ -607,7 +620,7 @@ public class ConversationFragment extends Fragment { protected ImageView indicator; protected TextView time; protected TextView messageBody; - protected ImageView imageView; + protected ImageView contact_picture; }