That fuck shit the fascists are using
at master 130 lines 4.0 kB view raw
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}