mirror of
https://github.com/antebudimir/tempus.git
synced 2026-01-01 18:03:33 +00:00
Fix filtering
This commit is contained in:
parent
76037e487b
commit
4848d4f3d0
25 changed files with 575 additions and 124 deletions
|
|
@ -10,6 +10,7 @@ import androidx.room.Update;
|
||||||
|
|
||||||
import com.cappielloantonio.play.model.Song;
|
import com.cappielloantonio.play.model.Song;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Dao
|
@Dao
|
||||||
|
|
@ -44,6 +45,9 @@ public interface SongDao {
|
||||||
@Query("SELECT * FROM song INNER Join song_genre_cross ON song.id = song_genre_cross.song_id AND song_genre_cross.genre_id = :genreID")
|
@Query("SELECT * FROM song INNER Join song_genre_cross ON song.id = song_genre_cross.song_id AND song_genre_cross.genre_id = :genreID")
|
||||||
LiveData<List<Song>> getSongByGenre(String genreID);
|
LiveData<List<Song>> getSongByGenre(String genreID);
|
||||||
|
|
||||||
|
@Query("SELECT * FROM song INNER Join song_genre_cross ON song.id = song_genre_cross.song_id AND song_genre_cross.genre_id IN (:filters) GROUP BY song.id")
|
||||||
|
LiveData<List<Song>> getFilteredSong(ArrayList<String> filters);
|
||||||
|
|
||||||
@Query("SELECT EXISTS(SELECT * FROM song WHERE id = :id)")
|
@Query("SELECT EXISTS(SELECT * FROM song WHERE id = :id)")
|
||||||
boolean exist(String id);
|
boolean exist(String id);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,9 @@ public class Song implements Parcelable {
|
||||||
@Ignore
|
@Ignore
|
||||||
public static final String BY_GENRE = "BY_GENRE";
|
public static final String BY_GENRE = "BY_GENRE";
|
||||||
|
|
||||||
|
@Ignore
|
||||||
|
public static final String BY_GENRES = "BY_GENRES";
|
||||||
|
|
||||||
@Ignore
|
@Ignore
|
||||||
public static final String BY_ARTIST = "BY_ARTIST";
|
public static final String BY_ARTIST = "BY_ARTIST";
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,7 @@ public class SongRepository {
|
||||||
private LiveData<List<Song>> listLiveSampleArtistTopSongs;
|
private LiveData<List<Song>> listLiveSampleArtistTopSongs;
|
||||||
private LiveData<List<Song>> listLiveAlbumSongs;
|
private LiveData<List<Song>> listLiveAlbumSongs;
|
||||||
private LiveData<List<Song>> listLiveSongByGenre;
|
private LiveData<List<Song>> listLiveSongByGenre;
|
||||||
|
private LiveData<List<Song>> listLiveFilteredSongs;
|
||||||
|
|
||||||
|
|
||||||
public SongRepository(Application application) {
|
public SongRepository(Application application) {
|
||||||
|
|
@ -68,6 +69,11 @@ public class SongRepository {
|
||||||
return listLiveAlbumSongs;
|
return listLiveAlbumSongs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public LiveData<List<Song>> getFilteredListLiveSong(ArrayList<String> filters) {
|
||||||
|
listLiveFilteredSongs = songDao.getFilteredSong(filters);
|
||||||
|
return listLiveFilteredSongs;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean exist(Song song) {
|
public boolean exist(Song song) {
|
||||||
boolean exist = false;
|
boolean exist = false;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ import com.cappielloantonio.play.R;
|
||||||
import com.cappielloantonio.play.databinding.ActivityMainBinding;
|
import com.cappielloantonio.play.databinding.ActivityMainBinding;
|
||||||
import com.cappielloantonio.play.ui.activities.base.BaseActivity;
|
import com.cappielloantonio.play.ui.activities.base.BaseActivity;
|
||||||
import com.cappielloantonio.play.util.PreferenceUtil;
|
import com.cappielloantonio.play.util.PreferenceUtil;
|
||||||
|
import com.cappielloantonio.play.util.SyncUtil;
|
||||||
import com.google.android.material.bottomnavigation.BottomNavigationView;
|
import com.google.android.material.bottomnavigation.BottomNavigationView;
|
||||||
|
|
||||||
import org.jellyfin.apiclient.interaction.EmptyResponse;
|
import org.jellyfin.apiclient.interaction.EmptyResponse;
|
||||||
|
|
@ -86,12 +87,15 @@ public class MainActivity extends BaseActivity {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void goToSync() {
|
public void goToSync() {
|
||||||
|
bottomNavigationView.setVisibility(View.GONE);
|
||||||
|
Bundle bundle = SyncUtil.getSyncBundle(true, true, true, true, true, false);
|
||||||
|
|
||||||
if (Objects.requireNonNull(navController.getCurrentDestination()).getId() == R.id.landingFragment) {
|
if (Objects.requireNonNull(navController.getCurrentDestination()).getId() == R.id.landingFragment) {
|
||||||
navController.navigate(R.id.action_landingFragment_to_syncFragment);
|
navController.navigate(R.id.action_landingFragment_to_syncFragment, bundle);
|
||||||
} else if (Objects.requireNonNull(navController.getCurrentDestination()).getId() == R.id.loginFragment) {
|
} else if (Objects.requireNonNull(navController.getCurrentDestination()).getId() == R.id.loginFragment) {
|
||||||
navController.navigate(R.id.action_loginFragment_to_syncFragment);
|
navController.navigate(R.id.action_loginFragment_to_syncFragment, bundle);
|
||||||
} else if (Objects.requireNonNull(navController.getCurrentDestination()).getId() == R.id.homeFragment) {
|
} else if (Objects.requireNonNull(navController.getCurrentDestination()).getId() == R.id.homeFragment) {
|
||||||
navController.navigate(R.id.action_homeFragment_to_syncFragment);
|
navController.navigate(R.id.action_homeFragment_to_syncFragment, bundle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ import android.os.Bundle;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.CompoundButton;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
|
@ -14,12 +15,15 @@ import androidx.lifecycle.ViewModelProvider;
|
||||||
import com.cappielloantonio.play.R;
|
import com.cappielloantonio.play.R;
|
||||||
import com.cappielloantonio.play.databinding.FragmentFilterBinding;
|
import com.cappielloantonio.play.databinding.FragmentFilterBinding;
|
||||||
import com.cappielloantonio.play.model.Genre;
|
import com.cappielloantonio.play.model.Genre;
|
||||||
|
import com.cappielloantonio.play.model.Song;
|
||||||
|
import com.cappielloantonio.play.ui.activities.MainActivity;
|
||||||
import com.cappielloantonio.play.viewmodel.FilterViewModel;
|
import com.cappielloantonio.play.viewmodel.FilterViewModel;
|
||||||
import com.google.android.material.chip.Chip;
|
import com.google.android.material.chip.Chip;
|
||||||
|
|
||||||
public class FilterFragment extends Fragment {
|
public class FilterFragment extends Fragment {
|
||||||
private static final String TAG = "FilterFragment";
|
private static final String TAG = "FilterFragment";
|
||||||
|
|
||||||
|
private MainActivity activity;
|
||||||
private FragmentFilterBinding bind;
|
private FragmentFilterBinding bind;
|
||||||
private FilterViewModel filterViewModel;
|
private FilterViewModel filterViewModel;
|
||||||
|
|
||||||
|
|
@ -27,10 +31,12 @@ public class FilterFragment extends Fragment {
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||||
|
activity = (MainActivity) getActivity();
|
||||||
bind = FragmentFilterBinding.inflate(inflater, container, false);
|
bind = FragmentFilterBinding.inflate(inflater, container, false);
|
||||||
View view = bind.getRoot();
|
View view = bind.getRoot();
|
||||||
filterViewModel = new ViewModelProvider(requireActivity()).get(FilterViewModel.class);
|
filterViewModel = new ViewModelProvider(requireActivity()).get(FilterViewModel.class);
|
||||||
|
|
||||||
|
init();
|
||||||
setFilterChips();
|
setFilterChips();
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
@ -41,17 +47,30 @@ public class FilterFragment extends Fragment {
|
||||||
bind = null;
|
bind = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void init() {
|
||||||
|
Bundle bundle = new Bundle();
|
||||||
|
bundle.putString(Song.BY_GENRES, Song.BY_GENRES);
|
||||||
|
bundle.putStringArrayList("filters_list", filterViewModel.getFilters());
|
||||||
|
bundle.putStringArrayList("filter_name_list", filterViewModel.getFilterNames());
|
||||||
|
bind.finishFilteringTextViewClickable.setOnClickListener(v -> {
|
||||||
|
if(filterViewModel.getFilters().size() > 1) activity.navController.navigate(R.id.action_filterFragment_to_songListPageFragment, bundle);
|
||||||
|
else Toast.makeText(requireContext(), "Select two or more filters", Toast.LENGTH_SHORT).show();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
private void setFilterChips() {
|
private void setFilterChips() {
|
||||||
filterViewModel.getGenreList().observe(requireActivity(), genres -> {
|
filterViewModel.getGenreList().observe(requireActivity(), genres -> {
|
||||||
bind.loadingProgressBar.setVisibility(View.GONE);
|
bind.loadingProgressBar.setVisibility(View.GONE);
|
||||||
bind.filterContainer.setVisibility(View.VISIBLE);
|
bind.filterContainer.setVisibility(View.VISIBLE);
|
||||||
for (Genre genre : genres) {
|
for (Genre genre : genres) {
|
||||||
Chip mChip = (Chip) requireActivity().getLayoutInflater().inflate(R.layout.chip_search_filter_genre, null, false);
|
Chip chip = (Chip) requireActivity().getLayoutInflater().inflate(R.layout.chip_search_filter_genre, null, false);
|
||||||
mChip.setText(genre.getName());
|
chip.setText(genre.getName());
|
||||||
|
chip.setChecked(filterViewModel.getFilters().contains(genre.getId()));
|
||||||
mChip.setOnCheckedChangeListener((buttonView, isChecked) -> Toast.makeText(requireContext(), buttonView.getText() + ": " + isChecked, Toast.LENGTH_SHORT).show());
|
chip.setOnCheckedChangeListener((buttonView, isChecked) -> {
|
||||||
|
if(isChecked) filterViewModel.addFilter(genre.getId(), buttonView.getText().toString());
|
||||||
bind.filtersChipsGroup.addView(mChip);
|
else filterViewModel.removeFilter(genre.getId(), buttonView.getText().toString());
|
||||||
|
});
|
||||||
|
bind.filtersChipsGroup.addView(chip);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -53,6 +53,7 @@ public class GenreCatalogueFragment extends Fragment {
|
||||||
View view = bind.getRoot();
|
View view = bind.getRoot();
|
||||||
genreCatalogueViewModel = new ViewModelProvider(requireActivity()).get(GenreCatalogueViewModel.class);
|
genreCatalogueViewModel = new ViewModelProvider(requireActivity()).get(GenreCatalogueViewModel.class);
|
||||||
|
|
||||||
|
init();
|
||||||
initArtistCatalogueView();
|
initArtistCatalogueView();
|
||||||
|
|
||||||
return view;
|
return view;
|
||||||
|
|
@ -64,9 +65,13 @@ public class GenreCatalogueFragment extends Fragment {
|
||||||
bind = null;
|
bind = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void init() {
|
||||||
|
bind.filterGenresTextViewClickable.setOnClickListener(v -> activity.navController.navigate(R.id.action_genreCatalogueFragment_to_filterFragment));
|
||||||
|
}
|
||||||
|
|
||||||
private void initArtistCatalogueView() {
|
private void initArtistCatalogueView() {
|
||||||
bind.genreCatalogueRecyclerView.setLayoutManager(new GridLayoutManager(requireContext(), 2));
|
bind.genreCatalogueRecyclerView.setLayoutManager(new GridLayoutManager(requireContext(), 2));
|
||||||
bind.genreCatalogueRecyclerView.addItemDecoration(new ItemlDecoration(2, 20, false));
|
bind.genreCatalogueRecyclerView.addItemDecoration(new ItemlDecoration(2, 16, false));
|
||||||
bind.genreCatalogueRecyclerView.setHasFixedSize(true);
|
bind.genreCatalogueRecyclerView.setHasFixedSize(true);
|
||||||
|
|
||||||
genreCatalogueAdapter = new GenreCatalogueAdapter(requireContext(), new ArrayList<>());
|
genreCatalogueAdapter = new GenreCatalogueAdapter(requireContext(), new ArrayList<>());
|
||||||
|
|
|
||||||
|
|
@ -83,6 +83,7 @@ public class LibraryFragment extends Fragment {
|
||||||
bind.albumCatalogueTextViewClickable.setOnClickListener(v -> activity.navController.navigate(R.id.action_libraryFragment_to_albumCatalogueFragment));
|
bind.albumCatalogueTextViewClickable.setOnClickListener(v -> activity.navController.navigate(R.id.action_libraryFragment_to_albumCatalogueFragment));
|
||||||
bind.artistCatalogueTextViewClickable.setOnClickListener(v -> activity.navController.navigate(R.id.action_libraryFragment_to_artistCatalogueFragment));
|
bind.artistCatalogueTextViewClickable.setOnClickListener(v -> activity.navController.navigate(R.id.action_libraryFragment_to_artistCatalogueFragment));
|
||||||
bind.genreCatalogueTextViewClickable.setOnClickListener(v -> activity.navController.navigate(R.id.action_libraryFragment_to_genreCatalogueFragment));
|
bind.genreCatalogueTextViewClickable.setOnClickListener(v -> activity.navController.navigate(R.id.action_libraryFragment_to_genreCatalogueFragment));
|
||||||
|
bind.syncGenreButton.setOnClickListener(v -> syncSongsPerGenre());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initAlbumView() {
|
private void initAlbumView() {
|
||||||
|
|
@ -118,14 +119,11 @@ public class LibraryFragment extends Fragment {
|
||||||
bind.genreRecyclerView.setHasFixedSize(true);
|
bind.genreRecyclerView.setHasFixedSize(true);
|
||||||
|
|
||||||
genreAdapter = new GenreAdapter(requireContext(), new ArrayList<>());
|
genreAdapter = new GenreAdapter(requireContext(), new ArrayList<>());
|
||||||
genreAdapter.setClickListener(new GenreAdapter.ItemClickListener() {
|
genreAdapter.setClickListener((view, position) -> {
|
||||||
@Override
|
Bundle bundle = new Bundle();
|
||||||
public void onItemClick(View view, int position) {
|
bundle.putString(Song.BY_GENRE, Song.BY_GENRE);
|
||||||
Bundle bundle = new Bundle();
|
bundle.putParcelable("genre_object", genreAdapter.getItem(position));
|
||||||
bundle.putString(Song.BY_GENRE, Song.BY_GENRE);
|
activity.navController.navigate(R.id.action_libraryFragment_to_songListPageFragment, bundle);
|
||||||
bundle.putParcelable("genre_object", genreAdapter.getItem(position));
|
|
||||||
activity.navController.navigate(R.id.action_libraryFragment_to_songListPageFragment, bundle);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
bind.genreRecyclerView.setAdapter(genreAdapter);
|
bind.genreRecyclerView.setAdapter(genreAdapter);
|
||||||
libraryViewModel.getGenreSample().observe(requireActivity(), genres -> genreAdapter.setItems(genres));
|
libraryViewModel.getGenreSample().observe(requireActivity(), genres -> genreAdapter.setItems(genres));
|
||||||
|
|
@ -147,32 +145,13 @@ public class LibraryFragment extends Fragment {
|
||||||
builder.setMessage("Sync song's genres otherwise nothing will be shown in each genre category")
|
builder.setMessage("Sync song's genres otherwise nothing will be shown in each genre category")
|
||||||
.setTitle("Song's genres not synchronized")
|
.setTitle("Song's genres not synchronized")
|
||||||
.setNegativeButton(R.string.ignore, null)
|
.setNegativeButton(R.string.ignore, null)
|
||||||
.setPositiveButton("Sync", (dialog, id) -> syncSongsPerGenre(libraryViewModel.getGenreList()))
|
.setPositiveButton("Sync", (dialog, id) -> syncSongsPerGenre())
|
||||||
.show();
|
.show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void syncSongsPerGenre(List<Genre> genres) {
|
private void syncSongsPerGenre() {
|
||||||
Snackbar.make(requireView(), "This may take a while...", BaseTransientBottomBar.LENGTH_LONG)
|
Bundle bundle = SyncUtil.getSyncBundle(false, false, true, false, false, true);
|
||||||
.setBackgroundTint(ContextCompat.getColor(requireContext(), R.color.cardColor))
|
activity.navController.navigate(R.id.action_libraryFragment_to_syncFragment, bundle);
|
||||||
.setTextColor(ContextCompat.getColor(requireContext(), R.color.titleTextColor))
|
|
||||||
.show();
|
|
||||||
|
|
||||||
for (Genre genre : genres) {
|
|
||||||
SyncUtil.getSongsPerGenre(requireContext(), new MediaCallback() {
|
|
||||||
@Override
|
|
||||||
public void onError(Exception exception) {
|
|
||||||
Log.e(TAG, "onError: " + exception.getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onLoadMedia(List<?> media) {
|
|
||||||
GenreRepository repository = new GenreRepository(App.getInstance());
|
|
||||||
repository.insertPerGenre((ArrayList<SongGenreCross>) media);
|
|
||||||
}
|
|
||||||
}, genre.id);
|
|
||||||
}
|
|
||||||
|
|
||||||
PreferenceUtil.getInstance(requireContext()).setSongGenreSync(true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -26,15 +26,10 @@ public class LoginFragment extends Fragment {
|
||||||
private FragmentLoginBinding bind;
|
private FragmentLoginBinding bind;
|
||||||
private MainActivity activity;
|
private MainActivity activity;
|
||||||
|
|
||||||
// private TextView usernameTextView;
|
|
||||||
// private TextView passwordTextView;
|
|
||||||
// private TextView serverTextView;
|
|
||||||
private String username;
|
private String username;
|
||||||
private String password;
|
private String password;
|
||||||
private String server;
|
private String server;
|
||||||
|
|
||||||
// private Button loginButton;
|
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||||
|
|
|
||||||
|
|
@ -128,10 +128,6 @@ public class SearchFragment extends Fragment {
|
||||||
bind.persistentSearchView.setOnLeftBtnClickListener(view -> {
|
bind.persistentSearchView.setOnLeftBtnClickListener(view -> {
|
||||||
});
|
});
|
||||||
|
|
||||||
bind.persistentSearchView.setOnRightBtnClickListener(view -> {
|
|
||||||
activity.navController.navigate(R.id.action_searchFragment_to_filterFragment);
|
|
||||||
});
|
|
||||||
|
|
||||||
bind.persistentSearchView.setOnSearchConfirmedListener((searchView, query) -> {
|
bind.persistentSearchView.setOnSearchConfirmedListener((searchView, query) -> {
|
||||||
search(query);
|
search(query);
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,6 @@ import androidx.fragment.app.Fragment;
|
||||||
import androidx.lifecycle.ViewModelProvider;
|
import androidx.lifecycle.ViewModelProvider;
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
|
|
||||||
import com.cappielloantonio.play.adapter.AlbumArtistPageAdapter;
|
|
||||||
import com.cappielloantonio.play.adapter.SongResultSearchAdapter;
|
import com.cappielloantonio.play.adapter.SongResultSearchAdapter;
|
||||||
import com.cappielloantonio.play.databinding.FragmentSongListPageBinding;
|
import com.cappielloantonio.play.databinding.FragmentSongListPageBinding;
|
||||||
import com.cappielloantonio.play.model.Song;
|
import com.cappielloantonio.play.model.Song;
|
||||||
|
|
@ -49,25 +48,31 @@ public class SongListPageFragment extends Fragment {
|
||||||
private void init() {
|
private void init() {
|
||||||
if(getArguments().getString(Song.RECENTLY_PLAYED) != null) {
|
if(getArguments().getString(Song.RECENTLY_PLAYED) != null) {
|
||||||
songListPageViewModel.title = Song.RECENTLY_PLAYED;
|
songListPageViewModel.title = Song.RECENTLY_PLAYED;
|
||||||
bind.pageTitleLabel.setText(Song.RECENTLY_PLAYED);
|
bind.pageTitleLabel.setText("Recently played songs");
|
||||||
}
|
}
|
||||||
else if(getArguments().getString(Song.MOST_PLAYED) != null) {
|
else if(getArguments().getString(Song.MOST_PLAYED) != null) {
|
||||||
songListPageViewModel.title = Song.MOST_PLAYED;
|
songListPageViewModel.title = Song.MOST_PLAYED;
|
||||||
bind.pageTitleLabel.setText(Song.MOST_PLAYED);
|
bind.pageTitleLabel.setText("Most played songs");
|
||||||
}
|
}
|
||||||
else if(getArguments().getString(Song.RECENTLY_ADDED) != null) {
|
else if(getArguments().getString(Song.RECENTLY_ADDED) != null) {
|
||||||
songListPageViewModel.title = Song.RECENTLY_ADDED;
|
songListPageViewModel.title = Song.RECENTLY_ADDED;
|
||||||
bind.pageTitleLabel.setText(Song.RECENTLY_ADDED);
|
bind.pageTitleLabel.setText("Recently added song");
|
||||||
}
|
}
|
||||||
else if(getArguments().getString(Song.BY_GENRE) != null) {
|
else if(getArguments().getString(Song.BY_GENRE) != null) {
|
||||||
songListPageViewModel.title = Song.BY_GENRE;
|
songListPageViewModel.title = Song.BY_GENRE;
|
||||||
songListPageViewModel.genre = getArguments().getParcelable("genre_object");
|
songListPageViewModel.genre = getArguments().getParcelable("genre_object");
|
||||||
bind.pageTitleLabel.setText(Song.BY_GENRE);
|
bind.pageTitleLabel.setText(songListPageViewModel.genre.getName() + ": all songs");
|
||||||
}
|
}
|
||||||
else if(getArguments().getString(Song.BY_ARTIST) != null) {
|
else if(getArguments().getString(Song.BY_ARTIST) != null) {
|
||||||
songListPageViewModel.title = Song.BY_ARTIST;
|
songListPageViewModel.title = Song.BY_ARTIST;
|
||||||
songListPageViewModel.artist = getArguments().getParcelable("artist_object");
|
songListPageViewModel.artist = getArguments().getParcelable("artist_object");
|
||||||
bind.pageTitleLabel.setText(Song.BY_ARTIST);
|
bind.pageTitleLabel.setText(songListPageViewModel.artist.getName() + "'s top songs");
|
||||||
|
}
|
||||||
|
else if(getArguments().getString(Song.BY_GENRES) != null) {
|
||||||
|
songListPageViewModel.title = Song.BY_GENRES;
|
||||||
|
songListPageViewModel.filters = getArguments().getStringArrayList("filters_list");
|
||||||
|
songListPageViewModel.filterNames = getArguments().getStringArrayList("filter_name_list");
|
||||||
|
bind.pageTitleLabel.setText(songListPageViewModel.getFiltersTitle());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
|
import androidx.lifecycle.ViewModelProvider;
|
||||||
|
|
||||||
import com.cappielloantonio.play.App;
|
import com.cappielloantonio.play.App;
|
||||||
import com.cappielloantonio.play.R;
|
import com.cappielloantonio.play.R;
|
||||||
|
|
@ -32,6 +33,7 @@ import com.cappielloantonio.play.repository.SongRepository;
|
||||||
import com.cappielloantonio.play.ui.activities.MainActivity;
|
import com.cappielloantonio.play.ui.activities.MainActivity;
|
||||||
import com.cappielloantonio.play.util.PreferenceUtil;
|
import com.cappielloantonio.play.util.PreferenceUtil;
|
||||||
import com.cappielloantonio.play.util.SyncUtil;
|
import com.cappielloantonio.play.util.SyncUtil;
|
||||||
|
import com.cappielloantonio.play.viewmodel.SyncViewModel;
|
||||||
import com.google.android.material.snackbar.BaseTransientBottomBar;
|
import com.google.android.material.snackbar.BaseTransientBottomBar;
|
||||||
import com.google.android.material.snackbar.Snackbar;
|
import com.google.android.material.snackbar.Snackbar;
|
||||||
|
|
||||||
|
|
@ -45,12 +47,7 @@ public class SyncFragment extends Fragment {
|
||||||
|
|
||||||
private MainActivity activity;
|
private MainActivity activity;
|
||||||
private FragmentSyncBinding bind;
|
private FragmentSyncBinding bind;
|
||||||
|
private SyncViewModel syncViewModel;
|
||||||
private ArrayList<Integer> progressing;
|
|
||||||
private List<Genre> genres;
|
|
||||||
|
|
||||||
private int stepMax = 5;
|
|
||||||
private int increment = 25;
|
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -59,6 +56,7 @@ public class SyncFragment extends Fragment {
|
||||||
|
|
||||||
bind = FragmentSyncBinding.inflate(inflater, container, false);
|
bind = FragmentSyncBinding.inflate(inflater, container, false);
|
||||||
View view = bind.getRoot();
|
View view = bind.getRoot();
|
||||||
|
syncViewModel = new ViewModelProvider(requireActivity()).get(SyncViewModel.class);
|
||||||
|
|
||||||
init();
|
init();
|
||||||
syncLibraries();
|
syncLibraries();
|
||||||
|
|
@ -73,13 +71,11 @@ public class SyncFragment extends Fragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void init() {
|
private void init() {
|
||||||
|
syncViewModel.setArguemnts(getArguments());
|
||||||
bind.loadingProgressBar.setVisibility(View.VISIBLE);
|
bind.loadingProgressBar.setVisibility(View.VISIBLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void syncLibraries() {
|
private void syncLibraries() {
|
||||||
Log.d(TAG, "syncLibraries");
|
|
||||||
progressing = new ArrayList<>();
|
|
||||||
|
|
||||||
SyncUtil.getLibraries(requireContext(), new MediaCallback() {
|
SyncUtil.getLibraries(requireContext(), new MediaCallback() {
|
||||||
@Override
|
@Override
|
||||||
public void onError(Exception exception) {
|
public void onError(Exception exception) {
|
||||||
|
|
@ -101,11 +97,11 @@ public class SyncFragment extends Fragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void startSyncing() {
|
private void startSyncing() {
|
||||||
syncAlbums();
|
if(syncViewModel.isSyncAlbum()) syncAlbums();
|
||||||
syncArtists();
|
if(syncViewModel.isSyncArtist()) syncArtists();
|
||||||
syncGenres();
|
if(syncViewModel.isSyncGenres()) syncGenres();
|
||||||
syncPlaylist();
|
if(syncViewModel.isSyncPlaylist()) syncPlaylist();
|
||||||
syncSongs();
|
if(syncViewModel.isSyncSong()) syncSongs();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void syncAlbums() {
|
private void syncAlbums() {
|
||||||
|
|
@ -114,14 +110,14 @@ public class SyncFragment extends Fragment {
|
||||||
@Override
|
@Override
|
||||||
public void onError(Exception exception) {
|
public void onError(Exception exception) {
|
||||||
Log.e(TAG, "onError: " + exception.getMessage());
|
Log.e(TAG, "onError: " + exception.getMessage());
|
||||||
setProgress(false, "Album");
|
animateProgressBar(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadMedia(List<?> media) {
|
public void onLoadMedia(List<?> media) {
|
||||||
AlbumRepository repository = new AlbumRepository(activity.getApplication());
|
AlbumRepository repository = new AlbumRepository(activity.getApplication());
|
||||||
repository.insertAll((ArrayList<Album>) media);
|
repository.insertAll((ArrayList<Album>) media);
|
||||||
setProgress(true, "Album");
|
animateProgressBar(true);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -132,14 +128,14 @@ public class SyncFragment extends Fragment {
|
||||||
@Override
|
@Override
|
||||||
public void onError(Exception exception) {
|
public void onError(Exception exception) {
|
||||||
Log.e(TAG, "onError: " + exception.getMessage());
|
Log.e(TAG, "onError: " + exception.getMessage());
|
||||||
setProgress(false, "Artist");
|
animateProgressBar(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadMedia(List<?> media) {
|
public void onLoadMedia(List<?> media) {
|
||||||
ArtistRepository repository = new ArtistRepository(activity.getApplication());
|
ArtistRepository repository = new ArtistRepository(activity.getApplication());
|
||||||
repository.insertAll((ArrayList<Artist>) media);
|
repository.insertAll((ArrayList<Artist>) media);
|
||||||
setProgress(true, "Artist");
|
animateProgressBar(true);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -150,14 +146,17 @@ public class SyncFragment extends Fragment {
|
||||||
@Override
|
@Override
|
||||||
public void onError(Exception exception) {
|
public void onError(Exception exception) {
|
||||||
Log.e(TAG, "onError: " + exception.getMessage());
|
Log.e(TAG, "onError: " + exception.getMessage());
|
||||||
setProgress(false, "Genres");
|
animateProgressBar(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadMedia(List<?> media) {
|
public void onLoadMedia(List<?> media) {
|
||||||
GenreRepository repository = new GenreRepository(activity.getApplication());
|
GenreRepository repository = new GenreRepository(activity.getApplication());
|
||||||
repository.insertAll((ArrayList<Genre>) media);
|
repository.insertAll((ArrayList<Genre>) media);
|
||||||
setProgress(true, "Genres");
|
animateProgressBar(true);
|
||||||
|
|
||||||
|
if(syncViewModel.isCrossSyncSongGenre()) syncSongsPerGenre((ArrayList<Genre>) media);
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -168,14 +167,14 @@ public class SyncFragment extends Fragment {
|
||||||
@Override
|
@Override
|
||||||
public void onError(Exception exception) {
|
public void onError(Exception exception) {
|
||||||
Log.e(TAG, "onError: " + exception.getMessage());
|
Log.e(TAG, "onError: " + exception.getMessage());
|
||||||
setProgress(false, "PlayList");
|
animateProgressBar(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadMedia(List<?> media) {
|
public void onLoadMedia(List<?> media) {
|
||||||
PlaylistRepository repository = new PlaylistRepository(activity.getApplication());
|
PlaylistRepository repository = new PlaylistRepository(activity.getApplication());
|
||||||
repository.insertAll((ArrayList<Playlist>) media);
|
repository.insertAll((ArrayList<Playlist>) media);
|
||||||
setProgress(true, "PlayList");
|
animateProgressBar(true);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -186,41 +185,52 @@ public class SyncFragment extends Fragment {
|
||||||
@Override
|
@Override
|
||||||
public void onError(Exception exception) {
|
public void onError(Exception exception) {
|
||||||
Log.e(TAG, "onError: " + exception.getMessage());
|
Log.e(TAG, "onError: " + exception.getMessage());
|
||||||
setProgress(false, "Songs");
|
animateProgressBar(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadMedia(List<?> media) {
|
public void onLoadMedia(List<?> media) {
|
||||||
SongRepository repository = new SongRepository(activity.getApplication());
|
SongRepository repository = new SongRepository(activity.getApplication());
|
||||||
repository.insertAll((ArrayList<Song>) media);
|
repository.insertAll((ArrayList<Song>) media);
|
||||||
setProgress(true, "Songs");
|
animateProgressBar(true);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void syncSongsPerGenre(List<Genre> genres) {
|
||||||
|
for (Genre genre : genres) {
|
||||||
|
SyncUtil.getSongsPerGenre(requireContext(), new MediaCallback() {
|
||||||
|
@Override
|
||||||
|
public void onError(Exception exception) {
|
||||||
|
Log.e(TAG, "onError: " + exception.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
private void setProgress(boolean step, String who) {
|
@Override
|
||||||
if (step) {
|
public void onLoadMedia(List<?> media) {
|
||||||
Log.d(TAG, "setProgress " + who + ": adding " + increment);
|
GenreRepository repository = new GenreRepository(App.getInstance());
|
||||||
progressing.add(increment);
|
repository.insertPerGenre((ArrayList<SongGenreCross>) media);
|
||||||
bind.loadingProgressBar.setProgress(bind.loadingProgressBar.getProgress() + increment, true);
|
}
|
||||||
} else {
|
}, genre.id);
|
||||||
Log.d(TAG, "setProgress" + who + ": adding " + 0);
|
|
||||||
progressing.add(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
animateProgressBar(true);
|
||||||
|
PreferenceUtil.getInstance(requireContext()).setSongGenreSync(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void animateProgressBar(boolean step) {
|
||||||
|
syncViewModel.setProgress(step);
|
||||||
|
bind.loadingProgressBar.setProgress(syncViewModel.getProgressBarInfo(), true);
|
||||||
countProgress();
|
countProgress();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void countProgress() {
|
private void countProgress() {
|
||||||
if (progressing.size() == stepMax) {
|
if (syncViewModel.getProgress() == syncViewModel.getStep()) {
|
||||||
if (bind.loadingProgressBar.getProgress() == 100)
|
if (syncViewModel.getProgressBarInfo() >= 100)
|
||||||
terminate();
|
terminate();
|
||||||
else
|
else
|
||||||
Toast.makeText(requireContext(), "Sync error", Toast.LENGTH_SHORT).show();
|
Toast.makeText(requireContext(), "Sync error", Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
|
|
||||||
Log.d(TAG, "countProgress: SIZE: " + progressing.size() + " - SUM: " + bind.loadingProgressBar.getProgress());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void terminate() {
|
private void terminate() {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package com.cappielloantonio.play.util;
|
package com.cappielloantonio.play.util;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.os.Bundle;
|
||||||
|
|
||||||
import com.cappielloantonio.play.App;
|
import com.cappielloantonio.play.App;
|
||||||
import com.cappielloantonio.play.interfaces.MediaCallback;
|
import com.cappielloantonio.play.interfaces.MediaCallback;
|
||||||
|
|
@ -202,4 +203,16 @@ public class SyncUtil {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Bundle getSyncBundle(Boolean syncAlbum, Boolean syncArtist, Boolean syncGenres, Boolean syncPlaylist, Boolean syncSong, Boolean crossSyncSongGenre) {
|
||||||
|
Bundle bundle = new Bundle();
|
||||||
|
bundle.putBoolean("sync_album", syncAlbum);
|
||||||
|
bundle.putBoolean("sync_artist", syncArtist);
|
||||||
|
bundle.putBoolean("sync_genres", syncGenres);
|
||||||
|
bundle.putBoolean("sync_playlist", syncPlaylist);
|
||||||
|
bundle.putBoolean("sync_song", syncSong);
|
||||||
|
bundle.putBoolean("cross_sync_song_genre", crossSyncSongGenre);
|
||||||
|
|
||||||
|
return bundle;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,18 +7,17 @@ import androidx.lifecycle.AndroidViewModel;
|
||||||
import androidx.lifecycle.LiveData;
|
import androidx.lifecycle.LiveData;
|
||||||
|
|
||||||
import com.cappielloantonio.play.model.Genre;
|
import com.cappielloantonio.play.model.Genre;
|
||||||
import com.cappielloantonio.play.model.RecentSearch;
|
|
||||||
import com.cappielloantonio.play.model.Song;
|
|
||||||
import com.cappielloantonio.play.repository.GenreRepository;
|
import com.cappielloantonio.play.repository.GenreRepository;
|
||||||
import com.cappielloantonio.play.repository.RecentSearchRepository;
|
|
||||||
import com.cappielloantonio.play.repository.SongRepository;
|
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class FilterViewModel extends AndroidViewModel {
|
public class FilterViewModel extends AndroidViewModel {
|
||||||
private GenreRepository genreRepository;
|
private GenreRepository genreRepository;
|
||||||
|
|
||||||
private LiveData<List<Genre>> allGenres;
|
private LiveData<List<Genre>> allGenres;
|
||||||
|
private ArrayList<String> selectedFiltersID = new ArrayList<>();
|
||||||
|
private ArrayList<String> selectedFilters = new ArrayList<>();
|
||||||
|
|
||||||
public FilterViewModel(@NonNull Application application) {
|
public FilterViewModel(@NonNull Application application) {
|
||||||
super(application);
|
super(application);
|
||||||
|
|
@ -30,4 +29,22 @@ public class FilterViewModel extends AndroidViewModel {
|
||||||
allGenres = genreRepository.getListLiveGenres();
|
allGenres = genreRepository.getListLiveGenres();
|
||||||
return allGenres;
|
return allGenres;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void addFilter(String filterID, String filterName) {
|
||||||
|
selectedFiltersID.add(filterID);
|
||||||
|
selectedFilters.add(filterName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeFilter(String filterID, String filterName) {
|
||||||
|
selectedFiltersID.remove(filterID);
|
||||||
|
selectedFilters.remove(filterName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArrayList<String> getFilters() {
|
||||||
|
return selectedFiltersID;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArrayList<String> getFilterNames() {
|
||||||
|
return selectedFilters;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package com.cappielloantonio.play.viewmodel;
|
package com.cappielloantonio.play.viewmodel;
|
||||||
|
|
||||||
import android.app.Application;
|
import android.app.Application;
|
||||||
|
import android.text.TextUtils;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.lifecycle.AndroidViewModel;
|
import androidx.lifecycle.AndroidViewModel;
|
||||||
|
|
@ -11,6 +12,7 @@ import com.cappielloantonio.play.model.Genre;
|
||||||
import com.cappielloantonio.play.model.Song;
|
import com.cappielloantonio.play.model.Song;
|
||||||
import com.cappielloantonio.play.repository.SongRepository;
|
import com.cappielloantonio.play.repository.SongRepository;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class SongListPageViewModel extends AndroidViewModel {
|
public class SongListPageViewModel extends AndroidViewModel {
|
||||||
|
|
@ -21,6 +23,8 @@ public class SongListPageViewModel extends AndroidViewModel {
|
||||||
public String title;
|
public String title;
|
||||||
public Genre genre;
|
public Genre genre;
|
||||||
public Artist artist;
|
public Artist artist;
|
||||||
|
public ArrayList<String> filters = new ArrayList<>();
|
||||||
|
public ArrayList<String> filterNames = new ArrayList<>();
|
||||||
|
|
||||||
public SongListPageViewModel(@NonNull Application application) {
|
public SongListPageViewModel(@NonNull Application application) {
|
||||||
super(application);
|
super(application);
|
||||||
|
|
@ -45,8 +49,15 @@ public class SongListPageViewModel extends AndroidViewModel {
|
||||||
case Song.BY_ARTIST:
|
case Song.BY_ARTIST:
|
||||||
songList = songRepository.getArtistListLiveTopSong(artist.getId());
|
songList = songRepository.getArtistListLiveTopSong(artist.getId());
|
||||||
break;
|
break;
|
||||||
|
case Song.BY_GENRES:
|
||||||
|
songList = songRepository.getFilteredListLiveSong(filters);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return songList;
|
return songList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getFiltersTitle() {
|
||||||
|
return TextUtils.join(", ", filterNames);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,93 @@
|
||||||
|
package com.cappielloantonio.play.viewmodel;
|
||||||
|
|
||||||
|
import android.app.Application;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.lifecycle.AndroidViewModel;
|
||||||
|
import androidx.lifecycle.LiveData;
|
||||||
|
|
||||||
|
import com.cappielloantonio.play.model.Song;
|
||||||
|
import com.cappielloantonio.play.repository.SongRepository;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class SyncViewModel extends AndroidViewModel {
|
||||||
|
private static final String TAG = "SyncViewModel";
|
||||||
|
|
||||||
|
private boolean syncAlbum = false;
|
||||||
|
private boolean syncArtist = false;
|
||||||
|
private boolean syncGenres = false;
|
||||||
|
private boolean syncPlaylist = false;
|
||||||
|
private boolean syncSong = false;
|
||||||
|
private boolean crossSyncSongGenre = false;
|
||||||
|
|
||||||
|
private int step = 0;
|
||||||
|
private int progress = 0;
|
||||||
|
|
||||||
|
|
||||||
|
public SyncViewModel(@NonNull Application application) {
|
||||||
|
super(application);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setArguemnts(Bundle bundle) {
|
||||||
|
syncAlbum = bundle.getBoolean("sync_album", false);
|
||||||
|
syncArtist = bundle.getBoolean("sync_artist", false);
|
||||||
|
syncGenres = bundle.getBoolean("sync_genres", false);
|
||||||
|
syncPlaylist = bundle.getBoolean("sync_playlist", false);
|
||||||
|
syncSong = bundle.getBoolean("sync_song", false);
|
||||||
|
crossSyncSongGenre = bundle.getBoolean("cross_sync_song_genre", false);
|
||||||
|
|
||||||
|
countStep();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void countStep() {
|
||||||
|
if(syncAlbum) step++;
|
||||||
|
if(syncArtist) step++;
|
||||||
|
if(syncGenres) step++;
|
||||||
|
if(syncPlaylist) step++;
|
||||||
|
if(syncSong) step++;
|
||||||
|
if(crossSyncSongGenre) step++;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isSyncAlbum() {
|
||||||
|
return syncAlbum;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isSyncArtist() {
|
||||||
|
return syncArtist;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isSyncGenres() {
|
||||||
|
return syncGenres;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isSyncPlaylist() {
|
||||||
|
return syncPlaylist;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isSyncSong() {
|
||||||
|
return syncSong;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isCrossSyncSongGenre() {
|
||||||
|
return crossSyncSongGenre;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getStep() {
|
||||||
|
return step;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getProgress() {
|
||||||
|
return progress;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setProgress(Boolean step) {
|
||||||
|
if(step) progress++;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getProgressBarInfo() {
|
||||||
|
return progress * (100 / step);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -28,17 +28,40 @@
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:paddingBottom="8dp">
|
android:paddingBottom="8dp">
|
||||||
|
|
||||||
<TextView
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:fontFamily="@font/open_sans_font_family"
|
android:orientation="horizontal"
|
||||||
android:paddingStart="16dp"
|
android:paddingStart="8dp"
|
||||||
android:paddingTop="20dp"
|
android:paddingTop="8dp"
|
||||||
android:paddingEnd="16dp"
|
android:paddingEnd="8dp">
|
||||||
android:text="Filter"
|
|
||||||
android:textColor="@color/titleTextColor"
|
<TextView
|
||||||
android:textSize="22sp"
|
android:layout_width="0dp"
|
||||||
android:textStyle="bold" />
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:fontFamily="@font/open_sans_font_family"
|
||||||
|
android:paddingStart="8dp"
|
||||||
|
android:paddingTop="12dp"
|
||||||
|
android:paddingEnd="8dp"
|
||||||
|
android:text="Filter"
|
||||||
|
android:textColor="@color/titleTextColor"
|
||||||
|
android:textSize="22sp"
|
||||||
|
android:textStyle="bold" />
|
||||||
|
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/finish_filtering_text_view_clickable"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:fontFamily="@font/open_sans_font_family"
|
||||||
|
android:paddingStart="8dp"
|
||||||
|
android:paddingTop="12dp"
|
||||||
|
android:paddingEnd="8dp"
|
||||||
|
android:text="Finish"
|
||||||
|
android:textColor="@color/subtitleTextColor"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
<com.google.android.material.chip.ChipGroup
|
<com.google.android.material.chip.ChipGroup
|
||||||
android:id="@+id/filters_chips_group"
|
android:id="@+id/filters_chips_group"
|
||||||
|
|
|
||||||
|
|
@ -28,17 +28,41 @@
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:paddingBottom="8dp">
|
android:paddingBottom="8dp">
|
||||||
|
|
||||||
<TextView
|
<!-- Label and button -->
|
||||||
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:fontFamily="@font/open_sans_font_family"
|
android:orientation="horizontal"
|
||||||
android:paddingStart="16dp"
|
android:paddingStart="8dp"
|
||||||
android:paddingTop="20dp"
|
android:paddingTop="8dp"
|
||||||
android:paddingEnd="16dp"
|
android:paddingEnd="8dp">
|
||||||
android:text="Genre Catalogue"
|
|
||||||
android:textColor="@color/titleTextColor"
|
<TextView
|
||||||
android:textSize="22sp"
|
android:layout_width="0dp"
|
||||||
android:textStyle="bold" />
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:fontFamily="@font/open_sans_font_family"
|
||||||
|
android:paddingStart="8dp"
|
||||||
|
android:paddingTop="12dp"
|
||||||
|
android:paddingEnd="8dp"
|
||||||
|
android:text="Genre Catalogue"
|
||||||
|
android:textColor="@color/titleTextColor"
|
||||||
|
android:textSize="22sp"
|
||||||
|
android:textStyle="bold" />
|
||||||
|
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/filter_genres_text_view_clickable"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:fontFamily="@font/open_sans_font_family"
|
||||||
|
android:paddingStart="8dp"
|
||||||
|
android:paddingTop="12dp"
|
||||||
|
android:paddingEnd="8dp"
|
||||||
|
android:text="Filter"
|
||||||
|
android:textColor="@color/subtitleTextColor"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
android:id="@+id/genre_catalogue_recycler_view"
|
android:id="@+id/genre_catalogue_recycler_view"
|
||||||
|
|
|
||||||
|
|
@ -194,8 +194,21 @@
|
||||||
android:clipToPadding="false"
|
android:clipToPadding="false"
|
||||||
android:paddingStart="16dp"
|
android:paddingStart="16dp"
|
||||||
android:paddingTop="8dp"
|
android:paddingTop="8dp"
|
||||||
android:paddingEnd="8dp"
|
android:paddingEnd="8dp"/>
|
||||||
android:paddingBottom="8dp" />
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/sync_genre_button"
|
||||||
|
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:layout_marginTop="4dp"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
android:paddingBottom="12dp"
|
||||||
|
android:text="Sync Genres"
|
||||||
|
android:textAllCaps="false"
|
||||||
|
android:textColor="@color/normalTextColor"
|
||||||
|
app:cornerRadius="24dp" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@
|
||||||
app:areSuggestionsDisabled="true"
|
app:areSuggestionsDisabled="true"
|
||||||
app:cardBackgroundColor="@color/cardColor"
|
app:cardBackgroundColor="@color/cardColor"
|
||||||
app:cardCornerRadius="4dp"
|
app:cardCornerRadius="4dp"
|
||||||
app:cardElevation="0dp"
|
app:cardElevation="2dp"
|
||||||
app:clearInputButtonDrawable="@drawable/ic_close"
|
app:clearInputButtonDrawable="@drawable/ic_close"
|
||||||
app:dividerColor="@color/dividerColor"
|
app:dividerColor="@color/dividerColor"
|
||||||
app:isClearInputButtonEnabled="true"
|
app:isClearInputButtonEnabled="true"
|
||||||
|
|
@ -28,7 +28,6 @@
|
||||||
app:queryInputHint="@string/search_hint"
|
app:queryInputHint="@string/search_hint"
|
||||||
app:queryInputHintColor="@color/hintTextColor"
|
app:queryInputHintColor="@color/hintTextColor"
|
||||||
app:queryInputTextColor="@color/hintTextColor"
|
app:queryInputTextColor="@color/hintTextColor"
|
||||||
app:rightButtonDrawable="@drawable/ic_filter"
|
|
||||||
app:shouldDimBehind="false" />
|
app:shouldDimBehind="false" />
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@
|
||||||
<action
|
<action
|
||||||
android:id="@+id/action_loginFragment_to_homeFragment"
|
android:id="@+id/action_loginFragment_to_homeFragment"
|
||||||
app:destination="@id/homeFragment"
|
app:destination="@id/homeFragment"
|
||||||
app:popUpTo="@id/landingFragment"
|
app:popUpTo="@id/loginFragment"
|
||||||
app:popUpToInclusive="true" />
|
app:popUpToInclusive="true" />
|
||||||
</fragment>
|
</fragment>
|
||||||
|
|
||||||
|
|
@ -91,6 +91,11 @@
|
||||||
<action
|
<action
|
||||||
android:id="@+id/action_libraryFragment_to_songListPageFragment"
|
android:id="@+id/action_libraryFragment_to_songListPageFragment"
|
||||||
app:destination="@id/songListPageFragment" />
|
app:destination="@id/songListPageFragment" />
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_libraryFragment_to_syncFragment"
|
||||||
|
app:destination="@id/syncFragment"
|
||||||
|
app:popUpTo="@id/libraryFragment"
|
||||||
|
app:popUpToInclusive="true" />
|
||||||
</fragment>
|
</fragment>
|
||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/settingsFragment"
|
android:id="@+id/settingsFragment"
|
||||||
|
|
@ -102,9 +107,6 @@
|
||||||
android:name="com.cappielloantonio.play.ui.fragment.SearchFragment"
|
android:name="com.cappielloantonio.play.ui.fragment.SearchFragment"
|
||||||
android:label="SearchFragment"
|
android:label="SearchFragment"
|
||||||
tools:layout="@layout/fragment_search">
|
tools:layout="@layout/fragment_search">
|
||||||
<action
|
|
||||||
android:id="@+id/action_searchFragment_to_filterFragment"
|
|
||||||
app:destination="@id/filterFragment" />
|
|
||||||
<action
|
<action
|
||||||
android:id="@+id/action_searchFragment_to_artistPageFragment"
|
android:id="@+id/action_searchFragment_to_artistPageFragment"
|
||||||
app:destination="@id/artistPageFragment"/>
|
app:destination="@id/artistPageFragment"/>
|
||||||
|
|
@ -116,7 +118,11 @@
|
||||||
android:id="@+id/filterFragment"
|
android:id="@+id/filterFragment"
|
||||||
android:name="com.cappielloantonio.play.ui.fragment.FilterFragment"
|
android:name="com.cappielloantonio.play.ui.fragment.FilterFragment"
|
||||||
android:label="FilterFragment"
|
android:label="FilterFragment"
|
||||||
tools:layout="@layout/fragment_filter" />
|
tools:layout="@layout/fragment_filter" >
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_filterFragment_to_songListPageFragment"
|
||||||
|
app:destination="@id/songListPageFragment" />
|
||||||
|
</fragment>
|
||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/artistCatalogueFragment"
|
android:id="@+id/artistCatalogueFragment"
|
||||||
android:name="com.cappielloantonio.play.ui.fragment.ArtistCatalogueFragment"
|
android:name="com.cappielloantonio.play.ui.fragment.ArtistCatalogueFragment"
|
||||||
|
|
@ -143,6 +149,9 @@
|
||||||
<action
|
<action
|
||||||
android:id="@+id/action_genreCatalogueFragment_to_songListPageFragment"
|
android:id="@+id/action_genreCatalogueFragment_to_songListPageFragment"
|
||||||
app:destination="@id/songListPageFragment" />
|
app:destination="@id/songListPageFragment" />
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_genreCatalogueFragment_to_filterFragment"
|
||||||
|
app:destination="@id/filterFragment" />
|
||||||
</fragment>
|
</fragment>
|
||||||
|
|
||||||
<fragment
|
<fragment
|
||||||
|
|
|
||||||
77
app/src/main/res/navigation/nav_graph_home.xml
Normal file
77
app/src/main/res/navigation/nav_graph_home.xml
Normal file
|
|
@ -0,0 +1,77 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:id="@+id/nav_graph"
|
||||||
|
app:startDestination="@id/landingFragment">
|
||||||
|
|
||||||
|
<fragment
|
||||||
|
android:id="@+id/landingFragment"
|
||||||
|
android:name="com.cappielloantonio.play.ui.fragment.LandingFragment"
|
||||||
|
android:label="fragment_landing"
|
||||||
|
tools:layout="@layout/fragment_landing" >
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_landingFragment_to_loginFragment"
|
||||||
|
app:destination="@id/loginFragment"
|
||||||
|
app:popUpTo="@id/landingFragment"
|
||||||
|
app:popUpToInclusive="true" />
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_landingFragment_to_homeFragment"
|
||||||
|
app:destination="@id/homeFragment"
|
||||||
|
app:popUpTo="@id/landingFragment"
|
||||||
|
app:popUpToInclusive="true" />
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_landingFragment_to_syncFragment"
|
||||||
|
app:destination="@id/syncFragment"
|
||||||
|
app:popUpTo="@id/landingFragment"
|
||||||
|
app:popUpToInclusive="true" />
|
||||||
|
</fragment>
|
||||||
|
|
||||||
|
<fragment
|
||||||
|
android:id="@+id/loginFragment"
|
||||||
|
android:name="com.cappielloantonio.play.ui.fragment.LoginFragment"
|
||||||
|
android:label="LoginFragment"
|
||||||
|
tools:layout="@layout/fragment_login">
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_loginFragment_to_syncFragment"
|
||||||
|
app:destination="@id/syncFragment"
|
||||||
|
app:popUpTo="@id/loginFragment"
|
||||||
|
app:popUpToInclusive="true" />
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_loginFragment_to_homeFragment"
|
||||||
|
app:destination="@id/homeFragment"
|
||||||
|
app:popUpTo="@id/loginFragment"
|
||||||
|
app:popUpToInclusive="true" />
|
||||||
|
</fragment>
|
||||||
|
|
||||||
|
<fragment
|
||||||
|
android:id="@+id/syncFragment"
|
||||||
|
android:name="com.cappielloantonio.play.ui.fragment.SyncFragment"
|
||||||
|
android:label="SyncFragment"
|
||||||
|
tools:layout="@layout/fragment_sync">
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_syncFragment_to_homeFragment"
|
||||||
|
app:destination="@id/homeFragment"
|
||||||
|
app:popUpTo="@id/syncFragment"
|
||||||
|
app:popUpToInclusive="true" />
|
||||||
|
</fragment>
|
||||||
|
|
||||||
|
<fragment
|
||||||
|
android:id="@+id/homeFragment"
|
||||||
|
android:name="com.cappielloantonio.play.ui.fragment.HomeFragment"
|
||||||
|
android:label="HomeFragment"
|
||||||
|
tools:layout="@layout/fragment_home">
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_homeFragment_to_syncFragment"
|
||||||
|
app:destination="@id/syncFragment" />
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_homeFragment_to_songListPageFragment"
|
||||||
|
app:destination="@id/songListPageFragment" />
|
||||||
|
</fragment>
|
||||||
|
|
||||||
|
<fragment
|
||||||
|
android:id="@+id/songListPageFragment"
|
||||||
|
android:name="com.cappielloantonio.play.ui.fragment.SongListPageFragment"
|
||||||
|
android:label="SongListPageFragment"
|
||||||
|
tools:layout="@layout/fragment_song_list_page"/>
|
||||||
|
</navigation>
|
||||||
82
app/src/main/res/navigation/nav_graph_library.xml
Normal file
82
app/src/main/res/navigation/nav_graph_library.xml
Normal file
|
|
@ -0,0 +1,82 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:id="@+id/nav_graph">
|
||||||
|
|
||||||
|
<fragment
|
||||||
|
android:id="@+id/libraryFragment"
|
||||||
|
android:name="com.cappielloantonio.play.ui.fragment.LibraryFragment"
|
||||||
|
android:label="LibraryFragment"
|
||||||
|
tools:layout="@layout/fragment_library">
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_libraryFragment_to_artistCatalogueFragment"
|
||||||
|
app:destination="@id/artistCatalogueFragment" />
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_libraryFragment_to_albumCatalogueFragment"
|
||||||
|
app:destination="@id/albumCatalogueFragment" />
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_libraryFragment_to_genreCatalogueFragment"
|
||||||
|
app:destination="@id/genreCatalogueFragment" />
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_libraryFragment_to_artistPageFragment"
|
||||||
|
app:destination="@id/artistPageFragment"/>
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_libraryFragment_to_albumPageFragment"
|
||||||
|
app:destination="@id/albumPageFragment" />
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_libraryFragment_to_songListPageFragment"
|
||||||
|
app:destination="@id/songListPageFragment" />
|
||||||
|
</fragment>
|
||||||
|
|
||||||
|
<fragment
|
||||||
|
android:id="@+id/artistCatalogueFragment"
|
||||||
|
android:name="com.cappielloantonio.play.ui.fragment.ArtistCatalogueFragment"
|
||||||
|
android:label="ArtistCatalogueFragment"
|
||||||
|
tools:layout="@layout/fragment_artist_catalogue">
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_artistCatalogueFragment_to_artistPageFragment"
|
||||||
|
app:destination="@id/artistPageFragment"/>
|
||||||
|
</fragment>
|
||||||
|
<fragment
|
||||||
|
android:id="@+id/albumCatalogueFragment"
|
||||||
|
android:name="com.cappielloantonio.play.ui.fragment.AlbumCatalogueFragment"
|
||||||
|
android:label="AlbumCatalogueFragment"
|
||||||
|
tools:layout="@layout/fragment_album_catalogue">
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_albumCatalogueFragment_to_albumPageFragment"
|
||||||
|
app:destination="@id/albumPageFragment" />
|
||||||
|
</fragment>
|
||||||
|
<fragment
|
||||||
|
android:id="@+id/genreCatalogueFragment"
|
||||||
|
android:name="com.cappielloantonio.play.ui.fragment.GenreCatalogueFragment"
|
||||||
|
android:label="GenreCatalogueFragment"
|
||||||
|
tools:layout="@layout/fragment_genre_catalogue">
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_genreCatalogueFragment_to_songListPageFragment"
|
||||||
|
app:destination="@id/songListPageFragment" />
|
||||||
|
</fragment>
|
||||||
|
|
||||||
|
<fragment
|
||||||
|
android:id="@+id/artistPageFragment"
|
||||||
|
android:name="com.cappielloantonio.play.ui.fragment.ArtistPageFragment"
|
||||||
|
android:label="ArtistPageFragment"
|
||||||
|
tools:layout="@layout/fragment_artist_page">
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_artistPageFragment_to_albumPageFragment"
|
||||||
|
app:destination="@id/albumPageFragment" />
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_artistPageFragment_to_songListPageFragment"
|
||||||
|
app:destination="@id/songListPageFragment" />
|
||||||
|
</fragment>
|
||||||
|
<fragment
|
||||||
|
android:id="@+id/albumPageFragment"
|
||||||
|
android:name="com.cappielloantonio.play.ui.fragment.AlbumPageFragment"
|
||||||
|
android:label="AlbumPageFragment"
|
||||||
|
tools:layout="@layout/fragment_album_page"/>
|
||||||
|
<fragment
|
||||||
|
android:id="@+id/songListPageFragment"
|
||||||
|
android:name="com.cappielloantonio.play.ui.fragment.SongListPageFragment"
|
||||||
|
android:label="SongListPageFragment"
|
||||||
|
tools:layout="@layout/fragment_song_list_page"/>
|
||||||
|
</navigation>
|
||||||
52
app/src/main/res/navigation/nav_graph_search.xml
Normal file
52
app/src/main/res/navigation/nav_graph_search.xml
Normal file
|
|
@ -0,0 +1,52 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:id="@+id/nav_graph">
|
||||||
|
|
||||||
|
|
||||||
|
<fragment
|
||||||
|
android:id="@+id/searchFragment"
|
||||||
|
android:name="com.cappielloantonio.play.ui.fragment.SearchFragment"
|
||||||
|
android:label="SearchFragment"
|
||||||
|
tools:layout="@layout/fragment_search">
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_searchFragment_to_filterFragment"
|
||||||
|
app:destination="@id/filterFragment" />
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_searchFragment_to_artistPageFragment"
|
||||||
|
app:destination="@id/artistPageFragment"/>
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_searchFragment_to_albumPageFragment"
|
||||||
|
app:destination="@id/albumPageFragment" />
|
||||||
|
</fragment>
|
||||||
|
<fragment
|
||||||
|
android:id="@+id/filterFragment"
|
||||||
|
android:name="com.cappielloantonio.play.ui.fragment.FilterFragment"
|
||||||
|
android:label="FilterFragment"
|
||||||
|
tools:layout="@layout/fragment_filter" />
|
||||||
|
|
||||||
|
|
||||||
|
<fragment
|
||||||
|
android:id="@+id/artistPageFragment"
|
||||||
|
android:name="com.cappielloantonio.play.ui.fragment.ArtistPageFragment"
|
||||||
|
android:label="ArtistPageFragment"
|
||||||
|
tools:layout="@layout/fragment_artist_page">
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_artistPageFragment_to_albumPageFragment"
|
||||||
|
app:destination="@id/albumPageFragment" />
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_artistPageFragment_to_songListPageFragment"
|
||||||
|
app:destination="@id/songListPageFragment" />
|
||||||
|
</fragment>
|
||||||
|
<fragment
|
||||||
|
android:id="@+id/albumPageFragment"
|
||||||
|
android:name="com.cappielloantonio.play.ui.fragment.AlbumPageFragment"
|
||||||
|
android:label="AlbumPageFragment"
|
||||||
|
tools:layout="@layout/fragment_album_page"/>
|
||||||
|
<fragment
|
||||||
|
android:id="@+id/songListPageFragment"
|
||||||
|
android:name="com.cappielloantonio.play.ui.fragment.SongListPageFragment"
|
||||||
|
android:label="SongListPageFragment"
|
||||||
|
tools:layout="@layout/fragment_song_list_page"/>
|
||||||
|
</navigation>
|
||||||
12
app/src/main/res/navigation/nav_graph_settings.xml
Normal file
12
app/src/main/res/navigation/nav_graph_settings.xml
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:id="@+id/nav_graph">
|
||||||
|
|
||||||
|
<fragment
|
||||||
|
android:id="@+id/settingsFragment"
|
||||||
|
android:name="com.cappielloantonio.play.ui.fragment.SettingsFragment"
|
||||||
|
android:label="SettingsFragment"
|
||||||
|
tools:layout="@layout/fragment_settings"/>
|
||||||
|
</navigation>
|
||||||
|
|
@ -36,7 +36,7 @@
|
||||||
<color name="bottomNavIconColor">#707070</color>
|
<color name="bottomNavIconColor">#707070</color>
|
||||||
|
|
||||||
<color name="chipBorderColor">#707070</color>
|
<color name="chipBorderColor">#707070</color>
|
||||||
<color name="chipSelectedBackgroundColor">#444444</color>
|
<color name="chipSelectedBackgroundColor">#606060</color>
|
||||||
<color name="chipUnelectedBackgroundColor">#1D1D1D</color>
|
<color name="chipUnelectedBackgroundColor">#1D1D1D</color>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue