WeChat.apk(点击下载) / WebView.java


package com.tencent.xweb;

import android.content.Context;
import android.content.MutableContextWrapper;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Picture;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.net.Uri;
import android.net.http.SslCertificate;
import android.os.Bundle;
import android.os.Looper;
import android.os.Message;
import android.print.PrintDocumentAdapter;
import android.util.AttributeSet;
import android.util.Log;
import android.view.TextureView;
import android.view.View;
import android.view.ViewGroup;
import android.view.textclassifier.TextClassifier;
import android.webkit.DownloadListener;
import android.webkit.ValueCallback;
import android.webkit.WebBackForwardList;
import android.webkit.WebMessage;
import android.webkit.WebMessagePort;
import android.webkit.WebView;
import android.widget.FrameLayout;
import com.tencent.xweb.debug.DummyDebugView;
import com.tencent.xweb.debug.IDebugView;
import com.tencent.xweb.internal.CommandDef;
import com.tencent.xweb.internal.ConstValue;
import com.tencent.xweb.internal.ICookieManager;
import com.tencent.xweb.internal.IWebView;
import com.tencent.xweb.internal.IWebViewProvider;
import com.tencent.xweb.internal.ProxyWebViewClientExtension;
import com.tencent.xweb.report.KVReportForCrash;
import com.tencent.xweb.report.KVReportForWebView;
import com.tencent.xweb.report.KVReportForWebViewCore;
import com.tencent.xweb.updater.XWebUpdater;
import com.tencent.xweb.util.AbiUtil;
import com.tencent.xweb.util.CrashWatchDog;
import com.tencent.xweb.util.WXWebReporter;
import com.tencent.xweb.util.WebViewWrapperFactory;
import com.tencent.xweb.util.XWebCoreInfo;
import com.tencent.xweb.util.XWebGrayValueUtil;
import com.tencent.xweb.util.XWebLog;
import j30.a;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Executor;
import k30.c;
import org.xwalk.core.XWalkEnvironment;

public class WebView extends FrameLayout implements IWebView {
    private static final String TAG = "WebView";
    public static final WebViewKind sDefaultWebViewKind = WebViewKind.WV_KIND_PINUS;
    private static boolean sIsWaitForInstallXWeb = false;
    private static final KVReportForWebViewCore sKVReportForWebViewCore = new KVReportForWebViewCore();
    private static WebViewKind sProcessWebViewKind = WebViewKind.WV_KIND_NONE;
    private static String sStrModule = "";
    private static boolean sXWebCoreInited = false;
    private byte _hellAccFlag_;
    private IDebugView mDebugView;
    private boolean mHasDestroyed;
    private WebViewKind mInstanceWebViewKind;
    private final KVReportForWebView mKVReportForWebView;
    private View.OnLongClickListener mOnLongClickListener;
    private IWebView mWebViewWrapper;

    public enum FullscreenVideoKind {
        NOT_HOOK,
        HOOK_NOT_EVALUTE_JS,
        HOOK_EVALUTE_JS
    }

    public static class HitTestResult {
        @Deprecated
        public static final int ANCHOR_TYPE = 1;
        public static final int EDIT_TEXT_TYPE = 9;
        public static final int EMAIL_TYPE = 4;
        public static final int GEO_TYPE = 3;
        @Deprecated
        public static final int IMAGE_ANCHOR_TYPE = 6;
        public static final int IMAGE_TYPE = 5;
        public static final int PHONE_TYPE = 2;
        public static final int SRC_ANCHOR_TYPE = 7;
        public static final int SRC_IMAGE_ANCHOR_TYPE = 8;
        public static final int UNKNOWN_TYPE = 0;
        private String mExtra;
        private int mType = 0;

        public String getExtra() {
            return this.mExtra;
        }

        public int getType() {
            return this.mType;
        }

        public void setExtra(String str) {
            this.mExtra = str;
        }

        public void setType(int i15) {
            this.mType = i15;
        }
    }

    public interface PreInitCallback {
        void onCoreInitFailed();

        void onCoreInitFinished();
    }

    public static abstract class VisualStateCallback {
        public abstract void onComplete(long j15);
    }

    public enum WebViewKind {
        WV_KIND_NONE,
        WV_KIND_CW,
        WV_KIND_X5,
        WV_KIND_SYS,
        WV_KIND_PINUS
    }

    public class WebViewTransport {
        private WebView mWebview;

        public WebViewTransport() {
        }

        public synchronized WebView getWebView() {
            return this.mWebview;
        }

        public synchronized void setWebView(WebView webView) {
            this.mWebview = webView;
        }
    }

    public WebView(Context context) {
        this(context, null);
    }

    public static void clearClientCertPreferences(Runnable runnable) {
        IWebViewProvider webViewProvider = WebViewWrapperFactory.getWebViewProvider(getCurrentModuleWebCoreType());
        if (webViewProvider != null) {
            webViewProvider.clearClientCertPreferences(runnable);
            return;
        }
        XWebLog.e(TAG, "need init first clearClientCertPreferences error, getCurWebType:" + getCurrentModuleWebCoreType());
    }

