From bf70863f84bcdd5ec4fbc1b27f111f23b91ffcee Mon Sep 17 00:00:00 2001 From: CappielloAntonio Date: Mon, 26 Apr 2021 19:37:05 +0200 Subject: [PATCH] Added download UI in home screen --- .../play/database/dao/SongDao.java | 6 +++ .../com/cappielloantonio/play/model/Song.java | 3 ++ .../play/repository/SongRepository.java | 13 ++++- .../play/ui/fragment/HomeFragment.java | 25 ++++++++- .../ui/fragment/SongListPageFragment.java | 4 ++ .../play/viewmodel/HomeViewModel.java | 6 +++ .../play/viewmodel/SongListPageViewModel.java | 3 ++ app/src/main/res/layout/fragment_home.xml | 52 +++++++++++++++++++ 8 files changed, 109 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/cappielloantonio/play/database/dao/SongDao.java b/app/src/main/java/com/cappielloantonio/play/database/dao/SongDao.java index 0c857e46..28eacd51 100644 --- a/app/src/main/java/com/cappielloantonio/play/database/dao/SongDao.java +++ b/app/src/main/java/com/cappielloantonio/play/database/dao/SongDao.java @@ -67,6 +67,12 @@ public interface SongDao { @Query("SELECT * FROM song WHERE favorite = 1") LiveData> getFavoriteSong(); + @Query("SELECT * FROM song WHERE offline = 1 ORDER BY RANDOM() LIMIT :number") + LiveData> getDownloadedSongSample(int number); + + @Query("SELECT * FROM song WHERE offline = 1") + LiveData> getDownloadedSong(); + @Insert(onConflict = OnConflictStrategy.REPLACE) void insertAll(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 1a695670..5f99ee87 100644 --- a/app/src/main/java/com/cappielloantonio/play/model/Song.java +++ b/app/src/main/java/com/cappielloantonio/play/model/Song.java @@ -48,6 +48,9 @@ public class Song implements Parcelable { @Ignore public static final String IS_FAVORITE = "IS_FAVORITE"; + @Ignore + public static final String DOWNLOADED = "DOWNLOADED"; + @Ignore public static final String RADIO = "RADIO"; diff --git a/app/src/main/java/com/cappielloantonio/play/repository/SongRepository.java b/app/src/main/java/com/cappielloantonio/play/repository/SongRepository.java index 82d9da81..6cbf5878 100644 --- a/app/src/main/java/com/cappielloantonio/play/repository/SongRepository.java +++ b/app/src/main/java/com/cappielloantonio/play/repository/SongRepository.java @@ -1,7 +1,6 @@ package com.cappielloantonio.play.repository; import android.app.Application; -import android.util.Log; import androidx.lifecycle.LiveData; @@ -33,6 +32,8 @@ public class SongRepository { private LiveData> listLiveSongByYear; private LiveData> listLiveSampleFavoritesSong; private LiveData> listLiveFavoritesSong; + private LiveData> listLiveSampleDownloadedSong; + private LiveData> listLiveDownloadedSong; public SongRepository(Application application) { AppDatabase database = AppDatabase.getInstance(application); @@ -314,6 +315,16 @@ public class SongRepository { return listLiveFavoritesSong; } + public LiveData> getListLiveDownloadedSampleSong(int number) { + listLiveSampleDownloadedSong = songDao.getDownloadedSongSample(number); + return listLiveSampleDownloadedSong; + } + + public LiveData> getListLiveDownloadedSong() { + listLiveDownloadedSong = songDao.getDownloadedSong(); + return listLiveDownloadedSong; + } + public void insertAll(ArrayList songs) { InsertAllThreadSafe insertAll = new InsertAllThreadSafe(songDao, songGenreCrossDao, songs); Thread thread = new Thread(insertAll); 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 6ba97ce0..0788f09a 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 @@ -42,6 +42,7 @@ public class HomeFragment extends Fragment { private SongResultSearchAdapter favoriteSongAdapter; private RecentMusicAdapter recentlyPlayedMusicAdapter; private RecentMusicAdapter mostPlayedMusicAdapter; + private RecentMusicAdapter dowanloadedMusicAdapter; @Nullable @Override @@ -67,6 +68,7 @@ public class HomeFragment extends Fragment { initFavoritesSongView(); initYearSongView(); initRecentAddedSongView(); + initDownloadedSongView(); } @Override @@ -106,6 +108,12 @@ public class HomeFragment extends Fragment { bundle.putString(Song.IS_FAVORITE, Song.IS_FAVORITE); activity.navController.navigate(R.id.action_homeFragment_to_songListPageFragment, bundle); }); + + bind.downloadedTracksTextViewClickable.setOnClickListener(v -> { + Bundle bundle = new Bundle(); + bundle.putString(Song.DOWNLOADED, Song.DOWNLOADED); + activity.navController.navigate(R.id.action_homeFragment_to_songListPageFragment, bundle); + }); } private void initDiscoverSongSlideView() { @@ -180,6 +188,18 @@ public class HomeFragment extends Fragment { homeViewModel.getRecentlyAddedSongList().observe(requireActivity(), songs -> recentlyAddedMusicAdapter.setItems(songs)); } + private void initDownloadedSongView() { + bind.downloadedTracksRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false)); + bind.downloadedTracksRecyclerView.setHasFixedSize(true); + + dowanloadedMusicAdapter = new RecentMusicAdapter(activity, requireContext(), getChildFragmentManager()); + bind.downloadedTracksRecyclerView.setAdapter(dowanloadedMusicAdapter); + homeViewModel.getDownloaded().observe(requireActivity(), songs -> { + if(bind != null) bind.homeDownloadedTracksSector.setVisibility(!songs.isEmpty() ? View.VISIBLE : View.GONE); + dowanloadedMusicAdapter.setItems(songs); + }); + } + private void setDiscoverSongSlideViewOffset(float pageOffset, float pageMargin) { bind.discoverSongViewPager.setPageTransformer((page, position) -> { float myOffset = position * -(2 * pageOffset + pageMargin); @@ -197,10 +217,10 @@ public class HomeFragment extends Fragment { /* * Il layout di default prevede questa sequenza: - * - Discovery - Most_played - Last_played - Year - Favorite - Recently_added + * - Discovery - Most_played - Last_played - Year - Favorite - Downloaded - Recently_added * * Se perĂ² non ho ancora ascoltato nessuna canzone e quindi Most_played e Last_played sono vuoti, modifico come segue - * - Discovery - Recently_added - Year - Favorite - Most_played - Last_played + * - Discovery - Recently_added - Year - Favorite - Downloaded - Most_played - Last_played */ public void reorder() { if(bind != null) { @@ -209,6 +229,7 @@ public class HomeFragment extends Fragment { bind.homeLinearLayoutContainer.addView(bind.homeRecentlyAddedTracksSector); bind.homeLinearLayoutContainer.addView(bind.homeFlashbackSector); bind.homeLinearLayoutContainer.addView(bind.homeFavoriteTracksSector); + bind.homeLinearLayoutContainer.addView(bind.homeDownloadedTracksSector); bind.homeLinearLayoutContainer.addView(bind.homeMostPlayedTracksSector); bind.homeLinearLayoutContainer.addView(bind.homeRecentlyPlayedTracksSector); } 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 23c9e291..ba15152a 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 @@ -89,6 +89,10 @@ public class SongListPageFragment extends Fragment { songListPageViewModel.title = Song.IS_FAVORITE; bind.pageTitleLabel.setText("Favourite song"); } + 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"); diff --git a/app/src/main/java/com/cappielloantonio/play/viewmodel/HomeViewModel.java b/app/src/main/java/com/cappielloantonio/play/viewmodel/HomeViewModel.java index a786e6c3..0d5ce6d8 100644 --- a/app/src/main/java/com/cappielloantonio/play/viewmodel/HomeViewModel.java +++ b/app/src/main/java/com/cappielloantonio/play/viewmodel/HomeViewModel.java @@ -20,6 +20,7 @@ public class HomeViewModel extends AndroidViewModel { private LiveData> recentlyAddedSongSample; private LiveData> mostPlayedSongSample; private LiveData> favoritesSongSample; + private LiveData> downloadedSongSample; private List years; public HomeViewModel(@NonNull Application application) { @@ -32,6 +33,7 @@ public class HomeViewModel extends AndroidViewModel { recentlyAddedSongSample = songRepository.getListLiveRecentlyAddedSampleSong(20); mostPlayedSongSample = songRepository.getListLiveMostPlayedSampleSong(20); favoritesSongSample = songRepository.getListLiveFavoritesSampleSong(20); + downloadedSongSample = songRepository.getListLiveDownloadedSampleSong(20); years = songRepository.getYearList(); } @@ -63,4 +65,8 @@ public class HomeViewModel extends AndroidViewModel { public LiveData> getFavorites() { return favoritesSongSample; } + + public LiveData> getDownloaded() { + return downloadedSongSample; + } } 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 cd1b9206..1342a9a8 100644 --- a/app/src/main/java/com/cappielloantonio/play/viewmodel/SongListPageViewModel.java +++ b/app/src/main/java/com/cappielloantonio/play/viewmodel/SongListPageViewModel.java @@ -59,6 +59,9 @@ public class SongListPageViewModel extends AndroidViewModel { case Song.IS_FAVORITE: songList = songRepository.getListLiveFavoritesSong(); break; + case Song.DOWNLOADED: + songList = songRepository.getListLiveDownloadedSong(); + break; } return songList; diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 3474bbb3..e4192122 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -222,6 +222,58 @@ android:paddingBottom="8dp" /> + + + + + + + + + + + + + + + +