Wolves Themes v1.0版本的 MD5 值为:cddc92b47f6b7c4a195c9625507eb51c

以下内容为反编译后的 VPAIDActivity.java 源代码,内容仅作参考


package org.nexage.sourcekit.vast.activity;

import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.Point;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.View;
import android.view.WindowManager;
import android.webkit.ConsoleMessage;
import android.webkit.JavascriptInterface;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.facebook.ads.AudienceNetworkActivity;
import com.ironsource.sdk.constants.Constants;
import com.tapjoy.TapjoyConstants;
import io.presage.ads.NewAd;
import java.util.Timer;
import java.util.TimerTask;
import org.nexage.sourcekit.util.VASTLog;
import org.nexage.sourcekit.util.Video;
import org.nexage.sourcekit.vast.VASTPlayer;
import org.nexage.sourcekit.vast.model.VASTModel;
public class VPAIDActivity extends Activity {
    private static final long SKIP_TIMER_INTERVAL = 1000;
    private static String TAG = "VPAIDActivity";
    private Context context;
    private Handler handler;
    private String html;
    VASTPlayer.VASTPlayerListener mListener;
    private ProgressBar mProgressBar;
    private RelativeLayout mRootLayout;
    private int mScreenHeight;
    private int mScreenWidth;
    private TextView mSkipText;
    private Timer mSkipTimer;
    private Video.Type mType;
    private WebView mWebView;
    private String url;
    private int mSkipTime = 5;
    private boolean isClosed = false;
    private VASTModel mVastModel = null;
    private boolean canSkip = false;
    private boolean videoStarted = false;
    private boolean mStarted = false;
    private boolean mPaused = false;
    private final int LOADER_TIMEOUT_MS = 10000;

    public class AnonymousClass4 extends TimerTask {
        AnonymousClass4() {
        }

