package org.cnodejs.android.md.ui.widget;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.content.Context;
import android.content.res.TypedArray;
import android.os.Build;
import android.support.annotation.AttrRes;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.StyleRes;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import org.cnodejs.android.md.R;
import org.cnodejs.android.md.ui.util.Navigator;
public abstract class CNodeWebView extends WebView {
private final WebViewClient webViewClient = new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView webView, String url) {
if (!TextUtils.isEmpty(url) && !Navigator.openStandardLink(webView.getContext(), url)) {
Navigator.openInBrowser(webView.getContext(), url);
}
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
CNodeWebView.this.onPageFinished(url);
}
};
private boolean darkTheme;
public CNodeWebView(@NonNull Context context) {
super(context);
init(context, null, 0, 0);
}
public CNodeWebView(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init(context, attrs, 0, 0);
}
public CNodeWebView(@NonNull Context context, @Nullable AttributeSet attrs, @AttrRes int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context, attrs, defStyleAttr, 0);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public CNodeWebView(@NonNull Context context, @Nullable AttributeSet attrs, @AttrRes int defStyleAttr, @StyleRes int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init(context, attrs, defStyleAttr, defStyleRes);
}
@SuppressLint("SetJavaScriptEnabled")
private void init(@NonNull Context context, @Nullable AttributeSet attrs, @AttrRes int defStyleAttr, @StyleRes int defStyleRes) {
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CNodeWebView, defStyleAttr, defStyleRes);
darkTheme = a.getBoolean(R.styleable.CNodeWebView_darkTheme, false);
a.recycle();
getSettings().setJavaScriptEnabled(true);
setWebViewClient(webViewClient);
}
public boolean isDarkTheme() {
return darkTheme;
}
protected void onPageFinished(String url) {}
}