Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class PlayerActivity extends AppCompatActivity implements ExoPlayer.EventListener {
- private static final String PLAYER_ACTIVITY_TAG = "Player Activity";
- private FragmentManager manager;
- private BandwidthMeter mBandwidthMeter;
- private TrackSelection.Factory mVideoTrackSelectionFactory;
- private TrackSelector mTrackSelector;
- private LoadControl mLoadControl;
- private DataSource.Factory mDataSourceFactory;
- private MediaSource mVideoSource;
- private SimpleExoPlayer exoPlayer;
- ;
- private Realm mRealm = Realm.getDefaultInstance();
- private List<ChannelRCV> mChannelRCVList;
- private ChannelRCV mCurrentChannelRCV;
- private Handler mMainHandler;
- private PlayerActivityViewModel mPlayerActivityViewModel;
- private MediaControlViewModel mMediaControlViewModel;
- private ActivityPlayerBinding mBinding;
- private int mCurrentChannelRcvIndex = 0;
- private int mNumberOfChannels = 0;
- private int mInitialChannelListSize;
- private Realm realm;
- private RealmResults<EpgRaw> epgRawList;
- private List<WebTvChannel> webTvChannels;
- private Date mStart;
- private Date mEnd;
- private Handler handler;
- private EpgRaw mCurrentEpgRaw;
- private Fragment fragment;
- private String mTitle;
- // private PlayerActivityBinding mBinding;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- /*
- setContentView(R.layout.activity_player);
- */
- mMediaControlViewModel = mMediaControlViewModel.getInstance(this);
- EventBus.getDefault().register(this);
- initializeBinding();
- getDataFromDb();
- hideScreenKeys();
- setupPlayer();
- // removeOldEpgsScheduler();
- startActivity(new Intent(this, HomeActivity.class));
- }
- private void showMediaControl() {
- getDescriptionAndStartEndDateAndTitle();
- manager = getSupportFragmentManager();
- Bundle bundle = new Bundle();
- bundle.putString("title", mTitle);
- Log.i(PLAYER_ACTIVITY_TAG, "TITLE:" + mTitle);
- bundle.putString("icon", mCurrentChannelRCV.getName());
- Log.i(PLAYER_ACTIVITY_TAG, "CH NAME***:" + mCurrentChannelRCV.getName());
- bundle.putString("startTime", mStart.getTime() + "");
- bundle.putString("endTime", mEnd.getTime() + "");
- fragment = new MediaControlFragment();
- fragment.setArguments(bundle);
- manager.beginTransaction()
- .add(R.id.media_control_frame, fragment)
- .commit();
- // Log.i(PLAYER_ACTIVITY_TAG, "Destroyed");
- // handler = new Handler();
- // handler.postDelayed(new Runnable() {
- // @Override
- // public void run() {
- // //do something again
- // Log.i(PLAYER_ACTIVITY_TAG, "DESTROYING FRAGMENT");
- //
- // manager.beginTransaction().remove(fragment).commit();
- //
- //// mMediaControlViewModel = null;
- // Log.i(PLAYER_ACTIVITY_TAG, "DESTROYED FRAGMENT");
- // }
- // }, 3500);
- Log.i(PLAYER_ACTIVITY_TAG, "CHECK IF THIS IS CALLED");
- }
- private void initializeBinding() {
- mBinding = DataBindingUtil.setContentView(this, R.layout.activity_player);
- mPlayerActivityViewModel = new PlayerActivityViewModel();
- mBinding.setVariable(BR.vm, mPlayerActivityViewModel);
- }
- private void hideScreenKeys() {
- View decorView = getWindow().getDecorView();
- int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
- | View.SYSTEM_UI_FLAG_FULLSCREEN;
- decorView.setSystemUiVisibility(uiOptions);
- this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
- }
- @Subscribe
- public void onEvent(StartCatchupEvent event) {
- Log.i(PLAYER_ACTIVITY_TAG, "Event catched, starting Catchup");
- ChannelRCV catchup = new ChannelRCV();
- catchup.setUrl(event.getUrl());
- catchup.setName("catchup");
- mChannelRCVList.add(catchup);
- mCurrentChannelRCV = mChannelRCVList.get(mChannelRCVList.size() - 1);
- setupPlayer();
- }
- @Subscribe
- public void onEvent(LiveStreamMovie event) {
- String movieUrl = event.getStreamUrl();
- ChannelRCV movie = new ChannelRCV();
- movie.setName("movie");
- movie.setUrl(movieUrl);
- mChannelRCVList.add(movie);
- mCurrentChannelRCV = mChannelRCVList.get(mChannelRCVList.size() - 1);
- setupPlayer();
- }
- public void setupPlayer() {
- if (exoPlayer != null) {
- exoPlayer.release();
- }
- if (handler != null) {
- handler.removeCallbacks(null);
- }
- mMainHandler = new Handler();
- mBandwidthMeter = new DefaultBandwidthMeter();
- mVideoTrackSelectionFactory = new AdaptiveTrackSelection.Factory(mBandwidthMeter, 2000, 3000, 5000, 3000, 2000f);
- mTrackSelector = new DefaultTrackSelector(mVideoTrackSelectionFactory);
- mLoadControl = new DefaultLoadControl();
- exoPlayer = ExoPlayerFactory.newSimpleInstance(this, mTrackSelector);
- DefaultBandwidthMeter defaultBandwidthMeter = new DefaultBandwidthMeter();
- mDataSourceFactory = new DefaultHttpDataSourceFactory(Util.getUserAgent(this, "AOC"), defaultBandwidthMeter);
- /*try {*/
- mVideoSource = new HlsMediaSource(Uri.parse(mCurrentChannelRCV.getUrl()), mDataSourceFactory, mMainHandler, new AdaptiveMediaSourceEventListener() {
- //mVideoSource = new HlsMediaSource(Uri.parse("http://n-3-22.dcs.redcdn.pl/hls/o2/redefine/nlive/BBC_Earth_HD_1/13332/0/tv-ss/live.isml/playlist.m3u8"), mDataSourceFactory, mMainHandler, new AdaptiveMediaSourceEventListener() {
- @Override
- public void onLoadStarted(DataSpec dataSpec, int dataType, int trackType, Format trackFormat, int trackSelectionReason, Object trackSelectionData, long mediaStartTimeMs, long mediaEndTimeMs, long elapsedRealtimeMs) {
- // Log.i(PLAYER_ACTIVITY_TAG, "onLoadStarted");
- }
- @Override
- public void onLoadCompleted(DataSpec dataSpec, int dataType, int trackType, Format trackFormat, int trackSelectionReason, Object trackSelectionData, long mediaStartTimeMs, long mediaEndTimeMs, long elapsedRealtimeMs, long loadDurationMs, long bytesLoaded) {
- // Log.i(PLAYER_ACTIVITY_TAG, "onLoadCompleted");
- }
- @Override
- public void onLoadCanceled(DataSpec dataSpec, int dataType, int trackType, Format trackFormat, int trackSelectionReason, Object trackSelectionData, long mediaStartTimeMs, long mediaEndTimeMs, long elapsedRealtimeMs, long loadDurationMs, long bytesLoaded) {
- Log.i(PLAYER_ACTIVITY_TAG, "onLoadCanceled");
- }
- @Override
- public void onLoadError(DataSpec dataSpec, int dataType, int trackType, Format trackFormat, int trackSelectionReason, Object trackSelectionData, long mediaStartTimeMs, long mediaEndTimeMs, long elapsedRealtimeMs, long loadDurationMs, long bytesLoaded, IOException error, boolean wasCanceled) {
- Log.e(PLAYER_ACTIVITY_TAG, "onLoadError2");
- Log.e(PLAYER_ACTIVITY_TAG, error.toString());
- if (error.toString().equals(getString(R.string.source_error_404_player))) {
- mCurrentChannelRCV = mChannelRCVList.get(0);
- setupPlayer();
- Toast.makeText(AocApplication.getInstance().getApplicationContext(), getString(R.string.video_not_responding_message), Toast.LENGTH_SHORT).show();
- }
- // setupPlayer();
- }
- @Override
- public void onUpstreamDiscarded(int trackType, long mediaStartTimeMs, long mediaEndTimeMs) {
- Log.i(PLAYER_ACTIVITY_TAG, "onUpstreamDiscarded");
- }
- @Override
- public void onDownstreamFormatChanged(int trackType, Format trackFormat, int trackSelectionReason, Object trackSelectionData, long mediaTimeMs) {
- Log.i(PLAYER_ACTIVITY_TAG, "onDownstreamFormatChanged");
- }
- });
- /*} catch (Exception ex) {
- Log.e(PLAYER_ACTIVITY_TAG, ex.toString());
- }*/
- // Log.i(PLAYER_ACTIVITY_TAG, "Generating start and end date");
- getDescriptionAndStartEndDateAndTitle();
- // Log.i(PLAYER_ACTIVITY_TAG, "Generated start and end date");
- // Log.i(PLAYER_ACTIVITY_TAG, "start is: " + mStart.getTime());
- // Log.i(PLAYER_ACTIVITY_TAG, "end is: " + mEnd.getTime());
- /* mPlayerActivityViewModel.setTimes(mStart, mEnd);
- mPlayerActivityViewModel.setMaxProgress();
- mPlayerActivityViewModel.setProgress();
- */
- exoPlayer.prepare(mVideoSource);
- exoPlayer.setPlayWhenReady(true);
- // mPlayerActivityViewModel.setIcon(mCurrentChannelRCV.getName());
- mPlayerActivityViewModel.setPlayer(exoPlayer);
- showMediaControl();
- //
- // mPlayerActivityViewModel.setIcons(mCurrentChannelRCV.getName());
- }
- @Override
- public void onTimelineChanged(Timeline timeline, Object manifest) {
- Log.i(PLAYER_ACTIVITY_TAG, "onTimelineChanged");
- }
- @Override
- public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) {
- Log.i(PLAYER_ACTIVITY_TAG, "onTracksChanged");
- }
- @Override
- public void onLoadingChanged(boolean isLoading) {
- Log.i(PLAYER_ACTIVITY_TAG, "onLoadingChanged");
- }
- @Override
- public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
- Log.i(PLAYER_ACTIVITY_TAG, "onPlayerStateChanged");
- }
- @Override
- public void onPlayerError(ExoPlaybackException error) {
- Log.e(PLAYER_ACTIVITY_TAG, "ERROR with Player");
- Log.e(PLAYER_ACTIVITY_TAG, error.toString());
- }
- @Override
- public void onPositionDiscontinuity() {
- Log.e(PLAYER_ACTIVITY_TAG, "onPositionDiscontinuity");
- }
- @Override
- public void onPlaybackParametersChanged(PlaybackParameters playbackParameters) {
- Log.i(PLAYER_ACTIVITY_TAG, "onPlaybackParametersChanged");
- }
- public void getDataFromDb() {
- mRealm = Realm.getDefaultInstance();
- mInitialChannelListSize = mRealm.where(WebTvChannel.class).findAll().size();
- webTvChannels = mRealm.where(WebTvChannel.class).findAll();
- mChannelRCVList = Converter.convertList(webTvChannels);
- /*for (ChannelRCV channelRCV : mChannelRCVList) {
- System.out.println(channelRCV.getName());
- }*/
- mNumberOfChannels = mChannelRCVList.size();
- mCurrentChannelRCV = mChannelRCVList.get(0);
- Log.i(PLAYER_ACTIVITY_TAG, "STARTING WITH CHANNEL: " + mCurrentChannelRCV.getUrl());
- }
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- /*if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
- if (mPlayerActivityViewModel.getMenuVisibility() == View.VISIBLE) {
- mPlayerActivityViewModel.setMenuSelectionDown();
- }
- }
- if (keyCode == KeyEvent.KEYCODE_DPAD_UP) {
- if (mPlayerActivityViewModel.getMenuVisibility() == View.VISIBLE) {
- mPlayerActivityViewModel.setMenuSelectionUp();
- }
- }
- */
- if (keyCode == KeyEvent.KEYCODE_X) {
- /*if(mPlayerActivityViewModel.getInfoVisibility() == View.VISIBLE){
- mPlayerActivityViewModel.setInfoVisibility();
- }
- if(mPlayerActivityViewModel.getMenuVisibility() == View.VISIBLE){
- mPlayerActivityViewModel.setMenuVisibility();
- }*/
- startActivity(new Intent(this, EpgActivity.class));
- }
- if (keyCode == KeyEvent.KEYCODE_V) {
- startActivity(new Intent(this, VodActivity.class));
- }
- if (keyCode == KeyEvent.KEYCODE_H) {
- startActivity(new Intent(this, HomeActivity.class));
- }
- if (keyCode == KeyEvent.KEYCODE_N) {
- // activity navigation
- Intent navigationActivity = new Intent(this, NavigationActivity.class);
- // Log.d("Player Activity", "channelId=" + mCurrentChannelRCV.getId());
- navigationActivity.putExtra("channelId", mCurrentChannelRCV.getId());
- if (mCurrentEpgRaw.getId() != null)
- navigationActivity.putExtra("epgId", mCurrentEpgRaw.getId());
- else
- navigationActivity.putExtra("epgId", -1);
- startActivity(navigationActivity);
- }
- if (keyCode == KeyEvent.KEYCODE_BACK) {
- // System.out.println("BACK PRESSED");
- }
- switch (keyCode) {
- case KeyEvent.KEYCODE_K:
- if (mInitialChannelListSize < mChannelRCVList.size()) {
- mChannelRCVList.remove(mChannelRCVList.size() - 1);
- }
- handler.removeCallbacks(null);
- channelLeft();
- Log.i(PLAYER_ACTIVITY_TAG, mCurrentChannelRCV.getUrl());
- break;
- case KeyEvent.KEYCODE_J:
- if (mInitialChannelListSize < mChannelRCVList.size()) {
- mChannelRCVList.remove(mChannelRCVList.size() - 1);
- }
- channelRight();
- break;
- }
- return super.onKeyDown(keyCode, event);
- }
- private void channelRight() {
- mCurrentChannelRcvIndex--;
- if (mNumberOfChannels == mChannelRCVList.size() && mCurrentChannelRcvIndex >= 0) {
- mCurrentChannelRCV = mChannelRCVList.get(mCurrentChannelRcvIndex);
- setupPlayer();
- } else {
- mCurrentChannelRcvIndex++;
- }
- }
- private void channelLeft() {
- mCurrentChannelRcvIndex++;
- if (mCurrentChannelRcvIndex < mNumberOfChannels) {
- mCurrentChannelRCV = mChannelRCVList.get(mCurrentChannelRcvIndex);
- setupPlayer();
- } else {
- mCurrentChannelRcvIndex--;
- }
- }
- @Override
- protected void onResume() {
- super.onResume();
- // exoPlayer.release();
- // setupPlayer();
- }
- @Override
- public void onBackPressed() {
- // super.onBackPressed();
- if (mInitialChannelListSize < mChannelRCVList.size()) {
- mChannelRCVList.remove(mChannelRCVList.size() - 1);
- }
- startActivity(new Intent(this, HomeActivity.class));
- }
- private void clearOldEpgs() {
- try {
- realm = Realm.getDefaultInstance();
- realm.beginTransaction();
- Date currentTime = new Date();
- //TODO: CHECK IF 3 DAYS IS GOOD
- Date threeDaysAgo = new Date(currentTime.getTime() - EpgScreenConfig.THREE_DAYS_IN_MILLIS);
- epgRawList = realm.where(EpgRaw.class).lessThan("end", threeDaysAgo).findAll();
- // Log.i(PLAYER_ACTIVITY_TAG, "Size of list is" + epgRawList.size() + "");
- epgRawList.deleteAllFromRealm();
- realm.commitTransaction();
- // Log.i(PLAYER_ACTIVITY_TAG, "Size of list after deleting is" + epgRawList.size() + "");
- List<EpgRaw> list = realm.where(EpgRaw.class).findAll();
- // Log.i(PLAYER_ACTIVITY_TAG, "NUM OF ALL ELEMENTS IS: " + list.size());
- } catch (Exception ex) {
- ex.printStackTrace();
- Log.e(PLAYER_ACTIVITY_TAG, ex.toString());
- }
- }
- private void removeOldEpgsScheduler() {
- ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
- /* scheduler.scheduleAtFixedRate(new Runnable() {
- public void run() {
- Log.i(PLAYER_ACTIVITY_TAG,"Scheduler is started");
- clearOldEpgs();
- }
- }, 0, 1, TimeUnit.DAYS);*/
- }
- //TODO: REFACTOR IN TWO METHODS
- private void getDescriptionAndStartEndDateAndTitle() {
- Date rightNow = new Date();
- for (WebTvChannel channel : webTvChannels) {
- if (channel.getName().equals(mCurrentChannelRCV.getName())) {
- // Log.i(PLAYER_ACTIVITY_TAG, "CHANNEL IS :" + channel.getName());
- for (EpgRaw epgRaw : channel.getEpgList()) {
- if (epgRaw.getStart().before(rightNow) && epgRaw.getEnd().after(rightNow)) {
- // Log.i(PLAYER_ACTIVITY_TAG, "EPG start IS :" + epgRaw.getStart() + " end is:" + epgRaw.getEnd());
- mTitle = epgRaw.getTitle();
- // Log.i(PLAYER_ACTIVITY_TAG, "Title: " + epgRaw.getTitle() + " desc:" + epgRaw.getDescription());
- mCurrentEpgRaw = epgRaw;
- // Log.i(PLAYER_ACTIVITY_TAG, "START:" + mStart);
- mStart = epgRaw.getStart();
- mEnd = epgRaw.getEnd();
- // Log.i(PLAYER_ACTIVITY_TAG, "END:" + mEnd);
- } else {
- // Log.i(PLAYER_ACTIVITY_TAG, "condition is not fulfilled");
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement