/** * Copyright (c) 2015 unfoldingWord * http://creativecommons.org/licenses/MIT/ * See LICENSE file for details. * Contributors: * PJ Fechner <pj@actsmedia.com> */ package utils; import android.content.Context; import android.support.annotation.Nullable; import de.greenrobot.event.EventBus; import eventbusmodels.BiblePagingEvent; import eventbusmodels.StoriesPagingEvent; import model.DaoDBHelper; import model.daoModels.BibleChapter; import model.daoModels.StoryPage; /** * Created by Fechner on 8/14/15. */ public class UWPreferenceDataAccessor { private static UWPreferenceDataAccessor sharedInstance; public static UWPreferenceDataAccessor getSharedInstance(Context context){ if (sharedInstance == null) { sharedInstance = new UWPreferenceDataAccessor(context); } return sharedInstance; } private Context context; private UWPreferenceDataAccessor(Context context) { this.context = context; registerEventListeners(); } private void registerEventListeners(){ EventBus.getDefault().register(this); } public void unregisterEventListeners(){ EventBus.getDefault().unregister(this); } public void onEventBackgroundThread(BiblePagingEvent event){ if(event.mainChapter != null) { UWPreferenceDataManager.changedToBibleChapter(context, event.mainChapter.getId(), false); } if(event.secondaryChapter != null) { UWPreferenceDataManager.changedToBibleChapter(context, event.secondaryChapter.getId(), true); } } public void onEventBackgroundThread(StoriesPagingEvent event){ UWPreferenceDataManager.setNewStoriesPage(context, event.mainStoryPage, false); UWPreferenceDataManager.setNewStoriesPage(context, event.secondaryStoryPage, true); } public BiblePagingEvent createBiblePagingEvent(){ return new BiblePagingEvent(getBibleChapter(false), getBibleChapter(true)); } public StoriesPagingEvent createStoriesPagingEvent(){ return new StoriesPagingEvent(getStoryPage(false), getStoryPage(true)); } /** * Checks if cached chapter is updated, updates if necessary, and returns chapter */ @Nullable synchronized private BibleChapter getBibleChapter(boolean secondary){ long chapterId = UWPreferenceManager.getCurrentBibleChapter(context, secondary); return loadChapterFromDB(chapterId); } @Nullable private BibleChapter loadChapterFromDB(long id){ if(id < 0){ return null; } return BibleChapter.getModelForId(id, DaoDBHelper.getDaoSession(context)); } /** * Checks if cached page is updated, updates if necessary, and returns chapter */ @Nullable synchronized private StoryPage getStoryPage(boolean secondary){ long chapterId = UWPreferenceManager.getCurrentStoryPage(context, secondary); return loadPageFromDB(chapterId); } @Nullable private StoryPage loadPageFromDB(long id){ if(id < 0){ return null; } return DaoDBHelper.getDaoSession(context).getStoryPageDao().loadDeep(id); } }