导航菜单

页面标题

页面副标题

CallApp v2.226 - VideoAdControllerVpaid.java 源代码

正在查看: CallApp v2.226 应用的 VideoAdControllerVpaid.java JAVA 源代码文件

本页面展示 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.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import com.iab.omid.library.pubnativenet.adsession.FriendlyObstructionPurpose;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import net.pubnative.lite.sdk.HyBid;
import net.pubnative.lite.sdk.analytics.Reporting;
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.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 = "=";
    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();

    public 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 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;
            }
        });
        CookieManager.getInstance().setAcceptCookie(true);
        this.mWebView.addJavascriptInterface(this.mVpaidBridge, Reporting.Platform.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) {
                    VideoAdControllerVpaid.this.mWebView.loadUrl("javascript:" + 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);
            Logger.d(LOG_TAG, "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(EventConstants.CLOSE, true);
            skipVideo();
        }
    }

    @Override
    public void onAdVolumeChange() {
    }

    @Override
    public void onCustomCTAClick(boolean z) {
        BaseVideoAdInternal baseVideoAdInternal = this.mBaseAdInternal;
        if (baseVideoAdInternal != null) {
            baseVideoAdInternal.onCustomCTAClick(z);
        }
    }

    @Override
    public void onCustomCTALoadFail() {
        BaseVideoAdInternal baseVideoAdInternal = this.mBaseAdInternal;
        if (baseVideoAdInternal != null) {
            baseVideoAdInternal.onCustomCTALoadFail();
        }
    }

    @Override
    public void onCustomCTAShow() {
        BaseVideoAdInternal baseVideoAdInternal = this.mBaseAdInternal;
        if (baseVideoAdInternal != null) {
            baseVideoAdInternal.onCustomCTAShow();
        }
    }

    @Override
    public void onCustomEndCardClick(String str) {
        BaseVideoAdInternal baseVideoAdInternal = this.mBaseAdInternal;
        if (baseVideoAdInternal != null) {
            baseVideoAdInternal.onCustomEndCardClick(str);
        }
    }

    @Override
    public void onCustomEndCardShow(String str) {
        BaseVideoAdInternal baseVideoAdInternal = this.mBaseAdInternal;
        if (baseVideoAdInternal != null) {
            baseVideoAdInternal.onCustomEndCardShow(str);
        }
    }

    @Override
    public void onDefaultEndCardClick(String str) {
        BaseVideoAdInternal baseVideoAdInternal = this.mBaseAdInternal;
        if (baseVideoAdInternal != null) {
            baseVideoAdInternal.onDefaultEndCardClick(str);
        }
    }

    @Override
    public void onDefaultEndCardShow(String str) {
        BaseVideoAdInternal baseVideoAdInternal = this.mBaseAdInternal;
        if (baseVideoAdInternal != null) {
            baseVideoAdInternal.onDefaultEndCardShow(str);
        }
    }

    @Override
    public void onDurationChanged() {
    }

    @Override
    public void onEndCardClosed(Boolean bool) {
    }

    @Override
    public void onEndCardLoadFail(Boolean bool) {
        BaseVideoAdInternal baseVideoAdInternal = this.mBaseAdInternal;
        if (baseVideoAdInternal != null) {
            baseVideoAdInternal.onEndCardLoadFail(bool);
        }
    }

    @Override
    public void onEndCardLoadSuccess(Boolean bool) {
        BaseVideoAdInternal baseVideoAdInternal = this.mBaseAdInternal;
        if (baseVideoAdInternal != null) {
            baseVideoAdInternal.onEndCardLoadSuccess(bool);
        }
    }

    @Override
    public void onPrepared() {
        this.mOnPreparedListener.onPrepared();
    }

    public void openClickUrl(String str, Boolean bool) {
        Iterator<String> it = this.mAdParams.getVideoClicks().iterator();
        while (it.hasNext()) {
            EventTracker.post(this.mBaseAdInternal.getContext(), it.next(), this.mMacroHelper, true);
        }
        if (TextUtils.isEmpty(str)) {
            str = this.mAdParams.getVideoRedirectUrl();
        }
        this.mViewabilityAdSession.fireClick();
        String str2 = LOG_TAG;
        Logger.d(str2, "Handle external url");
        if (Utils.isOnline(this.mBaseAdInternal.getContext())) {
            new UrlHandler(this.mBaseAdInternal.getContext()).handleUrl(str, null);
        } else {
            Logger.e(str2, "No internet connection");
        }
        if (bool == null || bool.booleanValue()) {
            return;
        }
        this.mBaseAdInternal.onAdClicked();
    }

    @Override
    public void openUrl(String str) {
        openClickUrl(str, null);
    }

    @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(EventConstants.PROGRESS) && tracking.getOffset() != null) {
                int duration = this.mAdParams.getDuration() - i;
                Integer parseDuration = Utils.parseDuration(tracking.getOffset());
                if (parseDuration != null && parseDuration.intValue() == duration) {
                    EventTracker.post(this.mBaseAdInternal.getContext(), trackingEvent.url, this.mMacroHelper, z);
                }
            }
        }
    }

    @Override
    public void prepare(VideoAdController.OnPreparedListener onPreparedListener) {
        this.mOnPreparedListener = onPreparedListener;
        try {
            initWebView();
            this.mWebView.loadDataWithBaseURL("=", 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);
            Logger.e(LOG_TAG, "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 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);
    }

    @Override
    public void openUrl(String str, Boolean bool, Boolean bool2) {
        openClickUrl(str, bool);
    }

    @Override
    public void postEvent(String str, boolean z) {
        EventTracker.postEventByType(this.mBaseAdInternal.getContext(), this.mAdParams.getEvents(), str, this.mMacroHelper, z);
    }
}