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);
    }
}