package com.alorma.github.ui.fragment.repos;
import android.content.Intent;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.alorma.github.R;
import com.alorma.github.sdk.bean.info.RepoInfo;
import com.alorma.github.ui.activity.repo.RepoDetailActivity;
import com.alorma.github.ui.adapter.base.RecyclerArrayAdapter;
import com.crashlytics.android.Crashlytics;
import com.mikepenz.iconics.IconicsDrawable;
import com.mikepenz.octicons_typeface_library.Octicons;
import core.repositories.Permissions;
import core.repositories.Repo;
import io.fabric.sdk.android.Fabric;
import java.text.DecimalFormat;
public class ReposAdapter extends RecyclerArrayAdapter<Repo, ReposAdapter.ViewHolder> {
private boolean showOwnerName;
private boolean showOwnerNameExtra = true;
public ReposAdapter(LayoutInflater inflater) {
super(inflater);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new ViewHolder(getInflater().inflate(R.layout.row_repo, parent, false));
}
@Override
protected void onBindViewHolder(ViewHolder holder, Repo repo) {
try {
if (repo.getOwner() != null) {
holder.textTitle.setText(showOwnerName ? repo.getOwner().getLogin() : repo.name);
}
} catch (NullPointerException e) {
if (Fabric.isInitialized()) {
Crashlytics.logException(e);
}
}
if (showOwnerNameExtra && repo.getOwner() != null) {
holder.textOwnerName.setText(repo.getOwner().getLogin());
} else {
holder.textOwnerName.setText("");
}
applyIcon(holder.textStarts, Octicons.Icon.oct_star);
holder.textStarts.setText(new DecimalFormat().format(repo.getStargazersCount()));
applyIcon(holder.textForks, Octicons.Icon.oct_repo_forked);
holder.textForks.setText(new DecimalFormat().format(repo.forks_count));
if (repo.description != null) {
holder.textDescription.setVisibility(View.VISIBLE);
holder.textDescription.setText(repo.description);
} else {
holder.textDescription.setVisibility(View.GONE);
}
if (repo.isPrivateRepo()) {
holder.repoPrivate.setVisibility(View.VISIBLE);
} else {
holder.repoPrivate.setVisibility(View.GONE);
}
}
public void showOwnerName(boolean showOwnerName) {
this.showOwnerName = showOwnerName;
notifyDataSetChanged();
}
public void showOwnerNameExtra(boolean showOwnerNameExtra) {
this.showOwnerNameExtra = showOwnerNameExtra;
notifyDataSetChanged();
}
private void applyIcon(TextView textView, Octicons.Icon value) {
IconicsDrawable drawableForks = new IconicsDrawable(textView.getContext(), value);
drawableForks.sizeRes(R.dimen.textSizeSmall);
drawableForks.colorRes(R.color.icons);
textView.setCompoundDrawables(null, null, drawableForks, null);
int offset = textView.getResources().getDimensionPixelOffset(R.dimen.textSizeSmall);
textView.setCompoundDrawablePadding(offset);
}
public class ViewHolder extends RecyclerView.ViewHolder {
public TextView textTitle;
public TextView repoPrivate;
public TextView textOwnerName;
public TextView textDescription;
public TextView textForks;
public TextView textStarts;
public ViewHolder(View itemView) {
super(itemView);
textTitle = (TextView) itemView.findViewById(R.id.repoName);
repoPrivate = (TextView) itemView.findViewById(R.id.repoPrivate);
textOwnerName = (TextView) itemView.findViewById(R.id.textOwnerName);
textDescription = (TextView) itemView.findViewById(R.id.descriptionText);
textStarts = (TextView) itemView.findViewById(R.id.textStarts);
textForks = (TextView) itemView.findViewById(R.id.textForks);
itemView.setOnClickListener(v -> {
Repo item = getItem(getAdapterPosition());
if (item != null) {
RepoInfo repoInfo = new RepoInfo();
repoInfo.owner = item.owner.getLogin();
repoInfo.name = item.name;
Permissions permissions = new Permissions();
permissions.pull = item.permissions.pull;
permissions.push = item.permissions.push;
permissions.admin = item.permissions.admin;
repoInfo.permissions = permissions;
Intent intent = RepoDetailActivity.createLauncherIntent(v.getContext(), repoInfo);
v.getContext().startActivity(intent);
}
});
}
}
}