/** * 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 de.greenrobot.event.EventBus; import eventbusmodels.BiblePagingEvent; import eventbusmodels.StoriesPagingEvent; import model.DaoDBHelper; import model.daoModels.BibleChapter; import model.daoModels.Book; import model.daoModels.DaoSession; import model.daoModels.StoriesChapter; import model.daoModels.StoryPage; import model.daoModels.Version; /** * Created by Fechner on 8/21/15. */ public class UWPreferenceDataManager { public static void resetChapterSelections(Context context){ resetChapterSelections(context, true); } public static void resetChapterSelections(Context context, boolean updateSelections){ changedToBibleChapter(context, -1, true, updateSelections); changedToBibleChapter(context, -1, false, updateSelections); changedToStoryPage(context, -1, true); changedToStoryPage(context, -1, false); } public static void changedToBibleChapter(Context context, long chapterId, boolean isSecond){ changedToBibleChapter(context, chapterId, isSecond, true); } public static void changedToBibleChapter(Context context, long chapterId, boolean isSecond, boolean updateSelections){ if(isSecond){ UWPreferenceManager.setSelectedBibleChapterSecondary(context, chapterId); } else{ UWPreferenceManager.setSelectedBibleChapter(context, chapterId); } if(updateSelections) { updateChapterSelection(context, chapterId, isSecond); } } private static void updateChapterSelection(Context context, long activeChapterId, boolean isSecond){ DaoSession session = DaoDBHelper.getDaoSession(context); long changingId = (isSecond)? UWPreferenceManager.getSelectedBibleChapter(context) : UWPreferenceManager.getSelectedBibleChapterSecondary(context); BibleChapter activeChapter = BibleChapter.getModelForId(activeChapterId, session); BibleChapter changingChapter = BibleChapter.getModelForId(changingId, session); BibleChapter newChapter; if(changingChapter != null && activeChapter != null) { Book correctChangingBook = changingChapter.getBook().getVersion().getBookForBookSlug(activeChapter.getBook().getSlug(), session); if (correctChangingBook != null) { newChapter = correctChangingBook.getBibleChapterForNumber(activeChapter.getNumber()); } else{ newChapter = activeChapter; } } else{ newChapter = activeChapter; } if(isSecond){ UWPreferenceManager.setSelectedBibleChapter(context, (newChapter != null) ? newChapter.getId() : -1); } else{ UWPreferenceManager.setSelectedBibleChapterSecondary(context, (newChapter != null)? newChapter.getId() : -1); } } public static void selectedVersion(Context context, Version version, boolean isSecond){ if(version.getLanguage().getProject().isBibleStories()){ setNewStoriesVersion(context, version, isSecond); } else{ setNewBibleVersion(context, version, isSecond); } } public static void setNewBibleVersion(Context context, Version version, boolean isSecond){ long currentId = UWPreferenceManager.getCurrentBibleChapter(context, isSecond); BibleChapter requestedChapter = null; BibleChapter currentChapter = BibleChapter.getModelForId(currentId, DaoDBHelper.getDaoSession(context)); if(currentChapter != null){ Book newBook = version.getBookForBookSlug(currentChapter.getBook().getSlug(), DaoDBHelper.getDaoSession(context)); if(newBook != null){ requestedChapter = newBook.getBibleChapterForNumber(currentChapter.getNumber()); } } if(requestedChapter == null){ requestedChapter = version.getFirstBibleChapter(); } if(requestedChapter != null) { changedToBibleChapter(context, requestedChapter.getId(), isSecond); } else{ changedToBibleChapter(context, -1, isSecond); } EventBus.getDefault().postSticky(UWPreferenceDataAccessor.getSharedInstance(context).createBiblePagingEvent()); } public static void setNewStoriesVersion(Context context, Version newVersion, boolean isSecond) { StoriesPagingEvent currentEvent = StoriesPagingEvent.getStickyEvent(context); StoryPage currentPage = (isSecond)? currentEvent.secondaryStoryPage : currentEvent.mainStoryPage; if(currentPage == null){ StoryPage page = newVersion.getBooks().get(0).getStoryChapters().get(0).getStoryPages().get(0); long newPageId = page.getId(); changedToStoryPage(context, newPageId, isSecond); changedToStoryPage(context, newPageId, !isSecond); } else { DaoSession session = DaoDBHelper.getDaoSession(context); Book book = newVersion.getBookForBookSlug(currentPage.getStoriesChapter().getBook().getSlug(), session); StoryPage newPage = null; if(book != null){ StoriesChapter newChapter = book.getStoriesChapterForNumber(currentPage.getStoriesChapter().getNumber()); if (newChapter != null) { newPage = newChapter.getStoryPageForNumber(currentPage.getNumber()); } } else if (newPage == null) { newPage = newVersion.getBooks().get(0).getStoryChapters().get(0).getStoryPages().get(0); } changedToStoryPage(context, newPage.getId(), isSecond); } EventBus.getDefault().postSticky(UWPreferenceDataAccessor.getSharedInstance(context).createStoriesPagingEvent()); } public static void setNewStoriesPage(Context context, StoryPage newPage, boolean isSecond) { if (newPage == null) { changedToStoryPage(context, -1, isSecond); changedToStoryPage(context, -1, !isSecond); return; } changedToStoryPage(context, newPage.getId(), isSecond); StoriesPagingEvent currentEvent = StoriesPagingEvent.getStickyEvent(context); StoryPage otherPage = (isSecond)? currentEvent.mainStoryPage : currentEvent.secondaryStoryPage; if(otherPage != null) { Version version = otherPage.getStoriesChapter().getBook().getVersion(); DaoSession session = DaoDBHelper.getDaoSession(context); Book book = version.getBookForBookSlug(newPage.getStoriesChapter().getBook().getSlug(), session); StoriesChapter newChapter = book.getStoriesChapterForNumber(newPage.getStoriesChapter().getNumber()); StoryPage newOtherPage = newChapter.getStoryPageForNumber(newPage.getNumber()); changedToStoryPage(context, newOtherPage.getId(), !isSecond); } } public static void changedToStoryPage(Context context, long id, boolean isSecond){ if(isSecond){ UWPreferenceManager.setSelectedStoryPageSecondary(context, id); } else{ UWPreferenceManager.setSelectedStoryPage(context, id); } } public static void willDeleteVersion(Context context, Version version){ if(version.getLanguage().getProject().isBibleStories()) { willDeleteStoryVersion(context, version); } else { willDeleteBibleVersion(context, version); } } private static void willDeleteStoryVersion(Context context, Version version){ StoriesPagingEvent currentEvent = StoriesPagingEvent.getStickyEvent(context); if(currentEvent.mainStoryPage == null){ return; } boolean samePage = currentEvent.mainStoryPage.getId().equals(currentEvent.secondaryStoryPage.getId()); if(currentEvent.mainStoryPage.getStoriesChapter().getBook().getVersionId() == (version.getId())){ UWPreferenceManager.setSelectedStoryPage(context, (samePage) ? -1 : currentEvent.secondaryStoryPage.getId()); } if(currentEvent.secondaryStoryPage.getStoriesChapter().getBook().getVersionId() == (version.getId())){ UWPreferenceManager.setSelectedStoryPageSecondary(context, (samePage) ? -1 : currentEvent.mainStoryPage.getId()); } } private static void willDeleteBibleVersion(Context context, Version version){ BiblePagingEvent currentEvent = BiblePagingEvent.getStickyEvent(context); if(currentEvent.secondaryChapter == null || currentEvent.mainChapter == null ){ UWPreferenceManager.setSelectedBibleChapter(context, -1); UWPreferenceManager.setSelectedBibleChapterSecondary(context, -1); return; } boolean sameChapter = currentEvent.mainChapter.getId().equals(currentEvent.secondaryChapter.getId()); if(currentEvent.mainChapter.getBook().getVersionId() == (version.getId())){ UWPreferenceManager.setSelectedBibleChapter(context, (sameChapter) ? -1 : currentEvent.secondaryChapter.getId()); } if(currentEvent.secondaryChapter.getBook().getVersionId() == (version.getId())){ UWPreferenceManager.setSelectedBibleChapterSecondary(context, (sameChapter) ? -1 : currentEvent.mainChapter.getId()); } } }