正在查看: CallApp v2.226 应用的 MraidWebViewController.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
正在查看: CallApp v2.226 应用的 MraidWebViewController.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
package io.bidmachine.iab.mraid;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Rect;
import android.net.Uri;
import android.text.TextUtils;
import android.util.Base64;
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 androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.n;
import io.bidmachine.iab.IabError;
import io.bidmachine.iab.bridge.JsBridgeHandler;
import io.bidmachine.iab.mraid.MraidWebView;
import io.bidmachine.iab.utils.Logger;
import io.bidmachine.iab.utils.Utils;
import java.io.ByteArrayInputStream;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Locale;
import java.util.Map;
public class MraidWebViewController {
@NonNull
public static final String TAG = "MraidWebViewController";
private final Callback a;
final MraidWebView b;
private boolean c;
private boolean d;
private boolean e;
private MraidOrientationProperties f;
public interface Callback {
void onCalendarEvent(@Nullable String str);
void onClose();
void onError(@NonNull IabError iabError);
void onExpand(@Nullable String str);
void onLoaded();
void onOpen(@NonNull String str);
void onOpenPrivacySheet(@NonNull String str);
void onOrientation(@NonNull MraidOrientationProperties mraidOrientationProperties);
void onPageFinished(@NonNull String str);
void onPlayVideo(@Nullable String str);
void onResize(@NonNull MraidResizeProperties mraidResizeProperties);
void onStorePicture(@Nullable String str);
void onUseCustomClose(boolean z);
void onViewableChanged(boolean z);
}
public class a implements MraidWebView.MraidWebViewListener {
public a() {
}
@Override
public void onViewableChanged(boolean z) {
if (MraidWebViewController.this.c) {
MraidWebViewController.this.applyViewable(z);
}
MraidWebViewController.this.a.onViewableChanged(z);
}
}
public class b extends WebViewClient {
private b() {
}
private WebResourceResponse a() {
String b = MraidUtils.b();
Charset charset = StandardCharsets.UTF_8;
return new WebResourceResponse("text/javascript", charset.name(), new ByteArrayInputStream(b.getBytes(charset)));
}
@Override
public void onPageFinished(WebView webView, String str) {
super.onPageFinished(webView, str);
MraidLog.d(MraidWebViewController.TAG, "onPageFinished", new Object[0]);
if (MraidWebViewController.this.c) {
return;
}
MraidWebViewController.this.c = true;
MraidWebViewController.this.a.onPageFinished(str);
MraidWebViewController.this.getWebView().onPageFinished();
}
@Override
public void onPageStarted(WebView webView, String str, Bitmap bitmap) {
super.onPageStarted(webView, str, bitmap);
MraidLog.d(MraidWebViewController.TAG, "onPageStarted", new Object[0]);
}
@Override
public void onReceivedError(WebView webView, int i, String str, String str2) {
a(str2, str, i);
super.onReceivedError(webView, i, str, str2);
}
@Override
public boolean onRenderProcessGone(WebView webView, RenderProcessGoneDetail renderProcessGoneDetail) {
MraidLog.d(MraidWebViewController.TAG, "onRenderProcessGone", new Object[0]);
MraidWebViewController.this.destroy();
MraidWebViewController.this.a.onError(IabError.internal("WebViewClient - onRenderProcessGone"));
return true;
}
@Override
public WebResourceResponse shouldInterceptRequest(WebView webView, WebResourceRequest webResourceRequest) {
return a(webResourceRequest.getUrl()) ? a() : super.shouldInterceptRequest(webView, webResourceRequest);
}
@Override
public boolean shouldOverrideUrlLoading(WebView webView, String str) {
if (str.startsWith(MraidUtils.COMMAND_URL_PREFIX)) {
MraidWebViewController.this.a(str);
return true;
}
if (JsBridgeHandler.isHandled(str)) {
JsBridgeHandler.handleJsCommand(MraidWebViewController.this.b, str);
return true;
}
MraidWebViewController.this.c(str);
return true;
}
public b(MraidWebViewController mraidWebViewController, a aVar) {
this();
}
private void a(String str, String str2, int i) {
MraidLog.d(MraidWebViewController.TAG, "onError: %s / %s / %d", str, str2, Integer.valueOf(i));
if (str2 == null || !str2.contains("ERR_INTERNET_DISCONNECTED")) {
return;
}
MraidWebViewController.this.e = true;
}
@Override
public void onReceivedError(WebView webView, WebResourceRequest webResourceRequest, WebResourceError webResourceError) {
Uri url = webResourceRequest.getUrl();
a(url != null ? url.toString() : null, webResourceError.getDescription().toString(), webResourceError.getErrorCode());
super.onReceivedError(webView, webResourceRequest, webResourceError);
}
@Override
public WebResourceResponse shouldInterceptRequest(WebView webView, String str) {
return a(str) ? a() : super.shouldInterceptRequest(webView, str);
}
public boolean a(Uri uri) {
return "mraid.js".equals(uri.getLastPathSegment());
}
public boolean a(String str) {
return a(Uri.parse(str.toLowerCase(Locale.US)));
}
}
public MraidWebViewController(@NonNull Context context, @NonNull Callback callback) {
this.a = callback;
MraidWebView mraidWebView = new MraidWebView(context);
this.b = mraidWebView;
mraidWebView.setWebViewClient(new b(this, null));
mraidWebView.setListener(new a());
this.d = false;
this.e = false;
}
public void c(String str) {
if (!this.b.wasClicked()) {
MraidLog.d(TAG, "Can't open url because webView wasn't clicked", new Object[0]);
} else {
this.a.onOpen(str);
this.b.resetClicked();
}
}
public void applyClick(int i, int i2) {
b(n.h(i, i2, "(function click(x, y) {var ev = new MouseEvent('click', { 'view': window, 'bubbles': true, 'cancelable': true, 'screenX': x, 'screenY': y});var el = document.elementFromPoint(x, y);if (el !== null) { el.dispatchEvent(ev); }})(", ", ", ")"));
}
public void applyLogLevel(@Nullable Logger.LogLevel logLevel) {
String str;
if (logLevel == Logger.LogLevel.debug) {
str = "mraid.logLevel = mraid.LogLevelEnum.DEBUG;";
} else if (logLevel == Logger.LogLevel.info) {
str = "mraid.logLevel = mraid.LogLevelEnum.INFO;";
} else if (logLevel == Logger.LogLevel.warning) {
str = "mraid.logLevel = mraid.LogLevelEnum.WARNING;";
} else if (logLevel == Logger.LogLevel.error) {
str = "mraid.logLevel = mraid.LogLevelEnum.ERROR;";
} else if (logLevel != Logger.LogLevel.none) {
return;
} else {
str = "mraid.logLevel = mraid.LogLevelEnum.NONE;";
}
b(str);
}
public void applyPlacement(@NonNull MraidPlacementType mraidPlacementType) {
b("mraid.setPlacementType('" + mraidPlacementType.b() + "');");
}
public void applyScreenMetrics(@NonNull MraidScreenMetrics mraidScreenMetrics) {
Rect e = mraidScreenMetrics.e();
Rect d = mraidScreenMetrics.d();
b("mraid.setScreenSize(" + e.width() + "," + e.height() + ");mraid.setMaxSize(" + d.width() + "," + d.height() + ");mraid.setCurrentPosition(" + Utils.stringifyRect(mraidScreenMetrics.a()) + ");mraid.setDefaultPosition(" + Utils.stringifyRect(mraidScreenMetrics.c()) + ");mraid.fireSizeChangeEvent(" + Utils.stringifySize(mraidScreenMetrics.a()) + ");");
}
public void applyState(@NonNull MraidViewState mraidViewState) {
b("mraid.fireStateChangeEvent('" + mraidViewState.toJsString() + "');");
}
public void applySupportedServices(@NonNull MraidNativeFeatureManager mraidNativeFeatureManager) {
b("mraid.setSupports(mraid.SUPPORTED_FEATURES.CALENDAR, " + mraidNativeFeatureManager.isCalendarFeatureAvailable() + ");mraid.setSupports(mraid.SUPPORTED_FEATURES.INLINEVIDEO, " + mraidNativeFeatureManager.isInlineVideoFeatureAvailable() + ");mraid.setSupports(mraid.SUPPORTED_FEATURES.SMS, " + mraidNativeFeatureManager.isSmsFeatureAvailable() + ");mraid.setSupports(mraid.SUPPORTED_FEATURES.STOREPICTURE, " + mraidNativeFeatureManager.isStorePictureFeatureAvailable() + ");mraid.setSupports(mraid.SUPPORTED_FEATURES.TEL, " + mraidNativeFeatureManager.isTelFeatureAvailable() + ");");
}
public void applyViewable(boolean z) {
b("mraid.fireViewableChangeEvent(" + z + ");");
}
public void destroy() {
MraidWebView webView = getWebView();
Utils.removeFromParent(webView);
webView.destroy();
}
@Nullable
public MraidOrientationProperties getLastOrientationProperties() {
return this.f;
}
@NonNull
public MraidWebView getWebView() {
return this.b;
}
public boolean isReceivedJsError() {
return this.e;
}
public boolean isUseCustomClose() {
return this.d;
}
public boolean isViewable() {
return this.b.isViewable();
}
public void load(@NonNull String str) {
this.c = false;
getWebView().loadUrl(str);
}
public void notifyReady() {
b("mraid.fireReadyEvent();");
}
public void reset() {
getWebView().reset();
}
public void load(@Nullable String str, @NonNull String str2, @Nullable String str3, @Nullable String str4) {
this.c = false;
getWebView().loadDataWithBaseURL(str, str2, str3, str4, null);
}
public void a(String str) {
Map<String, String> parseCommandUrl;
MraidLog.d(TAG, "handleJsCommand - %s", str);
try {
parseCommandUrl = MraidUtils.parseCommandUrl(str);
} catch (Throwable th) {
th.printStackTrace();
}
if (parseCommandUrl == null) {
return;
}
String str2 = parseCommandUrl.get("command");
if (str2 == null) {
MraidLog.w(TAG, "handleJsCommand not found", new Object[0]);
} else {
a(str2, parseCommandUrl);
a();
}
}
public void b(String str) {
this.b.injectJs(str);
}
private void a() {
b("mraid.nativeCallComplete();");
}
private void a(String str, Map map) {
str.getClass();
switch (str) {
case "playVideo":
this.a.onPlayVideo((String) map.get("url"));
break;
case "openPrivacySheet":
String str2 = (String) map.get("data");
if (TextUtils.isEmpty(str2)) {
MraidLog.e(TAG, "data is null or empty", new Object[0]);
break;
} else {
try {
this.a.onOpenPrivacySheet(new String(Base64.decode(str2, 2)));
break;
} catch (Throwable unused) {
MraidLog.e(TAG, "data must be base64 encoded json", new Object[0]);
return;
}
}
case "expand":
MraidLog.d(TAG, "mraid.expand is not supported", new Object[0]);
break;
case "loaded":
this.a.onLoaded();
break;
case "noFill":
this.a.onError(IabError.noFIll("Fired noFill event from mraid.js"));
break;
case "resize":
MraidLog.d(TAG, "mraid.resize is not supported", new Object[0]);
break;
case "createCalendarEvent":
this.a.onCalendarEvent((String) map.get("eventJSON"));
break;
case "open":
String str3 = (String) map.get("url");
if (!TextUtils.isEmpty(str3)) {
c(str3);
break;
} else {
MraidLog.e(TAG, "url is null or empty", new Object[0]);
break;
}
case "close":
this.a.onClose();
break;
case "setOrientationProperties":
MraidOrientationProperties mraidOrientationProperties = new MraidOrientationProperties(Boolean.parseBoolean((String) map.get("allowOrientationChange")), MraidOrientationProperties.forceOrientationFromString((String) map.get("forceOrientation")));
this.f = mraidOrientationProperties;
this.a.onOrientation(mraidOrientationProperties);
break;
case "storePicture":
this.a.onStorePicture((String) map.get("url"));
break;
case "useCustomClose":
boolean parseBoolean = Boolean.parseBoolean((String) map.get("useCustomClose"));
if (this.d != parseBoolean) {
this.d = parseBoolean;
this.a.onUseCustomClose(parseBoolean);
break;
}
break;
}
}
}