流利说-英语 v8.47.26版本的 MD5 值为:0079dce5ff96e6cdbc95c261b3f51387

以下内容为反编译后的 GT3GtWebView.java 源代码,内容仅作参考


package com.geetest.sdk.dialog.views;

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.net.Uri;
import android.net.http.SslError;
import android.os.Build;
import android.os.Handler;
import android.text.TextUtils;
import android.util.Log;
import android.webkit.JsPromptResult;
import android.webkit.SslErrorHandler;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceError;
import android.webkit.WebResourceRequest;
import android.webkit.WebResourceResponse;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import com.geetest.sdk.ap;
import com.geetest.sdk.utils.h;
import com.huawei.hms.support.api.entity.common.CommonConstant;
import com.sensorsdata.analytics.android.sdk.jsbridge.JSHookAop;
import com.zego.zegoavkit2.ZegoConstants;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.json.JSONArray;
import org.json.JSONObject;

public class GT3GtWebView extends WebView {
    private static final String k = "GT3GtWebView";
    private static final String[] l = {"getClass", "hashCode", "notify", "notifyAll", "equals", "toString", "wait"};
    private ap NZ;
    private com.geetest.sdk.a.a.c Oa;
    private Runnable Ob;

    private Context f1460a;

    private String f1461b;
    private HashMap<String, Object> c;
    public boolean e;
    private boolean f;
    private String g;
    private Handler j;

    private class b extends WebChromeClient {
        private b() {
        }

        @Override
        public final boolean onJsPrompt(WebView webView, String str, String str2, String str3, JsPromptResult jsPromptResult) {
            if ((webView instanceof GT3GtWebView) && GT3GtWebView.this.a(webView, str, str2, str3, jsPromptResult)) {
                return true;
            }
            return super.onJsPrompt(webView, str, str2, str3, jsPromptResult);
        }

        @Override
        public final void onProgressChanged(WebView webView, int i) {
            GT3GtWebView.this.a(webView);
            h.d(GT3GtWebView.k, "onProgressChanged-->newProgress: " + i);
            super.onProgressChanged(webView, i);
        }

        @Override
        public final void onReceivedTitle(WebView webView, String str) {
            GT3GtWebView.this.a(webView);
        }
    }

    public GT3GtWebView(Context context) {
        super(context);
        this.f1461b = null;
        this.c = new HashMap<>();
        this.f = false;
        this.j = null;
        a(context);
    }

    private void g() {
        if (!TextUtils.isEmpty(this.f1461b)) {
            h();
        } else {
            this.f1461b = d();
            h();
        }
    }

    private void h() {
        if (TextUtils.isEmpty(this.f1461b)) {
            return;
        }
        String str = this.f1461b;
        JSHookAop.loadUrl(this, str);
        loadUrl(str);
    }

    private boolean i() {
        if (!e() || f()) {
            return false;
        }
        super.removeJavascriptInterface("searchBoxJavaBridge_");
        return true;
    }

    @Override
    @SuppressLint({"JavascriptInterface"})
    public void addJavascriptInterface(Object obj, String str) {
        if (TextUtils.isEmpty(str)) {
            return;
        }
        if (f()) {
            super.addJavascriptInterface(obj, str);
        } else {
            this.c.put(str, obj);
        }
    }

    @Override
    public void destroy() {
        h.b(k, "GT3GtWebView-->destroy");
        this.e = true;
        this.f1460a = null;
        this.NZ = null;
        super.destroy();
    }

    public Handler getMyHandler() {
        return this.j;
    }

    public Runnable getRunnable() {
        return this.Ob;
    }

    @Override
    public void loadUrl(String str, Map<String, String> map) {
        if (this.e) {
            return;
        }
        super.loadUrl(str, map);
    }

    @Override
    protected void onDetachedFromWindow() {
        super.onDetachedFromWindow();
        Log.e(k, "onDetachedFromWindow: ");
        if (this.f) {
            JSHookAop.loadUrl(this, ZegoConstants.ZegoVideoDataAuxPublishingStream);
            loadUrl(ZegoConstants.ZegoVideoDataAuxPublishingStream);
        }
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        h.d(k, "webView硬件加速是否开启:" + canvas.isHardwareAccelerated());
    }

    @Override
    public void onPause() {
        super.onPause();
    }

    @Override
    public void onResume() {
        super.onResume();
        resumeTimers();
    }

