Show Avatars in AuthorView

This commit is contained in:
Torsten Grote
2020-11-24 14:42:22 -03:00
parent fe7121b4ec
commit 1b0cb532de
9 changed files with 43 additions and 28 deletions

View File

@@ -121,7 +121,7 @@ public class ImageFragment extends Fragment
private void loadImage() { private void loadImage() {
GlideApp.with(this) GlideApp.with(this)
.load(attachment) .load(attachment.getHeader())
// TODO allow if size < maxTextureSize ? // TODO allow if size < maxTextureSize ?
// .override(SIZE_ORIGINAL) // .override(SIZE_ORIGINAL)
.diskCacheStrategy(NONE) .diskCacheStrategy(NONE)

View File

@@ -77,7 +77,7 @@ class ImageViewHolder extends ViewHolder {
private void loadImage(AttachmentItem a, Radii r) { private void loadImage(AttachmentItem a, Radii r) {
Transformation<Bitmap> transformation = new BriarImageTransformation(r); Transformation<Bitmap> transformation = new BriarImageTransformation(r);
GlideApp.with(imageView) GlideApp.with(imageView)
.load(a) .load(a.getHeader())
.diskCacheStrategy(NONE) .diskCacheStrategy(NONE)
.error(ERROR_RES) .error(ERROR_RES)
.transform(transformation) .transform(transformation)

View File

@@ -7,8 +7,8 @@ import com.bumptech.glide.load.data.DataFetcher;
import org.briarproject.bramble.api.db.DatabaseExecutor; import org.briarproject.bramble.api.db.DatabaseExecutor;
import org.briarproject.bramble.api.db.DbException; import org.briarproject.bramble.api.db.DbException;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault; 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.Attachment;
import org.briarproject.briar.api.media.AttachmentHeader;
import org.briarproject.briar.api.media.AttachmentReader; import org.briarproject.briar.api.media.AttachmentReader;
import java.io.InputStream; import java.io.InputStream;
@@ -33,7 +33,7 @@ class BriarDataFetcher implements DataFetcher<InputStream> {
private final AttachmentReader attachmentReader; private final AttachmentReader attachmentReader;
@DatabaseExecutor @DatabaseExecutor
private final Executor dbExecutor; private final Executor dbExecutor;
private final AttachmentItem attachment; private final AttachmentHeader attachmentHeader;
@Nullable @Nullable
private volatile InputStream inputStream; private volatile InputStream inputStream;
@@ -41,10 +41,11 @@ class BriarDataFetcher implements DataFetcher<InputStream> {
@Inject @Inject
BriarDataFetcher(AttachmentReader attachmentReader, BriarDataFetcher(AttachmentReader attachmentReader,
@DatabaseExecutor Executor dbExecutor, AttachmentItem attachment) { @DatabaseExecutor Executor dbExecutor,
AttachmentHeader attachmentHeader) {
this.attachmentReader = attachmentReader; this.attachmentReader = attachmentReader;
this.dbExecutor = dbExecutor; this.dbExecutor = dbExecutor;
this.attachment = attachment; this.attachmentHeader = attachmentHeader;
} }
@Override @Override
@@ -53,8 +54,7 @@ class BriarDataFetcher implements DataFetcher<InputStream> {
dbExecutor.execute(() -> { dbExecutor.execute(() -> {
if (cancel) return; if (cancel) return;
try { try {
Attachment a = Attachment a = attachmentReader.getAttachment(attachmentHeader);
attachmentReader.getAttachment(attachment.getHeader());
inputStream = a.getStream(); inputStream = a.getStream();
callback.onDataReady(inputStream); callback.onDataReady(inputStream);
} catch (DbException e) { } catch (DbException e) {

View File

@@ -2,7 +2,7 @@ package org.briarproject.briar.android.conversation.glide;
import org.briarproject.bramble.api.db.DatabaseExecutor; import org.briarproject.bramble.api.db.DatabaseExecutor;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault; 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 org.briarproject.briar.api.media.AttachmentReader;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
@@ -23,7 +23,7 @@ public class BriarDataFetcherFactory {
this.dbExecutor = dbExecutor; this.dbExecutor = dbExecutor;
} }
BriarDataFetcher createBriarDataFetcher(AttachmentItem model) { BriarDataFetcher createBriarDataFetcher(AttachmentHeader model) {
return new BriarDataFetcher(attachmentReader, dbExecutor, model); return new BriarDataFetcher(attachmentReader, dbExecutor, model);
} }

View File

@@ -10,7 +10,7 @@ import com.bumptech.glide.module.AppGlideModule;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.briar.android.BriarApplication; import org.briarproject.briar.android.BriarApplication;
import org.briarproject.briar.android.attachment.AttachmentItem; import org.briarproject.briar.api.media.AttachmentHeader;
import java.io.InputStream; import java.io.InputStream;
@@ -28,7 +28,7 @@ public final class BriarGlideModule extends AppGlideModule {
BriarApplication app = BriarApplication app =
(BriarApplication) context.getApplicationContext(); (BriarApplication) context.getApplicationContext();
BriarModelLoaderFactory factory = new BriarModelLoaderFactory(app); BriarModelLoaderFactory factory = new BriarModelLoaderFactory(app);
registry.prepend(AttachmentItem.class, InputStream.class, factory); registry.prepend(AttachmentHeader.class, InputStream.class, factory);
} }
@Override @Override

View File

@@ -8,7 +8,7 @@ import com.bumptech.glide.signature.ObjectKey;
import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
import org.briarproject.briar.android.BriarApplication; import org.briarproject.briar.android.BriarApplication;
import org.briarproject.briar.android.attachment.AttachmentItem; import org.briarproject.briar.api.media.AttachmentHeader;
import java.io.InputStream; import java.io.InputStream;
@@ -17,7 +17,7 @@ import javax.inject.Inject;
@MethodsNotNullByDefault @MethodsNotNullByDefault
@ParametersNotNullByDefault @ParametersNotNullByDefault
public final class BriarModelLoader public final class BriarModelLoader
implements ModelLoader<AttachmentItem, InputStream> { implements ModelLoader<AttachmentHeader, InputStream> {
@Inject @Inject
BriarDataFetcherFactory dataFetcherFactory; BriarDataFetcherFactory dataFetcherFactory;
@@ -27,7 +27,7 @@ public final class BriarModelLoader
} }
@Override @Override
public LoadData<InputStream> buildLoadData(AttachmentItem model, int width, public LoadData<InputStream> buildLoadData(AttachmentHeader model, int width,
int height, Options options) { int height, Options options) {
ObjectKey key = new ObjectKey(model.getMessageId()); ObjectKey key = new ObjectKey(model.getMessageId());
BriarDataFetcher dataFetcher = BriarDataFetcher dataFetcher =
@@ -36,7 +36,7 @@ public final class BriarModelLoader
} }
@Override @Override
public boolean handles(AttachmentItem model) { public boolean handles(AttachmentHeader model) {
return true; return true;
} }
} }

View File

@@ -6,13 +6,13 @@ import com.bumptech.glide.load.model.MultiModelLoaderFactory;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.briar.android.BriarApplication; import org.briarproject.briar.android.BriarApplication;
import org.briarproject.briar.android.attachment.AttachmentItem; import org.briarproject.briar.api.media.AttachmentHeader;
import java.io.InputStream; import java.io.InputStream;
@NotNullByDefault @NotNullByDefault
class BriarModelLoaderFactory class BriarModelLoaderFactory
implements ModelLoaderFactory<AttachmentItem, InputStream> { implements ModelLoaderFactory<AttachmentHeader, InputStream> {
private final BriarApplication app; private final BriarApplication app;
@@ -21,7 +21,7 @@ class BriarModelLoaderFactory
} }
@Override @Override
public ModelLoader<AttachmentItem, InputStream> build( public ModelLoader<AttachmentHeader, InputStream> build(
MultiModelLoaderFactory multiFactory) { MultiModelLoaderFactory multiFactory) {
return new BriarModelLoader(app); return new BriarModelLoader(app);
} }

View File

@@ -8,10 +8,13 @@ import android.view.LayoutInflater;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import org.briarproject.bramble.api.identity.Author; import org.briarproject.bramble.api.identity.Author;
import org.briarproject.briar.api.identity.AuthorInfo;
import org.briarproject.briar.R; import org.briarproject.briar.R;
import org.briarproject.briar.android.conversation.glide.GlideApp;
import org.briarproject.briar.android.util.UiUtils; import org.briarproject.briar.android.util.UiUtils;
import org.briarproject.briar.api.identity.AuthorInfo;
import javax.annotation.Nullable; 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.content.Context.LAYOUT_INFLATER_SERVICE;
import static android.graphics.Typeface.BOLD; import static android.graphics.Typeface.BOLD;
import static android.util.TypedValue.COMPLEX_UNIT_PX; import static android.util.TypedValue.COMPLEX_UNIT_PX;
import static org.briarproject.briar.api.identity.AuthorInfo.Status.NONE; import static com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions.withCrossFade;
import static org.briarproject.briar.api.identity.AuthorInfo.Status.OURSELVES;
import static org.briarproject.briar.android.util.UiUtils.getContactDisplayName; import static org.briarproject.briar.android.util.UiUtils.getContactDisplayName;
import static org.briarproject.briar.android.util.UiUtils.resolveAttribute; 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 @UiThread
public class AuthorView extends ConstraintLayout { public class AuthorView extends ConstraintLayout {
@@ -74,8 +78,19 @@ public class AuthorView extends ConstraintLayout {
public void setAuthor(Author author, AuthorInfo authorInfo) { public void setAuthor(Author author, AuthorInfo authorInfo) {
authorName authorName
.setText(getContactDisplayName(author, authorInfo.getAlias())); .setText(getContactDisplayName(author, authorInfo.getAlias()));
IdenticonDrawable d = new IdenticonDrawable(author.getId().getBytes()); IdenticonDrawable identicon =
avatar.setImageDrawable(d); 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) { if (authorInfo.getStatus() != NONE) {
trustIndicator.setTrustLevel(authorInfo.getStatus()); trustIndicator.setTrustLevel(authorInfo.getStatus());
@@ -117,10 +132,10 @@ public class AuthorView extends ConstraintLayout {
/** /**
* Styles this view for a different persona. * Styles this view for a different persona.
* * <p>
* Attention: RSS_FEED and RSS_FEED_REBLOGGED change the avatar * Attention: RSS_FEED and RSS_FEED_REBLOGGED change the avatar
* and override the one set by * and override the one set by
* {@link AuthorView#setAuthor(Author, AuthorInfo)}. * {@link AuthorView#setAuthor(Author, AuthorInfo)}.
*/ */
public void setPersona(int persona) { public void setPersona(int persona) {
switch (persona) { switch (persona) {

View File

@@ -46,7 +46,7 @@ class ImagePreviewViewHolder extends ViewHolder {
.clear(imageView); .clear(imageView);
} else { } else {
GlideApp.with(imageView) GlideApp.with(imageView)
.load(item.getItem()) .load(item.getItem().getHeader())
.diskCacheStrategy(NONE) .diskCacheStrategy(NONE)
.error(ERROR_RES) .error(ERROR_RES)
.downsample(FIT_CENTER) .downsample(FIT_CENTER)