package com.ladjzero.uzlee;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.webkit.ConsoleMessage;
import android.webkit.JavascriptInterface;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import com.ladjzero.hipda.User;
import com.ladjzero.uzlee.utils.Timeline;
import com.ladjzero.uzlee.utils.UilUtils;
import com.ladjzero.uzlee.utils.Utils;
import com.orhanobut.logger.Logger;
/**
* Created by chenzhuo on 15-10-4.
*/
public abstract class ActivityWithWebView extends ActivityHardSlide implements ActivityBase.OnToolbarClickListener {
private final static String TAG = "ActivityWithWebView";
private boolean initialized;
private boolean cancelImage;
private Timeline mTimeline = new Timeline();
@JavascriptInterface
public void onProfileClick(int uid, String name) {
if (getWebView().finishActionMode()) return;
User me = App.getInstance().getCore().getLocalApi().getUser();
if (me == null || me.getId() == 0) {
showToast(getResources().getString(R.string.error_login_required));
} else {
// showToast("user id is " + uid);
Intent intent = new Intent(this, ActivityUser.class);
intent.putExtra("uid", uid);
intent.putExtra("name", name);
startActivity(intent);
}
}
@Override
protected void onDestroy() {
super.onDestroy();
cancelImage = true;
}
@JavascriptInterface
public void onImageClick(String src) {
if (getWebView().finishActionMode()) return;
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(UilUtils.getInstance().getFile(src)), "image/*");
startActivity(intent);
}
public void onWebViewReady() {
Logger.i("WebView is ready.");
}
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
Logger.t(Timeline.TAG).i("%dms", mTimeline.timeLine());
}
@Override
protected void onResume() {
super.onResume();
setupWebView();
}
public void setupWebView() {
if (!initialized) {
final WebView2 webView = getWebView();
webView.addJavascriptInterface(this, "UZLEE");
webView.setWebViewClient(new WebView2.ImageCacheClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
Logger.t(Timeline.TAG).i("%dms", mTimeline.timeLine());
}
@Override
protected boolean isCancelled() {
return cancelImage;
}
@Override
public boolean shouldDownloadImage() {
return App.getInstance().shouldDownloadImage();
}
@Override
public void onPageFinished(WebView view, String url) {
Logger.t(Timeline.TAG).i("%dms", mTimeline.timeLine());
super.onPageFinished(view, url);
webView.clearCache(true);
onWebViewReady();
}
});
webView.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onConsoleMessage(ConsoleMessage cm) {
Logger.t("WebView").d(cm.message());
return true;
}
});
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setAppCacheEnabled(false);
settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
// All images loadings will handled by WebViewClient.
settings.setBlockNetworkLoads(true);
webView.setBackgroundColor(Utils.getThemeColor(this, android.R.attr.colorBackground));
webView.loadUrl(getHTMLFilePath());
initialized = true;
}
}
public abstract WebView2 getWebView();
public abstract String getHTMLFilePath();
@Override
public void toolbarClick() {
getWebView().scrollTo(0, 0);
}
protected boolean shouldInterceptRequest(String uri) {
return uri.startsWith("http") && (uri.endsWith(".jpg") || uri.endsWith(".jpeg") || uri.endsWith(".png") || uri.endsWith(".gif"));
}
protected String getMimeType(String uri) {
if (uri.endsWith(".jpg") && uri.endsWith(".jpeg")) {
return "image/jpeg";
} else if (uri.endsWith(".png")) {
return "image/png";
} else if (uri.endsWith(".gif")) {
return "image/gif";
} else {
return "image/*";
}
}
}