package com.door43.translationstudio.newui.draft;
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.TextView;
import com.door43.translationstudio.AppContext;
import com.door43.translationstudio.R;
import com.door43.translationstudio.core.Chapter;
import com.door43.translationstudio.core.Library;
import com.door43.translationstudio.core.SourceLanguage;
import com.door43.translationstudio.core.SourceTranslation;
import com.door43.translationstudio.core.TranslationFormat;
import com.door43.translationstudio.core.Typography;
import com.door43.translationstudio.dialogs.CustomAlertDialog;
import com.door43.translationstudio.rendering.ClickableRenderingEngine;
import com.door43.translationstudio.rendering.Clickables;
import com.door43.translationstudio.rendering.DefaultRenderer;
import com.door43.translationstudio.rendering.RenderingGroup;
import com.door43.translationstudio.spannables.NoteSpan;
import com.door43.translationstudio.spannables.Span;
import com.door43.widget.ViewUtil;
/**
* Created by blm on 1/10/2016.
*/
public class DraftAdapter extends RecyclerView.Adapter<DraftAdapter.ViewHolder> {
private SourceLanguage mSourceLanguage;
private CharSequence[] mRenderedDraftBody;
private final Activity mContext;
private SourceTranslation mDraftTranslation;
private final Library mLibrary;
private Chapter[] mChapters;
private int mLayoutBuildNumber = 0;
public DraftAdapter(Activity context, SourceTranslation draftTranslation) {
mLibrary = AppContext.getLibrary();
mContext = context;
mDraftTranslation = draftTranslation;
mSourceLanguage = mLibrary.getSourceLanguage(mDraftTranslation.projectSlug, mDraftTranslation.sourceLanguageSlug);
mChapters = mLibrary.getChapters(mDraftTranslation);
mRenderedDraftBody = new CharSequence[mChapters.length];
}
/**
* Updates the draft translation displayed
* @param draftTranslation
*/
public void setDraftTranslation(SourceTranslation draftTranslation) {
mDraftTranslation = draftTranslation;
mSourceLanguage = mLibrary.getSourceLanguage(mDraftTranslation.projectSlug, mDraftTranslation.sourceLanguageSlug);
mChapters = mLibrary.getChapters(mDraftTranslation);
mRenderedDraftBody = new CharSequence[mChapters.length];
notifyDataSetChanged();
}
public String getFocusedFrameId(int position) {
return null;
}
public String getFocusedChapterId(int position) {
if(position >= 0 && position < mChapters.length) {
return mChapters[position].getId();
} else {
return null;
}
}
public int getItemPosition(String chapterId, String frameId) {
for(int i = 0; i < mChapters.length; i ++) {
Chapter chapter = mChapters[i];
if(chapter.getId().equals(chapterId)) {
return i;
}
}
return -1;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.fragment_draft_list_item, parent, false);
ViewHolder vh = new ViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
int cardMargin = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin);
int stackedCardMargin = mContext.getResources().getDimensionPixelSize(R.dimen.stacked_card_margin);
CardView.LayoutParams sourceParams = (CardView.LayoutParams)holder.mSourceCard.getLayoutParams();
sourceParams.setMargins(cardMargin, cardMargin, stackedCardMargin, stackedCardMargin);
holder.mSourceCard.setLayoutParams(sourceParams);
((View) holder.mSourceCard.getParent()).requestLayout();
((View) holder.mSourceCard.getParent()).invalidate();
final Chapter chapter = mChapters[position];
// render the draft chapter body
if(mRenderedDraftBody[position] == null) {
String chapterBody = mLibrary.getChapterBody(mDraftTranslation, chapter.getId());
TranslationFormat bodyFormat = mLibrary.getChapterBodyFormat(mDraftTranslation, chapter.getId());
RenderingGroup sourceRendering = new RenderingGroup();
if (Clickables.isClickableFormat(bodyFormat)) {
// TODO: add click listeners
Span.OnClickListener noteClickListener = new Span.OnClickListener() {
@Override
public void onClick(View view, Span span, int start, int end) {
if(span instanceof NoteSpan) {
CustomAlertDialog.Create(mContext)
.setTitle(R.string.title_note)
.setMessage(((NoteSpan)span).getNotes())
.setPositiveButton(R.string.dismiss, null)
.show("note");
}
}
@Override
public void onLongClick(View view, Span span, int start, int end) {
}
};
ClickableRenderingEngine renderer = Clickables.setupRenderingGroup(bodyFormat, sourceRendering, null, noteClickListener, true);
// In read mode (and only in read mode), pull leading major section headings out for
// display above chapter headings.
renderer.setSuppressLeadingMajorSectionHeadings(true);
CharSequence heading = renderer.getLeadingMajorSectionHeading(chapterBody);
holder.mSourceHeading.setText(heading);
holder.mSourceHeading.setVisibility(
heading.length() > 0 ? View.VISIBLE : View.GONE);
} else {
sourceRendering.addEngine(new DefaultRenderer());
}
sourceRendering.init(chapterBody);
mRenderedDraftBody[position] = sourceRendering.start();
}
holder.mSourceBody.setText(mRenderedDraftBody[position]);
ViewUtil.makeLinksClickable(holder.mSourceBody);
String chapterTitle = chapter.title;
if(chapter.title.isEmpty()) {
chapterTitle = mDraftTranslation.getProjectTitle() + " " + Integer.parseInt(chapter.getId());
}
holder.mSourceTitle.setText(chapterTitle);
// set up fonts
if(holder.mLayoutBuildNumber != mLayoutBuildNumber) {
holder.mLayoutBuildNumber = mLayoutBuildNumber;
Typography.formatTitle(mContext, holder.mSourceHeading, mSourceLanguage.getId(), mSourceLanguage.getDirection());
Typography.formatTitle(mContext, holder.mSourceTitle, mSourceLanguage.getId(), mSourceLanguage.getDirection());
Typography.format(mContext, holder.mSourceBody, mSourceLanguage.getId(), mSourceLanguage.getDirection());
}
}
@Override
public int getItemCount() {
return mChapters.length;
}
public void rebuild() {
mLayoutBuildNumber ++;
notifyDataSetChanged();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
private final CardView mSourceCard;
public TextView mSourceHeading;
public TextView mSourceTitle;
public TextView mSourceBody;
public int mLayoutBuildNumber = -1;
public ViewHolder(View v) {
super(v);
mSourceCard = (CardView)v.findViewById(R.id.source_translation_card);
mSourceHeading = (TextView)v.findViewById(R.id.source_translation_heading);
mSourceTitle = (TextView)v.findViewById(R.id.source_translation_title);
mSourceBody = (TextView)v.findViewById(R.id.source_translation_body);
}
}
}