In ViewModels passed the LifecycleOwner instead of the Activity

This commit is contained in:
CappielloAntonio 2022-01-02 16:19:16 +01:00
parent d2ad0188b7
commit 134d4e33e5
7 changed files with 53 additions and 45 deletions

View file

@ -28,7 +28,6 @@ import com.cappielloantonio.play.ui.activity.MainActivity;
import com.cappielloantonio.play.viewmodel.PlaylistCatalogueViewModel; import com.cappielloantonio.play.viewmodel.PlaylistCatalogueViewModel;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
public class PlaylistCatalogueFragment extends Fragment { public class PlaylistCatalogueFragment extends Fragment {
@ -111,8 +110,11 @@ public class PlaylistCatalogueFragment extends Fragment {
playlistCatalogueAdapter = new PlaylistCatalogueAdapter(activity, requireContext(), playlistCatalogueViewModel.getType().equals(Playlist.DOWNLOADED)); playlistCatalogueAdapter = new PlaylistCatalogueAdapter(activity, requireContext(), playlistCatalogueViewModel.getType().equals(Playlist.DOWNLOADED));
bind.playlistCatalogueRecyclerView.setAdapter(playlistCatalogueAdapter); bind.playlistCatalogueRecyclerView.setAdapter(playlistCatalogueAdapter);
playlistCatalogueViewModel.getPlaylistList(requireActivity()).observe(requireActivity(), playlists -> {
playlistCatalogueViewModel.getPinnedPlaylistList(requireActivity()).observe(requireActivity(), pinnedPlaylists -> { if(getActivity() != null) {
playlistCatalogueViewModel.getPlaylistList(requireActivity()).observe(requireActivity(), playlists ->
playlistCatalogueViewModel.getPinnedPlaylistList(requireActivity()).observe(requireActivity(),
pinnedPlaylists -> {
List<Playlist> sortedList = new ArrayList<>(); List<Playlist> sortedList = new ArrayList<>();
List<Playlist> unsortedList = new ArrayList<>(playlists); List<Playlist> unsortedList = new ArrayList<>(playlists);
@ -135,8 +137,8 @@ public class PlaylistCatalogueFragment extends Fragment {
playlistCatalogueAdapter.setItems(sortedList); playlistCatalogueAdapter.setItems(sortedList);
playlistCatalogueViewModel.unpinPlaylist(pinnedPlaylistsNotFound); playlistCatalogueViewModel.unpinPlaylist(pinnedPlaylistsNotFound);
}); }));
}); }
bind.playlistCatalogueRecyclerView.setOnTouchListener((v, event) -> { bind.playlistCatalogueRecyclerView.setOnTouchListener((v, event) -> {
hideKeyboard(v); hideKeyboard(v);

View file

@ -5,6 +5,7 @@ import android.app.Application;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.LiveData; import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.MutableLiveData;
@ -33,27 +34,27 @@ public class AlbumListPageViewModel extends AndroidViewModel {
downloadRepository = new DownloadRepository(application); downloadRepository = new DownloadRepository(application);
} }
public LiveData<List<Album>> getAlbumList(FragmentActivity activity) { public LiveData<List<Album>> getAlbumList(LifecycleOwner owner) {
albumList = new MutableLiveData<>(new ArrayList<>()); albumList = new MutableLiveData<>(new ArrayList<>());
switch (title) { switch (title) {
case Album.RECENTLY_PLAYED: 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; break;
case Album.MOST_PLAYED: 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; break;
case Album.RECENTLY_ADDED: 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; break;
case Album.STARRED: case Album.STARRED:
albumList = albumRepository.getStarredAlbums(false, -1); albumList = albumRepository.getStarredAlbums(false, -1);
break; break;
case Album.DOWNLOADED: case Album.DOWNLOADED:
downloadRepository.getLiveDownload().observe(activity, downloads -> albumList.setValue(MappingUtil.mapDownloadToAlbum(downloads))); downloadRepository.getLiveDownload().observe(owner, downloads -> albumList.setValue(MappingUtil.mapDownloadToAlbum(downloads)));
break; break;
case Album.FROM_ARTIST: 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; break;
} }

View file

@ -5,6 +5,7 @@ import android.app.Application;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.LiveData; import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.MutableLiveData;
@ -36,9 +37,9 @@ public class AlbumPageViewModel extends AndroidViewModel {
downloadRepository = new DownloadRepository(application); downloadRepository = new DownloadRepository(application);
} }
public LiveData<List<Song>> getAlbumSongLiveList(FragmentActivity activity) { public LiveData<List<Song>> getAlbumSongLiveList(LifecycleOwner owner) {
if (isOffline) { 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 { } else {
songLiveList = albumRepository.getAlbumTracks(album.getId()); songLiveList = albumRepository.getAlbumTracks(album.getId());
} }

View file

@ -5,6 +5,7 @@ import android.app.Application;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.LiveData; import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.MutableLiveData;
@ -35,7 +36,7 @@ public class ArtistListPageViewModel extends AndroidViewModel {
downloadRepository = new DownloadRepository(application); downloadRepository = new DownloadRepository(application);
} }
public LiveData<List<Artist>> getArtistList(FragmentActivity activity) { public LiveData<List<Artist>> getArtistList(LifecycleOwner owner) {
artistList = new MutableLiveData<>(new ArrayList<>()); artistList = new MutableLiveData<>(new ArrayList<>());
switch (title) { switch (title) {
@ -43,7 +44,7 @@ public class ArtistListPageViewModel extends AndroidViewModel {
artistList = artistRepository.getStarredArtists(false, -1); artistList = artistRepository.getStarredArtists(false, -1);
break; break;
case Artist.DOWNLOADED: case Artist.DOWNLOADED:
downloadRepository.getLiveDownload().observe(activity, downloads -> { downloadRepository.getLiveDownload().observe(owner, downloads -> {
List<Download> unique = downloads List<Download> unique = downloads
.stream() .stream()
.collect(Collectors.collectingAndThen( .collect(Collectors.collectingAndThen(

View file

@ -5,6 +5,7 @@ import android.app.Application;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.LiveData; import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.MutableLiveData;
@ -34,15 +35,15 @@ public class PlaylistCatalogueViewModel extends AndroidViewModel {
downloadRepository = new DownloadRepository(application); downloadRepository = new DownloadRepository(application);
} }
public LiveData<List<Playlist>> getPlaylistList(FragmentActivity activity) { public LiveData<List<Playlist>> getPlaylistList(LifecycleOwner owner) {
playlistList = new MutableLiveData<>(new ArrayList<>()); playlistList = new MutableLiveData<>(new ArrayList<>());
switch (type) { switch (type) {
case Playlist.ALL: case Playlist.ALL:
playlistRepository.getPlaylists(false, -1).observe(activity, playlists -> playlistList.postValue(playlists)); playlistRepository.getPlaylists(false, -1).observe(owner, playlists -> playlistList.postValue(playlists));
break; break;
case Playlist.DOWNLOADED: case Playlist.DOWNLOADED:
downloadRepository.getLivePlaylist().observe(activity, downloads -> playlistList.setValue(MappingUtil.mapDownloadToPlaylist(downloads))); downloadRepository.getLivePlaylist().observe(owner, downloads -> playlistList.setValue(MappingUtil.mapDownloadToPlaylist(downloads)));
break; break;
} }
@ -51,9 +52,9 @@ public class PlaylistCatalogueViewModel extends AndroidViewModel {
return playlistList; return playlistList;
} }
public LiveData<List<Playlist>> getPinnedPlaylistList(FragmentActivity activity) { public LiveData<List<Playlist>> getPinnedPlaylistList(LifecycleOwner owner) {
pinnedPlaylistList = new MutableLiveData<>(new ArrayList<>()); 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; return pinnedPlaylistList;
} }

View file

@ -5,6 +5,7 @@ import android.app.Application;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.LiveData; import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.MutableLiveData;
@ -34,9 +35,9 @@ public class PlaylistPageViewModel extends AndroidViewModel {
downloadRepository = new DownloadRepository(application); downloadRepository = new DownloadRepository(application);
} }
public LiveData<List<Song>> getPlaylistSongLiveList(FragmentActivity activity) { public LiveData<List<Song>> getPlaylistSongLiveList(LifecycleOwner owner) {
if (isOffline) { 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 { } else {
playlistSongLiveList = playlistRepository.getPlaylistSongs(playlist.getId()); playlistSongLiveList = playlistRepository.getPlaylistSongs(playlist.getId());
} }
@ -61,9 +62,9 @@ public class PlaylistPageViewModel extends AndroidViewModel {
return isOffline; return isOffline;
} }
public LiveData<Boolean> isPinned(FragmentActivity activity) { public LiveData<Boolean> isPinned(LifecycleOwner owner) {
MutableLiveData<Boolean> isPinnedLive = new MutableLiveData<>(); MutableLiveData<Boolean> 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; return isPinnedLive;
} }

View file

@ -6,6 +6,7 @@ import android.text.TextUtils;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.LiveData; import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.MutableLiveData;
@ -47,7 +48,7 @@ public class SongListPageViewModel extends AndroidViewModel {
downloadRepository = new DownloadRepository(application); downloadRepository = new DownloadRepository(application);
} }
public LiveData<List<Song>> getSongList(FragmentActivity activity) { public LiveData<List<Song>> getSongList(LifecycleOwner owner) {
songList = new MutableLiveData<>(new ArrayList<>()); songList = new MutableLiveData<>(new ArrayList<>());
switch (title) { switch (title) {
@ -67,10 +68,10 @@ public class SongListPageViewModel extends AndroidViewModel {
songList = songRepository.getStarredSongs(false, -1); songList = songRepository.getStarredSongs(false, -1);
break; break;
case Song.DOWNLOADED: case Song.DOWNLOADED:
downloadRepository.getLiveDownload().observe(activity, downloads -> songList.setValue(MappingUtil.mapDownloadToSong(downloads))); downloadRepository.getLiveDownload().observe(owner, downloads -> songList.setValue(MappingUtil.mapDownloadToSong(downloads)));
break; break;
case Song.FROM_ALBUM: 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; break;
} }