Files
SimpliTend/app/src/main/java/com/ssb/simplitend/articles/ArticlesAdapter.java

118 lines
4.0 KiB
Java
Raw Normal View History

2023-08-21 20:48:23 +05:30
package com.ssb.simplitend.articles;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.ListAdapter;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.ssb.simplitend.apputils.AppUtil;
import com.ssb.simplitend.databinding.ArticleViewHolderBinding;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
public class ArticlesAdapter extends ListAdapter<ArticleResult, ArticlesAdapter.ArticleViewHOlder> {
private final ArticleClickListener articleClickListener;
private static final DiffUtil.ItemCallback<ArticleResult> DIFF_UTIL = new DiffUtil.ItemCallback<ArticleResult>() {
@Override
public boolean areItemsTheSame(@NonNull ArticleResult oldItem, @NonNull ArticleResult newItem) {
return oldItem.id == newItem.id;
}
@Override
public boolean areContentsTheSame(@NonNull ArticleResult oldItem, @NonNull ArticleResult newItem) {
return false;
}
};
public ArticlesAdapter(@NonNull ArticleClickListener articleClickListener){
super(DIFF_UTIL);
this.articleClickListener = articleClickListener;
}
@NonNull
@Override
public ArticleViewHOlder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
ArticleViewHolderBinding binding = ArticleViewHolderBinding.inflate(
LayoutInflater.from(parent.getContext()),
parent, false);
return new ArticleViewHOlder(binding);
}
@Override
public void onBindViewHolder(@NonNull ArticleViewHOlder holder, int position) {
holder.setData(getItem(position));
holder.binding.card.setOnClickListener(v -> {
articleClickListener.onArticleClick(getItem(position));
});
}
public static class ArticleViewHOlder extends RecyclerView.ViewHolder{
public ArticleViewHolderBinding binding;
public ArticleViewHOlder(@NonNull ArticleViewHolderBinding binding) {
super(binding.getRoot());
this.binding = binding;
}
public void setData(ArticleResult articleResult){
if (articleResult == null) return;
2023-09-05 15:51:12 +05:30
Glide.with(binding.articleImg)
2023-08-21 20:48:23 +05:30
.load(AppUtil.IMAGE_BASE_URL + articleResult.large_image)
.placeholder(android.R.color.darker_gray)
.error(android.R.color.darker_gray)
.into(binding.articleImg);
if (articleResult.article_title == null){
articleResult.article_title = "No title";
}
binding.title.setText(articleResult.article_title);
if (articleResult.article_author == null){
articleResult.article_author = "No author";
}
binding.authorName.setText(articleResult.article_author);
try {
if (articleResult.created_at == null) throw new Exception();
// parsing time of created at
SimpleDateFormat format = new SimpleDateFormat(
"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US);
format.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date = format.parse(articleResult.created_at);
if (date == null) throw new Exception();
SimpleDateFormat pretty_format = new SimpleDateFormat("dd MMM yy, HH:mm a", Locale.getDefault());
String time = pretty_format.format(date);
binding.createdAt.setText(time);
}catch (Exception e){
// do nothing
String none = "None";
binding.createdAt.setText(none);
}
}
}
// interfaces
@FunctionalInterface
public interface ArticleClickListener{
void onArticleClick(ArticleResult articleResult);
}
}