home: disable action during loading
This commit is contained in:
parent
56ff872f04
commit
b65481dd9c
7 changed files with 40 additions and 13 deletions
|
@ -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()
|
||||
|
|
|
@ -133,7 +133,6 @@ constructor(
|
|||
val playlistSort: Sort
|
||||
get() = listSettings.playlistSort
|
||||
|
||||
|
||||
private val homeGenerator = homeGeneratorFactory.create(this)
|
||||
|
||||
/**
|
||||
|
|
|
@ -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<Music>) {
|
||||
|
|
|
@ -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<Music>) {
|
||||
|
|
|
@ -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<Music>) {
|
||||
|
|
|
@ -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<Playlist>) {
|
||||
private fun updateNoMusicIndicator(
|
||||
empty: Boolean,
|
||||
playlists: List<Playlist>,
|
||||
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() }
|
||||
}
|
||||
|
|
|
@ -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<Music>) {
|
||||
|
|
Loading…
Reference in a new issue