diff options
Diffstat (limited to 'src/main')
7 files changed, 344 insertions, 330 deletions
diff --git a/src/main/java/de/pixart/messenger/entities/Contact.java b/src/main/java/de/pixart/messenger/entities/Contact.java index 6edb14ada..a74b09dff 100644 --- a/src/main/java/de/pixart/messenger/entities/Contact.java +++ b/src/main/java/de/pixart/messenger/entities/Contact.java @@ -479,10 +479,14 @@ public class Contact implements ListItem, Blockable { } } - public String getAvatar() { + public String getAvatarFilename() { return avatar == null ? null : avatar.getFilename(); } + public Avatar getAvatar() { + return avatar; + } + public boolean deleteOtrFingerprint(String fingerprint) { synchronized (this.keys) { boolean success = false; diff --git a/src/main/java/de/pixart/messenger/entities/MucOptions.java b/src/main/java/de/pixart/messenger/entities/MucOptions.java index 258ded842..cf09e73a7 100644 --- a/src/main/java/de/pixart/messenger/entities/MucOptions.java +++ b/src/main/java/de/pixart/messenger/entities/MucOptions.java @@ -25,7 +25,31 @@ import rocks.xmpp.addr.Jid; @SuppressLint("DefaultLocale") public class MucOptions { + public static final String STATUS_CODE_SELF_PRESENCE = "110"; + public static final String STATUS_CODE_ROOM_CREATED = "201"; + public static final String STATUS_CODE_BANNED = "301"; + public static final String STATUS_CODE_CHANGED_NICK = "303"; + public static final String STATUS_CODE_KICKED = "307"; + public static final String STATUS_CODE_AFFILIATION_CHANGE = "321"; + public static final String STATUS_CODE_LOST_MEMBERSHIP = "322"; + public static final String STATUS_CODE_SHUTDOWN = "332"; + private final Set<User> users = new HashSet<>(); + private final Conversation conversation; + public OnRenameListener onRenameListener = null; private boolean mAutoPushConfiguration = true; + private Account account; + private ServiceDiscoveryResult serviceDiscoveryResult; + private boolean isOnline = false; + private Error error = Error.NONE; + private User self; + private String password = null; + public MucOptions(Conversation conversation) { + this.account = conversation.getAccount(); + this.conversation = conversation; + this.self = new User(this, createJoinJid(getProposedNick())); + this.self.affiliation = Affiliation.of(conversation.getAttribute("affiliation")); + this.self.role = Role.of(conversation.getAttribute("role")); + } public Account getAccount() { return this.conversation.getAccount(); @@ -75,302 +99,6 @@ public class MucOptions { return MessageArchiveService.Version.has(getFeatures()); } - public enum Affiliation { - OWNER(4, R.string.owner), - ADMIN(3, R.string.admin), - MEMBER(2, R.string.member), - OUTCAST(0, R.string.outcast), - NONE(1, R.string.no_affiliation); - - Affiliation(int rank, int resId) { - this.resId = resId; - this.rank = rank; - } - - private int resId; - private int rank; - - public int getResId() { - return resId; - } - - @Override - public String toString() { - return name().toLowerCase(Locale.US); - } - - public boolean outranks(Affiliation affiliation) { - return rank > affiliation.rank; - } - - public boolean ranks(Affiliation affiliation) { - return rank >= affiliation.rank; - } - - public static Affiliation of(@Nullable String value) { - if (value == null) { - return NONE; - } - try { - return Affiliation.valueOf(value.toUpperCase(Locale.US)); - } catch (IllegalArgumentException e) { - return NONE; - } - } - } - - public enum Role { - MODERATOR(R.string.moderator, 3), - VISITOR(R.string.visitor, 1), - PARTICIPANT(R.string.participant, 2), - NONE(R.string.no_role, 0); - - Role(int resId, int rank) { - this.resId = resId; - this.rank = rank; - } - - private int resId; - private int rank; - - public int getResId() { - return resId; - } - - @Override - public String toString() { - return name().toLowerCase(Locale.US); - } - - public boolean ranks(Role role) { - return rank >= role.rank; - } - - public static Role of(@Nullable String value) { - if (value == null) { - return NONE; - } - try { - return Role.valueOf(value.toUpperCase(Locale.US)); - } catch (IllegalArgumentException e) { - return NONE; - } - } - } - - public enum Error { - NO_RESPONSE, - SERVER_NOT_FOUND, - NONE, - NICK_IN_USE, - PASSWORD_REQUIRED, - BANNED, - MEMBERS_ONLY, - RESOURCE_CONSTRAINT, - KICKED, - SHUTDOWN, - DESTROYED, - INVALID_NICK, - UNKNOWN - } - - public static final String STATUS_CODE_SELF_PRESENCE = "110"; - public static final String STATUS_CODE_ROOM_CREATED = "201"; - public static final String STATUS_CODE_BANNED = "301"; - public static final String STATUS_CODE_CHANGED_NICK = "303"; - public static final String STATUS_CODE_KICKED = "307"; - public static final String STATUS_CODE_AFFILIATION_CHANGE = "321"; - public static final String STATUS_CODE_LOST_MEMBERSHIP = "322"; - public static final String STATUS_CODE_SHUTDOWN = "332"; - - private interface OnEventListener { - void onSuccess(); - - void onFailure(); - } - - public interface OnRenameListener extends OnEventListener { - - } - - public static class User implements Comparable<User> { - private Role role = Role.NONE; - private Affiliation affiliation = Affiliation.NONE; - private Jid realJid; - private Jid fullJid; - private long pgpKeyId = 0; - private Avatar avatar; - private MucOptions options; - private ChatState chatState = Config.DEFAULT_CHATSTATE; - - public User(MucOptions options, Jid from) { - this.options = options; - this.fullJid = from; - } - - public String getName() { - return fullJid == null ? null : fullJid.getResource(); - } - - public void setRealJid(Jid jid) { - this.realJid = jid != null ? jid.asBareJid() : null; - } - - public Role getRole() { - return this.role; - } - - public void setRole(String role) { - this.role = Role.of(role); - } - - public Affiliation getAffiliation() { - return this.affiliation; - } - - public void setAffiliation(String affiliation) { - this.affiliation = Affiliation.of(affiliation); - } - - public void setPgpKeyId(long id) { - this.pgpKeyId = id; - } - - public long getPgpKeyId() { - if (this.pgpKeyId != 0) { - return this.pgpKeyId; - } else if (realJid != null) { - return getAccount().getRoster().getContact(realJid).getPgpKeyId(); - } else { - return 0; - } - } - - public Contact getContact() { - if (fullJid != null) { - return getAccount().getRoster().getContactFromRoster(realJid); - } else if (realJid != null) { - return getAccount().getRoster().getContact(realJid); - } else { - return null; - } - } - - public boolean setAvatar(Avatar avatar) { - if (this.avatar != null && this.avatar.equals(avatar)) { - return false; - } else { - this.avatar = avatar; - return true; - } - } - - public String getAvatar() { - return avatar == null ? null : avatar.getFilename(); - } - - public Account getAccount() { - return options.getAccount(); - } - - public Conversation getConversation() { - return options.getConversation(); - } - - public Jid getFullJid() { - return fullJid; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - User user = (User) o; - - if (role != user.role) return false; - if (affiliation != user.affiliation) return false; - if (realJid != null ? !realJid.equals(user.realJid) : user.realJid != null) - return false; - return fullJid != null ? fullJid.equals(user.fullJid) : user.fullJid == null; - - } - - public boolean isDomain() { - return realJid != null && realJid.getLocal() == null && role == Role.NONE; - } - - @Override - public int hashCode() { - int result = role != null ? role.hashCode() : 0; - result = 31 * result + (affiliation != null ? affiliation.hashCode() : 0); - result = 31 * result + (realJid != null ? realJid.hashCode() : 0); - result = 31 * result + (fullJid != null ? fullJid.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "[fulljid:" + String.valueOf(fullJid) + ",realjid:" + String.valueOf(realJid) + ",affiliation" + affiliation.toString() + "]"; - } - - public boolean realJidMatchesAccount() { - return realJid != null && realJid.equals(options.account.getJid().asBareJid()); - } - - @Override - public int compareTo(@NonNull User another) { - if (another.getAffiliation().outranks(getAffiliation())) { - return 1; - } else if (getAffiliation().outranks(another.getAffiliation())) { - return -1; - } else { - return getComparableName().compareToIgnoreCase(another.getComparableName()); - } - } - - - private String getComparableName() { - Contact contact = getContact(); - if (contact != null) { - return contact.getDisplayName(); - } else { - String name = getName(); - return name == null ? "" : name; - } - } - - public Jid getRealJid() { - return realJid; - } - - public boolean setChatState(ChatState chatState) { - if (this.chatState == chatState) { - return false; - } - this.chatState = chatState; - return true; - } - } - - private Account account; - private final Set<User> users = new HashSet<>(); - private ServiceDiscoveryResult serviceDiscoveryResult; - private final Conversation conversation; - private boolean isOnline = false; - private Error error = Error.NONE; - public OnRenameListener onRenameListener = null; - private User self; - private String password = null; - - public MucOptions(Conversation conversation) { - this.account = conversation.getAccount(); - this.conversation = conversation; - this.self = new User(this, createJoinJid(getProposedNick())); - this.self.affiliation = Affiliation.of(conversation.getAttribute("affiliation")); - this.self.role = Role.of(conversation.getAttribute("role")); - } - public boolean updateConfiguration(ServiceDiscoveryResult serviceDiscoveryResult) { this.serviceDiscoveryResult = serviceDiscoveryResult; String name; @@ -400,7 +128,7 @@ public class MucOptions { } public String getAvatar() { - return account.getRoster().getContact(conversation.getJid()).getAvatar(); + return account.getRoster().getContact(conversation.getJid()).getAvatarFilename(); } public boolean hasFeature(String feature) { @@ -559,10 +287,10 @@ public class MucOptions { return null; } - public User findOrCreateUserByRealJid(Jid jid) { + public User findOrCreateUserByRealJid(Jid jid, Jid fullJid) { User user = findUserByRealJid(jid); if (user == null) { - user = new User(this, null); + user = new User(this, fullJid); user.setRealJid(jid); } return user; @@ -570,12 +298,7 @@ public class MucOptions { public User findUser(ReadByMarker readByMarker) { if (readByMarker.getRealJid() != null) { - User user = findUserByRealJid(readByMarker.getRealJid().asBareJid()); - if (user == null) { - user = new User(this, readByMarker.getFullJid()); - user.setRealJid(readByMarker.getRealJid()); - } - return user; + return findOrCreateUserByRealJid(readByMarker.getRealJid().asBareJid(), readByMarker.getFullJid()); } else if (readByMarker.getFullJid() != null) { return findUserByFullJid(readByMarker.getFullJid()); } else { @@ -591,11 +314,6 @@ public class MucOptions { return findUserByFullJid(jid) != null; } - public void setError(Error error) { - this.isOnline = isOnline && error == Error.NONE; - this.error = error; - } - public boolean setOnline() { boolean before = this.isOnline; this.isOnline = true; @@ -638,7 +356,7 @@ public class MucOptions { HashSet<Jid> jids = new HashSet<>(); jids.add(account.getJid().asBareJid()); synchronized (users) { - for(User user : users) { + for (User user : users) { if (user.getRealJid() == null || (user.getRealJid().getLocal() != null && jids.add(user.getRealJid()))) { subset.add(user); } @@ -684,6 +402,11 @@ public class MucOptions { return this.error; } + public void setError(Error error) { + this.isOnline = isOnline && error == Error.NONE; + this.error = error; + } + public void setOnRenameListener(OnRenameListener listener) { this.onRenameListener = listener; } @@ -732,21 +455,18 @@ public class MucOptions { return users; } - public int NumberOfUsers() { List<User> users = getUsersRelevantForNameAndAvatar(); if (users.size() >= 1) { - return users.size(); + return users.size() + 1; // add 1 for yourself } else { - return 0; + return 1; } } - - public String createNameFromParticipants() { List<User> users = getUsersRelevantForNameAndAvatar(); - if (users.size() >= 1) { + if (users.size() >= 2) { StringBuilder builder = new StringBuilder(); for (User user : users) { if (builder.length() != 0) { @@ -850,4 +570,274 @@ public class MucOptions { } return members; } + + public enum Affiliation { + OWNER(4, R.string.owner), + ADMIN(3, R.string.admin), + MEMBER(2, R.string.member), + OUTCAST(0, R.string.outcast), + NONE(1, R.string.no_affiliation); + + private int resId; + private int rank; + Affiliation(int rank, int resId) { + this.resId = resId; + this.rank = rank; + } + + public static Affiliation of(@Nullable String value) { + if (value == null) { + return NONE; + } + try { + return Affiliation.valueOf(value.toUpperCase(Locale.US)); + } catch (IllegalArgumentException e) { + return NONE; + } + } + + public int getResId() { + return resId; + } + + @Override + public String toString() { + return name().toLowerCase(Locale.US); + } + + public boolean outranks(Affiliation affiliation) { + return rank > affiliation.rank; + } + + public boolean ranks(Affiliation affiliation) { + return rank >= affiliation.rank; + } + } + + public enum Role { + MODERATOR(R.string.moderator, 3), + VISITOR(R.string.visitor, 1), + PARTICIPANT(R.string.participant, 2), + NONE(R.string.no_role, 0); + + private int resId; + private int rank; + Role(int resId, int rank) { + this.resId = resId; + this.rank = rank; + } + + public static Role of(@Nullable String value) { + if (value == null) { + return NONE; + } + try { + return Role.valueOf(value.toUpperCase(Locale.US)); + } catch (IllegalArgumentException e) { + return NONE; + } + } + + public int getResId() { + return resId; + } + + @Override + public String toString() { + return name().toLowerCase(Locale.US); + } + + public boolean ranks(Role role) { + return rank >= role.rank; + } + } + + public enum Error { + NO_RESPONSE, + SERVER_NOT_FOUND, + NONE, + NICK_IN_USE, + PASSWORD_REQUIRED, + BANNED, + MEMBERS_ONLY, + RESOURCE_CONSTRAINT, + KICKED, + SHUTDOWN, + DESTROYED, + INVALID_NICK, + UNKNOWN + } + + private interface OnEventListener { + void onSuccess(); + + void onFailure(); + } + + public interface OnRenameListener extends OnEventListener { + + } + + public static class User implements Comparable<User> { + private Role role = Role.NONE; + private Affiliation affiliation = Affiliation.NONE; + private Jid realJid; + private Jid fullJid; + private long pgpKeyId = 0; + private Avatar avatar; + private MucOptions options; + private ChatState chatState = Config.DEFAULT_CHATSTATE; + + public User(MucOptions options, Jid from) { + this.options = options; + this.fullJid = from; + } + + public String getName() { + return fullJid == null ? null : fullJid.getResource(); + } + + public Role getRole() { + return this.role; + } + + public void setRole(String role) { + this.role = Role.of(role); + } + + public Affiliation getAffiliation() { + return this.affiliation; + } + + public void setAffiliation(String affiliation) { + this.affiliation = Affiliation.of(affiliation); + } + + public long getPgpKeyId() { + if (this.pgpKeyId != 0) { + return this.pgpKeyId; + } else if (realJid != null) { + return getAccount().getRoster().getContact(realJid).getPgpKeyId(); + } else { + return 0; + } + } + + public void setPgpKeyId(long id) { + this.pgpKeyId = id; + } + + public Contact getContact() { + if (fullJid != null) { + return getAccount().getRoster().getContactFromRoster(realJid); + } else if (realJid != null) { + return getAccount().getRoster().getContact(realJid); + } else { + return null; + } + } + + public boolean setAvatar(Avatar avatar) { + if (this.avatar != null && this.avatar.equals(avatar)) { + return false; + } else { + this.avatar = avatar; + return true; + } + } + + public String getAvatar() { + if (avatar != null) { + return avatar.getFilename(); + } + Avatar avatar = realJid != null ? getAccount().getRoster().getContact(realJid).getAvatar() : null; + return avatar == null ? null : avatar.getFilename(); + } + + public Account getAccount() { + return options.getAccount(); + } + + public Conversation getConversation() { + return options.getConversation(); + } + + public Jid getFullJid() { + return fullJid; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + User user = (User) o; + + if (role != user.role) return false; + if (affiliation != user.affiliation) return false; + if (realJid != null ? !realJid.equals(user.realJid) : user.realJid != null) + return false; + return fullJid != null ? fullJid.equals(user.fullJid) : user.fullJid == null; + + } + + public boolean isDomain() { + return realJid != null && realJid.getLocal() == null && role == Role.NONE; + } + + @Override + public int hashCode() { + int result = role != null ? role.hashCode() : 0; + result = 31 * result + (affiliation != null ? affiliation.hashCode() : 0); + result = 31 * result + (realJid != null ? realJid.hashCode() : 0); + result = 31 * result + (fullJid != null ? fullJid.hashCode() : 0); + return result; + } + + @Override + public String toString() { + return "[fulljid:" + String.valueOf(fullJid) + ",realjid:" + String.valueOf(realJid) + ",affiliation" + affiliation.toString() + "]"; + } + + public boolean realJidMatchesAccount() { + return realJid != null && realJid.equals(options.account.getJid().asBareJid()); + } + + @Override + public int compareTo(@NonNull User another) { + if (another.getAffiliation().outranks(getAffiliation())) { + return 1; + } else if (getAffiliation().outranks(another.getAffiliation())) { + return -1; + } else { + return getComparableName().compareToIgnoreCase(another.getComparableName()); + } + } + + private String getComparableName() { + Contact contact = getContact(); + if (contact != null) { + return contact.getDisplayName(); + } else { + String name = getName(); + return name == null ? "" : name; + } + } + + public Jid getRealJid() { + return realJid; + } + + public void setRealJid(Jid jid) { + this.realJid = jid != null ? jid.asBareJid() : null; + } + + public boolean setChatState(ChatState chatState) { + if (this.chatState == chatState) { + return false; + } + this.chatState = chatState; + return true; + } + } } diff --git a/src/main/java/de/pixart/messenger/parser/PresenceParser.java b/src/main/java/de/pixart/messenger/parser/PresenceParser.java index 39a3cfeba..6a878d27f 100644 --- a/src/main/java/de/pixart/messenger/parser/PresenceParser.java +++ b/src/main/java/de/pixart/messenger/parser/PresenceParser.java @@ -115,6 +115,14 @@ public class PresenceParser extends AbstractParser implements if (user.setAvatar(avatar)) { mXmppConnectionService.getAvatarService().clear(user); } + if (user.getRealJid() != null) { + Contact c = conversation.getAccount().getRoster().getContact(user.getRealJid()); + if (c.setAvatar(avatar)) { + mXmppConnectionService.syncRoster(conversation.getAccount()); + mXmppConnectionService.getAvatarService().clear(c); + mXmppConnectionService.updateRosterUi(); + } + } } else if (mXmppConnectionService.isDataSaverDisabled()) { mXmppConnectionService.fetchAvatar(mucOptions.getAccount(), avatar); } diff --git a/src/main/java/de/pixart/messenger/persistance/DatabaseBackend.java b/src/main/java/de/pixart/messenger/persistance/DatabaseBackend.java index 365f8fa87..4cc5b7955 100644 --- a/src/main/java/de/pixart/messenger/persistance/DatabaseBackend.java +++ b/src/main/java/de/pixart/messenger/persistance/DatabaseBackend.java @@ -925,7 +925,7 @@ public class DatabaseBackend extends SQLiteOpenHelper { final SQLiteDatabase db = this.getWritableDatabase(); db.beginTransaction(); for (Contact contact : roster.getContacts()) { - if (contact.getOption(Contact.Options.IN_ROSTER) || contact.getAvatar() != null) { + if (contact.getOption(Contact.Options.IN_ROSTER) || contact.getAvatarFilename() != null) { db.insert(Contact.TABLENAME, null, contact.getContentValues()); } else { String where = Contact.ACCOUNT + "=? AND " + Contact.JID + "=?"; diff --git a/src/main/java/de/pixart/messenger/services/AvatarService.java b/src/main/java/de/pixart/messenger/services/AvatarService.java index bf415515b..aa861c147 100644 --- a/src/main/java/de/pixart/messenger/services/AvatarService.java +++ b/src/main/java/de/pixart/messenger/services/AvatarService.java @@ -80,8 +80,8 @@ public class AvatarService implements OnAdvancedStreamFeaturesLoaded { if (avatar != null || cachedOnly) { return avatar; } - if (avatar == null && contact.getAvatar() != null) { - avatar = mXmppConnectionService.getFileBackend().getAvatar(contact.getAvatar(), size); + if (avatar == null && contact.getAvatarFilename() != null) { + avatar = mXmppConnectionService.getFileBackend().getAvatar(contact.getAvatarFilename(), size); } if (avatar == null && contact.getProfilePhoto() != null) { try { @@ -146,7 +146,7 @@ public class AvatarService implements OnAdvancedStreamFeaturesLoaded { public Bitmap get(final MucOptions.User user, final int size, boolean cachedOnly) { Contact c = user.getContact(); - if (c != null && (c.getProfilePhoto() != null || c.getAvatar() != null || user.getAvatar() == null)) { + if (c != null && (c.getProfilePhoto() != null || c.getAvatarFilename() != null || user.getAvatar() == null)) { return get(c, size, cachedOnly); } else { return getImpl(user, size, cachedOnly); @@ -183,6 +183,10 @@ public class AvatarService implements OnAdvancedStreamFeaturesLoaded { } } for (Conversation conversation : mXmppConnectionService.findAllConferencesWith(contact)) { + MucOptions.User user = conversation.getMucOptions().findUserByRealJid(contact.getJid().asBareJid()); + if (user != null) { + clear(user); + } clear(conversation); } } @@ -234,7 +238,7 @@ public class AvatarService implements OnAdvancedStreamFeaturesLoaded { Jid jid = bookmark.getJid(); Account account = bookmark.getAccount(); Contact contact = jid == null ? null : account.getRoster().getContact(jid); - if (contact != null && contact.getAvatar() != null) { + if (contact != null && contact.getAvatarFilename() != null) { return get(contact, size, cachedOnly); } String seed = jid != null ? jid.asBareJid().toString() : null; @@ -414,14 +418,14 @@ public class AvatarService implements OnAdvancedStreamFeaturesLoaded { return get(message.getCounterparts(), size, cachedOnly); } else if (message.getStatus() == Message.STATUS_RECEIVED) { Contact c = message.getContact(); - if (c != null && (c.getProfilePhoto() != null || c.getAvatar() != null)) { + if (c != null && (c.getProfilePhoto() != null || c.getAvatarFilename() != null)) { return get(c, size, cachedOnly); } else if (conversation instanceof Conversation && message.getConversation().getMode() == Conversation.MODE_MULTI) { final Jid trueCounterpart = message.getTrueCounterpart(); final MucOptions mucOptions = ((Conversation) conversation).getMucOptions(); MucOptions.User user; if (trueCounterpart != null) { - user = mucOptions.findUserByRealJid(trueCounterpart); + user = mucOptions.findOrCreateUserByRealJid(trueCounterpart, message.getCounterpart()); } else { user = mucOptions.findUserByFullJid(message.getCounterpart()); } @@ -520,11 +524,11 @@ public class AvatarService implements OnAdvancedStreamFeaturesLoaded { Contact contact = user.getContact(); if (contact != null) { Uri uri = null; - if (contact.getAvatar() != null) { - uri = mXmppConnectionService.getFileBackend().getAvatarUri( - contact.getAvatar()); - } else if (contact.getProfilePhoto() != null) { + if (contact.getProfilePhoto() != null) { uri = Uri.parse(contact.getProfilePhoto()); + } else if (contact.getAvatarFilename() != null) { + uri = mXmppConnectionService.getFileBackend().getAvatarUri( + contact.getAvatarFilename()); } if (drawTile(canvas, uri, left, top, right, bottom)) { return true; diff --git a/src/main/java/de/pixart/messenger/services/XmppConnectionService.java b/src/main/java/de/pixart/messenger/services/XmppConnectionService.java index 41d029d12..396a68446 100644 --- a/src/main/java/de/pixart/messenger/services/XmppConnectionService.java +++ b/src/main/java/de/pixart/messenger/services/XmppConnectionService.java @@ -3460,6 +3460,14 @@ public class XmppConnectionService extends Service { updateConversationUi(); updateMucRosterUi(); } + if (user.getRealJid() != null) { + Contact contact = account.getRoster().getContact(user.getRealJid()); + if (contact.setAvatar(avatar)) { + syncRoster(account); + getAvatarService().clear(contact); + updateRosterUi(); + } + } } } } diff --git a/src/main/java/de/pixart/messenger/ui/ConversationFragment.java b/src/main/java/de/pixart/messenger/ui/ConversationFragment.java index e364c00bf..a0f4bf894 100644 --- a/src/main/java/de/pixart/messenger/ui/ConversationFragment.java +++ b/src/main/java/de/pixart/messenger/ui/ConversationFragment.java @@ -1221,7 +1221,7 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke Jid tcp = message.getTrueCounterpart(); Jid cp = message.getCounterpart(); if (cp != null && !cp.isBareJid()) { - User userByRealJid = tcp != null ? conversation.getMucOptions().findOrCreateUserByRealJid(tcp) : null; + User userByRealJid = tcp != null ? conversation.getMucOptions().findOrCreateUserByRealJid(tcp, cp) : null; final User user = userByRealJid != null ? userByRealJid : conversation.getMucOptions().findUserByFullJid(cp); final PopupMenu popupMenu = new PopupMenu(getActivity(), v); popupMenu.inflate(R.menu.muc_details_context); |