made ui with sending images a little smoother

Daniel Gultsch created

Change summary

res/layout/message_recieved.xml                                |  1 
res/layout/message_sent.xml                                    |  1 
res/values/strings.xml                                         |  4 
src/eu/siacs/conversations/entities/Message.java               |  1 
src/eu/siacs/conversations/services/XmppConnectionService.java | 31 +
src/eu/siacs/conversations/ui/ConversationFragment.java        | 53 ++-
6 files changed, 61 insertions(+), 30 deletions(-)

Detailed changes

res/layout/message_recieved.xml 🔗

@@ -28,6 +28,7 @@
                 android:adjustViewBounds="true"
                 android:maxHeight="288dp"
                 android:maxWidth="288dp"
+                android:paddingBottom="2dp"
                 />
             
             <TextView

res/layout/message_sent.xml 🔗

@@ -27,6 +27,7 @@
                 android:adjustViewBounds="true"
                 android:maxHeight="288dp"
                 android:maxWidth="288dp"
+                android:paddingBottom="2dp"
                 />
 
             <TextView

res/values/strings.xml 🔗

@@ -14,7 +14,7 @@
     <string name="just_now">just now</string>
     <string name="sending">sending&#8230;</string>
     <string name="announce_pgp">Renew PGP announcement</string>
-    <string name="encrypted_message">Decrypting message. please wait&#8230;</string>
+    <string name="encrypted_message">Decrypting message. Please wait&#8230;</string>
     <string name="conference_details">Conference Details</string>
     <string name="nick_in_use">Nickname is already in use</string>
     <string name="moderator">Moderator</string>
@@ -52,4 +52,6 @@
     <string name="add_contact">Add contact</string>
     <string name="send_failed">unsuccessful delivery</string>
     <string name="send_rejected">rejected</string>
+    <string name="receiving_image">Receiving image file. Please wait&#8230;</string>
+    <string name="preparing_image">Preparing image for transmission. Please wait&#8230;</string>
 </resources>

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;

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();
 	}
 	
 	

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) {
-						viewHolder.image.setImageBitmap(activity.xmppConnectionService.getFileBackend().getThumbnailFromMessage(item,(int) (metrics.density * 288)));
+					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);
-					} else {
 						viewHolder.messageBody.setVisibility(View.VISIBLE);
-						viewHolder.messageBody.setText("receiving image file");
+						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);
+						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;
 
 	}