From 134d4e33e57d2ed69b945d1772dc1eaeb37f4082 Mon Sep 17 00:00:00 2001 From: CappielloAntonio Date: Sun, 2 Jan 2022 16:19:16 +0100 Subject: [PATCH] In ViewModels passed the LifecycleOwner instead of the Activity --- .../fragment/PlaylistCatalogueFragment.java | 48 ++++++++++--------- .../viewmodel/AlbumListPageViewModel.java | 13 ++--- .../play/viewmodel/AlbumPageViewModel.java | 5 +- .../viewmodel/ArtistListPageViewModel.java | 5 +- .../viewmodel/PlaylistCatalogueViewModel.java | 11 +++-- .../play/viewmodel/PlaylistPageViewModel.java | 9 ++-- .../play/viewmodel/SongListPageViewModel.java | 7 +-- 7 files changed, 53 insertions(+), 45 deletions(-) diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlaylistCatalogueFragment.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlaylistCatalogueFragment.java index ec84c26d..2b381c73 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlaylistCatalogueFragment.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/PlaylistCatalogueFragment.java @@ -28,7 +28,6 @@ import com.cappielloantonio.play.ui.activity.MainActivity; import com.cappielloantonio.play.viewmodel.PlaylistCatalogueViewModel; import java.util.ArrayList; -import java.util.Collections; import java.util.List; public class PlaylistCatalogueFragment extends Fragment { @@ -111,32 +110,35 @@ public class PlaylistCatalogueFragment extends Fragment { playlistCatalogueAdapter = new PlaylistCatalogueAdapter(activity, requireContext(), playlistCatalogueViewModel.getType().equals(Playlist.DOWNLOADED)); bind.playlistCatalogueRecyclerView.setAdapter(playlistCatalogueAdapter); - playlistCatalogueViewModel.getPlaylistList(requireActivity()).observe(requireActivity(), playlists -> { - playlistCatalogueViewModel.getPinnedPlaylistList(requireActivity()).observe(requireActivity(), pinnedPlaylists -> { - List sortedList = new ArrayList<>(); - List unsortedList = new ArrayList<>(playlists); - List pinnedPlaylistsVerified = new ArrayList<>(); - List pinnedPlaylistsNotFound = new ArrayList<>(); + if(getActivity() != null) { + playlistCatalogueViewModel.getPlaylistList(requireActivity()).observe(requireActivity(), playlists -> + playlistCatalogueViewModel.getPinnedPlaylistList(requireActivity()).observe(requireActivity(), + pinnedPlaylists -> { + List sortedList = new ArrayList<>(); + List unsortedList = new ArrayList<>(playlists); - if(unsortedList.size() > 0) { - for(Playlist pinnedPlaylist: pinnedPlaylists) { - if(playlists.contains(pinnedPlaylist)) { - pinnedPlaylistsVerified.add(pinnedPlaylist); - } else { - pinnedPlaylistsNotFound.add(pinnedPlaylist); - } - } + List pinnedPlaylistsVerified = new ArrayList<>(); + List pinnedPlaylistsNotFound = new ArrayList<>(); - unsortedList.removeAll(pinnedPlaylistsVerified); - sortedList.addAll(pinnedPlaylistsVerified); - sortedList.addAll(unsortedList); - } + if (unsortedList.size() > 0) { + for (Playlist pinnedPlaylist : pinnedPlaylists) { + if (playlists.contains(pinnedPlaylist)) { + pinnedPlaylistsVerified.add(pinnedPlaylist); + } else { + pinnedPlaylistsNotFound.add(pinnedPlaylist); + } + } - playlistCatalogueAdapter.setItems(sortedList); - playlistCatalogueViewModel.unpinPlaylist(pinnedPlaylistsNotFound); - }); - }); + unsortedList.removeAll(pinnedPlaylistsVerified); + sortedList.addAll(pinnedPlaylistsVerified); + sortedList.addAll(unsortedList); + } + + playlistCatalogueAdapter.setItems(sortedList); + playlistCatalogueViewModel.unpinPlaylist(pinnedPlaylistsNotFound); + })); + } bind.playlistCatalogueRecyclerView.setOnTouchListener((v, event) -> { hideKeyboard(v); diff --git a/app/src/main/java/com/cappielloantonio/play/viewmodel/AlbumListPageViewModel.java b/app/src/main/java/com/cappielloantonio/play/viewmodel/AlbumListPageViewModel.java index 0ef84080..bbbd3efa 100644 --- a/app/src/main/java/com/cappielloantonio/play/viewmodel/AlbumListPageViewModel.java +++ b/app/src/main/java/com/cappielloantonio/play/viewmodel/AlbumListPageViewModel.java @@ -5,6 +5,7 @@ import android.app.Application; import androidx.annotation.NonNull; import androidx.fragment.app.FragmentActivity; import androidx.lifecycle.AndroidViewModel; +import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; @@ -33,27 +34,27 @@ public class AlbumListPageViewModel extends AndroidViewModel { downloadRepository = new DownloadRepository(application); } - public LiveData> getAlbumList(FragmentActivity activity) { + public LiveData> getAlbumList(LifecycleOwner owner) { albumList = new MutableLiveData<>(new ArrayList<>()); switch (title) { case Album.RECENTLY_PLAYED: - albumRepository.getAlbums("recent", 500, null, null).observe(activity, albums -> albumList.setValue(albums)); + albumRepository.getAlbums("recent", 500, null, null).observe(owner, albums -> albumList.setValue(albums)); break; case Album.MOST_PLAYED: - albumRepository.getAlbums("frequent", 500, null, null).observe(activity, albums -> albumList.setValue(albums)); + albumRepository.getAlbums("frequent", 500, null, null).observe(owner, albums -> albumList.setValue(albums)); break; case Album.RECENTLY_ADDED: - albumRepository.getAlbums("newest", 500, null, null).observe(activity, albums -> albumList.setValue(albums)); + albumRepository.getAlbums("newest", 500, null, null).observe(owner, albums -> albumList.setValue(albums)); break; case Album.STARRED: albumList = albumRepository.getStarredAlbums(false, -1); break; case Album.DOWNLOADED: - downloadRepository.getLiveDownload().observe(activity, downloads -> albumList.setValue(MappingUtil.mapDownloadToAlbum(downloads))); + downloadRepository.getLiveDownload().observe(owner, downloads -> albumList.setValue(MappingUtil.mapDownloadToAlbum(downloads))); break; case Album.FROM_ARTIST: - downloadRepository.getLiveDownloadFromArtist(artist.getId()).observe(activity, downloads -> albumList.setValue(MappingUtil.mapDownloadToAlbum(downloads))); + downloadRepository.getLiveDownloadFromArtist(artist.getId()).observe(owner, downloads -> albumList.setValue(MappingUtil.mapDownloadToAlbum(downloads))); break; } diff --git a/app/src/main/java/com/cappielloantonio/play/viewmodel/AlbumPageViewModel.java b/app/src/main/java/com/cappielloantonio/play/viewmodel/AlbumPageViewModel.java index 34698862..11ca13c7 100644 --- a/app/src/main/java/com/cappielloantonio/play/viewmodel/AlbumPageViewModel.java +++ b/app/src/main/java/com/cappielloantonio/play/viewmodel/AlbumPageViewModel.java @@ -5,6 +5,7 @@ import android.app.Application; import androidx.annotation.NonNull; import androidx.fragment.app.FragmentActivity; import androidx.lifecycle.AndroidViewModel; +import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; @@ -36,9 +37,9 @@ public class AlbumPageViewModel extends AndroidViewModel { downloadRepository = new DownloadRepository(application); } - public LiveData> getAlbumSongLiveList(FragmentActivity activity) { + public LiveData> getAlbumSongLiveList(LifecycleOwner owner) { if (isOffline) { - downloadRepository.getLiveDownloadFromAlbum(album.getId()).observe(activity, downloads -> songLiveList.postValue(MappingUtil.mapDownloadToSong(downloads))); + downloadRepository.getLiveDownloadFromAlbum(album.getId()).observe(owner, downloads -> songLiveList.postValue(MappingUtil.mapDownloadToSong(downloads))); } else { songLiveList = albumRepository.getAlbumTracks(album.getId()); } diff --git a/app/src/main/java/com/cappielloantonio/play/viewmodel/ArtistListPageViewModel.java b/app/src/main/java/com/cappielloantonio/play/viewmodel/ArtistListPageViewModel.java index 6b506405..29297db9 100644 --- a/app/src/main/java/com/cappielloantonio/play/viewmodel/ArtistListPageViewModel.java +++ b/app/src/main/java/com/cappielloantonio/play/viewmodel/ArtistListPageViewModel.java @@ -5,6 +5,7 @@ import android.app.Application; import androidx.annotation.NonNull; import androidx.fragment.app.FragmentActivity; import androidx.lifecycle.AndroidViewModel; +import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; @@ -35,7 +36,7 @@ public class ArtistListPageViewModel extends AndroidViewModel { downloadRepository = new DownloadRepository(application); } - public LiveData> getArtistList(FragmentActivity activity) { + public LiveData> getArtistList(LifecycleOwner owner) { artistList = new MutableLiveData<>(new ArrayList<>()); switch (title) { @@ -43,7 +44,7 @@ public class ArtistListPageViewModel extends AndroidViewModel { artistList = artistRepository.getStarredArtists(false, -1); break; case Artist.DOWNLOADED: - downloadRepository.getLiveDownload().observe(activity, downloads -> { + downloadRepository.getLiveDownload().observe(owner, downloads -> { List unique = downloads .stream() .collect(Collectors.collectingAndThen( diff --git a/app/src/main/java/com/cappielloantonio/play/viewmodel/PlaylistCatalogueViewModel.java b/app/src/main/java/com/cappielloantonio/play/viewmodel/PlaylistCatalogueViewModel.java index fcfb071c..1c727c91 100644 --- a/app/src/main/java/com/cappielloantonio/play/viewmodel/PlaylistCatalogueViewModel.java +++ b/app/src/main/java/com/cappielloantonio/play/viewmodel/PlaylistCatalogueViewModel.java @@ -5,6 +5,7 @@ import android.app.Application; import androidx.annotation.NonNull; import androidx.fragment.app.FragmentActivity; import androidx.lifecycle.AndroidViewModel; +import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; @@ -34,15 +35,15 @@ public class PlaylistCatalogueViewModel extends AndroidViewModel { downloadRepository = new DownloadRepository(application); } - public LiveData> getPlaylistList(FragmentActivity activity) { + public LiveData> getPlaylistList(LifecycleOwner owner) { playlistList = new MutableLiveData<>(new ArrayList<>()); switch (type) { case Playlist.ALL: - playlistRepository.getPlaylists(false, -1).observe(activity, playlists -> playlistList.postValue(playlists)); + playlistRepository.getPlaylists(false, -1).observe(owner, playlists -> playlistList.postValue(playlists)); break; case Playlist.DOWNLOADED: - downloadRepository.getLivePlaylist().observe(activity, downloads -> playlistList.setValue(MappingUtil.mapDownloadToPlaylist(downloads))); + downloadRepository.getLivePlaylist().observe(owner, downloads -> playlistList.setValue(MappingUtil.mapDownloadToPlaylist(downloads))); break; } @@ -51,9 +52,9 @@ public class PlaylistCatalogueViewModel extends AndroidViewModel { return playlistList; } - public LiveData> getPinnedPlaylistList(FragmentActivity activity) { + public LiveData> getPinnedPlaylistList(LifecycleOwner owner) { pinnedPlaylistList = new MutableLiveData<>(new ArrayList<>()); - playlistRepository.getPinnedPlaylists(PreferenceUtil.getInstance(App.getInstance()).getServerId()).observe(activity, playlists -> pinnedPlaylistList.postValue(playlists)); + playlistRepository.getPinnedPlaylists(PreferenceUtil.getInstance(App.getInstance()).getServerId()).observe(owner, playlists -> pinnedPlaylistList.postValue(playlists)); return pinnedPlaylistList; } diff --git a/app/src/main/java/com/cappielloantonio/play/viewmodel/PlaylistPageViewModel.java b/app/src/main/java/com/cappielloantonio/play/viewmodel/PlaylistPageViewModel.java index 783f27b2..ba4179c8 100644 --- a/app/src/main/java/com/cappielloantonio/play/viewmodel/PlaylistPageViewModel.java +++ b/app/src/main/java/com/cappielloantonio/play/viewmodel/PlaylistPageViewModel.java @@ -5,6 +5,7 @@ import android.app.Application; import androidx.annotation.NonNull; import androidx.fragment.app.FragmentActivity; import androidx.lifecycle.AndroidViewModel; +import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; @@ -34,9 +35,9 @@ public class PlaylistPageViewModel extends AndroidViewModel { downloadRepository = new DownloadRepository(application); } - public LiveData> getPlaylistSongLiveList(FragmentActivity activity) { + public LiveData> getPlaylistSongLiveList(LifecycleOwner owner) { if (isOffline) { - downloadRepository.getLiveDownloadFromPlaylist(playlist.getId()).observe(activity, downloads -> playlistSongLiveList.postValue(MappingUtil.mapDownloadToSong(downloads))); + downloadRepository.getLiveDownloadFromPlaylist(playlist.getId()).observe(owner, downloads -> playlistSongLiveList.postValue(MappingUtil.mapDownloadToSong(downloads))); } else { playlistSongLiveList = playlistRepository.getPlaylistSongs(playlist.getId()); } @@ -61,9 +62,9 @@ public class PlaylistPageViewModel extends AndroidViewModel { return isOffline; } - public LiveData isPinned(FragmentActivity activity) { + public LiveData isPinned(LifecycleOwner owner) { MutableLiveData isPinnedLive = new MutableLiveData<>(); - playlistRepository.getPinnedPlaylists(PreferenceUtil.getInstance(App.getInstance()).getServerId()).observe(activity, playlists -> isPinnedLive.postValue(playlists.contains(playlist))); + playlistRepository.getPinnedPlaylists(PreferenceUtil.getInstance(App.getInstance()).getServerId()).observe(owner, playlists -> isPinnedLive.postValue(playlists.contains(playlist))); return isPinnedLive; } diff --git a/app/src/main/java/com/cappielloantonio/play/viewmodel/SongListPageViewModel.java b/app/src/main/java/com/cappielloantonio/play/viewmodel/SongListPageViewModel.java index 3ebc9d2c..de03c689 100644 --- a/app/src/main/java/com/cappielloantonio/play/viewmodel/SongListPageViewModel.java +++ b/app/src/main/java/com/cappielloantonio/play/viewmodel/SongListPageViewModel.java @@ -6,6 +6,7 @@ import android.text.TextUtils; import androidx.annotation.NonNull; import androidx.fragment.app.FragmentActivity; import androidx.lifecycle.AndroidViewModel; +import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; @@ -47,7 +48,7 @@ public class SongListPageViewModel extends AndroidViewModel { downloadRepository = new DownloadRepository(application); } - public LiveData> getSongList(FragmentActivity activity) { + public LiveData> getSongList(LifecycleOwner owner) { songList = new MutableLiveData<>(new ArrayList<>()); switch (title) { @@ -67,10 +68,10 @@ public class SongListPageViewModel extends AndroidViewModel { songList = songRepository.getStarredSongs(false, -1); break; case Song.DOWNLOADED: - downloadRepository.getLiveDownload().observe(activity, downloads -> songList.setValue(MappingUtil.mapDownloadToSong(downloads))); + downloadRepository.getLiveDownload().observe(owner, downloads -> songList.setValue(MappingUtil.mapDownloadToSong(downloads))); break; case Song.FROM_ALBUM: - downloadRepository.getLiveDownloadFromAlbum(album.getId()).observe(activity, downloads -> songList.setValue(MappingUtil.mapDownloadToSong(downloads))); + downloadRepository.getLiveDownloadFromAlbum(album.getId()).observe(owner, downloads -> songList.setValue(MappingUtil.mapDownloadToSong(downloads))); break; }