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 --