流利说-英语 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;
}
}