package com.quran.labs.androidquran.ui.translation; import android.content.Context; import android.support.annotation.NonNull; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.text.TextUtils; import android.util.AttributeSet; import android.view.ViewGroup; import com.quran.labs.androidquran.common.QuranAyahInfo; import com.quran.labs.androidquran.util.QuranSettings; import java.util.ArrayList; import java.util.List; public class TranslationView extends ViewGroup { private final RecyclerView translationRecycler; private final TranslationAdapter translationAdapter; public TranslationView(Context context) { this(context, null); } public TranslationView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public TranslationView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); translationRecycler = new RecyclerView(context); translationRecycler.setLayoutManager(new LinearLayoutManager(context)); translationRecycler.setItemAnimator(new DefaultItemAnimator()); translationAdapter = new TranslationAdapter(context, translationRecycler); translationRecycler.setAdapter(translationAdapter); addView(translationRecycler, LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); translationRecycler.measure(widthMeasureSpec, heightMeasureSpec); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { int width = translationRecycler.getMeasuredWidth(); int x = ((r - l) - width) / 2; translationRecycler.layout(x, 0, x + width, getMeasuredHeight()); } public void setVerses(@NonNull String[] translations, @NonNull List<QuranAyahInfo> verses) { List<TranslationViewRow> rows = new ArrayList<>(); int currentSura = -1; boolean wantTranslationHeaders = translations.length > 1; for (int i = 0, size = verses.size(); i < size; i++) { QuranAyahInfo verse = verses.get(i); int sura = verse.sura; if (sura != currentSura) { rows.add(new TranslationViewRow(TranslationViewRow.Type.SURA_HEADER, verse)); currentSura = sura; } if (verse.ayah == 1 && sura != 1 && sura != 9) { rows.add(new TranslationViewRow(TranslationViewRow.Type.BASMALLAH, verse)); } rows.add(new TranslationViewRow(TranslationViewRow.Type.VERSE_NUMBER, verse)); if (verse.arabicText != null) { rows.add(new TranslationViewRow(TranslationViewRow.Type.QURAN_TEXT, verse)); } // added this to guard against a crash that happened when verse.texts was empty int verseTexts = verse.texts.size(); for (int j = 0; j < translations.length; j++) { String text = verseTexts > j ? verse.texts.get(j) : ""; if (!TextUtils.isEmpty(text)) { if (wantTranslationHeaders) { rows.add( new TranslationViewRow(TranslationViewRow.Type.TRANSLATOR, verse, translations[j])); } rows.add(new TranslationViewRow(TranslationViewRow.Type.TRANSLATION_TEXT, verse, text)); } } rows.add(new TranslationViewRow(TranslationViewRow.Type.SPACER, verse)); } translationAdapter.setData(rows); translationAdapter.notifyDataSetChanged(); } public void refresh(@NonNull QuranSettings quranSettings) { translationAdapter.refresh(quranSettings); } public void setTranslationClickedListener(OnClickListener listener) { translationAdapter.setOnTranslationClickedListener(listener); } public void highlightAyah(int ayahId) { translationAdapter.setHighlightedAyah(ayahId); } public void unhighlightAyat() { translationAdapter.unhighlight(); } }