That fuck shit the fascists are using
at master 124 lines 3.9 kB view raw
1package org.tm.archive.contacts; 2 3import android.content.Context; 4import android.graphics.Canvas; 5import android.graphics.ColorFilter; 6import android.graphics.PixelFormat; 7import android.graphics.Rect; 8import android.graphics.drawable.Drawable; 9import android.util.AttributeSet; 10 11import androidx.annotation.NonNull; 12import androidx.annotation.Nullable; 13 14import com.bumptech.glide.RequestManager; 15import com.bumptech.glide.load.engine.DiskCacheStrategy; 16import com.bumptech.glide.request.target.CustomTarget; 17import com.bumptech.glide.request.transition.Transition; 18import com.google.android.material.chip.Chip; 19 20import org.tm.archive.contacts.avatars.ContactPhoto; 21import org.tm.archive.recipients.Recipient; 22 23public final class ContactChip extends Chip { 24 25 @Nullable private SelectedContact contact; 26 27 public ContactChip(Context context) { 28 super(context); 29 } 30 31 public ContactChip(Context context, AttributeSet attrs) { 32 super(context, attrs); 33 } 34 35 public ContactChip(Context context, AttributeSet attrs, int defStyleAttr) { 36 super(context, attrs, defStyleAttr); 37 } 38 39 public void setContact(@NonNull SelectedContact contact) { 40 this.contact = contact; 41 } 42 43 public @Nullable SelectedContact getContact() { 44 return contact; 45 } 46 47 public void setAvatar(@NonNull RequestManager requestManager, @Nullable Recipient recipient, @Nullable Runnable onAvatarSet) { 48 if (recipient != null) { 49 requestManager.clear(this); 50 51 Drawable fallbackContactPhotoDrawable = new HalfScaleDrawable(recipient.getFallbackContactPhotoDrawable(getContext(), false)); 52 ContactPhoto contactPhoto = recipient.getContactPhoto(); 53 54 if (contactPhoto == null) { 55 setChipIcon(fallbackContactPhotoDrawable); 56 if (onAvatarSet != null) { 57 onAvatarSet.run(); 58 } 59 } else { 60 requestManager.load(contactPhoto) 61 .placeholder(fallbackContactPhotoDrawable) 62 .fallback(fallbackContactPhotoDrawable) 63 .error(fallbackContactPhotoDrawable) 64 .circleCrop() 65 .diskCacheStrategy(DiskCacheStrategy.ALL) 66 .into(new CustomTarget<Drawable>() { 67 @Override 68 public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) { 69 setChipIcon(resource); 70 if (onAvatarSet != null) { 71 onAvatarSet.run(); 72 } 73 } 74 75 @Override 76 public void onLoadCleared(@Nullable Drawable placeholder) { 77 setChipIcon(placeholder); 78 } 79 }); 80 } 81 } 82 } 83 84 private static class HalfScaleDrawable extends Drawable { 85 86 private final Drawable fallbackContactPhotoDrawable; 87 88 HalfScaleDrawable(Drawable fallbackContactPhotoDrawable) { 89 this.fallbackContactPhotoDrawable = fallbackContactPhotoDrawable; 90 } 91 92 @Override 93 public void setBounds(int left, int top, int right, int bottom) { 94 super.setBounds(left, top, right, bottom); 95 fallbackContactPhotoDrawable.setBounds(left, top, 2 * right - left, 2 * bottom - top); 96 } 97 98 @Override 99 public void setBounds(@NonNull Rect bounds) { 100 super.setBounds(bounds); 101 } 102 103 @Override 104 public void draw(@NonNull Canvas canvas) { 105 canvas.save(); 106 canvas.scale(0.5f, 0.5f); 107 fallbackContactPhotoDrawable.draw(canvas); 108 canvas.restore(); 109 } 110 111 @Override 112 public void setAlpha(int alpha) { 113 } 114 115 @Override 116 public void setColorFilter(@Nullable ColorFilter colorFilter) { 117 } 118 119 @Override 120 public int getOpacity() { 121 return PixelFormat.OPAQUE; 122 } 123 } 124}