Change summary
src/main/java/eu/siacs/conversations/parser/MessageParser.java | 10
src/main/java/eu/siacs/conversations/parser/PresenceParser.java | 1
src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java | 2
src/main/java/eu/siacs/conversations/services/AvatarService.java | 10
src/main/java/eu/siacs/conversations/services/XmppConnectionService.java | 18
5 files changed, 27 insertions(+), 14 deletions(-)
Detailed changes
@@ -183,10 +183,12 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece
mXmppConnectionService.updateAccountUi();
} else {
Contact contact = account.getRoster().getContact(from);
- contact.setAvatar(avatar);
- mXmppConnectionService.getAvatarService().clear(contact);
- mXmppConnectionService.updateConversationUi();
- mXmppConnectionService.updateRosterUi();
+ if (contact.setAvatar(avatar)) {
+ mXmppConnectionService.syncRoster(account);
+ mXmppConnectionService.getAvatarService().clear(contact);
+ mXmppConnectionService.updateConversationUi();
+ mXmppConnectionService.updateRosterUi();
+ }
}
} else if (mXmppConnectionService.isDataSaverDisabled()) {
mXmppConnectionService.fetchAvatar(account, avatar);
@@ -233,6 +233,7 @@ public class PresenceParser extends AbstractParser implements
mXmppConnectionService.updateConversationUi();
mXmppConnectionService.updateAccountUi();
} else if (contact.setAvatar(avatar)) {
+ mXmppConnectionService.syncRoster(account);
mXmppConnectionService.getAvatarService().clear(contact);
mXmppConnectionService.updateConversationUi();
mXmppConnectionService.updateRosterUi();
@@ -888,7 +888,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)) {
+ if (contact.getOption(Contact.Options.IN_ROSTER) || contact.getAvatar() != null) {
db.insert(Contact.TABLENAME, null, contact.getContentValues());
} else {
String where = Contact.ACCOUNT + "=? AND " + Contact.JID + "=?";
@@ -53,7 +53,7 @@ public class AvatarService implements OnAdvancedStreamFeaturesLoaded {
protected XmppConnectionService mXmppConnectionService = null;
- public AvatarService(XmppConnectionService service) {
+ AvatarService(XmppConnectionService service) {
this.mXmppConnectionService = service;
}
@@ -213,7 +213,13 @@ public class AvatarService implements OnAdvancedStreamFeaturesLoaded {
if (bookmark.getConversation() != null) {
return get(bookmark.getConversation(), size, cachedOnly);
} else {
- String seed = bookmark.getJid() != null ? bookmark.getJid().asBareJid().toString() : null;
+ Jid jid = bookmark.getJid();
+ Account account = bookmark.getAccount();
+ Contact contact = jid == null ? null : account.getRoster().getContact(jid);
+ if (contact != null && contact.getAvatar() != null) {
+ return get(contact, size, cachedOnly);
+ }
+ String seed = jid != null ? jid.asBareJid().toString() : null;
return get(bookmark.getDisplayName(), seed, size, cachedOnly);
}
} else {
@@ -2886,10 +2886,12 @@ public class XmppConnectionService extends Service {
updateAccountUi();
} else {
Contact contact = a.getRoster().getContact(avatar.owner);
- contact.setAvatar(avatar);
- getAvatarService().clear(contact);
- updateConversationUi();
- updateRosterUi();
+ if (contact.setAvatar(avatar)) {
+ syncRoster(account);
+ getAvatarService().clear(contact);
+ updateConversationUi();
+ updateRosterUi();
+ }
}
if (callback != null) {
callback.success(avatar);
@@ -2943,9 +2945,11 @@ public class XmppConnectionService extends Service {
updateAccountUi();
} else {
Contact contact = account.getRoster().getContact(avatar.owner);
- contact.setAvatar(avatar);
- getAvatarService().clear(contact);
- updateRosterUi();
+ if (contact.setAvatar(avatar)) {
+ syncRoster(account);
+ getAvatarService().clear(contact);
+ updateRosterUi();
+ }
}
updateConversationUi();
} else {