From b3e3f95c8de6010d196408f174fe9ae7a45b95b6 Mon Sep 17 00:00:00 2001 From: CappielloAntonio Date: Thu, 2 Sep 2021 15:05:28 +0200 Subject: [PATCH] Edit the download function to distinguish the downloads already performed from those still to be performed --- .../play/service/DownloadTracker.java | 33 ++++++++-- .../play/ui/fragment/AlbumPageFragment.java | 2 +- .../ui/fragment/PlaylistPageFragment.java | 8 +-- .../AlbumBottomSheetDialog.java | 64 ++++++++++--------- .../SongBottomSheetDialog.java | 19 ++++-- .../res/layout/bottom_sheet_album_dialog.xml | 20 +++++- .../res/layout/bottom_sheet_song_dialog.xml | 16 +++++ 7 files changed, 114 insertions(+), 48 deletions(-) diff --git a/app/src/main/java/com/cappielloantonio/play/service/DownloadTracker.java b/app/src/main/java/com/cappielloantonio/play/service/DownloadTracker.java index bafbaeab..b39d5c68 100644 --- a/app/src/main/java/com/cappielloantonio/play/service/DownloadTracker.java +++ b/app/src/main/java/com/cappielloantonio/play/service/DownloadTracker.java @@ -7,6 +7,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.cappielloantonio.play.App; +import com.cappielloantonio.play.model.Album; import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.repository.DownloadRepository; import com.cappielloantonio.play.util.MappingUtil; @@ -68,12 +69,39 @@ public class DownloadTracker { return download != null && download.state != Download.STATE_FAILED; } + public boolean isDownloaded(List songs) { + for (Song song : songs) { + MediaItem mediaItem = MusicUtil.getMediaItemFromSong(song); + @Nullable Download download = downloads.get(checkNotNull(mediaItem.playbackProperties).uri); + + if(download != null && download.state != Download.STATE_FAILED) { + return true; + } + } + + return false; + } + @Nullable public DownloadRequest getDownloadRequest(String id, Uri uri) { return new DownloadRequest.Builder(id, uri).build(); } - public void toggleDownload(List songs) { + public void download(List songs) { + DownloadRepository downloadRepository = new DownloadRepository(App.getInstance()); + + for (Song song : songs) { + if(isDownloaded(song)) { + continue; + } + + MediaItem mediaItem = MusicUtil.getMediaItemFromSong(song); + DownloadService.sendAddDownload(context, DownloaderService.class, getDownloadRequest(song.getId(), checkNotNull(mediaItem.playbackProperties).uri), false); + downloadRepository.insert(MappingUtil.mapToDownload(song)); + } + } + + public void remove(List songs) { DownloadRepository downloadRepository = new DownloadRepository(App.getInstance()); for (Song song : songs) { @@ -84,9 +112,6 @@ public class DownloadTracker { if (download != null && download.state != Download.STATE_FAILED) { DownloadService.sendRemoveDownload(context, DownloaderService.class, download.request.id, false); downloadRepository.delete(MappingUtil.mapToDownload(song)); - } else { - DownloadService.sendAddDownload(context, DownloaderService.class, getDownloadRequest(song.getId(), mediaItem.playbackProperties.uri), false); - downloadRepository.insert(MappingUtil.mapToDownload(song)); } } } 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 26b74a7b..16773cd0 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 @@ -94,7 +94,7 @@ public class AlbumPageFragment extends Fragment { switch (item.getItemId()) { case R.id.action_download_album: albumPageViewModel.getAlbumSongLiveList(requireActivity()).observe(requireActivity(), songs -> { - DownloadUtil.getDownloadTracker(requireContext()).toggleDownload(songs); + DownloadUtil.getDownloadTracker(requireContext()).download(songs); }); return true; default: 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 7a904f2b..fb82f347 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 @@ -1,6 +1,5 @@ package com.cappielloantonio.play.ui.fragment; -import android.graphics.PorterDuff; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; @@ -11,7 +10,6 @@ import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.core.view.ViewCompat; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; @@ -85,7 +83,7 @@ public class PlaylistPageFragment extends Fragment { public boolean onOptionsItemSelected(@NonNull MenuItem item) { switch (item.getItemId()) { case R.id.action_download_playlist: - DownloadUtil.getDownloadTracker(requireContext()).toggleDownload(playlistPageViewModel.getPlaylistSongLiveList().getValue()); + DownloadUtil.getDownloadTracker(requireContext()).download(Objects.requireNonNull(playlistPageViewModel.getPlaylistSongLiveList().getValue())); return true; default: break; @@ -160,8 +158,6 @@ public class PlaylistPageFragment extends Fragment { songHorizontalAdapter = new SongHorizontalAdapter(activity, requireContext(), true); bind.songRecyclerView.setAdapter(songHorizontalAdapter); - playlistPageViewModel.getPlaylistSongLiveList().observe(requireActivity(), songs -> { - songHorizontalAdapter.setItems(songs); - }); + playlistPageViewModel.getPlaylistSongLiveList().observe(requireActivity(), songs -> songHorizontalAdapter.setItems(songs)); } } \ No newline at end of file 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 25327fc5..95f0b5a8 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 @@ -1,7 +1,6 @@ package com.cappielloantonio.play.ui.fragment.bottomsheetdialog; import android.os.Bundle; -import android.text.Html; import android.util.Log; import android.view.LayoutInflater; import android.view.View; @@ -26,7 +25,6 @@ import com.cappielloantonio.play.repository.AlbumRepository; import com.cappielloantonio.play.repository.QueueRepository; import com.cappielloantonio.play.service.MusicPlayerRemote; import com.cappielloantonio.play.ui.activity.MainActivity; -import com.cappielloantonio.play.ui.fragment.dialog.RatingDialog; import com.cappielloantonio.play.util.DownloadUtil; import com.cappielloantonio.play.util.MusicUtil; import com.cappielloantonio.play.viewmodel.AlbumBottomSheetViewModel; @@ -126,43 +124,49 @@ public class AlbumBottomSheetDialog extends BottomSheetDialogFragment implements }); TextView playNext = view.findViewById(R.id.play_next_text_view); - playNext.setOnClickListener(v -> { - albumBottomSheetViewModel.getAlbumTracks().observe(requireActivity(), songs -> { - MusicPlayerRemote.playNext(songs); - ((MainActivity) requireActivity()).isBottomSheetInPeek(true); - dismissBottomSheet(); - }); - }); + playNext.setOnClickListener(v -> albumBottomSheetViewModel.getAlbumTracks().observe(requireActivity(), songs -> { + MusicPlayerRemote.playNext(songs); + ((MainActivity) requireActivity()).isBottomSheetInPeek(true); + dismissBottomSheet(); + })); TextView addToQueue = view.findViewById(R.id.add_to_queue_text_view); - addToQueue.setOnClickListener(v -> { - albumBottomSheetViewModel.getAlbumTracks().observe(requireActivity(), songs -> { - MusicPlayerRemote.enqueue(songs); - dismissBottomSheet(); - }); - }); + addToQueue.setOnClickListener(v -> albumBottomSheetViewModel.getAlbumTracks().observe(requireActivity(), songs -> { + MusicPlayerRemote.enqueue(songs); + dismissBottomSheet(); + })); - TextView download = view.findViewById(R.id.download_text_view); - download.setOnClickListener(v -> { - albumBottomSheetViewModel.getAlbumTracks().observe(requireActivity(), songs -> { - DownloadUtil.getDownloadTracker(requireContext()).toggleDownload(songs); + TextView downloadAll = view.findViewById(R.id.download_all_text_view); + TextView removeAll = view.findViewById(R.id.remove_all_text_view); + + albumBottomSheetViewModel.getAlbumTracks().observe(requireActivity(), songs -> { + + downloadAll.setOnClickListener(v -> { + DownloadUtil.getDownloadTracker(requireContext()).download(songs); dismissBottomSheet(); }); + + if (DownloadUtil.getDownloadTracker(requireContext()).isDownloaded(songs)) { + removeAll.setOnClickListener(v -> { + DownloadUtil.getDownloadTracker(requireContext()).remove(songs); + dismissBottomSheet(); + }); + } else { + removeAll.setVisibility(View.GONE); + } }); TextView goToArtist = view.findViewById(R.id.go_to_artist_text_view); - goToArtist.setOnClickListener(v -> { - albumBottomSheetViewModel.getArtist().observe(requireActivity(), artist -> { - if (artist != null) { - Bundle bundle = new Bundle(); - bundle.putParcelable("artist_object", artist); - NavHostFragment.findNavController(this).navigate(R.id.artistPageFragment, bundle); - } else - Toast.makeText(requireContext(), "Error retrieving artist", Toast.LENGTH_SHORT).show(); + goToArtist.setOnClickListener(v -> albumBottomSheetViewModel.getArtist().observe(requireActivity(), artist -> { + if (artist != null) { + Bundle bundle = new Bundle(); + bundle.putParcelable("artist_object", artist); + NavHostFragment.findNavController(this).navigate(R.id.artistPageFragment, bundle); + } else + Toast.makeText(requireContext(), "Error retrieving artist", Toast.LENGTH_SHORT).show(); - dismissBottomSheet(); - }); - }); + dismissBottomSheet(); + })); } @Override 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 96341e6b..36c0cefa 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 @@ -54,7 +54,6 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements songBottomSheetViewModel.setSong(song); init(view); - initDownloadedUI(view.findViewById(R.id.download_text_view)); return view; } @@ -149,10 +148,18 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements TextView download = view.findViewById(R.id.download_text_view); download.setOnClickListener(v -> { - DownloadUtil.getDownloadTracker(requireContext()).toggleDownload(Arrays.asList(song)); + DownloadUtil.getDownloadTracker(requireContext()).download(Arrays.asList(song)); dismissBottomSheet(); }); + TextView remove = view.findViewById(R.id.remove_text_view); + remove.setOnClickListener(v -> { + DownloadUtil.getDownloadTracker(requireContext()).remove(Arrays.asList(song)); + dismissBottomSheet(); + }); + + initDownloadUI(download, remove); + TextView addToPlaylist = view.findViewById(R.id.add_to_playlist_text_view); addToPlaylist.setOnClickListener(v -> { Bundle bundle = new Bundle(); @@ -203,11 +210,13 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements dismiss(); } - private void initDownloadedUI(TextView download) { + private void initDownloadUI(TextView download, TextView remove) { if (DownloadUtil.getDownloadTracker(requireContext()).isDownloaded(song)) { - download.setText("Remove"); + download.setVisibility(View.GONE); + remove.setVisibility(View.VISIBLE); } else { - download.setText("Download"); + download.setVisibility(View.VISIBLE); + remove.setVisibility(View.GONE); } } } \ No newline at end of file diff --git a/app/src/main/res/layout/bottom_sheet_album_dialog.xml b/app/src/main/res/layout/bottom_sheet_album_dialog.xml index 3679b529..d30d5f70 100644 --- a/app/src/main/res/layout/bottom_sheet_album_dialog.xml +++ b/app/src/main/res/layout/bottom_sheet_album_dialog.xml @@ -152,7 +152,7 @@ android:textSize="14sp" /> + + diff --git a/app/src/main/res/layout/bottom_sheet_song_dialog.xml b/app/src/main/res/layout/bottom_sheet_song_dialog.xml index e1cdcac3..f023ca4d 100644 --- a/app/src/main/res/layout/bottom_sheet_song_dialog.xml +++ b/app/src/main/res/layout/bottom_sheet_song_dialog.xml @@ -168,6 +168,22 @@ android:textFontWeight="700" android:textSize="14sp" /> + +