diff --git a/app/src/main/java/com/cappielloantonio/tempo/ui/adapter/PlayerSongQueueAdapter.java b/app/src/main/java/com/cappielloantonio/tempo/ui/adapter/PlayerSongQueueAdapter.java index 4db3a572..14269b1c 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/ui/adapter/PlayerSongQueueAdapter.java +++ b/app/src/main/java/com/cappielloantonio/tempo/ui/adapter/PlayerSongQueueAdapter.java @@ -18,8 +18,10 @@ import com.cappielloantonio.tempo.databinding.ItemPlayerQueueSongBinding; import com.cappielloantonio.tempo.glide.CustomGlideRequest; import com.cappielloantonio.tempo.interfaces.ClickCallback; import com.cappielloantonio.tempo.interfaces.MediaIndexCallback; +import com.cappielloantonio.tempo.service.DownloaderManager; import com.cappielloantonio.tempo.service.MediaManager; import com.cappielloantonio.tempo.subsonic.models.Child; +import com.cappielloantonio.tempo.util.DownloadUtil; import com.cappielloantonio.tempo.util.Constants; import com.cappielloantonio.tempo.util.MusicUtil; import com.cappielloantonio.tempo.util.Preferences; @@ -94,6 +96,20 @@ public class PlayerSongQueueAdapter extends RecyclerView.Adapter queueSongs = playerSongQueueAdapter.getItems(); + + if (queueSongs == null || queueSongs.isEmpty()) { + Toast.makeText(requireContext(), "Queue is empty", Toast.LENGTH_SHORT).show(); + toggleFabMenu(); + return; + } + + List mediaItemsToDownload = MappingUtil.mapMediaItems(queueSongs); + + List downloadModels = new ArrayList<>(); + + for (Child child : queueSongs) { + com.cappielloantonio.tempo.model.Download downloadModel = + new com.cappielloantonio.tempo.model.Download(child); + downloadModel.setArtist(child.getArtist()); + downloadModel.setAlbum(child.getAlbum()); + downloadModel.setCoverArtId(child.getCoverArtId()); + downloadModels.add(downloadModel); + } + + DownloaderManager downloaderManager = DownloadUtil.getDownloadTracker(requireContext()); + + if (downloaderManager != null) { + downloaderManager.download(mediaItemsToDownload, downloadModels); + Toast.makeText(requireContext(), "Starting download of " + queueSongs.size() + " songs in the background.", Toast.LENGTH_SHORT).show(); + } else { + Log.e(TAG, "DownloaderManager not initialized. Check DownloadUtil."); + Toast.makeText(requireContext(), "Download service unavailable.", Toast.LENGTH_SHORT).show(); + } toggleFabMenu(); } private void handleLoadQueueClick() { Log.d(TAG, "Load Queue Clicked!"); - - // Double-check that sync is enabled (shouldn't be visible if disabled, but just in case) if (!Preferences.isSyncronizationEnabled()) { toggleFabMenu(); return; diff --git a/app/src/main/java/com/cappielloantonio/tempo/viewmodel/AlbumListPageViewModel.java b/app/src/main/java/com/cappielloantonio/tempo/viewmodel/AlbumListPageViewModel.java index 956ba6fa..8e88cec8 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/viewmodel/AlbumListPageViewModel.java +++ b/app/src/main/java/com/cappielloantonio/tempo/viewmodel/AlbumListPageViewModel.java @@ -9,7 +9,6 @@ import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import com.cappielloantonio.tempo.repository.AlbumRepository; -import com.cappielloantonio.tempo.repository.DownloadRepository; import com.cappielloantonio.tempo.subsonic.models.AlbumID3; import com.cappielloantonio.tempo.subsonic.models.ArtistID3; import com.cappielloantonio.tempo.util.Constants; @@ -21,7 +20,6 @@ import java.util.List; public class AlbumListPageViewModel extends AndroidViewModel { private final AlbumRepository albumRepository; - private final DownloadRepository downloadRepository; public String title; public ArtistID3 artist; @@ -32,9 +30,7 @@ public class AlbumListPageViewModel extends AndroidViewModel { public AlbumListPageViewModel(@NonNull Application application) { super(application); - albumRepository = new AlbumRepository(); - downloadRepository = new DownloadRepository(); } public LiveData> getAlbumList(LifecycleOwner owner) { diff --git a/app/src/main/res/layout/inner_fragment_player_queue.xml b/app/src/main/res/layout/inner_fragment_player_queue.xml index ecfc8482..9490579b 100644 --- a/app/src/main/res/layout/inner_fragment_player_queue.xml +++ b/app/src/main/res/layout/inner_fragment_player_queue.xml @@ -35,8 +35,7 @@ android:layout_height="wrap_content" android:layout_marginBottom="8dp" android:visibility="gone" - android:text="Save Queue to Playlist" - tools:ignore="HardcodedText" + android:text="@string/player_queue_save_to_playlist" app:icon="@android:drawable/ic_menu_edit" /> @@ -56,8 +54,7 @@ android:layout_height="wrap_content" android:layout_marginBottom="8dp" android:visibility="gone" - android:text="Load Queue" - tools:ignore="HardcodedText" + android:text="@string/player_queue_load_queue" app:icon="@android:drawable/ic_menu_revert" /> diff --git a/app/src/main/res/layout/item_player_queue_song.xml b/app/src/main/res/layout/item_player_queue_song.xml index baf28acc..22e3bc60 100644 --- a/app/src/main/res/layout/item_player_queue_song.xml +++ b/app/src/main/res/layout/item_player_queue_song.xml @@ -139,6 +139,17 @@ + + %1$.2fx Clean play queue Saved play queue + Save Queue to Playlist + Load Queue Download lyrics for offline playback Lyrics downloaded for offline playback Lyrics saved for offline playback.