From e337c6faf2c173f5ce2ba92667d62f088701bf06 Mon Sep 17 00:00:00 2001 From: antonio Date: Sun, 12 Mar 2023 16:34:38 +0100 Subject: [PATCH] Separate the functions for creating a mediaItem from a Child object and from a Download object --- .../play/service/DownloaderManager.java | 26 ++--- .../play/service/MediaManager.java | 100 +++--------------- .../ui/adapter/SongHorizontalAdapter.java | 2 +- .../play/ui/dialog/StarredSyncDialog.java | 2 +- .../play/ui/fragment/AlbumPageFragment.java | 2 +- .../ui/fragment/PlayerControllerFragment.java | 14 ++- .../play/ui/fragment/PlayerCoverFragment.java | 2 +- .../ui/fragment/PlaylistPageFragment.java | 2 +- .../AlbumBottomSheetDialog.java | 2 +- .../SongBottomSheetDialog.java | 6 +- .../cappielloantonio/play/util/Constants.kt | 2 + .../play/util/MappingUtil.java | 56 +++++++--- .../cappielloantonio/play/util/MusicUtil.java | 9 +- .../viewmodel/SongBottomSheetViewModel.java | 2 +- .../play/ExampleUnitTest.java | 17 --- 15 files changed, 103 insertions(+), 141 deletions(-) delete mode 100644 app/src/test/java/com/cappielloantonio/play/ExampleUnitTest.java diff --git a/app/src/main/java/com/cappielloantonio/play/service/DownloaderManager.java b/app/src/main/java/com/cappielloantonio/play/service/DownloaderManager.java index bb5e88a4..0c15bf2b 100644 --- a/app/src/main/java/com/cappielloantonio/play/service/DownloaderManager.java +++ b/app/src/main/java/com/cappielloantonio/play/service/DownloaderManager.java @@ -32,7 +32,7 @@ public class DownloaderManager { private final Context context; private final DataSource.Factory dataSourceFactory; - private final HashMap downloads; + private final HashMap downloads; private final DownloadIndex downloadIndex; public DownloaderManager(Context context, DataSource.Factory dataSourceFactory, DownloadManager downloadManager) { @@ -46,27 +46,29 @@ public class DownloaderManager { } private DownloadRequest buildDownloadRequest(MediaItem mediaItem) { - return DownloadHelper.forMediaItem( - context, - mediaItem, - DownloadUtil.buildRenderersFactory(context, false), - dataSourceFactory - ).getDownloadRequest(Util.getUtf8Bytes(checkNotNull(mediaItem.mediaId))); + return DownloadHelper + .forMediaItem( + context, + mediaItem, + DownloadUtil.buildRenderersFactory(context, false), + dataSourceFactory) + .getDownloadRequest(Util.getUtf8Bytes(checkNotNull(mediaItem.mediaId))) + .copyWithId(mediaItem.mediaId); } - public boolean isDownloaded(Uri uri) { - @Nullable Download download = downloads.get(uri); + public boolean isDownloaded(String mediaId) { + @Nullable Download download = downloads.get(mediaId); return download != null && download.state != Download.STATE_FAILED; } public boolean isDownloaded(MediaItem mediaItem) { - @Nullable Download download = downloads.get(checkNotNull(mediaItem.localConfiguration).uri); + @Nullable Download download = downloads.get(mediaItem.mediaId); return download != null && download.state != Download.STATE_FAILED; } public boolean areDownloaded(List mediaItems) { for (MediaItem mediaItem : mediaItems) { - @Nullable Download download = downloads.get(checkNotNull(mediaItem.localConfiguration).uri); + @Nullable Download download = downloads.get(mediaItem.mediaId); if (download != null && download.state != Download.STATE_FAILED) { return true; } @@ -101,7 +103,7 @@ public class DownloaderManager { try (DownloadCursor loadedDownloads = downloadIndex.getDownloads()) { while (loadedDownloads.moveToNext()) { Download download = loadedDownloads.getDownload(); - downloads.put(download.request.uri, download); + downloads.put(download.request.id, download); } } catch (IOException e) { Log.w(TAG, "Failed to query downloads", e); diff --git a/app/src/main/java/com/cappielloantonio/play/service/MediaManager.java b/app/src/main/java/com/cappielloantonio/play/service/MediaManager.java index 601a92df..c1f70cc9 100644 --- a/app/src/main/java/com/cappielloantonio/play/service/MediaManager.java +++ b/app/src/main/java/com/cappielloantonio/play/service/MediaManager.java @@ -1,7 +1,5 @@ package com.cappielloantonio.play.service; -import android.content.Context; - import androidx.media3.common.MediaItem; import androidx.media3.session.MediaBrowser; @@ -19,8 +17,6 @@ import java.util.List; import java.util.concurrent.ExecutionException; public class MediaManager { - private static final String TAG = "MediaManager"; - public static void reset(ListenableFuture mediaBrowserListenableFuture) { if (mediaBrowserListenableFuture != null) { mediaBrowserListenableFuture.addListener(() -> { @@ -82,7 +78,7 @@ public class MediaManager { try { if (mediaBrowserListenableFuture.isDone()) { mediaBrowserListenableFuture.get().clearMediaItems(); - mediaBrowserListenableFuture.get().setMediaItems(MappingUtil.mapMediaItems(media, true)); + mediaBrowserListenableFuture.get().setMediaItems(MappingUtil.mapMediaItems(media)); mediaBrowserListenableFuture.get().seekTo(getQueueRepository().getLastPlayedMediaIndex(), getQueueRepository().getLastPlayedMediaTimestamp()); mediaBrowserListenableFuture.get().prepare(); } @@ -93,83 +89,13 @@ public class MediaManager { } } - public static void prepare(ListenableFuture mediaBrowserListenableFuture) { - if (mediaBrowserListenableFuture != null) { - mediaBrowserListenableFuture.addListener(() -> { - try { - if (mediaBrowserListenableFuture.isDone()) { - mediaBrowserListenableFuture.get().prepare(); - } - } catch (ExecutionException | InterruptedException e) { - e.printStackTrace(); - } - }, MoreExecutors.directExecutor()); - } - } - - public static void play(ListenableFuture mediaBrowserListenableFuture) { - if (mediaBrowserListenableFuture != null) { - mediaBrowserListenableFuture.addListener(() -> { - try { - if (mediaBrowserListenableFuture.isDone()) { - mediaBrowserListenableFuture.get().play(); - } - } catch (ExecutionException | InterruptedException e) { - e.printStackTrace(); - } - }, MoreExecutors.directExecutor()); - } - } - - public static void pause(ListenableFuture mediaBrowserListenableFuture) { - if (mediaBrowserListenableFuture != null) { - mediaBrowserListenableFuture.addListener(() -> { - try { - if (mediaBrowserListenableFuture.isDone()) { - mediaBrowserListenableFuture.get().pause(); - } - } catch (ExecutionException | InterruptedException e) { - e.printStackTrace(); - } - }, MoreExecutors.directExecutor()); - } - } - - public static void stop(ListenableFuture mediaBrowserListenableFuture) { - if (mediaBrowserListenableFuture != null) { - mediaBrowserListenableFuture.addListener(() -> { - try { - if (mediaBrowserListenableFuture.isDone()) { - mediaBrowserListenableFuture.get().stop(); - } - } catch (ExecutionException | InterruptedException e) { - e.printStackTrace(); - } - }, MoreExecutors.directExecutor()); - } - } - - public static void clearQueue(ListenableFuture mediaBrowserListenableFuture) { - if (mediaBrowserListenableFuture != null) { - mediaBrowserListenableFuture.addListener(() -> { - try { - if (mediaBrowserListenableFuture.isDone()) { - mediaBrowserListenableFuture.get().clearMediaItems(); - } - } catch (ExecutionException | InterruptedException e) { - e.printStackTrace(); - } - }, MoreExecutors.directExecutor()); - } - } - public static void startQueue(ListenableFuture mediaBrowserListenableFuture, List media, int startIndex) { if (mediaBrowserListenableFuture != null) { mediaBrowserListenableFuture.addListener(() -> { try { if (mediaBrowserListenableFuture.isDone()) { mediaBrowserListenableFuture.get().clearMediaItems(); - mediaBrowserListenableFuture.get().setMediaItems(MappingUtil.mapMediaItems(media, true)); + mediaBrowserListenableFuture.get().setMediaItems(MappingUtil.mapMediaItems(media)); mediaBrowserListenableFuture.get().prepare(); mediaBrowserListenableFuture.get().seekTo(startIndex, 0); mediaBrowserListenableFuture.get().play(); @@ -188,7 +114,7 @@ public class MediaManager { try { if (mediaBrowserListenableFuture.isDone()) { mediaBrowserListenableFuture.get().clearMediaItems(); - mediaBrowserListenableFuture.get().setMediaItem(MappingUtil.mapMediaItem(media, true)); + mediaBrowserListenableFuture.get().setMediaItem(MappingUtil.mapMediaItem(media)); mediaBrowserListenableFuture.get().prepare(); mediaBrowserListenableFuture.get().play(); enqueueDatabase(media, true, 0); @@ -207,10 +133,10 @@ public class MediaManager { if (mediaBrowserListenableFuture.isDone()) { if (playImmediatelyAfter && mediaBrowserListenableFuture.get().getNextMediaItemIndex() != -1) { enqueueDatabase(media, false, mediaBrowserListenableFuture.get().getNextMediaItemIndex()); - mediaBrowserListenableFuture.get().addMediaItems(mediaBrowserListenableFuture.get().getNextMediaItemIndex(), MappingUtil.mapMediaItems(media, true)); + mediaBrowserListenableFuture.get().addMediaItems(mediaBrowserListenableFuture.get().getNextMediaItemIndex(), MappingUtil.mapMediaItems(media)); } else { enqueueDatabase(media, false, mediaBrowserListenableFuture.get().getMediaItemCount()); - mediaBrowserListenableFuture.get().addMediaItems(MappingUtil.mapMediaItems(media, true)); + mediaBrowserListenableFuture.get().addMediaItems(MappingUtil.mapMediaItems(media)); } } } catch (ExecutionException | InterruptedException e) { @@ -227,10 +153,10 @@ public class MediaManager { if (mediaBrowserListenableFuture.isDone()) { if (playImmediatelyAfter && mediaBrowserListenableFuture.get().getNextMediaItemIndex() != -1) { enqueueDatabase(media, false, mediaBrowserListenableFuture.get().getNextMediaItemIndex()); - mediaBrowserListenableFuture.get().addMediaItem(mediaBrowserListenableFuture.get().getNextMediaItemIndex(), MappingUtil.mapMediaItem(media, true)); + mediaBrowserListenableFuture.get().addMediaItem(mediaBrowserListenableFuture.get().getNextMediaItemIndex(), MappingUtil.mapMediaItem(media)); } else { enqueueDatabase(media, false, mediaBrowserListenableFuture.get().getMediaItemCount()); - mediaBrowserListenableFuture.get().addMediaItem(MappingUtil.mapMediaItem(media, true)); + mediaBrowserListenableFuture.get().addMediaItem(MappingUtil.mapMediaItem(media)); } } } catch (ExecutionException | InterruptedException e) { @@ -298,15 +224,19 @@ public class MediaManager { } public static void scrobble(MediaItem mediaItem) { - if (mediaItem != null) - if (getQueueRepository().isMediaPlayingPlausible(mediaItem)) + if (mediaItem != null) { + if (getQueueRepository().isMediaPlayingPlausible(mediaItem)) { getSongRepository().scrobble(mediaItem.mediaMetadata.extras.getString("id")); + } + } } public static void saveChronology(MediaItem mediaItem) { - if (mediaItem != null) - if (getQueueRepository().isMediaPlayingPlausible(mediaItem)) + if (mediaItem != null) { + if (getQueueRepository().isMediaPlayingPlausible(mediaItem)) { getChronologyRepository().insert(new Chronology(mediaItem)); + } + } } private static QueueRepository getQueueRepository() { diff --git a/app/src/main/java/com/cappielloantonio/play/ui/adapter/SongHorizontalAdapter.java b/app/src/main/java/com/cappielloantonio/play/ui/adapter/SongHorizontalAdapter.java index bd322841..abb5c7da 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/adapter/SongHorizontalAdapter.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/adapter/SongHorizontalAdapter.java @@ -54,7 +54,7 @@ public class SongHorizontalAdapter extends RecyclerView.Adapter { if (songs != null) { DownloadUtil.getDownloadTracker(context).download( - MappingUtil.mapMediaItems(songs, false), + MappingUtil.mapDownloads(songs), songs.stream().map(Download::new).collect(Collectors.toList()) ); } 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 7204798f..48bde2b0 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 @@ -107,7 +107,7 @@ public class AlbumPageFragment extends Fragment implements ClickCallback { if (item.getItemId() == R.id.action_download_album) { albumPageViewModel.getAlbumSongLiveList().observe(getViewLifecycleOwner(), songs -> { DownloadUtil.getDownloadTracker(requireContext()).download( - MappingUtil.mapMediaItems(songs, false), + MappingUtil.mapDownloads(songs), songs.stream().map(Download::new).collect(Collectors.toList()) ); }); diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlayerControllerFragment.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlayerControllerFragment.java index d46a04c3..32f5a0de 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlayerControllerFragment.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlayerControllerFragment.java @@ -156,7 +156,9 @@ public class PlayerControllerFragment extends Fragment { private void setMediaInfo(MediaMetadata mediaMetadata) { if (mediaMetadata.extras != null) { String extension = mediaMetadata.extras.getString("suffix", "Unknown format"); - String bitrate = mediaMetadata.extras.getInt("bitrate", 0) != 0 ? mediaMetadata.extras.getInt("bitrate", 0) + "kbps" : "Original"; + String bitrate = mediaMetadata.extras.getInt("bitrate", 0) != 0 + ? mediaMetadata.extras.getInt("bitrate", 0) + "kbps" + : "Original"; playerMediaExtension.setText(extension); @@ -170,7 +172,9 @@ public class PlayerControllerFragment extends Fragment { } String transcodingExtension = MusicUtil.getTranscodingFormatPreference(); - String transcodingBitrate = Integer.parseInt(MusicUtil.getBitratePreference()) != 0 ? Integer.parseInt(MusicUtil.getBitratePreference()) + "kbps" : "Original"; + String transcodingBitrate = Integer.parseInt(MusicUtil.getBitratePreference()) != 0 + ? Integer.parseInt(MusicUtil.getBitratePreference()) + "kbps" + : "Original"; if (transcodingExtension.equals("raw") && transcodingBitrate.equals("Original")) { playerMediaTranscodingIcon.setVisibility(View.GONE); @@ -184,6 +188,12 @@ public class PlayerControllerFragment extends Fragment { playerMediaTranscodedExtension.setText(transcodingExtension); playerMediaTranscodedBitrate.setText(transcodingBitrate); } + + if (mediaMetadata.extras != null && mediaMetadata.extras.getString("uri", "").contains(Constants.DOWNLOAD_URI)) { + playerMediaTranscodingIcon.setVisibility(View.GONE); + playerMediaTranscodedBitrate.setVisibility(View.GONE); + playerMediaTranscodedExtension.setVisibility(View.GONE); + } } private void setMediaControllerUI(MediaBrowser mediaBrowser) { diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlayerCoverFragment.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlayerCoverFragment.java index 94ecf10e..4cb6a5eb 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlayerCoverFragment.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlayerCoverFragment.java @@ -92,7 +92,7 @@ public class PlayerCoverFragment extends Fragment { if (song != null && bind != null) { bind.innerButtonTopLeft.setOnClickListener(view -> { DownloadUtil.getDownloadTracker(requireContext()).download( - MappingUtil.mapMediaItem(song, false), + MappingUtil.mapDownload(song), new Download(song) ); }); 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 c41f22d6..9662e21e 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 @@ -106,7 +106,7 @@ public class PlaylistPageFragment extends Fragment implements ClickCallback { playlistPageViewModel.getPlaylistSongLiveList().observe(getViewLifecycleOwner(), songs -> { if (isVisible() && getActivity() != null) { DownloadUtil.getDownloadTracker(requireContext()).download( - MappingUtil.mapMediaItems(songs, false), + MappingUtil.mapDownloads(songs), songs.stream().map(child -> { Download toDownload = new Download(child); toDownload.setPlaylistId(playlistPageViewModel.getPlaylist().getId()); 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 7ab0243d..ba709468 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 @@ -156,7 +156,7 @@ public class AlbumBottomSheetDialog extends BottomSheetDialogFragment implements TextView removeAll = view.findViewById(R.id.remove_all_text_view); albumBottomSheetViewModel.getAlbumTracks().observe(getViewLifecycleOwner(), songs -> { - List mediaItems = MappingUtil.mapMediaItems(songs, false); + List mediaItems = MappingUtil.mapDownloads(songs); List downloads = songs.stream().map(Download::new).collect(Collectors.toList()); downloadAll.setOnClickListener(v -> { 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 36fe365f..ea56ed5c 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 @@ -156,7 +156,7 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements TextView download = view.findViewById(R.id.download_text_view); download.setOnClickListener(v -> { DownloadUtil.getDownloadTracker(requireContext()).download( - MappingUtil.mapMediaItem(song, false), + MappingUtil.mapDownload(song), new Download(song) ); dismissBottomSheet(); @@ -165,7 +165,7 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements TextView remove = view.findViewById(R.id.remove_text_view); remove.setOnClickListener(v -> { DownloadUtil.getDownloadTracker(requireContext()).remove( - MappingUtil.mapMediaItem(song, false), + MappingUtil.mapDownload(song), new Download(song) ); dismissBottomSheet(); @@ -220,7 +220,7 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements } private void initDownloadUI(TextView download, TextView remove) { - if (DownloadUtil.getDownloadTracker(requireContext()).isDownloaded(MappingUtil.mapMediaItem(song, false))) { + if (DownloadUtil.getDownloadTracker(requireContext()).isDownloaded(song.getId())) { download.setVisibility(View.GONE); remove.setVisibility(View.VISIBLE); } else { diff --git a/app/src/main/java/com/cappielloantonio/play/util/Constants.kt b/app/src/main/java/com/cappielloantonio/play/util/Constants.kt index f24d56b4..9e44ba09 100644 --- a/app/src/main/java/com/cappielloantonio/play/util/Constants.kt +++ b/app/src/main/java/com/cappielloantonio/play/util/Constants.kt @@ -63,4 +63,6 @@ object Constants { const val MEDIA_MIX = "MEDIA_MIX" const val MEDIA_CHRONOLOGY = "MEDIA_CHRONOLOGY" const val MEDIA_BEST_OF = "MEDIA_BEST_OF" + + const val DOWNLOAD_URI = "rest/download" } \ No newline at end of file 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 b88fc9a6..979dfc88 100644 --- a/app/src/main/java/com/cappielloantonio/play/util/MappingUtil.java +++ b/app/src/main/java/com/cappielloantonio/play/util/MappingUtil.java @@ -17,18 +17,18 @@ import java.util.List; @OptIn(markerClass = UnstableApi.class) public class MappingUtil { - public static ArrayList mapMediaItems(List items, boolean stream) { - ArrayList mediaItems = new ArrayList(); + public static List mapMediaItems(List items) { + ArrayList mediaItems = new ArrayList<>(); for (int i = 0; i < items.size(); i++) { - mediaItems.add(mapMediaItem(items.get(i), stream)); + mediaItems.add(mapMediaItem(items.get(i))); } return mediaItems; } - public static MediaItem mapMediaItem(Child media, boolean stream) { - boolean isDownloaded = DownloadUtil.getDownloadTracker(App.getContext()).isDownloaded(MusicUtil.getDownloadUri(media.getId())); + public static MediaItem mapMediaItem(Child media) { + Uri uri = getUri(media); Bundle bundle = new Bundle(); bundle.putString("id", media.getId()); @@ -62,6 +62,7 @@ public class MappingUtil { bundle.putLong("bookmarkPosition", media.getBookmarkPosition() != null ? media.getBookmarkPosition() : 0); bundle.putInt("originalWidth", media.getOriginalWidth() != null ? media.getOriginalWidth() : 0); bundle.putInt("originalHeight", media.getOriginalHeight() != null ? media.getOriginalHeight() : 0); + bundle.putString("uri", uri.toString()); return new MediaItem.Builder() .setMediaId(media.getId()) @@ -78,20 +79,51 @@ public class MappingUtil { ) .setRequestMetadata( new MediaItem.RequestMetadata.Builder() - .setMediaUri(getUri(media, stream && !isDownloaded)) + .setMediaUri(uri) .setExtras(bundle) .build() ) .setMimeType(MimeTypes.BASE_TYPE_AUDIO) - .setUri(getUri(media, stream && !isDownloaded)) + .setUri(uri) .build(); } - private static Uri getUri(Child media, boolean stream) { - if (stream) { - return MusicUtil.getStreamUri(media.getId()); - } else { - return MusicUtil.getDownloadUri(media.getId()); + public static List mapDownloads(List items) { + ArrayList downloads = new ArrayList<>(); + + for (int i = 0; i < items.size(); i++) { + downloads.add(mapDownload(items.get(i))); } + + return downloads; + } + + public static MediaItem mapDownload(Child media) { + return new MediaItem.Builder() + .setMediaId(media.getId()) + .setMediaMetadata( + new MediaMetadata.Builder() + .setTitle(MusicUtil.getReadableString(media.getTitle())) + .setTrackNumber(media.getTrack()) + .setDiscNumber(media.getDiscNumber()) + .setReleaseYear(media.getYear()) + .setAlbumTitle(MusicUtil.getReadableString(media.getAlbum())) + .setArtist(MusicUtil.getReadableString(media.getArtist())) + .build() + ) + .setRequestMetadata( + new MediaItem.RequestMetadata.Builder() + .setMediaUri(MusicUtil.getDownloadUri(media.getId())) + .build() + ) + .setMimeType(MimeTypes.BASE_TYPE_AUDIO) + .setUri(MusicUtil.getDownloadUri(media.getId())) + .build(); + } + + private static Uri getUri(Child media) { + return DownloadUtil.getDownloadTracker(App.getContext()).isDownloaded(media.getId()) + ? MusicUtil.getDownloadUri(media.getId()) + : MusicUtil.getStreamUri(media.getId()); } } diff --git a/app/src/main/java/com/cappielloantonio/play/util/MusicUtil.java b/app/src/main/java/com/cappielloantonio/play/util/MusicUtil.java index 71146645..c54a09e8 100644 --- a/app/src/main/java/com/cappielloantonio/play/util/MusicUtil.java +++ b/app/src/main/java/com/cappielloantonio/play/util/MusicUtil.java @@ -6,10 +6,9 @@ import android.net.Network; import android.net.NetworkCapabilities; import android.net.Uri; import android.text.Html; +import android.util.Log; import com.cappielloantonio.play.App; -import com.cappielloantonio.play.R; -import com.cappielloantonio.play.glide.CustomGlideRequest; import java.util.ArrayList; import java.util.List; @@ -45,6 +44,8 @@ public class MusicUtil { uri.append("&format=").append(getTranscodingFormatPreference()); uri.append("&id=").append(id); + Log.d(TAG, "getStreamUri: " + uri); + return Uri.parse(uri.toString()); } @@ -54,7 +55,7 @@ public class MusicUtil { StringBuilder uri = new StringBuilder(); uri.append(App.getSubsonicClientInstance(false).getUrl()); - uri.append("stream"); + uri.append("download"); if (params.containsKey("u") && params.get("u") != null) uri.append("?u=").append(params.get("u")); @@ -71,6 +72,8 @@ public class MusicUtil { uri.append("&id=").append(id); + Log.d(TAG, "getDownloadUri: " + uri); + return Uri.parse(uri.toString()); } 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 c6fe13b3..4d741d78 100644 --- a/app/src/main/java/com/cappielloantonio/play/viewmodel/SongBottomSheetViewModel.java +++ b/app/src/main/java/com/cappielloantonio/play/viewmodel/SongBottomSheetViewModel.java @@ -61,7 +61,7 @@ public class SongBottomSheetViewModel extends AndroidViewModel { if (Preferences.isStarredSyncEnabled()) { DownloadUtil.getDownloadTracker(context).download( - MappingUtil.mapMediaItem(song, false), + MappingUtil.mapDownload(song), new Download(song) ); } diff --git a/app/src/test/java/com/cappielloantonio/play/ExampleUnitTest.java b/app/src/test/java/com/cappielloantonio/play/ExampleUnitTest.java deleted file mode 100644 index a38a927b..00000000 --- a/app/src/test/java/com/cappielloantonio/play/ExampleUnitTest.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.cappielloantonio.play; - -import org.junit.Test; - -import static org.junit.Assert.*; - -/** - * Example local unit test, which will execute on the development machine (host). - * - * @see Testing documentation - */ -public class ExampleUnitTest { - @Test - public void addition_isCorrect() { - assertEquals(4, 2 + 2); - } -} \ No newline at end of file