package com.fastaccess.ui.adapter.viewholder;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.transition.ChangeBounds;
import android.support.transition.TransitionManager;
import android.view.View;
import android.view.ViewGroup;
import com.fastaccess.R;
import com.fastaccess.data.dao.CommitFileModel;
import com.fastaccess.helper.ViewHelper;
import com.fastaccess.ui.adapter.callback.OnToggleView;
import com.fastaccess.ui.widgets.DiffLineSpan;
import com.fastaccess.ui.widgets.FontTextView;
import com.fastaccess.ui.widgets.SpannableBuilder;
import com.fastaccess.ui.widgets.recyclerview.BaseRecyclerAdapter;
import com.fastaccess.ui.widgets.recyclerview.BaseViewHolder;
import butterknife.BindString;
import butterknife.BindView;
/**
* Created by Kosh on 15 Feb 2017, 10:29 PM
*/
public class CommitFilesViewHolder extends BaseViewHolder<CommitFileModel> {
@BindView(R.id.name) FontTextView name;
@BindView(R.id.patch) FontTextView patch;
@BindView(R.id.changes) FontTextView changes;
@BindView(R.id.addition) FontTextView addition;
@BindView(R.id.deletion) FontTextView deletion;
@BindView(R.id.status) FontTextView status;
@BindView(R.id.toggle) View toggle;
@BindView(R.id.open) View open;
@BindString(R.string.changes) String changesText;
@BindString(R.string.addition) String additionText;
@BindString(R.string.deletion) String deletionText;
@BindString(R.string.status) String statusText;
private final int patchAdditionColor;
private final int patchDeletionColor;
private final int patchRefColor;
private String pathText;
private OnToggleView onToggleView;
private ViewGroup viewGroup;
@Override public void onClick(View v) {
if (v.getId() != R.id.open) {
int position = getAdapterPosition();
onToggleView.onToggle(position, !onToggleView.isCollapsed(position));
onToggle(onToggleView.isCollapsed(position), true);
} else {
super.onClick(v);
}
}
private CommitFilesViewHolder(@NonNull View itemView, @NonNull ViewGroup viewGroup, @Nullable BaseRecyclerAdapter adapter,
@NonNull OnToggleView onToggleView) {
super(itemView, adapter);
this.viewGroup = viewGroup;
open.setOnClickListener(this);
this.onToggleView = onToggleView;
patchAdditionColor = ViewHelper.getPatchAdditionColor(itemView.getContext());
patchDeletionColor = ViewHelper.getPatchDeletionColor(itemView.getContext());
patchRefColor = ViewHelper.getPatchRefColor(itemView.getContext());
}
public static CommitFilesViewHolder newInstance(ViewGroup viewGroup, BaseRecyclerAdapter adapter,
@NonNull OnToggleView onToggleView) {
return new CommitFilesViewHolder(getView(viewGroup, R.layout.commit_file_row_item), viewGroup, adapter, onToggleView);
}
@Override public void bind(@NonNull CommitFileModel commit) {
this.pathText = commit.getPatch();
name.setText(commit.getFilename());
changes.setText(SpannableBuilder.builder()
.append(changesText)
.append("\n")
.bold(String.valueOf(commit.getChanges())));
addition.setText(SpannableBuilder.builder()
.append(additionText)
.append("\n")
.bold(String.valueOf(commit.getAdditions())));
deletion.setText(SpannableBuilder.builder()
.append(deletionText)
.append("\n")
.bold(String.valueOf(commit.getDeletions())));
status.setText(SpannableBuilder.builder()
.append(statusText)
.append("\n")
.bold(String.valueOf(commit.getStatus())));
onToggle(onToggleView.isCollapsed(getAdapterPosition()), false);
}
private void setPatchText(@NonNull String text) {
patch.setText(DiffLineSpan.getSpannable(text, patchAdditionColor, patchDeletionColor, patchRefColor));
}
private void onToggle(boolean expanded, boolean animate) {
if (animate) {
TransitionManager.beginDelayedTransition(viewGroup, new ChangeBounds());
}
if (!expanded) {
patch.setText("");
name.setMaxLines(2);
toggle.setRotation(0.0f);
} else {
name.setMaxLines(5);
setPatchText(pathText);
toggle.setRotation(180f);
}
}
}