package com.door43.translationstudio.newui.publish;
import android.app.Activity;
import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.door43.translationstudio.R;
import com.door43.translationstudio.core.TranslationFormat;
import com.door43.translationstudio.core.Typography;
import com.door43.translationstudio.rendering.Clickables;
import com.door43.translationstudio.rendering.DefaultRenderer;
import com.door43.translationstudio.rendering.RenderingGroup;
import com.door43.widget.ViewUtil;
/**
* Created by joel on 9/20/2015.
*/
public class ValidationAdapter extends RecyclerView.Adapter<ValidationAdapter.ViewHolder> {
private final Activity mContext;
private ValidationItem[] mValidations;
private CharSequence[] renderedText;
private OnClickListener mListener;
public ValidationAdapter(Activity context) {
mContext = context;
mValidations = new ValidationItem[0];
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.fragment_publish_validation_list_item, parent, false);
ViewHolder vh = new ViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
if(position == getItemCount() - 1) {
holder.mNextLayout.setVisibility(View.VISIBLE);
holder.mContainer.setVisibility(View.GONE);
// next button
holder.mNextButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mListener != null) {
mListener.onClickNext();
}
}
});
} else {
holder.mNextLayout.setVisibility(View.GONE);
holder.mContainer.setVisibility(View.VISIBLE);
// validation item
final ValidationItem item = mValidations[position];
// margin
ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) holder.mContainer.getLayoutParams();
int stackedCardMargin = mContext.getResources().getDimensionPixelSize(R.dimen.stacked_card_margin);
if (item.isFrame()) {
p.setMargins(stackedCardMargin, 0, 0, 0);
} else {
p.setMargins(0, 0, 0, 0);
}
holder.mContainer.requestLayout();
// title
holder.mTitle.setText(item.getTitle());
Typography.format(mContext, holder.mTitle, item.getTitleLanguage().getId(), item.getTitleLanguage().getDirection());
// icon
if (item.isValid()) {
if(item.isRange()) {
holder.mIcon.setBackgroundResource(R.drawable.ic_done_all_black_24dp);
} else {
holder.mIcon.setBackgroundResource(R.drawable.ic_done_black_24dp);
}
ViewUtil.tintViewDrawable(holder.mIcon, mContext.getResources().getColor(R.color.green));
} else {
holder.mIcon.setBackgroundResource(R.drawable.ic_report_black_24dp);
ViewUtil.tintViewDrawable(holder.mIcon, mContext.getResources().getColor(R.color.warning));
}
// stack
if (item.isRange()) {
holder.mStackedCard.setVisibility(View.VISIBLE);
} else {
holder.mStackedCard.setVisibility(View.GONE);
}
// body
if (item.isFrame() && !item.isValid()) {
holder.mIcon.setVisibility(View.GONE);
holder.mReviewButton.setVisibility(View.VISIBLE);
holder.mBody.setVisibility(View.VISIBLE);
if(renderedText[position] == null) {
RenderingGroup renderingGroup = new RenderingGroup();
TranslationFormat format = item.getBodyFormat();
if(Clickables.isClickableFormat(format)) {
Clickables.setupRenderingGroup(format, renderingGroup, null, null, true);
} else {
renderingGroup.addEngine(new DefaultRenderer(null));
}
renderingGroup.init(item.getBody());
renderedText[position] = renderingGroup.start();
}
holder.mBody.setText(renderedText[position]);
Typography.formatSub(mContext, holder.mBody, item.getBodyLanguage().getId(), item.getBodyLanguage().getDirection());
} else {
holder.mBody.setVisibility(View.GONE);
holder.mReviewButton.setVisibility(View.GONE);
holder.mIcon.setVisibility(View.VISIBLE);
}
holder.mReviewButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mListener != null) {
mListener.onClickReview(item.getTargetTranslationId(), item.getChapterId(), item.getFrameId());
}
}
});
}
}
@Override
public int getItemCount() {
if(mValidations != null && mValidations.length > 0) {
// leave room for the next button
return mValidations.length + 1;
} else {
return 0;
}
}
public void setValidations(ValidationItem[] validations) {
mValidations = validations;
renderedText = new CharSequence[validations.length];
notifyDataSetChanged();
}
public void setOnClickListener(OnClickListener listener) {
mListener = listener;
}
public static class ViewHolder extends RecyclerView.ViewHolder {
private final CardView mStackedCard;
private final CardView mCard;
private final TextView mTitle;
private final Button mReviewButton;
private final ImageView mIcon;
private final TextView mBody;
private final FrameLayout mContainer;
private final LinearLayout mNextLayout;
private final Button mNextButton;
public ViewHolder(View v) {
super(v);
mStackedCard = (CardView)v.findViewById(R.id.stacked_card);
mCard = (CardView)v.findViewById(R.id.card);
mTitle = (TextView)v.findViewById(R.id.title);
mReviewButton = (Button)v.findViewById(R.id.review_button);
mIcon = (ImageView)v.findViewById(R.id.icon);
mBody = (TextView)v.findViewById(R.id.body);
mContainer = (FrameLayout)v.findViewById(R.id.card_container);
mNextLayout = (LinearLayout)v.findViewById(R.id.next_layout);
mNextButton = (Button)v.findViewById(R.id.next_button);
}
}
public interface OnClickListener {
void onClickReview(String targetTranslationId, String chapterId, String frameId);
void onClickNext();
}
}