/**
* Copyright (c) 2015 unfoldingWord
* http://creativecommons.org/licenses/MIT/
* See LICENSE file for details.
* Contributors:
* PJ Fechner <pj@actsmedia.com>
*/
package adapters;
import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.RelativeLayout;
import org.unfoldingword.mobile.R;
import java.util.List;
import model.daoModels.BibleChapter;
import model.daoModels.Book;
import model.parsers.USFMParser;
/**
* Created by Acts Media Inc on 5/12/14.
*/
public class ReadingPagerAdapter extends PagerAdapter {
private static final String TAG = "ViewPagerAdapter";
private Context context;
private ViewGroup container;
private List<BibleChapter> chapters;
private View.OnTouchListener pagerOnTouchListener;
private int textSize;
private ReadingPagerAdapterListener listener;
//region Setup
public ReadingPagerAdapter(Context context, List<BibleChapter> models, View.OnTouchListener pagerOnTouchListener,
int textSize, ReadingPagerAdapterListener listener) {
this.context = context;
this.textSize = textSize;
this.listener = listener;
chapters = models;
this.pagerOnTouchListener = pagerOnTouchListener;
}
public void update(List<BibleChapter> models){
this.chapters = models;
notifyDataSetChanged();
}
public void updateTextSize(int textSize){
this.textSize = textSize;
notifyDataSetChanged();
}
//endregion
//region Accessors
public List<BibleChapter> getChapters() {
return chapters;
}
//endregion
//region pager methods
@Override
public int getCount() {
Book nextBook = chapters.get(0).getBook().getNextBook();
if(nextBook == null){
return chapters.size();
}
else {
return chapters.size() + 1;
}
}
@Override
public Object instantiateItem(final ViewGroup container, final int position) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.container = container;
View view = null;
if (position == chapters.size()) {
view = getNextBookView(inflater);
}
else{
view = inflater.inflate(R.layout.reading_pager_layout, container, false);
view.setEnabled(false);
WebView textWebView = (WebView) view.findViewById(R.id.chapterWebView);
textWebView.getSettings().setJavaScriptEnabled(true);
textWebView.setOnTouchListener(this.pagerOnTouchListener);
String pageText = USFMParser.getTextCss(textSize, getTextDirection()) + new USFMParser().parseUsfmChapter(chapters.get(position).getText());
textWebView.loadDataWithBaseURL("", pageText, "text/html", "UTF-8", "");
}
container.addView(view);
return view;
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((RelativeLayout) object);
}
@Override
public void setPrimaryItem(ViewGroup container, int position, Object object) {
super.setPrimaryItem(container, position, object);
if(position == (this.getCount() - 1)){
return;
}
}
//endregion
//region text creation
private String getTextDirection(){
if(isRTL()){
return "rtl";
}
else{
return "ltf";
}
}
private boolean isRTL() {
char desiredChar = ' ';
int spanIndex = chapters.get(0).getText().indexOf("span>");
for(int i = spanIndex + 5; i < chapters.get(0).getText().length(); i++){
desiredChar = chapters.get(0).getText().charAt(i);
if(!Character.isDigit(desiredChar) && !Character.isWhitespace(desiredChar) && Character.isLetter(desiredChar)){
break;
}
}
final int directionality = Character.getDirectionality(desiredChar);
boolean direction = (directionality == Character.DIRECTIONALITY_RIGHT_TO_LEFT ||
directionality == Character.DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC);
return direction;
}
//endregion
//region handling next book
private View getNextBookView(LayoutInflater inflater){
View nextChapterView = inflater.inflate(R.layout.next_chapter_screen_layout, container, false);
Button nextButton = (Button) nextChapterView.findViewById(R.id.next_chapter_screen_button);
Book nextBook = chapters.get(0).getBook().getNextBook();
if(nextBook != null) {
String nextButtonString = context.getResources().getString(R.string.next_book);
nextButton.setText(nextButtonString + " " + nextBook.getTitle());
nextButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
moveToNextBook();
}
});
return nextChapterView;
}
else{
return null;
}
}
private void moveToNextBook(){
if(listener != null) {
listener.goToNextBook();
}
}
//endregion
public interface ReadingPagerAdapterListener{
/**
* User wants to go to the next book
*/
void goToNextBook();
}
}