package com.alorma.github.ui.adapter.detail.repo; import android.content.Context; import android.support.v7.widget.PopupMenu; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.MenuItem; 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.dto.response.Content; import com.alorma.github.sdk.bean.dto.response.ContentType; import com.alorma.github.sdk.bean.info.RepoInfo; import com.alorma.github.ui.adapter.base.RecyclerArrayAdapter; import com.alorma.github.utils.AttributesUtils; import com.mikepenz.iconics.IconicsDrawable; import com.mikepenz.octicons_typeface_library.Octicons; public class RepoSourceAdapter extends RecyclerArrayAdapter<Content, RepoSourceAdapter.ViewHolder> { private final RepoInfo repoInfo; private SourceAdapterListener sourceAdapterListener; private Context context; public RepoSourceAdapter(Context context, LayoutInflater inflater, RepoInfo repoInfo) { super(inflater); this.context = context; this.repoInfo = repoInfo; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { return new ViewHolder(getInflater().inflate(R.layout.row_content, parent, false)); } @Override protected void onBindViewHolder(ViewHolder holder, Content content) { holder.textName.setText(content.name); IconicsDrawable iconDrawable = null; if (ContentType.dir.equals(content.type)) { iconDrawable = new IconicsDrawable(holder.itemView.getContext(), Octicons.Icon.oct_file_directory); } else if (ContentType.symlink.equals(content.type)) { iconDrawable = new IconicsDrawable(holder.itemView.getContext(), Octicons.Icon.oct_file_symlink_directory); } else if (ContentType.file.equals(content.type)) { iconDrawable = new IconicsDrawable(holder.itemView.getContext(), Octicons.Icon.oct_file_text); } if (iconDrawable != null) { iconDrawable.color(AttributesUtils.getAccentColor(context)); holder.image.setImageDrawable(iconDrawable); } } public void setSourceAdapterListener(SourceAdapterListener sourceAdapterListener) { this.sourceAdapterListener = sourceAdapterListener; } public interface SourceAdapterListener { void onContentClick(Content content); void onContentMenuAction(Content content, MenuItem menuItem); } public class ViewHolder extends RecyclerView.ViewHolder implements PopupMenu.OnMenuItemClickListener { private final TextView textName; private final ImageView image; private final ImageView overflow; public ViewHolder(View itemView) { super(itemView); textName = (TextView) itemView.findViewById(R.id.name); image = (ImageView) itemView.findViewById(R.id.icon); overflow = (ImageView) itemView.findViewById(R.id.overflow); itemView.setOnClickListener(v -> { if (sourceAdapterListener != null) { sourceAdapterListener.onContentClick(getItem(getAdapterPosition())); } }); overflow.setOnClickListener(v -> { PopupMenu popupMenu = new PopupMenu(v.getContext(), v); popupMenu.inflate(R.menu.repo_content_item); /* if (repoInfo != null && repoInfo.permissions != null && repoInfo.permissions.push) { MenuItem deleteItem = popupMenu.getMenu().findItem(R.id.action_content_delete); if (deleteItem != null) { deleteItem.setEnabled(true); } } */ popupMenu.setOnMenuItemClickListener(ViewHolder.this); popupMenu.show(); }); } @Override public boolean onMenuItemClick(MenuItem item) { if (sourceAdapterListener != null) { sourceAdapterListener.onContentMenuAction(getItem(getAdapterPosition()), item); } return false; } } }