From 589c3289d4875b8d3212173158e5984a4172c1d3 Mon Sep 17 00:00:00 2001 From: CappielloAntonio Date: Thu, 2 Sep 2021 12:44:35 +0200 Subject: [PATCH] AlbumPageFragment now correctly retrieves information locally or from the server --- .../play/adapter/AlbumAdapter.java | 1 + .../AlbumArtistPageOrSimilarAdapter.java | 1 + .../play/adapter/AlbumCatalogueAdapter.java | 1 + .../play/adapter/AlbumHorizontalAdapter.java | 5 +++- .../ui/fragment/AlbumListPageFragment.java | 5 +++- .../play/ui/fragment/AlbumPageFragment.java | 7 +++--- .../play/ui/fragment/DownloadFragment.java | 2 +- .../play/ui/fragment/HomeFragment.java | 2 +- .../play/ui/fragment/LibraryFragment.java | 2 +- .../play/viewmodel/AlbumPageViewModel.java | 23 +++++++++++++++---- 10 files changed, 37 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/com/cappielloantonio/play/adapter/AlbumAdapter.java b/app/src/main/java/com/cappielloantonio/play/adapter/AlbumAdapter.java index 9ec3f6a8..090a97f3 100644 --- a/app/src/main/java/com/cappielloantonio/play/adapter/AlbumAdapter.java +++ b/app/src/main/java/com/cappielloantonio/play/adapter/AlbumAdapter.java @@ -93,6 +93,7 @@ public class AlbumAdapter extends RecyclerView.Adapter public void onClick(View view) { Bundle bundle = new Bundle(); bundle.putParcelable("album_object", albums.get(getBindingAdapterPosition())); + bundle.putBoolean("is_offline", false); if (Objects.requireNonNull(Navigation.findNavController(view).getCurrentDestination()).getId() == R.id.searchFragment) { Navigation.findNavController(view).navigate(R.id.action_searchFragment_to_albumPageFragment, bundle); diff --git a/app/src/main/java/com/cappielloantonio/play/adapter/AlbumArtistPageOrSimilarAdapter.java b/app/src/main/java/com/cappielloantonio/play/adapter/AlbumArtistPageOrSimilarAdapter.java index cbf94893..19510030 100644 --- a/app/src/main/java/com/cappielloantonio/play/adapter/AlbumArtistPageOrSimilarAdapter.java +++ b/app/src/main/java/com/cappielloantonio/play/adapter/AlbumArtistPageOrSimilarAdapter.java @@ -91,6 +91,7 @@ public class AlbumArtistPageOrSimilarAdapter extends RecyclerView.Adapter albums; private final LayoutInflater mInflater; private final Context context; + private final boolean isOffline; - public AlbumHorizontalAdapter(Context context) { + public AlbumHorizontalAdapter(Context context, boolean isOffline) { this.context = context; this.mInflater = LayoutInflater.from(context); this.albums = new ArrayList<>(); + this.isOffline = isOffline; } @NonNull @@ -96,6 +98,7 @@ public class AlbumHorizontalAdapter extends RecyclerView.Adapter albumHorizontalAdapter.setItems(albums)); } diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/AlbumPageFragment.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/AlbumPageFragment.java index b5687932..26b74a7b 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/AlbumPageFragment.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/AlbumPageFragment.java @@ -93,7 +93,7 @@ public class AlbumPageFragment extends Fragment { public boolean onOptionsItemSelected(@NonNull MenuItem item) { switch (item.getItemId()) { case R.id.action_download_album: - albumPageViewModel.getAlbumSongLiveList().observe(requireActivity(), songs -> { + albumPageViewModel.getAlbumSongLiveList(requireActivity()).observe(requireActivity(), songs -> { DownloadUtil.getDownloadTracker(requireContext()).toggleDownload(songs); }); return true; @@ -106,6 +106,7 @@ public class AlbumPageFragment extends Fragment { private void init() { albumPageViewModel.setAlbum(getArguments().getParcelable("album_object")); + albumPageViewModel.setOffline(getArguments().getBoolean("is_offline")); } private void initAppBar() { @@ -146,7 +147,7 @@ public class AlbumPageFragment extends Fragment { } private void initMusicButton() { - albumPageViewModel.getAlbumSongLiveList().observe(requireActivity(), songs -> { + albumPageViewModel.getAlbumSongLiveList(requireActivity()).observe(requireActivity(), songs -> { if (bind != null && !songs.isEmpty()) { bind.albumPagePlayButton.setOnClickListener(v -> { QueueRepository queueRepository = new QueueRepository(App.getInstance()); @@ -193,7 +194,7 @@ public class AlbumPageFragment extends Fragment { songHorizontalAdapter = new SongHorizontalAdapter(activity, requireContext(), false); bind.songRecyclerView.setAdapter(songHorizontalAdapter); - albumPageViewModel.getAlbumSongLiveList().observe(requireActivity(), songs -> { + albumPageViewModel.getAlbumSongLiveList(requireActivity()).observe(requireActivity(), songs -> { songHorizontalAdapter.setItems(songs); }); } diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/DownloadFragment.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/DownloadFragment.java index 007c2ba9..0d46e942 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/DownloadFragment.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/DownloadFragment.java @@ -182,7 +182,7 @@ public class DownloadFragment extends Fragment { private void initDownloadedAlbumView() { bind.downloadedAlbumRecyclerView.setHasFixedSize(true); - downloadedAlbumAdapter = new AlbumHorizontalAdapter(requireContext()); + downloadedAlbumAdapter = new AlbumHorizontalAdapter(requireContext(), true); bind.downloadedAlbumRecyclerView.setAdapter(downloadedAlbumAdapter); downloadViewModel.getDownloadedAlbums(requireActivity(), 20).observe(requireActivity(), albums -> { if (albums == null) { 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 bfa2cc0f..8f0064dc 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 @@ -367,7 +367,7 @@ public class HomeFragment extends Fragment { private void initStarredAlbumsView() { bind.starredAlbumsRecyclerView.setHasFixedSize(true); - starredAlbumAdapter = new AlbumHorizontalAdapter(requireContext()); + starredAlbumAdapter = new AlbumHorizontalAdapter(requireContext(), false); bind.starredAlbumsRecyclerView.setAdapter(starredAlbumAdapter); homeViewModel.getStarredAlbums(requireActivity()).observe(requireActivity(), albums -> { if (albums == null) { 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 40d38c7a..9cbf209d 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 @@ -146,7 +146,7 @@ public class LibraryFragment extends Fragment { private void initNewReleasesView() { bind.newReleasesRecyclerView.setHasFixedSize(true); - newRelesesAlbumAdapter = new AlbumHorizontalAdapter(requireContext()); + newRelesesAlbumAdapter = new AlbumHorizontalAdapter(requireContext(), false); bind.newReleasesRecyclerView.setAdapter(newRelesesAlbumAdapter); libraryViewModel.getRecentlyReleasedAlbums(requireActivity()).observe(requireActivity(), albums -> { if (albums == null) { 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 4d6b1d0b..e02a7782 100644 --- a/app/src/main/java/com/cappielloantonio/play/viewmodel/AlbumPageViewModel.java +++ b/app/src/main/java/com/cappielloantonio/play/viewmodel/AlbumPageViewModel.java @@ -3,6 +3,7 @@ package com.cappielloantonio.play.viewmodel; import android.app.Application; import androidx.annotation.NonNull; +import androidx.fragment.app.FragmentActivity; import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; @@ -12,28 +13,38 @@ import com.cappielloantonio.play.model.Artist; import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.repository.AlbumRepository; import com.cappielloantonio.play.repository.ArtistRepository; +import com.cappielloantonio.play.repository.DownloadRepository; import com.cappielloantonio.play.repository.SongRepository; +import com.cappielloantonio.play.util.MappingUtil; +import com.cappielloantonio.play.util.MusicUtil; import java.util.List; public class AlbumPageViewModel extends AndroidViewModel { private AlbumRepository albumRepository; private ArtistRepository artistRepository; + private DownloadRepository downloadRepository; - private LiveData> songLiveList = new MutableLiveData<>(); - private LiveData albumInfo = new MutableLiveData<>(); + private MutableLiveData> songLiveList = new MutableLiveData<>(); private Album album; + private boolean isOffline; public AlbumPageViewModel(@NonNull Application application) { super(application); albumRepository = new AlbumRepository(application); artistRepository = new ArtistRepository(application); + downloadRepository = new DownloadRepository(application); } - public LiveData> getAlbumSongLiveList() { - songLiveList = albumRepository.getAlbumTracks(album.getId()); + public LiveData> getAlbumSongLiveList(FragmentActivity activity) { + if(isOffline) { + downloadRepository.getLiveDownloadFromAlbum(album.getId()).observe(activity, downloads -> songLiveList.postValue(MappingUtil.mapDownloadToSong(downloads))); + } else { + songLiveList = albumRepository.getAlbumTracks(album.getId()); + } + return songLiveList; } @@ -45,6 +56,10 @@ public class AlbumPageViewModel extends AndroidViewModel { this.album = album; } + public void setOffline(boolean offline) { + isOffline = offline; + } + public LiveData getArtist() { return artistRepository.getArtistInfo(album.getArtistId()); }