diff --git a/app/src/main/java/com/cappielloantonio/play/ui/dialog/PlaylistChooserDialog.java b/app/src/main/java/com/cappielloantonio/play/ui/dialog/PlaylistChooserDialog.java index 52666e10..b7015409 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/dialog/PlaylistChooserDialog.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/dialog/PlaylistChooserDialog.java @@ -82,7 +82,7 @@ public class PlaylistChooserDialog extends DialogFragment { playlistDialogHorizontalAdapter = new PlaylistDialogHorizontalAdapter(requireContext(), playlistChooserViewModel, this); bind.playlistDialogRecyclerView.setAdapter(playlistDialogHorizontalAdapter); - playlistChooserViewModel.getPlaylistList().observe(getViewLifecycleOwner(), playlists -> { + playlistChooserViewModel.getPlaylistList(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), playlists -> { if (playlists != null) { if (playlists.size() > 0) { if (bind != null) bind.noPlaylistsCreatedTextView.setVisibility(View.GONE); diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/HomeFragment.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/HomeFragment.java index a0df6b67..88ac10e0 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/HomeFragment.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/HomeFragment.java @@ -256,7 +256,7 @@ public class HomeFragment extends Fragment { discoverSongAdapter = new DiscoverSongAdapter(activity, requireContext()); bind.discoverSongViewPager.setAdapter(discoverSongAdapter); bind.discoverSongViewPager.setOffscreenPageLimit(1); - homeViewModel.getDiscoverSongSample().observe(getViewLifecycleOwner(), songs -> { + homeViewModel.getDiscoverSongSample(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), songs -> { if (songs == null) { if (bind != null) bind.homeDiscoveryPlaceholder.placeholder.setVisibility(View.VISIBLE); if (bind != null) bind.homeDiscoverSector.setVisibility(View.GONE); @@ -277,7 +277,7 @@ public class HomeFragment extends Fragment { similarMusicAdapter = new SimilarTrackAdapter(activity, requireContext()); bind.similarTracksRecyclerView.setAdapter(similarMusicAdapter); - homeViewModel.getStarredTracksSample().observe(getViewLifecycleOwner(), songs -> { + homeViewModel.getStarredTracksSample(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), songs -> { if (songs == null) { if (bind != null) bind.homeSimilarTracksPlaceholder.placeholder.setVisibility(View.VISIBLE); if (bind != null) bind.homeSimilarTracksSector.setVisibility(View.GONE); @@ -299,7 +299,7 @@ public class HomeFragment extends Fragment { radioArtistAdapter = new ArtistAdapter((MainActivity) requireActivity(), requireContext()); bind.radioArtistRecyclerView.setAdapter(radioArtistAdapter); - homeViewModel.getStarredArtistsSample().observe(getViewLifecycleOwner(), artists -> { + homeViewModel.getStarredArtistsSample(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), artists -> { if (artists == null) { if (bind != null) bind.homeRadioArtistPlaceholder.placeholder.setVisibility(View.VISIBLE); if (bind != null) bind.homeRadioArtistSector.setVisibility(View.GONE); diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/LibraryFragment.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/LibraryFragment.java index 73b827cf..c453703e 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/LibraryFragment.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/LibraryFragment.java @@ -145,7 +145,7 @@ public class LibraryFragment extends Fragment { albumAdapter = new AlbumAdapter(requireContext()); bind.albumRecyclerView.setAdapter(albumAdapter); - libraryViewModel.getAlbumSample().observe(getViewLifecycleOwner(), albums -> { + libraryViewModel.getAlbumSample(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), albums -> { if (albums == null) { if (bind != null) bind.libraryAlbumPlaceholder.placeholder.setVisibility(View.VISIBLE); if (bind != null) bind.libraryAlbumSector.setVisibility(View.GONE); @@ -167,7 +167,7 @@ public class LibraryFragment extends Fragment { artistAdapter = new ArtistAdapter((MainActivity) requireActivity(), requireContext()); bind.artistRecyclerView.setAdapter(artistAdapter); - libraryViewModel.getArtistSample().observe(getViewLifecycleOwner(), artists -> { + libraryViewModel.getArtistSample(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), artists -> { if (artists == null) { if (bind != null) bind.libraryArtistPlaceholder.placeholder.setVisibility(View.VISIBLE); if (bind != null) bind.libraryArtistSector.setVisibility(View.GONE); @@ -195,7 +195,7 @@ public class LibraryFragment extends Fragment { activity.navController.navigate(R.id.action_libraryFragment_to_songListPageFragment, bundle); }); bind.genreRecyclerView.setAdapter(genreAdapter); - libraryViewModel.getGenreSample().observe(getViewLifecycleOwner(), genres -> { + libraryViewModel.getGenreSample(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), genres -> { if (genres == null) { if (bind != null) bind.libraryGenrePlaceholder.placeholder.setVisibility(View.VISIBLE); if (bind != null) bind.libraryGenresSector.setVisibility(View.GONE); @@ -217,7 +217,7 @@ public class LibraryFragment extends Fragment { playlistHorizontalAdapter = new PlaylistHorizontalAdapter(activity, requireContext()); bind.playlistRecyclerView.setAdapter(playlistHorizontalAdapter); - libraryViewModel.getPlaylistSample().observe(getViewLifecycleOwner(), playlists -> { + libraryViewModel.getPlaylistSample(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), playlists -> { if (playlists == null) { if (bind != null) bind.libraryPlaylistPlaceholder.placeholder.setVisibility(View.VISIBLE); if (bind != null) bind.libraryPlaylistSector.setVisibility(View.GONE); diff --git a/app/src/main/java/com/cappielloantonio/play/viewmodel/HomeViewModel.java b/app/src/main/java/com/cappielloantonio/play/viewmodel/HomeViewModel.java index 161ac309..6741d0d4 100644 --- a/app/src/main/java/com/cappielloantonio/play/viewmodel/HomeViewModel.java +++ b/app/src/main/java/com/cappielloantonio/play/viewmodel/HomeViewModel.java @@ -56,67 +56,98 @@ public class HomeViewModel extends AndroidViewModel { artistRepository = new ArtistRepository(application); playlistRepository = new PlaylistRepository(application); podcastRepository = new PodcastRepository(application); - - songRepository.getRandomSample(10, null, null).observeForever(dicoverSongSample::postValue); - songRepository.getStarredSongs(true, 10).observeForever(starredTracksSample::postValue); - artistRepository.getStarredArtists(true, 10).observeForever(starredArtistsSample::postValue); } - public LiveData> getDiscoverSongSample() { + public LiveData> getDiscoverSongSample(LifecycleOwner owner) { + if (dicoverSongSample.getValue() == null) { + songRepository.getRandomSample(10, null, null).observe(owner, dicoverSongSample::postValue); + } + return dicoverSongSample; } public LiveData> getRecentlyReleasedAlbums(LifecycleOwner owner) { - int currentYear = Calendar.getInstance().get(Calendar.YEAR); + if (newReleasedAlbum.getValue() == null) { + int currentYear = Calendar.getInstance().get(Calendar.YEAR); - albumRepository.getAlbums("byYear", 500, currentYear, currentYear).observe(owner, albums -> { - albums.sort(Comparator.comparing(Album::getCreated).reversed()); - newReleasedAlbum.postValue(albums.subList(0, Math.min(20, albums.size()))); - }); + albumRepository.getAlbums("byYear", 500, currentYear, currentYear).observe(owner, albums -> { + albums.sort(Comparator.comparing(Album::getCreated).reversed()); + newReleasedAlbum.postValue(albums.subList(0, Math.min(20, albums.size()))); + }); + } return newReleasedAlbum; } - public LiveData> getStarredTracksSample() { + public LiveData> getStarredTracksSample(LifecycleOwner owner) { + if (starredTracksSample.getValue() == null) { + songRepository.getStarredSongs(true, 10).observe(owner, starredTracksSample::postValue); + } + return starredTracksSample; } - public LiveData> getStarredArtistsSample() { + public LiveData> getStarredArtistsSample(LifecycleOwner owner) { + if (starredArtistsSample.getValue() == null) { + artistRepository.getStarredArtists(true, 10).observe(owner, starredArtistsSample::postValue); + } + return starredArtistsSample; } public LiveData> getStarredTracks(LifecycleOwner owner) { - songRepository.getStarredSongs(true, 20).observe(owner, starredTracks::postValue); + if (starredTracks.getValue() == null) { + songRepository.getStarredSongs(true, 20).observe(owner, starredTracks::postValue); + } + return starredTracks; } public LiveData> getStarredAlbums(LifecycleOwner owner) { - albumRepository.getStarredAlbums(true, 20).observe(owner, starredAlbums::postValue); + if (starredAlbums.getValue() == null) { + albumRepository.getStarredAlbums(true, 20).observe(owner, starredAlbums::postValue); + } + return starredAlbums; } public LiveData> getStarredArtists(LifecycleOwner owner) { - artistRepository.getStarredArtists(true, 20).observe(owner, starredArtists::postValue); + if (starredArtists.getValue() == null) { + artistRepository.getStarredArtists(true, 20).observe(owner, starredArtists::postValue); + } + return starredArtists; } public LiveData> getYearList(LifecycleOwner owner) { - albumRepository.getDecades().observe(owner, years::postValue); + if (years.getValue() == null) { + albumRepository.getDecades().observe(owner, years::postValue); + } + return years; } public LiveData> getMostPlayedAlbums(LifecycleOwner owner) { - albumRepository.getAlbums("frequent", 20, null, null).observe(owner, mostPlayedAlbumSample::postValue); + if (mostPlayedAlbumSample.getValue() == null) { + albumRepository.getAlbums("frequent", 20, null, null).observe(owner, mostPlayedAlbumSample::postValue); + } + return mostPlayedAlbumSample; } public LiveData> getMostRecentlyAddedAlbums(LifecycleOwner owner) { - albumRepository.getAlbums("newest", 20, null, null).observe(owner, recentlyAddedAlbumSample::postValue); + if (recentlyAddedAlbumSample.getValue() == null) { + albumRepository.getAlbums("newest", 20, null, null).observe(owner, recentlyAddedAlbumSample::postValue); + } + return recentlyAddedAlbumSample; } public LiveData> getRecentlyPlayedAlbumList(LifecycleOwner owner) { - albumRepository.getAlbums("recent", 20, null, null).observe(owner, recentlyPlayedAlbumSample::postValue); + if (recentlyPlayedAlbumSample.getValue() == null) { + albumRepository.getAlbums("recent", 20, null, null).observe(owner, recentlyPlayedAlbumSample::postValue); + } + return recentlyPlayedAlbumSample; } @@ -126,6 +157,7 @@ public class HomeViewModel extends AndroidViewModel { List subPlaylist = playlists.subList(0, Math.min(maxNumber, playlists.size())); pinnedPlaylists.postValue(subPlaylist); }); + return pinnedPlaylists; } @@ -134,7 +166,10 @@ public class HomeViewModel extends AndroidViewModel { } public LiveData> getNewestPodcastEpisodes(LifecycleOwner owner) { - podcastRepository.getNewestPodcastEpisodes(20).observe(owner, newestPodcastEpisodes::postValue); + if (newestPodcastEpisodes.getValue() == null) { + podcastRepository.getNewestPodcastEpisodes(20).observe(owner, newestPodcastEpisodes::postValue); + } + return newestPodcastEpisodes; } diff --git a/app/src/main/java/com/cappielloantonio/play/viewmodel/LibraryViewModel.java b/app/src/main/java/com/cappielloantonio/play/viewmodel/LibraryViewModel.java index ccdff6ec..a205bdc6 100644 --- a/app/src/main/java/com/cappielloantonio/play/viewmodel/LibraryViewModel.java +++ b/app/src/main/java/com/cappielloantonio/play/viewmodel/LibraryViewModel.java @@ -17,8 +17,6 @@ import com.cappielloantonio.play.repository.ArtistRepository; import com.cappielloantonio.play.repository.GenreRepository; import com.cappielloantonio.play.repository.PlaylistRepository; -import java.util.Calendar; -import java.util.Comparator; import java.util.List; public class LibraryViewModel extends AndroidViewModel { @@ -41,28 +39,37 @@ public class LibraryViewModel extends AndroidViewModel { artistRepository = new ArtistRepository(application); genreRepository = new GenreRepository(application); playlistRepository = new PlaylistRepository(application); - - // Inizializzate all'interno del costruttore, in modo da rimanere immutabili per tutto il - // ciclo di vita dell'applicazione - albumRepository.getAlbums("random", 10, null, null).observeForever(sampleAlbum::postValue); - artistRepository.getArtists(true, 10).observeForever(sampleArtist::postValue); - genreRepository.getGenres(true, 15).observeForever(sampleGenres::postValue); - playlistRepository.getPlaylists(true, 10).observeForever(playlistSample::postValue); } - public LiveData> getAlbumSample() { + public LiveData> getAlbumSample(LifecycleOwner owner) { + if (sampleAlbum.getValue() == null) { + albumRepository.getAlbums("random", 10, null, null).observe(owner, sampleAlbum::postValue); + } + return sampleAlbum; } - public LiveData> getArtistSample() { + public LiveData> getArtistSample(LifecycleOwner owner) { + if (sampleArtist.getValue() == null) { + artistRepository.getArtists(true, 10).observe(owner, sampleArtist::postValue); + } + return sampleArtist; } - public LiveData> getGenreSample() { + public LiveData> getGenreSample(LifecycleOwner owner) { + if (sampleGenres.getValue() == null) { + genreRepository.getGenres(true, 15).observe(owner, sampleGenres::postValue); + } + return sampleGenres; } - public LiveData> getPlaylistSample() { + public LiveData> getPlaylistSample(LifecycleOwner owner) { + if (playlistSample.getValue() == null) { + playlistRepository.getPlaylists(true, 10).observe(owner, playlistSample::postValue); + } + return playlistSample; } diff --git a/app/src/main/java/com/cappielloantonio/play/viewmodel/PlaylistChooserViewModel.java b/app/src/main/java/com/cappielloantonio/play/viewmodel/PlaylistChooserViewModel.java index f6dde72d..2026efc8 100644 --- a/app/src/main/java/com/cappielloantonio/play/viewmodel/PlaylistChooserViewModel.java +++ b/app/src/main/java/com/cappielloantonio/play/viewmodel/PlaylistChooserViewModel.java @@ -4,11 +4,12 @@ import android.app.Application; import androidx.annotation.NonNull; import androidx.lifecycle.AndroidViewModel; +import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; -import com.cappielloantonio.play.model.Playlist; import com.cappielloantonio.play.model.Media; +import com.cappielloantonio.play.model.Playlist; import com.cappielloantonio.play.repository.PlaylistRepository; import java.util.ArrayList; @@ -25,12 +26,10 @@ public class PlaylistChooserViewModel extends AndroidViewModel { super(application); playlistRepository = new PlaylistRepository(application); - - playlistRepository.getPlaylists(false, -1).observeForever(playlists::postValue); - } - public LiveData> getPlaylistList() { + public LiveData> getPlaylistList(LifecycleOwner owner) { + playlistRepository.getPlaylists(false, -1).observe(owner, playlists::postValue); return playlists; }