[android] attach some smaller image attachment issues

This commit is contained in:
Torsten Grote
2020-01-23 10:22:02 -03:00
parent 31f42d44af
commit 7c22016b81
5 changed files with 23 additions and 50 deletions

View File

@@ -135,10 +135,6 @@ public class AttachmentItem implements Parcelable {
return toHexString(instanceId); return toHexString(instanceId);
} }
boolean hasSize() {
return width != 0 && height != 0;
}
@Override @Override
public int describeContents() { public int describeContents() {
return 0; return 0;
@@ -156,6 +152,10 @@ public class AttachmentItem implements Parcelable {
dest.writeString(state.name()); dest.writeString(state.name());
} }
/**
* This is used to identity if two items are the same,
* irrespective of their state or size.
*/
@Override @Override
public boolean equals(@Nullable Object o) { public boolean equals(@Nullable Object o) {
return o instanceof AttachmentItem && return o instanceof AttachmentItem &&
@@ -164,4 +164,8 @@ public class AttachmentItem implements Parcelable {
); );
} }
@Override
public int hashCode() {
return header.getMessageId().hashCode();
}
} }

View File

@@ -49,6 +49,13 @@ public interface AttachmentRetriever {
* Loads an {@link AttachmentItem} * Loads an {@link AttachmentItem}
* that arrived via an {@link AttachmentReceivedEvent} * that arrived via an {@link AttachmentReceivedEvent}
* and notifies the associated {@link LiveData}. * 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 @DatabaseExecutor
void loadAttachmentItem(MessageId attachmentId); void loadAttachmentItem(MessageId attachmentId);

View File

@@ -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;
}
}

View File

@@ -640,16 +640,14 @@ public class ConversationActivity extends BriarActivity
&& adapter.isScrolledToBottom(layoutManager); && adapter.isScrolledToBottom(layoutManager);
} }
@UiThread
private void updateMessageAttachment(MessageId m, AttachmentItem item) { private void updateMessageAttachment(MessageId m, AttachmentItem item) {
runOnUiThreadUnlessDestroyed(() -> { Pair<Integer, ConversationMessageItem> pair = adapter.getMessageItem(m);
Pair<Integer, ConversationMessageItem> pair = if (pair != null && pair.getSecond().updateAttachments(item)) {
adapter.getMessageItem(m); boolean scroll = shouldScrollWhenUpdatingMessage();
if (pair != null && pair.getSecond().updateAttachments(item)) { adapter.notifyItemChanged(pair.getFirst());
boolean scroll = shouldScrollWhenUpdatingMessage(); if (scroll) scrollToBottom();
adapter.notifyItemChanged(pair.getFirst()); }
if (scroll) scrollToBottom();
}
});
} }
@Override @Override

View File

@@ -59,7 +59,7 @@ class ImageAdapter extends Adapter<ImageViewHolder> {
// get item // get item
requireNonNull(conversationItem); requireNonNull(conversationItem);
AttachmentItem item = items.get(position); AttachmentItem item = items.get(position);
// set onClick listener, if not missing or error // set onClick listener
imageViewHolder.itemView.setOnClickListener(v -> imageViewHolder.itemView.setOnClickListener(v ->
listener.onAttachmentClicked(v, conversationItem, item) listener.onAttachmentClicked(v, conversationItem, item)
); );