package com.mopub.mraid; import android.content.Context; import android.graphics.drawable.StateListDrawable; import android.media.MediaPlayer; import android.os.Bundle; import android.view.View; import android.widget.ImageButton; import android.widget.RelativeLayout; import android.widget.VideoView; import com.mopub.common.util.Dips; import com.mopub.mobileads.BaseVideoViewController; import static android.view.View.GONE; import static android.view.View.OnClickListener; import static android.view.View.VISIBLE; import static com.mopub.common.util.Drawables.INTERSTITIAL_CLOSE_BUTTON_NORMAL; import static com.mopub.common.util.Drawables.INTERSTITIAL_CLOSE_BUTTON_PRESSED; import static com.mopub.mobileads.BaseVideoPlayerActivity.VIDEO_URL; public class MraidVideoViewController extends BaseVideoViewController { private static final float CLOSE_BUTTON_SIZE = 50f; private static final float CLOSE_BUTTON_PADDING = 8f; private final VideoView mVideoView; private ImageButton mCloseButton; private int mButtonPadding; private int mButtonSize; public MraidVideoViewController(final Context context, final Bundle bundle, final BaseVideoViewControllerListener baseVideoViewControllerListener) { // No broadcast identifiers are used by MraidVideoViews. super(context, null, baseVideoViewControllerListener); mVideoView = new VideoView(context); mVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { mCloseButton.setVisibility(VISIBLE); videoCompleted(true); } }); mVideoView.setOnErrorListener(new MediaPlayer.OnErrorListener() { @Override public boolean onError(MediaPlayer mediaPlayer, int what, int extra) { mCloseButton.setVisibility(VISIBLE); videoError(false); return false; } }); mVideoView.setVideoPath(bundle.getString(VIDEO_URL)); } @Override protected void onCreate() { super.onCreate(); mButtonSize = Dips.asIntPixels(CLOSE_BUTTON_SIZE, getContext()); mButtonPadding = Dips.asIntPixels(CLOSE_BUTTON_PADDING, getContext()); createInterstitialCloseButton(); mCloseButton.setVisibility(GONE); mVideoView.start(); } @Override protected VideoView getVideoView() { return mVideoView; } @Override protected void onDestroy() {} @Override protected void onPause() {} @Override protected void onResume() {} private void createInterstitialCloseButton() { mCloseButton = new ImageButton(getContext()); StateListDrawable states = new StateListDrawable(); states.addState(new int[] {-android.R.attr.state_pressed}, INTERSTITIAL_CLOSE_BUTTON_NORMAL.createDrawable( getContext())); states.addState(new int[] {android.R.attr.state_pressed}, INTERSTITIAL_CLOSE_BUTTON_PRESSED.createDrawable( getContext())); mCloseButton.setImageDrawable(states); //noinspection deprecation mCloseButton.setBackgroundDrawable(null); mCloseButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { getBaseVideoViewControllerListener().onFinish(); } }); RelativeLayout.LayoutParams buttonLayout = new RelativeLayout.LayoutParams(mButtonSize, mButtonSize); buttonLayout.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); buttonLayout.setMargins(mButtonPadding, 0, mButtonPadding, 0); getLayout().addView(mCloseButton, buttonLayout); } }