Moved MediaSession connection in fragment

This commit is contained in:
CappielloAntonio 2021-12-29 19:10:08 +01:00
parent 9a2b0356c1
commit 279272a3af

View file

@ -1,6 +1,7 @@
package com.cappielloantonio.play.ui.fragment; package com.cappielloantonio.play.ui.fragment;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.content.ComponentName;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log; import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
@ -20,7 +21,9 @@ import androidx.lifecycle.ViewModelProvider;
import androidx.media3.common.MediaItem; import androidx.media3.common.MediaItem;
import androidx.media3.common.MediaMetadata; import androidx.media3.common.MediaMetadata;
import androidx.media3.common.Player; import androidx.media3.common.Player;
import androidx.media3.session.MediaBrowser;
import androidx.media3.session.MediaController; import androidx.media3.session.MediaController;
import androidx.media3.session.SessionToken;
import androidx.navigation.fragment.NavHostFragment; import androidx.navigation.fragment.NavHostFragment;
import androidx.recyclerview.widget.ItemTouchHelper; import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
@ -33,10 +36,12 @@ import com.cappielloantonio.play.adapter.PlayerNowPlayingSongAdapter;
import com.cappielloantonio.play.adapter.PlayerSongQueueAdapter; import com.cappielloantonio.play.adapter.PlayerSongQueueAdapter;
import com.cappielloantonio.play.databinding.FragmentPlayerBottomSheetBinding; import com.cappielloantonio.play.databinding.FragmentPlayerBottomSheetBinding;
import com.cappielloantonio.play.glide.CustomGlideRequest; import com.cappielloantonio.play.glide.CustomGlideRequest;
import com.cappielloantonio.play.service.MediaService;
import com.cappielloantonio.play.ui.activity.MainActivity; import com.cappielloantonio.play.ui.activity.MainActivity;
import com.cappielloantonio.play.ui.dialog.RatingDialog; import com.cappielloantonio.play.ui.dialog.RatingDialog;
import com.cappielloantonio.play.util.MappingUtil; import com.cappielloantonio.play.util.MappingUtil;
import com.cappielloantonio.play.viewmodel.PlayerBottomSheetViewModel; import com.cappielloantonio.play.viewmodel.PlayerBottomSheetViewModel;
import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.MoreExecutors; import com.google.common.util.concurrent.MoreExecutors;
import java.util.Collections; import java.util.Collections;
@ -57,6 +62,7 @@ public class PlayerBottomSheetFragment extends Fragment {
private MainActivity activity; private MainActivity activity;
private PlayerBottomSheetViewModel playerBottomSheetViewModel; private PlayerBottomSheetViewModel playerBottomSheetViewModel;
private ListenableFuture<MediaController> mediaControllerListenableFuture;
private PlayerSongQueueAdapter playerSongQueueAdapter; private PlayerSongQueueAdapter playerSongQueueAdapter;
@ -86,15 +92,17 @@ public class PlayerBottomSheetFragment extends Fragment {
} }
@Override @Override
public void onResume() { public void onStart() {
super.onResume(); super.onStart();
initializeMediaController();
bindMediaController(); bindMediaController();
} }
@Override @Override
public void onDestroy() { public void onStop() {
super.onDestroy(); releaseMediaController();
super.onStop();
} }
@Override @Override
@ -118,11 +126,21 @@ public class PlayerBottomSheetFragment extends Fragment {
bind.playerBodyLayout.setProgressUpdateListener((position, bufferedPosition) -> bind.playerHeaderLayout.playerHeaderSeekBar.setProgress((int) (position / 1000), true)); bind.playerBodyLayout.setProgressUpdateListener((position, bufferedPosition) -> bind.playerHeaderLayout.playerHeaderSeekBar.setProgress((int) (position / 1000), true));
} }
@SuppressLint("UnsafeOptInUsageError")
private void initializeMediaController() {
mediaControllerListenableFuture = new MediaController.Builder(requireContext(), new SessionToken(requireContext(), new ComponentName(requireContext(), MediaService.class))).buildAsync();
}
private void releaseMediaController() {
MediaController.releaseFuture(mediaControllerListenableFuture);
}
@SuppressLint("UnsafeOptInUsageError") @SuppressLint("UnsafeOptInUsageError")
private void bindMediaController() { private void bindMediaController() {
activity.mediaControllerListenableFuture.addListener(() -> { mediaControllerListenableFuture.addListener(() -> {
try { try {
MediaController mediaController = activity.mediaControllerListenableFuture.get(); MediaController mediaController = mediaControllerListenableFuture.get();
bind.playerBodyLayout.setPlayer(mediaController); bind.playerBodyLayout.setPlayer(mediaController);
@ -139,7 +157,7 @@ public class PlayerBottomSheetFragment extends Fragment {
setContentDuration(mediaController.getContentDuration()); setContentDuration(mediaController.getContentDuration());
setPlayingState(mediaController.isPlaying()); setPlayingState(mediaController.isPlaying());
setHeaderMediaController(); setHeaderMediaController();
setHeaderNextButtonState(mediaController.hasNextMediaItem()); // setHeaderNextButtonState(mediaController.hasNextMediaItem());
mediaController.addListener(new Player.Listener() { mediaController.addListener(new Player.Listener() {
@Override @Override
@ -155,7 +173,12 @@ public class PlayerBottomSheetFragment extends Fragment {
@Override @Override
public void onMediaItemTransition(@Nullable MediaItem mediaItem, int reason) { public void onMediaItemTransition(@Nullable MediaItem mediaItem, int reason) {
setHeaderNextButtonState(mediaController.hasNextMediaItem()); // setHeaderNextButtonState(mediaController.hasNextMediaItem());
}
@Override
public void onPlaylistMetadataChanged(MediaMetadata mediaMetadata) {
// setHeaderNextButtonState(mediaController.hasNextMediaItem());
} }
}); });
} }