show warning when trying to highlight users that have left the conference

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/entities/MucOptions.java     |  9 
src/main/java/eu/siacs/conversations/ui/ConversationFragment.java | 17 
src/main/res/values/strings.xml                                   |  1 
3 files changed, 22 insertions(+), 5 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/entities/MucOptions.java 🔗

@@ -264,6 +264,15 @@ public class MucOptions {
 		users.add(user);
 	}
 
+	public boolean isUserInRoom(String name) {
+		for (int i = 0; i < users.size(); ++i) {
+			if (users.get(i).getName().equals(name)) {
+				return true;
+			}
+		}
+		return false;
+	}
+
 	public void processPacket(PresencePacket packet, PgpEngine pgp) {
 		final Jid from = packet.getFrom();
 		if (!from.isBareJid()) {

src/main/java/eu/siacs/conversations/ui/ConversationFragment.java 🔗

@@ -385,11 +385,11 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
 				if (message.getStatus() <= Message.STATUS_RECEIVED) {
 					if (message.getConversation().getMode() == Conversation.MODE_MULTI) {
 						if (message.getCounterpart() != null) {
-							if (!message.getCounterpart().isBareJid()) {
-								highlightInConference(message.getCounterpart().getResourcepart());
-							} else {
-								highlightInConference(message.getCounterpart().toString());
+							String user = message.getCounterpart().isBareJid() ? message.getCounterpart().toString() : message.getCounterpart().getResourcepart();
+							if (!message.getConversation().getMucOptions().isUserInRoom(user)) {
+								Toast.makeText(activity,activity.getString(R.string.user_has_left_conference,user),Toast.LENGTH_SHORT).show();
 							}
+							highlightInConference(user);
 						}
 					} else {
 						activity.switchToContactDetails(message.getContact());
@@ -410,7 +410,14 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
 						if (message.getStatus() <= Message.STATUS_RECEIVED) {
 							if (message.getConversation().getMode() == Conversation.MODE_MULTI) {
 								if (message.getCounterpart() != null) {
-									privateMessageWith(message.getCounterpart());
+									String user = message.getCounterpart().getResourcepart();
+									if (user != null) {
+										if (message.getConversation().getMucOptions().isUserInRoom(user)) {
+											privateMessageWith(message.getCounterpart());
+										} else {
+											Toast.makeText(activity, activity.getString(R.string.user_has_left_conference, user), Toast.LENGTH_SHORT).show();
+										}
+									}
 								}
 							}
 						} else {

src/main/res/values/strings.xml 🔗

@@ -498,4 +498,5 @@
 	<string name="file_not_found_on_remote_host">File not found on remote server</string>
 	<string name="search_for_contacts_or_groups">Search for contacts or groups</string>
 	<string name="send_private_message">Send private message</string>
+	<string name="user_has_left_conference">%s has left the conference!</string>
 </resources>