package de.thedevstack.conversationsplus.services.avatar.listener; import de.thedevstack.android.logcat.Logging; import de.thedevstack.conversationsplus.Config; import de.thedevstack.conversationsplus.entities.Account; import de.thedevstack.conversationsplus.entities.Contact; import de.thedevstack.conversationsplus.services.avatar.AvatarCache; import de.thedevstack.conversationsplus.services.avatar.AvatarService; import de.thedevstack.conversationsplus.ui.UiCallback; import de.thedevstack.conversationsplus.utils.AvatarUtil; import de.thedevstack.conversationsplus.utils.UiUpdateHelper; import de.thedevstack.conversationsplus.xml.Element; import de.thedevstack.conversationsplus.dto.Avatar; import de.thedevstack.conversationsplus.xmpp.stanzas.IqPacket; /** * */ public class AvatarVcardReceived extends AbstractAvatarIqPacketReceived { public AvatarVcardReceived(Avatar avatar, UiCallback uiCallback) { super(avatar, uiCallback); } @Override public void onIqPacketReceived(Account account, IqPacket packet) { AvatarService.getInstance().removeFromFetchInProgress(account, avatar); if (packet.getType() == IqPacket.TYPE.RESULT) { Element vCard = packet.findChild("vCard", "vcard-temp"); Element photo = vCard != null ? vCard.findChild("PHOTO") : null; String image = photo != null ? photo.findChildContent("BINVAL") : null; if (image != null) { avatar.image = image; if (AvatarUtil.save(avatar)) { Logging.d(Config.LOGTAG, account.getJid().toBareJid() + ": successfully fetched vCard avatar for " + avatar.owner); Contact contact = account.getRoster() .getContact(avatar.owner); contact.setAvatar(avatar); AvatarCache.clear(contact); UiUpdateHelper.updateConversationUi(); UiUpdateHelper.updateRosterUi(); } } } } }