Change summary
src/main/java/eu/siacs/conversations/entities/Conversation.java | 12
src/main/java/eu/siacs/conversations/entities/MucOptions.java | 35 +
src/main/java/eu/siacs/conversations/parser/MessageParser.java | 4
src/main/java/eu/siacs/conversations/services/AvatarService.java | 2
4 files changed, 37 insertions(+), 16 deletions(-)
Detailed changes
@@ -495,12 +495,12 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl
public String getName() {
if (getMode() == MODE_MULTI) {
- if (getMucOptions().getSubject() != null) {
- return getMucOptions().getSubject();
- } else if (bookmark != null
- && bookmark.getBookmarkName() != null
- && !bookmark.getBookmarkName().trim().isEmpty()) {
- return bookmark.getBookmarkName().trim();
+ final String subject = getMucOptions().getSubject();
+ final String bookmarkName = bookmark != null ? bookmark.getBookmarkName() : null;
+ if (subject != null && !subject.trim().isEmpty()) {
+ return subject;
+ } else if (bookmarkName != null && !bookmarkName.trim().isEmpty()) {
+ return bookmarkName;
} else {
String generatedName = getMucOptions().createNameFromParticipants();
if (generatedName != null) {
@@ -3,7 +3,6 @@ package eu.siacs.conversations.entities;
import android.annotation.SuppressLint;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -362,12 +361,11 @@ public class MucOptions {
private final Set<User> users = new HashSet<>();
private final List<String> features = new ArrayList<>();
private Data form = new Data();
- private Conversation conversation;
+ private final Conversation conversation;
private boolean isOnline = false;
private Error error = Error.NONE;
public OnRenameListener onRenameListener = null;
private User self;
- private String subject = null;
private String password = null;
public MucOptions(Conversation conversation) {
@@ -661,18 +659,39 @@ public class MucOptions {
return self;
}
- public void setSubject(String content) {
- this.subject = content;
+ public boolean setSubject(String subject) {
+ return this.conversation.setAttribute("subject",subject);
}
public String getSubject() {
- return this.subject;
+ return this.conversation.getAttribute("subject");
+ }
+
+ public List<User> getFallbackUsersFromCryptoTargets() {
+ List<User> users = new ArrayList<>();
+ for(Jid jid : conversation.getAcceptedCryptoTargets()) {
+ User user = new User(this,null);
+ user.setRealJid(jid);
+ users.add(user);
+ }
+ return users;
+ }
+
+ public List<User> getUsersRelevantForNameAndAvatar() {
+ final List<User> users;
+ if (isOnline) {
+ users = getUsers(5);
+ } else {
+ users = getFallbackUsersFromCryptoTargets();
+ }
+ return users;
}
public String createNameFromParticipants() {
- if (getUserCount() >= 2) {
+ List<User> users = getUsersRelevantForNameAndAvatar();
+ if (users.size() >= 2) {
StringBuilder builder = new StringBuilder();
- for (User user : getUsers(5)) {
+ for (User user : users) {
if (builder.length() != 0) {
builder.append(", ");
}
@@ -674,7 +674,9 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece
if (conversation != null && conversation.getMode() == Conversation.MODE_MULTI) {
conversation.setHasMessagesLeftOnServer(conversation.countMessages() > 0);
String subject = packet.findChildContent("subject");
- conversation.getMucOptions().setSubject(subject);
+ if (conversation.getMucOptions().setSubject(subject)) {
+ mXmppConnectionService.updateConversation(conversation);
+ }
final Bookmark bookmark = conversation.getBookmark();
if (bookmark != null && bookmark.getBookmarkName() == null) {
if (bookmark.setBookmarkName(subject)) {
@@ -213,7 +213,7 @@ public class AvatarService implements OnAdvancedStreamFeaturesLoaded {
if (bitmap != null || cachedOnly) {
return bitmap;
}
- final List<MucOptions.User> users = mucOptions.getUsers(5);
+ final List<MucOptions.User> users = mucOptions.getUsersRelevantForNameAndAvatar();
if (users.size() == 0) {
Conversation c = mucOptions.getConversation();
bitmap = getImpl(c.getName(),c.getJid().toBareJid().toString(),size);