Moved MediaSession connection in fragment

This commit is contained in:
CappielloAntonio 2021-12-29 19:09:46 +01:00
parent ed3f0cfaa3
commit 9a2b0356c1

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;
@ -12,13 +13,15 @@ import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelProvider;
import androidx.media3.common.MediaMetadata; import androidx.media3.common.MediaMetadata;
import androidx.media3.common.Player; import androidx.media3.common.Player;
import androidx.media3.session.MediaController; import androidx.media3.session.MediaBrowser;
import androidx.media3.session.SessionToken;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners; import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.cappielloantonio.play.databinding.FragmentPlayerCoverBinding; import com.cappielloantonio.play.databinding.FragmentPlayerCoverBinding;
import com.cappielloantonio.play.glide.CustomGlideRequest; import com.cappielloantonio.play.glide.CustomGlideRequest;
import com.cappielloantonio.play.ui.activity.MainActivity; import com.cappielloantonio.play.service.MediaService;
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;
public class PlayerCoverFragment extends Fragment { public class PlayerCoverFragment extends Fragment {
@ -27,12 +30,10 @@ public class PlayerCoverFragment extends Fragment {
private FragmentPlayerCoverBinding bind; private FragmentPlayerCoverBinding bind;
private PlayerBottomSheetViewModel playerBottomSheetViewModel; private PlayerBottomSheetViewModel playerBottomSheetViewModel;
private MainActivity activity; private ListenableFuture<MediaBrowser> mediaBrowserListenableFuture;
@Override @Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
activity = (MainActivity) requireActivity();
bind = FragmentPlayerCoverBinding.inflate(inflater, container, false); bind = FragmentPlayerCoverBinding.inflate(inflater, container, false);
View view = bind.getRoot(); View view = bind.getRoot();
@ -42,24 +43,39 @@ public class PlayerCoverFragment extends Fragment {
} }
@Override @Override
public void onResume() { public void onStart() {
super.onResume(); super.onStart();
initializeBrowser();
bindMediaController(); bindMediaController();
} }
@Override
public void onStop() {
releaseBrowser();
super.onStop();
}
@Override @Override
public void onDestroyView() { public void onDestroyView() {
super.onDestroyView(); super.onDestroyView();
bind = null; bind = null;
} }
private void bindMediaController() { @SuppressLint("UnsafeOptInUsageError")
activity.mediaControllerListenableFuture.addListener(() -> { private void initializeBrowser() {
try { mediaBrowserListenableFuture = new MediaBrowser.Builder(requireContext(), new SessionToken(requireContext(), new ComponentName(requireContext(), MediaService.class))).buildAsync();
MediaController mediaController = activity.mediaControllerListenableFuture.get(); }
setMediaControllerListener(mediaController); private void releaseBrowser() {
MediaBrowser.releaseFuture(mediaBrowserListenableFuture);
}
private void bindMediaController() {
mediaBrowserListenableFuture.addListener(() -> {
try {
MediaBrowser mediaBrowseri = mediaBrowserListenableFuture.get();
setMediaBrowserListener(mediaBrowseri);
} catch (Exception e) { } catch (Exception e) {
Log.e(TAG, e.getMessage()); Log.e(TAG, e.getMessage());
} }
@ -67,10 +83,10 @@ public class PlayerCoverFragment extends Fragment {
} }
@SuppressLint("UnsafeOptInUsageError") @SuppressLint("UnsafeOptInUsageError")
private void setMediaControllerListener(MediaController mediaController) { private void setMediaBrowserListener(MediaBrowser mediaBrowser) {
setCover(mediaController.getMediaMetadata()); setCover(mediaBrowser.getMediaMetadata());
mediaController.addListener(new Player.Listener() { mediaBrowser.addListener(new Player.Listener() {
@Override @Override
public void onMediaMetadataChanged(@NonNull MediaMetadata mediaMetadata) { public void onMediaMetadataChanged(@NonNull MediaMetadata mediaMetadata) {
setCover(mediaMetadata); setCover(mediaMetadata);