From f4ec1e6a728546a3c234b2e46c3a65931045e1ea Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Thu, 23 Jan 2020 10:22:02 -0300 Subject: [PATCH] [android] attach some smaller image attachment issues --- .../android/attachment/AttachmentItem.java | 12 ++++--- .../attachment/AttachmentRetriever.java | 7 ++++ .../android/attachment/UnavailableItem.java | 36 ------------------- .../conversation/ConversationActivity.java | 16 ++++----- .../android/conversation/ImageAdapter.java | 2 +- 5 files changed, 23 insertions(+), 50 deletions(-) delete mode 100644 briar-android/src/main/java/org/briarproject/briar/android/attachment/UnavailableItem.java diff --git a/briar-android/src/main/java/org/briarproject/briar/android/attachment/AttachmentItem.java b/briar-android/src/main/java/org/briarproject/briar/android/attachment/AttachmentItem.java index 58c5d9160..9ce231c7d 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/attachment/AttachmentItem.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/attachment/AttachmentItem.java @@ -135,10 +135,6 @@ public class AttachmentItem implements Parcelable { return toHexString(instanceId); } - boolean hasSize() { - return width != 0 && height != 0; - } - @Override public int describeContents() { return 0; @@ -156,6 +152,10 @@ public class AttachmentItem implements Parcelable { dest.writeString(state.name()); } + /** + * This is used to identity if two items are the same, + * irrespective of their state or size. + */ @Override public boolean equals(@Nullable Object o) { return o instanceof AttachmentItem && @@ -164,4 +164,8 @@ public class AttachmentItem implements Parcelable { ); } + @Override + public int hashCode() { + return header.getMessageId().hashCode(); + } } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/attachment/AttachmentRetriever.java b/briar-android/src/main/java/org/briarproject/briar/android/attachment/AttachmentRetriever.java index c45c36ab7..2bf6b69ea 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/attachment/AttachmentRetriever.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/attachment/AttachmentRetriever.java @@ -49,6 +49,13 @@ public interface AttachmentRetriever { * Loads an {@link AttachmentItem} * that arrived via an {@link AttachmentReceivedEvent} * and notifies the associated {@link LiveData}. + * + * Note that you need to call {@link #getAttachmentItems(PrivateMessageHeader)} + * first to get the LiveData. + * + * It is possible that no LiveData is available, + * because the message of the AttachmentItem did not arrive, yet. + * In this case, the load wil be deferred until the message arrives. */ @DatabaseExecutor void loadAttachmentItem(MessageId attachmentId); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/attachment/UnavailableItem.java b/briar-android/src/main/java/org/briarproject/briar/android/attachment/UnavailableItem.java deleted file mode 100644 index 72951da3b..000000000 --- a/briar-android/src/main/java/org/briarproject/briar/android/attachment/UnavailableItem.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.briarproject.briar.android.attachment; - -import org.briarproject.bramble.api.nullsafety.NotNullByDefault; -import org.briarproject.bramble.api.sync.MessageId; -import org.briarproject.briar.api.messaging.AttachmentHeader; - -import javax.annotation.concurrent.Immutable; - -@Immutable -@NotNullByDefault -class UnavailableItem { - - private final MessageId conversationMessageId; - private final AttachmentHeader header; - private final boolean needsSize; - - UnavailableItem(MessageId conversationMessageId, - AttachmentHeader header, boolean needsSize) { - this.conversationMessageId = conversationMessageId; - this.header = header; - this.needsSize = needsSize; - } - - MessageId getConversationMessageId() { - return conversationMessageId; - } - - AttachmentHeader getHeader() { - return header; - } - - boolean needsSize() { - return needsSize; - } - -} 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 539d0e0aa..bf39383ad 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 @@ -640,16 +640,14 @@ public class ConversationActivity extends BriarActivity && adapter.isScrolledToBottom(layoutManager); } + @UiThread private void updateMessageAttachment(MessageId m, AttachmentItem item) { - runOnUiThreadUnlessDestroyed(() -> { - Pair pair = - adapter.getMessageItem(m); - if (pair != null && pair.getSecond().updateAttachments(item)) { - boolean scroll = shouldScrollWhenUpdatingMessage(); - adapter.notifyItemChanged(pair.getFirst()); - if (scroll) scrollToBottom(); - } - }); + Pair pair = adapter.getMessageItem(m); + if (pair != null && pair.getSecond().updateAttachments(item)) { + boolean scroll = shouldScrollWhenUpdatingMessage(); + adapter.notifyItemChanged(pair.getFirst()); + if (scroll) scrollToBottom(); + } } @Override diff --git a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ImageAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ImageAdapter.java index f0401b4cc..02f97730c 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ImageAdapter.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ImageAdapter.java @@ -59,7 +59,7 @@ class ImageAdapter extends Adapter { // get item requireNonNull(conversationItem); AttachmentItem item = items.get(position); - // set onClick listener, if not missing or error + // set onClick listener imageViewHolder.itemView.setOnClickListener(v -> listener.onAttachmentClicked(v, conversationItem, item) );