Async avatar loading

pull/147/head
M66B 6 years ago
parent 1dc019f511
commit f510a7cd19

@ -34,6 +34,7 @@ import android.graphics.Canvas;
import android.graphics.Color; import android.graphics.Color;
import android.graphics.Paint; import android.graphics.Paint;
import android.graphics.Typeface; import android.graphics.Typeface;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
@ -335,30 +336,56 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
tvError.setAlpha(message.duplicate ? LOW_LIGHT : 1.0f); tvError.setAlpha(message.duplicate ? LOW_LIGHT : 1.0f);
} }
boolean photo = false; ivAvatar.setVisibility(compact ? View.GONE : View.INVISIBLE);
if (avatars && !outgoing) {
if (message.avatar != null) Bundle aargs = new Bundle();
try { aargs.putLong("id", message.id);
ContentResolver resolver = context.getContentResolver(); aargs.putString("uri", message.avatar);
InputStream is = ContactsContract.Contacts.openContactPhotoInputStream(resolver, Uri.parse(message.avatar)); if (message.from != null && message.from.length > 0)
if (is != null) { aargs.putString("from", message.from[0].toString());
photo = true;
ivAvatar.setImageDrawable(Drawable.createFromStream(is, "avatar")); ivAvatar.setTag(message.id);
new SimpleTask<Drawable>() {
@Override
protected Drawable onLoad(Context context, Bundle args) {
String uri = args.getString("uri");
if (avatars && !outgoing && uri != null)
try {
ContentResolver resolver = context.getContentResolver();
InputStream is = ContactsContract.Contacts.openContactPhotoInputStream(resolver, Uri.parse(uri));
if (is != null)
return Drawable.createFromStream(is, "avatar");
} catch (SecurityException ex) {
Log.e(ex);
} }
} catch (SecurityException ex) {
Log.e(ex); String from = args.getString("from");
if (identicons && !outgoing && from != null) {
return new BitmapDrawable(
context.getResources(),
Identicon.generate(from, dp24, 5, "light".equals(theme)));
} }
}
if (!photo && identicons && !outgoing) { return null;
if (message.from != null && message.from.length > 0) { }
ivAvatar.setImageBitmap(Identicon.generate(message.from[0].toString(), dp24, 5, "light".equals(theme)));
photo = true; @Override
} else protected void onLoaded(Bundle args, Drawable avatar) {
ivAvatar.setImageDrawable(null); if (avatar != null) {
} if ((long) ivAvatar.getTag() == args.getLong("id")) {
ivAvatar.setVisibility(photo ivAvatar.setImageDrawable(avatar);
? View.VISIBLE : compact || !(avatars || identicons) || outgoing ? View.GONE ivAvatar.setVisibility(View.VISIBLE);
: View.INVISIBLE); } else
Log.i("Skipping avatar");
}
}
@Override
protected void onException(Bundle args, Throwable ex) {
Helper.unexpectedError(context, owner, ex);
}
}.load(context, owner, aargs);
vwColor.setBackgroundColor(message.accountColor == null ? Color.TRANSPARENT : message.accountColor); vwColor.setBackgroundColor(message.accountColor == null ? Color.TRANSPARENT : message.accountColor);
vwColor.setVisibility(View.VISIBLE); vwColor.setVisibility(View.VISIBLE);

Loading…
Cancel
Save