Weather Tracker v1.0.0版本的 MD5 值为:3edef27647e42a8ea0e7c0d2dbf56f97
以下内容为反编译后的 VungleWebClient.java 源代码,内容仅作参考
package com.vungle.warren.ui.view;
import android.annotation.TargetApi;
import android.net.Uri;
import android.os.Build;
import android.os.Handler;
import android.text.TextUtils;
import android.util.Log;
import android.webkit.RenderProcessGoneDetail;
import android.webkit.WebResourceError;
import android.webkit.WebResourceRequest;
import android.webkit.WebResourceResponse;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.webkit.WebViewRenderProcess;
import android.webkit.WebViewRenderProcessClient;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import com.google.gson.JsonObject;
import com.tradplus.ads.common.FSConstants;
import com.unity3d.ads.metadata.MediationMetaData;
import com.unity3d.services.core.request.metrics.MetricCommonTags;
import com.vungle.warren.model.Advertisement;
import com.vungle.warren.model.Placement;
import com.vungle.warren.omsdk.WebViewObserver;
import com.vungle.warren.ui.view.WebViewAPI;
import java.util.concurrent.ExecutorService;
public class VungleWebClient extends WebViewClient implements WebViewAPI {
public static final String TAG = VungleWebClient.class.getSimpleName();
private WebViewAPI.MRAIDDelegate MRAIDDelegate;
private Advertisement advertisement;
private boolean collectConsent;
private WebViewAPI.WebClientErrorHandler errorHandler;
private String gdprAccept;
private String gdprBody;
private String gdprDeny;
private String gdprTitle;
private Boolean isViewable;
private WebView loadedWebView;
private ExecutorService offloadExecutor;
private Placement placement;
private boolean ready;
@Nullable
private WebViewObserver webViewObserver;
@RequiresApi(29)
static class VungleWebViewRenderProcessClient extends WebViewRenderProcessClient {
WebViewAPI.WebClientErrorHandler errorHandler;
VungleWebViewRenderProcessClient(WebViewAPI.WebClientErrorHandler webClientErrorHandler) {
this.errorHandler = webClientErrorHandler;
}
@Override
public void onRenderProcessResponsive(WebView webView, WebViewRenderProcess webViewRenderProcess) {
}
@Override
public void onRenderProcessUnresponsive(WebView webView, WebViewRenderProcess webViewRenderProcess) {
String str = VungleWebClient.TAG;
StringBuilder sb = new StringBuilder();
sb.append("onRenderProcessUnresponsive(Title = ");
sb.append(webView.getTitle());
sb.append(", URL = ");
sb.append(webView.getOriginalUrl());
sb.append(", (webViewRenderProcess != null) = ");
sb.append(webViewRenderProcess != null);
Log.w(str, sb.toString());
WebViewAPI.WebClientErrorHandler webClientErrorHandler = this.errorHandler;
if (webClientErrorHandler != null) {
webClientErrorHandler.onRenderProcessUnresponsive(webView, webViewRenderProcess);
}
}
}
public VungleWebClient(Advertisement advertisement, Placement placement, ExecutorService executorService) {
this.advertisement = advertisement;
this.placement = placement;
this.offloadExecutor = executorService;
}
private void handleWebViewError(String str, String str2) {
boolean isCriticalAsset = isCriticalAsset(str2);
String str3 = str2 + " " + str;
WebViewAPI.WebClientErrorHandler webClientErrorHandler = this.errorHandler;
if (webClientErrorHandler != null) {
webClientErrorHandler.onReceivedError(str3, isCriticalAsset);
}
}
private boolean isCriticalAsset(String str) {
Advertisement advertisement;
if (TextUtils.isEmpty(str) || (advertisement = this.advertisement) == null) {
return false;
}
return advertisement.getDownloadableUrls().containsValue(str);
}
public void runJavascriptOnWebView(@NonNull WebView webView, @NonNull String str) {
if (Build.VERSION.SDK_INT >= 19) {
webView.evaluateJavascript(str, null);
return;
}
webView.loadUrl("javascript:" + str);
}
@Override
public void notifyPropertiesChange(boolean z) {
if (this.loadedWebView != null) {
JsonObject jsonObject = new JsonObject();
JsonObject jsonObject2 = new JsonObject();
jsonObject2.addProperty("width", Integer.valueOf(this.loadedWebView.getWidth()));
jsonObject2.addProperty("height", Integer.valueOf(this.loadedWebView.getHeight()));
JsonObject jsonObject3 = new JsonObject();
jsonObject3.addProperty("x", (Number) 0);
jsonObject3.addProperty("y", (Number) 0);
jsonObject3.addProperty("width", Integer.valueOf(this.loadedWebView.getWidth()));
jsonObject3.addProperty("height", Integer.valueOf(this.loadedWebView.getHeight()));
JsonObject jsonObject4 = new JsonObject();
Boolean bool = Boolean.FALSE;
jsonObject4.addProperty("sms", bool);
jsonObject4.addProperty("tel", bool);
jsonObject4.addProperty("calendar", bool);
jsonObject4.addProperty("storePicture", bool);
jsonObject4.addProperty("inlineVideo", bool);
jsonObject.add("maxSize", jsonObject2);
jsonObject.add("screenSize", jsonObject2);
jsonObject.add("defaultPosition", jsonObject3);
jsonObject.add("currentPosition", jsonObject3);
jsonObject.add("supports", jsonObject4);
jsonObject.addProperty("placementType", this.advertisement.getTemplateType());
Boolean bool2 = this.isViewable;
if (bool2 != null) {
jsonObject.addProperty("isViewable", bool2);
}
jsonObject.addProperty("os", MetricCommonTags.METRIC_COMMON_TAG_PLATFORM_ANDROID);
jsonObject.addProperty("osVersion", Integer.toString(Build.VERSION.SDK_INT));
jsonObject.addProperty("incentivized", Boolean.valueOf(this.placement.isIncentivized()));
jsonObject.addProperty("enableBackImmediately", Boolean.valueOf(this.advertisement.getShowCloseDelay(this.placement.isIncentivized()) == 0));
jsonObject.addProperty(MediationMetaData.KEY_VERSION, "1.0");
if (this.collectConsent) {
jsonObject.addProperty("consentRequired", Boolean.TRUE);
jsonObject.addProperty("consentTitleText", this.gdprTitle);
jsonObject.addProperty("consentBodyText", this.gdprBody);
jsonObject.addProperty("consentAcceptButtonText", this.gdprAccept);
jsonObject.addProperty("consentDenyButtonText", this.gdprDeny);
} else {
jsonObject.addProperty("consentRequired", bool);
}
jsonObject.addProperty("sdkVersion", "6.12.1");
String str = TAG;
Log.d(str, "loadJsjavascript:window.vungle.mraidBridge.notifyPropertiesChange(" + jsonObject + "," + z + ")");
runJavascriptOnWebView(this.loadedWebView, "window.vungle.mraidBridge.notifyPropertiesChange(" + jsonObject + "," + z + ")");
}
}
@Override
public void onPageFinished(WebView webView, String str) {
super.onPageFinished(webView, str);
int adType = this.advertisement.getAdType();
if (adType == 0) {
runJavascriptOnWebView(webView, "function actionClicked(action){Android.performAction(action);};");
} else if (adType == 1) {
this.loadedWebView = webView;
webView.setVisibility(0);
notifyPropertiesChange(true);
} else {
throw new IllegalArgumentException("Unknown Client Type!");
}
if (Build.VERSION.SDK_INT >= 29) {
webView.setWebViewRenderProcessClient(new VungleWebViewRenderProcessClient(this.errorHandler));
}
WebViewObserver webViewObserver = this.webViewObserver;
if (webViewObserver != null) {
webViewObserver.onPageFinished(webView);
}
}
@Override
public void onReceivedError(WebView webView, int i, String str, String str2) {
super.onReceivedError(webView, i, str, str2);
if (Build.VERSION.SDK_INT < 23) {
String str3 = TAG;
Log.e(str3, "Error desc " + str);
Log.e(str3, "Error for URL " + str2);
handleWebViewError(str, str2);
}
}
@Override
public void onReceivedHttpError(WebView webView, WebResourceRequest webResourceRequest, WebResourceResponse webResourceResponse) {
super.onReceivedHttpError(webView, webResourceRequest, webResourceResponse);
if (Build.VERSION.SDK_INT >= 21) {
String str = TAG;
Log.e(str, "Error desc " + webResourceResponse.getStatusCode());
Log.e(str, "Error for URL " + webResourceRequest.getUrl().toString());
handleWebViewError(String.valueOf(webResourceResponse.getStatusCode()), webResourceRequest.getUrl().toString());
}
}
@Override
@TargetApi(26)
public boolean onRenderProcessGone(WebView webView, RenderProcessGoneDetail renderProcessGoneDetail) {
String str = TAG;
Log.w(str, "onRenderProcessGone url: " + webView.getUrl() + ", did crash: " + renderProcessGoneDetail.didCrash());
this.loadedWebView = null;
WebViewAPI.WebClientErrorHandler webClientErrorHandler = this.errorHandler;
if (webClientErrorHandler != null) {
return webClientErrorHandler.onWebRenderingProcessGone(webView, renderProcessGoneDetail.didCrash());
}
return super.onRenderProcessGone(webView, renderProcessGoneDetail);
}
@Override
public void setAdVisibility(boolean z) {
this.isViewable = Boolean.valueOf(z);
notifyPropertiesChange(false);
}
@Override
public void setConsentStatus(boolean z, @Nullable String str, @Nullable String str2, @Nullable String str3, @Nullable String str4) {
this.collectConsent = z;
this.gdprTitle = str;
this.gdprBody = str2;
this.gdprAccept = str3;
this.gdprDeny = str4;
}
@Override
public void setErrorHandler(WebViewAPI.WebClientErrorHandler webClientErrorHandler) {
this.errorHandler = webClientErrorHandler;
}
@Override
public void setMRAIDDelegate(WebViewAPI.MRAIDDelegate mRAIDDelegate) {
this.MRAIDDelegate = mRAIDDelegate;
}
@Override
public void setWebViewObserver(WebViewObserver webViewObserver) {
this.webViewObserver = webViewObserver;
}
@Override
public boolean shouldOverrideUrlLoading(final WebView webView, String str) {
String str2 = TAG;
Log.d(str2, "MRAID Command " + str);
if (TextUtils.isEmpty(str)) {
Log.e(str2, "Invalid URL ");
return false;
}
Uri parse = Uri.parse(str);
if (parse.getScheme() != null) {
String scheme = parse.getScheme();
if (scheme.equals("mraid")) {
final String host = parse.getHost();
if (host != null) {
if ("propertiesChangeCompleted".equals(host) && !this.ready) {
JsonObject createMRAIDArgs = this.advertisement.createMRAIDArgs();
runJavascriptOnWebView(webView, "window.vungle.mraidBridge.notifyReadyEvent(" + createMRAIDArgs + ")");
this.ready = true;
} else if (this.MRAIDDelegate != null) {
final JsonObject jsonObject = new JsonObject();
for (String str3 : parse.getQueryParameterNames()) {
jsonObject.addProperty(str3, parse.getQueryParameter(str3));
}
final Handler handler = new Handler();
this.offloadExecutor.submit(new Runnable() {
@Override
public void run() {
if (VungleWebClient.this.MRAIDDelegate.processCommand(host, jsonObject)) {
handler.post(new Runnable() {
@Override
public void run() {
AnonymousClass1 anonymousClass1 = AnonymousClass1.this;
VungleWebClient.this.runJavascriptOnWebView(webView, "window.vungle.mraidBridge.notifyCommandComplete()");
}
});
}
}
});
}
return true;
}
return false;
} else if (FSConstants.HTTP.equalsIgnoreCase(scheme) || "https".equalsIgnoreCase(scheme)) {
Log.d(str2, "Open URL" + str);
if (this.MRAIDDelegate != null) {
JsonObject jsonObject2 = new JsonObject();
jsonObject2.addProperty("url", str);
this.MRAIDDelegate.processCommand("openNonMraid", jsonObject2);
}
return true;
}
}
return false;
}
@Override
public void onReceivedError(WebView webView, WebResourceRequest webResourceRequest, WebResourceError webResourceError) {
super.onReceivedError(webView, webResourceRequest, webResourceError);
if (Build.VERSION.SDK_INT >= 23) {
String str = TAG;
Log.e(str, "Error desc " + webResourceError.getDescription().toString());
Log.e(str, "Error for URL " + webResourceRequest.getUrl().toString());
handleWebViewError(webResourceError.getDescription().toString(), webResourceRequest.getUrl().toString());
}
}
}