diff --git a/app/src/main/java/com/cappielloantonio/play/database/dao/AlbumDao.java b/app/src/main/java/com/cappielloantonio/play/database/dao/AlbumDao.java index 06656937..44bbf9cd 100644 --- a/app/src/main/java/com/cappielloantonio/play/database/dao/AlbumDao.java +++ b/app/src/main/java/com/cappielloantonio/play/database/dao/AlbumDao.java @@ -22,8 +22,8 @@ public interface AlbumDao { @Query("SELECT * FROM album ORDER BY RANDOM() LIMIT :number;") LiveData> getSample(int number); - @Query("SELECT * FROM album WHERE title LIKE '%' || :name || '%'") - LiveData> searchAlbum(String name); + @Query("SELECT * FROM album WHERE title LIKE '%' || :name || '%' LIMIT :limit") + LiveData> searchAlbum(String name, int limit); @Insert(onConflict = OnConflictStrategy.REPLACE) void insert(Album album); diff --git a/app/src/main/java/com/cappielloantonio/play/database/dao/ArtistDao.java b/app/src/main/java/com/cappielloantonio/play/database/dao/ArtistDao.java index 738e59f4..75b72271 100644 --- a/app/src/main/java/com/cappielloantonio/play/database/dao/ArtistDao.java +++ b/app/src/main/java/com/cappielloantonio/play/database/dao/ArtistDao.java @@ -19,8 +19,8 @@ public interface ArtistDao { @Query("SELECT * FROM artist ORDER BY RANDOM() LIMIT :number;") LiveData> getSample(int number); - @Query("SELECT * FROM artist WHERE name LIKE '%' || :name || '%'") - LiveData> searchArtist(String name); + @Query("SELECT * FROM artist WHERE name LIKE '%' || :name || '%' LIMIT :limit") + LiveData> searchArtist(String name, int limit); @Insert(onConflict = OnConflictStrategy.REPLACE) void insertAll(List artists); diff --git a/app/src/main/java/com/cappielloantonio/play/database/dao/GenreDao.java b/app/src/main/java/com/cappielloantonio/play/database/dao/GenreDao.java index 74022eee..1b6b2e6a 100644 --- a/app/src/main/java/com/cappielloantonio/play/database/dao/GenreDao.java +++ b/app/src/main/java/com/cappielloantonio/play/database/dao/GenreDao.java @@ -29,8 +29,8 @@ public interface GenreDao { @Query("DELETE FROM genre") void deleteAll(); - @Query("SELECT * FROM genre WHERE name LIKE '%' || :name || '%'") - LiveData> searchGenre(String name); + @Query("SELECT * FROM genre WHERE name LIKE '%' || :name || '%' LIMIT :limit") + LiveData> searchGenre(String name, int limit); @Query("SELECT name FROM genre WHERE name LIKE :query || '%' OR name like '% ' || :query || '%' GROUP BY name LIMIT :number") List searchSuggestions(String query, int number); 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 8fb6260f..8d68b83f 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 @@ -21,8 +21,8 @@ public interface SongDao { @Query("SELECT * FROM song") List getAllList(); - @Query("SELECT * FROM song WHERE title LIKE '%' || :title || '%'") - LiveData> searchSong(String title); + @Query("SELECT * FROM song WHERE title LIKE '%' || :title || '%' LIMIT :limit") + LiveData> searchSong(String title, int limit); // Da utilizzare in caso si decidesse di migliorare il viewpager nella home @Query("SELECT * FROM song WHERE id IN (:pseudoRandomNumber)") diff --git a/app/src/main/java/com/cappielloantonio/play/repository/AlbumRepository.java b/app/src/main/java/com/cappielloantonio/play/repository/AlbumRepository.java index 66830a74..23d35541 100644 --- a/app/src/main/java/com/cappielloantonio/play/repository/AlbumRepository.java +++ b/app/src/main/java/com/cappielloantonio/play/repository/AlbumRepository.java @@ -41,8 +41,8 @@ public class AlbumRepository { return listLiveSampleAlbum; } - public LiveData> searchListLiveAlbum(String name) { - searchListLiveAlbum = albumDao.searchAlbum(name); + public LiveData> searchListLiveAlbum(String name, int limit) { + searchListLiveAlbum = albumDao.searchAlbum(name, limit); return searchListLiveAlbum; } diff --git a/app/src/main/java/com/cappielloantonio/play/repository/ArtistRepository.java b/app/src/main/java/com/cappielloantonio/play/repository/ArtistRepository.java index 00c2d538..56d0a6e6 100644 --- a/app/src/main/java/com/cappielloantonio/play/repository/ArtistRepository.java +++ b/app/src/main/java/com/cappielloantonio/play/repository/ArtistRepository.java @@ -33,8 +33,8 @@ public class ArtistRepository { return listLiveSampleArtist; } - public LiveData> searchListLiveArtist(String name) { - searchListLiveArtist = artistDao.searchArtist(name); + public LiveData> searchListLiveArtist(String name, int limit) { + searchListLiveArtist = artistDao.searchArtist(name, limit); return searchListLiveArtist; } diff --git a/app/src/main/java/com/cappielloantonio/play/repository/GenreRepository.java b/app/src/main/java/com/cappielloantonio/play/repository/GenreRepository.java index 1ee94e05..0655c7f5 100644 --- a/app/src/main/java/com/cappielloantonio/play/repository/GenreRepository.java +++ b/app/src/main/java/com/cappielloantonio/play/repository/GenreRepository.java @@ -114,8 +114,8 @@ public class GenreRepository { } } - public LiveData> searchListLiveGenre(String name) { - searchListLiveGenre = genreDao.searchGenre(name); + public LiveData> searchListLiveGenre(String name, int limit) { + searchListLiveGenre = genreDao.searchGenre(name, limit); return searchListLiveGenre; } 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 9f1fe346..9b4b26a3 100644 --- a/app/src/main/java/com/cappielloantonio/play/repository/SongRepository.java +++ b/app/src/main/java/com/cappielloantonio/play/repository/SongRepository.java @@ -40,8 +40,8 @@ public class SongRepository { songGenreCrossDao = database.songGenreCrossDao(); } - public LiveData> searchListLiveSong(String title) { - searchListLiveSongs = songDao.searchSong(title); + public LiveData> searchListLiveSong(String title, int limit) { + searchListLiveSongs = songDao.searchSong(title, limit); return searchListLiveSongs; } 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 6b782953..b5f119fd 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 @@ -1,6 +1,7 @@ package com.cappielloantonio.play.ui.fragment; import android.os.Bundle; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -26,6 +27,7 @@ import com.cappielloantonio.play.helper.recyclerview.GridItemDecoration; import com.cappielloantonio.play.model.RecentSearch; import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.ui.activities.MainActivity; +import com.cappielloantonio.play.util.PreferenceUtil; import com.cappielloantonio.play.viewmodel.SearchViewModel; import com.paulrybitskyi.persistentsearchview.adapters.model.SuggestionItem; import com.paulrybitskyi.persistentsearchview.listeners.OnSuggestionChangeListener; @@ -70,6 +72,8 @@ public class SearchFragment extends Fragment { public void onResume() { super.onResume(); inputFocus(); + + Log.i(TAG, "onResume: " + PreferenceUtil.getInstance(requireContext()).getSongNumber()); } @Override @@ -179,19 +183,19 @@ public class SearchFragment extends Fragment { } private void performSearch(String query) { - searchViewModel.searchSong(query).observe(requireActivity(), songs -> { + searchViewModel.searchSong(query, requireContext()).observe(requireActivity(), songs -> { if(bind != null) bind.searchSongSector.setVisibility(!songs.isEmpty() ? View.VISIBLE : View.GONE); songResultSearchAdapter.setItems(songs); }); - searchViewModel.searchAlbum(query).observe(requireActivity(), albums -> { + searchViewModel.searchAlbum(query, requireContext()).observe(requireActivity(), albums -> { if(bind != null) bind.searchAlbumSector.setVisibility(!albums.isEmpty() ? View.VISIBLE : View.GONE); albumAdapter.setItems(albums); }); - searchViewModel.searchArtist(query).observe(requireActivity(), artists -> { + searchViewModel.searchArtist(query, requireContext()).observe(requireActivity(), artists -> { if(bind != null) bind.searchArtistSector.setVisibility(!artists.isEmpty() ? View.VISIBLE : View.GONE); artistAdapter.setItems(artists); }); - searchViewModel.searchGenre(query).observe(requireActivity(), genres -> { + searchViewModel.searchGenre(query, requireContext()).observe(requireActivity(), genres -> { if(bind != null) bind.searchGenreSector.setVisibility(!genres.isEmpty() ? View.VISIBLE : View.GONE); genreCatalogueAdapter.setItems(genres); }); diff --git a/app/src/main/java/com/cappielloantonio/play/util/PreferenceUtil.java b/app/src/main/java/com/cappielloantonio/play/util/PreferenceUtil.java index f909e9b8..bd428eb1 100644 --- a/app/src/main/java/com/cappielloantonio/play/util/PreferenceUtil.java +++ b/app/src/main/java/com/cappielloantonio/play/util/PreferenceUtil.java @@ -14,6 +14,8 @@ import java.util.List; import java.util.Set; public class PreferenceUtil { + private static final String TAG = "PreferenceUtil"; + public static final String SERVER = "server"; public static final String USER = "user"; public static final String TOKEN = "token"; @@ -24,6 +26,7 @@ public class PreferenceUtil { public static final String SYNC = "sync"; public static final String SONG_GENRE_SYNC = "song_genre_sync"; + public static final String SEARCH_ELEMENT_PER_CATEGORY = "search_element_per_category"; public static final String IMAGE_CACHE_SIZE = "image_cache_size"; public static final String MEDIA_CACHE_SIZE = "media_cache_size"; @@ -141,6 +144,10 @@ public class PreferenceUtil { return Integer.parseInt(mPreferences.getString(INSTANT_MIX_SONG_NUMBER, "10")); } + public final int getSearchElementPerCategory() { + return Integer.parseInt(mPreferences.getString(SEARCH_ELEMENT_PER_CATEGORY, "10")); + } + public final String getTranscodeCodec() { return mPreferences.getString(TRANSCODE_CODEC, "aac"); } @@ -178,10 +185,16 @@ public class PreferenceUtil { return mPreferences.getBoolean(AUDIO_DUCKING, true); } + /* + * Numero di canzoni salvate nel db + */ public int getSongNumber() { return mPreferences.getInt(SONG_NUMBER, 0); } + /* + * Numero di canzoni salvate nel db + */ public void setSongNumber(int number) { final SharedPreferences.Editor editor = mPreferences.edit(); editor.putInt(SONG_NUMBER, number); diff --git a/app/src/main/java/com/cappielloantonio/play/viewmodel/SearchViewModel.java b/app/src/main/java/com/cappielloantonio/play/viewmodel/SearchViewModel.java index da647e3d..190f647a 100644 --- a/app/src/main/java/com/cappielloantonio/play/viewmodel/SearchViewModel.java +++ b/app/src/main/java/com/cappielloantonio/play/viewmodel/SearchViewModel.java @@ -1,6 +1,7 @@ package com.cappielloantonio.play.viewmodel; import android.app.Application; +import android.content.Context; import androidx.annotation.NonNull; import androidx.lifecycle.AndroidViewModel; @@ -16,6 +17,7 @@ import com.cappielloantonio.play.repository.ArtistRepository; import com.cappielloantonio.play.repository.GenreRepository; import com.cappielloantonio.play.repository.RecentSearchRepository; import com.cappielloantonio.play.repository.SongRepository; +import com.cappielloantonio.play.util.PreferenceUtil; import java.util.ArrayList; import java.util.LinkedHashSet; @@ -59,23 +61,23 @@ public class SearchViewModel extends AndroidViewModel { } } - public LiveData> searchSong(String title) { - searchSong = songRepository.searchListLiveSong(title); + public LiveData> searchSong(String title, Context context) { + searchSong = songRepository.searchListLiveSong(title, PreferenceUtil.getInstance(context).getSearchElementPerCategory()); return searchSong; } - public LiveData> searchAlbum(String name) { - searchAlbum = albumRepository.searchListLiveAlbum(name); + public LiveData> searchAlbum(String name, Context context) { + searchAlbum = albumRepository.searchListLiveAlbum(name, PreferenceUtil.getInstance(context).getSearchElementPerCategory()); return searchAlbum; } - public LiveData> searchArtist(String name) { - searchArtist = artistRepository.searchListLiveArtist(name); + public LiveData> searchArtist(String name, Context context) { + searchArtist = artistRepository.searchListLiveArtist(name, PreferenceUtil.getInstance(context).getSearchElementPerCategory()); return searchArtist; } - public LiveData> searchGenre(String name) { - searchGenre = genreRepository.searchListLiveGenre(name); + public LiveData> searchGenre(String name, Context context) { + searchGenre = genreRepository.searchListLiveGenre(name, PreferenceUtil.getInstance(context).getSearchElementPerCategory()); return searchGenre; } diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index a8591220..10d84c9b 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -50,4 +50,16 @@ 25 50 + + + 10 + 20 + 30 + + + + 10 + 20 + 30 + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 06985c06..20dbecfc 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -14,6 +14,7 @@ Save filters between sessions Number of songs generated by Instant Mix + Number of items searched for each category Synchronization Music sync diff --git a/app/src/main/res/xml/global_preferences.xml b/app/src/main/res/xml/global_preferences.xml index 5046580c..9cb7ebac 100644 --- a/app/src/main/res/xml/global_preferences.xml +++ b/app/src/main/res/xml/global_preferences.xml @@ -36,6 +36,15 @@ app:key="instant_mix_song_number" app:title="@string/instant_mix_song_number" app:useSimpleSummaryProvider="true" /> + +