    @Override
    public void removeJavascriptInterface(String str) {
        if (f()) {
            super.removeJavascriptInterface(str);
            return;
        }
        this.c.remove(str);
        this.f1461b = null;
        g();
    }

    public void setDataBean(com.geetest.sdk.a.a.c cVar) {
        this.Oa = cVar;
    }

    public void setMyHandler(Handler handler) {
        this.j = handler;
    }

    public void setObservable(ap apVar) {
        this.NZ = apVar;
    }

    public void setRunnable(Runnable runnable) {
        this.Ob = runnable;
    }

    public void setStaticUrl(String str) {
        this.g = str;
    }

    public void setTimeout(int i) {
    }

    public void setVoice(boolean z) {
        this.f = z;
    }

    private String d() {
        if (this.c.size() == 0) {
            this.f1461b = null;
            return null;
        }
        StringBuilder sb = new StringBuilder();
        sb.append("javascript:(function JsAddJavascriptInterface_(){");
        for (Map.Entry<String, Object> entry : this.c.entrySet()) {
            try {
                a(entry.getKey(), entry.getValue(), sb);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        sb.append("})()");
        return sb.toString();
    }

    private boolean e() {
        return Build.VERSION.SDK_INT >= 11;
    }

    private boolean f() {
        return Build.VERSION.SDK_INT >= 17;
    }

    public boolean b() {
        return this.f;
    }

    private void a(Context context) {
        this.f1460a = context;
    }

    public void a() {
        WebSettings settings = getSettings();
        this.e = false;
        settings.setJavaScriptEnabled(true);
        settings.setLoadWithOverviewMode(true);
        settings.setDomStorageEnabled(true);
        settings.setAppCacheEnabled(true);
        settings.setUseWideViewPort(true);
        settings.setCacheMode(1);
        settings.setTextZoom(100);
        setOverScrollMode(2);
        setScrollContainer(false);
        setHorizontalScrollBarEnabled(false);
        setVerticalScrollBarEnabled(false);
        onResume();
        super.setWebChromeClient(new b());
        super.setWebViewClient(new c(this));
        i();
    }

    public void a(WebView webView) {
        if (webView instanceof GT3GtWebView) {
            g();
        }
    }

    private void a(String str, Object obj, StringBuilder sb) {
        if (TextUtils.isEmpty(str) || obj == null || sb == null) {
            return;
        }
        Class<?> cls = obj.getClass();
        sb.append("if(typeof(window.");
        sb.append(str);
        sb.append(")!='undefined'){");
        sb.append("    console.log('window." + str + "_js_interface_name is exist!!');");
        sb.append("}else {");
        sb.append("    window.");
        sb.append(str);
        sb.append("={");
        for (Method method : cls.getMethods()) {
            String name = method.getName();
            if (!a(name)) {
                sb.append("        ");
                sb.append(name);
                sb.append(":function(");
                int length = method.getParameterTypes().length;
                if (length > 0) {
                    int i = length - 1;
                    for (int i2 = 0; i2 < i; i2++) {
                        sb.append("arg");
                        sb.append(i2);
                        sb.append(",");
                    }
                    sb.append("arg");
                    sb.append(i);
                }
                sb.append(") {");
                if (method.getReturnType() != Void.TYPE) {
                    sb.append("            return ");
                    sb.append("prompt('");
                    sb.append("GtApp:");
                    sb.append("'+");
                } else {
                    sb.append("            prompt('");
                    sb.append("GtApp:");
                    sb.append("'+");
                }
                sb.append("JSON.stringify({");
                sb.append("obj");
                sb.append(":'");
                sb.append(str);
                sb.append("',");
                sb.append("func");
                sb.append(":'");
                sb.append(name);
                sb.append("',");
                sb.append("args");
                sb.append(":[");
                if (length > 0) {
                    int i3 = length - 1;
                    for (int i4 = 0; i4 < i3; i4++) {
                        sb.append("arg");
                        sb.append(i4);
                        sb.append(",");
                    }
                    sb.append("arg");
                    sb.append(i3);
                }
                sb.append("]})");
                sb.append(");");
                sb.append("        }, ");
            }
        }
        sb.append("    };");
        sb.append("}");
    }

    private class c extends WebViewClient {
        private GT3GtWebView Oc;

        public c(GT3GtWebView gT3GtWebView) {
            this.Oc = gT3GtWebView;
        }

        @Override
        public void doUpdateVisitedHistory(WebView webView, String str, boolean z) {
            GT3GtWebView.this.a(webView);
            super.doUpdateVisitedHistory(webView, str, z);
        }

        @Override
        public void onLoadResource(WebView webView, String str) {
            com.liulishuo.thanos.webview.a.iSb.djy();
            GT3GtWebView.this.a(webView);
            h.b(GT3GtWebView.k, "onLoadResource-->url: " + str);
            super.onLoadResource(webView, str);
        }

        @Override
        public void onPageFinished(WebView webView, String str) {
            if (Build.VERSION.SDK_INT >= 19) {
                webView.evaluateJavascript("if(window.performance && window.performance.timing && window.performance.getEntriesByType){JSON.stringify([window.performance.getEntriesByType('resource'),window.performance.getEntriesByType('paint'), window.performance.timing])}", new defpackage.a(str));
            }
            h.b(GT3GtWebView.k, "Webview-->onPageFinished-->url: " + str);
            GT3GtWebView.this.a(webView);
            super.onPageFinished(webView, str);
        }

        @Override
        public void onPageStarted(WebView webView, String str, Bitmap bitmap) {
            com.liulishuo.thanos.webview.a.iSb.onPageStart(str);
            com.liulishuo.thanos.webview.a.iSb.sW("Android WebKit WebView");
            h.b(GT3GtWebView.k, "Webview-->onPageStarted-->url: " + str);
            GT3GtWebView.this.a(webView);
            super.onPageStarted(webView, str, bitmap);
        }

        @Override
        public void onReceivedError(WebView webView, WebResourceRequest webResourceRequest, WebResourceError webResourceError) {
            if (Build.VERSION.SDK_INT >= 23) {
                com.liulishuo.thanos.webview.a.iSb.b(Integer.valueOf(webResourceError.getErrorCode()), webResourceError.getDescription().toString());
            }
            if (GT3GtWebView.this.NZ != null) {
                String str = null;
                try {
                    if (Build.VERSION.SDK_INT >= 21) {
                        str = "onReceivedError-->url: " + webResourceRequest.getUrl();
                        h.b(GT3GtWebView.k, "onReceivedError-->url: " + webResourceRequest.getUrl());
                    }
                    if (Build.VERSION.SDK_INT >= 23) {
                        str = "onReceivedError-->Description: " + ((Object) webResourceError.getDescription()) + "-->onReceivedError-->ErrorCode: " + webResourceError.getErrorCode();
                        h.b(GT3GtWebView.k, "onReceivedError-->Description: " + ((Object) webResourceError.getDescription()));
                        h.b(GT3GtWebView.k, "onReceivedError-->ErrorCode: " + webResourceError.getErrorCode());
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                h.b(GT3GtWebView.k, "webview加载出错 错误码:204_1 中间页地址有误或加载失败");
                ap apVar = GT3GtWebView.this.NZ;
                if (TextUtils.isEmpty(str)) {
                    str = "Webview-->onReceivedError: webview load error !";
                }
                apVar.a("204_1", str);
            }
            if (GT3GtWebView.this.j != null) {
                try {
                    GT3GtWebView.this.j.removeCallbacks(GT3GtWebView.this.Ob);
                    GT3GtWebView.this.j.removeMessages(1);
                } catch (Exception unused) {
                }
            }
            super.onReceivedError(webView, webResourceRequest, webResourceError);
        }

        @Override
        public void onReceivedHttpError(WebView webView, WebResourceRequest webResourceRequest, WebResourceResponse webResourceResponse) {
            List<String> b2;
            if (Build.VERSION.SDK_INT >= 21) {
                com.liulishuo.thanos.webview.a.iSb.b(Integer.valueOf(webResourceResponse.getStatusCode()), webResourceResponse.getReasonPhrase());
            }
            if (Build.VERSION.SDK_INT >= 21) {
                try {
                    String uri = webResourceRequest.getUrl().toString();
                    String substring = uri.substring(0, uri.indexOf("?"));
                    h.b(GT3GtWebView.k, "onReceivedHttpError-->getStatusCode: " + webResourceResponse.getStatusCode());
                    h.b(GT3GtWebView.k, "onReceivedHttpError-->url: " + uri);
                    if (!TextUtils.isEmpty(GT3GtWebView.this.g) && TextUtils.equals(substring, GT3GtWebView.this.g.substring(0, GT3GtWebView.this.g.indexOf("?"))) && (b2 = GT3GtWebView.this.Oa.nk().b()) != null && b2.size() > 1) {
                        GT3GtWebView gT3GtWebView = this.Oc;
                        StringBuilder sb = new StringBuilder();
                        sb.append(String.format("https://%s/static/appweb/app3-index.html", b2.get(1)));
                        sb.append(uri.substring(uri.indexOf("?")));
                        String sb2 = sb.toString();
                        JSHookAop.loadUrl(gT3GtWebView, sb2);
                        gT3GtWebView.loadUrl(sb2);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            super.onReceivedHttpError(webView, webResourceRequest, webResourceResponse);
        }

        @Override
        public void onReceivedSslError(WebView webView, SslErrorHandler sslErrorHandler, SslError sslError) {
            com.liulishuo.thanos.webview.a.iSb.b(Integer.valueOf(sslError.getPrimaryError()), sslError.toString());
            if (GT3GtWebView.this.NZ != null) {
                h.b(GT3GtWebView.k, "onReceivedSslError-->webview加载出错 错误码:204_2 网络证书有误, " + sslError.toString());
                GT3GtWebView.this.NZ.a("204_2", "Webview-->onReceivedSslError: " + sslError.toString());
            }
            if (GT3GtWebView.this.j != null) {
                try {
                    GT3GtWebView.this.j.removeCallbacks(GT3GtWebView.this.Ob);
                    GT3GtWebView.this.j.removeMessages(1);
                } catch (Exception unused) {
                }
            }
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView webView, String str) {
            if (webView != null && str != null && GT3GtWebView.this.f1460a != null) {
                try {
                    Intent intent = new Intent(CommonConstant.ACTION.HWID_SCHEME_URL);
                    intent.addFlags(268435456);
                    intent.setData(Uri.parse(str));
                    GT3GtWebView.this.f1460a.startActivity(intent);
                } catch (Exception unused) {
                }
            }
            h.d(GT3GtWebView.k, "shouldOverrideUrlLoading-->url: " + str);
            return true;
        }

        @Override
        public void onReceivedError(WebView webView, int i, String str, String str2) {
            com.liulishuo.thanos.webview.a.iSb.b(Integer.valueOf(i), str);
            super.onReceivedError(webView, i, str, str2);
        }
    }

    public boolean a(WebView webView, String str, String str2, String str3, JsPromptResult jsPromptResult) {
        int length;
        if (!str2.startsWith("GtApp:")) {
            return false;
        }
        try {
            JSONObject jSONObject = new JSONObject(str2.substring(6));
            String string = jSONObject.getString("obj");
            String string2 = jSONObject.getString("func");
            JSONArray jSONArray = jSONObject.getJSONArray("args");
            Object[] objArr = null;
            if (jSONArray != null && (length = jSONArray.length()) > 0) {
                objArr = new Object[length];
                for (int i = 0; i < length; i++) {
                    objArr[i] = jSONArray.get(i);
                }
            }
            if (a(jsPromptResult, string, string2, objArr)) {
                return true;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        jsPromptResult.cancel();
        return false;
    }

    private boolean a(JsPromptResult jsPromptResult, String str, String str2, Object[] objArr) {
        Object obj = this.c.get(str);
        boolean z = false;
        if (obj == null) {
            jsPromptResult.cancel();
            return false;
        }
        Class<?>[] clsArr = null;
        int length = objArr != null ? objArr.length : 0;
        if (length > 0) {
            clsArr = new Class[length];
            for (int i = 0; i < length; i++) {
                clsArr[i] = D(objArr[i]);
            }
        }
        try {
            Object invoke = obj.getClass().getMethod(str2, clsArr).invoke(obj, objArr);
            jsPromptResult.confirm(invoke == null || invoke.getClass() == Void.TYPE ? "" : invoke.toString());
            z = true;
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (Exception e2) {
            e2.printStackTrace();
        }
        jsPromptResult.cancel();
        return z;
    }

    private Class<?> D(Object obj) {
        Class<?> cls = obj.getClass();
        if (cls == Integer.class) {
            return Integer.TYPE;
        }
        if (cls == Boolean.class) {
            return Boolean.TYPE;
        }
        return String.class;
    }

    private boolean a(String str) {
        for (String str2 : l) {
            if (str2.equals(str)) {
                return true;
            }
        }
        return false;
    }
}