package com.mopub.mobileads;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;
import android.widget.VideoView;
import com.mopub.common.logging.MoPubLog;
import static com.mopub.mobileads.EventForwardingBroadcastReceiver.ACTION_INTERSTITIAL_FAIL;
public abstract class BaseVideoViewController {
private final Context mContext;
private final RelativeLayout mLayout;
private final BaseVideoViewControllerListener mBaseVideoViewControllerListener;
@Nullable private Long mBroadcastIdentifier;
public interface BaseVideoViewControllerListener {
void onSetContentView(final View view);
void onSetRequestedOrientation(final int requestedOrientation);
void onFinish();
void onStartActivityForResult(final Class<? extends Activity> clazz,
final int requestCode,
final Bundle extras);
}
protected BaseVideoViewController(final Context context, @Nullable final Long broadcastIdentifier, final BaseVideoViewControllerListener baseVideoViewControllerListener) {
mContext = context.getApplicationContext();
mBroadcastIdentifier = broadcastIdentifier;
mBaseVideoViewControllerListener = baseVideoViewControllerListener;
mLayout = new RelativeLayout(mContext);
}
protected void onCreate() {
final RelativeLayout.LayoutParams adViewLayout = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
adViewLayout.addRule(RelativeLayout.CENTER_IN_PARENT);
mLayout.addView(getVideoView(), 0, adViewLayout);
mBaseVideoViewControllerListener.onSetContentView(mLayout);
}
protected abstract VideoView getVideoView();
protected abstract void onPause();
protected abstract void onResume();
protected abstract void onDestroy();
public boolean backButtonEnabled() {
return true;
}
void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
// By default, the activity result is ignored
}
protected BaseVideoViewControllerListener getBaseVideoViewControllerListener() {
return mBaseVideoViewControllerListener;
}
protected Context getContext() {
return mContext;
}
public ViewGroup getLayout() {
return mLayout;
}
protected void videoError(boolean shouldFinish) {
MoPubLog.e("Video cannot be played.");
broadcastAction(ACTION_INTERSTITIAL_FAIL);
if (shouldFinish) {
mBaseVideoViewControllerListener.onFinish();
}
}
protected void videoCompleted(boolean shouldFinish) {
if (shouldFinish) {
mBaseVideoViewControllerListener.onFinish();
}
}
void broadcastAction(final String action) {
if (mBroadcastIdentifier != null) {
EventForwardingBroadcastReceiver.broadcastAction(mContext, mBroadcastIdentifier, action);
} else {
MoPubLog.w("Tried to broadcast a video event without a braodcast identifier to send to.");
}
}
}