正在查看: Easycash v3.75.13 应用的 MarkdownView.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
正在查看: Easycash v3.75.13 应用的 MarkdownView.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
package br.tiagohm.markdownview;
import android.content.Context;
import android.content.res.TypedArray;
import android.os.AsyncTask;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.webkit.JavascriptInterface;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import br.tiagohm.markdownview.css.ExternalStyleSheet;
import br.tiagohm.markdownview.css.StyleSheet;
import br.tiagohm.markdownview.ext.button.ButtonExtension;
import br.tiagohm.markdownview.ext.emoji.EmojiExtension;
import br.tiagohm.markdownview.ext.kbd.Keystroke;
import br.tiagohm.markdownview.ext.kbd.KeystrokeExtension;
import br.tiagohm.markdownview.ext.label.LabelExtension;
import br.tiagohm.markdownview.ext.localization.LocalizationExtension;
import br.tiagohm.markdownview.ext.mark.Mark;
import br.tiagohm.markdownview.ext.mark.MarkExtension;
import br.tiagohm.markdownview.ext.mathjax.MathJax;
import br.tiagohm.markdownview.ext.mathjax.MathJaxExtension;
import br.tiagohm.markdownview.ext.twitter.TwitterExtension;
import br.tiagohm.markdownview.ext.video.VideoLinkExtension;
import br.tiagohm.markdownview.js.ExternalScript;
import br.tiagohm.markdownview.js.JavaScript;
import com.orhanobut.logger.Logger;
import com.sensorsdata.analytics.android.sdk.jsbridge.JSHookAop;
import com.vladsch.flexmark.Extension;
import com.vladsch.flexmark.ast.AutoLink;
import com.vladsch.flexmark.ast.FencedCodeBlock;
import com.vladsch.flexmark.ast.Heading;
import com.vladsch.flexmark.ast.Image;
import com.vladsch.flexmark.ast.Link;
import com.vladsch.flexmark.ast.Node;
import com.vladsch.flexmark.ast.util.TextCollectingVisitor;
import com.vladsch.flexmark.ext.abbreviation.Abbreviation;
import com.vladsch.flexmark.ext.abbreviation.AbbreviationExtension;
import com.vladsch.flexmark.ext.autolink.AutolinkExtension;
import com.vladsch.flexmark.ext.footnotes.FootnoteExtension;
import com.vladsch.flexmark.ext.gfm.strikethrough.StrikethroughSubscriptExtension;
import com.vladsch.flexmark.ext.gfm.tasklist.TaskListExtension;
import com.vladsch.flexmark.ext.tables.TablesExtension;
import com.vladsch.flexmark.html.AttributeProvider;
import com.vladsch.flexmark.html.CustomNodeRenderer;
import com.vladsch.flexmark.html.HtmlRenderer;
import com.vladsch.flexmark.html.HtmlWriter;
import com.vladsch.flexmark.html.IndependentAttributeProviderFactory;
import com.vladsch.flexmark.html.renderer.AttributablePart;
import com.vladsch.flexmark.html.renderer.LinkType;
import com.vladsch.flexmark.html.renderer.NodeRenderer;
import com.vladsch.flexmark.html.renderer.NodeRendererContext;
import com.vladsch.flexmark.html.renderer.NodeRendererFactory;
import com.vladsch.flexmark.html.renderer.NodeRenderingHandler;
import com.vladsch.flexmark.html.renderer.ResolvedLink;
import com.vladsch.flexmark.parser.Parser;
import com.vladsch.flexmark.superscript.SuperscriptExtension;
import com.vladsch.flexmark.util.html.Attributes;
import com.vladsch.flexmark.util.html.Escaping;
import com.vladsch.flexmark.util.options.DataHolder;
import com.vladsch.flexmark.util.options.MutableDataHolder;
import com.vladsch.flexmark.util.options.MutableDataSet;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
public class MarkdownView extends WebView {
public static final JavaScript f1077f = new ExternalScript("file:///android_asset/js/jquery-3.4.1.min.js", false, false);
public static final JavaScript f1078g = new ExternalScript("file:///android_asset/js/highlight.js", false, true);
public static final JavaScript f1079h = new ExternalScript("https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_CHTML", false, true);
public static final JavaScript f1080i = new ExternalScript("file:///android_asset/js/highlight-init.js", false, true);
public static final JavaScript f1081j = new ExternalScript("file:///android_asset/js/mathjax-config.js", false, true);
public static final JavaScript f1082k = new ExternalScript("file:///android_asset/js/tooltipster.bundle.min.js", false, true);
public static final JavaScript l = new ExternalScript("file:///android_asset/js/tooltipster-init.js", false, true);
public static final StyleSheet m = new ExternalStyleSheet("file:///android_asset/css/tooltipster.bundle.min.css");
private static final List<Extension> n = Arrays.asList(TablesExtension.e(), TaskListExtension.e(), AbbreviationExtension.e(), AutolinkExtension.e(), MarkExtension.e(), StrikethroughSubscriptExtension.e(), SuperscriptExtension.e(), KeystrokeExtension.e(), MathJaxExtension.e(), FootnoteExtension.e(), EmojiExtension.e(), VideoLinkExtension.e(), TwitterExtension.e(), LabelExtension.e(), ButtonExtension.e(), LocalizationExtension.e());
private final DataHolder f1083a;
private final List<StyleSheet> f1084b;
private final HashSet<JavaScript> f1085c;
private boolean f1086d;
private OnElementListener f1087e;
public class CustomAttributeProvider implements AttributeProvider {
public CustomAttributeProvider() {
}
public void a(Node node, AttributablePart attributablePart, Attributes attributes) {
if (node instanceof FencedCodeBlock) {
if (attributablePart.a().equals("NODE")) {
String obj = ((FencedCodeBlock) node).Z0().toString();
if (TextUtils.isEmpty(obj) || obj.equals("nohighlight")) {
return;
}
MarkdownView.this.b(MarkdownView.f1078g);
MarkdownView.this.b(MarkdownView.f1080i);
attributes.a("language", obj);
attributes.a("onclick", String.format("javascript:android.onCodeTap('%s', this.textContent);", obj));
return;
}
return;
}
if (node instanceof MathJax) {
MarkdownView.this.b(MarkdownView.f1079h);
MarkdownView.this.b(MarkdownView.f1081j);
return;
}
if (node instanceof Abbreviation) {
MarkdownView.this.b(MarkdownView.f1082k);
MarkdownView.this.c(MarkdownView.m);
MarkdownView.this.b(MarkdownView.l);
attributes.a("class", "tooltip");
return;
}
if (node instanceof Heading) {
Heading heading = (Heading) node;
attributes.a("onclick", String.format("javascript:android.onHeadingTap(%d, '%s');", Integer.valueOf(heading.Z0()), heading.a1()));
return;
}
if (node instanceof Image) {
attributes.a("onclick", String.format("javascript: android.onImageTap(this.src, this.clientWidth, this.clientHeight);", new Object[0]));
return;
}
if (node instanceof Mark) {
attributes.a("onclick", String.format("javascript: android.onMarkTap(this.textContent)", new Object[0]));
return;
}
if (node instanceof Keystroke) {
attributes.a("onclick", String.format("javascript: android.onKeystrokeTap(this.textContent)", new Object[0]));
} else if ((node instanceof Link) || (node instanceof AutoLink)) {
attributes.a("onclick", String.format("javascript: android.onLinkTap(this.href, this.textContent)", new Object[0]));
}
}
}
protected class EventDispatcher {
protected EventDispatcher() {
}
@JavascriptInterface
public void onButtonTap(String str) {
if (MarkdownView.this.f1087e != null) {
MarkdownView.this.f1087e.b(str);
}
}
@JavascriptInterface
public void onCodeTap(String str, String str2) {
if (MarkdownView.this.f1087e != null) {
MarkdownView.this.f1087e.c(str, str2);
}
}
@JavascriptInterface
public void onHeadingTap(int i2, String str) {
if (MarkdownView.this.f1087e != null) {
MarkdownView.this.f1087e.f(i2, str);
}
}
@JavascriptInterface
public void onImageTap(String str, int i2, int i3) {
if (MarkdownView.this.f1087e != null) {
MarkdownView.this.f1087e.d(str, i2, i3);
}
}
@JavascriptInterface
public void onKeystrokeTap(String str) {
if (MarkdownView.this.f1087e != null) {
MarkdownView.this.f1087e.a(str);
}
}
@JavascriptInterface
public void onLinkTap(String str, String str2) {
if (MarkdownView.this.f1087e != null) {
MarkdownView.this.f1087e.g(str, str2);
}
}
@JavascriptInterface
public void onMarkTap(String str) {
if (MarkdownView.this.f1087e != null) {
MarkdownView.this.f1087e.e(str);
}
}
}
private class LoadMarkdownUrlTask extends AsyncTask<String, Void, String> {
final MarkdownView f1091a;
@Override
public String doInBackground(String... strArr) {
InputStream inputStream = null;
try {
try {
URLConnection openConnection = new URL(strArr[0]).openConnection();
openConnection.setReadTimeout(5000);
openConnection.setConnectTimeout(5000);
openConnection.setRequestProperty("Accept-Charset", "UTF-8");
inputStream = openConnection.getInputStream();
String a2 = Utils.a(inputStream);
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e2) {
e2.printStackTrace();
}
}
return a2;
} catch (Exception e3) {
e3.printStackTrace();
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e4) {
e4.printStackTrace();
}
}
return "";
}
} catch (Throwable th) {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e5) {
e5.printStackTrace();
}
}
throw th;
}
}
@Override
public void onPostExecute(String str) {
this.f1091a.d(str);
}
}
public static class NodeRendererFactoryImpl implements NodeRendererFactory {
public NodeRenderer b(DataHolder dataHolder) {
return new NodeRenderer() {
public Set<NodeRenderingHandler<?>> c() {
HashSet hashSet = new HashSet();
hashSet.add(new NodeRenderingHandler(Image.class, new CustomNodeRenderer<Image>() {
public void a(Image image, NodeRendererContext nodeRendererContext, HtmlWriter htmlWriter) {
if (nodeRendererContext.d()) {
return;
}
String g2 = new TextCollectingVisitor().g(image);
ResolvedLink c2 = nodeRendererContext.c(LinkType.c, image.V0().O(), (Boolean) null);
String d2 = c2.d();
if (!image.b1().isEmpty()) {
d2 = d2 + Escaping.j(image.b1()).replace("+", "%2B").replace("%3D", "=").replace("%26", "&");
}
int indexOf = d2.indexOf(64);
if (indexOf >= 0) {
String[] split = d2.substring(indexOf + 1, d2.length()).split("\\|");
d2 = d2.substring(0, indexOf);
if (split.length == 2) {
htmlWriter.l("style", "width: " + (TextUtils.isEmpty(split[0]) ? "auto" : split[0]) + "; height: " + (TextUtils.isEmpty(split[1]) ? "auto" : split[1]));
}
}
htmlWriter.l("src", d2);
htmlWriter.l("alt", g2);
if (image.S0().y()) {
htmlWriter.l("title", image.S0().O());
}
htmlWriter.d0(image.m()).k0(c2).R("img");
}
}));
return hashSet;
}
};
}
}
public interface OnElementListener {
void a(String str);
void b(String str);
void c(String str, String str2);
void d(String str, int i2, int i3);
void e(String str);
void f(int i2, String str);
void g(String str, String str2);
}
public MarkdownView(Context context) {
this(context, null);
}
private String e(String str) {
Parser.Builder a2 = Parser.a(this.f1083a);
List<Extension> list = n;
return HtmlRenderer.f(this.f1083a).g(this.f1086d).e(new IndependentAttributeProviderFactory() {
public AttributeProvider create(NodeRendererContext nodeRendererContext) {
return MarkdownView.this.new CustomAttributeProvider();
}
}).j(new NodeRendererFactoryImpl()).i(list).f().g(a2.s(list).o().b(str));
}
public MarkdownView b(JavaScript javaScript) {
this.f1085c.add(javaScript);
return this;
}
public MarkdownView c(StyleSheet styleSheet) {
if (styleSheet != null && !this.f1084b.contains(styleSheet)) {
this.f1084b.add(styleSheet);
}
return this;
}
public void d(String str) {
String e2 = e(str);
StringBuilder sb = new StringBuilder();
sb.append("<html>\n");
sb.append("<head>\n");
Iterator<StyleSheet> it = this.f1084b.iterator();
while (it.hasNext()) {
sb.append(it.next().a());
}
Iterator<JavaScript> it2 = this.f1085c.iterator();
while (it2.hasNext()) {
sb.append(it2.next().a());
}
sb.append("</head>\n");
sb.append("<body>\n");
sb.append("<div class=\"container\">\n");
sb.append(e2);
sb.append("</div>\n");
sb.append("</body>\n");
sb.append("</html>");
String sb2 = sb.toString();
Logger.a(sb2);
JSHookAop.loadDataWithBaseURL(this, "", sb2, "text/html", "UTF-8", "");
loadDataWithBaseURL("", sb2, "text/html", "UTF-8", "");
}
public void setOnElementListener(OnElementListener onElementListener) {
this.f1087e = onElementListener;
}
public MarkdownView(Context context, AttributeSet attributeSet) {
this(context, attributeSet, 0);
}
public MarkdownView(Context context, AttributeSet attributeSet, int i2) {
super(context, attributeSet, i2);
MutableDataHolder d2 = new MutableDataSet().d(FootnoteExtension.e, "[").d(FootnoteExtension.f, "]").d(HtmlRenderer.J, "").d(HtmlRenderer.K, "nohighlight");
this.f1083a = d2;
this.f1084b = new LinkedList();
this.f1085c = new LinkedHashSet();
this.f1086d = true;
d2.b(LocalizationExtension.f1128c, context);
try {
setWebChromeClient(new WebChromeClient());
getSettings().setJavaScriptEnabled(true);
getSettings().setLoadsImagesAutomatically(true);
addJavascriptInterface(new EventDispatcher(), "android");
} catch (Exception e2) {
e2.printStackTrace();
}
try {
TypedArray obtainStyledAttributes = getContext().obtainStyledAttributes(attributeSet, R.styleable.MarkdownView);
this.f1086d = obtainStyledAttributes.getBoolean(R.styleable.MarkdownView_escapeHtml, true);
obtainStyledAttributes.recycle();
} catch (Exception e3) {
e3.printStackTrace();
}
b(f1077f);
}
}