diff --git a/app/src/main/java/org/oxycblt/auxio/library/LibraryFragment.kt b/app/src/main/java/org/oxycblt/auxio/library/LibraryFragment.kt index ef7ad7567..85f5d65f0 100644 --- a/app/src/main/java/org/oxycblt/auxio/library/LibraryFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/library/LibraryFragment.kt @@ -12,7 +12,6 @@ import androidx.lifecycle.ViewModelProvider import org.oxycblt.auxio.R import org.oxycblt.auxio.databinding.FragmentLibraryBinding import org.oxycblt.auxio.library.recycler.AlbumDataAdapter -import org.oxycblt.auxio.music.MusicRepository class LibraryFragment : Fragment() { @@ -32,8 +31,7 @@ class LibraryFragment : Fragment() { val adapter = AlbumDataAdapter() binding.libraryRecycler.adapter = adapter - val repo = MusicRepository.getInstance() - repo.albums.observe( + libraryModel.albums.observe( viewLifecycleOwner, Observer { adapter.data = it diff --git a/app/src/main/java/org/oxycblt/auxio/library/LibraryViewModel.kt b/app/src/main/java/org/oxycblt/auxio/library/LibraryViewModel.kt index 8cb89b350..1baf96e2b 100644 --- a/app/src/main/java/org/oxycblt/auxio/library/LibraryViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/library/LibraryViewModel.kt @@ -1,11 +1,27 @@ package org.oxycblt.auxio.library import android.util.Log +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel +import org.oxycblt.auxio.music.MusicRepository +import org.oxycblt.auxio.music.models.Album +import org.oxycblt.auxio.music.models.Artist class LibraryViewModel() : ViewModel() { + private val mArtists = MutableLiveData>() + private var mAlbums = MutableLiveData>() + + val artists: LiveData> get() = mArtists + val albums: LiveData> get() = mAlbums + init { + val repo = MusicRepository.getInstance() + + mArtists.value = repo.artists + mAlbums.value = repo.albums + Log.d(this::class.simpleName, "ViewModel created.") } } diff --git a/app/src/main/java/org/oxycblt/auxio/library/recycler/AlbumDataAdapter.kt b/app/src/main/java/org/oxycblt/auxio/library/recycler/AlbumDataAdapter.kt index a90929a8d..cd0fb4c59 100644 --- a/app/src/main/java/org/oxycblt/auxio/library/recycler/AlbumDataAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/library/recycler/AlbumDataAdapter.kt @@ -4,10 +4,10 @@ import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.ListAdapter -import org.oxycblt.auxio.databinding.LibraryItemBinding +import org.oxycblt.auxio.databinding.AlbumItemBinding import org.oxycblt.auxio.music.models.Album -class AlbumDataAdapter : ListAdapter(DiffCallback) { +class AlbumDataAdapter : ListAdapter(DiffCallback) { var data = listOf() set(newData) { @@ -15,16 +15,16 @@ class AlbumDataAdapter : ListAdapter(DiffCallback) { submitList(data) } - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): LibraryViewHolder { - return LibraryViewHolder( - LibraryItemBinding.inflate(LayoutInflater.from(parent.context)) + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AlbumViewHolder { + return AlbumViewHolder( + AlbumItemBinding.inflate(LayoutInflater.from(parent.context)) ) } - override fun onBindViewHolder(holder: LibraryViewHolder, position: Int) { + override fun onBindViewHolder(holder: AlbumViewHolder, position: Int) { val album = getItem(position) - holder.bindAlbum(album) + holder.bind(album) } companion object DiffCallback : DiffUtil.ItemCallback() { diff --git a/app/src/main/java/org/oxycblt/auxio/library/recycler/LibraryViewHolder.kt b/app/src/main/java/org/oxycblt/auxio/library/recycler/AlbumViewHolder.kt similarity index 51% rename from app/src/main/java/org/oxycblt/auxio/library/recycler/LibraryViewHolder.kt rename to app/src/main/java/org/oxycblt/auxio/library/recycler/AlbumViewHolder.kt index fbce64d3a..cf3f636b0 100644 --- a/app/src/main/java/org/oxycblt/auxio/library/recycler/LibraryViewHolder.kt +++ b/app/src/main/java/org/oxycblt/auxio/library/recycler/AlbumViewHolder.kt @@ -1,21 +1,16 @@ package org.oxycblt.auxio.library.recycler import androidx.recyclerview.widget.RecyclerView -import org.oxycblt.auxio.databinding.LibraryItemBinding +import org.oxycblt.auxio.databinding.AlbumItemBinding import org.oxycblt.auxio.music.models.Album -import org.oxycblt.auxio.music.models.Artist -class LibraryViewHolder( - private var binding: LibraryItemBinding +class AlbumViewHolder( + private var binding: AlbumItemBinding ) : RecyclerView.ViewHolder(binding.root) { // Bind the view w/new data - fun bindAlbum(album: Album) { + fun bind(album: Album) { binding.album = album binding.executePendingBindings() } - - fun bindArtist(artist: Artist) { - // TODO: Not implemented. - } } diff --git a/app/src/main/java/org/oxycblt/auxio/music/MusicRepository.kt b/app/src/main/java/org/oxycblt/auxio/music/MusicRepository.kt index c9490bce1..e1bab5091 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/MusicRepository.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/MusicRepository.kt @@ -2,10 +2,6 @@ package org.oxycblt.auxio.music import android.app.Application import android.util.Log -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.withContext import org.oxycblt.auxio.music.models.Album import org.oxycblt.auxio.music.models.Artist import org.oxycblt.auxio.music.models.Song @@ -16,15 +12,11 @@ import org.oxycblt.auxio.music.processing.MusicSorter // Storage for music data. class MusicRepository { - private val mArtists = MutableLiveData>() - private var mAlbums = MutableLiveData>() - private var mSongs = MutableLiveData>() + lateinit var artists: List + lateinit var albums: List + lateinit var songs: List - val artists: LiveData> get() = mArtists - val albums: LiveData> get() = mAlbums - val songs: LiveData> get() = mSongs - - suspend fun init(app: Application): MusicLoaderResponse { + fun init(app: Application): MusicLoaderResponse { Log.i(this::class.simpleName, "Starting initial music load...") val start = System.currentTimeMillis() @@ -32,26 +24,23 @@ class MusicRepository { val loader = MusicLoader(app) if (loader.response == MusicLoaderResponse.DONE) { - // If the loading succeeds, then process the songs and set them - // as the values on the main thread. - withContext(Dispatchers.Main) { - val sorter = MusicSorter( - loader.artists, - loader.albums, - loader.songs - ) + // If the loading succeeds, then process the songs and set them. + val sorter = MusicSorter( + loader.artists, + loader.albums, + loader.songs + ) - mSongs.value = sorter.songs - mAlbums.value = sorter.albums - mArtists.value = sorter.artists + songs = sorter.songs.toList() + albums = sorter.albums.toList() + artists = sorter.artists.toList() - val elapsed = System.currentTimeMillis() - start + val elapsed = System.currentTimeMillis() - start - Log.i( - this::class.simpleName, - "Music load completed successfully in ${elapsed}ms." - ) - } + Log.i( + this::class.simpleName, + "Music load completed successfully in ${elapsed}ms." + ) } return loader.response diff --git a/app/src/main/res/layout/library_item.xml b/app/src/main/res/layout/album_item.xml similarity index 100% rename from app/src/main/res/layout/library_item.xml rename to app/src/main/res/layout/album_item.xml