From b5eaa1e5238ffb4a52291e5e1d9ff4b0cde3c19a Mon Sep 17 00:00:00 2001 From: CappielloAntonio Date: Fri, 30 Jul 2021 17:12:08 +0200 Subject: [PATCH] Implementation of song/album/artist page list --- .../play/adapter/AlbumHorizontalAdapter.java | 2 + .../play/adapter/ArtistHorizontalAdapter.java | 2 + .../play/database/dao/DownloadDao.java | 2 +- .../cappielloantonio/play/model/Album.java | 5 + .../cappielloantonio/play/model/Artist.java | 2 + .../com/cappielloantonio/play/model/Song.java | 3 +- .../play/repository/DownloadRepository.java | 39 +++++- .../ui/fragment/AlbumListPageFragment.java | 111 ++++++++++++++++++ .../ui/fragment/ArtistListPageFragment.java | 93 +++++++++++++++ .../play/ui/fragment/HomeFragment.java | 30 ++--- .../ui/fragment/SongListPageFragment.java | 21 ++-- .../viewmodel/AlbumListPageViewModel.java | 63 ++++++++++ .../viewmodel/ArtistListPageViewModel.java | 44 +++++++ .../play/viewmodel/SongListPageViewModel.java | 25 +++- .../res/layout/fragment_album_list_page.xml | 62 ++++++++++ .../res/layout/fragment_artist_list_page.xml | 62 ++++++++++ app/src/main/res/navigation/nav_graph.xml | 24 ++++ 17 files changed, 550 insertions(+), 40 deletions(-) create mode 100644 app/src/main/java/com/cappielloantonio/play/ui/fragment/AlbumListPageFragment.java create mode 100644 app/src/main/java/com/cappielloantonio/play/ui/fragment/ArtistListPageFragment.java create mode 100644 app/src/main/java/com/cappielloantonio/play/viewmodel/AlbumListPageViewModel.java create mode 100644 app/src/main/java/com/cappielloantonio/play/viewmodel/ArtistListPageViewModel.java create mode 100644 app/src/main/res/layout/fragment_album_list_page.xml create mode 100644 app/src/main/res/layout/fragment_artist_list_page.xml diff --git a/app/src/main/java/com/cappielloantonio/play/adapter/AlbumHorizontalAdapter.java b/app/src/main/java/com/cappielloantonio/play/adapter/AlbumHorizontalAdapter.java index ba3dbe17..17d99ce6 100644 --- a/app/src/main/java/com/cappielloantonio/play/adapter/AlbumHorizontalAdapter.java +++ b/app/src/main/java/com/cappielloantonio/play/adapter/AlbumHorizontalAdapter.java @@ -107,6 +107,8 @@ public class AlbumHorizontalAdapter extends RecyclerView.Adapter> getAll(); + List getAll(); @Query("SELECT * FROM download LIMIT :size") LiveData> getSample(int size); diff --git a/app/src/main/java/com/cappielloantonio/play/model/Album.java b/app/src/main/java/com/cappielloantonio/play/model/Album.java index 1f019e2a..01336c27 100644 --- a/app/src/main/java/com/cappielloantonio/play/model/Album.java +++ b/app/src/main/java/com/cappielloantonio/play/model/Album.java @@ -14,6 +14,11 @@ import com.cappielloantonio.play.subsonic.models.AlbumID3; public class Album implements Parcelable { private static final String TAG = "Album"; + public static final String RECENTLY_PLAYED = "RECENTLY_PLAYED"; + public static final String MOST_PLAYED = "MOST_PLAYED"; + public static final String RECENTLY_ADDED = "RECENTLY_ADDED"; + public static final String STARRED = "STARRED"; + public String id; public String title; public int year; diff --git a/app/src/main/java/com/cappielloantonio/play/model/Artist.java b/app/src/main/java/com/cappielloantonio/play/model/Artist.java index f3f20a53..c7e4ccbe 100644 --- a/app/src/main/java/com/cappielloantonio/play/model/Artist.java +++ b/app/src/main/java/com/cappielloantonio/play/model/Artist.java @@ -21,6 +21,8 @@ import java.util.List; public class Artist implements Parcelable { private static final String TAG = "Artist"; + public static final String STARRED = "STARRED"; + public List genres; public List albums; public List songs; diff --git a/app/src/main/java/com/cappielloantonio/play/model/Song.java b/app/src/main/java/com/cappielloantonio/play/model/Song.java index 8636e196..fb78e34c 100644 --- a/app/src/main/java/com/cappielloantonio/play/model/Song.java +++ b/app/src/main/java/com/cappielloantonio/play/model/Song.java @@ -25,9 +25,8 @@ public class Song implements Parcelable { public static final String BY_GENRES = "BY_GENRES"; public static final String BY_ARTIST = "BY_ARTIST"; public static final String BY_YEAR = "BY_YEAR"; - public static final String IS_FAVORITE = "IS_FAVORITE"; + public static final String STARRED = "STARRED"; public static final String DOWNLOADED = "DOWNLOADED"; - public static final String RADIO = "RADIO"; private String id; private String title; diff --git a/app/src/main/java/com/cappielloantonio/play/repository/DownloadRepository.java b/app/src/main/java/com/cappielloantonio/play/repository/DownloadRepository.java index 545670d5..57f7d92e 100644 --- a/app/src/main/java/com/cappielloantonio/play/repository/DownloadRepository.java +++ b/app/src/main/java/com/cappielloantonio/play/repository/DownloadRepository.java @@ -3,6 +3,7 @@ package com.cappielloantonio.play.repository; import android.app.Application; import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; import com.cappielloantonio.play.database.AppDatabase; import com.cappielloantonio.play.database.dao.DownloadDao; @@ -20,7 +21,7 @@ public class DownloadRepository { private static final String TAG = "QueueRepository"; private DownloadDao downloadDao; - private LiveData> listLiveDownload; + private MutableLiveData> listLiveDownload = new MutableLiveData<>(new ArrayList<>()); private LiveData> listLiveDownloadSample; public DownloadRepository(Application application) { @@ -28,9 +29,39 @@ public class DownloadRepository { downloadDao = database.downloadDao(); } - public LiveData> getLiveDownload() { - listLiveDownload = downloadDao.getAll(); - return listLiveDownload; + public List getLiveDownload() { + List downloads = new ArrayList<>(); + + GetDownloadThreadSafe getDownloads = new GetDownloadThreadSafe(downloadDao); + Thread thread = new Thread(getDownloads); + thread.start(); + + try { + thread.join(); + downloads = getDownloads.getDownloads(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + return downloads; + } + + private static class GetDownloadThreadSafe implements Runnable { + private DownloadDao downloadDao; + private List downloads; + + public GetDownloadThreadSafe(DownloadDao downloadDao) { + this.downloadDao = downloadDao; + } + + @Override + public void run() { + downloads = downloadDao.getAll(); + } + + public List getDownloads() { + return downloads; + } } public LiveData> getLiveDownloadSample(int size) { diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/AlbumListPageFragment.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/AlbumListPageFragment.java new file mode 100644 index 00000000..e68b7aac --- /dev/null +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/AlbumListPageFragment.java @@ -0,0 +1,111 @@ +package com.cappielloantonio.play.ui.fragment; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.core.view.ViewCompat; +import androidx.fragment.app.Fragment; +import androidx.lifecycle.ViewModelProvider; +import androidx.recyclerview.widget.LinearLayoutManager; + +import com.cappielloantonio.play.App; +import com.cappielloantonio.play.adapter.AlbumHorizontalAdapter; +import com.cappielloantonio.play.adapter.SongHorizontalAdapter; +import com.cappielloantonio.play.databinding.FragmentAlbumListPageBinding; +import com.cappielloantonio.play.databinding.FragmentSongListPageBinding; +import com.cappielloantonio.play.model.Album; +import com.cappielloantonio.play.model.Song; +import com.cappielloantonio.play.repository.QueueRepository; +import com.cappielloantonio.play.service.MusicPlayerRemote; +import com.cappielloantonio.play.ui.activity.MainActivity; +import com.cappielloantonio.play.viewmodel.AlbumListPageViewModel; +import com.cappielloantonio.play.viewmodel.SongListPageViewModel; + +import java.util.Collections; + +public class AlbumListPageFragment extends Fragment { + private FragmentAlbumListPageBinding bind; + + private MainActivity activity; + private AlbumListPageViewModel albumListPageViewModel; + + private AlbumHorizontalAdapter albumHorizontalAdapter; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + activity = (MainActivity) getActivity(); + + bind = FragmentAlbumListPageBinding.inflate(inflater, container, false); + View view = bind.getRoot(); + albumListPageViewModel = new ViewModelProvider(requireActivity()).get(AlbumListPageViewModel.class); + + init(); + initAppBar(); + initAlbumListView(); + + return view; + } + + @Override + public void onStart() { + super.onStart(); + activity.setBottomNavigationBarVisibility(false); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + bind = null; + } + + private void init() { + if(getArguments().getString(Album.RECENTLY_PLAYED) != null) { + albumListPageViewModel.title = Album.RECENTLY_PLAYED; + bind.pageTitleLabel.setText("Recently played albums"); + } + else if(getArguments().getString(Album.MOST_PLAYED) != null) { + albumListPageViewModel.title = Album.MOST_PLAYED; + bind.pageTitleLabel.setText("Most played albums"); + } + else if(getArguments().getString(Album.RECENTLY_ADDED) != null) { + albumListPageViewModel.title = Album.RECENTLY_ADDED; + bind.pageTitleLabel.setText("Recently added albums"); + } + else if(getArguments().getString(Album.STARRED) != null) { + albumListPageViewModel.title = Album.STARRED; + bind.pageTitleLabel.setText("Starred albums"); + } + } + + private void initAppBar() { + activity.setSupportActionBar(bind.toolbar); + + if (activity.getSupportActionBar() != null) { + activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true); + activity.getSupportActionBar().setDisplayShowHomeEnabled(true); + } + + bind.toolbar.setNavigationOnClickListener(v -> { + activity.navController.navigateUp(); + }); + + bind.appBarLayout.addOnOffsetChangedListener((appBarLayout, verticalOffset) -> { + if ((bind.albumInfoSector.getHeight() + verticalOffset) < (2 * ViewCompat.getMinimumHeight(bind.toolbar))) { + bind.toolbar.setTitle("Albums"); + } else { + bind.toolbar.setTitle(""); + } + }); + } + + private void initAlbumListView() { + bind.albumListRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext())); + bind.albumListRecyclerView.setHasFixedSize(true); + + albumHorizontalAdapter = new AlbumHorizontalAdapter(activity, requireContext(), getChildFragmentManager()); + bind.albumListRecyclerView.setAdapter(albumHorizontalAdapter); + albumListPageViewModel.getAlbumList(requireActivity()).observe(requireActivity(), albums -> albumHorizontalAdapter.setItems(albums)); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/ArtistListPageFragment.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/ArtistListPageFragment.java new file mode 100644 index 00000000..084281a4 --- /dev/null +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/ArtistListPageFragment.java @@ -0,0 +1,93 @@ +package com.cappielloantonio.play.ui.fragment; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.core.view.ViewCompat; +import androidx.fragment.app.Fragment; +import androidx.lifecycle.ViewModelProvider; +import androidx.recyclerview.widget.LinearLayoutManager; + +import com.cappielloantonio.play.adapter.AlbumHorizontalAdapter; +import com.cappielloantonio.play.adapter.ArtistHorizontalAdapter; +import com.cappielloantonio.play.databinding.FragmentAlbumListPageBinding; +import com.cappielloantonio.play.databinding.FragmentArtistListPageBinding; +import com.cappielloantonio.play.model.Album; +import com.cappielloantonio.play.ui.activity.MainActivity; +import com.cappielloantonio.play.viewmodel.AlbumListPageViewModel; +import com.cappielloantonio.play.viewmodel.ArtistListPageViewModel; + +public class ArtistListPageFragment extends Fragment { + private FragmentArtistListPageBinding bind; + + private MainActivity activity; + private ArtistListPageViewModel artistListPageViewModel; + + private ArtistHorizontalAdapter artistHorizontalAdapter; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + activity = (MainActivity) getActivity(); + + bind = FragmentArtistListPageBinding.inflate(inflater, container, false); + View view = bind.getRoot(); + artistListPageViewModel = new ViewModelProvider(requireActivity()).get(ArtistListPageViewModel.class); + + init(); + initAppBar(); + initArtistListView(); + + return view; + } + + @Override + public void onStart() { + super.onStart(); + activity.setBottomNavigationBarVisibility(false); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + bind = null; + } + + private void init() { + if(getArguments().getString(Album.STARRED) != null) { + artistListPageViewModel.title = Album.STARRED; + bind.pageTitleLabel.setText("Starred artists"); + } + } + + private void initAppBar() { + activity.setSupportActionBar(bind.toolbar); + + if (activity.getSupportActionBar() != null) { + activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true); + activity.getSupportActionBar().setDisplayShowHomeEnabled(true); + } + + bind.toolbar.setNavigationOnClickListener(v -> { + activity.navController.navigateUp(); + }); + + bind.appBarLayout.addOnOffsetChangedListener((appBarLayout, verticalOffset) -> { + if ((bind.artistInfoSector.getHeight() + verticalOffset) < (2 * ViewCompat.getMinimumHeight(bind.toolbar))) { + bind.toolbar.setTitle("Artists"); + } else { + bind.toolbar.setTitle(""); + } + }); + } + + private void initArtistListView() { + bind.artistListRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext())); + bind.artistListRecyclerView.setHasFixedSize(true); + + artistHorizontalAdapter = new ArtistHorizontalAdapter(activity, requireContext(), getChildFragmentManager()); + bind.artistListRecyclerView.setAdapter(artistHorizontalAdapter); + artistListPageViewModel.getArtistList().observe(requireActivity(), artists -> artistHorizontalAdapter.setItems(artists)); + } +} \ No newline at end of file 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 55024312..c9a6b932 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 @@ -4,7 +4,6 @@ import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -25,15 +24,14 @@ import com.cappielloantonio.play.adapter.RecentMusicAdapter; import com.cappielloantonio.play.adapter.SongHorizontalAdapter; import com.cappielloantonio.play.adapter.YearAdapter; import com.cappielloantonio.play.databinding.FragmentHomeBinding; -import com.cappielloantonio.play.interfaces.MediaCallback; +import com.cappielloantonio.play.model.Album; +import com.cappielloantonio.play.model.Artist; import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.ui.activity.MainActivity; import com.cappielloantonio.play.util.MappingUtil; import com.cappielloantonio.play.util.UIUtil; import com.cappielloantonio.play.viewmodel.HomeViewModel; -import java.util.List; - public class HomeFragment extends Fragment { private static final String TAG = "CategoriesFragment"; @@ -98,38 +96,38 @@ public class HomeFragment extends Fragment { private void init() { bind.recentlyAddedAlbumsTextViewClickable.setOnClickListener(v -> { Bundle bundle = new Bundle(); - bundle.putString(Song.RECENTLY_ADDED, Song.RECENTLY_ADDED); - activity.navController.navigate(R.id.action_homeFragment_to_songListPageFragment, bundle); + bundle.putString(Album.RECENTLY_ADDED, Album.RECENTLY_ADDED); + activity.navController.navigate(R.id.action_homeFragment_to_albumListPageFragment, bundle); }); bind.recentlyPlayedAlbumsTextViewClickable.setOnClickListener(v -> { Bundle bundle = new Bundle(); - bundle.putString(Song.RECENTLY_PLAYED, Song.RECENTLY_PLAYED); - activity.navController.navigate(R.id.action_homeFragment_to_songListPageFragment, bundle); + bundle.putString(Album.RECENTLY_PLAYED, Album.RECENTLY_PLAYED); + activity.navController.navigate(R.id.action_homeFragment_to_albumListPageFragment, bundle); }); bind.mostPlayedAlbumsTextViewClickable.setOnClickListener(v -> { Bundle bundle = new Bundle(); - bundle.putString(Song.MOST_PLAYED, Song.MOST_PLAYED); - activity.navController.navigate(R.id.action_homeFragment_to_songListPageFragment, bundle); + bundle.putString(Album.MOST_PLAYED, Album.MOST_PLAYED); + activity.navController.navigate(R.id.action_homeFragment_to_albumListPageFragment, bundle); }); bind.starredTracksTextViewClickable.setOnClickListener(v -> { Bundle bundle = new Bundle(); - bundle.putString(Song.IS_FAVORITE, Song.IS_FAVORITE); + bundle.putString(Song.STARRED, Song.STARRED); activity.navController.navigate(R.id.action_homeFragment_to_songListPageFragment, bundle); }); bind.starredAlbumsTextViewClickable.setOnClickListener(v -> { Bundle bundle = new Bundle(); - bundle.putString(Song.IS_FAVORITE, Song.IS_FAVORITE); - activity.navController.navigate(R.id.action_homeFragment_to_songListPageFragment, bundle); + bundle.putString(Album.STARRED, Album.STARRED); + activity.navController.navigate(R.id.action_homeFragment_to_albumListPageFragment, bundle); }); bind.starredArtistsTextViewClickable.setOnClickListener(v -> { Bundle bundle = new Bundle(); - bundle.putString(Song.IS_FAVORITE, Song.IS_FAVORITE); - activity.navController.navigate(R.id.action_homeFragment_to_songListPageFragment, bundle); + bundle.putString(Artist.STARRED, Artist.STARRED); + activity.navController.navigate(R.id.action_homeFragment_to_artistListPageFragment, bundle); }); bind.downloadedTracksTextViewClickable.setOnClickListener(v -> { @@ -180,6 +178,8 @@ public class HomeFragment extends Fragment { } private void initYearSongView() { + if(bind != null) bind.homeFlashbackSector.setVisibility(!homeViewModel.getYearList().isEmpty() ? View.VISIBLE : View.GONE); + bind.yearsRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false)); bind.yearsRecyclerView.setHasFixedSize(true); diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/SongListPageFragment.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/SongListPageFragment.java index 29c70c35..3a4782a5 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/SongListPageFragment.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/SongListPageFragment.java @@ -60,25 +60,25 @@ public class SongListPageFragment extends Fragment { private void init() { if(getArguments().getString(Song.RECENTLY_PLAYED) != null) { songListPageViewModel.title = Song.RECENTLY_PLAYED; - bind.pageTitleLabel.setText("Recently played songs"); + bind.pageTitleLabel.setText("Recently played tracks"); } else if(getArguments().getString(Song.MOST_PLAYED) != null) { songListPageViewModel.title = Song.MOST_PLAYED; - bind.pageTitleLabel.setText("Most played songs"); + bind.pageTitleLabel.setText("Most played tracks"); } else if(getArguments().getString(Song.RECENTLY_ADDED) != null) { songListPageViewModel.title = Song.RECENTLY_ADDED; - bind.pageTitleLabel.setText("Recently added song"); + bind.pageTitleLabel.setText("Recently added tracks"); } else if(getArguments().getString(Song.BY_GENRE) != null) { songListPageViewModel.title = Song.BY_GENRE; songListPageViewModel.genre = getArguments().getParcelable("genre_object"); - bind.pageTitleLabel.setText(songListPageViewModel.genre.getName() + ": all songs"); + bind.pageTitleLabel.setText(songListPageViewModel.genre.getName() + ": all tracks"); } else if(getArguments().getString(Song.BY_ARTIST) != null) { songListPageViewModel.title = Song.BY_ARTIST; songListPageViewModel.artist = getArguments().getParcelable("artist_object"); - bind.pageTitleLabel.setText(songListPageViewModel.artist.getName() + "'s top songs"); + bind.pageTitleLabel.setText(songListPageViewModel.artist.getName() + "'s top tracks"); } else if(getArguments().getString(Song.BY_GENRES) != null) { songListPageViewModel.title = Song.BY_GENRES; @@ -91,19 +91,14 @@ public class SongListPageFragment extends Fragment { songListPageViewModel.year = getArguments().getInt("year_object"); bind.pageTitleLabel.setText("Year " + songListPageViewModel.year); } - else if(getArguments().getString(Song.IS_FAVORITE) != null) { - songListPageViewModel.title = Song.IS_FAVORITE; - bind.pageTitleLabel.setText("Favourite song"); + else if(getArguments().getString(Song.STARRED) != null) { + songListPageViewModel.title = Song.STARRED; + bind.pageTitleLabel.setText("Starred tracks"); } else if(getArguments().getString(Song.DOWNLOADED) != null) { songListPageViewModel.title = Song.DOWNLOADED; bind.pageTitleLabel.setText("Downloaded"); } - else if(getArguments().getString(Song.RADIO) != null) { - songListPageViewModel.title = Song.IS_FAVORITE; - songListPageViewModel.year = getArguments().getInt("radio_object"); - bind.pageTitleLabel.setText("Radio"); - } } private void initAppBar() { diff --git a/app/src/main/java/com/cappielloantonio/play/viewmodel/AlbumListPageViewModel.java b/app/src/main/java/com/cappielloantonio/play/viewmodel/AlbumListPageViewModel.java new file mode 100644 index 00000000..6f90c074 --- /dev/null +++ b/app/src/main/java/com/cappielloantonio/play/viewmodel/AlbumListPageViewModel.java @@ -0,0 +1,63 @@ +package com.cappielloantonio.play.viewmodel; + +import android.app.Application; +import android.text.TextUtils; + +import androidx.annotation.NonNull; +import androidx.fragment.app.FragmentActivity; +import androidx.lifecycle.AndroidViewModel; +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; + +import com.cappielloantonio.play.model.Album; +import com.cappielloantonio.play.model.Artist; +import com.cappielloantonio.play.model.Genre; +import com.cappielloantonio.play.model.Song; +import com.cappielloantonio.play.repository.AlbumRepository; +import com.cappielloantonio.play.repository.DownloadRepository; +import com.cappielloantonio.play.repository.SongRepository; +import com.cappielloantonio.play.util.MappingUtil; + +import java.util.ArrayList; +import java.util.List; + +public class AlbumListPageViewModel extends AndroidViewModel { + private AlbumRepository albumRepository; + + public String title; + + private MutableLiveData> albumList; + + public AlbumListPageViewModel(@NonNull Application application) { + super(application); + + albumRepository = new AlbumRepository(application); + } + + public LiveData> getAlbumList(FragmentActivity activity) { + albumList = new MutableLiveData<>(new ArrayList<>()); + + switch (title) { + case Song.RECENTLY_PLAYED: + albumRepository.getAlbums("recent", 500).observe(activity, albums -> { + albumList.setValue(albums); + }); + break; + case Song.MOST_PLAYED: + albumRepository.getAlbums("frequent", 500).observe(activity, albums -> { + albumList.setValue(albums); + }); + break; + case Song.RECENTLY_ADDED: + albumRepository.getAlbums("newest", 500).observe(activity, albums -> { + albumList.setValue(albums); + }); + break; + case Song.STARRED: + albumList = albumRepository.getStarredAlbums(); + break; + } + + return albumList; + } +} diff --git a/app/src/main/java/com/cappielloantonio/play/viewmodel/ArtistListPageViewModel.java b/app/src/main/java/com/cappielloantonio/play/viewmodel/ArtistListPageViewModel.java new file mode 100644 index 00000000..d44e8c63 --- /dev/null +++ b/app/src/main/java/com/cappielloantonio/play/viewmodel/ArtistListPageViewModel.java @@ -0,0 +1,44 @@ +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; + +import com.cappielloantonio.play.model.Album; +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 java.util.ArrayList; +import java.util.List; + +public class ArtistListPageViewModel extends AndroidViewModel { + private ArtistRepository artistRepository; + + public String title; + + private MutableLiveData> artistList; + + public ArtistListPageViewModel(@NonNull Application application) { + super(application); + + artistRepository = new ArtistRepository(application); + } + + public LiveData> getArtistList() { + artistList = new MutableLiveData<>(new ArrayList<>()); + + switch (title) { + case Song.STARRED: + artistList = artistRepository.getStarredArtists(); + break; + } + + return artistList; + } +} 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 3ff9a350..709f2c30 100644 --- a/app/src/main/java/com/cappielloantonio/play/viewmodel/SongListPageViewModel.java +++ b/app/src/main/java/com/cappielloantonio/play/viewmodel/SongListPageViewModel.java @@ -1,37 +1,52 @@ package com.cappielloantonio.play.viewmodel; import android.app.Application; +import android.content.Context; import android.text.TextUtils; +import android.view.View; import androidx.annotation.NonNull; import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; +import com.cappielloantonio.play.App; import com.cappielloantonio.play.model.Artist; +import com.cappielloantonio.play.model.Download; import com.cappielloantonio.play.model.Genre; import com.cappielloantonio.play.model.Song; +import com.cappielloantonio.play.repository.DownloadRepository; import com.cappielloantonio.play.repository.SongRepository; +import com.cappielloantonio.play.util.MappingUtil; import java.util.ArrayList; import java.util.List; public class SongListPageViewModel extends AndroidViewModel { + private SongRepository songRepository; + private DownloadRepository downloadRepository; + public String title; public Genre genre; public Artist artist; + public ArrayList filters = new ArrayList<>(); public ArrayList filterNames = new ArrayList<>(); + public int year = 0; - private SongRepository songRepository; - private LiveData> songList; + + private MutableLiveData> songList; public SongListPageViewModel(@NonNull Application application) { super(application); songRepository = new SongRepository(application); + downloadRepository = new DownloadRepository(application); } public LiveData> getSongList() { + songList = new MutableLiveData<>(new ArrayList<>()); + switch (title) { case Song.RECENTLY_PLAYED: // songList = songRepository.getListLiveRecentlyPlayedSampleSong(100); @@ -54,11 +69,11 @@ public class SongListPageViewModel extends AndroidViewModel { case Song.BY_YEAR: // songList = songRepository.getSongByYearListLive(year); break; - case Song.IS_FAVORITE: - // songList = songRepository.getListLiveFavoritesSong(); + case Song.STARRED: + songList = songRepository.getStarredSongs(); break; case Song.DOWNLOADED: - // songList = songRepository.getListLiveDownloadedSong(); + songList.setValue(MappingUtil.mapDownload(downloadRepository.getLiveDownload())); break; } diff --git a/app/src/main/res/layout/fragment_album_list_page.xml b/app/src/main/res/layout/fragment_album_list_page.xml new file mode 100644 index 00000000..d9cc27fd --- /dev/null +++ b/app/src/main/res/layout/fragment_album_list_page.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_artist_list_page.xml b/app/src/main/res/layout/fragment_artist_list_page.xml new file mode 100644 index 00000000..7aa51447 --- /dev/null +++ b/app/src/main/res/layout/fragment_artist_list_page.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml index 5e5f10fd..2f7c6dba 100644 --- a/app/src/main/res/navigation/nav_graph.xml +++ b/app/src/main/res/navigation/nav_graph.xml @@ -42,6 +42,12 @@ + + @@ -181,6 +187,24 @@ android:name="com.cappielloantonio.play.ui.fragment.SongListPageFragment" android:label="SongListPageFragment" tools:layout="@layout/fragment_song_list_page" /> + + + + + +