package com.kaltura.changemediademo; import android.content.pm.ActivityInfo; import android.content.res.Configuration; import android.os.Build; import android.os.Bundle; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.webkit.WebView; import android.widget.Button; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.SeekBar; import android.widget.Toast; 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.LOGD; import static com.kaltura.playersdk.utils.LogUtils.LOGE; public class MainActivity extends AppCompatActivity implements View.OnClickListener, SeekBar.OnSeekBarChangeListener, KPEventListener, SelectMediaFragment.MediaIdPostman { public static final String MEDIA_ID_KEY = "MEDIA_ID"; private static final String TAG = "ChangeMediaDemo"; private Button mPlayPauseButton; private SeekBar mSeekBar; private PlayerViewController mPlayer; private boolean onCreate = false; private Button chooseMediaButton; private String currentMediaId; private KPPlayerConfig config; //SelectMediaFragment selectMediaFragment; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); setContentView(R.layout.activity_main); if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { WebView.setWebContentsDebuggingEnabled(true); } chooseMediaButton = (Button)this.findViewById(R.id.open_select_media_fragment_button); chooseMediaButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { SelectMediaFragment fragment = new SelectMediaFragment(); FragmentManager fm = getSupportFragmentManager(); FragmentTransaction transaction = fm.beginTransaction(); Bundle bundle = new Bundle(); bundle.putString(MEDIA_ID_KEY, "Alo Kaltura!"); fragment.setArguments(bundle); transaction.add(R.id.contentFragment, fragment); transaction.addToBackStack(null); transaction.commit(); chooseMediaButton.setVisibility(View.INVISIBLE); mPlayPauseButton.setVisibility(View.INVISIBLE); mSeekBar.setVisibility(View.INVISIBLE); if (mPlayer != null) mPlayer.setVisibility(View.INVISIBLE); } }); mPlayPauseButton = (Button)findViewById(R.id.button); mPlayPauseButton.setOnClickListener(this); mSeekBar = (SeekBar)findViewById(R.id.seekBar); mSeekBar.setOnSeekBarChangeListener(this); mPlayPauseButton.setClickable(false); mSeekBar.setEnabled(false); onCreate = true; } @Override public void postMediaId(String mediaId) { getSupportFragmentManager().popBackStack(); chooseMediaButton.setVisibility(View.INVISIBLE); mPlayPauseButton.setVisibility(View.VISIBLE); mSeekBar.setVisibility(View.VISIBLE); if (mPlayer != null) mPlayer.setVisibility(View.VISIBLE); mPlayPauseButton.setClickable(true); mSeekBar.setEnabled(true); currentMediaId = mediaId; Toast.makeText(getApplicationContext(), "Selected Media Id = " + mediaId, Toast.LENGTH_SHORT).show(); if (mPlayer == null) { LOGD(TAG, "first time with entry id = " + currentMediaId); getPlayer(); } else { LOGD(TAG, "changeMedia with entry id = " + currentMediaId); mPlayer.changeMedia(currentMediaId); //Change configuration // config = new KPPlayerConfig("http://kgit.html5video.org/tags/v2.42.rc8/mwEmbedFrame.php", "33189171", "2068231").setEntryId(currentMediaId); // config.addConfig("controlBarContainer.plugin", "false"); // config.addConfig("topBarContainer.plugin", "false"); // config.addConfig("largePlayBtn.plugin", "false"); // mPlayer.changeConfiguration(config); } } private PlayerViewController getPlayer() { if (mPlayer == null) { mPlayer = (PlayerViewController)findViewById(R.id.player); mPlayer.loadPlayerIntoActivity(this); if (currentMediaId == null || "".equals(currentMediaId)){ return null; } config = new KPPlayerConfig("http://kgit.html5video.org/tags/v2.49/mwEmbedFrame.php", "33189171", "2068231").setEntryId(currentMediaId); config.addConfig("controlBarContainer.plugin", "false"); config.addConfig("topBarContainer.plugin", "false"); config.addConfig("largePlayBtn.plugin", "false"); config.addConfig("autoPlay", "true"); mPlayer.initWithConfiguration(config); mPlayer.addEventListener(this); } return mPlayer; } private RelativeLayout getPlayerContainer() { return (RelativeLayout)findViewById(R.id.playerContainer); } @Override protected void onPause() { if (mPlayer != null) { mPlayer.releaseAndSavePosition(); } super.onPause(); } @Override protected void onResume() { if (onCreate) { onCreate = false; } else { if (mPlayer != null) mPlayer.resumePlayer(); } super.onResume(); } @Override protected void onDestroy() { if (mPlayer != null) { mPlayer.removePlayer(); } 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 (mPlayPauseButton.getText().equals("Play")) { mPlayPauseButton.setText("Pause"); getPlayer().sendNotification("doPlay", null); } else { mPlayPauseButton.setText("Play"); getPlayer().sendNotification("doPause", null); } } @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.ENDED) { LOGD(TAG,"Stream ENDED"); chooseMediaButton.setVisibility(View.VISIBLE); mPlayPauseButton.setVisibility(View.INVISIBLE); mSeekBar.setVisibility(View.INVISIBLE); mPlayer.setVisibility(View.INVISIBLE); } if (state == KPlayerState.PAUSED) { LOGD(TAG, "Stream PAUSED"); chooseMediaButton.setVisibility(View.VISIBLE); } if (state == KPlayerState.PLAYING) { LOGD(TAG, "Stream PAUSED"); chooseMediaButton.setVisibility(View.INVISIBLE); } } @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()); } }