package com.kaltura.multiplayerdemo;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.SeekBar;
import com.google.android.exoplayer.ExoPlayer;
import com.google.android.libraries.mediaframework.exoplayerextensions.ExoplayerWrapper;
import com.google.android.libraries.mediaframework.exoplayerextensions.Video;
import com.google.android.libraries.mediaframework.layeredvideo.SimpleVideoPlayer;
import com.kaltura.playersdk.KPPlayerConfig;
import com.kaltura.playersdk.PlayerViewController;
import com.kaltura.playersdk.events.KPEventListener;
import com.kaltura.playersdk.events.KPlayerState;
import com.kaltura.playersdk.types.KPError;
import java.util.Timer;
import java.util.TimerTask;
import static com.kaltura.playersdk.utils.LogUtils.LOGE;
public class MainActivity extends AppCompatActivity implements View.OnClickListener, SeekBar.OnSeekBarChangeListener, KPEventListener {
private final String adUrl = "http://html5demos.com/assets/dizzy.mp4";
private static final String TAG = "KalturaMultiPlayer";
private Button mPlayPauseButton;
private SeekBar mSeekBar;
private PlayerViewController mPlayer;
private boolean onCreate = false;
private FrameLayout adPlayerContainer;
SimpleVideoPlayer mAdPlayer;
boolean adPlayerIsPlaying;
boolean adIsDone;
boolean kPlayerReady;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
setContentView(com.kaltura.multiplayerdemo.R.layout.activity_main);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);
}
mPlayPauseButton = (Button)findViewById(com.kaltura.multiplayerdemo.R.id.button);
mPlayPauseButton.setOnClickListener(this);
mSeekBar = (SeekBar)findViewById(com.kaltura.multiplayerdemo.R.id.seekBar);
mSeekBar.setOnSeekBarChangeListener(this);
onCreate = true;
getPlayer();
addAdPlayer();
}
private PlayerViewController getPlayer() {
if (mPlayer == null) {
mPlayer = (PlayerViewController)findViewById(com.kaltura.multiplayerdemo.R.id.player);
mPlayer.loadPlayerIntoActivity(this);
KPPlayerConfig config = new KPPlayerConfig("http://cdnapi.kaltura.com", "26698911", "1831271").setEntryId("1_o426d3i4");
config.addConfig("topBarContainer.hover", "true");
config.addConfig("controlBarContainer.plugin", "true");
config.addConfig("durationLabel.prefix", " ");
config.addConfig("largePlayBtn.plugin", "true");
mPlayer.initWithConfiguration(config);
mPlayer.addEventListener(this);
}
return mPlayer;
}
private RelativeLayout getPlayerContainer() {
return (RelativeLayout)findViewById(com.kaltura.multiplayerdemo.R.id.playerContainer);
}
@Override
protected void onPause() {
if (mPlayer != null) {
mPlayer.releaseAndSavePosition();
}
if (mAdPlayer != null) {
mAdPlayer.pause();
mAdPlayer.moveSurfaceToBackground();
}
super.onPause();
}
@Override
protected void onResume() {
if (onCreate) {
onCreate = false;
} else {
if (mPlayer != null)
mPlayer.resumePlayer();
if (mAdPlayer != null ){
mAdPlayer.moveSurfaceToForeground();
mAdPlayer.play();
}
}
super.onResume();
}
@Override
protected void onDestroy() {
if (mPlayer != null) {
mPlayer.removePlayer();
}
if (mAdPlayer != null ){
removeAdPlayer();
}
super.onDestroy();
}
@Override
public void onConfigurationChanged(final Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Timer swapTimer = new Timer();
swapTimer.schedule(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
public void run() {
LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) getPlayerContainer().getLayoutParams();
lp.weight = newConfig.orientation == Configuration.ORIENTATION_PORTRAIT ? 2 : 8;
lp.height = newConfig.orientation == Configuration.ORIENTATION_PORTRAIT ? 7 : 3;
getPlayerContainer().setLayoutParams(lp);
}
});
}
}, 100);
}
@Override
public void onClick(View v) {
if (v.getId() != com.kaltura.multiplayerdemo.R.id.replay) {
if (mPlayPauseButton.getText().equals("Play")) {
mPlayPauseButton.setText("Pause");
getPlayer().sendNotification("doPlay", null);
} else {
mPlayPauseButton.setText("Play");
getPlayer().sendNotification("doPause", null);
}
} else {
mPlayer.sendNotification("doSeek", "0.1");
mPlayer.sendNotification("doPlay", null);
mPlayPauseButton.setText("Pause");
}
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (fromUser) {
float progressInPercent = progress / 100f;
float seekVal = (float) (progressInPercent * mPlayer.getDurationSec());
getPlayer().sendNotification("doSeek", Float.toString(seekVal));
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
@Override
public void onKPlayerStateChanged(PlayerViewController playerViewController, KPlayerState state) {
if (state == KPlayerState.READY){
LOGE(TAG, "onKPlayerStateChanged PLAYER STATE_READY");
kPlayerReady = true;
}
if (state == KPlayerState.ENDED && adIsDone){
LOGE(TAG, "onKPlayerStateChanged PLAYER STATE_ENDED");
addAdPlayer();
}
}
@Override
public void onKPlayerPlayheadUpdate(PlayerViewController playerViewController, float currentTime) {
mSeekBar.setProgress((int)(currentTime / playerViewController.getDurationSec() * 100));
}
@Override
public void onKPlayerFullScreenToggeled(PlayerViewController playerViewController, boolean isFullscrenn) {
}
@Override
public void onKPlayerError(PlayerViewController playerViewController, KPError error) {
LOGE(TAG, "Error Received:" + error.getErrorMsg());
}
///AD PLAYER METHODS
private void addAdPlayer() {
// Add adPlayer view
adPlayerContainer = new FrameLayout(mPlayer.getContext());
ViewGroup.LayoutParams lp = mPlayer.getLayoutParams();
lp = new ViewGroup.LayoutParams(lp.width, lp.height);
mPlayer.addView(adPlayerContainer, lp);
Video source = new Video(adUrl, Video.VideoType.MP4);
mAdPlayer = new SimpleVideoPlayer(this, adPlayerContainer, source, "", true);
mAdPlayer.addPlaybackListener(new ExoplayerWrapper.PlaybackListener() {
@Override
public void onStateChanged(boolean playWhenReady, int playbackState) {
switch (playbackState) {
case ExoPlayer.STATE_READY:
LOGE(TAG, "SimpleVideoPlayer STATE_READY");
//if (playWhenReady) {
if (!adPlayerIsPlaying && adPlayerContainer != null && mAdPlayer != null) {
LOGE(TAG, "START PLAY AD ");
adPlayerIsPlaying = true;
mAdPlayer.play();
}
break;
case ExoPlayer.STATE_ENDED:
LOGE(TAG, "SimpleVideoPlayer AD ENDED");
adPlayerIsPlaying = false;
adIsDone = true;
removeAdPlayer();
if (kPlayerReady){
LOGE(TAG, "KPLAY FROM NORMAL PATH");
mPlayer.getMediaControl().start();
}else {
mPlayer.registerReadyEvent(new PlayerViewController.ReadyEventListener() {
@Override
public void handler() {
LOGE(TAG, "KPLAY FROM HANDLER");
mPlayer.getMediaControl().start();
}
});
}
break;
}
}
@Override
public void onError(Exception e) {
}
@Override
public void onVideoSizeChanged(int width, int height, int unappliedRotationDegrees, float pixelWidthHeightRatio) {
}
});
mAdPlayer.moveSurfaceToForeground();
}
private void removeAdPlayer() {
if (mPlayer != null) {
mPlayer.removeView(adPlayerContainer);
}
if (adPlayerContainer != null) {
adPlayerContainer.setVisibility(View.GONE);
adPlayerContainer = null;
}
mAdPlayer = null;
}
}