aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/eu/siacs/conversations/services/AvatarService.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/eu/siacs/conversations/services/AvatarService.java')
-rw-r--r--src/main/java/eu/siacs/conversations/services/AvatarService.java39
1 files changed, 36 insertions, 3 deletions
diff --git a/src/main/java/eu/siacs/conversations/services/AvatarService.java b/src/main/java/eu/siacs/conversations/services/AvatarService.java
index 5db4abae..68ab6053 100644
--- a/src/main/java/eu/siacs/conversations/services/AvatarService.java
+++ b/src/main/java/eu/siacs/conversations/services/AvatarService.java
@@ -58,6 +58,22 @@ public class AvatarService {
return avatar;
}
+ public Bitmap get(final MucOptions.User user, final int size, boolean cachedOnly) {
+ final String KEY = key(user, size);
+ Bitmap avatar = this.mXmppConnectionService.getBitmapCache().get(KEY);
+ if (avatar != null || cachedOnly) {
+ return avatar;
+ }
+ if (user.getAvatar() != null) {
+ avatar = mXmppConnectionService.getFileBackend().getAvatar(user.getAvatar(), size);
+ }
+ if (avatar == null) {
+ avatar = get(user.getName(), size, cachedOnly);
+ }
+ this.mXmppConnectionService.getBitmapCache().put(KEY, avatar);
+ return avatar;
+ }
+
public void clear(Contact contact) {
synchronized (this.sizes) {
for (Integer size : sizes) {
@@ -77,6 +93,16 @@ public class AvatarService {
+ contact.getJid() + "_" + String.valueOf(size);
}
+ private String key(MucOptions.User user, int size) {
+ synchronized (this.sizes) {
+ if (!this.sizes.contains(size)) {
+ this.sizes.add(size);
+ }
+ }
+ return PREFIX_CONTACT + "_" + user.getAccount().getJid().toBareJid() + "_"
+ + user.getFullJid() + "_" + String.valueOf(size);
+ }
+
public Bitmap get(ListItem item, int size) {
return get(item,size,false);
}
@@ -199,9 +225,11 @@ public class AvatarService {
public Bitmap get(Message message, int size, boolean cachedOnly) {
if (message.getStatus() == Message.STATUS_RECEIVED) {
- Contact contact = message.getContact();
- if (contact != null) {
- return get(contact, size, cachedOnly);
+ Object object = message.getUserOrContact();
+ if (object != null && object instanceof Contact) {
+ return get((Contact) object, size, cachedOnly);
+ } else if (object != null && object instanceof MucOptions.User) {
+ return get((MucOptions.User) object, size, cachedOnly);
} else {
return get(UIHelper.getMessageDisplayName(message), size, cachedOnly);
}
@@ -290,6 +318,11 @@ public class AvatarService {
if (drawTile(canvas, uri, left, top, right, bottom)) {
return true;
}
+ } else if (user.getAvatar() != null) {
+ Uri uri = mXmppConnectionService.getFileBackend().getAvatarUri(user.getAvatar());
+ if (drawTile(canvas, uri, left, top, right, bottom)) {
+ return true;
+ }
}
String name = contact != null ? contact.getDisplayName() : user.getName();
drawTile(canvas, name, left, top, right, bottom);