That fuck shit the fascists are using
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}