/**
* Copyright (c) 2015 unfoldingWord
* http://creativecommons.org/licenses/MIT/
* See LICENSE file for details.
* Contributors:
* PJ Fechner <pj@actsmedia.com>
*/
package fragments.selection;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;
import org.unfoldingword.mobile.R;
import java.util.ArrayList;
import java.util.List;
import adapters.selectionAdapters.ChaptersAdapter;
import adapters.selectionAdapters.GeneralRowInterface;
import de.greenrobot.event.EventBus;
import eventbusmodels.BiblePagingEvent;
import model.DaoDBHelper;
import model.daoModels.BibleChapter;
import model.daoModels.Book;
/**
* Fragment used for a user to select a BibleChapter from a list
*/
public class ChaptersFragment extends Fragment implements AdapterView.OnItemClickListener {
private ChapterSelectionFragmentListener listener = null;
public void setListener(ChapterSelectionFragmentListener listener) {
this.listener = listener;
}
protected ListView listView = null;
private List<BibleChapter> chapters;
private ChaptersAdapter adapter;
private int selectedIndex = -1;
//region setup
/**
* @param listener Listener for when a chapter is selected
* @return a newly constructed ChaptersFragment
*/
public static ChaptersFragment newInstance(ChapterSelectionFragmentListener listener) {
ChaptersFragment fragment = new ChaptersFragment();
Bundle args = new Bundle();
fragment.setArguments(args);
fragment.listener = listener;
return fragment;
}
public ChaptersFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.general_list, container, false);
setupData();
setupViews(view);
return view;
}
private void setupData(){
BibleChapter currentChapter = BiblePagingEvent.getStickyEvent(getActivity().getApplicationContext()).mainChapter;
if(currentChapter != null) {
chapters = currentChapter.getBook().getBibleChapters(true);
}
}
protected List<GeneralRowInterface> getData(){
BibleChapter currentChapter = BiblePagingEvent.getStickyEvent(getActivity().getApplicationContext()).mainChapter;
List<GeneralRowInterface> dataList = new ArrayList<>();
if(currentChapter == null){
return dataList;
}
for(BibleChapter row : chapters) {
dataList.add(new GeneralRowInterface.BasicGeneralRowInterface(row.getUniqueSlug(), row.getNumber()));
if(row.getId().equals(currentChapter.getId())){
selectedIndex = chapters.indexOf(row);
}
}
return dataList;
}
private void setupViews(View view){
prepareListView(view);
}
protected void prepareListView(View view) {
List<GeneralRowInterface> data = this.getData();
if (listView == null) {
listView = (ListView) view.findViewById(R.id.generalList);
}
if (data == null) {
return;
}
listView.setOnItemClickListener(this);
adapter = new ChaptersAdapter(getContext(), data, this, selectedIndex);
listView.setAdapter(adapter);
int indexToScroll = (selectedIndex > 3)? selectedIndex - 3 : 0;
listView.setSelection(indexToScroll);
}
/**
* reloads list with new book
* @param newBook new book from which to display the chapters.
*/
protected void reload(Book newBook){
this.chapters = newBook.getBibleChapters(true);
adapter.update(getData());
}
//endregion
//region OnItemClickListener
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long rowIndex) {
BiblePagingEvent event = BiblePagingEvent.getStickyEvent(getActivity().getApplicationContext());
BibleChapter newChapter = chapters.get(position);
BibleChapter secondaryNewChapter = null;
Book secondaryBook = event.secondaryChapter.getBook().getVersion()
.getBookForBookSlug(newChapter.getBook().getSlug(),
DaoDBHelper.getDaoSession(getActivity().getApplicationContext()));
if(secondaryBook != null){
secondaryNewChapter = secondaryBook.getBibleChapterForNumber(newChapter.getNumber());
}
EventBus.getDefault().postSticky(new BiblePagingEvent(newChapter,
(secondaryNewChapter != null)? secondaryNewChapter : newChapter));
if(listener != null) {
listener.chapterWasSelected();
}
}
//endregion
//region detach
@Override
public void onDetach() {
super.onDetach();
listener = null;
}
//endregion
}