package com.quran.labs.androidquran.ui.fragment;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.quran.labs.androidquran.common.QuranAyahInfo;
import com.quran.labs.androidquran.module.fragment.QuranPageModule;
import com.quran.labs.androidquran.presenter.quran.ayahtracker.AyahTrackerItem;
import com.quran.labs.androidquran.presenter.quran.ayahtracker.AyahTrackerPresenter;
import com.quran.labs.androidquran.presenter.quran.ayahtracker.AyahTranslationTrackerItem;
import com.quran.labs.androidquran.presenter.translation.TranslationPresenter;
import com.quran.labs.androidquran.ui.PagerActivity;
import com.quran.labs.androidquran.ui.helpers.AyahTracker;
import com.quran.labs.androidquran.ui.helpers.QuranPage;
import com.quran.labs.androidquran.ui.translation.TranslationView;
import com.quran.labs.androidquran.util.QuranSettings;
import com.quran.labs.androidquran.widgets.QuranTranslationPageLayout;
import java.util.List;
import javax.inject.Inject;
public class TranslationFragment extends Fragment implements
AyahTrackerPresenter.AyahInteractionHandler, QuranPage, TranslationPresenter.TranslationScreen {
private static final String PAGE_NUMBER_EXTRA = "pageNumber";
private static final String SI_PAGE_NUMBER = "SI_PAGE_NUMBER";
private static final String SI_HIGHLIGHTED_AYAH = "SI_HIGHLIGHTED_AYAH";
private int pageNumber;
private int highlightedAyah;
private TranslationView translationView;
private QuranTranslationPageLayout mainView;
private AyahTrackerItem[] ayahTrackerItems;
@Inject QuranSettings quranSettings;
@Inject TranslationPresenter presenter;
@Inject AyahTrackerPresenter ayahTrackerPresenter;
public static TranslationFragment newInstance(int page) {
final TranslationFragment f = new TranslationFragment();
final Bundle args = new Bundle();
args.putInt(PAGE_NUMBER_EXTRA, page);
f.setArguments(args);
return f;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
int page = savedInstanceState.getInt(SI_PAGE_NUMBER, -1);
if (page == pageNumber) {
int highlightedAyah =
savedInstanceState.getInt(SI_HIGHLIGHTED_AYAH, -1);
if (highlightedAyah > 0) {
this.highlightedAyah = highlightedAyah;
}
}
}
setHasOptionsMenu(true);
}
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
Context context = getActivity();
mainView = new QuranTranslationPageLayout(context);
mainView.setPageController(null, pageNumber);
translationView = mainView.getTranslationView();
translationView.setTranslationClickedListener(v -> {
final Activity activity = getActivity();
if (activity != null && activity instanceof PagerActivity) {
((PagerActivity) getActivity()).toggleActionBar();
}
});
return mainView;
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
pageNumber = getArguments() != null ? getArguments().getInt(PAGE_NUMBER_EXTRA) : -1;
((PagerActivity) getActivity()).getPagerActivityComponent()
.quranPageComponentBuilder()
.withQuranPageModule(new QuranPageModule(pageNumber))
.build()
.inject(this);
}
@Override
public void updateView() {
if (isAdded()) {
mainView.updateView(quranSettings);
refresh();
}
}
@Override
public AyahTracker getAyahTracker() {
return ayahTrackerPresenter;
}
@Override
public AyahTrackerItem[] getAyahTrackerItems() {
if (ayahTrackerItems == null) {
ayahTrackerItems = new AyahTrackerItem[] {
new AyahTranslationTrackerItem(pageNumber, translationView) };
}
return ayahTrackerItems;
}
@Override
public void setVerses(int page,
@NonNull String[] translations,
@NonNull List<QuranAyahInfo> verses) {
translationView.setVerses(translations, verses);
if (highlightedAyah > 0) {
translationView.highlightAyah(highlightedAyah);
}
}
@Override
public void onResume() {
super.onResume();
ayahTrackerPresenter.bind(this);
presenter.bind(this);
updateView();
}
@Override
public void onPause() {
ayahTrackerPresenter.unbind(this);
presenter.unbind(this);
super.onPause();
}
public void refresh() {
presenter.refresh();
}
@Override
public void onSaveInstanceState(Bundle outState) {
if (highlightedAyah > 0) {
outState.putInt(SI_HIGHLIGHTED_AYAH, highlightedAyah);
}
super.onSaveInstanceState(outState);
}
}