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() {
GlideApp.with(this)
.load(attachment)
.load(attachment.getHeader())
// TODO allow if size < maxTextureSize ?
// .override(SIZE_ORIGINAL)
.diskCacheStrategy(NONE)

View File

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

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.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);
}

View File

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

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.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<AttachmentItem, InputStream> {
implements ModelLoader<AttachmentHeader, InputStream> {
@Inject
BriarDataFetcherFactory dataFetcherFactory;
@@ -27,7 +27,7 @@ public final class BriarModelLoader
}
@Override
public LoadData<InputStream> buildLoadData(AttachmentItem model, int width,
public LoadData<InputStream> 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;
}
}

View File

@@ -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<AttachmentItem, InputStream> {
implements ModelLoaderFactory<AttachmentHeader, InputStream> {
private final BriarApplication app;
@@ -21,7 +21,7 @@ class BriarModelLoaderFactory
}
@Override
public ModelLoader<AttachmentItem, InputStream> build(
public ModelLoader<AttachmentHeader, InputStream> build(
MultiModelLoaderFactory multiFactory) {
return new BriarModelLoader(app);
}

View File

@@ -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.
*
* <p>
* 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) {

View File

@@ -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)