2019-06-03 23:25:05 +02:00
|
|
|
package org.mian.gitnex.adapters;
|
|
|
|
|
|
|
|
import android.content.Context;
|
|
|
|
import android.content.Intent;
|
2019-09-30 18:12:45 +02:00
|
|
|
import android.text.Html;
|
2019-06-03 23:25:05 +02:00
|
|
|
import android.view.View;
|
|
|
|
import android.widget.ImageView;
|
|
|
|
import android.widget.TextView;
|
2020-04-14 22:55:04 +02:00
|
|
|
import androidx.annotation.NonNull;
|
|
|
|
import androidx.annotation.Nullable;
|
|
|
|
import androidx.recyclerview.widget.RecyclerView;
|
|
|
|
import com.mikepenz.fastadapter.FastAdapter;
|
|
|
|
import com.mikepenz.fastadapter.items.AbstractItem;
|
|
|
|
import com.mikepenz.fastadapter.listeners.ClickEventHook;
|
|
|
|
import com.mikepenz.fastadapter.utils.EventHookUtil;
|
2019-06-03 23:25:05 +02:00
|
|
|
import org.mian.gitnex.R;
|
|
|
|
import org.mian.gitnex.activities.IssueDetailActivity;
|
2020-04-01 13:26:32 +02:00
|
|
|
import org.mian.gitnex.clients.PicassoService;
|
2019-06-03 23:25:05 +02:00
|
|
|
import org.mian.gitnex.helpers.ClickListener;
|
|
|
|
import org.mian.gitnex.helpers.RoundedTransformation;
|
|
|
|
import org.mian.gitnex.helpers.TimeHelper;
|
|
|
|
import org.mian.gitnex.util.TinyDB;
|
|
|
|
import org.ocpsoft.prettytime.PrettyTime;
|
|
|
|
import java.text.DateFormat;
|
|
|
|
import java.text.SimpleDateFormat;
|
2020-04-14 22:55:04 +02:00
|
|
|
import java.util.Date;
|
2019-06-03 23:25:05 +02:00
|
|
|
import java.util.List;
|
|
|
|
import java.util.Locale;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Author M M Arif
|
|
|
|
*/
|
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
public class IssuesAdapter extends AbstractItem<IssuesAdapter, IssuesAdapter.ViewHolder> {
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
final private Context ctx;
|
|
|
|
private String issueTitle;
|
|
|
|
private int issueNumber;
|
|
|
|
private String issueAssigneeAvatar;
|
|
|
|
private Date issueCreatedTime;
|
|
|
|
private int issueCommentsCount;
|
|
|
|
private String userFullname;
|
|
|
|
private String userLogin;
|
|
|
|
|
|
|
|
private boolean isSelectable = true;
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
public IssuesAdapter(Context ctx) {
|
|
|
|
this.ctx = ctx;
|
|
|
|
}
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
public IssuesAdapter withNewItems(String issueTitle, int issueNumber, String issueAssigneeAvatar, Date issueCreatedTime, int issueCommentsCount, String userFullname, String userLogin) {
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
this.setNewItems(issueTitle, issueNumber, issueAssigneeAvatar, issueCreatedTime, issueCommentsCount, userFullname, userLogin);
|
|
|
|
return this;
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
}
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
private void setNewItems(String issueTitle, int issueNumber, String issueAssigneeAvatar, Date issueCreatedTime, int issueCommentsCount, String userFullname, String userLogin) {
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
this.issueTitle = issueTitle;
|
|
|
|
this.issueNumber = issueNumber;
|
|
|
|
this.issueAssigneeAvatar = issueAssigneeAvatar;
|
|
|
|
this.issueCreatedTime = issueCreatedTime;
|
|
|
|
this.issueCommentsCount = issueCommentsCount;
|
|
|
|
this.userFullname = userFullname;
|
|
|
|
this.userLogin = userLogin;
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
}
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
private int getIssueNumber() {
|
|
|
|
return issueNumber;
|
|
|
|
}
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
public String getIssueTitle() {
|
|
|
|
return issueTitle;
|
|
|
|
}
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
private String getIssueAssigneeAvatar() {
|
|
|
|
return issueAssigneeAvatar;
|
|
|
|
}
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
private Date getIssueCreatedTime() {
|
|
|
|
return issueCreatedTime;
|
|
|
|
}
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
private int getIssueCommentsCount() {
|
|
|
|
return issueCommentsCount;
|
|
|
|
}
|
|
|
|
|
|
|
|
private String getUserFullname() {
|
|
|
|
return userFullname;
|
|
|
|
}
|
|
|
|
|
|
|
|
private String getUserLogin() {
|
|
|
|
return userLogin;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean isEnabled() {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public IssuesAdapter withEnabled(boolean enabled) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean isSelectable() {
|
|
|
|
return isSelectable;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public IssuesAdapter withSelectable(boolean selectable) {
|
|
|
|
this.isSelectable = selectable;
|
|
|
|
return this;
|
|
|
|
}
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
@Override
|
|
|
|
public int getType() {
|
|
|
|
return R.id.relativeLayoutFrameIssuesList;
|
|
|
|
}
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
@Override
|
|
|
|
public int getLayoutRes() {
|
|
|
|
return R.layout.list_issues;
|
|
|
|
}
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
@NonNull
|
|
|
|
@Override
|
|
|
|
public IssuesAdapter.ViewHolder getViewHolder(@NonNull View v) {
|
|
|
|
return new IssuesAdapter.ViewHolder(v);
|
|
|
|
}
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
public class ViewHolder extends FastAdapter.ViewHolder<IssuesAdapter> {
|
2019-11-24 13:42:57 +01:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
final TinyDB tinyDb = new TinyDB(ctx);
|
|
|
|
final String locale = tinyDb.getString("locale");
|
|
|
|
final String timeFormat = tinyDb.getString("dateFormat");
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
private TextView issueNumber;
|
|
|
|
private ImageView issueAssigneeAvatar;
|
|
|
|
private TextView issueTitle;
|
|
|
|
private TextView issueCreatedTime;
|
|
|
|
private TextView issueCommentsCount;
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
public ViewHolder(View itemView) {
|
2019-09-30 18:12:45 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
super(itemView);
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
issueNumber = itemView.findViewById(R.id.issueNumber);
|
|
|
|
issueAssigneeAvatar = itemView.findViewById(R.id.assigneeAvatar);
|
|
|
|
issueTitle = itemView.findViewById(R.id.issueTitle);
|
|
|
|
issueCommentsCount = itemView.findViewById(R.id.issueCommentsCount);
|
|
|
|
issueCreatedTime = itemView.findViewById(R.id.issueCreatedTime);
|
2020-04-07 23:17:12 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
}
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
@Override
|
|
|
|
public void bindView(@NonNull IssuesAdapter item, @NonNull List<Object> payloads) {
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
if (!item.getUserFullname().equals("")) {
|
|
|
|
issueAssigneeAvatar.setOnClickListener(new ClickListener(ctx.getResources().getString(R.string.issueCreator) + item.getUserFullname(), ctx));
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
issueAssigneeAvatar.setOnClickListener(new ClickListener(ctx.getResources().getString(R.string.issueCreator) + item.getUserLogin(), ctx));
|
|
|
|
}
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
PicassoService.getInstance(ctx).get().load(item.getIssueAssigneeAvatar()).placeholder(R.drawable.loader_animated).transform(new RoundedTransformation(8, 0)).resize(120, 120).centerCrop().into(issueAssigneeAvatar);
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
String issueNumber_ = "<font color='" + ctx.getResources().getColor(R.color.lightGray) + "'>" + ctx.getResources().getString(R.string.hash) + item.getIssueNumber() + "</font>";
|
|
|
|
issueTitle.setText(Html.fromHtml(issueNumber_ + " " + item.getIssueTitle()));
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
issueNumber.setText(String.valueOf(item.getIssueNumber()));
|
|
|
|
issueCommentsCount.setText(String.valueOf(item.getIssueCommentsCount()));
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
switch (timeFormat) {
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
case "pretty": {
|
|
|
|
PrettyTime prettyTime = new PrettyTime(new Locale(locale));
|
|
|
|
String createdTime = prettyTime.format(item.getIssueCreatedTime());
|
|
|
|
issueCreatedTime.setText(createdTime);
|
|
|
|
issueCreatedTime.setOnClickListener(new ClickListener(TimeHelper.customDateFormatForToastDateFormat(item.getIssueCreatedTime()), ctx));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case "normal": {
|
|
|
|
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd '" + ctx.getResources().getString(R.string.timeAtText) + "' HH:mm", new Locale(locale));
|
|
|
|
String createdTime = formatter.format(item.getIssueCreatedTime());
|
|
|
|
issueCreatedTime.setText(createdTime);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case "normal1": {
|
|
|
|
DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy '" + ctx.getResources().getString(R.string.timeAtText) + "' HH:mm", new Locale(locale));
|
|
|
|
String createdTime = formatter.format(item.getIssueCreatedTime());
|
|
|
|
issueCreatedTime.setText(createdTime);
|
|
|
|
break;
|
|
|
|
}
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
}
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
}
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
@Override
|
|
|
|
public void unbindView(@NonNull IssuesAdapter item) {
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
issueTitle.setText(null);
|
|
|
|
issueCommentsCount.setText(null);
|
|
|
|
issueCreatedTime.setText(null);
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
}
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
}
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
public static class IssueTitleClickEvent extends ClickEventHook<IssuesAdapter> {
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
@Nullable
|
|
|
|
@Override
|
|
|
|
public List<View> onBindMany(@NonNull RecyclerView.ViewHolder viewHolder) {
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
if (viewHolder instanceof IssuesAdapter.ViewHolder) {
|
|
|
|
return EventHookUtil.toList(((ViewHolder) viewHolder).issueTitle);
|
|
|
|
}
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
return super.onBindMany(viewHolder);
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
}
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
@Override
|
|
|
|
public void onClick(View v, int position, @NonNull FastAdapter<IssuesAdapter> fastAdapter, IssuesAdapter item) {
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
Context context = v.getContext();
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
Intent intent = new Intent(context, IssueDetailActivity.class);
|
|
|
|
intent.putExtra("issueNumber", item.getIssueNumber());
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
TinyDB tinyDb = new TinyDB(context);
|
|
|
|
tinyDb.putString("issueNumber", String.valueOf(item.getIssueNumber()));
|
|
|
|
tinyDb.putString("issueType", "issue");
|
|
|
|
context.startActivity(intent);
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
}
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-04-14 22:55:04 +02:00
|
|
|
}
|
2019-06-03 23:25:05 +02:00
|
|
|
|
|
|
|
}
|