Advertisement
Guest User

main

a guest
Jun 30th, 2017
247
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 17.27 KB | None | 0 0
  1. public class PlayerActivity extends AppCompatActivity implements ExoPlayer.EventListener {
  2.  
  3.     private static final String PLAYER_ACTIVITY_TAG = "Player Activity";
  4.     private FragmentManager manager;
  5.     private BandwidthMeter mBandwidthMeter;
  6.     private TrackSelection.Factory mVideoTrackSelectionFactory;
  7.     private TrackSelector mTrackSelector;
  8.     private LoadControl mLoadControl;
  9.     private DataSource.Factory mDataSourceFactory;
  10.     private MediaSource mVideoSource;
  11.     private SimpleExoPlayer exoPlayer;
  12.     ;
  13.     private Realm mRealm = Realm.getDefaultInstance();
  14.     private List<ChannelRCV> mChannelRCVList;
  15.     private ChannelRCV mCurrentChannelRCV;
  16.     private Handler mMainHandler;
  17.     private PlayerActivityViewModel mPlayerActivityViewModel;
  18.     private MediaControlViewModel mMediaControlViewModel;
  19.     private ActivityPlayerBinding mBinding;
  20.     private int mCurrentChannelRcvIndex = 0;
  21.     private int mNumberOfChannels = 0;
  22.     private int mInitialChannelListSize;
  23.     private Realm realm;
  24.     private RealmResults<EpgRaw> epgRawList;
  25.     private List<WebTvChannel> webTvChannels;
  26.     private Date mStart;
  27.     private Date mEnd;
  28.     private Handler handler;
  29.     private EpgRaw mCurrentEpgRaw;
  30.     private Fragment fragment;
  31.     private String mTitle;
  32.     // private PlayerActivityBinding mBinding;
  33.  
  34.  
  35.     @Override
  36.     protected void onCreate(Bundle savedInstanceState) {
  37.         super.onCreate(savedInstanceState);
  38. /*
  39.         setContentView(R.layout.activity_player);
  40. */
  41.         mMediaControlViewModel = mMediaControlViewModel.getInstance(this);
  42.         EventBus.getDefault().register(this);
  43.         initializeBinding();
  44.         getDataFromDb();
  45.         hideScreenKeys();
  46.         setupPlayer();
  47. //        removeOldEpgsScheduler();
  48.         startActivity(new Intent(this, HomeActivity.class));
  49.     }
  50.  
  51.     private void showMediaControl() {
  52.         getDescriptionAndStartEndDateAndTitle();
  53.  
  54.         manager = getSupportFragmentManager();
  55.         Bundle bundle = new Bundle();
  56.  
  57.         bundle.putString("title", mTitle);
  58.         Log.i(PLAYER_ACTIVITY_TAG, "TITLE:" + mTitle);
  59.  
  60.         bundle.putString("icon", mCurrentChannelRCV.getName());
  61.  
  62.         Log.i(PLAYER_ACTIVITY_TAG, "CH NAME***:" + mCurrentChannelRCV.getName());
  63.  
  64.         bundle.putString("startTime", mStart.getTime() + "");
  65.         bundle.putString("endTime", mEnd.getTime() + "");
  66.  
  67.         fragment = new MediaControlFragment();
  68.         fragment.setArguments(bundle);
  69.  
  70.         manager.beginTransaction()
  71.                 .add(R.id.media_control_frame, fragment)
  72.                 .commit();
  73.  
  74.  
  75. //        Log.i(PLAYER_ACTIVITY_TAG, "Destroyed");
  76. //        handler = new Handler();
  77. //        handler.postDelayed(new Runnable() {
  78. //            @Override
  79. //            public void run() {
  80. //                //do something again
  81. //                Log.i(PLAYER_ACTIVITY_TAG, "DESTROYING FRAGMENT");
  82. //
  83. //                manager.beginTransaction().remove(fragment).commit();
  84. //
  85. ////                mMediaControlViewModel = null;
  86. //                Log.i(PLAYER_ACTIVITY_TAG, "DESTROYED FRAGMENT");
  87. //            }
  88. //        }, 3500);
  89.  
  90.         Log.i(PLAYER_ACTIVITY_TAG, "CHECK IF THIS IS CALLED");
  91.     }
  92.  
  93.     private void initializeBinding() {
  94.         mBinding = DataBindingUtil.setContentView(this, R.layout.activity_player);
  95.         mPlayerActivityViewModel = new PlayerActivityViewModel();
  96.         mBinding.setVariable(BR.vm, mPlayerActivityViewModel);
  97.  
  98.     }
  99.  
  100.     private void hideScreenKeys() {
  101.         View decorView = getWindow().getDecorView();
  102.         int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
  103.                 | View.SYSTEM_UI_FLAG_FULLSCREEN;
  104.  
  105.         decorView.setSystemUiVisibility(uiOptions);
  106.  
  107.         this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
  108.     }
  109.  
  110.     @Subscribe
  111.     public void onEvent(StartCatchupEvent event) {
  112.         Log.i(PLAYER_ACTIVITY_TAG, "Event catched, starting Catchup");
  113.         ChannelRCV catchup = new ChannelRCV();
  114.         catchup.setUrl(event.getUrl());
  115.         catchup.setName("catchup");
  116.         mChannelRCVList.add(catchup);
  117.         mCurrentChannelRCV = mChannelRCVList.get(mChannelRCVList.size() - 1);
  118.         setupPlayer();
  119.     }
  120.  
  121.     @Subscribe
  122.     public void onEvent(LiveStreamMovie event) {
  123.         String movieUrl = event.getStreamUrl();
  124.         ChannelRCV movie = new ChannelRCV();
  125.         movie.setName("movie");
  126.         movie.setUrl(movieUrl);
  127.         mChannelRCVList.add(movie);
  128.         mCurrentChannelRCV = mChannelRCVList.get(mChannelRCVList.size() - 1);
  129.         setupPlayer();
  130.     }
  131.  
  132.  
  133.     public void setupPlayer() {
  134.  
  135.         if (exoPlayer != null) {
  136.             exoPlayer.release();
  137.         }
  138.         if (handler != null) {
  139.             handler.removeCallbacks(null);
  140.         }
  141.  
  142.         mMainHandler = new Handler();
  143.         mBandwidthMeter = new DefaultBandwidthMeter();
  144.  
  145.         mVideoTrackSelectionFactory = new AdaptiveTrackSelection.Factory(mBandwidthMeter, 2000, 3000, 5000, 3000, 2000f);
  146.  
  147.         mTrackSelector = new DefaultTrackSelector(mVideoTrackSelectionFactory);
  148.  
  149.         mLoadControl = new DefaultLoadControl();
  150.  
  151.         exoPlayer = ExoPlayerFactory.newSimpleInstance(this, mTrackSelector);
  152.  
  153.         DefaultBandwidthMeter defaultBandwidthMeter = new DefaultBandwidthMeter();
  154.         mDataSourceFactory = new DefaultHttpDataSourceFactory(Util.getUserAgent(this, "AOC"), defaultBandwidthMeter);
  155.         /*try {*/
  156.  
  157.         mVideoSource = new HlsMediaSource(Uri.parse(mCurrentChannelRCV.getUrl()), mDataSourceFactory, mMainHandler, new AdaptiveMediaSourceEventListener() {
  158.             //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() {
  159.             @Override
  160.             public void onLoadStarted(DataSpec dataSpec, int dataType, int trackType, Format trackFormat, int trackSelectionReason, Object trackSelectionData, long mediaStartTimeMs, long mediaEndTimeMs, long elapsedRealtimeMs) {
  161.                 //  Log.i(PLAYER_ACTIVITY_TAG, "onLoadStarted");
  162.             }
  163.  
  164.             @Override
  165.             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) {
  166.                 // Log.i(PLAYER_ACTIVITY_TAG, "onLoadCompleted");
  167.             }
  168.  
  169.             @Override
  170.             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) {
  171.                 Log.i(PLAYER_ACTIVITY_TAG, "onLoadCanceled");
  172.             }
  173.  
  174.             @Override
  175.             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) {
  176.                 Log.e(PLAYER_ACTIVITY_TAG, "onLoadError2");
  177.                 Log.e(PLAYER_ACTIVITY_TAG, error.toString());
  178.                 if (error.toString().equals(getString(R.string.source_error_404_player))) {
  179.                     mCurrentChannelRCV = mChannelRCVList.get(0);
  180.                     setupPlayer();
  181.                     Toast.makeText(AocApplication.getInstance().getApplicationContext(), getString(R.string.video_not_responding_message), Toast.LENGTH_SHORT).show();
  182.                 }
  183.  
  184.                 // setupPlayer();
  185.             }
  186.  
  187.             @Override
  188.             public void onUpstreamDiscarded(int trackType, long mediaStartTimeMs, long mediaEndTimeMs) {
  189.                 Log.i(PLAYER_ACTIVITY_TAG, "onUpstreamDiscarded");
  190.             }
  191.  
  192.             @Override
  193.             public void onDownstreamFormatChanged(int trackType, Format trackFormat, int trackSelectionReason, Object trackSelectionData, long mediaTimeMs) {
  194.                 Log.i(PLAYER_ACTIVITY_TAG, "onDownstreamFormatChanged");
  195.             }
  196.  
  197.         });
  198.         /*} catch (Exception ex) {
  199.             Log.e(PLAYER_ACTIVITY_TAG, ex.toString());
  200.         }*/
  201. //        Log.i(PLAYER_ACTIVITY_TAG, "Generating start and end date");
  202.         getDescriptionAndStartEndDateAndTitle();
  203. //        Log.i(PLAYER_ACTIVITY_TAG, "Generated start and end date");
  204. //        Log.i(PLAYER_ACTIVITY_TAG, "start is: " + mStart.getTime());
  205. //        Log.i(PLAYER_ACTIVITY_TAG, "end is: " + mEnd.getTime());
  206.        /* mPlayerActivityViewModel.setTimes(mStart, mEnd);
  207.  
  208.         mPlayerActivityViewModel.setMaxProgress();
  209.         mPlayerActivityViewModel.setProgress();
  210.        */
  211.         exoPlayer.prepare(mVideoSource);
  212.  
  213.         exoPlayer.setPlayWhenReady(true);
  214.  
  215. //        mPlayerActivityViewModel.setIcon(mCurrentChannelRCV.getName());
  216.         mPlayerActivityViewModel.setPlayer(exoPlayer);
  217.         showMediaControl();
  218.  
  219.  
  220. //
  221. // mPlayerActivityViewModel.setIcons(mCurrentChannelRCV.getName());
  222.  
  223.     }
  224.  
  225.     @Override
  226.     public void onTimelineChanged(Timeline timeline, Object manifest) {
  227.         Log.i(PLAYER_ACTIVITY_TAG, "onTimelineChanged");
  228.     }
  229.  
  230.     @Override
  231.     public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) {
  232.         Log.i(PLAYER_ACTIVITY_TAG, "onTracksChanged");
  233.  
  234.     }
  235.  
  236.     @Override
  237.     public void onLoadingChanged(boolean isLoading) {
  238.         Log.i(PLAYER_ACTIVITY_TAG, "onLoadingChanged");
  239.  
  240.     }
  241.  
  242.     @Override
  243.     public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
  244.         Log.i(PLAYER_ACTIVITY_TAG, "onPlayerStateChanged");
  245.  
  246.     }
  247.  
  248.     @Override
  249.     public void onPlayerError(ExoPlaybackException error) {
  250.         Log.e(PLAYER_ACTIVITY_TAG, "ERROR with Player");
  251.         Log.e(PLAYER_ACTIVITY_TAG, error.toString());
  252.  
  253.  
  254.     }
  255.  
  256.     @Override
  257.     public void onPositionDiscontinuity() {
  258.         Log.e(PLAYER_ACTIVITY_TAG, "onPositionDiscontinuity");
  259.  
  260.     }
  261.  
  262.     @Override
  263.     public void onPlaybackParametersChanged(PlaybackParameters playbackParameters) {
  264.         Log.i(PLAYER_ACTIVITY_TAG, "onPlaybackParametersChanged");
  265.     }
  266.  
  267.     public void getDataFromDb() {
  268.         mRealm = Realm.getDefaultInstance();
  269.         mInitialChannelListSize = mRealm.where(WebTvChannel.class).findAll().size();
  270.         webTvChannels = mRealm.where(WebTvChannel.class).findAll();
  271.         mChannelRCVList = Converter.convertList(webTvChannels);
  272.         /*for (ChannelRCV channelRCV : mChannelRCVList) {
  273.             System.out.println(channelRCV.getName());
  274.         }*/
  275.         mNumberOfChannels = mChannelRCVList.size();
  276.         mCurrentChannelRCV = mChannelRCVList.get(0);
  277.         Log.i(PLAYER_ACTIVITY_TAG, "STARTING WITH CHANNEL: " + mCurrentChannelRCV.getUrl());
  278.     }
  279.  
  280.     @Override
  281.     public boolean onKeyDown(int keyCode, KeyEvent event) {
  282.  
  283.  
  284.         /*if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
  285.             if (mPlayerActivityViewModel.getMenuVisibility() == View.VISIBLE) {
  286.                 mPlayerActivityViewModel.setMenuSelectionDown();
  287.             }
  288.         }
  289.         if (keyCode == KeyEvent.KEYCODE_DPAD_UP) {
  290.             if (mPlayerActivityViewModel.getMenuVisibility() == View.VISIBLE) {
  291.                 mPlayerActivityViewModel.setMenuSelectionUp();
  292.             }
  293.         }
  294. */
  295.         if (keyCode == KeyEvent.KEYCODE_X) {
  296.  
  297.             /*if(mPlayerActivityViewModel.getInfoVisibility() == View.VISIBLE){
  298.                 mPlayerActivityViewModel.setInfoVisibility();
  299.             }
  300.  
  301.             if(mPlayerActivityViewModel.getMenuVisibility() == View.VISIBLE){
  302.                 mPlayerActivityViewModel.setMenuVisibility();
  303.             }*/
  304.             startActivity(new Intent(this, EpgActivity.class));
  305.         }
  306.  
  307.         if (keyCode == KeyEvent.KEYCODE_V) {
  308.  
  309.             startActivity(new Intent(this, VodActivity.class));
  310.  
  311.         }
  312.  
  313.         if (keyCode == KeyEvent.KEYCODE_H) {
  314.  
  315.             startActivity(new Intent(this, HomeActivity.class));
  316.  
  317.         }
  318.  
  319.  
  320.         if (keyCode == KeyEvent.KEYCODE_N) {
  321.  
  322.             // activity navigation
  323.             Intent navigationActivity = new Intent(this, NavigationActivity.class);
  324.  
  325. //            Log.d("Player Activity", "channelId=" + mCurrentChannelRCV.getId());
  326.             navigationActivity.putExtra("channelId", mCurrentChannelRCV.getId());
  327.             if (mCurrentEpgRaw.getId() != null)
  328.                 navigationActivity.putExtra("epgId", mCurrentEpgRaw.getId());
  329.             else
  330.                 navigationActivity.putExtra("epgId", -1);
  331.             startActivity(navigationActivity);
  332.         }
  333.  
  334.         if (keyCode == KeyEvent.KEYCODE_BACK) {
  335. //            System.out.println("BACK PRESSED");
  336.         }
  337.  
  338.         switch (keyCode) {
  339.             case KeyEvent.KEYCODE_K:
  340.                 if (mInitialChannelListSize < mChannelRCVList.size()) {
  341.                     mChannelRCVList.remove(mChannelRCVList.size() - 1);
  342.                 }
  343.                 handler.removeCallbacks(null);
  344.                 channelLeft();
  345.                 Log.i(PLAYER_ACTIVITY_TAG, mCurrentChannelRCV.getUrl());
  346.                 break;
  347.             case KeyEvent.KEYCODE_J:
  348.                 if (mInitialChannelListSize < mChannelRCVList.size()) {
  349.                     mChannelRCVList.remove(mChannelRCVList.size() - 1);
  350.                 }
  351.  
  352.                 channelRight();
  353.                 break;
  354.         }
  355.  
  356.  
  357.         return super.onKeyDown(keyCode, event);
  358.     }
  359.  
  360.     private void channelRight() {
  361.         mCurrentChannelRcvIndex--;
  362.         if (mNumberOfChannels == mChannelRCVList.size() && mCurrentChannelRcvIndex >= 0) {
  363.             mCurrentChannelRCV = mChannelRCVList.get(mCurrentChannelRcvIndex);
  364.             setupPlayer();
  365.         } else {
  366.             mCurrentChannelRcvIndex++;
  367.         }
  368.     }
  369.  
  370.     private void channelLeft() {
  371.         mCurrentChannelRcvIndex++;
  372.  
  373.         if (mCurrentChannelRcvIndex < mNumberOfChannels) {
  374.             mCurrentChannelRCV = mChannelRCVList.get(mCurrentChannelRcvIndex);
  375.             setupPlayer();
  376.         } else {
  377.             mCurrentChannelRcvIndex--;
  378.         }
  379.     }
  380.  
  381.     @Override
  382.     protected void onResume() {
  383.         super.onResume();
  384. //        exoPlayer.release();
  385. //        setupPlayer();
  386.     }
  387.  
  388.     @Override
  389.     public void onBackPressed() {
  390. //        super.onBackPressed();
  391.         if (mInitialChannelListSize < mChannelRCVList.size()) {
  392.             mChannelRCVList.remove(mChannelRCVList.size() - 1);
  393.         }
  394.         startActivity(new Intent(this, HomeActivity.class));
  395.  
  396.  
  397.     }
  398.  
  399.  
  400.     private void clearOldEpgs() {
  401.         try {
  402.             realm = Realm.getDefaultInstance();
  403.             realm.beginTransaction();
  404.             Date currentTime = new Date();
  405.             //TODO: CHECK IF 3 DAYS IS GOOD
  406.             Date threeDaysAgo = new Date(currentTime.getTime() - EpgScreenConfig.THREE_DAYS_IN_MILLIS);
  407.  
  408.             epgRawList = realm.where(EpgRaw.class).lessThan("end", threeDaysAgo).findAll();
  409.  
  410. //            Log.i(PLAYER_ACTIVITY_TAG, "Size of list is" + epgRawList.size() + "");
  411.             epgRawList.deleteAllFromRealm();
  412.             realm.commitTransaction();
  413. //            Log.i(PLAYER_ACTIVITY_TAG, "Size of list after deleting is" + epgRawList.size() + "");
  414.             List<EpgRaw> list = realm.where(EpgRaw.class).findAll();
  415. //            Log.i(PLAYER_ACTIVITY_TAG, "NUM OF ALL ELEMENTS IS: " + list.size());
  416.  
  417.         } catch (Exception ex) {
  418.             ex.printStackTrace();
  419.             Log.e(PLAYER_ACTIVITY_TAG, ex.toString());
  420.         }
  421.     }
  422.  
  423.     private void removeOldEpgsScheduler() {
  424.  
  425.         ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
  426.  
  427.  
  428.        /* scheduler.scheduleAtFixedRate(new Runnable() {
  429.             public void run() {
  430.                 Log.i(PLAYER_ACTIVITY_TAG,"Scheduler is started");
  431.                 clearOldEpgs();
  432.             }
  433.         }, 0, 1, TimeUnit.DAYS);*/
  434.     }
  435.  
  436.     //TODO: REFACTOR IN TWO METHODS
  437.     private void getDescriptionAndStartEndDateAndTitle() {
  438.         Date rightNow = new Date();
  439.         for (WebTvChannel channel : webTvChannels) {
  440.             if (channel.getName().equals(mCurrentChannelRCV.getName())) {
  441. //                Log.i(PLAYER_ACTIVITY_TAG, "CHANNEL IS :" + channel.getName());
  442.                 for (EpgRaw epgRaw : channel.getEpgList()) {
  443.                     if (epgRaw.getStart().before(rightNow) && epgRaw.getEnd().after(rightNow)) {
  444. //                        Log.i(PLAYER_ACTIVITY_TAG, "EPG start IS :" + epgRaw.getStart() + " end is:" + epgRaw.getEnd());
  445.  
  446.                         mTitle = epgRaw.getTitle();
  447. //                        Log.i(PLAYER_ACTIVITY_TAG, "Title: " + epgRaw.getTitle() + " desc:" + epgRaw.getDescription());
  448.                         mCurrentEpgRaw = epgRaw;
  449. //                        Log.i(PLAYER_ACTIVITY_TAG, "START:" + mStart);
  450.                         mStart = epgRaw.getStart();
  451.                         mEnd = epgRaw.getEnd();
  452. //                        Log.i(PLAYER_ACTIVITY_TAG, "END:" + mEnd);
  453.                     } else {
  454. //                        Log.i(PLAYER_ACTIVITY_TAG, "condition is not fulfilled");
  455.  
  456.                     }
  457.                 }
  458.             }
  459.         }
  460.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement