/** * Copyright (c) 2015 unfoldingWord * http://creativecommons.org/licenses/MIT/ * See LICENSE file for details. * Contributors: * PJ Fechner <pj@actsmedia.com> */ package fragments.Reading; import android.content.res.Configuration; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import org.unfoldingword.mobile.R; import java.util.List; import adapters.StoryPagerAdapter; import de.greenrobot.event.EventBus; import eventbusmodels.StoriesPagingEvent; import model.daoModels.StoryPage; import singletons.UWAudioPlayer; import view.ReadingDoubleTapHandler; /** * A simple {@link Fragment} subclass. * Use the {@link StoryReadingFragment#newInstance} factory method to * create an instance of this fragment. */ public class StoryReadingFragment extends Fragment implements ReadingDoubleTapHandler.ReadingDoubleTapHandlerListener{ private static final String TEXT_SIZE_PARAM = "TEXT_SIZE_PARAM"; private ViewPager readingViewPager; private ReadingFragmentListener listener; private StoryPagerAdapter adapter; private int textSize; public static StoryReadingFragment newInstance(int textSize) { StoryReadingFragment fragment = new StoryReadingFragment(); Bundle args = new Bundle(); args.putInt(TEXT_SIZE_PARAM, textSize); fragment.setArguments(args); return fragment; } public StoryReadingFragment() { } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); textSize = getArguments().getInt(TEXT_SIZE_PARAM); if(getActivity() instanceof ReadingFragmentListener){ this.listener = (ReadingFragmentListener) getActivity(); } } @Override public void onStart() { super.onStart(); registerEventListeners(); } private void registerEventListeners() { EventBus.getDefault().register(this); } public void unregisterEventListeners() { EventBus.getDefault().unregister(this); } public void onEventMainThread(StoriesPagingEvent event) { update(event.mainStoryPage, event.secondaryStoryPage, true); } @Override public void onStop() { super.onStop(); unregisterEventListeners(); } public void setTextSize(int textSize){ this.textSize = textSize; adapter.setTextSize(this.textSize); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_story_reading, container, false); setupViews(view); setDiglotShowing(false); return view; } public void update(){ StoriesPagingEvent pagingEvent = getPagingEvent(); update(pagingEvent.mainStoryPage, pagingEvent.secondaryStoryPage, false); } private StoriesPagingEvent getPagingEvent() { return StoriesPagingEvent.getStickyEvent(getActivity().getApplicationContext()); } private void update(StoryPage mainPage, StoryPage secondaryPage, boolean animateScroll){ if(mainPage != null && secondaryPage != null) { if(adapter != null) { adapter.update(mainPage.getStoriesChapter(), secondaryPage.getStoriesChapter()); int currentIndex = mainPage.getStoriesChapter().getStoryPages().indexOf(mainPage); readingViewPager.setCurrentItem(currentIndex, animateScroll); } } } private void setupViews(View view){ setupPager(view); adapter.setIsLandscape(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE); } private void setupPager(View view){ StoriesPagingEvent event = getPagingEvent(); final StoryPage mainPage = event.mainStoryPage; StoryPage secondaryPage = event.secondaryStoryPage; if(mainPage != null && secondaryPage != null) { adapter = new StoryPagerAdapter(getActivity(), mainPage.getStoriesChapter(), secondaryPage.getStoriesChapter(), textSize); } else{ adapter = new StoryPagerAdapter(getActivity(), null, null, textSize); } readingViewPager = (ViewPager) view.findViewById(R.id.myViewPager); readingViewPager.setAdapter(adapter); readingViewPager.setOnTouchListener(new ReadingDoubleTapHandler(getResources(), this)); update(mainPage, secondaryPage, false); readingViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { } @Override public void onPageScrollStateChanged(int state) { if (state != 0) { return; } int position = readingViewPager.getCurrentItem(); List<StoryPage> pages = adapter.getMainChapter().getStoryPages(); if (position < pages.size()) { StoryPage mainModel = pages.get(position); StoryPage secondaryModel = adapter.getSecondChapter().getStoryPages().get(position); StoriesPagingEvent event = new StoriesPagingEvent(mainModel, secondaryModel); UWAudioPlayer.getInstance(getContext()).onEvent(event); EventBus.getDefault().postSticky(event); } } }); } @Override public boolean doubleTapWasRegistered() { if(listener != null) { listener.toggleHidden(); return true; } else { return false; } } public void setDiglotShowing(boolean showing){ if(adapter != null) { adapter.setIsDiglot(showing); } } public void setOrientationAsLandscape(boolean isLandscape){ adapter.setIsLandscape(isLandscape); } }