Refactor commits (#452)
code reformat check for same gitea version change link to button `view in browser` add search by commit hash Fix crash for custom attr caused by context and clean up Refactor commits, remove fastadapter Co-authored-by: 6543 <6543@noreply.gitea.io> Co-authored-by: 6543 <6543@obermui.de> Reviewed-on: https://gitea.com/gitnex/GitNex/pulls/452 Reviewed-by: 6543 <6543@noreply.gitea.io>
This commit is contained in:
@@ -1,18 +1,21 @@
|
||||
package org.mian.gitnex.adapters;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.text.Html;
|
||||
import android.text.method.LinkMovementMethod;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Button;
|
||||
import android.widget.TextView;
|
||||
import androidx.annotation.NonNull;
|
||||
import com.mikepenz.fastadapter.FastAdapter;
|
||||
import com.mikepenz.fastadapter.items.AbstractItem;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import org.mian.gitnex.R;
|
||||
import org.mian.gitnex.helpers.ClickListener;
|
||||
import org.mian.gitnex.helpers.TimeHelper;
|
||||
import org.mian.gitnex.models.Commits;
|
||||
import org.mian.gitnex.util.TinyDB;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
@@ -20,142 +23,152 @@ import java.util.Locale;
|
||||
* Author M M Arif
|
||||
*/
|
||||
|
||||
public class CommitsAdapter extends AbstractItem<CommitsAdapter, CommitsAdapter.ViewHolder> {
|
||||
public class CommitsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
|
||||
|
||||
final private Context ctx;
|
||||
private String commitTitle;
|
||||
private String commitHtmlUrl;
|
||||
private String commitCommitter;
|
||||
private Date commitDate;
|
||||
private Context ctx;
|
||||
private final int TYPE_LOAD = 0;
|
||||
private List<Commits> commitsList;
|
||||
private CommitsAdapter.OnLoadMoreListener loadMoreListener;
|
||||
private boolean isLoading = false;
|
||||
private boolean isMoreDataAvailable = true;
|
||||
|
||||
private boolean isSelectable = true;
|
||||
public CommitsAdapter(Context ctx, List<Commits> commitsListMain) {
|
||||
|
||||
public CommitsAdapter(Context ctx) {
|
||||
this.ctx = ctx;
|
||||
}
|
||||
this.commitsList = commitsListMain;
|
||||
|
||||
public CommitsAdapter withNewItems(String commitTitle, String commitHtmlUrl, String commitCommitter, Date commitDate) {
|
||||
|
||||
this.setNewItems(commitTitle, commitHtmlUrl, commitCommitter, commitDate);
|
||||
return this;
|
||||
|
||||
}
|
||||
|
||||
private void setNewItems(String commitTitle, String commitHtmlUrl, String commitCommitter, Date commitDate) {
|
||||
|
||||
this.commitTitle = commitTitle;
|
||||
this.commitHtmlUrl = commitHtmlUrl;
|
||||
this.commitCommitter = commitCommitter;
|
||||
this.commitDate = commitDate;
|
||||
|
||||
}
|
||||
|
||||
public String getCommitTitle() {
|
||||
return commitTitle;
|
||||
}
|
||||
|
||||
private String getCommitHtmlUrl() {
|
||||
return commitHtmlUrl;
|
||||
}
|
||||
|
||||
private String getcommitCommitter() {
|
||||
return commitCommitter;
|
||||
}
|
||||
|
||||
private Date getcommitDate() {
|
||||
return commitDate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnabled() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommitsAdapter withEnabled(boolean enabled) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSelectable() {
|
||||
return isSelectable;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommitsAdapter withSelectable(boolean selectable) {
|
||||
|
||||
this.isSelectable = selectable;
|
||||
return this;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getType() {
|
||||
return R.id.commitList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getLayoutRes() {
|
||||
return R.layout.list_commits;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public CommitsAdapter.ViewHolder getViewHolder(@NonNull View v) {
|
||||
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||
|
||||
return new CommitsAdapter.ViewHolder(v);
|
||||
LayoutInflater inflater = LayoutInflater.from(ctx);
|
||||
|
||||
if(viewType == TYPE_LOAD) {
|
||||
return new CommitsHolder(inflater.inflate(R.layout.list_commits, parent, false));
|
||||
}
|
||||
else {
|
||||
return new LoadHolder(inflater.inflate(R.layout.row_load, parent, false));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public class ViewHolder extends FastAdapter.ViewHolder<CommitsAdapter> {
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
|
||||
|
||||
final TinyDB tinyDb = new TinyDB(ctx);
|
||||
final String locale = tinyDb.getString("locale");
|
||||
final String timeFormat = tinyDb.getString("dateFormat");
|
||||
if(position >= getItemCount() - 1 && isMoreDataAvailable && !isLoading && loadMoreListener != null) {
|
||||
|
||||
TextView commitTitleVw;
|
||||
TextView commitCommitterVw;
|
||||
TextView commitDateVw;
|
||||
TextView commitHtmlUrlVw;
|
||||
isLoading = true;
|
||||
loadMoreListener.onLoadMore();
|
||||
|
||||
public ViewHolder(View itemView) {
|
||||
}
|
||||
|
||||
if(getItemViewType(position) == TYPE_LOAD) {
|
||||
|
||||
((CommitsHolder) holder).bindData(commitsList.get(position));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemViewType(int position) {
|
||||
|
||||
if(commitsList.get(position).getSha() != null) {
|
||||
return TYPE_LOAD;
|
||||
}
|
||||
else {
|
||||
return 1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
|
||||
return commitsList.size();
|
||||
|
||||
}
|
||||
|
||||
class CommitsHolder extends RecyclerView.ViewHolder {
|
||||
|
||||
TextView commitTitle;
|
||||
TextView commitCommitter;
|
||||
TextView commitDate;
|
||||
Button commitHtmlUrl;
|
||||
|
||||
CommitsHolder(View itemView) {
|
||||
|
||||
super(itemView);
|
||||
|
||||
commitTitleVw = itemView.findViewById(R.id.commitTitleVw);
|
||||
commitCommitterVw = itemView.findViewById(R.id.commitCommitterVw);
|
||||
commitDateVw = itemView.findViewById(R.id.commitDateVw);
|
||||
commitHtmlUrlVw = itemView.findViewById(R.id.commitHtmlUrlVw);
|
||||
commitTitle = itemView.findViewById(R.id.commitTitleVw);
|
||||
commitCommitter = itemView.findViewById(R.id.commitCommitterVw);
|
||||
commitDate = itemView.findViewById(R.id.commitDateVw);
|
||||
commitHtmlUrl = itemView.findViewById(R.id.commitHtmlUrlVw);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void bindView(CommitsAdapter item, @NonNull List<Object> payloads) {
|
||||
@SuppressLint("SetTextI18n")
|
||||
void bindData(Commits commitsModel) {
|
||||
|
||||
commitTitleVw.setText(item.getCommitTitle());
|
||||
commitCommitterVw.setText(ctx.getString(R.string.commitCommittedBy, item.getcommitCommitter()));
|
||||
final TinyDB tinyDb = new TinyDB(ctx);
|
||||
final String locale = tinyDb.getString("locale");
|
||||
final String timeFormat = tinyDb.getString("dateFormat");
|
||||
|
||||
commitDateVw.setText(TimeHelper.formatTime(item.getcommitDate(), new Locale(locale), timeFormat, ctx));
|
||||
commitTitle.setText(commitsModel.getCommit().getMessage());
|
||||
commitCommitter.setText(ctx.getString(R.string.commitCommittedBy, commitsModel.getCommit().getCommitter().getName()));
|
||||
|
||||
commitDate.setText(TimeHelper.formatTime(commitsModel.getCommit().getCommitter().getDate(), new Locale(locale), timeFormat, ctx));
|
||||
|
||||
if(timeFormat.equals("pretty")) {
|
||||
commitDateVw.setOnClickListener(new ClickListener(TimeHelper.customDateFormatForToastDateFormat(item.getcommitDate()), ctx));
|
||||
commitDate.setOnClickListener(new ClickListener(TimeHelper.customDateFormatForToastDateFormat(commitsModel.getCommit().getCommitter().getDate()), ctx));
|
||||
}
|
||||
|
||||
commitHtmlUrlVw.setText(Html.fromHtml("<a href='" + item.getCommitHtmlUrl() + "'>" + ctx.getResources().getString(R.string.viewInBrowser) + "</a> "));
|
||||
commitHtmlUrlVw.setMovementMethod(LinkMovementMethod.getInstance());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unbindView(@NonNull CommitsAdapter item) {
|
||||
|
||||
commitTitleVw.setText(null);
|
||||
commitCommitterVw.setText(null);
|
||||
commitDateVw.setText(null);
|
||||
commitHtmlUrlVw.setText(null);
|
||||
commitHtmlUrl.setOnClickListener(v -> ctx.startActivity(new Intent(Intent.ACTION_VIEW).setData(Uri.parse(commitsModel.getHtml_url()))));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static class LoadHolder extends RecyclerView.ViewHolder {
|
||||
|
||||
LoadHolder(View itemView) {
|
||||
|
||||
super(itemView);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void setMoreDataAvailable(boolean moreDataAvailable) {
|
||||
|
||||
isMoreDataAvailable = moreDataAvailable;
|
||||
|
||||
}
|
||||
|
||||
public void notifyDataChanged() {
|
||||
|
||||
notifyDataSetChanged();
|
||||
isLoading = false;
|
||||
|
||||
}
|
||||
|
||||
public interface OnLoadMoreListener {
|
||||
|
||||
void onLoadMore();
|
||||
|
||||
}
|
||||
|
||||
public void setLoadMoreListener(CommitsAdapter.OnLoadMoreListener loadMoreListener) {
|
||||
|
||||
this.loadMoreListener = loadMoreListener;
|
||||
|
||||
}
|
||||
|
||||
public void updateList(List<Commits> list) {
|
||||
|
||||
commitsList = list;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user