Get correct stream uri for downloaded content

This commit is contained in:
CappielloAntonio 2022-01-02 11:54:34 +01:00
parent f416bfda8f
commit 827dd7d2ae
3 changed files with 59 additions and 19 deletions

View file

@ -1,5 +1,7 @@
package com.cappielloantonio.play.ui.fragment; package com.cappielloantonio.play.ui.fragment;
import android.annotation.SuppressLint;
import android.content.ComponentName;
import android.os.Bundle; import android.os.Bundle;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.Menu; import android.view.Menu;
@ -13,6 +15,8 @@ import androidx.annotation.Nullable;
import androidx.core.view.ViewCompat; import androidx.core.view.ViewCompat;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelProvider;
import androidx.media3.session.MediaBrowser;
import androidx.media3.session.SessionToken;
import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.PagerSnapHelper; import androidx.recyclerview.widget.PagerSnapHelper;
import androidx.recyclerview.widget.SnapHelper; import androidx.recyclerview.widget.SnapHelper;
@ -29,9 +33,11 @@ import com.cappielloantonio.play.model.Album;
import com.cappielloantonio.play.model.Artist; import com.cappielloantonio.play.model.Artist;
import com.cappielloantonio.play.model.Playlist; import com.cappielloantonio.play.model.Playlist;
import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.model.Song;
import com.cappielloantonio.play.service.MediaService;
import com.cappielloantonio.play.ui.activity.MainActivity; import com.cappielloantonio.play.ui.activity.MainActivity;
import com.cappielloantonio.play.util.UIUtil; import com.cappielloantonio.play.util.UIUtil;
import com.cappielloantonio.play.viewmodel.DownloadViewModel; import com.cappielloantonio.play.viewmodel.DownloadViewModel;
import com.google.common.util.concurrent.ListenableFuture;
import java.util.Objects; import java.util.Objects;
@ -47,6 +53,8 @@ public class DownloadFragment extends Fragment {
private SongHorizontalAdapter downloadedTrackAdapter; private SongHorizontalAdapter downloadedTrackAdapter;
private PlaylistAdapter playlistAdapter; private PlaylistAdapter playlistAdapter;
private ListenableFuture<MediaBrowser> mediaBrowserListenableFuture;
@Override @Override
public void onCreate(@Nullable Bundle savedInstanceState) { public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@ -88,10 +96,25 @@ public class DownloadFragment extends Fragment {
@Override @Override
public void onStart() { public void onStart() {
super.onStart(); super.onStart();
initializeMediaBrowser();
activity.setBottomNavigationBarVisibility(true); activity.setBottomNavigationBarVisibility(true);
activity.setBottomSheetVisibility(true); activity.setBottomSheetVisibility(true);
} }
@Override
public void onResume() {
super.onResume();
setMediaBrowserListenableFuture();
}
@Override
public void onStop() {
releaseMediaBrowser();
super.onStop();
}
@Override @Override
public void onDestroyView() { public void onDestroyView() {
super.onDestroyView(); super.onDestroyView();
@ -285,4 +308,17 @@ public class DownloadFragment extends Fragment {
} }
}); });
} }
@SuppressLint("UnsafeOptInUsageError")
private void initializeMediaBrowser() {
mediaBrowserListenableFuture = new MediaBrowser.Builder(requireContext(), new SessionToken(requireContext(), new ComponentName(requireContext(), MediaService.class))).buildAsync();
}
private void releaseMediaBrowser() {
MediaBrowser.releaseFuture(mediaBrowserListenableFuture);
}
private void setMediaBrowserListenableFuture() {
downloadedTrackAdapter.setMediaBrowserListenableFuture(mediaBrowserListenableFuture);
}
} }

View file

