diff --git a/.idea/misc.xml b/.idea/misc.xml
index 7bc501b2..491911e5 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -7,6 +7,7 @@
+
@@ -17,9 +18,12 @@
+
+
+
@@ -43,7 +47,8 @@
-
+
+
@@ -72,6 +77,7 @@
+
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 2d868c48..58646dec 100644
--- a/app/src/main/java/com/cappielloantonio/play/model/Album.java
+++ b/app/src/main/java/com/cappielloantonio/play/model/Album.java
@@ -52,6 +52,14 @@ public class Album implements Parcelable {
this.songs = MappingUtil.mapSong(albumWithSongsID3.getSongs());
}
+ public Album(Download download) {
+ this.id = download.getAlbumId();
+ this.title = download.getAlbumName();
+ this.artistId = download.getArtistId();
+ this.artistName = download.getArtistName();
+ this.primary = download.getPrimary();
+ }
+
public Album(AlbumInfo info) {
this.notes = info.getNotes();
}
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 d83cfbd6..b1684c37 100644
--- a/app/src/main/java/com/cappielloantonio/play/model/Artist.java
+++ b/app/src/main/java/com/cappielloantonio/play/model/Artist.java
@@ -76,6 +76,11 @@ public class Artist implements Parcelable {
this.name = name;
}
+ public Artist(Download download) {
+ this.id = download.getArtistId();
+ this.name = download.getArtistName();
+ }
+
public String getId() {
return id;
}
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
new file mode 100644
index 00000000..96c79336
--- /dev/null
+++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/DownloadFragment.java
@@ -0,0 +1,240 @@
+package com.cappielloantonio.play.ui.fragment;
+
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.core.view.ViewCompat;
+import androidx.fragment.app.Fragment;
+import androidx.lifecycle.ViewModelProvider;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.PagerSnapHelper;
+import androidx.recyclerview.widget.SnapHelper;
+import androidx.viewpager2.widget.ViewPager2;
+
+import com.cappielloantonio.play.R;
+import com.cappielloantonio.play.adapter.AlbumAdapter;
+import com.cappielloantonio.play.adapter.AlbumHorizontalAdapter;
+import com.cappielloantonio.play.adapter.ArtistAdapter;
+import com.cappielloantonio.play.adapter.ArtistHorizontalAdapter;
+import com.cappielloantonio.play.adapter.DiscoverSongAdapter;
+import com.cappielloantonio.play.adapter.SimilarTrackAdapter;
+import com.cappielloantonio.play.adapter.SongHorizontalAdapter;
+import com.cappielloantonio.play.adapter.TrackAdapter;
+import com.cappielloantonio.play.adapter.YearAdapter;
+import com.cappielloantonio.play.databinding.FragmentDownloadBinding;
+import com.cappielloantonio.play.databinding.FragmentHomeBinding;
+import com.cappielloantonio.play.helper.recyclerview.CustomLinearSnapHelper;
+import com.cappielloantonio.play.helper.recyclerview.DotsIndicatorDecoration;
+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.DownloadViewModel;
+import com.cappielloantonio.play.viewmodel.HomeViewModel;
+
+import java.util.Objects;
+
+public class DownloadFragment extends Fragment {
+ private static final String TAG = "CategoriesFragment";
+
+ private FragmentDownloadBinding bind;
+ private MainActivity activity;
+ private DownloadViewModel downloadViewModel;
+
+ private ArtistHorizontalAdapter downloadedArtistAdapter;
+ private AlbumHorizontalAdapter downloadedAlbumAdapter;
+ private SongHorizontalAdapter downloadedTrackAdapter;
+
+ @Override
+ public void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setHasOptionsMenu(true);
+ }
+
+ @Override
+ public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
+ super.onCreateOptionsMenu(menu, inflater);
+ inflater.inflate(R.menu.main_page_menu, menu);
+ }
+
+ @Nullable
+ @Override
+ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+ activity = (MainActivity) getActivity();
+
+ bind = FragmentDownloadBinding.inflate(inflater, container, false);
+ View view = bind.getRoot();
+ downloadViewModel = new ViewModelProvider(requireActivity()).get(DownloadViewModel.class);
+
+ init();
+
+ return view;
+ }
+
+ @Override
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+
+ initAppBar();
+ initDownloadedArtistView();
+ initDownloadedAlbumView();
+ initDownloadedSongView();
+ }
+
+ @Override
+ public void onStart() {
+ super.onStart();
+ activity.setBottomNavigationBarVisibility(true);
+ activity.setBottomSheetVisibility(true);
+ }
+
+ @Override
+ public void onDestroyView() {
+ super.onDestroyView();
+ bind = null;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(@NonNull MenuItem item) {
+ switch (item.getItemId()) {
+ case R.id.action_search:
+ activity.navController.navigate(R.id.action_downloadFragment_to_searchFragment);
+ return true;
+ case R.id.action_settings:
+ activity.navController.navigate(R.id.action_downloadFragment_to_settingsFragment);
+ return true;
+ default:
+ break;
+ }
+
+ return false;
+ }
+
+ private void init() {
+ bind.downloadedArtistTextViewClickable.setOnClickListener(v -> {
+ Bundle bundle = new Bundle();
+ bundle.putString(Song.DOWNLOADED, Song.DOWNLOADED);
+ activity.navController.navigate(R.id.action_downloadFragment_to_artistListPageFragment, bundle);
+ });
+
+ bind.downloadedAlbumTextViewClickable.setOnClickListener(v -> {
+ Bundle bundle = new Bundle();
+ bundle.putString(Song.DOWNLOADED, Song.DOWNLOADED);
+ activity.navController.navigate(R.id.action_downloadFragment_to_albumListPageFragment, bundle);
+ });
+
+ bind.downloadedTracksTextViewClickable.setOnClickListener(v -> {
+ Bundle bundle = new Bundle();
+ bundle.putString(Song.DOWNLOADED, Song.DOWNLOADED);
+ activity.navController.navigate(R.id.action_downloadFragment_to_songListPageFragment, bundle);
+ });
+ }
+
+ private void initAppBar() {
+ activity.setSupportActionBar(bind.toolbar);
+ Objects.requireNonNull(bind.toolbar.getOverflowIcon()).setTint(requireContext().getResources().getColor(R.color.titleTextColor, null));
+ }
+
+ private void initDownloadedArtistView() {
+ bind.downloadedArtistRecyclerView.setHasFixedSize(true);
+
+ downloadedArtistAdapter = new ArtistHorizontalAdapter(requireContext());
+ bind.downloadedArtistRecyclerView.setAdapter(downloadedArtistAdapter);
+ downloadViewModel.getDownloadedArtists(requireActivity(), 20).observe(requireActivity(), artists -> {
+ if (artists == null) {
+ if (bind != null) bind.downloadDownloadedArtistPlaceholder.placeholder.setVisibility(View.VISIBLE);
+ if (bind != null) bind.downloadDownloadedArtistSector.setVisibility(View.GONE);
+ } else {
+ if (bind != null) bind.downloadDownloadedArtistPlaceholder.placeholder.setVisibility(View.GONE);
+ if (bind != null) bind.downloadDownloadedArtistSector.setVisibility(!artists.isEmpty() ? View.VISIBLE : View.GONE);
+ if (bind != null) bind.downloadedArtistRecyclerView.setLayoutManager(new GridLayoutManager(requireContext(), UIUtil.getSpanCount(artists.size(), 5), GridLayoutManager.HORIZONTAL, false));
+
+ downloadedArtistAdapter.setItems(artists);
+ }
+ });
+
+ SnapHelper starredArtistSnapHelper = new PagerSnapHelper();
+ starredArtistSnapHelper.attachToRecyclerView(bind.downloadedArtistRecyclerView);
+
+ bind.downloadedArtistRecyclerView.addItemDecoration(
+ new DotsIndicatorDecoration(
+ getResources().getDimensionPixelSize(R.dimen.radius),
+ getResources().getDimensionPixelSize(R.dimen.radius) * 4,
+ getResources().getDimensionPixelSize(R.dimen.dots_height),
+ requireContext().getResources().getColor(R.color.titleTextColor, null),
+ requireContext().getResources().getColor(R.color.titleTextColor, null))
+ );
+ }
+
+ private void initDownloadedAlbumView() {
+ bind.downloadedAlbumRecyclerView.setHasFixedSize(true);
+
+ downloadedAlbumAdapter = new AlbumHorizontalAdapter(requireContext());
+ bind.downloadedAlbumRecyclerView.setAdapter(downloadedAlbumAdapter);
+ downloadViewModel.getDownloadedAlbums(requireActivity(), 20).observe(requireActivity(), albums -> {
+ if (albums == null) {
+ if (bind != null) bind.downloadDownloadedAlbumPlaceholder.placeholder.setVisibility(View.VISIBLE);
+ if (bind != null) bind.downloadDownloadedAlbumSector.setVisibility(View.GONE);
+ } else {
+ if (bind != null) bind.downloadDownloadedAlbumPlaceholder.placeholder.setVisibility(View.GONE);
+ if (bind != null) bind.downloadDownloadedAlbumSector.setVisibility(!albums.isEmpty() ? View.VISIBLE : View.GONE);
+ if (bind != null) bind.downloadedAlbumRecyclerView.setLayoutManager(new GridLayoutManager(requireContext(), UIUtil.getSpanCount(albums.size(), 5), GridLayoutManager.HORIZONTAL, false));
+
+ downloadedAlbumAdapter.setItems(albums);
+ }
+ });
+
+ SnapHelper starredAlbumSnapHelper = new PagerSnapHelper();
+ starredAlbumSnapHelper.attachToRecyclerView(bind.downloadedAlbumRecyclerView);
+
+ bind.downloadedAlbumRecyclerView.addItemDecoration(
+ new DotsIndicatorDecoration(
+ getResources().getDimensionPixelSize(R.dimen.radius),
+ getResources().getDimensionPixelSize(R.dimen.radius) * 4,
+ getResources().getDimensionPixelSize(R.dimen.dots_height),
+ requireContext().getResources().getColor(R.color.titleTextColor, null),
+ requireContext().getResources().getColor(R.color.titleTextColor, null))
+ );
+ }
+
+ private void initDownloadedSongView() {
+ bind.downloadedTracksRecyclerView.setHasFixedSize(true);
+
+ downloadedTrackAdapter = new SongHorizontalAdapter(activity, requireContext());
+ bind.downloadedTracksRecyclerView.setAdapter(downloadedTrackAdapter);
+ downloadViewModel.getDownloadedTracks(requireActivity(), 20).observe(requireActivity(), songs -> {
+ if (songs == null) {
+ if (bind != null) bind.downloadDownloadedTracksPlaceholder.placeholder.setVisibility(View.VISIBLE);
+ if (bind != null) bind.downloadDownloadedTracksSector.setVisibility(View.GONE);
+ } else {
+ if (bind != null) bind.downloadDownloadedTracksPlaceholder.placeholder.setVisibility(View.GONE);
+ if (bind != null) bind.downloadDownloadedTracksSector.setVisibility(!songs.isEmpty() ? View.VISIBLE : View.GONE);
+ if (bind != null) bind.downloadedTracksRecyclerView.setLayoutManager(new GridLayoutManager(requireContext(), UIUtil.getSpanCount(songs.size(), 5), GridLayoutManager.HORIZONTAL, false));
+
+ downloadedTrackAdapter.setItems(songs);
+ }
+ });
+
+ SnapHelper starredTrackSnapHelper = new PagerSnapHelper();
+ starredTrackSnapHelper.attachToRecyclerView(bind.downloadedTracksRecyclerView);
+
+ bind.downloadedTracksRecyclerView.addItemDecoration(
+ new DotsIndicatorDecoration(
+ getResources().getDimensionPixelSize(R.dimen.radius),
+ getResources().getDimensionPixelSize(R.dimen.radius) * 4,
+ getResources().getDimensionPixelSize(R.dimen.dots_height),
+ requireContext().getResources().getColor(R.color.titleTextColor, null),
+ requireContext().getResources().getColor(R.color.titleTextColor, 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 f6114fdc..5a486a0c 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
@@ -103,7 +103,6 @@ public class HomeFragment extends Fragment {
initStarredArtistsView();
initYearSongView();
initRecentAddedAlbumView();
- initDownloadedSongView();
}
@Override
@@ -172,12 +171,6 @@ public class HomeFragment extends Fragment {
activity.navController.navigate(R.id.action_homeFragment_to_artistListPageFragment, 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);
- });
-
bind.musicDiscoveryTextViewRefreshable.setOnLongClickListener(v -> {
homeViewModel.refreshDiscoverySongSample(requireActivity());
return true;
@@ -455,28 +448,6 @@ public class HomeFragment extends Fragment {
recentAddedAlbumSnapHelper.attachToRecyclerView(bind.recentlyAddedAlbumsRecyclerView);
}
- private void initDownloadedSongView() {
- bind.downloadedTracksRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false));
- bind.downloadedTracksRecyclerView.setHasFixedSize(true);
-
- dowanloadedMusicAdapter = new TrackAdapter(activity, requireContext());
- bind.downloadedTracksRecyclerView.setAdapter(dowanloadedMusicAdapter);
- homeViewModel.getDownloaded(requireActivity()).observe(requireActivity(), downloads -> {
- if (downloads == null) {
- if (bind != null) bind.homeDownloadedTracksPlaceholder.placeholder.setVisibility(View.VISIBLE);
- if (bind != null) bind.homeDownloadedTracksSector.setVisibility(View.GONE);
- } else {
- if (bind != null) bind.homeDownloadedTracksPlaceholder.placeholder.setVisibility(View.GONE);
- if (bind != null) bind.homeDownloadedTracksSector.setVisibility(!downloads.isEmpty() ? View.VISIBLE : View.GONE);
-
- dowanloadedMusicAdapter.setItems(MappingUtil.mapDownload(downloads));
- }
- });
-
- CustomLinearSnapHelper downloadedSongSnapHelper = new CustomLinearSnapHelper();
- downloadedSongSnapHelper.attachToRecyclerView(bind.downloadedTracksRecyclerView);
- }
-
private void setDiscoverSongSlideViewOffset(float pageOffset, float pageMargin) {
bind.discoverSongViewPager.setPageTransformer((page, position) -> {
float myOffset = position * -(2 * pageOffset + pageMargin);
@@ -509,7 +480,6 @@ public class HomeFragment extends Fragment {
bind.homeLinearLayoutContainer.addView(bind.homeStarredTracksSector);
bind.homeLinearLayoutContainer.addView(bind.homeStarredAlbumsSector);
bind.homeLinearLayoutContainer.addView(bind.homeStarredArtistsSector);
- bind.homeLinearLayoutContainer.addView(bind.homeDownloadedTracksSector);
bind.homeLinearLayoutContainer.addView(bind.homeMostPlayedAlbumsSector);
bind.homeLinearLayoutContainer.addView(bind.homeRecentlyPlayedAlbumsSector);
}
diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/SearchFragment.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/SearchFragment.java
index cecb2e77..a357a46a 100644
--- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/SearchFragment.java
+++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/SearchFragment.java
@@ -53,7 +53,7 @@ public class SearchFragment extends Fragment {
@Override
public void onStart() {
super.onStart();
- activity.setBottomNavigationBarVisibility(true);
+ activity.setBottomNavigationBarVisibility(false);
}
@Override
diff --git a/app/src/main/java/com/cappielloantonio/play/util/MappingUtil.java b/app/src/main/java/com/cappielloantonio/play/util/MappingUtil.java
index 39154b91..0a104f9d 100644
--- a/app/src/main/java/com/cappielloantonio/play/util/MappingUtil.java
+++ b/app/src/main/java/com/cappielloantonio/play/util/MappingUtil.java
@@ -105,16 +105,45 @@ public class MappingUtil {
return playlist;
}
- public static ArrayList mapDownload(List downloads) {
+ public static ArrayList mapDownloadToSong(List downloads) {
ArrayList songs = new ArrayList();
for (Download download : downloads) {
- songs.add(new Song(download));
+ Song song = new Song(download);
+ if(!songs.contains(song)) {
+ songs.add(song);
+ }
}
return songs;
}
+ public static ArrayList mapDownloadToAlbum(List downloads) {
+ ArrayList albums = new ArrayList();
+
+ for (Download download : downloads) {
+ Album album = new Album(download);
+ if(!albums.contains(album)) {
+ albums.add(album);
+ }
+ }
+
+ return albums;
+ }
+
+ public static ArrayList mapDownloadToArtist(List downloads) {
+ ArrayList artists = new ArrayList();
+
+ for (Download download : downloads) {
+ Artist artist = new Artist(download);
+ if(!artists.contains(artist)) {
+ artists.add(artist);
+ }
+ }
+
+ return artists;
+ }
+
public static ArrayList mapToDownload(List songs) {
ArrayList downloads = new ArrayList();
diff --git a/app/src/main/java/com/cappielloantonio/play/viewmodel/DownloadViewModel.java b/app/src/main/java/com/cappielloantonio/play/viewmodel/DownloadViewModel.java
new file mode 100644
index 00000000..83406483
--- /dev/null
+++ b/app/src/main/java/com/cappielloantonio/play/viewmodel/DownloadViewModel.java
@@ -0,0 +1,52 @@
+package com.cappielloantonio.play.viewmodel;
+
+import android.app.Application;
+
+import androidx.annotation.NonNull;
+import androidx.lifecycle.AndroidViewModel;
+import androidx.lifecycle.LifecycleOwner;
+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.Download;
+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 java.util.List;
+
+public class DownloadViewModel extends AndroidViewModel {
+ private static final String TAG = "HomeViewModel";
+
+ private final DownloadRepository downloadRepository;
+
+ private final MutableLiveData> downloadedArtistSample = new MutableLiveData<>(null);
+ private final MutableLiveData> downloadedAlbumSample = new MutableLiveData<>(null);
+ private final MutableLiveData> downloadedTrackSample = new MutableLiveData<>(null);
+
+ public DownloadViewModel(@NonNull Application application) {
+ super(application);
+
+ downloadRepository = new DownloadRepository(application);
+ }
+
+ public LiveData> getDownloadedArtists(LifecycleOwner owner, int size) {
+ downloadRepository.getLiveDownloadSample(size).observe(owner, downloads -> downloadedArtistSample.postValue(MappingUtil.mapDownloadToArtist(downloads)));
+ return downloadedArtistSample;
+ }
+
+ public LiveData> getDownloadedAlbums(LifecycleOwner owner, int size) {
+ downloadRepository.getLiveDownloadSample(size).observe(owner, downloads -> downloadedAlbumSample.postValue(MappingUtil.mapDownloadToAlbum(downloads)));
+ return downloadedAlbumSample;
+ }
+
+ public LiveData> getDownloadedTracks(LifecycleOwner owner, int size) {
+ downloadRepository.getLiveDownloadSample(size).observe(owner, downloads -> downloadedTrackSample.postValue(MappingUtil.mapDownloadToSong(downloads)));
+ return downloadedTrackSample;
+ }
+}
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 85ffbc7f..695a6f76 100644
--- a/app/src/main/java/com/cappielloantonio/play/viewmodel/HomeViewModel.java
+++ b/app/src/main/java/com/cappielloantonio/play/viewmodel/HomeViewModel.java
@@ -25,7 +25,6 @@ public class HomeViewModel extends AndroidViewModel {
private final SongRepository songRepository;
private final AlbumRepository albumRepository;
private final ArtistRepository artistRepository;
- private final DownloadRepository downloadRepository;
private final MutableLiveData> dicoverSongSample = new MutableLiveData<>(null);
private final MutableLiveData> starredTracksSample = new MutableLiveData<>(null);
@@ -36,7 +35,6 @@ public class HomeViewModel extends AndroidViewModel {
private final MutableLiveData> starredTracks = new MutableLiveData<>(null);
private final MutableLiveData> starredAlbums = new MutableLiveData<>(null);
private final MutableLiveData> starredArtists = new MutableLiveData<>(null);
- private final MutableLiveData> downloadedSongSample = new MutableLiveData<>(null);
private final MutableLiveData> recentlyAddedAlbumSample = new MutableLiveData<>(null);
public HomeViewModel(@NonNull Application application) {
@@ -45,7 +43,6 @@ public class HomeViewModel extends AndroidViewModel {
songRepository = new SongRepository(application);
albumRepository = new AlbumRepository(application);
artistRepository = new ArtistRepository(application);
- downloadRepository = new DownloadRepository(application);
songRepository.getRandomSample(10, null, null).observeForever(dicoverSongSample::postValue);
songRepository.getStarredSongs(true, 10).observeForever(starredTracksSample::postValue);
@@ -79,11 +76,6 @@ public class HomeViewModel extends AndroidViewModel {
return starredArtists;
}
- public LiveData> getDownloaded(LifecycleOwner owner) {
- downloadRepository.getLiveDownloadSample(10).observe(owner, downloadedSongSample::postValue);
- return downloadedSongSample;
- }
-
public LiveData> getMostPlayedAlbums(LifecycleOwner owner) {
albumRepository.getAlbums("frequent", 20).observe(owner, mostPlayedAlbumSample::postValue);
return mostPlayedAlbumSample;
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 7bb5f2f3..07d8241c 100644
--- a/app/src/main/java/com/cappielloantonio/play/viewmodel/SongListPageViewModel.java
+++ b/app/src/main/java/com/cappielloantonio/play/viewmodel/SongListPageViewModel.java
@@ -70,7 +70,7 @@ public class SongListPageViewModel extends AndroidViewModel {
songList = songRepository.getStarredSongs(false, -1);
break;
case Song.DOWNLOADED:
- songList.setValue(MappingUtil.mapDownload(downloadRepository.getLiveDownload()));
+ songList.setValue(MappingUtil.mapDownloadToSong(downloadRepository.getLiveDownload()));
break;
}
diff --git a/app/src/main/res/drawable-v24/ic_play_for_work.xml b/app/src/main/res/drawable-v24/ic_play_for_work.xml
new file mode 100644
index 00000000..c7514fe0
--- /dev/null
+++ b/app/src/main/res/drawable-v24/ic_play_for_work.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout/fragment_download.xml b/app/src/main/res/layout/fragment_download.xml
new file mode 100644
index 00000000..77dd0849
--- /dev/null
+++ b/app/src/main/res/layout/fragment_download.xml
@@ -0,0 +1,230 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml
index c6f24f2e..e23bdca6 100644
--- a/app/src/main/res/layout/fragment_home.xml
+++ b/app/src/main/res/layout/fragment_home.xml
@@ -450,62 +450,6 @@
layout="@layout/item_placeholder_horizontal"
android:visibility="gone" />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:id="@+id/downloadFragment"
+ android:icon="@drawable/ic_play_for_work"
+ android:title="@string/download_menu_label" />
\ No newline at end of file
diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml
index 8aca78fe..f07632f0 100644
--- a/app/src/main/res/navigation/nav_graph.xml
+++ b/app/src/main/res/navigation/nav_graph.xml
@@ -97,6 +97,27 @@
android:id="@+id/action_libraryFragment_to_searchFragment"
app:destination="@id/searchFragment" />
+
+
+
+
+
+
+
Library
Home
Search
+ Download
--
•