mirror of
https://github.com/antebudimir/tempus.git
synced 2026-01-01 09:53:33 +00:00
Moved MediaSession connection in fragment
This commit is contained in:
parent
9a2b0356c1
commit
279272a3af
1 changed files with 31 additions and 8 deletions
|
|
@ -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());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue