diff --git a/app/src/main/java/org/oxycblt/auxio/home/HomeGenerator.kt b/app/src/main/java/org/oxycblt/auxio/home/HomeGenerator.kt index 619968c0a..be8fd5043 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/HomeGenerator.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/HomeGenerator.kt @@ -148,8 +148,7 @@ private class HomeGeneratorImpl( homeSettings.unregisterListener(this) } - override fun empty() = - musicRepository.library?.empty() ?: true + override fun empty() = musicRepository.library?.empty() ?: true override fun songs() = musicRepository.library?.let { listSettings.songSort.songs(it.songs) } ?: emptyList() diff --git a/app/src/main/java/org/oxycblt/auxio/home/HomeViewModel.kt b/app/src/main/java/org/oxycblt/auxio/home/HomeViewModel.kt index 4175fd6a0..a140a4dff 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/HomeViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/HomeViewModel.kt @@ -133,7 +133,6 @@ constructor( val playlistSort: Sort get() = listSettings.playlistSort - private val homeGenerator = homeGeneratorFactory.create(this) /** diff --git a/app/src/main/java/org/oxycblt/auxio/home/list/AlbumListFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/list/AlbumListFragment.kt index 094986288..848a685c0 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/list/AlbumListFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/list/AlbumListFragment.kt @@ -23,6 +23,7 @@ import android.text.format.DateUtils import android.view.LayoutInflater import android.view.ViewGroup import androidx.core.view.isInvisible +import androidx.core.view.isVisible import androidx.fragment.app.activityViewModels import dagger.hilt.android.AndroidEntryPoint import java.util.Formatter @@ -37,6 +38,7 @@ import org.oxycblt.auxio.list.adapter.SelectionIndicatorAdapter import org.oxycblt.auxio.list.recycler.AlbumViewHolder import org.oxycblt.auxio.list.recycler.FastScrollRecyclerView import org.oxycblt.auxio.list.sort.Sort +import org.oxycblt.auxio.music.IndexingState import org.oxycblt.auxio.music.MusicViewModel import org.oxycblt.auxio.music.resolve import org.oxycblt.auxio.playback.PlaybackViewModel @@ -90,7 +92,7 @@ class AlbumListFragment : binding.homeNoMusicAction.setOnClickListener { homeModel.startChooseMusicLocations() } collectImmediately(homeModel.albumList, ::updateAlbums) - collectImmediately(homeModel.empty, ::updateNoMusicIndicator) + collectImmediately(homeModel.empty, musicModel.indexingState, ::updateNoMusicIndicator) collectImmediately(listModel.selected, ::updateSelection) collectImmediately( playbackModel.song, playbackModel.parent, playbackModel.isPlaying, ::updatePlayback) @@ -158,10 +160,12 @@ class AlbumListFragment : albumAdapter.update(albums, homeModel.albumInstructions.consume()) } - private fun updateNoMusicIndicator(empty: Boolean) { + private fun updateNoMusicIndicator(empty: Boolean, indexingState: IndexingState?) { val binding = requireBinding() binding.homeRecycler.isInvisible = empty binding.homeNoMusic.isInvisible = !empty + binding.homeNoMusicAction.isVisible = + indexingState == null || (empty && indexingState is IndexingState.Completed) } private fun updateSelection(selection: List) { diff --git a/app/src/main/java/org/oxycblt/auxio/home/list/ArtistListFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/list/ArtistListFragment.kt index 29a61d652..addf0ff62 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/list/ArtistListFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/list/ArtistListFragment.kt @@ -22,6 +22,7 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.ViewGroup import androidx.core.view.isInvisible +import androidx.core.view.isVisible import androidx.fragment.app.activityViewModels import dagger.hilt.android.AndroidEntryPoint import org.oxycblt.auxio.R @@ -35,6 +36,7 @@ import org.oxycblt.auxio.list.adapter.SelectionIndicatorAdapter import org.oxycblt.auxio.list.recycler.ArtistViewHolder import org.oxycblt.auxio.list.recycler.FastScrollRecyclerView import org.oxycblt.auxio.list.sort.Sort +import org.oxycblt.auxio.music.IndexingState import org.oxycblt.auxio.music.MusicViewModel import org.oxycblt.auxio.playback.PlaybackViewModel import org.oxycblt.auxio.playback.formatDurationMs @@ -84,7 +86,7 @@ class ArtistListFragment : binding.homeNoMusicAction.setOnClickListener { homeModel.startChooseMusicLocations() } collectImmediately(homeModel.artistList, ::updateArtists) - collectImmediately(homeModel.empty, ::updateNoMusicIndicator) + collectImmediately(homeModel.empty, musicModel.indexingState, ::updateNoMusicIndicator) collectImmediately(listModel.selected, ::updateSelection) collectImmediately( playbackModel.song, playbackModel.parent, playbackModel.isPlaying, ::updatePlayback) @@ -133,10 +135,12 @@ class ArtistListFragment : artistAdapter.update(artists, homeModel.artistInstructions.consume()) } - private fun updateNoMusicIndicator(empty: Boolean) { + private fun updateNoMusicIndicator(empty: Boolean, indexingState: IndexingState?) { val binding = requireBinding() binding.homeRecycler.isInvisible = empty binding.homeNoMusic.isInvisible = !empty + binding.homeNoMusicAction.isVisible = + indexingState == null || (empty && indexingState is IndexingState.Completed) } private fun updateSelection(selection: List) { diff --git a/app/src/main/java/org/oxycblt/auxio/home/list/GenreListFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/list/GenreListFragment.kt index cbb1a5c46..e2a2142b3 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/list/GenreListFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/list/GenreListFragment.kt @@ -22,6 +22,7 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.ViewGroup import androidx.core.view.isInvisible +import androidx.core.view.isVisible import androidx.fragment.app.activityViewModels import dagger.hilt.android.AndroidEntryPoint import org.oxycblt.auxio.R @@ -35,6 +36,7 @@ import org.oxycblt.auxio.list.adapter.SelectionIndicatorAdapter import org.oxycblt.auxio.list.recycler.FastScrollRecyclerView import org.oxycblt.auxio.list.recycler.GenreViewHolder import org.oxycblt.auxio.list.sort.Sort +import org.oxycblt.auxio.music.IndexingState import org.oxycblt.auxio.music.MusicViewModel import org.oxycblt.auxio.playback.PlaybackViewModel import org.oxycblt.auxio.playback.formatDurationMs @@ -83,7 +85,7 @@ class GenreListFragment : binding.homeNoMusicAction.setOnClickListener { homeModel.startChooseMusicLocations() } collectImmediately(homeModel.genreList, ::updateGenres) - collectImmediately(homeModel.empty, ::updateNoMusicIndicator) + collectImmediately(homeModel.empty, musicModel.indexingState, ::updateNoMusicIndicator) collectImmediately(listModel.selected, ::updateSelection) collectImmediately( playbackModel.song, playbackModel.parent, playbackModel.isPlaying, ::updatePlayback) @@ -132,10 +134,12 @@ class GenreListFragment : genreAdapter.update(genres, homeModel.genreInstructions.consume()) } - private fun updateNoMusicIndicator(empty: Boolean) { + private fun updateNoMusicIndicator(empty: Boolean, indexingState: IndexingState?) { val binding = requireBinding() binding.homeRecycler.isInvisible = empty binding.homeNoMusic.isInvisible = !empty + binding.homeNoMusicAction.isVisible = + indexingState == null || (empty && indexingState is IndexingState.Completed) } private fun updateSelection(selection: List) { diff --git a/app/src/main/java/org/oxycblt/auxio/home/list/PlaylistListFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/list/PlaylistListFragment.kt index 80809aad9..11bb9d236 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/list/PlaylistListFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/list/PlaylistListFragment.kt @@ -22,6 +22,7 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.ViewGroup import androidx.core.view.isInvisible +import androidx.core.view.isVisible import androidx.fragment.app.activityViewModels import org.oxycblt.auxio.R import org.oxycblt.auxio.databinding.FragmentHomeListBinding @@ -34,6 +35,7 @@ import org.oxycblt.auxio.list.adapter.SelectionIndicatorAdapter import org.oxycblt.auxio.list.recycler.FastScrollRecyclerView import org.oxycblt.auxio.list.recycler.PlaylistViewHolder import org.oxycblt.auxio.list.sort.Sort +import org.oxycblt.auxio.music.IndexingState import org.oxycblt.auxio.music.MusicViewModel import org.oxycblt.auxio.playback.PlaybackViewModel import org.oxycblt.auxio.playback.formatDurationMs @@ -79,7 +81,11 @@ class PlaylistListFragment : binding.homeNoMusicMsg.text = getString(R.string.lng_empty_playlists) collectImmediately(homeModel.playlistList, ::updatePlaylists) - collectImmediately(homeModel.empty, homeModel.playlistList, ::updateNoMusicIndicator) + collectImmediately( + homeModel.empty, + homeModel.playlistList, + musicModel.indexingState, + ::updateNoMusicIndicator) collectImmediately(listModel.selected, ::updateSelection) collectImmediately( playbackModel.song, playbackModel.parent, playbackModel.isPlaying, ::updatePlayback) @@ -128,14 +134,21 @@ class PlaylistListFragment : playlistAdapter.update(playlists, homeModel.playlistInstructions.consume()) } - private fun updateNoMusicIndicator(empty: Boolean, playlists: List) { + private fun updateNoMusicIndicator( + empty: Boolean, + playlists: List, + indexingState: IndexingState? + ) { val binding = requireBinding() binding.homeRecycler.isInvisible = empty binding.homeNoMusic.isInvisible = !empty && playlists.isNotEmpty() if (!empty && playlists.isEmpty()) { + binding.homeNoMusicAction.isVisible = true binding.homeNoMusicAction.text = getString(R.string.lbl_new_playlist) binding.homeNoMusicAction.setOnClickListener { musicModel.createPlaylist() } } else { + binding.homeNoMusicAction.isVisible = + indexingState == null || (empty && indexingState is IndexingState.Completed) binding.homeNoMusicAction.text = getString(R.string.lbl_music_sources) binding.homeNoMusicAction.setOnClickListener { homeModel.startChooseMusicLocations() } } diff --git a/app/src/main/java/org/oxycblt/auxio/home/list/SongListFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/list/SongListFragment.kt index 1c717b476..4c1d1323b 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/list/SongListFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/list/SongListFragment.kt @@ -23,6 +23,7 @@ import android.text.format.DateUtils import android.view.LayoutInflater import android.view.ViewGroup import androidx.core.view.isInvisible +import androidx.core.view.isVisible import androidx.fragment.app.activityViewModels import dagger.hilt.android.AndroidEntryPoint import java.util.Formatter @@ -36,6 +37,7 @@ import org.oxycblt.auxio.list.adapter.SelectionIndicatorAdapter import org.oxycblt.auxio.list.recycler.FastScrollRecyclerView import org.oxycblt.auxio.list.recycler.SongViewHolder import org.oxycblt.auxio.list.sort.Sort +import org.oxycblt.auxio.music.IndexingState import org.oxycblt.auxio.music.MusicViewModel import org.oxycblt.auxio.music.resolve import org.oxycblt.auxio.playback.PlaybackViewModel @@ -88,7 +90,7 @@ class SongListFragment : binding.homeNoMusicAction.setOnClickListener { homeModel.startChooseMusicLocations() } collectImmediately(homeModel.songList, ::updateSongs) - collectImmediately(homeModel.empty, ::updateNoMusicIndicator) + collectImmediately(homeModel.empty, musicModel.indexingState, ::updateNoMusicIndicator) collectImmediately(listModel.selected, ::updateSelection) collectImmediately( playbackModel.song, playbackModel.parent, playbackModel.isPlaying, ::updatePlayback) @@ -158,10 +160,12 @@ class SongListFragment : songAdapter.update(songs, homeModel.songInstructions.consume()) } - private fun updateNoMusicIndicator(empty: Boolean) { + private fun updateNoMusicIndicator(empty: Boolean, indexingState: IndexingState?) { val binding = requireBinding() binding.homeRecycler.isInvisible = empty binding.homeNoMusic.isInvisible = !empty + binding.homeNoMusicAction.isVisible = + indexingState == null || (empty && indexingState is IndexingState.Completed) } private fun updateSelection(selection: List) {