From d2ad0188b77fc5e7c8354889f146a8e31389da1a Mon Sep 17 00:00:00 2001 From: CappielloAntonio Date: Sun, 2 Jan 2022 15:50:59 +0100 Subject: [PATCH] Saved in database downloaded playlists --- .../play/service/DownloaderTracker.java | 5 ++++ .../play/ui/dialog/StarredSyncDialog.java | 2 +- .../play/ui/fragment/AlbumPageFragment.java | 2 +- .../ui/fragment/PlaylistPageFragment.java | 8 ++--- .../AlbumBottomSheetDialog.java | 2 +- .../play/util/MappingUtil.java | 29 ++++--------------- 6 files changed, 16 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/com/cappielloantonio/play/service/DownloaderTracker.java b/app/src/main/java/com/cappielloantonio/play/service/DownloaderTracker.java index e04b2fce..3b599929 100644 --- a/app/src/main/java/com/cappielloantonio/play/service/DownloaderTracker.java +++ b/app/src/main/java/com/cappielloantonio/play/service/DownloaderTracker.java @@ -67,6 +67,11 @@ public class DownloaderTracker { return DownloadHelper.forMediaItem(context, mediaItem).getDownloadRequest(Util.getUtf8Bytes(checkNotNull(mediaItem.mediaId))); } + public boolean isDownloaded(Uri uri) { + @Nullable Download download = downloads.get(uri); + return download != null && download.state != Download.STATE_FAILED; + } + @SuppressLint("UnsafeOptInUsageError") public boolean isDownloaded(MediaItem mediaItem) { @Nullable Download download = downloads.get(checkNotNull(mediaItem.localConfiguration).uri); diff --git a/app/src/main/java/com/cappielloantonio/play/ui/dialog/StarredSyncDialog.java b/app/src/main/java/com/cappielloantonio/play/ui/dialog/StarredSyncDialog.java index 06c2f0a7..bfa1fa45 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/dialog/StarredSyncDialog.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/dialog/StarredSyncDialog.java @@ -65,7 +65,7 @@ public class StarredSyncDialog extends DialogFragment { if (songs != null) { DownloadUtil.getDownloadTracker(context).download( MappingUtil.mapMediaItems(context, songs, false), - MappingUtil.mapDownload(songs) + MappingUtil.mapDownload(songs, null, null) ); } }); diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/AlbumPageFragment.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/AlbumPageFragment.java index f492e6e0..5c38b172 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/AlbumPageFragment.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/AlbumPageFragment.java @@ -110,7 +110,7 @@ public class AlbumPageFragment extends Fragment { if (isVisible() && getActivity() != null) { DownloadUtil.getDownloadTracker(requireContext()).download( MappingUtil.mapMediaItems(requireContext(), songs, false), - MappingUtil.mapDownload(songs) + MappingUtil.mapDownload(songs, null, null) ); } }); diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlaylistPageFragment.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlaylistPageFragment.java index 59b1ff90..7f9de52d 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlaylistPageFragment.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlaylistPageFragment.java @@ -107,12 +107,8 @@ public class PlaylistPageFragment extends Fragment { playlistPageViewModel.getPlaylistSongLiveList(requireActivity()).observe(requireActivity(), songs -> { if (isVisible() && getActivity() != null) { DownloadUtil.getDownloadTracker(requireContext()).download( - MappingUtil.markPlaylistMediaItems( - MappingUtil.mapMediaItems(requireContext(), songs, false), - playlistPageViewModel.getPlaylist().getId(), - playlistPageViewModel.getPlaylist().getName() - ), - MappingUtil.mapDownload(songs) + MappingUtil.mapMediaItems(requireContext(), songs, false), + MappingUtil.mapDownload(songs, playlistPageViewModel.getPlaylist().getId(), playlistPageViewModel.getPlaylist().getName()) ); } }); diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/AlbumBottomSheetDialog.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/AlbumBottomSheetDialog.java index 22fd8e8c..6c9811b3 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/AlbumBottomSheetDialog.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/AlbumBottomSheetDialog.java @@ -158,7 +158,7 @@ public class AlbumBottomSheetDialog extends BottomSheetDialogFragment implements albumBottomSheetViewModel.getAlbumTracks().observe(requireActivity(), songs -> { List mediaItems = MappingUtil.mapMediaItems(requireContext(), songs, false); - List downloads = MappingUtil.mapDownload(songs); + List downloads = MappingUtil.mapDownload(songs, null, null); downloadAll.setOnClickListener(v -> { DownloadUtil.getDownloadTracker(requireContext()).download(mediaItems, downloads); diff --git a/app/src/main/java/com/cappielloantonio/play/util/MappingUtil.java b/app/src/main/java/com/cappielloantonio/play/util/MappingUtil.java index 4f45a8f3..e7837353 100644 --- a/app/src/main/java/com/cappielloantonio/play/util/MappingUtil.java +++ b/app/src/main/java/com/cappielloantonio/play/util/MappingUtil.java @@ -173,11 +173,11 @@ public class MappingUtil { return playlists; } - public static ArrayList mapDownload(List songs) { + public static ArrayList mapDownload(List songs, String playlistId, String playlistName) { ArrayList downloads = new ArrayList(); for (Song song : songs) { - downloads.add(new Download(song, null, null)); + downloads.add(new Download(song, playlistId, playlistName)); } return downloads; @@ -198,6 +198,8 @@ public class MappingUtil { } public static MediaItem mapMediaItem(Context context, Song song, boolean stream) { + boolean isDownloaded = DownloadUtil.getDownloadTracker(context).isDownloaded(MusicUtil.getSongDownloadUri(song)); + Bundle bundle = new Bundle(); bundle.putString("id", song.getId()); bundle.putString("albumId", song.getAlbumId()); @@ -207,7 +209,7 @@ public class MappingUtil { .setMediaId(song.getId()) .setMediaMetadata( new MediaMetadata.Builder() - .setMediaUri(stream ? MusicUtil.getSongStreamUri(context, song) : MusicUtil.getSongDownloadUri(song)) + .setMediaUri(stream && !isDownloaded ? MusicUtil.getSongStreamUri(context, song) : MusicUtil.getSongDownloadUri(song)) .setTitle(MusicUtil.getReadableString(song.getTitle())) .setTrackNumber(song.getTrackNumber()) .setDiscNumber(song.getDiscNumber()) @@ -217,7 +219,7 @@ public class MappingUtil { .setExtras(bundle) .build() ) - .setUri(stream ? MusicUtil.getSongStreamUri(context, song) : MusicUtil.getSongDownloadUri(song)) + .setUri(stream && !isDownloaded ? MusicUtil.getSongStreamUri(context, song) : MusicUtil.getSongDownloadUri(song)) .build(); } @@ -230,23 +232,4 @@ public class MappingUtil { return mediaItems; } - - public static ArrayList markPlaylistMediaItems(ArrayList mediaItems, String playlistId, String playlistName) { - ArrayList toReturn = new ArrayList(); - - for(MediaItem mediaItem: mediaItems) { - toReturn.add(markPlaylistMediaItem(mediaItem, playlistId, playlistName)); - } - - return toReturn; - } - - private static MediaItem markPlaylistMediaItem(MediaItem mediaItem, String playlistId, String playlistName) { - if (mediaItem.mediaMetadata.extras != null) { - mediaItem.mediaMetadata.extras.putString("playlistId", playlistId); - mediaItem.mediaMetadata.extras.putString("playlistName", playlistName); - } - - return mediaItem; - } }