From bf9ba13b6884da49402a5116dd21453f556236ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20K=C3=BCrten?= Date: Tue, 8 Dec 2020 12:36:37 +0100 Subject: [PATCH] Update app bar in ConversationActivity with received avatar --- .../conversation/ConversationActivity.java | 2 +- .../conversation/ConversationViewModel.java | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationActivity.java index e7fc3f91d..332f01b14 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationActivity.java @@ -233,7 +233,7 @@ public class ConversationActivity extends BriarActivity toolbarStatus = toolbar.findViewById(R.id.contactStatus); toolbarTitle = toolbar.findViewById(R.id.contactName); - observeOnce(viewModel.getContactItem(), this, contactItem -> { + viewModel.getContactItem().observe(this, contactItem -> { requireNonNull(contactItem); setAvatar(toolbarAvatar, contactItem); }); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationViewModel.java b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationViewModel.java index 47b0230b2..f5cdb3195 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationViewModel.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationViewModel.java @@ -31,6 +31,7 @@ import org.briarproject.briar.android.util.UiUtils; import org.briarproject.briar.android.viewmodel.DbViewModel; import org.briarproject.briar.android.viewmodel.LiveEvent; import org.briarproject.briar.android.viewmodel.MutableLiveEvent; +import org.briarproject.briar.api.avatar.event.AvatarUpdatedEvent; import org.briarproject.briar.api.identity.AuthorInfo; import org.briarproject.briar.api.identity.AuthorManager; import org.briarproject.briar.api.media.AttachmentHeader; @@ -151,9 +152,33 @@ public class ConversationViewModel extends DbViewModel runOnDbThread(() -> attachmentRetriever .loadAttachmentItem(a.getMessageId())); } + } else if (e instanceof AvatarUpdatedEvent) { + AvatarUpdatedEvent a = (AvatarUpdatedEvent) e; + if (a.getContactId().equals(contactId)) { + LOG.info("Avatar updated"); + updateAvatar(a); + } } } + @UiThread + private void updateAvatar(AvatarUpdatedEvent a) { + // Make sure that contactItem has been set by the task initiated + // by loadContact() before we update the avatar. + observeForeverOnce(contactItem, oldContactItem -> { + requireNonNull(oldContactItem); + + AuthorInfo oldAuthorInfo = oldContactItem.getAuthorInfo(); + + AuthorInfo newAuthorInfo = new AuthorInfo(oldAuthorInfo.getStatus(), + oldAuthorInfo.getAlias(), a.getAttachmentHeader()); + ContactItem newContactItem = + new ContactItem(oldContactItem.getContact(), newAuthorInfo); + + contactItem.setValue(newContactItem); + }); + } + /** * Setting the {@link ContactId} automatically triggers loading of other * data.