package com.erakk.lnreader.helper;
import android.util.Log;
import android.view.View;
import android.webkit.ConsoleMessage;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.widget.ProgressBar;
import com.erakk.lnreader.R;
import com.erakk.lnreader.UI.activity.DisplayLightNovelContentActivity;
import com.erakk.lnreader.UIHelper;
import com.erakk.lnreader.dao.NovelsDao;
import com.erakk.lnreader.model.BookmarkModel;
import java.lang.ref.WeakReference;
public class BakaTsukiWebChromeClient extends WebChromeClient {
private static final String TAG = BakaTsukiWebChromeClient.class.toString();
private static final String HIGHLIGHT_EVENT = "HIGHLIGHT_EVENT";
private static final String ADD = "highlighted";
private static final String REMOVE = "clear";
private static final String SCROLL_EVENT = "SCROLL_EVENT";
private static final String LOAD_COMPLETE_EVENT = "LOAD_COMPLETE_EVENT";
private static final String SPEAK_EVENT = "SPEAK_EVENT";
private int oldScrollY = 0;
protected WeakReference<DisplayLightNovelContentActivity> activityRef;
private static String lastLog = "";
public BakaTsukiWebChromeClient(DisplayLightNovelContentActivity caller) {
super();
this.activityRef = new WeakReference<DisplayLightNovelContentActivity>(caller);
}
@Override
public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
final DisplayLightNovelContentActivity caller = activityRef.get();
if (caller == null)
return false;
try {
if (consoleMessage.message().startsWith(HIGHLIGHT_EVENT)) {
Log.d(TAG, "Highlight Event");
String data[] = consoleMessage.message().split(":");
try {
int pIndex = Integer.parseInt(data[1]);
BookmarkModel bookmark = new BookmarkModel();
bookmark.setPage(caller.content.getPage());
bookmark.setpIndex(pIndex);
if (data[2].equalsIgnoreCase(ADD)) {
bookmark.setExcerpt(data[3].trim());
NovelsDao.getInstance().addBookmark(bookmark);
} else if (data[2].equalsIgnoreCase(REMOVE)) {
NovelsDao.getInstance().deleteBookmark(bookmark);
}
caller.refreshBookmarkData();
} catch (NumberFormatException ex) {
Log.e(TAG, "Error when parsing pIndex: " + ex.getMessage(), ex);
}
} else if (consoleMessage.message().startsWith(SCROLL_EVENT)) {
// Log.d(TAG, "Scroll Event");
String data[] = consoleMessage.message().split(":");
if (data.length > 1 && data[1] != null) {
caller.updateLastLine(Integer.parseInt(data[1]));
String message = "" + data[0] + " " + data[1];
// suppress log message if the same
if (!lastLog.equalsIgnoreCase(message)) {
Log.d(TAG, message);
lastLog = message;
}
int newScrollY = Integer.parseInt(data[1]);
if (UIHelper.getDynamicButtonsPreferences(caller)) {
if (oldScrollY < newScrollY) {
caller.toggleTopButton(false);
caller.toggleBottomButton(true);
} else if (oldScrollY > newScrollY) {
caller.toggleBottomButton(false);
caller.toggleTopButton(true);
}
}
oldScrollY = newScrollY;
}
} else if (consoleMessage.message().startsWith(LOAD_COMPLETE_EVENT)) {
Log.d(TAG, "Console: " + consoleMessage.lineNumber() + ":" + consoleMessage.message());
caller.notifyLoadComplete();
} else if (consoleMessage.message().startsWith(SPEAK_EVENT)) {
String data[] = consoleMessage.message().split(":", 2);
caller.sendHtmlForSpeak(data[1]);
} else {
Log.w(TAG, "Console: " + consoleMessage.lineNumber() + ":" + consoleMessage.message());
}
} catch (Exception ex2) {
Log.e(TAG, "Unknown error when parsing data: " + consoleMessage.message(), ex2);
}
return true;
}
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
Log.d(TAG, "JSAlert: " + message);
return true;
}
private int scrollY;
private boolean requireScroll = false;
public void setScrollY(int y) {
this.scrollY = y;
this.requireScroll = true;
}
@Override
public void onProgressChanged(WebView view, int progress) {
Log.d(TAG, "Progress: " + progress);
final DisplayLightNovelContentActivity caller = activityRef.get();
if (caller != null) {
ProgressBar progressBar = (ProgressBar) caller.findViewById(R.id.loadProgress);
if (progressBar != null) {
if (progress < 100) {
progressBar.setVisibility(View.VISIBLE);
progressBar.setProgress(progress);
} else {
progressBar.setVisibility(View.GONE);
if(this.requireScroll) {
view.scrollTo(0, this.scrollY);
this.requireScroll = false;
}
}
}
}
}
}