do not include white listed domains in room list. fixes #3082

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/crypto/axolotl/AxolotlService.java  |  2 
src/main/java/eu/siacs/conversations/entities/MucOptions.java            | 24 
src/main/java/eu/siacs/conversations/services/XmppConnectionService.java |  5 
src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java   |  2 
src/main/res/values/strings.xml                                          |  2 
5 files changed, 17 insertions(+), 18 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/crypto/axolotl/AxolotlService.java 🔗

@@ -868,7 +868,7 @@ public class AxolotlService implements OnAdvancedStreamFeaturesLoaded {
 			jids = new ArrayList<>();
 			jids.add(conversation.getJid().asBareJid());
 		} else {
-			jids = conversation.getMucOptions().getMembers();
+			jids = conversation.getMucOptions().getMembers(false);
 		}
 		return jids;
 	}

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

@@ -306,6 +306,10 @@ public class MucOptions {
 
 		}
 
+		public boolean isDomain() {
+			return realJid != null && realJid.getLocal() == null && role == Role.NONE;
+		}
+
 		@Override
 		public int hashCode() {
 			int result = role != null ? role.hashCode() : 0;
@@ -610,17 +614,13 @@ public class MucOptions {
 
 	public ArrayList<User> getUsers(boolean includeOffline) {
 		synchronized (users) {
-			if (includeOffline) {
-				return new ArrayList<>(users);
-			} else {
-				ArrayList<User> onlineUsers = new ArrayList<>();
-				for (User user : users) {
-					if (user.getRole().ranks(Role.PARTICIPANT)) {
-						onlineUsers.add(user);
+				ArrayList<User> users = new ArrayList<>();
+				for (User user : this.users) {
+					if (!user.isDomain() && (includeOffline || user.getRole().ranks(Role.PARTICIPANT))) {
+						users.add(user);
 					}
 				}
-				return onlineUsers;
-			}
+				return users;
 		}
 	}
 
@@ -645,7 +645,7 @@ public class MucOptions {
 		jids.add(account.getJid().asBareJid());
 		synchronized (users) {
 			for (User user : users) {
-				if (user.getRealJid() == null || jids.add(user.getRealJid())) {
+				if (user.getRealJid() == null || (user.getRealJid().getLocal() != null && jids.add(user.getRealJid()))) {
 					subset.add(user);
 				}
 				if (subset.size() >= max) {
@@ -834,11 +834,11 @@ public class MucOptions {
 		return this.conversation;
 	}
 
-	public List<Jid> getMembers() {
+	public List<Jid> getMembers(final boolean includeDomains) {
 		ArrayList<Jid> members = new ArrayList<>();
 		synchronized (users) {
 			for (User user : users) {
-				if (user.affiliation.ranks(Affiliation.MEMBER) && user.realJid != null) {
+				if (user.affiliation.ranks(Affiliation.MEMBER) && user.realJid != null && (!user.isDomain() || includeDomains)) {
 					members.add(user.realJid);
 				}
 			}

src/main/java/eu/siacs/conversations/services/XmppConnectionService.java 🔗

@@ -2220,13 +2220,13 @@ public class XmppConnectionService extends Service {
 				}
 				++i;
 				if (i >= affiliations.length) {
-					List<Jid> members = conversation.getMucOptions().getMembers();
+					List<Jid> members = conversation.getMucOptions().getMembers(true);
 					if (success) {
 						List<Jid> cryptoTargets = conversation.getAcceptedCryptoTargets();
 						boolean changed = false;
 						for (ListIterator<Jid> iterator = cryptoTargets.listIterator(); iterator.hasNext(); ) {
 							Jid jid = iterator.next();
-							if (!members.contains(jid)) {
+							if (!members.contains(jid) && !members.contains(Jid.ofDomain(jid.getDomain()))) {
 								iterator.remove();
 								Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": removed " + jid + " from crypto targets of " + conversation.getName());
 								changed = true;
@@ -2237,7 +2237,6 @@ public class XmppConnectionService extends Service {
 							updateConversation(conversation);
 						}
 					}
-					Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": retrieved members for " + conversation.getJid().asBareJid() + ": " + conversation.getMucOptions().getMembers());
 					getAvatarService().clear(conversation);
 					updateMucRosterUi();
 					updateConversationUi();

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

@@ -244,7 +244,7 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
 		setSupportActionBar((Toolbar) binding.toolbar);
 		configureActionBar(getSupportActionBar());
 		this.binding.editNickButton.setOnClickListener(v -> quickEdit(mConversation.getMucOptions().getActualNick(),
-				R.string.nickname_for_this_group_chat,
+				R.string.nickname,
 				value -> {
 					if (xmppConnectionService.renameInMuc(mConversation, value, renameCallback)) {
 						return null;

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

@@ -720,5 +720,5 @@
     <string name="host_does_not_support_group_chat_avatars">Host does not support group chat avatars</string>
     <string name="only_the_owner_can_change_group_chat_avatar">Only the owner can change group chat avatar</string>
     <string name="contact_name">Contact name</string>
-    <string name="nickname_for_this_group_chat">Nickname for this group chat</string>
+    <string name="nickname">Nickname</string>
 </resources>