diff --git a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ImageFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ImageFragment.java index 0b750c53e..5d588b750 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ImageFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ImageFragment.java @@ -121,7 +121,7 @@ public class ImageFragment extends Fragment private void loadImage() { GlideApp.with(this) - .load(attachment) + .load(attachment.getHeader()) // TODO allow if size < maxTextureSize ? // .override(SIZE_ORIGINAL) .diskCacheStrategy(NONE) diff --git a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ImageViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ImageViewHolder.java index 659bcf29e..a2dba12e2 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ImageViewHolder.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ImageViewHolder.java @@ -77,7 +77,7 @@ class ImageViewHolder extends ViewHolder { private void loadImage(AttachmentItem a, Radii r) { Transformation transformation = new BriarImageTransformation(r); GlideApp.with(imageView) - .load(a) + .load(a.getHeader()) .diskCacheStrategy(NONE) .error(ERROR_RES) .transform(transformation) diff --git a/briar-android/src/main/java/org/briarproject/briar/android/conversation/glide/BriarDataFetcher.java b/briar-android/src/main/java/org/briarproject/briar/android/conversation/glide/BriarDataFetcher.java index e3cbf4104..42e757140 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/conversation/glide/BriarDataFetcher.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/conversation/glide/BriarDataFetcher.java @@ -7,8 +7,8 @@ import com.bumptech.glide.load.data.DataFetcher; import org.briarproject.bramble.api.db.DatabaseExecutor; import org.briarproject.bramble.api.db.DbException; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; -import org.briarproject.briar.android.attachment.AttachmentItem; import org.briarproject.briar.api.media.Attachment; +import org.briarproject.briar.api.media.AttachmentHeader; import org.briarproject.briar.api.media.AttachmentReader; import java.io.InputStream; @@ -33,7 +33,7 @@ class BriarDataFetcher implements DataFetcher { private final AttachmentReader attachmentReader; @DatabaseExecutor private final Executor dbExecutor; - private final AttachmentItem attachment; + private final AttachmentHeader attachmentHeader; @Nullable private volatile InputStream inputStream; @@ -41,10 +41,11 @@ class BriarDataFetcher implements DataFetcher { @Inject BriarDataFetcher(AttachmentReader attachmentReader, - @DatabaseExecutor Executor dbExecutor, AttachmentItem attachment) { + @DatabaseExecutor Executor dbExecutor, + AttachmentHeader attachmentHeader) { this.attachmentReader = attachmentReader; this.dbExecutor = dbExecutor; - this.attachment = attachment; + this.attachmentHeader = attachmentHeader; } @Override @@ -53,8 +54,7 @@ class BriarDataFetcher implements DataFetcher { dbExecutor.execute(() -> { if (cancel) return; try { - Attachment a = - attachmentReader.getAttachment(attachment.getHeader()); + Attachment a = attachmentReader.getAttachment(attachmentHeader); inputStream = a.getStream(); callback.onDataReady(inputStream); } catch (DbException e) { diff --git a/briar-android/src/main/java/org/briarproject/briar/android/conversation/glide/BriarDataFetcherFactory.java b/briar-android/src/main/java/org/briarproject/briar/android/conversation/glide/BriarDataFetcherFactory.java index 674f51e38..8ba3f61c3 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/conversation/glide/BriarDataFetcherFactory.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/conversation/glide/BriarDataFetcherFactory.java @@ -2,7 +2,7 @@ package org.briarproject.briar.android.conversation.glide; import org.briarproject.bramble.api.db.DatabaseExecutor; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; -import org.briarproject.briar.android.attachment.AttachmentItem; +import org.briarproject.briar.api.media.AttachmentHeader; import org.briarproject.briar.api.media.AttachmentReader; import java.util.concurrent.Executor; @@ -23,7 +23,7 @@ public class BriarDataFetcherFactory { this.dbExecutor = dbExecutor; } - BriarDataFetcher createBriarDataFetcher(AttachmentItem model) { + BriarDataFetcher createBriarDataFetcher(AttachmentHeader model) { return new BriarDataFetcher(attachmentReader, dbExecutor, model); } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/conversation/glide/BriarGlideModule.java b/briar-android/src/main/java/org/briarproject/briar/android/conversation/glide/BriarGlideModule.java index a477f2f44..4533f4f38 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/conversation/glide/BriarGlideModule.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/conversation/glide/BriarGlideModule.java @@ -10,7 +10,7 @@ import com.bumptech.glide.module.AppGlideModule; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.briar.android.BriarApplication; -import org.briarproject.briar.android.attachment.AttachmentItem; +import org.briarproject.briar.api.media.AttachmentHeader; import java.io.InputStream; @@ -28,7 +28,7 @@ public final class BriarGlideModule extends AppGlideModule { BriarApplication app = (BriarApplication) context.getApplicationContext(); BriarModelLoaderFactory factory = new BriarModelLoaderFactory(app); - registry.prepend(AttachmentItem.class, InputStream.class, factory); + registry.prepend(AttachmentHeader.class, InputStream.class, factory); } @Override diff --git a/briar-android/src/main/java/org/briarproject/briar/android/conversation/glide/BriarModelLoader.java b/briar-android/src/main/java/org/briarproject/briar/android/conversation/glide/BriarModelLoader.java index dd5008f67..57134839b 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/conversation/glide/BriarModelLoader.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/conversation/glide/BriarModelLoader.java @@ -8,7 +8,7 @@ import com.bumptech.glide.signature.ObjectKey; import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import org.briarproject.briar.android.BriarApplication; -import org.briarproject.briar.android.attachment.AttachmentItem; +import org.briarproject.briar.api.media.AttachmentHeader; import java.io.InputStream; @@ -17,7 +17,7 @@ import javax.inject.Inject; @MethodsNotNullByDefault @ParametersNotNullByDefault public final class BriarModelLoader - implements ModelLoader { + implements ModelLoader { @Inject BriarDataFetcherFactory dataFetcherFactory; @@ -27,7 +27,7 @@ public final class BriarModelLoader } @Override - public LoadData buildLoadData(AttachmentItem model, int width, + public LoadData buildLoadData(AttachmentHeader model, int width, int height, Options options) { ObjectKey key = new ObjectKey(model.getMessageId()); BriarDataFetcher dataFetcher = @@ -36,7 +36,7 @@ public final class BriarModelLoader } @Override - public boolean handles(AttachmentItem model) { + public boolean handles(AttachmentHeader model) { return true; } } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/conversation/glide/BriarModelLoaderFactory.java b/briar-android/src/main/java/org/briarproject/briar/android/conversation/glide/BriarModelLoaderFactory.java index 07ed62227..820f8da21 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/conversation/glide/BriarModelLoaderFactory.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/conversation/glide/BriarModelLoaderFactory.java @@ -6,13 +6,13 @@ import com.bumptech.glide.load.model.MultiModelLoaderFactory; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.briar.android.BriarApplication; -import org.briarproject.briar.android.attachment.AttachmentItem; +import org.briarproject.briar.api.media.AttachmentHeader; import java.io.InputStream; @NotNullByDefault class BriarModelLoaderFactory - implements ModelLoaderFactory { + implements ModelLoaderFactory { private final BriarApplication app; @@ -21,7 +21,7 @@ class BriarModelLoaderFactory } @Override - public ModelLoader build( + public ModelLoader build( MultiModelLoaderFactory multiFactory) { return new BriarModelLoader(app); } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/view/AuthorView.java b/briar-android/src/main/java/org/briarproject/briar/android/view/AuthorView.java index 24a78fe3a..9650dcf64 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/view/AuthorView.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/view/AuthorView.java @@ -8,10 +8,13 @@ import android.view.LayoutInflater; import android.widget.ImageView; import android.widget.TextView; +import com.bumptech.glide.load.engine.DiskCacheStrategy; + import org.briarproject.bramble.api.identity.Author; -import org.briarproject.briar.api.identity.AuthorInfo; import org.briarproject.briar.R; +import org.briarproject.briar.android.conversation.glide.GlideApp; import org.briarproject.briar.android.util.UiUtils; +import org.briarproject.briar.api.identity.AuthorInfo; import javax.annotation.Nullable; @@ -24,10 +27,11 @@ import im.delight.android.identicons.IdenticonDrawable; import static android.content.Context.LAYOUT_INFLATER_SERVICE; import static android.graphics.Typeface.BOLD; import static android.util.TypedValue.COMPLEX_UNIT_PX; -import static org.briarproject.briar.api.identity.AuthorInfo.Status.NONE; -import static org.briarproject.briar.api.identity.AuthorInfo.Status.OURSELVES; +import static com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions.withCrossFade; import static org.briarproject.briar.android.util.UiUtils.getContactDisplayName; import static org.briarproject.briar.android.util.UiUtils.resolveAttribute; +import static org.briarproject.briar.api.identity.AuthorInfo.Status.NONE; +import static org.briarproject.briar.api.identity.AuthorInfo.Status.OURSELVES; @UiThread public class AuthorView extends ConstraintLayout { @@ -74,8 +78,19 @@ public class AuthorView extends ConstraintLayout { public void setAuthor(Author author, AuthorInfo authorInfo) { authorName .setText(getContactDisplayName(author, authorInfo.getAlias())); - IdenticonDrawable d = new IdenticonDrawable(author.getId().getBytes()); - avatar.setImageDrawable(d); + IdenticonDrawable identicon = + new IdenticonDrawable(author.getId().getBytes()); + if (authorInfo.getAvatarHeader() == null) { + avatar.setImageDrawable(identicon); + } else { + GlideApp.with(avatar) + .load(authorInfo.getAvatarHeader()) + .diskCacheStrategy(DiskCacheStrategy.NONE) + .error(identicon) + .transition(withCrossFade()) + .into(avatar) + .waitForLayout(); + } if (authorInfo.getStatus() != NONE) { trustIndicator.setTrustLevel(authorInfo.getStatus()); @@ -117,10 +132,10 @@ public class AuthorView extends ConstraintLayout { /** * Styles this view for a different persona. - * + *

* Attention: RSS_FEED and RSS_FEED_REBLOGGED change the avatar - * and override the one set by - * {@link AuthorView#setAuthor(Author, AuthorInfo)}. + * and override the one set by + * {@link AuthorView#setAuthor(Author, AuthorInfo)}. */ public void setPersona(int persona) { switch (persona) { diff --git a/briar-android/src/main/java/org/briarproject/briar/android/view/ImagePreviewViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/view/ImagePreviewViewHolder.java index f78c4f9fc..5d75f85c3 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/view/ImagePreviewViewHolder.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/view/ImagePreviewViewHolder.java @@ -46,7 +46,7 @@ class ImagePreviewViewHolder extends ViewHolder { .clear(imageView); } else { GlideApp.with(imageView) - .load(item.getItem()) + .load(item.getItem().getHeader()) .diskCacheStrategy(NONE) .error(ERROR_RES) .downsample(FIT_CENTER)