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 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<Playlist> sortedList = new ArrayList<>();
List<Playlist> unsortedList = new ArrayList<>(playlists);
List<Playlist> pinnedPlaylistsVerified = new ArrayList<>();
List<Playlist> pinnedPlaylistsNotFound = new ArrayList<>();
if(getActivity() != null) {
playlistCatalogueViewModel.getPlaylistList(requireActivity()).observe(requireActivity(), playlists ->
playlistCatalogueViewModel.getPinnedPlaylistList(requireActivity()).observe(requireActivity(),
pinnedPlaylists -> {
List<Playlist> sortedList = new ArrayList<>();
List<Playlist> unsortedList = new ArrayList<>(playlists);
if(unsortedList.size() > 0) {
for(Playlist pinnedPlaylist: pinnedPlaylists) {
if(playlists.contains(pinnedPlaylist)) {
pinnedPlaylistsVerified.add(pinnedPlaylist);
} else {
pinnedPlaylistsNotFound.add(pinnedPlaylist);
}
}
List<Playlist> pinnedPlaylistsVerified = new ArrayList<>();
List<Playlist> 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);

View file

@ -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<List<Album>> getAlbumList(FragmentActivity activity) {
public LiveData<List<Album>> 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;
}

View file

@ -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<List<Song>> getAlbumSongLiveList(FragmentActivity activity) {
public LiveData<List<Song>> 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());
}

View file

@ -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<List<Artist>> getArtistList(FragmentActivity activity) {
public LiveData<List<Artist>> 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<Download> unique = downloads
.stream()
.collect(Collectors.collectingAndThen(

View file

@ -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<List<Playlist>> getPlaylistList(FragmentActivity activity) {
public LiveData<List<Playlist>> 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<List<Playlist>> getPinnedPlaylistList(FragmentActivity activity) {
public LiveData<List<Playlist>> 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;
}

View file

@ -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<List<Song>> getPlaylistSongLiveList(FragmentActivity activity) {
public LiveData<List<Song>> 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<Boolean> isPinned(FragmentActivity activity) {
public LiveData<Boolean> isPinned(LifecycleOwner owner) {
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;
}

View file

@ -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<List<Song>> getSongList(FragmentActivity activity) {
public LiveData<List<Song>> 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;
}