GitNex/app/src/main/java/org/mian/gitnex/adapters/PullRequestsAdapter.java

256 lines
7.8 KiB
Java
Raw Normal View History

2019-11-24 13:42:57 +01:00
package org.mian.gitnex.adapters;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.text.Html;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import org.mian.gitnex.R;
import org.mian.gitnex.activities.IssueDetailActivity;
import org.mian.gitnex.clients.PicassoService;
2019-11-24 13:42:57 +01:00
import org.mian.gitnex.helpers.ClickListener;
import org.mian.gitnex.helpers.RoundedTransformation;
import org.mian.gitnex.helpers.TimeHelper;
import org.mian.gitnex.helpers.TinyDB;
2019-11-24 13:42:57 +01:00
import org.mian.gitnex.models.PullRequests;
import java.util.List;
import java.util.Locale;
/**
* Author M M Arif
*/
public class PullRequestsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
2019-11-24 13:42:57 +01:00
private Context context;
private final int TYPE_LOAD = 0;
private List<PullRequests> prList;
private PullRequestsAdapter.OnLoadMoreListener loadMoreListener;
private boolean isLoading = false, isMoreDataAvailable = true;
2019-11-24 13:42:57 +01:00
public PullRequestsAdapter(Context context, List<PullRequests> prListMain) {
2019-11-24 13:42:57 +01:00
this.context = context;
this.prList = prListMain;
2019-11-24 13:42:57 +01:00
}
2019-11-24 13:42:57 +01:00
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
2019-11-24 13:42:57 +01:00
LayoutInflater inflater = LayoutInflater.from(context);
2019-11-24 13:42:57 +01:00
if(viewType == TYPE_LOAD) {
return new PullRequestsAdapter.PullRequestsHolder(inflater.inflate(R.layout.list_pr, parent, false));
}
else {
return new PullRequestsAdapter.LoadHolder(inflater.inflate(R.layout.row_load, parent, false));
}
2019-11-24 13:42:57 +01:00
}
2019-11-24 13:42:57 +01:00
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
2019-11-24 13:42:57 +01:00
if(position >= getItemCount() - 1 && isMoreDataAvailable && !isLoading && loadMoreListener != null) {
2019-11-24 13:42:57 +01:00
isLoading = true;
loadMoreListener.onLoadMore();
2019-11-24 13:42:57 +01:00
}
2019-11-24 13:42:57 +01:00
if(getItemViewType(position) == TYPE_LOAD) {
2019-11-24 13:42:57 +01:00
((PullRequestsAdapter.PullRequestsHolder) holder).bindData(prList.get(position));
2019-11-24 13:42:57 +01:00
}
2019-11-24 13:42:57 +01:00
}
2019-11-24 13:42:57 +01:00
@Override
public int getItemViewType(int position) {
2019-11-24 13:42:57 +01:00
if(prList.get(position).getTitle() != null) {
return TYPE_LOAD;
}
else {
return 1;
}
2019-11-24 13:42:57 +01:00
}
2019-11-24 13:42:57 +01:00
@Override
public int getItemCount() {
2019-11-24 13:42:57 +01:00
return prList.size();
2019-11-24 13:42:57 +01:00
}
2019-11-24 13:42:57 +01:00
class PullRequestsHolder extends RecyclerView.ViewHolder {
2019-11-24 13:42:57 +01:00
private TextView prNumber;
private TextView prMergeable;
private TextView prHeadBranch;
private TextView prIsFork;
private TextView prForkFullName;
private ImageView assigneeAvatar;
private TextView prTitle;
private TextView prCreatedTime;
private TextView prCommentsCount;
2019-11-24 13:42:57 +01:00
PullRequestsHolder(View itemView) {
2019-11-24 13:42:57 +01:00
super(itemView);
2019-11-24 13:42:57 +01:00
prNumber = itemView.findViewById(R.id.prNumber);
prMergeable = itemView.findViewById(R.id.prMergeable);
prHeadBranch = itemView.findViewById(R.id.prHeadBranch);
prIsFork = itemView.findViewById(R.id.prIsFork);
prForkFullName = itemView.findViewById(R.id.prForkFullName);
assigneeAvatar = itemView.findViewById(R.id.assigneeAvatar);
prTitle = itemView.findViewById(R.id.prTitle);
prCommentsCount = itemView.findViewById(R.id.prCommentsCount);
LinearLayout frameCommentsCount = itemView.findViewById(R.id.frameCommentsCount);
prCreatedTime = itemView.findViewById(R.id.prCreatedTime);
2019-11-24 13:42:57 +01:00
prTitle.setOnClickListener(v -> {
2019-11-24 13:42:57 +01:00
Context context = v.getContext();
2019-11-24 13:42:57 +01:00
Intent intent = new Intent(context, IssueDetailActivity.class);
intent.putExtra("issueNumber", prNumber.getText());
intent.putExtra("prMergeable", prMergeable.getText());
intent.putExtra("prHeadBranch", prHeadBranch.getText());
2019-11-24 13:42:57 +01:00
TinyDB tinyDb = new TinyDB(context);
tinyDb.putString("issueNumber", prNumber.getText().toString());
tinyDb.putString("prMergeable", prMergeable.getText().toString());
tinyDb.putString("prHeadBranch", prHeadBranch.getText().toString());
tinyDb.putString("prIsFork", prIsFork.getText().toString());
tinyDb.putString("prForkFullName", prForkFullName.getText().toString());
tinyDb.putString("issueType", "Pull");
context.startActivity(intent);
2019-11-24 13:42:57 +01:00
});
frameCommentsCount.setOnClickListener(v -> {
2019-11-24 13:42:57 +01:00
Context context = v.getContext();
2019-11-24 13:42:57 +01:00
Intent intent = new Intent(context, IssueDetailActivity.class);
intent.putExtra("issueNumber", prNumber.getText());
intent.putExtra("prMergeable", prMergeable.getText());
intent.putExtra("prHeadBranch", prHeadBranch.getText());
2019-11-24 13:42:57 +01:00
TinyDB tinyDb = new TinyDB(context);
tinyDb.putString("issueNumber", prNumber.getText().toString());
tinyDb.putString("prMergeable", prMergeable.getText().toString());
tinyDb.putString("prHeadBranch", prHeadBranch.getText().toString());
tinyDb.putString("prIsFork", prIsFork.getText().toString());
tinyDb.putString("prForkFullName", prForkFullName.getText().toString());
tinyDb.putString("issueType", "Pull");
context.startActivity(intent);
2019-11-24 13:42:57 +01:00
});
2019-11-24 13:42:57 +01:00
}
2019-11-24 13:42:57 +01:00
@SuppressLint("SetTextI18n")
void bindData(PullRequests prModel) {
2019-11-24 13:42:57 +01:00
final TinyDB tinyDb = new TinyDB(context);
final String locale = tinyDb.getString("locale");
final String timeFormat = tinyDb.getString("dateFormat");
2019-11-24 13:42:57 +01:00
if(!prModel.getUser().getFull_name().equals("")) {
assigneeAvatar.setOnClickListener(new ClickListener(context.getResources().getString(R.string.prCreator) + prModel.getUser().getFull_name(), context));
}
else {
assigneeAvatar.setOnClickListener(new ClickListener(context.getResources().getString(R.string.prCreator) + prModel.getUser().getLogin(), context));
}
2019-11-24 13:42:57 +01:00
if(prModel.getUser().getAvatar_url() != null) {
PicassoService.getInstance(context).get().load(prModel.getUser().getAvatar_url()).placeholder(R.drawable.loader_animated).transform(new RoundedTransformation(8, 0)).resize(120, 120).centerCrop().into(assigneeAvatar);
}
else {
PicassoService.getInstance(context).get().load(prModel.getUser().getAvatar_url()).placeholder(R.drawable.loader_animated).transform(new RoundedTransformation(8, 0)).resize(120, 120).centerCrop().into(assigneeAvatar);
}
2019-11-24 13:42:57 +01:00
String prNumber_ = "<font color='" + context.getResources().getColor(R.color.lightGray) + "'>" + context.getResources().getString(R.string.hash) + prModel.getNumber() + "</font>";
prTitle.setText(Html.fromHtml(prNumber_ + " " + prModel.getTitle()));
2019-11-24 13:42:57 +01:00
prNumber.setText(String.valueOf(prModel.getNumber()));
prMergeable.setText(String.valueOf(prModel.isMergeable()));
if(prModel.getHead() != null) {
prHeadBranch.setText(prModel.getHead().getRef());
if(prModel.getHead().getRepo() != null) {
prIsFork.setText(String.valueOf(prModel.getHead().getRepo().isFork()));
prForkFullName.setText(prModel.getHead().getRepo().getFull_name());
}
else {
// pull was done from a deleted fork
prIsFork.setText("true");
prForkFullName.setText(context.getString(R.string.prDeletedFrok));
}
}
prCommentsCount.setText(String.valueOf(prModel.getComments()));
2019-11-24 13:42:57 +01:00
prCreatedTime.setText(TimeHelper.formatTime(prModel.getCreated_at(), new Locale(locale), timeFormat, context));
if(timeFormat.equals("pretty")) {
prCreatedTime.setOnClickListener(new ClickListener(TimeHelper.customDateFormatForToastDateFormat(prModel.getCreated_at()), context));
}
2019-11-24 13:42:57 +01:00
}
2019-11-24 13:42:57 +01:00
}
2019-11-24 13:42:57 +01:00
static class LoadHolder extends RecyclerView.ViewHolder {
2019-11-24 13:42:57 +01:00
LoadHolder(View itemView) {
2019-11-24 13:42:57 +01:00
super(itemView);
}
2019-11-24 13:42:57 +01:00
}
2019-11-24 13:42:57 +01:00
public void setMoreDataAvailable(boolean moreDataAvailable) {
2019-11-24 13:42:57 +01:00
isMoreDataAvailable = moreDataAvailable;
2019-11-24 13:42:57 +01:00
}
2019-11-24 13:42:57 +01:00
public void notifyDataChanged() {
2019-11-24 13:42:57 +01:00
notifyDataSetChanged();
isLoading = false;
2019-11-24 13:42:57 +01:00
}
2019-11-24 13:42:57 +01:00
public interface OnLoadMoreListener {
2019-11-24 13:42:57 +01:00
void onLoadMore();
2019-11-24 13:42:57 +01:00
}
2019-11-24 13:42:57 +01:00
public void setLoadMoreListener(PullRequestsAdapter.OnLoadMoreListener loadMoreListener) {
2019-11-24 13:42:57 +01:00
this.loadMoreListener = loadMoreListener;
2019-11-24 13:42:57 +01:00
}
2019-11-24 13:42:57 +01:00
public void updateList(List<PullRequests> list) {
2019-11-24 13:42:57 +01:00
prList = list;
notifyDataSetChanged();
}
2019-11-24 13:42:57 +01:00
}