From 5a1105d37a87eaf1c369d9f8d9b7e67d6a0e1cd4 Mon Sep 17 00:00:00 2001 From: Christian Schneppe Date: Fri, 27 Apr 2018 23:52:08 +0200 Subject: display avatar in groups --- .../pixart/messenger/services/AvatarService.java | 15 ++-- .../messenger/services/XmppConnectionService.java | 90 ++++++++++------------ 2 files changed, 50 insertions(+), 55 deletions(-) (limited to 'src/main/java/de/pixart/messenger/services') diff --git a/src/main/java/de/pixart/messenger/services/AvatarService.java b/src/main/java/de/pixart/messenger/services/AvatarService.java index d6cc3712c..f38102866 100644 --- a/src/main/java/de/pixart/messenger/services/AvatarService.java +++ b/src/main/java/de/pixart/messenger/services/AvatarService.java @@ -274,12 +274,15 @@ public class AvatarService implements OnAdvancedStreamFeaturesLoaded { if (bitmap != null || cachedOnly) { return bitmap; } - final List users = mucOptions.getUsersRelevantForNameAndAvatar(); - if (users.size() == 0) { - Conversation c = mucOptions.getConversation(); - bitmap = getImpl(c.getName().toString(), c.getJid().asBareJid().toString(), size); - } else { - bitmap = getImpl(users, size); + bitmap = mXmppConnectionService.getFileBackend().getAvatar(mucOptions.getAvatar(), size); + if (bitmap == null) { + final List users = mucOptions.getUsersRelevantForNameAndAvatar(); + if (users.size() == 0) { + Conversation c = mucOptions.getConversation(); + bitmap = getImpl(c.getName().toString(), c.getJid().asBareJid().toString(), size); + } else { + bitmap = getImpl(users, size); + } } this.mXmppConnectionService.getBitmapCache().put(KEY, bitmap); return bitmap; diff --git a/src/main/java/de/pixart/messenger/services/XmppConnectionService.java b/src/main/java/de/pixart/messenger/services/XmppConnectionService.java index 98c02a7b5..d0240251c 100644 --- a/src/main/java/de/pixart/messenger/services/XmppConnectionService.java +++ b/src/main/java/de/pixart/messenger/services/XmppConnectionService.java @@ -1761,10 +1761,10 @@ public class XmppConnectionService extends Service { public List findAllConferencesWith(Contact contact) { ArrayList results = new ArrayList<>(); - for (Conversation conversation : conversations) { - if (conversation.getMode() == Conversation.MODE_MULTI - && conversation.getMucOptions().isContactInRoom(contact)) { - results.add(conversation); + for (final Conversation c : conversations) { + if (c.getMode() == Conversation.MODE_MULTI + && (c.getJid().asBareJid().equals(c.getJid().asBareJid()) || c.getMucOptions().isContactInRoom(contact))) { + results.add(c); } } return results; @@ -3190,57 +3190,49 @@ public class XmppConnectionService extends Service { private void fetchAvatarPep(Account account, final Avatar avatar, final UiCallback callback) { IqPacket packet = this.mIqGenerator.retrievePepAvatar(avatar); - sendIqPacket(account, packet, new OnIqPacketReceived() { - - @Override - public void onIqPacketReceived(Account account, IqPacket result) { - synchronized (mInProgressAvatarFetches) { - mInProgressAvatarFetches.remove(generateFetchKey(account, avatar)); - } - final String ERROR = account.getJid().asBareJid() - + ": fetching avatar for " + avatar.owner + " failed "; - if (result.getType() == IqPacket.TYPE.RESULT) { - avatar.image = mIqParser.avatarData(result); - if (avatar.image != null) { - if (getFileBackend().save(avatar)) { - if (account.getJid().asBareJid().equals(avatar.owner)) { - if (account.setAvatar(avatar.getFilename())) { - databaseBackend.updateAccount(account); - } - getAvatarService().clear(account); - updateConversationUi(); - updateAccountUi(); - } else { - Contact contact = account.getRoster() - .getContact(avatar.owner); - contact.setAvatar(avatar); - getAvatarService().clear(contact); - updateConversationUi(); - updateRosterUi(); - } - if (callback != null) { - callback.success(avatar); + sendIqPacket(account, packet, (a, result) -> { + synchronized (mInProgressAvatarFetches) { + mInProgressAvatarFetches.remove(generateFetchKey(a, avatar)); + } + final String ERROR = a.getJid().asBareJid() + ": fetching avatar for " + avatar.owner + " failed "; + if (result.getType() == IqPacket.TYPE.RESULT) { + avatar.image = mIqParser.avatarData(result); + if (avatar.image != null) { + if (getFileBackend().save(avatar)) { + if (a.getJid().asBareJid().equals(avatar.owner)) { + if (a.setAvatar(avatar.getFilename())) { + databaseBackend.updateAccount(a); } - Log.d(Config.LOGTAG, account.getJid().asBareJid() - + ": successfully fetched pep avatar for " + avatar.owner); - return; + getAvatarService().clear(a); + updateConversationUi(); + updateAccountUi(); + } else { + Contact contact = a.getRoster().getContact(avatar.owner); + contact.setAvatar(avatar); + getAvatarService().clear(contact); + updateConversationUi(); + updateRosterUi(); } - } else { - - Log.d(Config.LOGTAG, ERROR + "(parsing error)"); + if (callback != null) { + callback.success(avatar); + } + Log.d(Config.LOGTAG, a.getJid().asBareJid() + + ": successfully fetched pep avatar for " + avatar.owner); + return; } } else { - Element error = result.findChild("error"); - if (error == null) { - Log.d(Config.LOGTAG, ERROR + "(server error)"); - } else { - Log.d(Config.LOGTAG, ERROR + error.toString()); - } + Log.d(Config.LOGTAG, ERROR + "(parsing error)"); } - if (callback != null) { - callback.error(0, null); + } else { + Element error = result.findChild("error"); + if (error == null) { + Log.d(Config.LOGTAG, ERROR + "(server error)"); + } else { + Log.d(Config.LOGTAG, ERROR + error.toString()); } - + } + if (callback != null) { + callback.error(0, null); } }); } -- cgit v1.2.3