package net.bible.android.control;
import net.bible.android.control.event.passage.BeforeCurrentPageChangeEvent;
import net.bible.android.control.event.passage.CurrentVerseChangedEvent;
import net.bible.android.control.event.passage.PassageChangeStartedEvent;
import net.bible.android.control.event.passage.PassageChangedEvent;
import net.bible.android.control.event.passage.PreBeforeCurrentPageChangeEvent;
import net.bible.service.device.ScreenSettings;
import android.util.Log;
import de.greenrobot.event.EventBus;
/** when a bible passage is changed there are lots o things to update and they should be done in a helpful order
* This helps to control screen updates after a passage change
*
* @author Martin Denham [mjdenham at gmail dot com]
* @see gnu.lgpl.License for license details.<br>
* The copyright to this program is held by it's author.
*/
public class PassageChangeMediator {
private BibleContentManager mBibleContentManager;
private boolean isPageChanging = false;
private static final String TAG = "PassageChangeMediator";
private static final PassageChangeMediator singleton = new PassageChangeMediator();
public static final PassageChangeMediator getInstance() {
return singleton;
}
/** first time we know a page or doc will imminently change
*/
public void onBeforeCurrentPageChanged() {
isPageChanging = true;
EventBus.getDefault().post(new PreBeforeCurrentPageChangeEvent());
EventBus.getDefault().post(new BeforeCurrentPageChangeEvent());
}
/** the document has changed so ask the view to refresh itself
*/
public void onCurrentPageChanged() {
if (mBibleContentManager!=null) {
mBibleContentManager.updateText();
} else {
Log.w(TAG, "BibleContentManager not yet registered");
}
}
/** the document has changed so ask the view to refresh itself
*/
public void forcePageUpdate() {
if (mBibleContentManager!=null) {
mBibleContentManager.updateText(true);
} else {
Log.w(TAG, "BibleContentManager not yet registered");
}
}
/** this is triggered on scroll
*/
public void onCurrentVerseChanged() {
EventBus.getDefault().post(new CurrentVerseChangedEvent());
}
/** The thread which fetches the new page html has started
*/
public void contentChangeStarted() {
isPageChanging = true;
// only update occasionally otherwise black-on-black or w-on-w may occur in variable light conditions
ScreenSettings.isNightModeChanged();
EventBus.getDefault().post(new PassageChangeStartedEvent());
}
/** finished fetching html so should hide hourglass
*/
public void contentChangeFinished() {
EventBus.getDefault().post(new PassageChangedEvent());
isPageChanging = false;
}
public boolean isPageChanging() {
return isPageChanging;
}
public void setBibleContentManager(BibleContentManager bibleContentManager) {
this.mBibleContentManager = bibleContentManager;
}
}