package net.bible.android.view.activity.page; import android.util.Log; import android.webkit.JavascriptInterface; import net.bible.android.control.PassageChangeMediator; import net.bible.android.control.page.window.WindowControl; import net.bible.android.view.activity.page.actionmode.VerseActionModeMediator; /** * Interface allowing javascript to call java methods in app * * @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 BibleJavascriptInterface { private boolean notificationsEnabled = false; private VerseCalculator verseCalculator; private final VerseActionModeMediator verseActionModeMediator; private final WindowControl windowControl; private static final String TAG = "BibleJavascriptIntrfc"; public BibleJavascriptInterface(VerseActionModeMediator verseActionModeMediator, WindowControl windowControl, VerseCalculator verseCalculator) { this.verseActionModeMediator = verseActionModeMediator; this.windowControl = windowControl; this.verseCalculator = verseCalculator; } @JavascriptInterface public void onLoad() { Log.d(TAG, "onLoad from js"); } @JavascriptInterface public void onScroll(int newYPos) { // do not try to change verse while the page is changing - can cause all sorts of errors e.g. selected verse may not be valid in new chapter and cause chapter jumps if (notificationsEnabled && !PassageChangeMediator.getInstance().isPageChanging() && !windowControl.isSeparatorMoving()) { verseCalculator.newPosition(newYPos); } } @JavascriptInterface public void clearVersePositionCache() { Log.d(TAG, "clear verse positions"); verseCalculator.init(); } @JavascriptInterface public void registerVersePosition(String verseId, int offset) { verseCalculator.registerVersePosition(Integer.valueOf(verseId), offset); } @JavascriptInterface public void verseLongPress(int verse) { Log.d(TAG, "Verse selected event:"+verse); verseActionModeMediator.verseLongPress(verse); } @JavascriptInterface public void verseTouch(int verse) { Log.d(TAG, "Verse touched event:"+verse); verseActionModeMediator.verseTouch(verse); } @JavascriptInterface public void log(String msg) { Log.d(TAG, msg); } public void setNotificationsEnabled(boolean notificationsEnabled) { this.notificationsEnabled = notificationsEnabled; } }