/** * */ package net.bible.android.control.mynote; import android.util.Log; import android.widget.Toast; import net.bible.android.BibleApplication; import net.bible.android.activity.R; import net.bible.android.control.ApplicationScope; import net.bible.android.control.page.CurrentPageManager; import net.bible.android.control.page.window.ActiveWindowPageManagerProvider; import net.bible.service.common.CommonUtils; import net.bible.service.db.mynote.MyNoteDto; import org.crosswire.jsword.passage.Key; import org.crosswire.jsword.passage.KeyUtil; import org.crosswire.jsword.passage.Verse; import org.crosswire.jsword.passage.VerseRange; import org.crosswire.jsword.versification.Versification; import java.util.List; import javax.inject.Inject; /** * User Note controller methods * * @see gnu.lgpl.License for license details.<br> * The copyright to this program is held by it's authors. * @author John D. Lewis [balinjdl at gmail dot com] * @author Martin Denham [mjdenham at gmail dot com] */ @ApplicationScope public class MyNoteControl { private final ActiveWindowPageManagerProvider activeWindowPageManagerProvider; private static final String MYNOTE_SORT_ORDER = "MyNoteSortOrder"; private final MyNoteDAO myNoteDAO; private static final String TAG = "MyNoteControl"; @Inject public MyNoteControl(ActiveWindowPageManagerProvider activeWindowPageManagerProvider, MyNoteDAO myNoteDAO) { this.activeWindowPageManagerProvider = activeWindowPageManagerProvider; this.myNoteDAO = myNoteDAO; } /** * Start chain of actions to switch to MyNote view * @param verseRange */ public void showMyNote(VerseRange verseRange) { // if existing MyNote exists with same start verse then adjust range to match the note that will be edited final MyNoteDto existingMyNoteWithSameStartVerse = myNoteDAO.getMyNoteByStartVerse(verseRange); if (existingMyNoteWithSameStartVerse!=null) { verseRange = existingMyNoteWithSameStartVerse.getVerseRange(verseRange.getVersification()); } getCurrentPageManager().showMyNote(verseRange); } public void showNoteView(MyNoteDto noteDto) { getCurrentPageManager().showMyNote(noteDto.getVerseRange()); } public String getMyNoteVerseKey(MyNoteDto myNote) { String keyText = ""; try { Versification versification = getCurrentPageManager().getCurrentBible().getVersification(); keyText = myNote.getVerseRange(versification).getName(); } catch (Exception e) { Log.e(TAG, "Error getting verse text", e); } return keyText; } public boolean saveMyNoteText(String myNote) { MyNoteDto dto = getCurrentMyNoteDto(); dto.setNoteText(myNote); return saveMyNote(dto); } public MyNoteDto getCurrentMyNoteDto() { // Key key = getCurrentPageManager().getCurrentMyNotePage().getKey(); VerseRange verseRange; // The key should be a VerseRange if (key instanceof VerseRange) { verseRange = (VerseRange)key; } else { Verse verse = KeyUtil.getVerse(key); verseRange = new VerseRange(verse.getVersification(), verse); } // get a dto MyNoteDto myNote = myNoteDAO.getMyNoteByStartVerse(verseRange); // return an empty note dto if (myNote==null) { myNote = new MyNoteDto(); myNote.setVerseRange(verseRange); } return myNote; } /** save the note to the database if it is new or has been updated */ public boolean saveMyNote(MyNoteDto myNoteDto) { Log.d(TAG, "saveMyNote started..."); boolean isSaved = false; if (myNoteDto.isNew()) { if (!myNoteDto.isEmpty()) { myNoteDAO.addMyNote(myNoteDto); isSaved = true; } } else { MyNoteDto oldNote = myNoteDAO.getMyNoteByStartVerse(myNoteDto.getVerseRange()); // delete empty notes if (myNoteDto.isEmpty()) { myNoteDAO.deleteMyNote(myNoteDto); } else if (!myNoteDto.equals(oldNote)) { // update changed notes myNoteDAO.updateMyNote(myNoteDto); isSaved = true; } } if (isSaved) { Toast.makeText(BibleApplication.getApplication().getApplicationContext(), R.string.mynote_saved, Toast.LENGTH_SHORT).show(); } return isSaved; } public String getMyNoteText(MyNoteDto myNote, boolean abbreviated) { String text = ""; try { text = myNote.getNoteText(); if (abbreviated) { //TODO allow longer lines if portrait or tablet boolean singleLine = true; text = CommonUtils.limitTextLength(text, 40, singleLine); } } catch (Exception e) { Log.e(TAG, "Error getting user note text", e); } return text; } // pure myNote methods /** get all myNotes */ public List<MyNoteDto> getAllMyNotes() { return myNoteDAO.getAllMyNotes(getSortOrder()); } /** delete this user note (and any links to labels) */ public boolean deleteMyNote(MyNoteDto myNote) { return myNoteDAO.deleteMyNote(myNote); } public void changeSortOrder() { if (getSortOrder().equals(MyNoteSortOrder.BIBLE_BOOK)) { setSortOrder(MyNoteSortOrder.DATE_CREATED); } else { setSortOrder(MyNoteSortOrder.BIBLE_BOOK); } } public MyNoteSortOrder getSortOrder() { String sortOrderStr = CommonUtils.getSharedPreference(MYNOTE_SORT_ORDER, MyNoteSortOrder.BIBLE_BOOK.toString()); return MyNoteSortOrder.valueOf(sortOrderStr); } private void setSortOrder(MyNoteSortOrder sortOrder) { CommonUtils.saveSharedPreference(MYNOTE_SORT_ORDER, sortOrder.toString()); } public String getSortOrderDescription() { if (MyNoteSortOrder.BIBLE_BOOK.equals(getSortOrder())) { return CommonUtils.getResourceString(R.string.sort_by_bible_book); } else { return CommonUtils.getResourceString(R.string.sort_by_date); } } public CurrentPageManager getCurrentPageManager() { return activeWindowPageManagerProvider.getActiveWindowPageManager(); } }