package com.unity3d.services.core.webview; import android.os.Build; import android.os.ConditionVariable; import android.os.Looper; import android.webkit.RenderProcessGoneDetail; import android.webkit.WebResourceError; import android.webkit.WebResourceRequest; import android.webkit.WebViewClient; import com.google.android.gms.ads.RequestConfiguration; import com.unity3d.services.ads.api.AdUnit; import com.unity3d.services.core.configuration.Configuration; import com.unity3d.services.core.configuration.ErrorState; import com.unity3d.services.core.configuration.InitializeThread; import com.unity3d.services.core.log.DeviceLog; import com.unity3d.services.core.misc.Utilities; import com.unity3d.services.core.misc.ViewUtilities; import com.unity3d.services.core.properties.ClientProperties; import com.unity3d.services.core.properties.SdkProperties; import com.unity3d.services.core.request.metrics.SDKMetrics; import com.unity3d.services.core.webview.bridge.CallbackStatus; import com.unity3d.services.core.webview.bridge.IWebViewBridgeInvoker; import com.unity3d.services.core.webview.bridge.Invocation; import com.unity3d.services.core.webview.bridge.NativeCallback; import com.unity3d.services.core.webview.bridge.WebViewBridge; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; import java.util.concurrent.atomic.AtomicReference; import org.json.JSONArray; /* loaded from: classes2.dex */ public class WebViewApp implements IWebViewBridgeInvoker { private static final int INVOKE_JS_CHARS_LENGTH = 22; private static ConditionVariable _conditionVariable; private static WebViewApp _currentApp; private Configuration _configuration; private WebView _webView; private static final AtomicReference _initialized = new AtomicReference<>(Boolean.FALSE); private static final AtomicReference _webAppFailureMessage = new AtomicReference<>(); private static final AtomicReference _webAppFailureCode = new AtomicReference<>(); private boolean _webAppLoaded = false; private final HashMap _nativeCallbacks = new HashMap<>(); private static class WebAppClient extends WebViewClient { private WebAppClient() { } @Override // android.webkit.WebViewClient public void onPageFinished(android.webkit.WebView webView, String str) { super.onPageFinished(webView, str); DeviceLog.debug("Unity Ads SDK finished loading URL inside WebView: " + str); } @Override // android.webkit.WebViewClient public void onReceivedError(android.webkit.WebView webView, WebResourceRequest webResourceRequest, WebResourceError webResourceError) { int errorCode; super.onReceivedError(webView, webResourceRequest, webResourceError); if (Build.VERSION.SDK_INT < 23 || webResourceRequest == null || webResourceError == null) { if (webResourceRequest == null) { DeviceLog.error("Unity Ads SDK encountered an error in WebView while loading a resource"); return; } DeviceLog.error("Unity Ads SDK encountered an error in WebView while loading a resource " + webResourceRequest.getUrl()); return; } StringBuilder sb = new StringBuilder(); sb.append("Unity Ads SDK encountered an error (code: "); errorCode = webResourceError.getErrorCode(); sb.append(errorCode); sb.append(") in WebView while loading a resource "); sb.append(webResourceRequest.getUrl()); DeviceLog.error(sb.toString()); } @Override // android.webkit.WebViewClient public boolean onRenderProcessGone(android.webkit.WebView webView, RenderProcessGoneDetail renderProcessGoneDetail) { Utilities.runOnUiThread(new Runnable() { // from class: com.unity3d.services.core.webview.WebViewApp.WebAppClient.1 @Override // java.lang.Runnable public void run() { if (AdUnit.getAdUnitActivity() != null) { AdUnit.getAdUnitActivity().finish(); } if (WebViewApp.getCurrentApp() != null && WebViewApp.getCurrentApp().getWebView() != null) { ViewUtilities.removeViewFromParent(WebViewApp.getCurrentApp().getWebView()); } InitializeThread.reset(); } }); DeviceLog.error("UnityAds SDK WebView render process gone with following reason : " + renderProcessGoneDetail.toString()); SDKMetrics.getInstance().sendEvent("native_webview_render_process_gone", new HashMap(renderProcessGoneDetail) { // from class: com.unity3d.services.core.webview.WebViewApp.WebAppClient.2 final /* synthetic */ RenderProcessGoneDetail val$detail; { boolean didCrash; int rendererPriorityAtExit; this.val$detail = renderProcessGoneDetail; if (Build.VERSION.SDK_INT >= 26) { StringBuilder sb = new StringBuilder(); sb.append(RequestConfiguration.MAX_AD_CONTENT_RATING_UNSPECIFIED); didCrash = renderProcessGoneDetail.didCrash(); sb.append(didCrash); put("dc", sb.toString()); StringBuilder sb2 = new StringBuilder(); sb2.append(RequestConfiguration.MAX_AD_CONTENT_RATING_UNSPECIFIED); rendererPriorityAtExit = renderProcessGoneDetail.rendererPriorityAtExit(); sb2.append(rendererPriorityAtExit); put("pae", sb2.toString()); } } }); return true; } @Override // android.webkit.WebViewClient public boolean shouldOverrideUrlLoading(android.webkit.WebView webView, String str) { DeviceLog.debug("Unity Ads SDK attempts to load URL inside WebView: " + str); return false; } } public WebViewApp(Configuration configuration, boolean z10, boolean z11) { setConfiguration(configuration); WebViewBridge.setClassTable(getConfiguration().getWebAppApiClassList()); WebView webViewWithCache = z10 ? new WebViewWithCache(ClientProperties.getApplicationContext(), z11) : new WebView(ClientProperties.getApplicationContext(), z11); this._webView = webViewWithCache; webViewWithCache.setWebViewClient(new WebAppClient()); } private String buildInvokeJavascript(String str, String str2, JSONArray jSONArray) { String jSONArray2 = jSONArray.toString(); StringBuilder sb = new StringBuilder(str.length() + 22 + str2.length() + jSONArray2.length()); sb.append("javascript:window."); sb.append(str); sb.append("."); sb.append(str2); sb.append("("); sb.append(jSONArray2); sb.append(");"); return sb.toString(); } public static ErrorState create(Configuration configuration) { return create(configuration, false); } private static ErrorState createWithRemoteUrl(final Configuration configuration) { if (Thread.currentThread().equals(Looper.getMainLooper().getThread())) { throw new IllegalThreadStateException("Cannot call create() from main thread!"); } Utilities.runOnUiThread(new Runnable() { // from class: com.unity3d.services.core.webview.WebViewApp.2 @Override // java.lang.Runnable public void run() { try { Configuration configuration2 = Configuration.this; WebViewApp webViewApp = new WebViewApp(configuration2, true, configuration2.getExperiments().isWebGestureNotRequired()); webViewApp.getWebView().loadUrl(new WebViewUrlBuilder(Configuration.this.getWebViewUrl(), Configuration.this).getUrlWithQueryString()); WebViewApp.setCurrentApp(webViewApp); } catch (Exception unused) { DeviceLog.error("Unity Ads SDK unable to create WebViewApp"); WebViewApp._conditionVariable.open(); } } }); ConditionVariable conditionVariable = new ConditionVariable(); _conditionVariable = conditionVariable; boolean block = conditionVariable.block(configuration.getWebViewAppCreateTimeout()); boolean z10 = getCurrentApp() != null; if (block && z10 && (z10 && getCurrentApp().isWebAppInitialized())) { return null; } return !block ? ErrorState.CreateWebviewTimeout : getCurrentApp() == null ? ErrorState.CreateWebview : getCurrentApp().getErrorStateFromWebAppCode(); } public static WebViewApp getCurrentApp() { return _currentApp; } private void invokeJavascriptMethod(String str, String str2, JSONArray jSONArray) { String buildInvokeJavascript = buildInvokeJavascript(str, str2, jSONArray); DeviceLog.debug("Invoking javascript: %s", buildInvokeJavascript); getWebView().invokeJavascript(buildInvokeJavascript); } public static void setCurrentApp(WebViewApp webViewApp) { _currentApp = webViewApp; } public void addCallback(NativeCallback nativeCallback) { synchronized (this._nativeCallbacks) { this._nativeCallbacks.put(nativeCallback.getId(), nativeCallback); } } public NativeCallback getCallback(String str) { NativeCallback nativeCallback; synchronized (this._nativeCallbacks) { nativeCallback = this._nativeCallbacks.get(str); } return nativeCallback; } public Configuration getConfiguration() { return this._configuration; } public ErrorState getErrorStateFromWebAppCode() { int webAppFailureCode = getWebAppFailureCode(); return webAppFailureCode == 1 ? ErrorState.CreateWebviewGameIdDisabled : webAppFailureCode == 2 ? ErrorState.CreateWebviewConfigError : webAppFailureCode == 3 ? ErrorState.CreateWebviewInvalidArgument : ErrorState.CreateWebview; } public int getWebAppFailureCode() { return _webAppFailureCode.get().intValue(); } public String getWebAppFailureMessage() { return _webAppFailureMessage.get(); } public WebView getWebView() { return this._webView; } public boolean invokeCallback(Invocation invocation) { if (!isWebAppLoaded()) { DeviceLog.debug("invokeBatchCallback ignored because web app is not loaded"); return false; } JSONArray jSONArray = new JSONArray(); ArrayList> responses = invocation.getResponses(); if (responses != null && !responses.isEmpty()) { Iterator> it = responses.iterator(); while (it.hasNext()) { ArrayList next = it.next(); CallbackStatus callbackStatus = (CallbackStatus) next.get(0); Enum r52 = (Enum) next.get(1); Object[] objArr = (Object[]) next.get(2); String str = (String) objArr[0]; Object[] copyOfRange = Arrays.copyOfRange(objArr, 1, objArr.length); ArrayList arrayList = new ArrayList(); arrayList.add(str); arrayList.add(callbackStatus.toString()); JSONArray jSONArray2 = new JSONArray(); if (r52 != null) { jSONArray2.put(r52.name()); } for (Object obj : copyOfRange) { jSONArray2.put(obj); } arrayList.add(jSONArray2); JSONArray jSONArray3 = new JSONArray(); Iterator it2 = arrayList.iterator(); while (it2.hasNext()) { jSONArray3.put(it2.next()); } jSONArray.put(jSONArray3); } } try { invokeJavascriptMethod("nativebridge", "handleCallback", jSONArray); } catch (Exception e10) { DeviceLog.exception("Error while invoking batch response for WebView", e10); } return true; } @Override // com.unity3d.services.core.webview.bridge.IWebViewBridgeInvoker public boolean invokeMethod(String str, String str2, Method method, Object... objArr) { if (!isWebAppLoaded()) { DeviceLog.debug("invokeMethod ignored because web app is not loaded"); return false; } JSONArray jSONArray = new JSONArray(); jSONArray.put(str); jSONArray.put(str2); if (method != null) { NativeCallback nativeCallback = new NativeCallback(method); addCallback(nativeCallback); jSONArray.put(nativeCallback.getId()); } else { jSONArray.put((Object) null); } if (objArr != null) { for (Object obj : objArr) { jSONArray.put(obj); } } try { invokeJavascriptMethod("nativebridge", "handleInvocation", jSONArray); return true; } catch (Exception e10) { DeviceLog.exception("Error invoking javascript method", e10); return false; } } public boolean isWebAppInitialized() { return _initialized.get().booleanValue(); } public boolean isWebAppLoaded() { return this._webAppLoaded; } public void removeCallback(NativeCallback nativeCallback) { synchronized (this._nativeCallbacks) { this._nativeCallbacks.remove(nativeCallback.getId()); } } public void resetWebViewAppInitialization() { this._webAppLoaded = false; _webAppFailureCode.set(-1); _webAppFailureMessage.set(RequestConfiguration.MAX_AD_CONTENT_RATING_UNSPECIFIED); _initialized.set(Boolean.FALSE); } public boolean sendEvent(Enum r42, Enum r52, Object... objArr) { if (!isWebAppLoaded()) { DeviceLog.debug("sendEvent ignored because web app is not loaded"); return false; } JSONArray jSONArray = new JSONArray(); jSONArray.put(r42.name()); jSONArray.put(r52.name()); for (Object obj : objArr) { jSONArray.put(obj); } try { invokeJavascriptMethod("nativebridge", "handleEvent", jSONArray); return true; } catch (Exception e10) { DeviceLog.exception("Error while sending event to WebView", e10); return false; } } public void setConfiguration(Configuration configuration) { this._configuration = configuration; } public void setWebAppFailureCode(int i10) { _webAppFailureCode.set(Integer.valueOf(i10)); } public void setWebAppFailureMessage(String str) { _webAppFailureMessage.set(str); } public void setWebAppInitialized(boolean z10) { _initialized.set(Boolean.valueOf(z10)); _conditionVariable.open(); } public void setWebAppLoaded(boolean z10) { this._webAppLoaded = z10; } public void setWebView(WebView webView) { this._webView = webView; } public static ErrorState create(final Configuration configuration, boolean z10) { DeviceLog.entered(); if (z10) { return createWithRemoteUrl(configuration); } if (Thread.currentThread().equals(Looper.getMainLooper().getThread())) { throw new IllegalThreadStateException("Cannot call create() from main thread!"); } Utilities.runOnUiThread(new Runnable() { // from class: com.unity3d.services.core.webview.WebViewApp.1 @Override // java.lang.Runnable public void run() { try { Configuration configuration2 = Configuration.this; WebViewApp webViewApp = new WebViewApp(configuration2, configuration2.getExperiments().isWebAssetAdCaching(), Configuration.this.getExperiments().isWebGestureNotRequired()); webViewApp.getWebView().loadDataWithBaseURL(new WebViewUrlBuilder("file://" + SdkProperties.getLocalWebViewFile(), Configuration.this).getUrlWithQueryString(), Configuration.this.getWebViewData(), "text/html", "UTF-8", null); WebViewApp.setCurrentApp(webViewApp); } catch (Exception unused) { DeviceLog.error("Unity Ads SDK unable to create WebViewApp"); WebViewApp._conditionVariable.open(); } } }); ConditionVariable conditionVariable = new ConditionVariable(); _conditionVariable = conditionVariable; boolean block = conditionVariable.block(configuration.getWebViewAppCreateTimeout()); boolean z11 = getCurrentApp() != null; if (block && z11 && (z11 && getCurrentApp().isWebAppInitialized())) { return null; } return !block ? ErrorState.CreateWebviewTimeout : getCurrentApp() == null ? ErrorState.CreateWebview : getCurrentApp().getErrorStateFromWebAppCode(); } public WebViewApp() { } }