diff --git a/app/src/main/java/com/cappielloantonio/tempo/ui/adapter/SongHorizontalAdapter.java b/app/src/main/java/com/cappielloantonio/tempo/ui/adapter/SongHorizontalAdapter.java index c2e1d7d6..95503034 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/ui/adapter/SongHorizontalAdapter.java +++ b/app/src/main/java/com/cappielloantonio/tempo/ui/adapter/SongHorizontalAdapter.java @@ -14,7 +14,9 @@ import com.cappielloantonio.tempo.R; import com.cappielloantonio.tempo.databinding.ItemHorizontalTrackBinding; import com.cappielloantonio.tempo.glide.CustomGlideRequest; import com.cappielloantonio.tempo.interfaces.ClickCallback; +import com.cappielloantonio.tempo.subsonic.models.AlbumID3; import com.cappielloantonio.tempo.subsonic.models.Child; +import com.cappielloantonio.tempo.subsonic.models.DiscTitle; import com.cappielloantonio.tempo.util.Constants; import com.cappielloantonio.tempo.util.DownloadUtil; import com.cappielloantonio.tempo.util.MusicUtil; @@ -23,20 +25,24 @@ import com.cappielloantonio.tempo.util.Preferences; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Objects; +import java.util.Optional; @UnstableApi public class SongHorizontalAdapter extends RecyclerView.Adapter { private final ClickCallback click; private final boolean showCoverArt; private final boolean showAlbum; + private final AlbumID3 album; private List songs; - public SongHorizontalAdapter(ClickCallback click, boolean showCoverArt, boolean showAlbum) { + public SongHorizontalAdapter(ClickCallback click, boolean showCoverArt, boolean showAlbum, AlbumID3 album) { this.click = click; this.showCoverArt = showCoverArt; this.showAlbum = showAlbum; this.songs = Collections.emptyList(); + this.album = album; } @NonNull @@ -81,8 +87,25 @@ public class SongHorizontalAdapter extends RecyclerView.Adapter 0 && songs.get(position - 1) != null && songs.get(position - 1).getDiscNumber() != null && songs.get(position).getDiscNumber() != null && songs.get(position - 1).getDiscNumber() < songs.get(position).getDiscNumber())) { - holder.item.differentDiskDivider.setVisibility(View.VISIBLE); + if (!showCoverArt && + (position == 0 || + (position > 0 && songs.get(position - 1) != null && + songs.get(position - 1).getDiscNumber() != null && + songs.get(position).getDiscNumber() != null && + songs.get(position - 1).getDiscNumber() < songs.get(position).getDiscNumber() + ) + ) + ) { + holder.item.differentDiskDividerSector.setVisibility(View.VISIBLE); + holder.item.discTitleTextView.setText(holder.itemView.getContext().getString(R.string.disc_titleless, songs.get(position).getDiscNumber().toString())); + + if (album.getDiscTitles() != null) { + Optional discTitle = album.getDiscTitles().stream().filter(title -> Objects.equals(title.getDisc(), songs.get(position).getDiscNumber())).findFirst(); + + if (discTitle.isPresent() && discTitle.get().getTitle() != null) { + holder.item.discTitleTextView.setText(holder.itemView.getContext().getString(R.string.disc_titleless, discTitle.get().getTitle())); + } + } } if (Preferences.showItemRating()) { diff --git a/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/AlbumPageFragment.java b/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/AlbumPageFragment.java index 99b797fe..c0de1319 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/AlbumPageFragment.java +++ b/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/AlbumPageFragment.java @@ -205,7 +205,7 @@ public class AlbumPageFragment extends Fragment implements ClickCallback { bind.songRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext())); bind.songRecyclerView.setHasFixedSize(true); - songHorizontalAdapter = new SongHorizontalAdapter(this, false, false); + songHorizontalAdapter = new SongHorizontalAdapter(this, false, false, albumPageViewModel.getAlbum()); bind.songRecyclerView.setAdapter(songHorizontalAdapter); albumPageViewModel.getAlbumSongLiveList().observe(getViewLifecycleOwner(), songs -> songHorizontalAdapter.setItems(songs)); diff --git a/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/ArtistPageFragment.java b/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/ArtistPageFragment.java index 23c034fd..9bd7fe98 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/ArtistPageFragment.java +++ b/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/ArtistPageFragment.java @@ -172,7 +172,7 @@ public class ArtistPageFragment extends Fragment implements ClickCallback { private void initTopSongsView() { bind.mostStreamedSongRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext())); - songHorizontalAdapter = new SongHorizontalAdapter(this, true, true); + songHorizontalAdapter = new SongHorizontalAdapter(this, true, true, null); bind.mostStreamedSongRecyclerView.setAdapter(songHorizontalAdapter); artistPageViewModel.getArtistTopSongList().observe(getViewLifecycleOwner(), songs -> { if (songs == null) { diff --git a/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/HomeTabMusicFragment.java b/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/HomeTabMusicFragment.java index a4cd411f..7772b5ec 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/HomeTabMusicFragment.java +++ b/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/HomeTabMusicFragment.java @@ -435,7 +435,7 @@ public class HomeTabMusicFragment extends Fragment implements ClickCallback { bind.starredTracksRecyclerView.setHasFixedSize(true); - starredSongAdapter = new SongHorizontalAdapter(this, true, false); + starredSongAdapter = new SongHorizontalAdapter(this, true, false, null); bind.starredTracksRecyclerView.setAdapter(starredSongAdapter); homeViewModel.getStarredTracks(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), songs -> { if (songs == null) { diff --git a/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/PlaylistPageFragment.java b/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/PlaylistPageFragment.java index 1ef5c931..05571a30 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/PlaylistPageFragment.java +++ b/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/PlaylistPageFragment.java @@ -200,7 +200,7 @@ public class PlaylistPageFragment extends Fragment implements ClickCallback { bind.songRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext())); bind.songRecyclerView.setHasFixedSize(true); - songHorizontalAdapter = new SongHorizontalAdapter(this, true, false); + songHorizontalAdapter = new SongHorizontalAdapter(this, true, false, null); bind.songRecyclerView.setAdapter(songHorizontalAdapter); playlistPageViewModel.getPlaylistSongLiveList().observe(getViewLifecycleOwner(), songs -> songHorizontalAdapter.setItems(songs)); diff --git a/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/SearchFragment.java b/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/SearchFragment.java index 9c9466f3..8792a98a 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/SearchFragment.java +++ b/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/SearchFragment.java @@ -112,7 +112,7 @@ public class SearchFragment extends Fragment implements ClickCallback { bind.searchResultTracksRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext())); bind.searchResultTracksRecyclerView.setHasFixedSize(true); - songHorizontalAdapter = new SongHorizontalAdapter(this, true, false); + songHorizontalAdapter = new SongHorizontalAdapter(this, true, false, null); bind.searchResultTracksRecyclerView.setAdapter(songHorizontalAdapter); } diff --git a/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/SongListPageFragment.java b/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/SongListPageFragment.java index 6a577cfb..97c49086 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/SongListPageFragment.java +++ b/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/SongListPageFragment.java @@ -166,7 +166,7 @@ public class SongListPageFragment extends Fragment implements ClickCallback { bind.songListRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext())); bind.songListRecyclerView.setHasFixedSize(true); - songHorizontalAdapter = new SongHorizontalAdapter(this, true, false); + songHorizontalAdapter = new SongHorizontalAdapter(this, true, false, null); bind.songListRecyclerView.setAdapter(songHorizontalAdapter); songListPageViewModel.getSongList().observe(getViewLifecycleOwner(), songs -> { isLoading = false; diff --git a/app/src/main/res/layout/item_horizontal_track.xml b/app/src/main/res/layout/item_horizontal_track.xml index 21c7d3c7..a993a7ab 100644 --- a/app/src/main/res/layout/item_horizontal_track.xml +++ b/app/src/main/res/layout/item_horizontal_track.xml @@ -9,14 +9,41 @@ android:paddingTop="2dp" android:paddingBottom="2dp"> - + app:layout_constraintTop_toTopOf="parent" + tools:visibility="visible"> + + + + + + app:layout_constraintTop_toBottomOf="@+id/different_disk_divider_sector" /> + app:layout_constraintTop_toBottomOf="@+id/different_disk_divider_sector" /> Please be aware that continuing with this action will result in the permanent deletion of all saved items downloaded from all servers. Delete saved items No description available + Disc %1$s Cancel Download All tracks in this folder will be downloaded. Tracks present in subfolders will not be downloaded.