    private void createWebView(WebViewKind webViewKind) {
        XWebLog.addInitializeLog(TAG, "createWebView start, prefer type:" + getCurrentModuleWebCoreType() + ", force type:" + webViewKind);
        XWalkEnvironment.ensureInitEnvironment(getContext());
        WebViewKind webViewKind2 = this.mInstanceWebViewKind;
        WebViewKind webViewKind3 = WebViewKind.WV_KIND_NONE;
        if (webViewKind2 != webViewKind3) {
            this.mKVReportForWebView.setHasInitedWebView(true);
            XWebLog.addInitializeLog(TAG, "createWebView, already init, webview type:" + this.mInstanceWebViewKind);
            return;
        }
        if (XWebChildProcessMonitor.getShouldSwitchToSys()) {
            WebViewKind webViewKind4 = WebViewKind.WV_KIND_SYS;
            this.mInstanceWebViewKind = webViewKind4;
            this.mKVReportForWebView.setDowngradeReason("ChildProcessMonitor");
            XWebLog.addInitializeLog(TAG, "createWebView, XWebChildProcessMonitor force to use sys");
            tryInitWebViewCore(getContext(), webViewKind4);
        } else {
            WebViewKind webViewKind5 = WebViewKind.WV_KIND_SYS;
            if (webViewKind == webViewKind5) {
                this.mInstanceWebViewKind = webViewKind;
                this.mKVReportForWebView.setDowngradeReason("WebViewParam");
                XWebLog.addInitializeLog(TAG, "createWebView, force to use sys by webview param");
                tryInitWebViewCore(getContext(), webViewKind5);
            } else if (getCurrentModuleWebCoreType() == webViewKind3) {
                this.mKVReportForWebView.setHasInitedWebViewCore(false);
                WebViewKind preferedWebviewType = getPreferedWebviewType(initModuleNameBeforeInitWebViewCore());
                XWebLog.addInitializeLog(TAG, "createWebView, not init core, use prefer type:" + preferedWebviewType);
                if (preferedWebviewType != webViewKind3) {
                    this.mInstanceWebViewKind = preferedWebviewType;
                    if (tryInitWebViewCore(getContext(), this.mInstanceWebViewKind) && isXWebKernel()) {
                        sProcessWebViewKind = this.mInstanceWebViewKind;
                        XWebLog.i(TAG, "createWebView, sProcessWebViewKind:" + sProcessWebViewKind);
                    }
                } else {
                    this.mKVReportForWebView.setDowngradeReason("NonePreferWebViewKind");
                    this.mInstanceWebViewKind = webViewKind5;
                    tryInitWebViewCore(getContext(), webViewKind5);
                }
            } else {
                this.mInstanceWebViewKind = getCurrentModuleWebCoreType();
            }
        }
        this.mKVReportForWebView.setModule(getModuleName());
        this.mKVReportForWebView.startCreatePreferredWebView(this.mInstanceWebViewKind.ordinal());
        XWebLog.addInitializeLog(TAG, "createWebView, try create webview type:" + this.mInstanceWebViewKind);
        IWebView webView = WebViewWrapperFactory.getWebView(this.mInstanceWebViewKind, this);
        this.mWebViewWrapper = webView;
        if (webView == null) {
            this.mKVReportForWebView.finishCreatePreferredWebView(2);
            this.mKVReportForWebView.startCreateOtherWebView();
            XWebLog.addInitializeLog(TAG, "createWebView failed, try other webview types");
            WebViewKind[] webViewKindList = getWebViewKindList();
            int i15 = 0;
            while (true) {
                if (i15 >= webViewKindList.length) {
                    break;
                }
                if (webViewKindList[i15] != this.mInstanceWebViewKind && initWebviewCore(getContext(), webViewKindList[i15], (PreInitCallback) null, false)) {
                    IWebView webView2 = WebViewWrapperFactory.getWebView(webViewKindList[i15], this);
                    this.mWebViewWrapper = webView2;
                    if (webView2 != null) {
                        this.mInstanceWebViewKind = getCurrentModuleWebCoreType();
                        break;
                    }
                }
                i15++;
            }
            if (this.mWebViewWrapper != null) {
                this.mKVReportForWebView.finishCreateOtherWebView(1, this.mInstanceWebViewKind.ordinal());
            } else {
                this.mKVReportForWebView.finishCreateOtherWebView(2, 0);
                XWebLog.e(TAG, "createWebView failed finally");
                WXWebReporter.onCreateWebviewFailedFinally();
                throw new CreateWebViewException("create webview instance failed");
            }
        } else {
            this.mKVReportForWebView.finishCreatePreferredWebView(1);
        }
        this.mKVReportForWebView.startInitFinalWebView(this.mInstanceWebViewKind.ordinal());
        addView(this.mWebViewWrapper.getWebViewUI());
        XWebLog.i(TAG, "createWebView success, webview type:" + this.mInstanceWebViewKind);
        this.mWebViewWrapper.getView().setOnLongClickListener(new View.OnLongClickListener() {
            /* class com.tencent.xweb.WebView.AnonymousClass1 */
            private byte _hellAccFlag_;

            public boolean onLongClick(View view) {
                ArrayList arrayList = new ArrayList();
                arrayList.add(view);
                Object[] array = arrayList.toArray();
                arrayList.clear();
                a.b("com/tencent/xweb/WebView$1", "android/view/View$OnLongClickListener", "onLongClick", "(Landroid/view/View;)Z", this, array);
                if (WebView.this.mOnLongClickListener != null) {
                    boolean onLongClick = WebView.this.mOnLongClickListener.onLongClick(WebView.this);
                    a.h(onLongClick, this, "com/tencent/xweb/WebView$1", "android/view/View$OnLongClickListener", "onLongClick", "(Landroid/view/View;)Z");
                    return onLongClick;
                }
                a.h(false, this, "com/tencent/xweb/WebView$1", "android/view/View$OnLongClickListener", "onLongClick", "(Landroid/view/View;)Z");
                return false;
            }
        });
        initDebugView();
        initRemoteDebug();
        if (isXWebKernel()) {
            Context context = getContext();
            if (context instanceof WebViewContextWrapper) {
                ((WebViewContextWrapper) context).setBindedWebview(this.mWebViewWrapper);
            }
        }
        String userAgentString = getSettings().getUserAgentString();
        getSettings().setUserAgentString(userAgentString + " MMWEBID/" + XWebGrayValueUtil.getGrayValue());
        WebViewCounter.increase();
        this.mKVReportForWebView.finishInitFinalWebView();
    }

    public static String findAddress(String str) {
        IWebViewProvider webViewProvider = WebViewWrapperFactory.getWebViewProvider(getCurrentModuleWebCoreType());
        if (webViewProvider != null) {
            return webViewProvider.findAddress(str);
        }
        XWebLog.e(TAG, "need init first findAddress error, getCurWebType:" + getCurrentModuleWebCoreType());
        return "";
    }

