package com.fastaccess.ui.adapter.viewholder; import android.support.annotation.NonNull; import android.support.v4.content.ContextCompat; import android.view.View; import android.view.ViewGroup; import com.annimon.stream.Stream; import com.fastaccess.R; import com.fastaccess.data.dao.PullRequestStatusModel; import com.fastaccess.data.dao.types.StatusStateType; import com.fastaccess.helper.InputHelper; import com.fastaccess.ui.widgets.FontTextView; import com.fastaccess.ui.widgets.ForegroundImageView; import com.fastaccess.ui.widgets.SpannableBuilder; import com.fastaccess.ui.widgets.recyclerview.BaseViewHolder; import butterknife.BindColor; import butterknife.BindView; /** * Created by Kosh on 10 Apr 2017, 3:40 AM */ public class PullStatusViewHolder extends BaseViewHolder<PullRequestStatusModel> { @BindView(R.id.stateImage) ForegroundImageView stateImage; @BindView(R.id.status) FontTextView status; @BindView(R.id.statuses) FontTextView statuses; @BindColor(R.color.material_green_700) int green; @BindColor(R.color.material_red_700) int red; @BindColor(R.color.material_indigo_700) int indigo; private PullStatusViewHolder(@NonNull View itemView) { super(itemView); itemView.setOnClickListener(null); itemView.setOnLongClickListener(null); } public static PullStatusViewHolder newInstance(@NonNull ViewGroup parent) { return new PullStatusViewHolder(getView(parent, R.layout.pull_status_row_item)); } @Override public void bind(@NonNull PullRequestStatusModel pullRequestStatusModel) { if (pullRequestStatusModel.getState() != null) { StatusStateType stateType = pullRequestStatusModel.getState(); stateImage.setImageResource(stateType.getDrawableRes()); if (stateType == StatusStateType.failure) { stateImage.tintDrawableColor(red); status.setText(R.string.checks_failed); } else if (stateType == StatusStateType.pending) { if (pullRequestStatusModel.isMergable()) { stateImage.setImageResource(R.drawable.ic_check_small); stateImage.tintDrawableColor(green); status.setText(R.string.commit_can_be_merged); } else { stateImage.setImageResource(stateType.getDrawableRes()); stateImage.tintDrawableColor(indigo); status.setText(R.string.checks_pending); } } else { stateImage.tintDrawableColor(green); if (pullRequestStatusModel.isMergable()) { status.setText(R.string.commit_can_be_merged); } else { status.setText(R.string.checks_passed); } } } if (pullRequestStatusModel.getStatuses() != null && !pullRequestStatusModel.getStatuses().isEmpty()) { Stream.of(pullRequestStatusModel.getStatuses()) .filter(statusesModel -> statusesModel.getState() != null) .forEach(statusesModel -> statuses.setText(SpannableBuilder.builder() .append(ContextCompat.getDrawable(statuses.getContext(), statusesModel.getState().getDrawableRes())) .append(" ") .append(statusesModel.getDescription()) .append("\n"))); if (!InputHelper.isEmpty(statuses)) { statuses.setVisibility(View.VISIBLE); } else { statuses.setVisibility(View.GONE); } } else { statuses.setVisibility(View.GONE); } } }