/** * @file ReaderWrapper.java * * @revision: none * * @version 0.0.01 * @author: Zenki (zhajun), zenki2001cn@163.com * @date: 2011-3-1 下午05:23:45 */ package com.easyview.ebook.reader.engine.core; import android.graphics.Bitmap; import android.os.Message; import com.easyview.ebook.reader.engine.core.EREngine.EngineHandler; import com.easyview.ebook.reader.engine.core.EngineCode.EngineMsgCode; import com.easyview.ebook.reader.engine.core.TaskManager.ActionTask; import com.easyview.ebook.reader.engine.model.Book; import com.easyview.ebook.reader.engine.model.BookSearchInfo; import com.easyview.ebook.reader.engine.model.BookEmphasisInfo.BookEmphasis; import com.easyview.ebook.reader.engine.model.BookMarkInfo.Bookmark; import com.easyview.ebook.reader.engine.model.BookSearchInfo.BookSearchResult; import com.easyview.ebook.reader.engine.util.EngineConfig; import com.easyview.ebook.reader.engine.util.Logger; import com.easyview.ebook.reader.engine.util.recorder.IRecorder; /** * 閱讀器包裹類,該類為抽象類,子類為AdobeWrapper和FbreaderWrapper. * <p> * 該類實現IAction接口,提供閱讀器操作接口. */ public abstract class ReaderWrapper implements IAction { /** The Constant TAG. */ static private final String TAG = "ReaderWrapper"; /** The m 錯誤代碼類對象. */ private EngineCode mEngineError; /** The m 任務管理對象. */ private TaskManager mTaskManager; /** The m EREngine. */ private EREngine mEngine; /** The m 需要打開的Book對象. */ private Book mOpenedBook; /** The m 渲染邊界標識,為false表示可以渲染,為true則停止渲染. */ private boolean mIsBorder = false; /** The m 觸控屏幕時加鎖,如果為true,則禁止觸發相關方法. */ private boolean mTouchLinkLock = false; /** The m 最後傳入的Todo回調接口. */ private IActionCall mLastTodoAction; /** The m 最後傳入的Predo回調接口. */ private IActionCall mLastPredoAction; /** The m 是否自動執行回調接口. */ private boolean mAutoExecuteTodoAction = true; /** The m 是否橫屏模式,true為橫屏,false為豎屏. */ private boolean mLandMode = false; /** The m 當前字體等級,為2. */ private int mCurFontLevel = 2; /** The m bitmap config. */ private Bitmap.Config mBitmapConfig = Bitmap.Config.RGB_565; /* * (non-Javadoc) * * @see com.easyview.ebook.reader.engine.core.IAction#openBook() */ public void openBook() { openBook(null, null); } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IAction#openBook(com.easyview.ebook * .reader.engine.core.IActionCall, * com.easyview.ebook.reader.engine.core.IActionCall) */ public void openBook(IActionCall preDo, IActionCall toDo) { IActionCall action = new IActionCall() { public boolean action() { try { loadBookDB(); } catch (Exception e) { e.printStackTrace(); Logger.eLog(TAG, "load book info error" + e); } iLoadBook(); // debug for load chapter information, can be delete if no need // iLoadChapterInformation(); // iLoadAllHighlight(); handleError(); return true; } }; IActionCall preload = preloadAction(toDo); addTask(getCurAdapter(), action, preDo, preload); } /* * (non-Javadoc) * * @see com.easyview.ebook.reader.engine.core.IAction#pageJumpTo(int) */ public void pageJumpTo(final int pageNum) { pageJumpTo(pageNum, null, null); } /* * (non-Javadoc) * * @see com.easyview.ebook.reader.engine.core.IAction#pageJumpTo(int, * com.easyview.ebook.reader.engine.core.IActionCall, * com.easyview.ebook.reader.engine.core.IActionCall) */ public void pageJumpTo(final int pageNum, IActionCall preDo, IActionCall toDo) { IActionCall action = new IActionCall() { public boolean action() { iPageJumpTo(pageNum); handleError(); return true; } }; IActionCall preload = preloadAction(toDo); addTask(getCurAdapter(), action, preDo, preload); } /* * (non-Javadoc) * * @see com.easyview.ebook.reader.engine.core.IAction#pageUp() */ public void pageUp() { pageUp(null, null); } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IAction#pageUp(com.easyview.ebook * .reader.engine.core.IActionCall, * com.easyview.ebook.reader.engine.core.IActionCall) */ public void pageUp(IActionCall preDo, IActionCall toDo) { IActionCall action = new IActionCall() { @Override public boolean action() { iPageUp(); handleError(); return true; } }; IActionCall preload = preloadAction(toDo); addTask(getCurAdapter(), action, preDo, preload); } /* * (non-Javadoc) * * @see com.easyview.ebook.reader.engine.core.IAction#pageDown() */ public void pageDown() { pageDown(null, null); } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IAction#pageDown(com.easyview.ebook * .reader.engine.core.IActionCall, * com.easyview.ebook.reader.engine.core.IActionCall) */ public void pageDown(IActionCall preDo, IActionCall toDo) { IActionCall action = new IActionCall() { @Override public boolean action() { iPageDown(); handleError(); return true; } }; IActionCall preload = preloadAction(toDo); addTask(getCurAdapter(), action, preDo, preload); } /* (non-Javadoc) * @see com.easyview.ebook.reader.engine.core.IAction#pageZoomLevel(int) */ public void pageZoomLevel(int lv) { pageZoomLevel(lv, null, null); } /* (non-Javadoc) * @see com.easyview.ebook.reader.engine.core.IAction#pageZoomLevel(int, com.easyview.ebook.reader.engine.core.IActionCall, com.easyview.ebook.reader.engine.core.IActionCall) */ public void pageZoomLevel(final int lv, IActionCall preDo, IActionCall toDo) { IActionCall action = new IActionCall() { @Override public boolean action() { iPageZoomLevel(lv); handleError(); return true; } }; IActionCall preload = preloadAction(toDo); addTask(getCurAdapter(), action, preDo, preload); } /* * (non-Javadoc) * * @see com.easyview.ebook.reader.engine.core.IAction#pageZoomIn() */ public void pageZoomIn() { pageZoomIn(null, null); } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IAction#pageZoomIn(com.easyview.ebook * .reader.engine.core.IActionCall, * com.easyview.ebook.reader.engine.core.IActionCall) */ public void pageZoomIn(IActionCall preDo, IActionCall toDo) { IActionCall action = new IActionCall() { @Override public boolean action() { iPageZoomIn(); handleError(); return true; } }; IActionCall preload = preloadAction(toDo); addTask(getCurAdapter(), action, preDo, preload); } /* * (non-Javadoc) * * @see com.easyview.ebook.reader.engine.core.IAction#pageZoomOut() */ public void pageZoomOut() { pageZoomOut(null, null); } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IAction#pageZoomOut(com.easyview. * ebook.reader.engine.core.IActionCall, * com.easyview.ebook.reader.engine.core.IActionCall) */ public void pageZoomOut(IActionCall preDo, IActionCall toDo) { IActionCall action = new IActionCall() { @Override public boolean action() { iPageZoomOut(); handleError(); return true; } }; IActionCall preload = preloadAction(toDo); addTask(getCurAdapter(), action, preDo, preload); } /* * (non-Javadoc) * * @see com.easyview.ebook.reader.engine.core.IAction#enterSearchMode() */ public void enterSearchMode() { enterSearchMode(null, null); } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IAction#enterSearchMode(com.easyview * .ebook.reader.engine.core.IActionCall, * com.easyview.ebook.reader.engine.core.IActionCall) */ public void enterSearchMode(IActionCall preDo, IActionCall toDo) { IActionCall action = new IActionCall() { @Override public boolean action() { iEnterSearchMode(); iSearchUpdateInfo(); handleError(); return true; } }; addTask(getCurAdapter(), action, preDo, toDo); } /* * (non-Javadoc) * * @see com.easyview.ebook.reader.engine.core.IAction#searchGoNext() */ public void searchGoNext() { searchGoNext(null, null); } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IAction#searchGoNext(com.easyview * .ebook.reader.engine.core.IActionCall, * com.easyview.ebook.reader.engine.core.IActionCall) */ public void searchGoNext(IActionCall preDo, IActionCall toDo) { IActionCall action = new IActionCall() { @Override public boolean action() { iSearchGoNext(); iSearchUpdateInfo(); handleError(); return true; } }; addTask(getCurAdapter(), action, preDo, toDo); } /* * (non-Javadoc) * * @see com.easyview.ebook.reader.engine.core.IAction#searchGoPrevious() */ public void searchGoPrevious() { searchGoPrevious(null, null); } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IAction#searchGoPrevious(com.easyview * .ebook.reader.engine.core.IActionCall, * com.easyview.ebook.reader.engine.core.IActionCall) */ public void searchGoPrevious(IActionCall preDo, IActionCall toDo) { IActionCall action = new IActionCall() { @Override public boolean action() { iSearchGoPrevious(); iSearchUpdateInfo(); handleError(); return true; } }; addTask(getCurAdapter(), action, preDo, toDo); } /* * (non-Javadoc) * * @see com.easyview.ebook.reader.engine.core.IAction#searchGotoByResult( * BookSearchInfo.BookSearchResult result) */ public void searchGotoResult(BookSearchInfo.BookSearchResult result) { searchGotoResult(result, null, null); } /* * (non-Javadoc) * * @see com.easyview.ebook.reader.engine.core.IAction#searchGotoByResult( * BookSearchInfo.BookSearchResult result, IActionCall preDo, IActionCall * toDo) */ public void searchGotoResult(final BookSearchInfo.BookSearchResult result, IActionCall preDo, IActionCall toDo) { IActionCall action = new IActionCall() { @Override public boolean action() { iSearchGoto(result); iSearchUpdateInfo(); handleError(); return true; } }; addTask(getCurAdapter(), action, preDo, toDo); } /* * (non-Javadoc) * * @see com.easyview.ebook.reader.engine.core.IAction#quitSearch() */ public void quitSearch() { quitSearch(null, null); } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IAction#quitSearch(com.easyview.ebook * .reader.engine.core.IActionCall, * com.easyview.ebook.reader.engine.core.IActionCall) */ public void quitSearch(IActionCall preDo, IActionCall toDo) { IActionCall action = new IActionCall() { @Override public boolean action() { iQuitSearch(); handleError(); return true; } }; addTask(getCurAdapter(), action, preDo, toDo); } /* * (non-Javadoc) * * @see com.easyview.ebook.reader.engine.core.IAction#addBookmark() */ public void addBookmark() { addBookmark(null, null); } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IAction#addBookmark(com.easyview. * ebook.reader.engine.core.IActionCall, * com.easyview.ebook.reader.engine.core.IActionCall) */ public void addBookmark(IActionCall preDo, IActionCall toDo) { IActionCall action = new IActionCall() { @Override public boolean action() { iAddBookmark(); handleError(); return true; } }; addTask(getCurAdapter(), action, preDo, toDo); } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IAction#gotoBookmark(com.easyview * .ebook.reader.engine.model.BookMarkInfo.Bookmark) */ public void gotoBookmark(Bookmark bookmark) { gotoBookmark(bookmark, null, null); } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IAction#gotoBookmark(com.easyview * .ebook.reader.engine.model.BookMarkInfo.Bookmark, com.easyview * .ebook.reader.engine.core.IActionCall, * com.easyview.ebook.reader.engine.core.IActionCall) */ public void gotoBookmark(final Bookmark bookmark, IActionCall preDo, IActionCall toDo) { IActionCall action = new IActionCall() { @Override public boolean action() { iGotoBookmark(bookmark); handleError(); return true; } }; IActionCall preload = preloadAction(toDo); addTask(getCurAdapter(), action, preDo, preload); } /* * (non-Javadoc) * * @see com.easyview.ebook.reader.engine.core.IAction#gotoBookmark() */ public void gotoBookmark() { gotoBookmark(null, null); } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IAction#gotoBookmark(com.easyview * .ebook.reader.engine.core.IActionCall, * com.easyview.ebook.reader.engine.core.IActionCall) */ public void gotoBookmark(IActionCall preDo, IActionCall toDo) { IActionCall action = new IActionCall() { @Override public boolean action() { iGotoBookmark(); handleError(); return true; } }; IActionCall preload = preloadAction(toDo); addTask(getCurAdapter(), action, preDo, preload); } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IAction#deleteBookmark(com.easyview * .ebook.reader.engine.model.BookMarkInfo.Bookmark) */ public void deleteBookmark(Bookmark bookmark) { deleteBookmark(bookmark, null, null); } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IAction#deleteBookmark(com.easyview * .ebook.reader.engine.model.BookMarkInfo.Bookmark, * com.easyview.ebook.reader.engine.core.IActionCall, * com.easyview.ebook.reader.engine.core.IActionCall) */ public void deleteBookmark(final Bookmark bookmark, IActionCall preDo, IActionCall toDo) { IActionCall action = new IActionCall() { @Override public boolean action() { iDeleteBookmark(bookmark); handleError(); return true; } }; addTask(getCurAdapter(), action, preDo, toDo); } /* * (non-Javadoc) * * @see com.easyview.ebook.reader.engine.core.IAction#delAllBookmark() */ public void delAllBookmark() { delAllBookmark(null, null); } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IAction#delAllBookmark(com.easyview * .ebook.reader.engine.core.IActionCall, * com.easyview.ebook.reader.engine.core.IActionCall) */ public void delAllBookmark(IActionCall preDo, IActionCall toDo) { IActionCall action = new IActionCall() { @Override public boolean action() { iDelAllBookmark(); handleError(); return true; } }; addTask(getCurAdapter(), action, preDo, toDo); } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IAction#loadChapterInformation() */ public void loadChapterInformation() { loadChapterInformation(null, null); } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IAction#loadChapterInformation(com * .easyview.ebook.reader.engine.core.IActionCall, * com.easyview.ebook.reader.engine.core.IActionCall) */ public void loadChapterInformation(IActionCall preDo, IActionCall toDo) { IActionCall action = new IActionCall() { @Override public boolean action() { iLoadChapterInformation(); iChapterUpdateInfo(); handleError(); return true; } }; addTask(getCurAdapter(), action, preDo, toDo); } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IAction#chapterJumpByTitle(java. * lang.String) */ public void chapterJumpByTitle(final String title) { chapterJumpByTitle(title, null, null); } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IAction#chapterJumpByTitle(java. * lang.String, com.easyview.ebook.reader.engine.core.IActionCall, * com.easyview.ebook.reader.engine.core.IActionCall) */ public void chapterJumpByTitle(final String title, IActionCall preDo, IActionCall toDo) { IActionCall action = new IActionCall() { @Override public boolean action() { iChapterJumpByTitle(title); iChapterUpdateInfo(); handleError(); return true; } }; IActionCall preload = preloadAction(toDo); addTask(getCurAdapter(), action, preDo, preload); } /* * (non-Javadoc) * * @see com.easyview.ebook.reader.engine.core.IAction#chapterJumpByIndex(int) */ public void chapterJumpByIndex(final int index) { chapterJumpByIndex(index, null, null); } /* * (non-Javadoc) * * @see com.easyview.ebook.reader.engine.core.IAction#chapterJumpByIndex(int, * com.easyview.ebook.reader.engine.core.IActionCall, * com.easyview.ebook.reader.engine.core.IActionCall) */ public void chapterJumpByIndex(final int index, IActionCall preDo, IActionCall toDo) { IActionCall action = new IActionCall() { @Override public boolean action() { iChapterJumpByIndex(index); iChapterUpdateInfo(); handleError(); return true; } }; IActionCall preload = preloadAction(toDo); addTask(getCurAdapter(), action, preDo, preload); } /* * (non-Javadoc) * * @see com.easyview.ebook.reader.engine.core.IAction#chapterUp() */ public void chapterUp() { chapterUp(null, null); } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IAction#chapterUp(com.easyview.ebook * .reader.engine.core.IActionCall, * com.easyview.ebook.reader.engine.core.IActionCall) */ public void chapterUp(IActionCall preDo, IActionCall toDo) { IActionCall action = new IActionCall() { @Override public boolean action() { iChapterUp(); iChapterUpdateInfo(); handleError(); return true; } }; IActionCall preload = preloadAction(toDo); addTask(getCurAdapter(), action, preDo, preload); } /* * (non-Javadoc) * * @see com.easyview.ebook.reader.engine.core.IAction#chapterDown() */ public void chapterDown() { chapterDown(null, null); } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IAction#chapterDown(com.easyview. * ebook.reader.engine.core.IActionCall, * com.easyview.ebook.reader.engine.core.IActionCall) */ public void chapterDown(IActionCall preDo, IActionCall toDo) { IActionCall action = new IActionCall() { @Override public boolean action() { iChapterDown(); iChapterUpdateInfo(); handleError(); return true; } }; IActionCall preload = preloadAction(toDo); addTask(getCurAdapter(), action, preDo, preload); } /* * (non-Javadoc) * * @see com.easyview.ebook.reader.engine.core.IAction#closeBook() */ public void closeBook() { closeBook(null, null); } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IAction#closeBook(com.easyview.ebook * .reader.engine.core.IActionCall, * com.easyview.ebook.reader.engine.core.IActionCall) */ public void closeBook(IActionCall preDo, IActionCall toDo) { // 關閉書籍通常在onStop或onDestroy時調用,該操作 // 放在線程處理會造成程序無法調用,故直接放在UI線程處理 // IActionCall action = new IActionCall() { // @Override // public boolean action() { // Logger.vLog(TAG, "prepare close Book"); // return true; // } // }; // // IActionCall todo = closeAction(toDo); // addTask(getCurAdapter(), action, preDo, todo); closeAction(preDo, toDo).action(); Book book = getBook(); if (book != null) { book.free(); } } /* (non-Javadoc) * @see com.easyview.ebook.reader.engine.core.IAction#setScreenLandMode(boolean, int, int) */ public void resizeScreen(int viewWidth, int viewHeight) { resizeScreen(viewWidth, viewHeight, null, null); } /* (non-Javadoc) * @see com.easyview.ebook.reader.engine.core.IAction#setScreenLandMode(boolean, int, int, com.easyview.ebook.reader.engine.core.IActionCall, com.easyview.ebook.reader.engine.core.IActionCall) */ public void resizeScreen(final int viewWidth, final int viewHeight, IActionCall preDo, IActionCall toDo) { IActionCall action = new IActionCall() { @Override public boolean action() { iResizeScreen(viewWidth, viewHeight); handleError(); return true; } }; IActionCall preload = preloadAction(toDo); addTask(getCurAdapter(), action, preDo, preload); } /* * (non-Javadoc) * * @see com.easyview.ebook.reader.engine.core.IAction#openLinkByTouch(int, * int) */ public void openLinkByTouch(int x, int y) { openLinkByTouch(x, y, null, null); } /* * (non-Javadoc) * * @see com.easyview.ebook.reader.engine.core.IAction#openLinkByTouch(int, * int, com.easyview.ebook.reader.engine.core.IActionCall, * com.easyview.ebook.reader.engine.core.IActionCall) */ public void openLinkByTouch(final int x, final int y, IActionCall preDo, IActionCall toDo) { IActionCall action = new IActionCall() { @Override public boolean action() { iOpenLinkByTouch(x, y); handleError(); setTouchLock(false); return true; } }; if (!mTouchLinkLock) { IActionCall preload = preloadAction(toDo); addTask(getCurAdapter(), action, preDo, preload); setTouchLock(true); } } /* * (non-Javadoc) * * @see com.easyview.ebook.reader.engine.core.IAction#onTouchDown(double, * double) */ public void onTouchDown(final double x, final double y) { Book book = getBook(); if (book.getReaderType() == Book.ReaderType.READER_TYPE_ADOBE) { IActionCall action = new IActionCall() { @Override public boolean action() { iStartHighlightByXY(x, y); handleError(); return true; } }; addTask(getCurAdapter(), action, null, null); } else if (book.getReaderType() == Book.ReaderType.READER_TYPE_FBREADER) { iStartHighlightByXY(x, y); } } /* * (non-Javadoc) * * @see com.easyview.ebook.reader.engine.core.IAction#onTouchMove(double, * double) */ public void onTouchMove(final double x, final double y) { Book book = getBook(); if (book.getReaderType() == Book.ReaderType.READER_TYPE_ADOBE) { IActionCall action = new IActionCall() { @Override public boolean action() { iMoveHighlightByXY(x, y); handleError(); return true; } }; addTask(getCurAdapter(), action, null, null); } else if (book.getReaderType() == Book.ReaderType.READER_TYPE_FBREADER) { iMoveHighlightByXY(x, y); } } /* * (non-Javadoc) * * @see com.easyview.ebook.reader.engine.core.IAction#onTouchUp(double, * double) */ public void onTouchUp(final double x, final double y) { Book book = getBook(); if (book.getReaderType() == Book.ReaderType.READER_TYPE_ADOBE) { IActionCall action = new IActionCall() { @Override public boolean action() { iEndHighlightByXY(x, y); handleError(); return true; } }; addTask(getCurAdapter(), action, null, null); } else if (book.getReaderType() == Book.ReaderType.READER_TYPE_FBREADER) { iEndHighlightByXY(x, y); } } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IAction#delHighlight(com.easyview * .ebook.reader.engine.model.BookEmphasisInfo.BookEmphasis) */ public void delHighlight(BookEmphasis emphasis) { delHighlight(emphasis, null, null); } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IAction#delHighlight(com.easyview * .ebook.reader.engine.model.BookEmphasisInfo.BookEmphasis, * com.easyview.ebook.reader.engine.core.IActionCall, * com.easyview.ebook.reader.engine.core.IActionCall) */ public void delHighlight(final BookEmphasis emp, IActionCall preDo, IActionCall toDo) { IActionCall action = new IActionCall() { @Override public boolean action() { iDelHighlight(emp); handleError(); return true; } }; addTask(getCurAdapter(), action, preDo, toDo); } /* * (non-Javadoc) * * @see com.easyview.ebook.reader.engine.core.IAction#delAllHighlight() */ public void delAllHighlight() { delAllHighlight(null, null); } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IAction#delAllHighlight(com.easyview * .ebook.reader.engine.core.IActionCall, * com.easyview.ebook.reader.engine.core.IActionCall) */ public void delAllHighlight(IActionCall preDo, IActionCall toDo) { IActionCall action = new IActionCall() { @Override public boolean action() { iDelAllHighlight(); handleError(); return true; } }; addTask(getCurAdapter(), action, preDo, toDo); } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IAction#gotoHighlight(com.easyview * .ebook.reader.engine.model.BookEmphasisInfo.BookEmphasis) */ public void gotoHighlight(BookEmphasis emphasis) { gotoHighlight(emphasis, null, null); } /* * (non-Javadoc) * * @see * com.easyview.ebook.reader.engine.core.IAction#gotoHighlight(com.easyview * .ebook.reader.engine.model.BookEmphasisInfo.BookEmphasis, * com.easyview.ebook.reader.engine.core.IActionCall, * com.easyview.ebook.reader.engine.core.IActionCall) */ public void gotoHighlight(final BookEmphasis emphasis, IActionCall preDo, IActionCall toDo) { IActionCall action = new IActionCall() { @Override public boolean action() { iGotoHighlight(emphasis); handleError(); return true; } }; addTask(getCurAdapter(), action, preDo, toDo); } /* (non-Javadoc) * @see com.easyview.ebook.reader.engine.core.IAction#doFetchText() */ public void fetchText() { fetchText(null, null); } /* (non-Javadoc) * @see com.easyview.ebook.reader.engine.core.IAction#doFetchText(com.easyview.ebook.reader.engine.core.IActionCall, com.easyview.ebook.reader.engine.core.IActionCall) */ public void fetchText(IActionCall preDo, IActionCall toDo) { IActionCall action = new IActionCall() { @Override public boolean action() { iDoFetchText(); handleError(); return true; } }; addTask(getCurAdapter(), action, preDo, toDo); } /* * (non-Javadoc) * * @see com.easyview.ebook.reader.engine.core.IAction#cancelActions() */ public void cancelActions() { if (mTaskManager != null) { Logger.dLog(TAG, "Cancel all exists action"); mTaskManager.clearTask(); setLastCode(EngineMsgCode.ENGINE_NORMAL_TASK_CLEAR); } } /** * Sets the touch lock. * * @param lock * the new touch lock */ protected void setTouchLock(boolean lock) { mTouchLinkLock = lock; } /** * Gets the touch lock. * * @return the touch lock */ protected boolean getTouchLock() { return mTouchLinkLock; } /** * Preload action. * * @param todo * the todo * @return the i action call */ protected IActionCall preloadAction(final IActionCall todo) { IActionCall action = new IActionCall() { @Override public boolean action() { IActionCall preload = new IActionCall() { @Override public boolean action() { boolean preload = mEngine.getConfig().getPreloadMode(); if (preload) { preloadPage(); } return true; } }; addTask(getCurAdapter(), preload, null, null); if (todo != null) { todo.action(); } return true; } }; return action; } /** * Preload previous page action. * * @param todo * the todo * @return the i action call */ protected IActionCall preloadPreviousPageAction(final IActionCall todo) { IActionCall action = new IActionCall() { @Override public boolean action() { IActionCall preload = new IActionCall() { @Override public boolean action() { boolean preload = mEngine.getConfig().getPreloadMode(); if (preload) { preloadPreviousPage(); } return true; } }; addTask(getCurAdapter(), preload, null, null); if (todo != null) { todo.action(); } return true; } }; return action; } /** * Preload next page action. * * @param todo * the todo * @return the i action call */ protected IActionCall preloadNextPageAction(final IActionCall todo) { IActionCall action = new IActionCall() { @Override public boolean action() { IActionCall preload = new IActionCall() { @Override public boolean action() { boolean preload = mEngine.getConfig().getPreloadMode(); if (preload) { preloadNextPage(); } return true; } }; addTask(getCurAdapter(), preload, null, null); if (todo != null) { todo.action(); } return true; } }; return action; } /** * Close action. * * @param preDo * the pre do * @param todo * the todo * @return the i action call */ protected IActionCall closeAction(final IActionCall preDo, final IActionCall todo) { IActionCall action = new IActionCall() { @Override public boolean action() { Logger.vLog(TAG, "call closeAction()"); if (preDo != null) { preDo.action(); } iCloseBook(); handleError(); if (todo != null) { todo.action(); } return true; } }; return action; } /** * Instantiates a new reader wrapper. */ protected ReaderWrapper() { if (null == mEngine) { mEngine = EREngine.getInterface(); } if (null == mTaskManager) { mTaskManager = TaskManager.getInstance(); } if (null == mEngineError) { mEngineError = EngineCode.getInstance(); } setBitmapConfig(EREngine.getInterface().getRender().getBitmapConfig()); setDefaultVal(); } /** * Free. */ protected void free() { if (mTaskManager != null) { mTaskManager.free(); mTaskManager = null; } if (mEngineError != null) { mEngineError.free(); mEngineError = null; } if (mEngine != null) { mEngine = null; } Logger.dLog(TAG, "ReaderWrapper free mTaskManager: " + mTaskManager + " mErrorCode: " + mEngineError); } /** * Sets the book. * * @param book * the new book */ protected void setBook(Book book) { mOpenedBook = book; updateFromConfig(mEngine.getConfig()); } /** * Gets the book. * * @return the book */ protected Book getBook() { return mOpenedBook; } /** * Gets the engine. * * @return the engine */ protected EREngine getEngine() { return mEngine; } /** * Checks if is border. * * @return true, if is border */ protected boolean isBorder() { return mIsBorder; } /** * Sets the border. * * @param border * the new border */ protected void setBorder(boolean border) { mIsBorder = border; } /** * Can work. * * @return true, if successful */ protected boolean canWork() { if ((null == getCurAdapter()) || (null == mOpenedBook)) { Logger.eLog(TAG, "mOpenedBook: " + mOpenedBook); setLastCode(EngineMsgCode.ENGINE_ERROR_ENGINE_ERROR); return false; } if (!mOpenedBook.isExists()) { Logger.dLog(TAG, "mOpenedBook is not exists "); setLastCode(EngineMsgCode.ENGINE_ERROR_BOOK_NOT_EXISTS); return false; } if (!mOpenedBook.isValid()) { Logger.dLog(TAG, "mOpenedBook is not valid"); setLastCode(EngineMsgCode.ENGINE_ERROR_BOOK_INVALID); return false; } return true; } /** * Save book db. * * @return true, if successful * @throws Exception * the exception */ protected boolean saveBookDB() throws Exception { if (!canWork()) { Logger.eLog(TAG, "assertWork == null"); return false; } boolean res = false; IRecorder recorder = mEngine.getRecorder(); if (recorder != null) { res = recorder.saveBookDb(mOpenedBook); } if (!res) { setLastCode(EngineMsgCode.STATE_ERROR_DB_SAVE_BOOK_FAILED); } return res; } /** * Load book db. * * @return true, if successful * @throws Exception * the exception */ protected boolean loadBookDB() throws Exception { if (!canWork()) { Logger.eLog(TAG, "assertWork == null"); return false; } boolean res = false; IRecorder recorder = mEngine.getRecorder(); EngineConfig config = mEngine.getConfig(); if ((config != null) && !config.getAutoLoadDB()) { return false; } if (recorder != null) { res = recorder.loadBookDb(mOpenedBook); } if (!res) { setLastCode(EngineMsgCode.STATE_ERROR_DB_LOAD_BOOK_FAILED); } return res; } /** * Adds the book mark db. * * @param bookmark * the bookmark * @return true, if successful * @throws Exception * the exception */ protected boolean addBookMarkDB(Bookmark bookmark) throws Exception { if (!canWork()) { Logger.eLog(TAG, "assertWork == null"); return false; } boolean res = false; IRecorder recorder = mEngine.getRecorder(); if (recorder != null) { res = recorder.addBookMarkDb(bookmark); } if (!res) { setLastCode(EngineMsgCode.STATE_ERROR_DB_ADD_BOOKMARK_FAILED); } return res; } /** * Del book mark db. * * @param bookmark * the bookmark * @return true, if successful * @throws Exception * the exception */ protected boolean delBookMarkDB(Bookmark bookmark) throws Exception { if (!canWork()) { Logger.eLog(TAG, "assertWork == null"); return false; } boolean res = false; IRecorder recorder = mEngine.getRecorder(); if (recorder != null) { res = recorder.delBookMarkDb(bookmark); } if (!res) { setLastCode(EngineMsgCode.STATE_ERROR_DB_DEL_BOOKMARK_FAILED); } return res; } /** * Clean book mark db. * * @return true, if successful * @throws Exception * the exception */ protected boolean cleanBookMarkDB() throws Exception { if (!canWork()) { Logger.eLog(TAG, "assertWork == null"); return false; } boolean res = false; IRecorder recorder = mEngine.getRecorder(); if (recorder != null) { res = recorder.cleanBookMarkDb(mOpenedBook); } if (!res) { setLastCode(EngineMsgCode.STATE_ERROR_DB_CLEAN_BOOKMARK_FAILED); } return res; } /** * Adds the book emphasis db. * * @param emphasis * the emphasis * @return true, if successful * @throws Exception * the exception */ protected boolean addBookEmphasisDB(BookEmphasis emphasis) throws Exception { if (!canWork()) { Logger.eLog(TAG, "assertWork == null"); return false; } boolean res = false; IRecorder recorder = mEngine.getRecorder(); if (recorder != null) { res = recorder.addBookEmphasisDb(emphasis); } if (!res) { setLastCode(EngineMsgCode.STATE_ERROR_DB_ADD_EMPHASIS_FAILED); } return res; } /** * Del book emphasis db. * * @param emphasis * the emphasis * @return true, if successful * @throws Exception * the exception */ protected boolean delBookEmphasisDB(BookEmphasis emphasis) throws Exception { if (!canWork()) { Logger.eLog(TAG, "assertWork == null"); return false; } boolean res = false; IRecorder recorder = mEngine.getRecorder(); if (recorder != null) { res = recorder.delBookEmphasisDb(emphasis); } if (!res) { setLastCode(EngineMsgCode.STATE_ERROR_DB_DEL_EMPHASIS_FAILED); } return res; } /** * Clean book emphasis db. * * @return true, if successful * @throws Exception * the exception */ protected boolean cleanBookEmphasisDB() throws Exception { if (!canWork()) { Logger.eLog(TAG, "assertWork == null"); return false; } boolean res = false; IRecorder recorder = mEngine.getRecorder(); if (recorder != null) { res = recorder.cleanBookEmphasisDb(mOpenedBook); } if (!res) { setLastCode(EngineMsgCode.STATE_ERROR_DB_CLEAN_EMPHASIS_FAILED); } return res; } /** * Update view enabled. * * @return true, if successful */ protected boolean updateViewEnabled() { return mEngine.getUpdateViewEnabled(); } /** * Update view. */ protected void updateView() { if (updateViewEnabled() && !isBorder()) { Logger.eLog(TAG, "updateView --- debug show"); mEngine.getMessageHandler().sendMessage(EngineHandler.UPDATE_VIEW); } else { Logger.eLog(TAG, "updateView --- debug not show"); } } /** * Update config. * * @param config * the config */ protected void updateFromConfig(EngineConfig config) { if (mOpenedBook != null) { mOpenedBook.updateFromConfig(config); } } /** * Gets the task manager. * * @return the task manager */ protected TaskManager getTaskManager() { return mTaskManager; } /** * Gets the engine error. * * @return the engine error */ protected EngineCode getEngineError() { return mEngineError; } /** * Checks for error. * * @param code * the code * @return true, if successful */ protected boolean hasError(int code) { if (!mEngineError.noError(code)) { return true; } return false; } /** * Gets the last code. * * @return the last code */ protected int getLastCode() { if (mEngineError != null) { return mEngineError.getLastCode(); } return EngineCode.EngineMsgCode.ENGINE_ERROR_CODE_ERROR; } /** * Sets the last code. * * @param code * the new last code */ protected void setLastCode(int code) { if (mEngineError != null) { mEngineError.setLastCode(code); } } /** * Handle error. */ protected void handleError() { if (mEngineError != null) { int code = mEngineError.getLastCode(); if (!mEngineError.noError(code)) { Message msg = Message.obtain(); msg.what = EngineCode.ErrroHandler.EXECUTE_HANDLER; msg.arg1 = code; mEngineError.getMessageHandler().sendMessage(msg); } } } /** * Adds the task. * * @param adapter * the adapter * @param action * the action * @param predo * the predo * @param todo * the todo */ protected void addTask(DecAdapter adapter, IActionCall action, IActionCall predo, IActionCall todo) { ActionTask task; mLastTodoAction = todo; mLastPredoAction = predo; if (mAutoExecuteTodoAction) { task = new ActionTask(action, predo, todo); } else { task = new ActionTask(action, null, null); } task.setDecAdapter(adapter); mTaskManager.put(task); } /** * Exec last todo action. */ protected void execLastTodoAction() { if (mLastTodoAction != null) { mLastTodoAction.action(); handleError(); } mLastTodoAction = null; } /** * Exec last predo action. */ protected void execLastPredoAction() { if (mLastPredoAction != null) { mLastPredoAction.action(); handleError(); } mLastPredoAction = null; } /** * Gets the last todo action. * * @return the last todo action */ protected IActionCall getLastTodoAction() { return mLastTodoAction; } /** * Gets the last predo action. * * @return the last predo action */ protected IActionCall getLastPredoAction() { return mLastPredoAction; } /** * Sets the auto exec todo action. * * @param auto * the new auto exec todo action */ protected void setAutoExecTodoAction(boolean auto) { mAutoExecuteTodoAction = auto; } /** * Gets the auto exec todo action. * * @return the auto exec todo action */ protected boolean getAutoExecTodoAction() { return mAutoExecuteTodoAction; } /** * Sets the land mode. * * @param land * the new land mode */ protected void setLandMode(boolean land) { mLandMode = land; } /** * Gets the land mode. * * @return the land mode */ protected boolean getLandMode() { return mLandMode; } /** * Sets the cur font level. * * @param level * the new cur font level */ protected void setCurFontLevel(int level) { mCurFontLevel = level; } /** * Gets the cur font level. * * @return the cur font level */ protected int getCurFontLevel() { return mCurFontLevel; } /** * Sets the bitmap config. * * @param config the new bitmap config */ protected void setBitmapConfig(Bitmap.Config config) { mBitmapConfig = config; } /** * Gets the bitmap config. * * @return the bitmap config */ protected Bitmap.Config getBitmapConfig() { return mBitmapConfig; } /** * Sets the default val. */ abstract protected void setDefaultVal(); /** * Gets the cur adapter. * * @return the cur adapter */ abstract protected DecAdapter getCurAdapter(); /** * I close book. */ abstract protected void iCloseBook(); /** * I load book. * * @return true, if successful */ abstract protected boolean iLoadBook(); /** * I enter search mode. */ abstract protected void iEnterSearchMode(); /** * I search go next. */ abstract protected void iSearchGoNext(); /** * I search goto. * * @param result the result */ abstract protected void iSearchGoto(BookSearchResult result); /** * I search go previous. */ abstract protected void iSearchGoPrevious(); /** * I search update info. */ abstract protected void iSearchUpdateInfo(); /** * I quit search. */ abstract protected void iQuitSearch(); /** * I add bookmark. */ abstract protected void iAddBookmark(); /** * I goto bookmark. * * @param bookmark the bookmark */ abstract protected void iGotoBookmark(Bookmark bookmark); /** * I goto bookmark. */ abstract protected void iGotoBookmark(); /** * I delete bookmark. * * @param bookmark * the bookmark */ abstract protected void iDeleteBookmark(Bookmark bookmark); /** * I del all bookmark. */ abstract protected void iDelAllBookmark(); /** * I load chapter information. */ abstract protected void iLoadChapterInformation(); /** * I chapter jump by title. * * @param title * the title */ abstract protected void iChapterJumpByTitle(String title); /** * I chapter jump by index. * * @param index * the index */ abstract protected void iChapterJumpByIndex(int index); /** * I chapter up. */ abstract protected void iChapterUp(); /** * I chapter down. */ abstract protected void iChapterDown(); /** * I chapter update info. */ abstract protected void iChapterUpdateInfo(); /** * I page up. * * @return true, if successful */ abstract protected boolean iPageUp(); /** * I page down. * * @return true, if successful */ abstract protected boolean iPageDown(); /** * I page jump to. * * @param pageNum * the page num * @return true, if successful */ abstract protected boolean iPageJumpTo(int pageNum); /** * I page zoom level. * * @param lv the lv * @return true, if successful */ abstract protected boolean iPageZoomLevel(int lv); /** * I page zoom in. * * @return true, if successful */ abstract protected boolean iPageZoomIn(); /** * I page zoom out. * * @return true, if successful */ abstract protected boolean iPageZoomOut(); /** * I open link by touch. * * @param x * the x * @param y * the y * @return true, if successful */ abstract protected boolean iOpenLinkByTouch(int x, int y); /** * I set screen land mode. * * @param land * the land * @return true, if successful */ abstract protected boolean iResizeScreen(int width, int height); /** * I start highlight by xy. * * @param x1 * the x1 * @param y1 * the y1 * @return true, if successful */ abstract protected boolean iStartHighlightByXY(double x1, double y1); /** * I move highlight by xy. * * @param x * the x * @param y * the y * @return true, if successful */ abstract protected boolean iMoveHighlightByXY(double x, double y); /** * I end highlight by xy. * * @param x * the x * @param y * the y * @return true, if successful */ abstract protected boolean iEndHighlightByXY(double x, double y); /** * I del highlight. * * @param emphasis * the emphasis * @return true, if successful */ abstract protected boolean iDelHighlight(BookEmphasis emphasis); /** * I goto highlight. * * @param emphasis * the emphasis * @return true, if successful */ abstract protected boolean iGotoHighlight(BookEmphasis emphasis); /** * I do fetch text. * * @return true, if successful */ abstract protected boolean iDoFetchText(); /** * I del all highlight. * * @return true, if successful */ abstract protected boolean iDelAllHighlight(); /** * Preload page. */ abstract protected void preloadPage(); /** * Preload previous page. * * @return true, if successful */ abstract protected boolean preloadPreviousPage(); /** * Preload next page. * * @return true, if successful */ abstract protected boolean preloadNextPage(); }