    private List<TextureView> getAllTextureViews(View view) {
        ArrayList arrayList = new ArrayList();
        if (view instanceof TextureView) {
            arrayList.add((TextureView) view);
        } else if (view instanceof ViewGroup) {
            ViewGroup viewGroup = (ViewGroup) view;
            for (int i15 = 0; i15 < viewGroup.getChildCount(); i15++) {
                arrayList.addAll(getAllTextureViews(viewGroup.getChildAt(i15)));
            }
        }
        return arrayList;
    }

    public static WebViewKind getCurrentModuleWebCoreType() {
        return sProcessWebViewKind;
    }

    public static String getModuleName() {
        return sStrModule;
    }

    private static WebViewKind getPreferedWebviewType(String str) {
        return getPreferedWebviewType(sDefaultWebViewKind, str);
    }

    private static WebViewKind[] getWebViewKindList() {
        String[] split;
        String cmd = CommandCfg.getInstance().getCmd(CommandDef.COMMAND_WEBVIEW_KIND_LIST, getModuleName());
        if (cmd == null || cmd.equalsIgnoreCase("") || (split = cmd.split(",")) == null || split.length <= 0) {
            return new WebViewKind[]{WebViewKind.WV_KIND_PINUS, WebViewKind.WV_KIND_SYS};
        }
        WebViewKind[] webViewKindArr = new WebViewKind[split.length];
        for (int i15 = 0; i15 < split.length; i15++) {
            WebViewKind convertWebType = CommandCfg.getInstance().convertWebType(split[i15]);
            if (convertWebType != WebViewKind.WV_KIND_NONE) {
                webViewKindArr[i15] = convertWebType;
            } else {
                XWebLog.w(TAG, "getWebViewKindList, error config:" + cmd);
                return new WebViewKind[0];
            }
        }
        XWebLog.i(TAG, "getWebViewKindList:" + Arrays.toString(webViewKindArr));
        return webViewKindArr;
    }

    @DeprecatedOutsideXWebSdk
    @Deprecated
    public static boolean hasInited() {
        if (getCurrentModuleWebCoreType() == WebViewKind.WV_KIND_NONE) {
            XWebLog.i(TAG, "hasInited false, current webview type is NONE");
            return false;
        }
        IWebViewProvider webViewProvider = WebViewWrapperFactory.getWebViewProvider(getCurrentModuleWebCoreType());
        if (webViewProvider != null) {
            return webViewProvider.hasInitedWebViewCore();
        }
        XWebLog.i(TAG, "hasInited false, current webview provider is null");
        return false;
    }

    private void initDebugView() {
        try {
            this.mDebugView = (IDebugView) WebViewWrapperFactory.getXWebViewProvider().execute(ConstValue.STR_CMD_GET_DEBUG_VIEW, new Object[]{this});
        } catch (Throwable th5) {
            XWebLog.e(TAG, "initDebugView, create dummy one, error", th5);
            this.mDebugView = new DummyDebugView();
        }
    }

    private static String initModuleName(String str) {
        if (str == null || str.isEmpty()) {
            str = "tools";
        }
        sStrModule = str;
        WXWebReporter.setCurrentModule(str);
        return str;
    }

    private String initModuleNameBeforeInitWebViewCore() {
        return initModuleName(XWalkEnvironment.getSafeModuleName("tools"));
    }

    private static void initRemoteDebug() {
        boolean enableRemoteDebug = WebDebugCfg.getInst().getEnableRemoteDebug();
        XWebLog.i(TAG, "initRemoteDebug, enableRemoteDebug:" + enableRemoteDebug + ", testMode:" + XWalkEnvironment.getBuildConfigXWebTestMode());
        if (enableRemoteDebug || XWalkEnvironment.getBuildConfigXWebTestMode()) {
            XWebSdk.setEnableRemoteDebug(true);
        }
    }

    @DeprecatedOutsideXWebSdk
    @Deprecated
    public static synchronized void initWebviewCore(Context context, WebViewKind webViewKind, String str, PreInitCallback preInitCallback) {
        synchronized (WebView.class) {
            XWebLog.addInitializeLog(TAG, "initWebviewCore start, kind:" + webViewKind + ", module:" + str);
            if (sProcessWebViewKind != WebViewKind.WV_KIND_NONE) {
                if (sProcessWebViewKind != webViewKind) {
                    XWebLog.addInitializeLog(TAG, "initWebviewCore, set invalid webview kind:" + webViewKind + ", expected:" + sProcessWebViewKind);
                    if (preInitCallback != null) {
                        preInitCallback.onCoreInitFailed();
                    }
                } else {
                    XWebLog.addInitializeLog(TAG, "initWebviewCore, already init webview kind:" + webViewKind);
                    if (preInitCallback != null) {
                        preInitCallback.onCoreInitFinished();
                    }
                }
                return;
            }
            KVReportForWebViewCore kVReportForWebViewCore = sKVReportForWebViewCore;
            kVReportForWebViewCore.startInitWebViewCore();
            String initModuleName = initModuleName(str);
            XWalkEnvironment.ensureInitEnvironment(context);
            int availableVersion = XWalkEnvironment.getAvailableVersion();
            XWebLog.addInitializeLog(TAG, "initWebviewCore, availableVersion:" + availableVersion);
            if (availableVersion <= 0) {
                XWebUpdater.tryEmbedInstall();
            } else {
                int embedCoreVersion = WebViewWrapperFactory.getEmbedCoreVersion();
                XWebLog.addInitializeLog(TAG, "initWebviewCore, embedVersion:" + embedCoreVersion);
                if (availableVersion < embedCoreVersion) {
                    XWebUpdater.tryEmbedInstall();
                }
            }
            kVReportForWebViewCore.finishInitWebViewCore(initWebviewCore(context, getPreferedWebviewType(webViewKind, initModuleName), preInitCallback, true), sProcessWebViewKind.ordinal(), initModuleName);
            XWebLog.w(TAG, "###### initWebviewCore costTime:" + kVReportForWebViewCore.getInitWebViewCoreCostTime() + ", stack:" + Log.getStackTraceString(new Throwable("please ignore this exception")));
        }
    }

