From f416bfda8fba508fbf4628f6be2b76b9c8307849 Mon Sep 17 00:00:00 2001 From: CappielloAntonio Date: Sun, 2 Jan 2022 11:30:16 +0100 Subject: [PATCH] Save in the database what has been downloaded --- .../play/service/DownloaderTracker.java | 35 ++++++++++++++----- .../play/ui/dialog/StarredSyncDialog.java | 5 ++- .../play/ui/fragment/AlbumPageFragment.java | 5 ++- .../ui/fragment/PlaylistPageFragment.java | 3 +- .../AlbumBottomSheetDialog.java | 6 ++-- .../SongBottomSheetDialog.java | 10 ++++-- .../play/util/MappingUtil.java | 4 +-- .../viewmodel/PlayerBottomSheetViewModel.java | 5 ++- .../viewmodel/SongBottomSheetViewModel.java | 5 ++- 9 files changed, 59 insertions(+), 19 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 82a32d61..e04b2fce 100644 --- a/app/src/main/java/com/cappielloantonio/play/service/DownloaderTracker.java +++ b/app/src/main/java/com/cappielloantonio/play/service/DownloaderTracker.java @@ -18,6 +18,11 @@ import androidx.media3.exoplayer.offline.DownloadManager; import androidx.media3.exoplayer.offline.DownloadRequest; import androidx.media3.exoplayer.offline.DownloadService; +import com.cappielloantonio.play.App; +import com.cappielloantonio.play.repository.DownloadRepository; +import com.cappielloantonio.play.repository.QueueRepository; +import com.cappielloantonio.play.util.MappingUtil; + import java.io.IOException; import java.util.HashMap; import java.util.List; @@ -81,24 +86,26 @@ public class DownloaderTracker { } @SuppressLint("UnsafeOptInUsageError") - public void download(MediaItem mediaItem) { + public void download(MediaItem mediaItem, com.cappielloantonio.play.model.Download download) { DownloadService.sendAddDownload(context, DownloaderService.class, buildDownloadRequest(mediaItem), false); + downloadDatabase(download); } - public void download(List mediaItems) { - for (MediaItem mediaItem : mediaItems) { - download(mediaItem); + public void download(List mediaItems, List downloads) { + for (int counter = 0; counter < mediaItems.size(); counter++) { + download(mediaItems.get(counter), downloads.get(counter)); } } @SuppressLint("UnsafeOptInUsageError") - public void remove(MediaItem mediaItem) { + public void remove(MediaItem mediaItem, com.cappielloantonio.play.model.Download download) { DownloadService.sendRemoveDownload(context, DownloaderService.class, buildDownloadRequest(mediaItem).id, false); + removeDatabase(download); } - public void remove(List mediaItems) { - for (MediaItem mediaItem : mediaItems) { - remove(mediaItem); + public void remove(List mediaItems, List downloads) { + for (int counter = 0; counter < mediaItems.size(); counter++) { + remove(mediaItems.get(counter), downloads.get(counter)); } } @@ -131,4 +138,16 @@ public class DownloaderTracker { } } } + + private static DownloadRepository getDownloadRepository() { + return new DownloadRepository(App.getInstance()); + } + + private static void downloadDatabase(com.cappielloantonio.play.model.Download download) { + getDownloadRepository().insert(download); + } + + private static void removeDatabase(com.cappielloantonio.play.model.Download download) { + getDownloadRepository().delete(download); + } } 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 845130de..06c2f0a7 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 @@ -63,7 +63,10 @@ public class StarredSyncDialog extends DialogFragment { ((AlertDialog) Objects.requireNonNull(getDialog())).getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(v -> { starredSyncViewModel.getStarredTracks(requireActivity()).observe(requireActivity(), songs -> { if (songs != null) { - DownloadUtil.getDownloadTracker(context).download(MappingUtil.mapMediaItems(context, songs, false)); + DownloadUtil.getDownloadTracker(context).download( + MappingUtil.mapMediaItems(context, songs, false), + MappingUtil.mapDownload(songs) + ); } }); 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 5265fa91..f492e6e0 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 @@ -108,7 +108,10 @@ public class AlbumPageFragment extends Fragment { if (item.getItemId() == R.id.action_download_album) { albumPageViewModel.getAlbumSongLiveList(requireActivity()).observe(requireActivity(), songs -> { if (isVisible() && getActivity() != null) { - DownloadUtil.getDownloadTracker(requireContext()).download(MappingUtil.mapMediaItems(requireContext(), songs, false)); + DownloadUtil.getDownloadTracker(requireContext()).download( + MappingUtil.mapMediaItems(requireContext(), songs, false), + MappingUtil.mapDownload(songs) + ); } }); return true; 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 daf2dbc5..59b1ff90 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 @@ -111,7 +111,8 @@ public class PlaylistPageFragment extends Fragment { MappingUtil.mapMediaItems(requireContext(), songs, false), playlistPageViewModel.getPlaylist().getId(), playlistPageViewModel.getPlaylist().getName() - ) + ), + MappingUtil.mapDownload(songs) ); } }); 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 eebeb16a..22fd8e8c 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 @@ -25,6 +25,7 @@ import com.cappielloantonio.play.R; import com.cappielloantonio.play.glide.CustomGlideRequest; import com.cappielloantonio.play.interfaces.MediaCallback; import com.cappielloantonio.play.model.Album; +import com.cappielloantonio.play.model.Download; import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.repository.AlbumRepository; import com.cappielloantonio.play.service.MediaManager; @@ -157,15 +158,16 @@ public class AlbumBottomSheetDialog extends BottomSheetDialogFragment implements albumBottomSheetViewModel.getAlbumTracks().observe(requireActivity(), songs -> { List mediaItems = MappingUtil.mapMediaItems(requireContext(), songs, false); + List downloads = MappingUtil.mapDownload(songs); downloadAll.setOnClickListener(v -> { - DownloadUtil.getDownloadTracker(requireContext()).download(mediaItems); + DownloadUtil.getDownloadTracker(requireContext()).download(mediaItems, downloads); dismissBottomSheet(); }); if (DownloadUtil.getDownloadTracker(requireContext()).areDownloaded(mediaItems)) { removeAll.setOnClickListener(v -> { - DownloadUtil.getDownloadTracker(requireContext()).remove(mediaItems); + DownloadUtil.getDownloadTracker(requireContext()).remove(mediaItems, downloads); dismissBottomSheet(); }); } else { diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/SongBottomSheetDialog.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/SongBottomSheetDialog.java index 5458ecff..aa34cb69 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/SongBottomSheetDialog.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/bottomsheetdialog/SongBottomSheetDialog.java @@ -157,13 +157,19 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements TextView download = view.findViewById(R.id.download_text_view); download.setOnClickListener(v -> { - DownloadUtil.getDownloadTracker(requireContext()).download(MappingUtil.mapMediaItem(requireContext(), song, false)); + DownloadUtil.getDownloadTracker(requireContext()).download( + MappingUtil.mapMediaItem(requireContext(), song, false), + MappingUtil.mapDownload(song, null, null) + ); dismissBottomSheet(); }); TextView remove = view.findViewById(R.id.remove_text_view); remove.setOnClickListener(v -> { - DownloadUtil.getDownloadTracker(requireContext()).remove(MappingUtil.mapMediaItem(requireContext(), song, false)); + DownloadUtil.getDownloadTracker(requireContext()).remove( + MappingUtil.mapMediaItem(requireContext(), song, false), + MappingUtil.mapDownload(song, null, null) + ); dismissBottomSheet(); }); 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 2f5a8303..4f45a8f3 100644 --- a/app/src/main/java/com/cappielloantonio/play/util/MappingUtil.java +++ b/app/src/main/java/com/cappielloantonio/play/util/MappingUtil.java @@ -173,7 +173,7 @@ public class MappingUtil { return playlists; } - public static ArrayList mapToDownload(List songs) { + public static ArrayList mapDownload(List songs) { ArrayList downloads = new ArrayList(); for (Song song : songs) { @@ -183,7 +183,7 @@ public class MappingUtil { return downloads; } - public static Download mapToDownload(Song song, String playlistId, String playlistName) { + public static Download mapDownload(Song song, String playlistId, String playlistName) { return new Download(song, playlistId, playlistName); } diff --git a/app/src/main/java/com/cappielloantonio/play/viewmodel/PlayerBottomSheetViewModel.java b/app/src/main/java/com/cappielloantonio/play/viewmodel/PlayerBottomSheetViewModel.java index 658330fd..97e0b721 100644 --- a/app/src/main/java/com/cappielloantonio/play/viewmodel/PlayerBottomSheetViewModel.java +++ b/app/src/main/java/com/cappielloantonio/play/viewmodel/PlayerBottomSheetViewModel.java @@ -57,7 +57,10 @@ public class PlayerBottomSheetViewModel extends AndroidViewModel { song.setFavorite(true); if (PreferenceUtil.getInstance(context).isStarredSyncEnabled()) { - DownloadUtil.getDownloadTracker(context).download(MappingUtil.mapMediaItem(context, song, false)); + DownloadUtil.getDownloadTracker(context).download( + MappingUtil.mapMediaItem(context, song, false), + MappingUtil.mapDownload(song, null, null) + ); } } } diff --git a/app/src/main/java/com/cappielloantonio/play/viewmodel/SongBottomSheetViewModel.java b/app/src/main/java/com/cappielloantonio/play/viewmodel/SongBottomSheetViewModel.java index 81739d25..6355a864 100644 --- a/app/src/main/java/com/cappielloantonio/play/viewmodel/SongBottomSheetViewModel.java +++ b/app/src/main/java/com/cappielloantonio/play/viewmodel/SongBottomSheetViewModel.java @@ -49,7 +49,10 @@ public class SongBottomSheetViewModel extends AndroidViewModel { song.setFavorite(true); if (PreferenceUtil.getInstance(context).isStarredSyncEnabled()) { - DownloadUtil.getDownloadTracker(context).download(MappingUtil.mapMediaItem(context, song, false)); + DownloadUtil.getDownloadTracker(context).download( + MappingUtil.mapMediaItem(context, song, false), + MappingUtil.mapDownload(song, null, null) + ); } } }