@ -153,16 +153,6 @@ public class HomeFragment extends Fragment {
return false; return false;
} }
@SuppressLint("UnsafeOptInUsageError")
private void initializeMediaBrowser() {
mediaBrowserListenableFuture = new MediaBrowser.Builder(requireContext(), new SessionToken(requireContext(), new ComponentName(requireContext(), MediaService.class))).buildAsync();
}
private void releaseMediaBrowser() {
MediaBrowser.releaseFuture(mediaBrowserListenableFuture);
}
private void init() { private void init() {
bind.recentlyAddedAlbumsTextViewClickable.setOnClickListener(v -> { bind.recentlyAddedAlbumsTextViewClickable.setOnClickListener(v -> {
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
@ -246,12 +236,6 @@ public class HomeFragment extends Fragment {
Objects.requireNonNull(bind.toolbar.getOverflowIcon()).setTint(requireContext().getResources().getColor(R.color.titleTextColor, null)); Objects.requireNonNull(bind.toolbar.getOverflowIcon()).setTint(requireContext().getResources().getColor(R.color.titleTextColor, null));
} }
private void setMediaBrowserListenableFuture() {
discoverSongAdapter.setMediaBrowserListenableFuture(mediaBrowserListenableFuture);
similarMusicAdapter.setMediaBrowserListenableFuture(mediaBrowserListenableFuture);
starredSongAdapter.setMediaBrowserListenableFuture(mediaBrowserListenableFuture);
}
private void initDiscoverSongSlideView() { private void initDiscoverSongSlideView() {
bind.discoverSongViewPager.setOrientation(ViewPager2.ORIENTATION_HORIZONTAL); bind.discoverSongViewPager.setOrientation(ViewPager2.ORIENTATION_HORIZONTAL);
@ -541,6 +525,7 @@ public class HomeFragment extends Fragment {
genericPlaylistRecyclerView.setHasFixedSize(true); genericPlaylistRecyclerView.setHasFixedSize(true);
SongHorizontalAdapter trackAdapter = new SongHorizontalAdapter(activity, requireContext(), true); SongHorizontalAdapter trackAdapter = new SongHorizontalAdapter(activity, requireContext(), true);
trackAdapter.setMediaBrowserListenableFuture(mediaBrowserListenableFuture);
genericPlaylistRecyclerView.setAdapter(trackAdapter); genericPlaylistRecyclerView.setAdapter(trackAdapter);
homeViewModel.getPlaylistSongLiveList(playlist.getId()).observe(requireActivity(), songs -> { homeViewModel.getPlaylistSongLiveList(playlist.getId()).observe(requireActivity(), songs -> {
@ -578,4 +563,19 @@ public class HomeFragment extends Fragment {
} }
}); });
} }
@SuppressLint("UnsafeOptInUsageError")
private void initializeMediaBrowser() {
mediaBrowserListenableFuture = new MediaBrowser.Builder(requireContext(), new SessionToken(requireContext(), new ComponentName(requireContext(), MediaService.class))).buildAsync();
}
private void releaseMediaBrowser() {
MediaBrowser.releaseFuture(mediaBrowserListenableFuture);
}
private void setMediaBrowserListenableFuture() {
discoverSongAdapter.setMediaBrowserListenableFuture(mediaBrowserListenableFuture);
similarMusicAdapter.setMediaBrowserListenableFuture(mediaBrowserListenableFuture);
starredSongAdapter.setMediaBrowserListenableFuture(mediaBrowserListenableFuture);
}
} }

View file

@ -33,9 +33,13 @@ public class MusicUtil {
"&t=" + params.get("t") + "&t=" + params.get("t") +
"&v=" + params.get("v") + "&v=" + params.get("v") +
"&c=" + params.get("c") + "&c=" + params.get("c") +
"&id=" + song.getId() + "&id=" + song.getId();
"&maxBitRate=" + getBitratePreference(context, connectivityManager.getActiveNetworkInfo().getType()) +
"&format=" + getTranscodingFormatPreference(context, connectivityManager.getActiveNetworkInfo().getType()); if(connectivityManager.getActiveNetworkInfo() != null) {
uri = uri + "&maxBitRate="
+ getBitratePreference(context, connectivityManager.getActiveNetworkInfo().getType()) + "&format="
+ getTranscodingFormatPreference(context, connectivityManager.getActiveNetworkInfo().getType());
}
Log.d(TAG, "getSongStreamUri(): " + uri); Log.d(TAG, "getSongStreamUri(): " + uri);