diff --git a/app/src/main/java/org/oxycblt/auxio/MainFragment.kt b/app/src/main/java/org/oxycblt/auxio/MainFragment.kt index 5505a2d63..78bf9b82a 100644 --- a/app/src/main/java/org/oxycblt/auxio/MainFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/MainFragment.kt @@ -36,7 +36,7 @@ class MainFragment : Fragment() { inflater, R.layout.fragment_main, container, false ) - val adapter = FragmentAdapter(requireActivity()) + val adapter = PagerAdapter(requireActivity()) binding.viewPager.adapter = adapter Log.d(this::class.simpleName, "Fragment Created.") @@ -47,8 +47,8 @@ class MainFragment : Fragment() { private fun getFragment(pos: Int): Fragment { if (shownFragments.contains(pos)) { return when (pos) { - 0 -> libraryFragment - 1 -> songsFragment + 1 -> libraryFragment + 0 -> songsFragment else -> libraryFragment } @@ -63,7 +63,7 @@ class MainFragment : Fragment() { return libraryFragment } - inner class FragmentAdapter(activity: FragmentActivity) : FragmentStateAdapter(activity) { + private inner class PagerAdapter(activity: FragmentActivity) : FragmentStateAdapter(activity) { override fun getItemCount(): Int = shownFragments.size override fun createFragment(position: Int): Fragment { 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 b7cab88ee..7b819db5d 100644 --- a/app/src/main/java/org/oxycblt/auxio/library/LibraryFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/library/LibraryFragment.kt @@ -7,11 +7,10 @@ import android.view.View import android.view.ViewGroup import androidx.databinding.DataBindingUtil import androidx.fragment.app.Fragment -import androidx.lifecycle.Observer 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.recycler.adapters.AlbumDataAdapter import org.oxycblt.auxio.recycler.applyDivider class LibraryFragment : Fragment() { @@ -29,18 +28,12 @@ class LibraryFragment : Fragment() { inflater, R.layout.fragment_library, container, false ) - val adapter = AlbumDataAdapter() + val adapter = AlbumDataAdapter(libraryModel.albums.value!!) + binding.libraryRecycler.adapter = adapter binding.libraryRecycler.applyDivider() binding.libraryRecycler.setHasFixedSize(true) - libraryModel.albums.observe( - viewLifecycleOwner, - Observer { - adapter.data = it - } - ) - Log.d(this::class.simpleName, "Fragment created.") return binding.root 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 deleted file mode 100644 index 9eb78765b..000000000 --- a/app/src/main/java/org/oxycblt/auxio/library/recycler/AlbumDataAdapter.kt +++ /dev/null @@ -1,40 +0,0 @@ -package org.oxycblt.auxio.library.recycler - -import android.view.LayoutInflater -import android.view.ViewGroup -import androidx.recyclerview.widget.DiffUtil -import androidx.recyclerview.widget.ListAdapter -import org.oxycblt.auxio.databinding.AlbumItemBinding -import org.oxycblt.auxio.music.models.Album -import org.oxycblt.auxio.recycler.AlbumViewHolder - -class AlbumDataAdapter : ListAdapter(DiffCallback) { - - var data = listOf() - set(newData) { - field = newData - submitList(data) - } - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AlbumViewHolder { - return AlbumViewHolder( - AlbumItemBinding.inflate(LayoutInflater.from(parent.context)) - ) - } - - override fun onBindViewHolder(holder: AlbumViewHolder, position: Int) { - val album = getItem(position) - - holder.bind(album) - } - - companion object DiffCallback : DiffUtil.ItemCallback() { - override fun areItemsTheSame(oldItem: Album, newItem: Album): Boolean { - return oldItem == newItem - } - - override fun areContentsTheSame(oldItem: Album, newItem: Album): Boolean { - return oldItem.id == newItem.id - } - } -} diff --git a/app/src/main/java/org/oxycblt/auxio/recycler/adapters/AlbumDataAdapter.kt b/app/src/main/java/org/oxycblt/auxio/recycler/adapters/AlbumDataAdapter.kt new file mode 100644 index 000000000..ce129217e --- /dev/null +++ b/app/src/main/java/org/oxycblt/auxio/recycler/adapters/AlbumDataAdapter.kt @@ -0,0 +1,25 @@ +package org.oxycblt.auxio.recycler.adapters + +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import org.oxycblt.auxio.databinding.AlbumItemBinding +import org.oxycblt.auxio.music.models.Album +import org.oxycblt.auxio.recycler.viewholders.AlbumViewHolder + +class AlbumDataAdapter(val data: List) : RecyclerView.Adapter() { + + override fun getItemCount(): Int = data.size + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AlbumViewHolder { + return AlbumViewHolder( + AlbumItemBinding.inflate(LayoutInflater.from(parent.context)) + ) + } + + override fun onBindViewHolder(holder: AlbumViewHolder, position: Int) { + val album = data[position] + + holder.bind(album) + } +} diff --git a/app/src/main/java/org/oxycblt/auxio/songs/SongDataAdapter.kt b/app/src/main/java/org/oxycblt/auxio/recycler/adapters/SongDataAdapter.kt similarity index 51% rename from app/src/main/java/org/oxycblt/auxio/songs/SongDataAdapter.kt rename to app/src/main/java/org/oxycblt/auxio/recycler/adapters/SongDataAdapter.kt index ca4833e54..5f00dc8dd 100644 --- a/app/src/main/java/org/oxycblt/auxio/songs/SongDataAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/recycler/adapters/SongDataAdapter.kt @@ -1,21 +1,15 @@ -package org.oxycblt.auxio.songs +package org.oxycblt.auxio.recycler.adapters import android.view.LayoutInflater import android.view.ViewGroup -import androidx.recyclerview.widget.DiffUtil -import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView import org.oxycblt.auxio.databinding.SongItemBinding import org.oxycblt.auxio.music.models.Song -import org.oxycblt.auxio.recycler.SongViewHolder +import org.oxycblt.auxio.recycler.viewholders.SongViewHolder -class SongDataAdapter : ListAdapter(DiffCallback) { +class SongDataAdapter(val data: List) : RecyclerView.Adapter() { - var data = listOf() - set(newData) { - field = newData - submitList(data) - } + override fun getItemCount(): Int = data.size override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SongViewHolder { val binding = SongItemBinding.inflate(LayoutInflater.from(parent.context)) @@ -29,18 +23,8 @@ class SongDataAdapter : ListAdapter(DiffCallback) { } override fun onBindViewHolder(holder: SongViewHolder, position: Int) { - val song = getItem(position) + val song = data[position] holder.bind(song) } - - companion object DiffCallback : DiffUtil.ItemCallback() { - override fun areItemsTheSame(oldItem: Song, newItem: Song): Boolean { - return oldItem == newItem - } - - override fun areContentsTheSame(oldItem: Song, newItem: Song): Boolean { - return oldItem.id == newItem.id - } - } } diff --git a/app/src/main/java/org/oxycblt/auxio/recycler/AlbumViewHolder.kt b/app/src/main/java/org/oxycblt/auxio/recycler/viewholders/AlbumViewHolder.kt similarity index 93% rename from app/src/main/java/org/oxycblt/auxio/recycler/AlbumViewHolder.kt rename to app/src/main/java/org/oxycblt/auxio/recycler/viewholders/AlbumViewHolder.kt index 9e95f9dd9..d67ff79a1 100644 --- a/app/src/main/java/org/oxycblt/auxio/recycler/AlbumViewHolder.kt +++ b/app/src/main/java/org/oxycblt/auxio/recycler/viewholders/AlbumViewHolder.kt @@ -1,4 +1,4 @@ -package org.oxycblt.auxio.recycler +package org.oxycblt.auxio.recycler.viewholders import androidx.recyclerview.widget.RecyclerView import coil.load diff --git a/app/src/main/java/org/oxycblt/auxio/recycler/SongViewHolder.kt b/app/src/main/java/org/oxycblt/auxio/recycler/viewholders/SongViewHolder.kt similarity index 93% rename from app/src/main/java/org/oxycblt/auxio/recycler/SongViewHolder.kt rename to app/src/main/java/org/oxycblt/auxio/recycler/viewholders/SongViewHolder.kt index f9014223d..8c26e084b 100644 --- a/app/src/main/java/org/oxycblt/auxio/recycler/SongViewHolder.kt +++ b/app/src/main/java/org/oxycblt/auxio/recycler/viewholders/SongViewHolder.kt @@ -1,4 +1,4 @@ -package org.oxycblt.auxio.recycler +package org.oxycblt.auxio.recycler.viewholders import androidx.recyclerview.widget.RecyclerView import coil.load diff --git a/app/src/main/java/org/oxycblt/auxio/songs/SongsFragment.kt b/app/src/main/java/org/oxycblt/auxio/songs/SongsFragment.kt index cc69bd361..d283d48b1 100644 --- a/app/src/main/java/org/oxycblt/auxio/songs/SongsFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/songs/SongsFragment.kt @@ -7,13 +7,14 @@ import android.view.View import android.view.ViewGroup import androidx.databinding.DataBindingUtil import androidx.fragment.app.Fragment -import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import org.oxycblt.auxio.R import org.oxycblt.auxio.databinding.FragmentSongsBinding +import org.oxycblt.auxio.recycler.adapters.SongDataAdapter import org.oxycblt.auxio.recycler.applyDivider class SongsFragment : Fragment() { + private val songsModel: SongsViewModel by lazy { ViewModelProvider(this).get(SongsViewModel::class.java) } @@ -27,18 +28,11 @@ class SongsFragment : Fragment() { inflater, R.layout.fragment_songs, container, false ) - val adapter = SongDataAdapter() + val adapter = SongDataAdapter(songsModel.songs.value!!) binding.songRecycler.adapter = adapter binding.songRecycler.applyDivider() binding.songRecycler.setHasFixedSize(true) - songsModel.songs.observe( - viewLifecycleOwner, - Observer { - adapter.data = it - } - ) - Log.d(this::class.simpleName, "Fragment created.") return binding.root diff --git a/app/src/main/res/layout/album_item.xml b/app/src/main/res/layout/album_item.xml index 2efc19cc4..7119c9630 100644 --- a/app/src/main/res/layout/album_item.xml +++ b/app/src/main/res/layout/album_item.xml @@ -23,8 +23,7 @@ app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" - tools:src="@tools:sample/backgrounds/scenic" - tools:srcCompat="@tools:sample/backgrounds/scenic" /> + tools:src="@tools:sample/backgrounds/scenic" /> + tools:src="@tools:sample/backgrounds/scenic" />