    public static boolean isPinus() {
        return sProcessWebViewKind == WebViewKind.WV_KIND_PINUS;
    }

    @DeprecatedOutsideXWebSdk
    @Deprecated
    public static boolean isSys() {
        return sProcessWebViewKind == WebViewKind.WV_KIND_SYS;
    }

    @DeprecatedOutsideXWebSdk
    @Deprecated
    public static boolean isXWeb() {
        return sProcessWebViewKind == WebViewKind.WV_KIND_PINUS;
    }

    @DeprecatedOutsideXWebSdk
    @Deprecated
    public static boolean isXWebCoreInited() {
        return sXWebCoreInited;
    }

    @DeprecatedOutsideXWebSdk
    @Deprecated
    public static boolean needRebootProcess() {
        if (sIsWaitForInstallXWeb && XWebCoreInfo.getInstalledNewestVersionForCurAbi(XWalkEnvironment.getApplicationContext()) > 0) {
            XWebLog.i(TAG, "needRebootProcess, true because of has installed xweb core");
            return true;
        } else if (!isXWeb() || XWalkEnvironment.getAvailableVersion() <= 0 || XWalkEnvironment.getInstalledNewstVersionForCurAbi() <= XWalkEnvironment.getAvailableVersion()) {
            return false;
        } else {
            XWebLog.i(TAG, "needRebootProcess, true because of has newer xweb version");
            return true;
        }
    }

    public static void onXWebCoreInited() {
        sXWebCoreInited = true;
    }

    private static void reinitToPinus() {
        XWebLog.addInitializeLog(TAG, "reinitToPinus");
        sProcessWebViewKind = WebViewKind.WV_KIND_NONE;
        XWalkEnvironment.refreshVersionInfo();
        initWebviewCore(XWalkEnvironment.getApplicationContext(), WebViewKind.WV_KIND_PINUS, sStrModule, (PreInitCallback) null);
        WXWebReporter.idkeyReport(1749, 66, 1);
    }

    public static void reinitToXWeb() {
        WebViewKind webViewKindFromInstalledNewstVersion = XWalkEnvironment.getWebViewKindFromInstalledNewstVersion(XWalkEnvironment.getApplicationContext());
        XWebLog.addInitializeLog(TAG, "reinitToXWeb, webViewKind:" + webViewKindFromInstalledNewstVersion);
        if (webViewKindFromInstalledNewstVersion == WebViewKind.WV_KIND_PINUS) {
            reinitToPinus();
        }
    }

    private static Context replaceContextWrapperForWebViewConstructorIfNeed(Context context) {
        if (context instanceof MutableContextWrapper) {
            return new WebViewContextWrapper(((MutableContextWrapper) context).getBaseContext());
        }
        return context;
    }

    private static boolean tryInitWebViewCore(Context context, WebViewKind webViewKind) {
        boolean z15;
        WebViewKind webViewKindFromAvailableVersion;
        XWebLog.addInitializeLog(TAG, "tryInitWebViewCore start, type:" + webViewKind);
        if ((webViewKind == WebViewKind.WV_KIND_CW || webViewKind == WebViewKind.WV_KIND_PINUS) && (webViewKindFromAvailableVersion = XWalkEnvironment.getWebViewKindFromAvailableVersion()) != WebViewKind.WV_KIND_NONE && webViewKind != webViewKindFromAvailableVersion) {
            XWebLog.addInitializeLog(TAG, "tryInitWebViewCore, type:" + webViewKind + ", but actual type:" + webViewKindFromAvailableVersion);
            return false;
        } else if (CrashWatchDog.hasRecentCrash(webViewKind)) {
            XWebLog.addInitializeLog(TAG, "tryInitWebViewCore, has recent crash");
            WXWebReporter.onJustCrashed(webViewKind);
            return false;
        } else {
            CrashWatchDog instanceForCurModule = CrashWatchDog.getInstanceForCurModule(CrashWatchDog.SCENE_LOAD_CORE, webViewKind);
            instanceForCurModule.logStart();
            try {
                IWebViewProvider webViewProvider = WebViewWrapperFactory.getWebViewProvider(webViewKind);
                if (webViewProvider != null) {
                    z15 = webViewProvider.initWebviewCore(context, null);
                    if (z15) {
                        CookieManager.getInstance().setCookieManagerWrapper(webViewProvider.getCookieManager());
                        XWebLog.addInitializeLog(TAG, "tryInitWebViewCore success");
                        WXWebReporter.onWebviewCoreUsed(webViewKind);
                        instanceForCurModule.logFinished();
                        return z15;
                    }
                } else {
                    z15 = false;
                }
                XWebLog.addInitializeLog(TAG, "tryInitWebViewCore failed");
                return z15;
            } catch (Throwable th5) {
                WXWebReporter.onInitCoreFailed(webViewKind);
                String stackTraceString = Log.getStackTraceString(th5);
                XWebLog.addInitializeLog(TAG, "tryInitWebViewCore failed, type:" + webViewKind + ", error:" + stackTraceString);
                KVReportForCrash.report(1, stackTraceString, webViewKind.ordinal());
                return false;
            }
        }
    }

