package xmpp.client.service.user.avatar; import java.util.HashMap; import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.XMPPException; import org.jivesoftware.smackx.packet.VCard; import xmpp.client.service.ConnectionProvider; import xmpp.client.service.user.User; import xmpp.client.service.user.UserState; import android.util.Log; public class AvatarService implements ConnectionProvider, AvatarServiceProvider { private static final String TAG = AvatarService.class.getName(); ConnectionProvider mConnectionProvider; HashMap<String, byte[]> mCache; public AvatarService(ConnectionProvider connectionProvider) { mConnectionProvider = connectionProvider; mCache = new HashMap<String, byte[]>(); } public byte[] getAvatar(String jid) { final VCard vCard = new VCard(); try { vCard.load(getConnection(), jid); Log.i(TAG, vCard.toXML()); final byte[] a = vCard.getAvatar(); final String ah = vCard.getAvatarHash(); mCache.put(ah, a); return a; } catch (final XMPPException e) { Log.e(TAG, "getAvatar", e); } return null; } public byte[] getAvatar(String avatarSHA, String jid) { if (avatarSHA == null || avatarSHA.isEmpty()) { return null; } if (mCache.containsKey(avatarSHA)) { return mCache.get(avatarSHA); } return null; } public byte[] getAvatar(User user) { if (mCache.containsKey(user.getUserState().getAvatarSHA())) { return mCache.get(user.getUserState().getAvatarSHA()); } if (!user.getUserState().isOnline()) { return null; } return null; // return getAvatar(user.getUserLogin()); } public byte[] getAvatar(UserState userState, String jid) { return getAvatar(userState.getAvatarSHA(), jid); } @Override public AvatarService getAvatarService() { return this; } @Override public XMPPConnection getConnection() { return mConnectionProvider.getConnection(); } }