diff --git a/app/build.gradle b/app/build.gradle index 16a5472cf..27ecad532 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -76,7 +76,7 @@ dependencies { // Lint ktlint "com.pinterest:ktlint:0.37.2" - // Memory Leak checking + // Memory Leak checkin debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.4' } diff --git a/app/src/main/java/org/oxycblt/auxio/MainActivity.kt b/app/src/main/java/org/oxycblt/auxio/MainActivity.kt index 3ee5da662..1f715dcd2 100644 --- a/app/src/main/java/org/oxycblt/auxio/MainActivity.kt +++ b/app/src/main/java/org/oxycblt/auxio/MainActivity.kt @@ -5,7 +5,6 @@ import android.os.Bundle import android.util.AttributeSet import android.util.Log import android.view.View -import androidx.activity.result.ActivityResultLauncher import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatDelegate import androidx.core.content.ContextCompat @@ -39,7 +38,6 @@ class MainActivity : AppCompatActivity() { ) private lateinit var binding: ActivityMainBinding - private lateinit var permLauncher: ActivityResultLauncher private val musicModel: MusicViewModel by lazy { ViewModelProvider( @@ -105,13 +103,13 @@ class MainActivity : AppCompatActivity() { } ) + Log.d(this::class.simpleName, musicModel.done.toString()) + musicModel.response.observe( this, { - // When the load is completed successfully, remove the loadingFragment view - // and replace it with the ViewPager, now that its loaded. if (it == MusicLoaderResponse.DONE) { - // binding.loadingFragment.visibility = View.GONE + binding.loadingFragment.visibility = View.GONE binding.viewPager.visibility = View.VISIBLE } } 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 dd4a0daa2..2880397d0 100644 --- a/app/src/main/java/org/oxycblt/auxio/library/LibraryFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/library/LibraryFragment.kt @@ -11,9 +11,9 @@ import androidx.fragment.app.activityViewModels import org.oxycblt.auxio.R import org.oxycblt.auxio.databinding.FragmentLibraryBinding import org.oxycblt.auxio.music.MusicViewModel +import org.oxycblt.auxio.recycler.ClickListener import org.oxycblt.auxio.recycler.adapters.ArtistAdapter import org.oxycblt.auxio.recycler.applyDivider -import org.oxycblt.auxio.recycler.viewholders.ClickListener class LibraryFragment : Fragment() { diff --git a/app/src/main/java/org/oxycblt/auxio/library/LoadingFragment.kt b/app/src/main/java/org/oxycblt/auxio/library/LoadingFragment.kt index cfc0c38d7..1a39dbf3d 100644 --- a/app/src/main/java/org/oxycblt/auxio/library/LoadingFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/library/LoadingFragment.kt @@ -117,8 +117,6 @@ class LoadingFragment : Fragment(R.layout.fragment_loading) { binding.statusIcon.visibility = View.VISIBLE binding.retryButton.visibility = View.VISIBLE } - - musicModel.doneWithResponse() } } diff --git a/app/src/main/java/org/oxycblt/auxio/library/SongsFragment.kt b/app/src/main/java/org/oxycblt/auxio/library/SongsFragment.kt index 4df3c9e6a..8adfc7f02 100644 --- a/app/src/main/java/org/oxycblt/auxio/library/SongsFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/library/SongsFragment.kt @@ -11,9 +11,9 @@ import androidx.fragment.app.activityViewModels import org.oxycblt.auxio.R import org.oxycblt.auxio.databinding.FragmentSongsBinding import org.oxycblt.auxio.music.MusicViewModel +import org.oxycblt.auxio.recycler.ClickListener import org.oxycblt.auxio.recycler.adapters.SongAdapter import org.oxycblt.auxio.recycler.applyDivider -import org.oxycblt.auxio.recycler.viewholders.ClickListener class SongsFragment : Fragment() { diff --git a/app/src/main/java/org/oxycblt/auxio/music/MusicViewModel.kt b/app/src/main/java/org/oxycblt/auxio/music/MusicViewModel.kt index 296961a2e..b3b13208b 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/MusicViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/MusicViewModel.kt @@ -42,9 +42,6 @@ class MusicViewModel(private val app: Application) : ViewModel() { private val mSongs = MutableLiveData>() val songs: LiveData> get() = mSongs - private val mResponse = MutableLiveData() - val response: LiveData get() = mResponse - // UI control private val mRedo = MutableLiveData() val doReload: LiveData get() = mRedo @@ -52,6 +49,18 @@ class MusicViewModel(private val app: Application) : ViewModel() { private val mDoGrant = MutableLiveData() val doGrant: LiveData get() = mDoGrant + // Response Management + + // The actual response from MusicLoader. This is set to null so that LoadingFragment doesn't + // + private val mResponse = MutableLiveData() + val response: LiveData get() = mResponse + + // Whether MusicViewModel has finished the load [Used to hide LoadingFragment in MainActivity] + private var mDone = false + val done: Boolean get() = mDone + + // Whether go() has ran. Used to prevent multiple loads from the recreation of LoadingFragment. private var started = false // Start the music loading sequence. @@ -89,6 +98,8 @@ class MusicViewModel(private val app: Application) : ViewModel() { mAlbums.value = sorter.albums.toList() mArtists.value = sorter.artists.toList() mGenres.value = sorter.genres.toList() + + mDone = true } mResponse.value = loader.response @@ -103,13 +114,9 @@ class MusicViewModel(private val app: Application) : ViewModel() { } } - // UI communication functions - fun doneWithResponse() { - mResponse.value = null - } - fun reload() { mRedo.value = true + mDone = false doLoad() } diff --git a/app/src/main/java/org/oxycblt/auxio/recycler/RecyclerUtils.kt b/app/src/main/java/org/oxycblt/auxio/recycler/RecyclerUtils.kt index 9fdb4cb62..a8a42353f 100644 --- a/app/src/main/java/org/oxycblt/auxio/recycler/RecyclerUtils.kt +++ b/app/src/main/java/org/oxycblt/auxio/recycler/RecyclerUtils.kt @@ -21,3 +21,6 @@ fun RecyclerView.applyDivider() { addItemDecoration(div) } + +// Generic ClickListener +class ClickListener(val onClick: (T) -> Unit) diff --git a/app/src/main/java/org/oxycblt/auxio/recycler/adapters/AlbumAdapter.kt b/app/src/main/java/org/oxycblt/auxio/recycler/adapters/AlbumAdapter.kt index 4603884bb..bcc97878c 100644 --- a/app/src/main/java/org/oxycblt/auxio/recycler/adapters/AlbumAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/recycler/adapters/AlbumAdapter.kt @@ -5,8 +5,8 @@ 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.ClickListener import org.oxycblt.auxio.recycler.viewholders.AlbumViewHolder -import org.oxycblt.auxio.recycler.viewholders.ClickListener class AlbumAdapter( private val data: List, @@ -29,6 +29,10 @@ class AlbumAdapter( override fun onBindViewHolder(holder: AlbumViewHolder, position: Int) { val album = data[position] + holder.itemView.setOnClickListener { + listener.onClick(album) + } + holder.bind(album) } } diff --git a/app/src/main/java/org/oxycblt/auxio/recycler/adapters/ArtistAdapter.kt b/app/src/main/java/org/oxycblt/auxio/recycler/adapters/ArtistAdapter.kt index 64bc6ce3a..8f0a84516 100644 --- a/app/src/main/java/org/oxycblt/auxio/recycler/adapters/ArtistAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/recycler/adapters/ArtistAdapter.kt @@ -5,8 +5,8 @@ import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import org.oxycblt.auxio.databinding.ArtistItemBinding import org.oxycblt.auxio.music.models.Artist +import org.oxycblt.auxio.recycler.ClickListener import org.oxycblt.auxio.recycler.viewholders.ArtistViewHolder -import org.oxycblt.auxio.recycler.viewholders.ClickListener class ArtistAdapter( private val data: List, @@ -27,8 +27,12 @@ class ArtistAdapter( } override fun onBindViewHolder(holder: ArtistViewHolder, position: Int) { - val album = data[position] + val artist = data[position] - holder.bind(album) + holder.itemView.setOnClickListener { + listener.onClick(artist) + } + + holder.bind(artist) } } diff --git a/app/src/main/java/org/oxycblt/auxio/recycler/adapters/SongAdapter.kt b/app/src/main/java/org/oxycblt/auxio/recycler/adapters/SongAdapter.kt index a7251fd76..b6c0f40f4 100644 --- a/app/src/main/java/org/oxycblt/auxio/recycler/adapters/SongAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/recycler/adapters/SongAdapter.kt @@ -5,7 +5,7 @@ import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import org.oxycblt.auxio.databinding.SongItemBinding import org.oxycblt.auxio.music.models.Song -import org.oxycblt.auxio.recycler.viewholders.ClickListener +import org.oxycblt.auxio.recycler.ClickListener import org.oxycblt.auxio.recycler.viewholders.SongViewHolder class SongAdapter( diff --git a/app/src/main/java/org/oxycblt/auxio/recycler/viewholders/ClickListener.kt b/app/src/main/java/org/oxycblt/auxio/recycler/viewholders/ClickListener.kt deleted file mode 100644 index e35af6e73..000000000 --- a/app/src/main/java/org/oxycblt/auxio/recycler/viewholders/ClickListener.kt +++ /dev/null @@ -1,4 +0,0 @@ -package org.oxycblt.auxio.recycler.viewholders - -// Generic ClickListener -class ClickListener(val onClick: (T) -> Unit) diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 4e9d27837..8590db5c1 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -16,7 +16,7 @@ android:animateLayoutChanges="true">