        @Override
        public void run() {
            VPAIDActivity.access$910(VPAIDActivity.this);
            if (VPAIDActivity.this.mSkipTime > 0) {
                VPAIDActivity.this.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        final String str = "You can skip this video in " + String.valueOf(VPAIDActivity.this.mSkipTime) + " seconds";
                        VPAIDActivity.this.runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                VPAIDActivity.this.mSkipText.setVisibility(0);
                                VPAIDActivity.this.mSkipText.setText(str);
                            }
                        });
                    }
                });
                return;
            }
            VPAIDActivity.this.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    VPAIDActivity.this.runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            VPAIDActivity.this.showSkipButton();
                        }
                    });
                }
            });
            cancel();
        }
    }

    public class WebAppInterface {
        Context mContext;

        WebAppInterface(Context context) {
            this.mContext = context;
        }

        @JavascriptInterface
        public void close() {
            VPAIDActivity.this.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    VASTLog.d(VPAIDActivity.TAG, "close");
                    VPAIDActivity.this.closeVPAID();
                }
            });
        }

        @JavascriptInterface
        public void finish() {
            VPAIDActivity.this.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    VASTLog.d(VPAIDActivity.TAG, NewAd.EVENT_FINISH);
                    VPAIDActivity.this.finishVPAID();
                }
            });
        }

        @JavascriptInterface
        public void loaded() {
            VPAIDActivity.this.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    VASTLog.d(VPAIDActivity.TAG, "adsManager loaded");
                    VPAIDActivity.this.mWebView.loadUrl("javascript:startAd()");
                }
            });
        }

        @JavascriptInterface
        public void started() {
            VPAIDActivity.this.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    VASTLog.d(VPAIDActivity.TAG, "ad started");
                    VPAIDActivity.this.videoStarted = true;
                    VPAIDActivity.this.hideProgressBar();
                }
            });
        }
    }

    static int access$910(VPAIDActivity vPAIDActivity) {
        int i = vPAIDActivity.mSkipTime;
        vPAIDActivity.mSkipTime = i - 1;
        return i;
    }

    public void closeVPAID() {
        VASTLog.d(TAG, "closeVPAID");
        this.isClosed = true;
        if (this.mListener != null) {
            this.mListener.vastDismiss(false);
        }
        finishVPAID();
    }

    private void createProgressBar() {
        RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(-1, -2);
        layoutParams.addRule(13);
        this.mProgressBar = new ProgressBar(this);
        this.mProgressBar.setLayoutParams(layoutParams);
        this.mRootLayout.addView(this.mProgressBar);
        this.mProgressBar.setVisibility(8);
    }

    private void createRootLayout(RelativeLayout.LayoutParams layoutParams) {
        this.mRootLayout = new RelativeLayout(this);
        this.mRootLayout.setLayoutParams(layoutParams);
        this.mRootLayout.setPadding(0, 0, 0, 0);
        this.mRootLayout.setBackgroundColor(-16777216);
    }

    private void createSkipText() {
        this.mSkipText = new TextView(this);
        this.mSkipText.setVisibility(4);
        this.mSkipText.setTextColor(-1);
        this.mSkipText.setPadding(5, 5, 5, 5);
        this.mSkipText.setBackgroundColor(Color.parseColor("#6b000000"));
        this.mRootLayout.addView(this.mSkipText);
    }

    private void createUi() {
        RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(-1, -1);
        createRootLayout(layoutParams);
        createWebView(layoutParams);
        createProgressBar();
        createSkipText();
        setContentView(this.mRootLayout);
        this.html = "<html>\n<head>\n    <title>IMA HTML5 Simple Demo</title>\n    <script src=\"https://s3.amazonaws.com/appodeal-externallibs/android/ima3.js\"></script>\n    <style>\n        #mainContainer {\n            position: relative;\n            width: " + this.mScreenWidth + ";\n            height: " + this.mScreenHeight + "px;\n        }\n\n        #content, #adContainer {\n            position: absolute;\n            top: 0px;\n            left: 0px;\n            width: " + this.mScreenWidth + ";\n            height: " + this.mScreenHeight + ";\n        }\n\n        #contentElement {\n            width: " + this.mScreenWidth + ";\n            height: " + this.mScreenHeight + ";\n            overflow: hidden;\n        }\n    </style>\n</head>\n\n<body style='margin:0;padding:0;background-color: black; position: fixed;'>\n<div id=\"mainContainer\">\n    <div id=\"content\">\n        <video id=\"contentElement\" poster=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNg+A8AAQIBANEay48AAAAASUVORK5CYII=\">\n        </video>\n    </div>\n    <div id=\"adContainer\"></div>\n</div>\n<script type=\"text/javascript\">\n        var videoContent = document.getElementById('contentElement');\n        videoContent.play();\n\n        var videoContent = document.getElementById('contentElement');\n        var adDisplayContainer = new google.ima.AdDisplayContainer(\n                        document.getElementById('adContainer'),\n                        videoContent);\n        // Must be done as the result of a user action on mobile\n        adDisplayContainer.initialize();\n\n        // Re-use this AdsLoader instance for the entire lifecycle of your page.\n        var adsLoader = new google.ima.AdsLoader(adDisplayContainer);\n        adsLoader.getSettings().setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.INSECURE);\n\n        // Add event listeners\n        adsLoader.addEventListener(\n                google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,\n                onAdsManagerLoaded,\n                false);\n        adsLoader.addEventListener(\n                google.ima.AdErrorEvent.Type.AD_ERROR,\n                onAdError,\n                false);\n\n        function onAdError(adErrorEvent) {\n            // Handle the error logging and destroy the AdsManager\n            console.error(JSON.stringify(adErrorEvent.getError()));\n            Android.close();\n            adsManager.destroy();\n        }\n\n        // An event listener to tell the SDK that our content video\n        // is completed so the SDK can play any post-roll ads.\n        var contentEndedListener = function () {\n            adsLoader.contentComplete();\n        };\n        videoContent.onended = contentEndedListener;\n\n        // Request video ads.\n        var adsRequest = new google.ima.AdsRequest();\n        adsRequest.adTagUrl = '" + this.url + "';\n\n        // Specify the linear and nonlinear slot sizes. This helps the SDK to\n        // select the correct creative if multiple are returned.\n        adsRequest.linearAdSlotWidth = " + this.mScreenWidth + ";\n        adsRequest.linearAdSlotHeight = " + this.mScreenHeight + ";\n        adsRequest.nonLinearAdSlotWidth = " + this.mScreenWidth + ";\n        adsRequest.nonLinearAdSlotHeight = " + this.mScreenHeight + ";\n\n        function requestAds() {\n            adsLoader.requestAds(adsRequest);\n        }\n\n        function onAdsManagerLoaded(adsManagerLoadedEvent) {\n            // Get the ads manager.\n            adsManager = adsManagerLoadedEvent.getAdsManager(\n                    videoContent);  // See API reference for contentPlayback\n\n            // Add listeners to the required events.\n            adsManager.addEventListener(\n                    google.ima.AdErrorEvent.Type.AD_ERROR,\n                    onAdAdError);\n            adsManager.addEventListener(\n                    google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED,\n                    onContentPauseRequested);\n            adsManager.addEventListener(\n                    google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED,\n                    onContentResumeRequested);\n            adsManager.addEventListener(\n                    google.ima.AdEvent.Type.ALL_ADS_COMPLETED,\n                    onAdCompleted);\n            adsManager.addEventListener(\n                    google.ima.AdEvent.Type.COMPLETE,\n                    onAdCompleted);\n            adsManager.addEventListener(\n                    google.ima.AdEvent.Type.LOADED,\n                    onAdLoaded);\n            adsManager.addEventListener(\n                    google.ima.AdEvent.Type.SKIPPED,\n                    onAdSkipped);\n            adsManager.addEventListener(\n                    google.ima.AdEvent.Type.STARTED,\n                    onAdStarted);\n            Android.loaded();\n        }\n\n        function startAd() {\n            try {\n                // Initialize the ads manager. Ad rules playlist will start at this time.\n                adsManager.init(" + this.mScreenWidth + ", " + this.mScreenHeight + ", google.ima.ViewMode.NORMAL);\n                // Call start to show ads. Single video and overlay ads will\n                // start at this time; this call will be ignored for ad rules, as ad rules\n                // ads start when the adsManager is initialized.\n                adsManager.start();\n            } catch (adError) {\n                console.error(JSON.stringify(adError));\n                Android.close();\n                // An error may be thrown if there was a problem with the VAST response.\n            }\n        }\n        function onAdStarted () {\n            Android.started();\n        }        function onAdCompleted () {\n           console.log('ad completed');\n            Android.finish();\n        }        function onAdAdError () {\n            console.error('ad error');\n            Android.close();\n        }        function onAdSkipped () {\n            console.log('skipped');\n            Android.close();\n        }        function onAdLoaded () {\n           \n        }\n        function onContentPauseRequested() {\n            // This function is where you should setup UI for showing ads (e.g.\n            // display ad timer countdown, disable seeking, etc.)\n            videoContent.removeEventListener('ended', contentEndedListener);\n            videoContent.pause();\n        }\n\n        function onContentResumeRequested() {\n            // This function is where you should ensure that your UI is ready\n            // to play content.\n            videoContent.addEventListener('ended', contentEndedListener);\n            videoContent.play();\n        }\n\n</script>\n</body>\n</html>";
    }

    private void createWebView(RelativeLayout.LayoutParams layoutParams) {
        this.mWebView = new WebView(this);
        this.mWebView.setLayoutParams(layoutParams);
        this.mWebView.getSettings().setLoadsImagesAutomatically(true);
        this.mWebView.getSettings().setPluginState(WebSettings.PluginState.ON);
        this.mWebView.getSettings().setJavaScriptEnabled(true);
        if (Build.VERSION.SDK_INT >= 17) {
            this.mWebView.getSettings().setMediaPlaybackRequiresUserGesture(false);
        }
        this.mWebView.addJavascriptInterface(new WebAppInterface(this), Constants.JAVASCRIPT_INTERFACE_NAME);
        this.mWebView.getSettings().setAppCacheEnabled(true);
        this.mWebView.getSettings().setDomStorageEnabled(true);
        this.mWebView.setWebChromeClient(new WebChromeClient() {
            @Override
            public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
                VASTLog.d(VPAIDActivity.TAG, consoleMessage.message() + " in " + consoleMessage.sourceId() + " (Line: " + consoleMessage.lineNumber() + ")");
                if (consoleMessage.messageLevel() != ConsoleMessage.MessageLevel.ERROR || consoleMessage.sourceId() == null || consoleMessage.lineNumber() == 0) {
                    return true;
                }
                VPAIDActivity.this.closeVPAID();
                return true;
            }
        });
        this.mWebView.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageFinished(WebView webView, String str) {
                super.onPageFinished(webView, str);
                if (VPAIDActivity.this.mWebView == null || !VPAIDActivity.this.mStarted || VPAIDActivity.this.mPaused) {
                    return;
                }
                VPAIDActivity.this.mWebView.loadUrl("javascript:requestAds()");
            }

            @Override
            public void onPageStarted(WebView webView, String str, Bitmap bitmap) {
                super.onPageStarted(webView, str, bitmap);
            }

            @Override
            @TargetApi(24)
            public boolean shouldOverrideUrlLoading(WebView webView, WebResourceRequest webResourceRequest) {
                return shouldOverrideUrlLoading(webView, webResourceRequest.getUrl().toString());
            }

            @Override
            public boolean shouldOverrideUrlLoading(WebView webView, String str) {
                if (str.startsWith("about:")) {
                    return true;
                }
                VPAIDActivity.this.startActivity(new Intent("android.intent.action.VIEW", Uri.parse(str)));
                return true;
            }
        });
        this.mRootLayout.addView(this.mWebView);
    }

    public void finishVPAID() {
        VASTLog.d(TAG, "finishVPAID");
        if (this.mListener != null && !this.isClosed) {
            this.mListener.vastComplete();
            this.mListener.vastDismiss(true);
        }
        finish();
    }

    public void hideProgressBar() {
        this.mProgressBar.setVisibility(8);
        startSkipTimer();
    }

    private void hideTitleStatusBars() {
        requestWindowFeature(1);
        getWindow().setFlags(1024, 1024);
    }

    private boolean isSkippable() {
        return this.canSkip;
    }

    private void showProgressBar() {
        this.mProgressBar.setVisibility(0);
    }

    public void showSkipButton() {
        if (this.canSkip) {
            return;
        }
        this.mSkipText.setText("Skip video");
        this.canSkip = true;
        this.mSkipText.setVisibility(0);
        this.mSkipText.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                VPAIDActivity.this.closeVPAID();
            }
        });
    }

    private void startSkipTimer() {
        if (this.mSkipTime == 0 || this.mType != Video.Type.NON_REWARDED || this.canSkip) {
            return;
        }
        this.mSkipTimer = new Timer();
        this.mSkipTimer.scheduleAtFixedRate(new AnonymousClass4(), 0L, SKIP_TIMER_INTERVAL);
    }

    private void startWebView() {
        this.mStarted = true;
        this.mWebView.loadDataWithBaseURL("http://localhost", this.html, "text/html", AudienceNetworkActivity.WEBVIEW_ENCODING, null);
        showProgressBar();
        this.handler = new Handler();
        this.handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                VPAIDActivity.this.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        if (VPAIDActivity.this.videoStarted) {
                            return;
                        }
                        VASTLog.d(VPAIDActivity.TAG, "can skip while loading");
                        VPAIDActivity.this.showSkipButton();
                    }
                });
            }
        }, 10000L);
    }

    public void destroyWebView() {
        if (this.mWebView != null) {
            VASTLog.d(TAG, "destroyWebView");
            this.mWebView.loadUrl("about:blank");
            this.mWebView.onPause();
        }
    }

    @Override
    public void onBackPressed() {
        if (isSkippable()) {
            closeVPAID();
        }
    }

    @Override
    protected void onCreate(Bundle bundle) {
        Video.Type type;
        super.onCreate(bundle);
        if (getResources().getConfiguration().orientation != 2) {
            setRequestedOrientation(0);
        } else {
            hideTitleStatusBars();
            this.context = this;
            Intent intent = getIntent();
            this.url = intent.getStringExtra("android.net.url");
            if (intent.hasExtra("com.nexage.android.vast.player.type")) {
                type = (Video.Type) intent.getExtras().get("com.nexage.android.vast.player.type");
            } else {
                VASTLog.e(TAG, "video type undefined.");
                type = Video.Type.NON_REWARDED;
            }
            this.mType = type;
            this.mListener = VASTPlayer.listener;
            this.mVastModel = (VASTModel) intent.getSerializableExtra("com.nexage.android.vast.player.vastModel");
            Display defaultDisplay = ((WindowManager) this.context.getSystemService("window")).getDefaultDisplay();
            Point point = new Point();
            defaultDisplay.getSize(point);
            DisplayMetrics displayMetrics = new DisplayMetrics();
            defaultDisplay.getMetrics(displayMetrics);
            float f = displayMetrics.density;
            int i = point.x;
            int identifier = this.context.getResources().getIdentifier("status_bar_height", "dimen", TapjoyConstants.TJC_DEVICE_PLATFORM_TYPE);
            int dimensionPixelSize = point.y - (identifier > 0 ? this.context.getResources().getDimensionPixelSize(identifier) : 0);
            this.mScreenWidth = Math.round(i / f);
            this.mScreenHeight = Math.round(dimensionPixelSize / f);
            if (this.mVastModel != null) {
                this.mSkipTime = this.mSkipTime > this.mVastModel.getSkipoffset() ? this.mSkipTime : this.mVastModel.getSkipoffset();
            }
            createUi();
        }
        if (this.mListener != null) {
            this.mListener.vastShown();
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        if (this.mStarted) {
            this.mPaused = true;
            destroyWebView();
        }
        if (this.handler != null) {
            this.handler.removeCallbacksAndMessages(null);
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        if (this.mStarted) {
            this.mPaused = false;
            if (this.videoStarted) {
                showSkipButton();
            }
        }
        restartWebView();
    }

    public void restartWebView() {
        if (this.mWebView != null) {
            this.mWebView.onResume();
            startWebView();
        }
    }
}