Fix bugs/code style

Fix a recreation bug where MainActivity wont hide LoadingFragment, Fix a bug where artist click listeners wouldnt work, slightly tweak code here and there.
This commit is contained in:
OxygenCobalt 2020-09-08 19:32:10 -06:00
parent 4b50b80af4
commit 4e57a94d3e
13 changed files with 40 additions and 28 deletions

View file

@ -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'
}

View file

@ -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<String>
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
}
}

View file

@ -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() {

View file

@ -117,8 +117,6 @@ class LoadingFragment : Fragment(R.layout.fragment_loading) {
binding.statusIcon.visibility = View.VISIBLE
binding.retryButton.visibility = View.VISIBLE
}
musicModel.doneWithResponse()
}
}

View file

@ -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() {

View file

@ -42,9 +42,6 @@ class MusicViewModel(private val app: Application) : ViewModel() {
private val mSongs = MutableLiveData<List<Song>>()
val songs: LiveData<List<Song>> get() = mSongs
private val mResponse = MutableLiveData<MusicLoaderResponse>()
val response: LiveData<MusicLoaderResponse> get() = mResponse
// UI control
private val mRedo = MutableLiveData<Boolean>()
val doReload: LiveData<Boolean> get() = mRedo
@ -52,6 +49,18 @@ class MusicViewModel(private val app: Application) : ViewModel() {
private val mDoGrant = MutableLiveData<Boolean>()
val doGrant: LiveData<Boolean> get() = mDoGrant
// Response Management
// The actual response from MusicLoader. This is set to null so that LoadingFragment doesn't
//
private val mResponse = MutableLiveData<MusicLoaderResponse>()
val response: LiveData<MusicLoaderResponse> 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()
}

View file

@ -21,3 +21,6 @@ fun RecyclerView.applyDivider() {
addItemDecoration(div)
}
// Generic ClickListener
class ClickListener<T>(val onClick: (T) -> Unit)

View file

@ -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<Album>,
@ -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)
}
}

View file

@ -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<Artist>,
@ -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)
}
}

View file

@ -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(

View file

@ -1,4 +0,0 @@
package org.oxycblt.auxio.recycler.viewholders
// Generic ClickListener
class ClickListener<T>(val onClick: (T) -> Unit)

View file

@ -16,7 +16,7 @@
android:animateLayoutChanges="true">
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewPager"
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:visibility="gone"

View file

@ -34,6 +34,7 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/margin_medium"
android:layout_marginEnd="@dimen/margin_medium"
android:ellipsize="end"
android:maxLines="1"
android:text="@{song.name}"
@ -51,6 +52,7 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/margin_medium"
android:layout_marginEnd="@dimen/margin_medium"
android:ellipsize="end"
android:maxLines="1"
android:textAppearance="?android:attr/textAppearanceListItemSecondary"