package com.alorma.github.ui.adapter; import android.content.Context; import android.content.Intent; import android.support.v7.widget.RecyclerView; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import com.alorma.github.R; import com.alorma.github.sdk.bean.info.RepoInfo; import com.alorma.github.ui.activity.ReleaseDetailActivity; import com.alorma.github.ui.adapter.base.RecyclerArrayAdapter; import com.mikepenz.iconics.IconicsDrawable; import com.mikepenz.octicons_typeface_library.Octicons; import core.repositories.releases.Release; import core.repositories.releases.tags.Tag; public class TagsAdapter extends RecyclerArrayAdapter<Tag, TagsAdapter.Holder> { private TagsCallback tagsCallback; private RepoInfo repoInfo; public TagsAdapter(LayoutInflater inflater, RepoInfo repoInfo) { super(inflater); this.repoInfo = repoInfo; } @Override protected int lazyLoadCount() { return 5; } @Override public Holder onCreateViewHolder(ViewGroup parent, int viewType) { return new Holder(getInflater().inflate(R.layout.row_repo_tag, parent, false)); } @Override protected void onBindViewHolder(Holder holder, Tag tag) { Release release = tag.release; if (release != null) { fillRelease(holder, release); } else { fillTag(holder, tag); } } private void fillTag(Holder holder, Tag tag) { holder.name.setText(tag.getName()); IconicsDrawable tagDrawable = new IconicsDrawable(holder.itemView.getContext()).icon(Octicons.Icon.oct_tag).colorRes(R.color.md_grey_500).sizeDp(40); holder.imageState.setImageDrawable(tagDrawable); int size = 2; String numFilesString = holder.files.getContext().getResources().getQuantityString(R.plurals.repo_release_num_files, size, size); holder.files.setText(numFilesString); } private void fillRelease(Holder holder, Release release) { String name = release.getName(); if (TextUtils.isEmpty(name)) { name = release.getTagName(); } holder.name.setText(name); IconicsDrawable imageDrawable = new IconicsDrawable(holder.itemView.getContext()).icon(Octicons.Icon.oct_bookmark).sizeDp(40); if (release.isPreRelease()) { imageDrawable.colorRes(R.color.release_prerelease); } else { imageDrawable.colorRes(R.color.release); } holder.imageState.setImageDrawable(imageDrawable); if (release.getAssets() != null) { int size = release.getAssets().size(); if (!TextUtils.isEmpty(release.getZipballUrl())) { size = size + 1; } if (!TextUtils.isEmpty(release.getTarballUrl())) { size = size + 1; } String numFilesString = holder.files.getContext().getResources().getQuantityString(R.plurals.repo_release_num_files, size, size); holder.files.setText(numFilesString); } } public void setTagsCallback(TagsCallback tagsCallback) { this.tagsCallback = tagsCallback; } public class Holder extends RecyclerView.ViewHolder { private final ImageView imageState; private final TextView name; private final TextView files; public Holder(View itemView) { super(itemView); imageState = (ImageView) itemView.findViewById(R.id.state); name = (TextView) itemView.findViewById(R.id.tagName); files = (TextView) itemView.findViewById(R.id.tagFiles); itemView.setOnClickListener(view -> { Tag tag = getItem(getAdapterPosition()); Release release = tag.release; if (release != null) { tagsCallback.onReleaseSelected(release); } else { tagsCallback.onTagSelected(tag); } }); } } public interface TagsCallback { void onTagSelected(Tag tag); void onReleaseSelected(Release release); } }