88import android .os .Handler ;
99import android .os .Message ;
1010import android .os .PowerManager ;
11- import android .support .v4 .media .session .MediaSessionCompat ;
1211import android .text .TextUtils ;
1312import android .view .Choreographer ;
1413import android .view .KeyEvent ;
4241import androidx .media3 .exoplayer .mediacodec .MediaCodecUtil ;
4342import androidx .media3 .exoplayer .source .TrackGroupArray ;
4443import androidx .media3 .exoplayer .trackselection .MappingTrackSelector ;
45- import androidx .media3 .session .ext .MediaSessionConnector ;
4644
4745import com .amazon .device .ads .aftv .AdBreakPattern ;
4846import com .amazon .device .ads .aftv .AmazonFireTVAdCallback ;
8179import com .diceplatform .doris .entity .TextTrack ;
8280import com .diceplatform .doris .entity .Track ;
8381import com .diceplatform .doris .entity .TracksPolicy ;
84- import com .diceplatform .doris .entity .VideoType ;
8582import com .diceplatform .doris .entity .YoSsaiProperties ;
8683import com .diceplatform .doris .ext .imacsailive .ExoDorisImaCsaiLivePlayer ;
8784import com .diceplatform .doris .internal .ResumePositionHandler ;
@@ -341,10 +338,6 @@ public void doFrame(long frameTimeNanos) {
341338 //Mux
342339 private Runnable initRunnable ;
343340
344- //MediaSession
345- private final MediaSessionCompat mediaSession ;
346- private final MediaSessionConnector mediaSessionConnector ;
347-
348341 private final AudioManager .OnAudioFocusChangeListener audioFocusChangeListener = new AudioManager .OnAudioFocusChangeListener () {
349342 @ Override
350343 public void onAudioFocusChange (int focusChange ) {
@@ -387,9 +380,6 @@ public ReactTVExoplayerView(ThemedReactContext context) {
387380 clearResumePosition ();
388381 setPausedModifier (false );
389382
390- mediaSession = new MediaSessionCompat (getContext (), getContext ().getPackageName ());
391- mediaSessionConnector = new MediaSessionConnector (mediaSession );
392-
393383 boolean isRTL = I18nUtil .getInstance ().isRTL (getContext ());
394384 ExoDorisPlayerTvControlView controller = exoDorisPlayerView .findViewById (R .id .exo_controller );
395385 controller .setLayoutDirection (isRTL ? View .LAYOUT_DIRECTION_RTL : View .LAYOUT_DIRECTION_LTR );
@@ -490,7 +480,7 @@ public void onHostResume() {
490480 clearResumePosition ();
491481 player .getExoPlayer ().seekToDefaultPosition ();
492482 }
493- activateMediaSession ();
483+ player . activateMediaSession ();
494484 setPlayWhenReady (true );
495485 fromBackground = true ;
496486 }
@@ -503,8 +493,10 @@ public void onHostPause() {
503493 setPlayWhenReady (false );
504494 onStopPlayback ();
505495 isInBackground = isInteractive ();
506- deactivateMediaSession ();
507496 dismissPopupWindow ();
497+ if (player != null ) {
498+ player .deactivateMediaSession ();
499+ }
508500 }
509501
510502 private void dismissPopupWindow () {
@@ -588,8 +580,6 @@ private void doInitializePlayer(boolean force) {
588580 exoPlayer .setPlaybackParameters (params );
589581 exoPlayer .setVolume (isMuted ? 0 : 1 );
590582 Log .d (TAG , "initialisePlayer() new instance: " + force );
591-
592- activateMediaSession ();
593583 }
594584 if (playerNeedsSource && src .getUrl () != null ) {
595585
@@ -823,47 +813,13 @@ private long getPlayerStartupTime() {
823813 return playerInitTime - playerViewCreationTime ;
824814 }
825815
826- // MediaSession related functions.
827- private void activateMediaSession () {
828- Log .d (TAG , "activateMediaSession()" );
829- mediaSessionConnector .setPlayer (player .getExoPlayer ());
830- mediaSession .setActive (true );
831- mediaSession .setCallback (new MediaSessionCompat .Callback () {
832- @ Override
833- public void onPlay () {
834- super .onPlay ();
835- Log .d (TAG , "MediaSession onPlay()" );
836- setPausedModifier (false );
837- }
838-
839- @ Override
840- public void onPause () {
841- super .onPause ();
842- Log .d (TAG , "MediaSession onPause()" );
843- if (player == null || !isLive || player .getCurrentVideoType () == VideoType .LIVE_WITH_DVR ) {
844- setPausedModifier (true );
845- }
846- }
847- });
848- }
849-
850- private void deactivateMediaSession () {
851- Log .d (TAG , "deactivateMediaSession()" );
852- mediaSessionConnector .setPlayer (null );
853- mediaSession .setActive (false );
854- }
855-
856- private void releaseMediaSession () {
857- mediaSession .release ();
858- }
859-
860816 public void setMediaKeysListener (boolean visible ) {
861- if (!visible ) {
862- deactivateMediaSession ();
817+ if (!visible && player != null ) {
818+ player . deactivateMediaSession ();
863819 }
864820
865- if (visible && !isMediaKeysEnabled ) {
866- activateMediaSession ();
821+ if (visible && !isMediaKeysEnabled && player != null ) {
822+ player . activateMediaSession ();
867823 }
868824
869825 isMediaKeysEnabled = visible ;
@@ -877,8 +833,6 @@ private void handleDrmSessionManagerError(Exception exception) {
877833
878834 private void releasePlayer () {
879835 Log .d (TAG , "releasePlayer()" );
880- deactivateMediaSession ();
881- releaseMediaSession ();
882836 adTagParameters = null ;
883837 isImaDaiStreamLoaded = false ;
884838 isInBackground = false ;
0 commit comments