That fuck shit the fascists are using
1package org.tm.archive.conversation;
2
3import android.view.LayoutInflater;
4import android.view.View;
5import android.view.ViewGroup;
6import android.widget.TextView;
7
8import androidx.annotation.NonNull;
9import androidx.recyclerview.widget.RecyclerView;
10
11import com.bumptech.glide.RequestManager;
12
13import org.tm.archive.R;
14import org.tm.archive.components.ThumbnailView;
15import org.tm.archive.mediasend.Media;
16import org.tm.archive.util.MediaUtil;
17import org.tm.archive.util.adapter.StableIdGenerator;
18
19import java.util.ArrayList;
20import java.util.List;
21import java.util.concurrent.TimeUnit;
22
23class AttachmentKeyboardMediaAdapter extends RecyclerView.Adapter<AttachmentKeyboardMediaAdapter.MediaViewHolder> {
24
25 private final List<Media> media;
26 private final RequestManager requestManager;
27 private final Listener listener;
28 private final StableIdGenerator<Media> idGenerator;
29
30 AttachmentKeyboardMediaAdapter(@NonNull RequestManager requestManager, @NonNull Listener listener) {
31 this.requestManager = requestManager;
32 this.listener = listener;
33 this.media = new ArrayList<>();
34 this.idGenerator = new StableIdGenerator<>();
35
36 setHasStableIds(true);
37 }
38
39 @Override
40 public long getItemId(int position) {
41 return idGenerator.getId(media.get(position));
42 }
43
44 @Override
45 public @NonNull MediaViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
46 return new MediaViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.attachment_keyboad_media_item, parent, false));
47 }
48
49 @Override
50 public void onBindViewHolder(@NonNull MediaViewHolder holder, int position) {
51 holder.bind(media.get(position), requestManager, listener);
52 }
53
54 @Override
55 public void onViewRecycled(@NonNull MediaViewHolder holder) {
56 holder.recycle();
57 }
58
59 @Override
60 public int getItemCount() {
61 return media.size();
62 }
63
64 public void setMedia(@NonNull List<Media> media) {
65 this.media.clear();
66 this.media.addAll(media);
67 notifyDataSetChanged();
68 }
69
70 interface Listener {
71 void onMediaClicked(@NonNull Media media);
72 }
73
74 static class MediaViewHolder extends RecyclerView.ViewHolder {
75
76 private final ThumbnailView image;
77 private final TextView duration;
78 private final View videoIcon;
79
80 public MediaViewHolder(@NonNull View itemView) {
81 super(itemView);
82 image = itemView.findViewById(R.id.attachment_keyboard_item_image);
83 duration = itemView.findViewById(R.id.attachment_keyboard_item_video_time);
84 videoIcon = itemView.findViewById(R.id.attachment_keyboard_item_video_icon);
85 }
86
87 void bind(@NonNull Media media, @NonNull RequestManager requestManager, @NonNull Listener listener) {
88 image.setImageResource(requestManager, media.getUri(), 400, 400);
89 image.setOnClickListener(v -> listener.onMediaClicked(media));
90
91 duration.setVisibility(View.GONE);
92 videoIcon.setVisibility(View.GONE);
93
94 if (media.getDuration() > 0) {
95 duration.setVisibility(View.VISIBLE);
96 duration.setText(formatTime(media.getDuration()));
97 } else if (MediaUtil.isVideoType(media.getMimeType())) {
98 videoIcon.setVisibility(View.VISIBLE);
99 }
100 }
101
102 void recycle() {
103 image.setOnClickListener(null);
104 }
105
106 @NonNull static String formatTime(long time) {
107 long hours = TimeUnit.MILLISECONDS.toHours(time);
108 time -= TimeUnit.HOURS.toMillis(hours);
109
110 long minutes = TimeUnit.MILLISECONDS.toMinutes(time);
111 time -= TimeUnit.MINUTES.toMillis(minutes);
112
113 long seconds = TimeUnit.MILLISECONDS.toSeconds(time);
114
115 if (hours > 0) {
116 return zeroPad(hours) + ":" + zeroPad(minutes) + ":" + zeroPad(seconds);
117 } else {
118 return zeroPad(minutes) + ":" + zeroPad(seconds);
119 }
120 }
121
122 @NonNull static String zeroPad(long value) {
123 if (value < 10) {
124 return "0" + value;
125 } else {
126 return String.valueOf(value);
127 }
128 }
129 }
130}