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