From fe7557addbf86bdff28aff4a9f2b842eeb455cca Mon Sep 17 00:00:00 2001 From: OxygenCobalt Date: Wed, 9 Sep 2020 16:58:53 -0600 Subject: [PATCH] Refactor RecyclerView files Move Fragment-Specific adapters to their own files, keep the viewholders in the generic recycler package. --- .../auxio/{library => }/LoadingFragment.kt | 3 +-- .../java/org/oxycblt/auxio/MainActivity.kt | 4 +--- .../oxycblt/auxio/library/LibraryFragment.kt | 2 +- .../adapters/AlbumAdapter.kt | 2 +- .../adapters/ArtistAdapter.kt | 2 +- .../org/oxycblt/auxio/music/MusicViewModel.kt | 24 +++++++------------ .../auxio/music/processing/MusicLoader.kt | 1 - .../adapters => songs}/SongAdapter.kt | 2 +- .../auxio/{library => songs}/SongsFragment.kt | 3 +-- 9 files changed, 15 insertions(+), 28 deletions(-) rename app/src/main/java/org/oxycblt/auxio/{library => }/LoadingFragment.kt (98%) rename app/src/main/java/org/oxycblt/auxio/{recycler => library}/adapters/AlbumAdapter.kt (96%) rename app/src/main/java/org/oxycblt/auxio/{recycler => library}/adapters/ArtistAdapter.kt (96%) rename app/src/main/java/org/oxycblt/auxio/{recycler/adapters => songs}/SongAdapter.kt (96%) rename app/src/main/java/org/oxycblt/auxio/{library => songs}/SongsFragment.kt (93%) diff --git a/app/src/main/java/org/oxycblt/auxio/library/LoadingFragment.kt b/app/src/main/java/org/oxycblt/auxio/LoadingFragment.kt similarity index 98% rename from app/src/main/java/org/oxycblt/auxio/library/LoadingFragment.kt rename to app/src/main/java/org/oxycblt/auxio/LoadingFragment.kt index 1a39dbf3d..a9425929c 100644 --- a/app/src/main/java/org/oxycblt/auxio/library/LoadingFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/LoadingFragment.kt @@ -1,4 +1,4 @@ -package org.oxycblt.auxio.library +package org.oxycblt.auxio import android.Manifest import android.content.pm.PackageManager @@ -13,7 +13,6 @@ import androidx.core.content.ContextCompat import androidx.databinding.DataBindingUtil import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels -import org.oxycblt.auxio.R import org.oxycblt.auxio.databinding.FragmentLoadingBinding import org.oxycblt.auxio.music.MusicViewModel import org.oxycblt.auxio.music.processing.MusicLoaderResponse diff --git a/app/src/main/java/org/oxycblt/auxio/MainActivity.kt b/app/src/main/java/org/oxycblt/auxio/MainActivity.kt index 1f715dcd2..3cded2c96 100644 --- a/app/src/main/java/org/oxycblt/auxio/MainActivity.kt +++ b/app/src/main/java/org/oxycblt/auxio/MainActivity.kt @@ -17,9 +17,9 @@ import com.google.android.material.tabs.TabLayout import com.google.android.material.tabs.TabLayoutMediator import org.oxycblt.auxio.databinding.ActivityMainBinding import org.oxycblt.auxio.library.LibraryFragment -import org.oxycblt.auxio.library.SongsFragment import org.oxycblt.auxio.music.MusicViewModel import org.oxycblt.auxio.music.processing.MusicLoaderResponse +import org.oxycblt.auxio.songs.SongsFragment import org.oxycblt.auxio.theme.accent import org.oxycblt.auxio.theme.getInactiveAlpha import org.oxycblt.auxio.theme.getTransparentAccent @@ -103,8 +103,6 @@ class MainActivity : AppCompatActivity() { } ) - Log.d(this::class.simpleName, musicModel.done.toString()) - musicModel.response.observe( this, { 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 2880397d0..5be07c565 100644 --- a/app/src/main/java/org/oxycblt/auxio/library/LibraryFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/library/LibraryFragment.kt @@ -10,9 +10,9 @@ import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import org.oxycblt.auxio.R import org.oxycblt.auxio.databinding.FragmentLibraryBinding +import org.oxycblt.auxio.library.adapters.ArtistAdapter 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 class LibraryFragment : Fragment() { diff --git a/app/src/main/java/org/oxycblt/auxio/recycler/adapters/AlbumAdapter.kt b/app/src/main/java/org/oxycblt/auxio/library/adapters/AlbumAdapter.kt similarity index 96% rename from app/src/main/java/org/oxycblt/auxio/recycler/adapters/AlbumAdapter.kt rename to app/src/main/java/org/oxycblt/auxio/library/adapters/AlbumAdapter.kt index bcc97878c..8d458e909 100644 --- a/app/src/main/java/org/oxycblt/auxio/recycler/adapters/AlbumAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/library/adapters/AlbumAdapter.kt @@ -1,4 +1,4 @@ -package org.oxycblt.auxio.recycler.adapters +package org.oxycblt.auxio.library.adapters import android.view.LayoutInflater import android.view.ViewGroup diff --git a/app/src/main/java/org/oxycblt/auxio/recycler/adapters/ArtistAdapter.kt b/app/src/main/java/org/oxycblt/auxio/library/adapters/ArtistAdapter.kt similarity index 96% rename from app/src/main/java/org/oxycblt/auxio/recycler/adapters/ArtistAdapter.kt rename to app/src/main/java/org/oxycblt/auxio/library/adapters/ArtistAdapter.kt index 8f0a84516..9578ec849 100644 --- a/app/src/main/java/org/oxycblt/auxio/recycler/adapters/ArtistAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/library/adapters/ArtistAdapter.kt @@ -1,4 +1,4 @@ -package org.oxycblt.auxio.recycler.adapters +package org.oxycblt.auxio.library.adapters import android.view.LayoutInflater import android.view.ViewGroup 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 b3b13208b..6eb284b9c 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/MusicViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/MusicViewModel.kt @@ -42,6 +42,9 @@ 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 @@ -49,22 +52,10 @@ 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. - // This should only be ran once, use redo() for all other loads. + // This should only be ran once, use reload() for all other loads. fun go() { if (!started) { started = true @@ -98,8 +89,6 @@ 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 @@ -114,9 +103,12 @@ class MusicViewModel(private val app: Application) : ViewModel() { } } + // UI communication functions + // LoadingFragment uses these so that button presses can update the ViewModel. + // all doneWithX functions are to reset the value so that LoadingFragment doesn't + // repeat commands if the view is recreated. fun reload() { mRedo.value = true - mDone = false doLoad() } diff --git a/app/src/main/java/org/oxycblt/auxio/music/processing/MusicLoader.kt b/app/src/main/java/org/oxycblt/auxio/music/processing/MusicLoader.kt index 2677b88bc..36cd0dfa2 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/processing/MusicLoader.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/processing/MusicLoader.kt @@ -19,7 +19,6 @@ enum class MusicLoaderResponse { } // Class that loads music from the FileSystem. -// FIXME: This thing probably has some memory leaks *somewhere* class MusicLoader(private val resolver: ContentResolver) { var genres = mutableListOf() diff --git a/app/src/main/java/org/oxycblt/auxio/recycler/adapters/SongAdapter.kt b/app/src/main/java/org/oxycblt/auxio/songs/SongAdapter.kt similarity index 96% rename from app/src/main/java/org/oxycblt/auxio/recycler/adapters/SongAdapter.kt rename to app/src/main/java/org/oxycblt/auxio/songs/SongAdapter.kt index b6c0f40f4..2b13bebd6 100644 --- a/app/src/main/java/org/oxycblt/auxio/recycler/adapters/SongAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/songs/SongAdapter.kt @@ -1,4 +1,4 @@ -package org.oxycblt.auxio.recycler.adapters +package org.oxycblt.auxio.songs import android.view.LayoutInflater import android.view.ViewGroup diff --git a/app/src/main/java/org/oxycblt/auxio/library/SongsFragment.kt b/app/src/main/java/org/oxycblt/auxio/songs/SongsFragment.kt similarity index 93% rename from app/src/main/java/org/oxycblt/auxio/library/SongsFragment.kt rename to app/src/main/java/org/oxycblt/auxio/songs/SongsFragment.kt index 8adfc7f02..e22669110 100644 --- a/app/src/main/java/org/oxycblt/auxio/library/SongsFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/songs/SongsFragment.kt @@ -1,4 +1,4 @@ -package org.oxycblt.auxio.library +package org.oxycblt.auxio.songs import android.os.Bundle import android.util.Log @@ -12,7 +12,6 @@ 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 class SongsFragment : Fragment() {