    @Override // com.tencent.xweb.internal.IWebView
    public int addDocumentStartJavaScript(String str, String[] strArr) {
        return this.mWebViewWrapper.addDocumentStartJavaScript(str, strArr);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void addJavascriptInterface(Object obj, String str) {
        this.mWebViewWrapper.addJavascriptInterface(obj, str);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public boolean canGoBack() {
        return this.mWebViewWrapper.canGoBack();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public boolean canGoBackOrForward(int i15) {
        return this.mWebViewWrapper.canGoBackOrForward(i15);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public boolean canGoForward() {
        return this.mWebViewWrapper.canGoForward();
    }

    @Deprecated
    public boolean canZoomIn() {
        return false;
    }

    @Deprecated
    public boolean canZoomOut() {
        return false;
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void captureBitmap(IWebView.ICaptureBitmapCallback iCaptureBitmapCallback) {
        this.mWebViewWrapper.captureBitmap(iCaptureBitmapCallback);
    }

    @Deprecated
    public Picture capturePicture() {
        return null;
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void clearCache(boolean z15) {
        this.mWebViewWrapper.clearCache(z15);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void clearHistory() {
        this.mWebViewWrapper.clearHistory();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void clearMatches() {
        this.mWebViewWrapper.clearMatches();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void clearSslPreferences() {
        this.mWebViewWrapper.clearSslPreferences();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void clearView() {
        this.mWebViewWrapper.clearView();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public WebBackForwardList copyBackForwardList() {
        return this.mWebViewWrapper.copyBackForwardList();
    }

    @Deprecated
    public PrintDocumentAdapter createPrintDocumentAdapter() {
        return null;
    }

    @Override // com.tencent.xweb.internal.IWebView
    public PrintDocumentAdapter createPrintDocumentAdapter(String str) {
        return this.mWebViewWrapper.createPrintDocumentAdapter(str);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public WebMessagePort[] createWebMessageChannel() {
        return this.mWebViewWrapper.createWebMessageChannel();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void destroy() {
        Context context = getContext();
        if (context instanceof WebViewContextWrapper) {
            ((WebViewContextWrapper) context).setBindedWebview(null);
        }
        this.mWebViewWrapper.destroy();
        if (!this.mHasDestroyed) {
            this.mHasDestroyed = true;
            WebViewCounter.decrease();
        }
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void disablePlatformNotifications() {
        this.mWebViewWrapper.disablePlatformNotifications();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void disableVideoJsCallback(boolean z15) {
        this.mWebViewWrapper.disableVideoJsCallback(z15);
    }

    public void dispatchDraw(Canvas canvas) {
        super.dispatchDraw(canvas);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void documentHasImages(Message message) {
        this.mWebViewWrapper.documentHasImages(message);
    }

    public void drawCanvas(Canvas canvas) {
        if (isXWebKernel()) {
            canvas.drawBitmap(getBitmap(), 0.0f, 0.0f, (Paint) null);
        } else {
            draw(canvas);
        }
    }

    public boolean drawChild(Canvas canvas, View view, long j15) {
        try {
            return super.drawChild(canvas, view, j15);
        } catch (Throwable th5) {
            XWebLog.w(TAG, "drawChild error:" + Log.getStackTraceString(th5));
            return false;
        }
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void enablePlatformNotifications() {
        this.mWebViewWrapper.enablePlatformNotifications();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void evaluateJavascript(String str, ValueCallback<String> valueCallback) {
        this.mWebViewWrapper.evaluateJavascript(str, valueCallback);
    }

    @Deprecated
    public int findAll(String str) {
        findAllAsync(str);
        return 0;
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void findAllAsync(String str) {
        this.mWebViewWrapper.findAllAsync(str);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void findNext(boolean z15) {
        this.mWebViewWrapper.findNext(z15);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void flingScroll(int i15, int i16) {
        this.mWebViewWrapper.flingScroll(i15, i16);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public String getAbstractInfo() {
        return this.mWebViewWrapper.getAbstractInfo();
    }

    public Bitmap getBitmap() {
        Bitmap createBitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);
        if (createBitmap != null) {
            createBitmap.eraseColor(-1);
            Canvas canvas = new Canvas(createBitmap);
            if (isXWebKernel()) {
                try {
                    Paint paint = new Paint();
                    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OVER));
                    for (TextureView textureView : getAllTextureViews(this)) {
                        Bitmap bitmap = textureView.getBitmap();
                        if (bitmap != null) {
                            canvas.drawBitmap(bitmap, 0.0f, 0.0f, paint);
                        } else {
                            XWebLog.e(TAG, "getBitmap, textureViewBitmap = null");
                        }
                    }
                    Bitmap createBitmap2 = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);
                    getTopView().draw(new Canvas(createBitmap2));
                    canvas.drawBitmap(createBitmap2, 0.0f, 0.0f, paint);
                } catch (Throwable th5) {
                    XWebLog.e(TAG, "getBitmap, error", th5);
                }
            } else {
                draw(canvas);
            }
        }
        return createBitmap;
    }

    @Override // com.tencent.xweb.internal.IWebView
    public SslCertificate getCertificate() {
        return this.mWebViewWrapper.getCertificate();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public int getContentHeight() {
        return this.mWebViewWrapper.getContentHeight();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public ICookieManager getCookieManager() {
        return null;
    }

    public WebViewKind getCurrentInstanceWebCoreType() {
        return this.mInstanceWebViewKind;
    }

    public IDebugView getDebugView() {
        return this.mDebugView;
    }

    @Override // com.tencent.xweb.internal.IWebView
    public Bitmap getFavicon() {
        return this.mWebViewWrapper.getFavicon();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public FullscreenVideoKind getFullscreenVideoKind() {
        return this.mWebViewWrapper.getFullscreenVideoKind();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public HitTestResult getHitTestResult() {
        return this.mWebViewWrapper.getHitTestResult();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public String[] getHttpAuthUsernamePassword(String str, String str2) {
        return this.mWebViewWrapper.getHttpAuthUsernamePassword(str, str2);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public boolean getImageBitmapToFile(String str, String str2, String str3, GetImageBitmapToFileFinishedCallback getImageBitmapToFileFinishedCallback) {
        return this.mWebViewWrapper.getImageBitmapToFile(str, str2, str3, getImageBitmapToFileFinishedCallback);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public String getOriginalUrl() {
        return this.mWebViewWrapper.getOriginalUrl();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public int getProgress() {
        return this.mWebViewWrapper.getProgress();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public float getScale() {
        return this.mWebViewWrapper.getScale();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public int getScrollHeight() {
        return this.mWebViewWrapper.getScrollHeight();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public WebSettings getSettings() {
        return this.mWebViewWrapper.getSettings();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public TextClassifier getTextClassifier() {
        return this.mWebViewWrapper.getTextClassifier();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public String getTitle() {
        return this.mWebViewWrapper.getTitle();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public ViewGroup getTopView() {
        return this.mWebViewWrapper.getTopView();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public String getUrl() {
        return this.mWebViewWrapper.getUrl();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public String getVersionInfo() {
        return this.mWebViewWrapper.getVersionInfo();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public View getView() {
        return this.mWebViewWrapper.getView();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public int getVisibleTitleHeight() {
        return this.mWebViewWrapper.getVisibleTitleHeight();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public WebChromeClient getWebChromeClient() {
        return this.mWebViewWrapper.getWebChromeClient();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public int getWebScrollX() {
        return this.mWebViewWrapper.getWebScrollX();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public int getWebScrollY() {
        return this.mWebViewWrapper.getWebScrollY();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public WebViewCallbackClient getWebViewCallbackClient() {
        return this.mWebViewWrapper.getWebViewCallbackClient();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public WebViewClient getWebViewClient() {
        return this.mWebViewWrapper.getWebViewClient();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public Looper getWebViewLooper() {
        return this.mWebViewWrapper.getWebViewLooper();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public WebViewRenderProcessClient getWebViewRenderProcessClient() {
        return this.mWebViewWrapper.getWebViewRenderProcessClient();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public View getWebViewUI() {
        return this.mWebViewWrapper.getWebViewUI();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void goBack() {
        this.mWebViewWrapper.goBack();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void goBackOrForward(int i15) {
        this.mWebViewWrapper.goBackOrForward(i15);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void goForward() {
        this.mWebViewWrapper.goForward();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public boolean hasEnteredFullscreen() {
        return this.mWebViewWrapper.hasEnteredFullscreen();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public Bundle invokeMiscMethod(String str, Bundle bundle) {
        return this.mWebViewWrapper.invokeMiscMethod(str, bundle);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public boolean isOverScrollStart() {
        return this.mWebViewWrapper.isOverScrollStart();
    }

    public boolean isSysKernel() {
        return this.mInstanceWebViewKind == WebViewKind.WV_KIND_SYS;
    }

    @Deprecated
    public boolean isXWalkKernel() {
        return this.mInstanceWebViewKind == WebViewKind.WV_KIND_PINUS;
    }

    public boolean isXWebKernel() {
        return this.mInstanceWebViewKind == WebViewKind.WV_KIND_PINUS;
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void leaveFullscreen() {
        this.mWebViewWrapper.leaveFullscreen();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void loadData(String str, String str2, String str3) {
        this.mWebViewWrapper.loadData(str, str2, str3);
        WXWebReporter.reportPVNew(str, this);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void loadDataWithBaseURL(String str, String str2, String str3, String str4, String str5) {
        this.mWebViewWrapper.loadDataWithBaseURL(str, str2, str3, str4, str5);
        WXWebReporter.reportPVNew(str, this);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void loadUrl(String str, Map<String, String> map) {
        if (this.mDebugView.onInterceptTestUrl(str)) {
            this.mWebViewWrapper.loadUrl("http://weixin.qq.com/");
            return;
        }
        HashMap hashMap = null;
        if (map != null) {
            synchronized (map) {
                hashMap = new HashMap();
                hashMap.putAll(map);
            }
        }
        this.mWebViewWrapper.loadUrl(str, hashMap);
        WXWebReporter.reportPVNew(str, this);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void onHide() {
        this.mWebViewWrapper.onHide();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void onPause() {
        this.mWebViewWrapper.onPause();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void onResume() {
        this.mWebViewWrapper.onResume();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void onShow() {
        this.mWebViewWrapper.onShow();
    }

    public void onVisibilityChanged(View view, int i15) {
        super.onVisibilityChanged(view, i15);
        IWebView iWebView = this.mWebViewWrapper;
        if (iWebView != null) {
            View view2 = iWebView.getView();
            k30.a aVar = new k30.a();
            ThreadLocal<k30.a> threadLocal = c.f244265a;
            aVar.c(Integer.valueOf(i15));
            a.d(view2, aVar.b(), "com/tencent/xweb/WebView", "onVisibilityChanged", "(Landroid/view/View;I)V", "android/view/View_EXEC_", "setVisibility", "(I)V");
            view2.setVisibility(((Integer) aVar.a(0)).intValue());
            a.e(view2, "com/tencent/xweb/WebView", "onVisibilityChanged", "(Landroid/view/View;I)V", "android/view/View_EXEC_", "setVisibility", "(I)V");
        }
    }

    public void onWebViewScrollChanged(int i15, int i16, int i17, int i18) {
    }

    @Override // com.tencent.xweb.internal.IWebView
    public boolean overlayHorizontalScrollbar() {
        return this.mWebViewWrapper.overlayHorizontalScrollbar();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public boolean overlayVerticalScrollbar() {
        return this.mWebViewWrapper.overlayVerticalScrollbar();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public boolean pageDown(boolean z15) {
        return this.mWebViewWrapper.pageDown(z15);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public boolean pageUp(boolean z15) {
        return this.mWebViewWrapper.pageUp(z15);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void pauseTimers() {
        this.mWebViewWrapper.pauseTimers();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void postUrl(String str, byte[] bArr) {
        this.mWebViewWrapper.postUrl(str, bArr);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void postVisualStateCallback(long j15, VisualStateCallback visualStateCallback) {
        this.mWebViewWrapper.postVisualStateCallback(j15, visualStateCallback);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void postWebMessage(WebMessage webMessage, Uri uri) {
        this.mWebViewWrapper.postWebMessage(webMessage, uri);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void reload() {
        this.mWebViewWrapper.reload();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void removeDocumentStartJavaScript(int i15) {
        this.mWebViewWrapper.removeDocumentStartJavaScript(i15);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void removeJavascriptInterface(String str) {
        this.mWebViewWrapper.removeJavascriptInterface(str);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void requestFocusNodeHref(Message message) {
        this.mWebViewWrapper.requestFocusNodeHref(message);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void requestImageRef(Message message) {
        this.mWebViewWrapper.requestImageRef(message);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public WebBackForwardList restoreState(Bundle bundle) {
        return this.mWebViewWrapper.restoreState(bundle);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void resumeTimers() {
        this.mWebViewWrapper.resumeTimers();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public boolean savePage(String str, String str2, int i15) {
        return this.mWebViewWrapper.savePage(str, str2, i15);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public WebBackForwardList saveState(Bundle bundle) {
        return this.mWebViewWrapper.saveState(bundle);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void saveWebArchive(String str) {
        this.mWebViewWrapper.saveWebArchive(str);
    }

    public void setBackgroundColor(int i15) {
        XWebLog.i(TAG, "setBackgroundColor, color:" + Integer.toHexString(i15));
        super.setBackgroundColor(i15);
        IWebView iWebView = this.mWebViewWrapper;
        if (iWebView != null) {
            iWebView.getWebViewUI().setBackgroundColor(i15);
        }
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void setBottomHeight(int i15) {
        this.mWebViewWrapper.setBottomHeight(i15);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void setDownloadListener(DownloadListener downloadListener) {
        this.mWebViewWrapper.setDownloadListener(downloadListener);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void setFindListener(WebView.FindListener findListener) {
        this.mWebViewWrapper.setFindListener(findListener);
    }

    @Override // android.view.View
    public void setFocusable(boolean z15) {
        if (!z15) {
            setDescendantFocusability(393216);
            super.setFocusable(false);
            return;
        }
        setDescendantFocusability(131072);
        super.setFocusable(false);
    }

    public void setFocusableInTouchMode(boolean z15) {
        if (!z15) {
            setDescendantFocusability(393216);
            super.setFocusableInTouchMode(false);
            return;
        }
        setDescendantFocusability(131072);
        super.setFocusableInTouchMode(false);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void setHorizontalScrollBarEnabled(boolean z15) {
        this.mWebViewWrapper.setHorizontalScrollBarEnabled(z15);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void setHorizontalScrollbarOverlay(boolean z15) {
        this.mWebViewWrapper.setHorizontalScrollbarOverlay(z15);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void setHttpAuthUsernamePassword(String str, String str2, String str3, String str4) {
        this.mWebViewWrapper.setHttpAuthUsernamePassword(str, str2, str3, str4);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void setInitialScale(int i15) {
        this.mWebViewWrapper.setInitialScale(i15);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void setJSExceptionListener(WebViewJSExceptionListener webViewJSExceptionListener) {
        this.mWebViewWrapper.setJSExceptionListener(webViewJSExceptionListener);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void setNetworkAvailable(boolean z15) {
        this.mWebViewWrapper.setNetworkAvailable(z15);
    }

    public void setOnLongClickListener(View.OnLongClickListener onLongClickListener) {
        this.mOnLongClickListener = onLongClickListener;
    }

    public void setOnTouchListener(View.OnTouchListener onTouchListener) {
        this.mWebViewWrapper.getWebViewUI().setOnTouchListener(onTouchListener);
    }

    @Override // com.tencent.xweb.internal.IWebView
    @Deprecated
    public void setPictureListener(WebView.PictureListener pictureListener) {
        this.mWebViewWrapper.setPictureListener(pictureListener);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void setTextClassifier(TextClassifier textClassifier) {
        this.mWebViewWrapper.setTextClassifier(textClassifier);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void setVerticalScrollBarEnabled(boolean z15) {
        this.mWebViewWrapper.setVerticalScrollBarEnabled(z15);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void setVerticalScrollbarOverlay(boolean z15) {
        this.mWebViewWrapper.setVerticalScrollbarOverlay(z15);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public VideoControl setVideoJsCallback(VideoJsCallback videoJsCallback) {
        return this.mWebViewWrapper.setVideoJsCallback(videoJsCallback);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void setWebChromeClient(WebChromeClient webChromeClient) {
        this.mWebViewWrapper.setWebChromeClient(webChromeClient);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void setWebContentsSize(int i15, int i16) {
        this.mWebViewWrapper.setWebContentsSize(i15, i16);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void setWebViewCallbackClient(WebViewCallbackClient webViewCallbackClient) {
        this.mWebViewWrapper.setWebViewCallbackClient(webViewCallbackClient);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void setWebViewClient(WebViewClient webViewClient) {
        this.mWebViewWrapper.setWebViewClient(webViewClient);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void setWebViewClientExtension(ProxyWebViewClientExtension proxyWebViewClientExtension) {
        this.mWebViewWrapper.setWebViewClientExtension(proxyWebViewClientExtension);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void setWebViewRenderProcessClient(Executor executor, WebViewRenderProcessClient webViewRenderProcessClient) {
        this.mWebViewWrapper.setWebViewRenderProcessClient(executor, webViewRenderProcessClient);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void setXWebKeyEventHandler(XWebKeyEventHandler xWebKeyEventHandler) {
        this.mWebViewWrapper.setXWebKeyEventHandler(xWebKeyEventHandler);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void smoothScroll(int i15, int i16, long j15) {
        this.mWebViewWrapper.smoothScroll(i15, i16, j15);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void stopLoading() {
        this.mWebViewWrapper.stopLoading();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public boolean supportFeature(int i15) {
        return this.mWebViewWrapper.supportFeature(i15);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public boolean supportSetWebContentsSize() {
        return this.mWebViewWrapper.supportSetWebContentsSize();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void zoomBy(float f15) {
        this.mWebViewWrapper.zoomBy(f15);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public boolean zoomIn() {
        return this.mWebViewWrapper.zoomIn();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public boolean zoomOut() {
        return this.mWebViewWrapper.zoomOut();
    }

    public WebView(Context context, AttributeSet attributeSet) {
        this(context, attributeSet, 0);
    }

    public static WebViewKind getPreferedWebviewType(WebViewKind webViewKind, String str) {
        XWebLog.addInitializeLog(TAG, "getPreferedWebviewType start, kind:" + webViewKind + ", module:" + str);
        WebViewKind webViewKind2 = sProcessWebViewKind;
        WebViewKind webViewKind3 = WebViewKind.WV_KIND_NONE;
        if (webViewKind2 != webViewKind3) {
            XWebLog.addInitializeLog(TAG, "getPreferedWebviewType end, already get webview type:" + sProcessWebViewKind);
            return sProcessWebViewKind;
        } else if (AbiUtil.isIaDevice()) {
            XWebLog.addInitializeLog(TAG, "getPreferedWebviewType end, x86 device, use sys");
            WXWebReporter.idkeyReport(69, 1);
            return WebViewKind.WV_KIND_SYS;
        } else {
            WebViewKind webViewKind4 = WebDebugCfg.getInst().getWebViewKind(str);
            if (webViewKind4 != webViewKind3) {
                XWebLog.addInitializeLog(TAG, "use hard code webview type:" + webViewKind4);
                webViewKind = webViewKind4;
            } else if (XWalkEnvironment.getBuildConfigForceXWebCore()) {
                webViewKind = sDefaultWebViewKind;
                XWebLog.addInitializeLog(TAG, "use compile config force to xweb");
            } else if (CommandCfg.getInstance().getWebKind(str) != webViewKind3) {
                webViewKind = CommandCfg.getInstance().getWebKind(str);
                XWebLog.addInitializeLog(TAG, "use cmd config webview type:" + webViewKind);
            }
            WXWebReporter.setMostPrefferdCore(webViewKind);
            if ((webViewKind == WebViewKind.WV_KIND_CW || webViewKind == WebViewKind.WV_KIND_PINUS) && !XWalkEnvironment.hasAvailableVersion()) {
                webViewKind = WebViewKind.WV_KIND_SYS;
                sIsWaitForInstallXWeb = true;
                XWebLog.addInitializeLog(TAG, "xweb is not available, use sys");
            }
            XWebLog.addInitializeLog(TAG, "getPreferedWebviewType end, final webview type:" + webViewKind);
            return webViewKind;
        }
    }

    @Override // com.tencent.xweb.internal.IWebView
    public Bitmap captureBitmap() {
        return this.mWebViewWrapper.captureBitmap();
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void saveWebArchive(String str, boolean z15, ValueCallback<String> valueCallback) {
        this.mWebViewWrapper.saveWebArchive(str, z15, valueCallback);
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void setWebViewRenderProcessClient(WebViewRenderProcessClient webViewRenderProcessClient) {
        this.mWebViewWrapper.setWebViewRenderProcessClient(null, webViewRenderProcessClient);
    }

    public WebView(Context context, AttributeSet attributeSet, int i15) {
        this(context, attributeSet, i15, WebViewKind.WV_KIND_NONE);
    }

    public WebView(Context context, AttributeSet attributeSet, int i15, WebViewKind webViewKind) {
        super(replaceContextWrapperForWebViewConstructorIfNeed(context), attributeSet, i15);
        this.mInstanceWebViewKind = WebViewKind.WV_KIND_NONE;
        this.mHasDestroyed = false;
        KVReportForWebView kVReportForWebView = new KVReportForWebView();
        this.mKVReportForWebView = kVReportForWebView;
        kVReportForWebView.startCreateWebView();
        createWebView(webViewKind);
        kVReportForWebView.finishCreateWebView(1);
        XWebLog.w(TAG, "###### createWebView costTime:" + kVReportForWebView.getCreateWebViewCostTime() + ", stack:" + Log.getStackTraceString(new Throwable("please ignore this exception")));
    }

    @Override // com.tencent.xweb.internal.IWebView
    public void loadUrl(String str) {
        if (this.mDebugView.onInterceptTestUrl(str)) {
            this.mWebViewWrapper.loadUrl("http://weixin.qq.com/");
            return;
        }
        this.mWebViewWrapper.loadUrl(str);
        WXWebReporter.reportPVNew(str, this);
    }

    public static synchronized boolean initWebviewCore(Context context, WebViewKind webViewKind, PreInitCallback preInitCallback, boolean z15) {
        synchronized (WebView.class) {
            XWebLog.addInitializeLog(TAG, "initWebviewCore, kind:" + webViewKind + ", bTryOtherWebtype:" + z15);
            boolean tryInitWebViewCore = tryInitWebViewCore(context, webViewKind);
            if (!tryInitWebViewCore && z15) {
                XWebLog.w(TAG, "initWebviewCore failed, type:" + webViewKind + ", try other webview types");
                WebViewKind[] webViewKindList = getWebViewKindList();
                int i15 = 0;
                while (true) {
                    if (i15 >= webViewKindList.length) {
                        break;
                    }
                    WebViewKind webViewKind2 = webViewKindList[i15];
                    if (webViewKind2 != webViewKind) {
                        tryInitWebViewCore = tryInitWebViewCore(context, webViewKind2);
                        if (tryInitWebViewCore) {
                            sProcessWebViewKind = webViewKindList[i15];
                            break;
                        }
                    }
                    i15++;
                }
            } else if (tryInitWebViewCore) {
                sProcessWebViewKind = webViewKind;
            }
            if (!tryInitWebViewCore) {
                XWebLog.e(TAG, "initWebviewCore failed finally");
                if (preInitCallback != null) {
                    preInitCallback.onCoreInitFailed();
                }
                WXWebReporter.onInitCoreFailedFinally();
                return false;
            }
            if (preInitCallback != null) {
                preInitCallback.onCoreInitFinished();
            }
            XWebLog.addInitializeLog(TAG, "initWebviewCore success, type:" + sProcessWebViewKind + ", sdkVer:" + XWebSdk.getXWebSdkVersion() + ", apkVer:" + XWalkEnvironment.getAvailableVersion());
            return true;
        }
    }
}