导航菜单

页面标题

页面副标题

Easycash v3.75.13 - MarkdownView.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", "&amp;");
                            }
                            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);
    }
}