Cyber Surfer v5.2.5版本的 MD5 值为:db13c5fce988de393e52d2679f934b22
以下内容为反编译后的 VideoAdControllerVpaid.java 源代码,内容仅作参考
package net.pubnative.lite.sdk.vpaid;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.CookieManager;
import android.webkit.RenderProcessGoneDetail;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceRequest;
import android.webkit.WebResourceResponse;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import com.iab.omid.library.pubnativenet.adsession.FriendlyObstructionPurpose;
import com.safedk.android.analytics.brandsafety.creatives.CreativeInfoManager;
import com.safedk.android.internal.SafeDKWebAppInterface;
import java.util.ArrayList;
import java.util.List;
import net.pubnative.lite.sdk.HyBid;
import net.pubnative.lite.sdk.models.EndCardData;
import net.pubnative.lite.sdk.utils.Logger;
import net.pubnative.lite.sdk.utils.UrlHandler;
import net.pubnative.lite.sdk.viewability.HyBidViewabilityFriendlyObstruction;
import net.pubnative.lite.sdk.viewability.HyBidViewabilityNativeVideoAdSession;
import net.pubnative.lite.sdk.vpaid.VideoAdController;
import net.pubnative.lite.sdk.vpaid.enums.EventConstants;
import net.pubnative.lite.sdk.vpaid.enums.VastError;
import net.pubnative.lite.sdk.vpaid.helpers.ErrorLog;
import net.pubnative.lite.sdk.vpaid.helpers.EventTracker;
import net.pubnative.lite.sdk.vpaid.macros.MacroHelper;
import net.pubnative.lite.sdk.vpaid.models.CloseCardData;
import net.pubnative.lite.sdk.vpaid.models.vast.Tracking;
import net.pubnative.lite.sdk.vpaid.models.vpaid.AdSpotDimensions;
import net.pubnative.lite.sdk.vpaid.models.vpaid.CreativeParams;
import net.pubnative.lite.sdk.vpaid.models.vpaid.TrackingEvent;
import net.pubnative.lite.sdk.vpaid.protocol.BridgeEventHandler;
import net.pubnative.lite.sdk.vpaid.protocol.ViewControllerVpaid;
import net.pubnative.lite.sdk.vpaid.protocol.VpaidBridge;
import net.pubnative.lite.sdk.vpaid.protocol.VpaidBridgeImpl;
import net.pubnative.lite.sdk.vpaid.response.AdParams;
import net.pubnative.lite.sdk.vpaid.utils.Utils;
class VideoAdControllerVpaid implements VideoAdController, BridgeEventHandler {
private static final String BASE_URL = "http://pubnative.net";
private static final String ENVIRONMENT_VARS = "{ slot: document.getElementById('slot'), videoSlot: document.getElementById('video-slot'), videoSlotCanAutoPlay: true }";
private static final String HTML_SOURCE_FILE = "ad.html";
private static final String LOG_TAG = "VideoAdControllerVpaid";
private static final String MIME_TYPE = "text/html";
private static final String VPAID_CREATIVE_URL_STRING = "[VPAID_CREATIVE_URL]";
private final AdParams mAdParams;
private final AdSpotDimensions mAdSpotDimensions;
private final BaseVideoAdInternal mBaseAdInternal;
private boolean mIsStarted;
private boolean mIsWaitingForSkippableState;
private boolean mIsWaitingForWebView;
private VideoAdController.OnPreparedListener mOnPreparedListener;
private final HyBidViewabilityNativeVideoAdSession mViewabilityAdSession;
private WebView mWebView;
private boolean mIsVisible = false;
private boolean mFinishedPlaying = false;
private final List<HyBidViewabilityFriendlyObstruction> mViewabilityFriendlyObstructions = new ArrayList();
private final VpaidBridge mVpaidBridge = new VpaidBridgeImpl(this, createCreativeParams());
private final ViewControllerVpaid mViewControllerVpaid = new ViewControllerVpaid(this);
private final MacroHelper mMacroHelper = new MacroHelper();
VideoAdControllerVpaid(BaseVideoAdInternal baseVideoAdInternal, AdParams adParams, AdSpotDimensions adSpotDimensions, String str, HyBidViewabilityNativeVideoAdSession hyBidViewabilityNativeVideoAdSession) {
this.mBaseAdInternal = baseVideoAdInternal;
this.mAdParams = adParams;
this.mAdSpotDimensions = adSpotDimensions;
this.mViewabilityAdSession = hyBidViewabilityNativeVideoAdSession;
}
private CreativeParams createCreativeParams() {
CreativeParams creativeParams = new CreativeParams(this.mAdSpotDimensions.getWidth(), this.mAdSpotDimensions.getHeight(), "normal", 720);
creativeParams.setAdParameters("{'AdParameters':'" + this.mAdParams.getAdParams() + "'}");
creativeParams.setEnvironmentVars(ENVIRONMENT_VARS);
return creativeParams;
}
private void initWebView() {
WebView webView = new WebView(this.mBaseAdInternal.getContext());
this.mWebView = webView;
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
if (Utils.isDebug()) {
settings.setCacheMode(2);
this.mWebView.clearCache(true);
}
this.mWebView.setWebChromeClient(new WebChromeClient());
this.mIsWaitingForWebView = true;
this.mWebView.setWebViewClient(new WebViewClient() {
@Override
public void onLoadResource(WebView webView2, String str) {
super.onLoadResource(webView2, str);
CreativeInfoManager.onResourceLoaded("net.pubnative", webView2, str);
}
@Override
public void onPageFinished(WebView webView2, String str) {
if (VideoAdControllerVpaid.this.mIsWaitingForWebView) {
VideoAdControllerVpaid.this.mVpaidBridge.prepare();
Logger.d(VideoAdControllerVpaid.LOG_TAG, "Init webView done");
VideoAdControllerVpaid.this.mIsWaitingForWebView = false;
}
}
@Override
public boolean onRenderProcessGone(WebView webView2, RenderProcessGoneDetail renderProcessGoneDetail) {
Logger.d(VideoAdControllerVpaid.LOG_TAG, "WebViewClient - onRenderProcessGone");
return true;
}
@Override
public WebResourceResponse shouldInterceptRequest(WebView webView2, WebResourceRequest webResourceRequest) {
return CreativeInfoManager.onWebViewResponseWithHeaders("net.pubnative", webView2, webResourceRequest, super.shouldInterceptRequest(webView2, webResourceRequest));
}
@Override
public WebResourceResponse shouldInterceptRequest(WebView webView2, String str) {
return CreativeInfoManager.onWebViewResponse("net.pubnative", webView2, str, super.shouldInterceptRequest(webView2, str));
}
});
CookieManager.getInstance().setAcceptCookie(true);
this.mWebView.addJavascriptInterface(this.mVpaidBridge, "android");
}
@Override
public boolean adFinishedPlaying() {
return this.mFinishedPlaying;
}
@Override
public void addEndCardData(EndCardData endCardData) {
}
@Override
public void addViewabilityFriendlyObstruction(View view, FriendlyObstructionPurpose friendlyObstructionPurpose, String str) {
if (view == null || TextUtils.isEmpty(str)) {
return;
}
this.mViewabilityFriendlyObstructions.add(new HyBidViewabilityFriendlyObstruction(view, friendlyObstructionPurpose, str));
}
@Override
public void buildVideoAdView(VideoAdView videoAdView) {
this.mViewControllerVpaid.buildVideoAdView(videoAdView, this.mWebView);
}
@Override
public void callJsMethod(final String str) {
runOnUiThread(new Runnable() {
@Override
public void run() {
if (VideoAdControllerVpaid.this.mWebView != null) {
WebView webView = VideoAdControllerVpaid.this.mWebView;
webView.loadUrl(SafeDKWebAppInterface.f + str);
}
}
});
}
@Override
public void closeEndCard() {
}
@Override
public void closeSelf() {
runOnUiThread(new Runnable() {
@Override
public void run() {
VideoAdControllerVpaid.this.mIsWaitingForWebView = false;
VideoAdControllerVpaid.this.mVpaidBridge.stopAd();
VideoAdControllerVpaid.this.mBaseAdInternal.dismiss();
}
});
}
@Override
public void destroy() {
if (this.mWebView != null) {
runOnUiThread(new Runnable() {
@Override
public void run() {
if (VideoAdControllerVpaid.this.mWebView.getParent() != null) {
((ViewGroup) VideoAdControllerVpaid.this.mWebView.getParent()).removeAllViews();
}
VideoAdControllerVpaid.this.mWebView.clearHistory();
VideoAdControllerVpaid.this.mWebView.clearCache(true);
VideoAdControllerVpaid.this.mWebView.loadUrl("about:blank");
VideoAdControllerVpaid.this.mWebView.pauseTimers();
VideoAdControllerVpaid.this.mWebView = null;
}
});
}
}
@Override
public void dismiss() {
this.mVpaidBridge.pauseAd();
this.mVpaidBridge.stopAd();
WebView webView = this.mWebView;
if (webView != null) {
webView.clearCache(true);
this.mWebView.clearFormData();
this.mWebView.loadUrl("about:blank");
}
}
@Override
public AdParams getAdParams() {
return this.mAdParams;
}
@Override
public int getProgress() {
return -1;
}
@Override
public HyBidViewabilityNativeVideoAdSession getViewabilityAdSession() {
return this.mViewabilityAdSession;
}
@Override
public List<HyBidViewabilityFriendlyObstruction> getViewabilityFriendlyObstructions() {
return this.mViewabilityFriendlyObstructions;
}
@Override
public boolean isRewarded() {
return this.mBaseAdInternal.isRewarded();
}
@Override
public boolean isVideoVisible() {
return this.mIsVisible;
}
@Override
public void onAdImpression() {
for (String str : this.mAdParams.getImpressions()) {
EventTracker.post(this.mBaseAdInternal.getContext(), str, this.mMacroHelper, true);
String str2 = LOG_TAG;
Logger.d(str2, "mAdParams.getImpressions() " + str);
}
}
@Override
public void onAdLinearChange() {
}
@Override
public void onAdSkipped() {
if (this.mIsStarted) {
this.mIsWaitingForSkippableState = true;
this.mVpaidBridge.getAdSkippableState();
this.mFinishedPlaying = true;
}
}
@Override
public void onAdStopped() {
if (this.mIsStarted) {
postEvent(EventConstants.CLOSE_LINEAR, true);
postEvent("close", true);
skipVideo();
}
}
@Override
public void onAdVolumeChange() {
}
@Override
public void onCustomEndCardClick() {
BaseVideoAdInternal baseVideoAdInternal = this.mBaseAdInternal;
if (baseVideoAdInternal != null) {
baseVideoAdInternal.onCustomEndCardClick();
}
}
@Override
public void onCustomEndCardShow() {
BaseVideoAdInternal baseVideoAdInternal = this.mBaseAdInternal;
if (baseVideoAdInternal != null) {
baseVideoAdInternal.onCustomEndCardShow();
}
}
@Override
public void onDurationChanged() {
}
@Override
public void onPrepared() {
this.mOnPreparedListener.onPrepared();
}
@Override
public void openUrl(String str) {
for (String str2 : this.mAdParams.getVideoClicks()) {
EventTracker.post(this.mBaseAdInternal.getContext(), str2, this.mMacroHelper, true);
}
if (TextUtils.isEmpty(str)) {
str = this.mAdParams.getVideoRedirectUrl();
}
this.mViewabilityAdSession.fireClick();
String str3 = LOG_TAG;
Logger.d(str3, "Handle external url");
if (Utils.isOnline(this.mBaseAdInternal.getContext())) {
new UrlHandler(this.mBaseAdInternal.getContext()).handleUrl(str);
} else {
Logger.e(str3, "No internet connection");
}
this.mBaseAdInternal.onAdClicked();
}
@Override
public void pause() {
if (this.mIsStarted) {
this.mVpaidBridge.pauseAd();
}
}
@Override
public void pauseEndCardCloseButtonTimer() {
}
@Override
public void playAd() {
this.mIsStarted = true;
this.mVpaidBridge.startAd();
}
@Override
public void postEvent(String str, int i, boolean z) {
for (Tracking tracking : this.mAdParams.getEvents()) {
TrackingEvent trackingEvent = new TrackingEvent(tracking.getText());
if (tracking.getEvent().equalsIgnoreCase("progress") && tracking.getOffset() != null) {
if (Utils.parseDuration(tracking.getOffset()) == this.mAdParams.getDuration() - i) {
EventTracker.post(this.mBaseAdInternal.getContext(), trackingEvent.url, this.mMacroHelper, z);
}
}
}
}
@Override
public void postEvent(String str, boolean z) {
EventTracker.postEventByType(this.mBaseAdInternal.getContext(), this.mAdParams.getEvents(), str, this.mMacroHelper, z);
}
@Override
public void prepare(VideoAdController.OnPreparedListener onPreparedListener) {
this.mOnPreparedListener = onPreparedListener;
try {
initWebView();
this.mWebView.loadDataWithBaseURL(BASE_URL, Utils.readAssets(this.mBaseAdInternal.getContext().getAssets(), HTML_SOURCE_FILE).replace(VPAID_CREATIVE_URL_STRING, this.mAdParams.getVpaidJsUrl()), MIME_TYPE, "UTF-8", null);
} catch (Exception e) {
HyBid.reportException(e);
String str = LOG_TAG;
Logger.e(str, "Can't read assets: " + e.getMessage());
}
}
@Override
public void resume() {
this.mVpaidBridge.resumeAd();
}
@Override
public void resumeEndCardCloseButtonTimer() {
}
@Override
public void runOnUiThread(Runnable runnable) {
BaseVideoAdInternal baseVideoAdInternal = this.mBaseAdInternal;
if (baseVideoAdInternal != null) {
baseVideoAdInternal.runOnUiThread(runnable);
}
}
@Override
public void setCloseCardData(CloseCardData closeCardData) {
}
@Override
public void setEndCardFilePath(String str) {
}
@Override
public void setSkippableState(boolean z) {
if (this.mIsStarted && this.mIsWaitingForSkippableState && z) {
this.mIsWaitingForSkippableState = false;
postEvent(EventConstants.SKIP, true);
skipVideo();
}
}
@Override
public void setVideoFilePath(String str) {
}
@Override
public void setVideoVisible(boolean z) {
this.mIsVisible = z;
}
@Override
public void setVolume(boolean z) {
}
@Override
public void skipEndCard() {
}
@Override
public void skipVideo() {
this.mIsStarted = false;
runOnUiThread(new Runnable() {
@Override
public void run() {
VideoAdControllerVpaid.this.mBaseAdInternal.dismiss();
}
});
}
@Override
public void toggleMute() {
}
@Override
public void trackError(String str) {
ErrorLog.postError(this.mBaseAdInternal.getContext(), VastError.VPAID);
}
}