display chat states in conferences
This commit is contained in:
		
							parent
							
								
									5ea4322d3f
								
							
						
					
					
						commit
						1fd3bbfe25
					
				| @ -544,12 +544,15 @@ public class MucOptions { | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	public ArrayList<User> getUsersWithChatState(ChatState state) { | 	public ArrayList<User> getUsersWithChatState(ChatState state, int max) { | ||||||
| 		synchronized (users) { | 		synchronized (users) { | ||||||
| 			ArrayList<User> list = new ArrayList<>(); | 			ArrayList<User> list = new ArrayList<>(); | ||||||
| 			for(User user : users) { | 			for(User user : users) { | ||||||
| 				if (user.chatState == state) { | 				if (user.chatState == state) { | ||||||
| 					list.add(user); | 					list.add(user); | ||||||
|  | 					if (list.size() >= max) { | ||||||
|  | 						break; | ||||||
|  | 					} | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 			return list; | 			return list; | ||||||
|  | |||||||
| @ -1284,6 +1284,36 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa | |||||||
| 						} | 						} | ||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
|  | 			} else { | ||||||
|  | 				ChatState state = ChatState.COMPOSING; | ||||||
|  | 				List<MucOptions.User> users = conversation.getMucOptions().getUsersWithChatState(state,5); | ||||||
|  | 				if (users.size() == 0) { | ||||||
|  | 					state = ChatState.PAUSED; | ||||||
|  | 					users = conversation.getMucOptions().getUsersWithChatState(state, 5); | ||||||
|  | 
 | ||||||
|  | 				} | ||||||
|  | 				if (users.size() > 0) { | ||||||
|  | 					Message statusMessage; | ||||||
|  | 					if (users.size() == 1) { | ||||||
|  | 						MucOptions.User user = users.get(0); | ||||||
|  | 						int id = state == ChatState.COMPOSING ? R.string.contact_is_typing : R.string.contact_has_stopped_typing; | ||||||
|  | 						statusMessage = Message.createStatusMessage(conversation, getString(id, UIHelper.getDisplayName(user))); | ||||||
|  | 						statusMessage.setTrueCounterpart(user.getRealJid()); | ||||||
|  | 						statusMessage.setCounterpart(user.getFullJid()); | ||||||
|  | 					} else { | ||||||
|  | 						StringBuilder builder = new StringBuilder(); | ||||||
|  | 						for(MucOptions.User user : users) { | ||||||
|  | 							if (builder.length() != 0) { | ||||||
|  | 								builder.append(", "); | ||||||
|  | 							} | ||||||
|  | 							builder.append(UIHelper.getDisplayName(user)); | ||||||
|  | 						} | ||||||
|  | 						int id = state == ChatState.COMPOSING ? R.string.contacts_are_typing : R.string.contacts_have_stopped_typing; | ||||||
|  | 						statusMessage = Message.createStatusMessage(conversation, getString(id, builder.toString())); | ||||||
|  | 					} | ||||||
|  | 					this.messageList.add(statusMessage); | ||||||
|  | 				} | ||||||
|  | 
 | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -667,19 +667,28 @@ public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextVie | |||||||
| 				}); | 				}); | ||||||
| 			} else { | 			} else { | ||||||
| 				viewHolder.status_message.setVisibility(View.VISIBLE); | 				viewHolder.status_message.setVisibility(View.VISIBLE); | ||||||
| 				viewHolder.contact_picture.setVisibility(View.VISIBLE); |  | ||||||
| 				viewHolder.load_more_messages.setVisibility(View.GONE); | 				viewHolder.load_more_messages.setVisibility(View.GONE); | ||||||
| 				if (conversation.getMode() == Conversation.MODE_SINGLE) { |  | ||||||
| 					viewHolder.contact_picture.setImageBitmap(activity |  | ||||||
| 							.avatarService().get(conversation.getContact(), |  | ||||||
| 									activity.getPixel(32))); |  | ||||||
| 					viewHolder.contact_picture.setAlpha(0.5f); |  | ||||||
| 				} |  | ||||||
| 				viewHolder.status_message.setText(message.getBody()); | 				viewHolder.status_message.setText(message.getBody()); | ||||||
|  | 				boolean showAvatar; | ||||||
|  | 				if (conversation.getMode() == Conversation.MODE_SINGLE) { | ||||||
|  | 					showAvatar = true; | ||||||
|  | 					loadAvatar(message,viewHolder.contact_picture,activity.getPixel(32)); | ||||||
|  | 				} else if (message.getCounterpart() != null ){ | ||||||
|  | 					showAvatar = true; | ||||||
|  | 					loadAvatar(message,viewHolder.contact_picture,activity.getPixel(32)); | ||||||
|  | 				} else { | ||||||
|  | 					showAvatar = false; | ||||||
|  | 				} | ||||||
|  | 				if (showAvatar) { | ||||||
|  | 					viewHolder.contact_picture.setAlpha(0.5f); | ||||||
|  | 					viewHolder.contact_picture.setVisibility(View.VISIBLE); | ||||||
|  | 				} else { | ||||||
|  | 					viewHolder.contact_picture.setVisibility(View.GONE); | ||||||
|  | 				} | ||||||
| 			} | 			} | ||||||
| 			return view; | 			return view; | ||||||
| 		} else { | 		} else { | ||||||
| 			loadAvatar(message, viewHolder.contact_picture); | 			loadAvatar(message, viewHolder.contact_picture,activity.getPixel(48)); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		viewHolder.contact_picture | 		viewHolder.contact_picture | ||||||
| @ -968,14 +977,16 @@ public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextVie | |||||||
| 	class BitmapWorkerTask extends AsyncTask<Message, Void, Bitmap> { | 	class BitmapWorkerTask extends AsyncTask<Message, Void, Bitmap> { | ||||||
| 		private final WeakReference<ImageView> imageViewReference; | 		private final WeakReference<ImageView> imageViewReference; | ||||||
| 		private Message message = null; | 		private Message message = null; | ||||||
|  | 		private final int size; | ||||||
| 
 | 
 | ||||||
| 		public BitmapWorkerTask(ImageView imageView) { | 		public BitmapWorkerTask(ImageView imageView, int size) { | ||||||
| 			imageViewReference = new WeakReference<>(imageView); | 			imageViewReference = new WeakReference<>(imageView); | ||||||
|  | 			this.size = size; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		@Override | 		@Override | ||||||
| 		protected Bitmap doInBackground(Message... params) { | 		protected Bitmap doInBackground(Message... params) { | ||||||
| 			return activity.avatarService().get(params[0], activity.getPixel(48), isCancelled()); | 			return activity.avatarService().get(params[0], size, isCancelled()); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		@Override | 		@Override | ||||||
| @ -990,9 +1001,9 @@ public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextVie | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	public void loadAvatar(Message message, ImageView imageView) { | 	public void loadAvatar(Message message, ImageView imageView, int size) { | ||||||
| 		if (cancelPotentialWork(message, imageView)) { | 		if (cancelPotentialWork(message, imageView)) { | ||||||
| 			final Bitmap bm = activity.avatarService().get(message, activity.getPixel(48), true); | 			final Bitmap bm = activity.avatarService().get(message, size, true); | ||||||
| 			if (bm != null) { | 			if (bm != null) { | ||||||
| 				cancelPotentialWork(message, imageView); | 				cancelPotentialWork(message, imageView); | ||||||
| 				imageView.setImageBitmap(bm); | 				imageView.setImageBitmap(bm); | ||||||
| @ -1000,7 +1011,7 @@ public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextVie | |||||||
| 			} else { | 			} else { | ||||||
| 				imageView.setBackgroundColor(UIHelper.getColorForName(UIHelper.getMessageDisplayName(message))); | 				imageView.setBackgroundColor(UIHelper.getColorForName(UIHelper.getMessageDisplayName(message))); | ||||||
| 				imageView.setImageDrawable(null); | 				imageView.setImageDrawable(null); | ||||||
| 				final BitmapWorkerTask task = new BitmapWorkerTask(imageView); | 				final BitmapWorkerTask task = new BitmapWorkerTask(imageView, size); | ||||||
| 				final AsyncDrawable asyncDrawable = new AsyncDrawable(activity.getResources(), null, task); | 				final AsyncDrawable asyncDrawable = new AsyncDrawable(activity.getResources(), null, task); | ||||||
| 				imageView.setImageDrawable(asyncDrawable); | 				imageView.setImageDrawable(asyncDrawable); | ||||||
| 				try { | 				try { | ||||||
|  | |||||||
| @ -22,6 +22,7 @@ import eu.siacs.conversations.entities.Contact; | |||||||
| import eu.siacs.conversations.entities.Conversation; | import eu.siacs.conversations.entities.Conversation; | ||||||
| import eu.siacs.conversations.entities.ListItem; | import eu.siacs.conversations.entities.ListItem; | ||||||
| import eu.siacs.conversations.entities.Message; | import eu.siacs.conversations.entities.Message; | ||||||
|  | import eu.siacs.conversations.entities.MucOptions; | ||||||
| import eu.siacs.conversations.entities.Presence; | import eu.siacs.conversations.entities.Presence; | ||||||
| import eu.siacs.conversations.entities.Transferable; | import eu.siacs.conversations.entities.Transferable; | ||||||
| import eu.siacs.conversations.ui.XmppActivity; | import eu.siacs.conversations.ui.XmppActivity; | ||||||
| @ -254,6 +255,15 @@ public class UIHelper { | |||||||
| 				|| ((body.charAt(pos + 1) == '<') && (body.length() == pos + 2 || Character.isWhitespace(body.charAt(pos + 2)))); | 				|| ((body.charAt(pos + 1) == '<') && (body.length() == pos + 2 || Character.isWhitespace(body.charAt(pos + 2)))); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	public static String getDisplayName(MucOptions.User user) { | ||||||
|  | 		Contact contact = user.getContact(); | ||||||
|  | 		if (contact != null) { | ||||||
|  | 			return contact.getDisplayName(); | ||||||
|  | 		} else { | ||||||
|  | 			return user.getName(); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	public static String getFileDescriptionString(final Context context, final Message message) { | 	public static String getFileDescriptionString(final Context context, final Message message) { | ||||||
| 		if (message.getType() == Message.TYPE_IMAGE) { | 		if (message.getType() == Message.TYPE_IMAGE) { | ||||||
| 			return context.getString(R.string.image); | 			return context.getString(R.string.image); | ||||||
|  | |||||||
| @ -34,7 +34,9 @@ | |||||||
|         android:id="@+id/status_message" |         android:id="@+id/status_message" | ||||||
|         android:layout_width="wrap_content" |         android:layout_width="wrap_content" | ||||||
|         android:layout_height="wrap_content" |         android:layout_height="wrap_content" | ||||||
|  |         android:minHeight="32dp" | ||||||
|         android:layout_centerVertical="true" |         android:layout_centerVertical="true" | ||||||
|  |         android:gravity="center_vertical" | ||||||
|         android:layout_marginLeft="8dp" |         android:layout_marginLeft="8dp" | ||||||
|         android:layout_toEndOf="@+id/message_photo" |         android:layout_toEndOf="@+id/message_photo" | ||||||
|         android:layout_toRightOf="@+id/message_photo" |         android:layout_toRightOf="@+id/message_photo" | ||||||
|  | |||||||
| @ -503,6 +503,8 @@ | |||||||
| 	<string name="disable_account">Disable Account</string> | 	<string name="disable_account">Disable Account</string> | ||||||
| 	<string name="contact_is_typing">%s is typing…</string> | 	<string name="contact_is_typing">%s is typing…</string> | ||||||
| 	<string name="contact_has_stopped_typing">%s has stopped typing</string> | 	<string name="contact_has_stopped_typing">%s has stopped typing</string> | ||||||
|  | 	<string name="contacts_are_typing">%s are typing…</string> | ||||||
|  | 	<string name="contacts_have_stopped_typing">%s have stopped typing</string> | ||||||
| 	<string name="pref_chat_states">Typing notifications</string> | 	<string name="pref_chat_states">Typing notifications</string> | ||||||
| 	<string name="pref_chat_states_summary">Let your contacts know when you are writing messages to them</string> | 	<string name="pref_chat_states_summary">Let your contacts know when you are writing messages to them</string> | ||||||
| 	<string name="send_location">Send location</string> | 	<string name="send_location">Send location</string> | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Daniel Gultsch
						Daniel Gultsch