From 2cf80707f7d200563769da0db0ec6c5ebf864a2f Mon Sep 17 00:00:00 2001 From: tzugen Date: Sun, 16 May 2021 20:00:28 +0200 Subject: [PATCH] Correctly display the folder header also in album view Also fix a number of smaller issues --- .../ultrasonic/fragment/AlbumListFragment.kt | 10 -------- .../ultrasonic/fragment/AlbumListModel.kt | 24 +++++++++++-------- .../ultrasonic/fragment/AlbumRowAdapter.kt | 4 ++-- .../ultrasonic/fragment/ArtistListFragment.kt | 9 ------- .../ultrasonic/fragment/ArtistListModel.kt | 6 +---- .../fragment/GenericListFragment.kt | 14 +++++++---- .../ultrasonic/fragment/GenericListModel.kt | 19 +++++++++++---- .../fragment/TrackCollectionFragment.kt | 3 +-- 8 files changed, 43 insertions(+), 46 deletions(-) diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/AlbumListFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/AlbumListFragment.kt index 48d8a22c..8722bae0 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/AlbumListFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/AlbumListFragment.kt @@ -9,7 +9,6 @@ import androidx.recyclerview.widget.RecyclerView import org.koin.core.component.KoinApiExtension import org.moire.ultrasonic.R import org.moire.ultrasonic.domain.MusicDirectory -import org.moire.ultrasonic.domain.MusicFolder import org.moire.ultrasonic.util.Constants /** @@ -45,11 +44,6 @@ class AlbumListFragment : GenericListFragment -> - // Do nothing - } } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/AlbumListModel.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/AlbumListModel.kt index ebb9d157..7c927044 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/AlbumListModel.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/AlbumListModel.kt @@ -35,19 +35,19 @@ class AlbumListModel(application: Application) : GenericListModel(application) { refresh: Boolean, args: Bundle ) { - val musicDirectory: MusicDirectory - val musicFolderId = if (showSelectFolderHeader) { - activeServerProvider.getActiveServer().musicFolderId - } else { - null - } + super.load(isOffline, useId3Tags, musicService, refresh, args) val albumListType = args.getString(Constants.INTENT_EXTRA_NAME_ALBUM_LIST_TYPE)!! val size = args.getInt(Constants.INTENT_EXTRA_NAME_ALBUM_LIST_SIZE, 0) var offset = args.getInt(Constants.INTENT_EXTRA_NAME_ALBUM_LIST_OFFSET, 0) val append = args.getBoolean(Constants.INTENT_EXTRA_NAME_APPEND, false) - showHeader = showHeader(albumListType) + val musicDirectory: MusicDirectory + val musicFolderId = if (showSelectFolderHeader(args)) { + activeServerProvider.getActiveServer().musicFolderId + } else { + null + } // Handle the logic for endless scrolling: // If appending the existing list, set the offset from where to load @@ -65,7 +65,7 @@ class AlbumListModel(application: Application) : GenericListModel(application) { ) } - currentListIsSortable = sortableCollection(albumListType) + currentListIsSortable = isCollectionSortable(albumListType) if (append && albumList.value != null) { val list = ArrayList() @@ -79,14 +79,18 @@ class AlbumListModel(application: Application) : GenericListModel(application) { loadedUntil = offset } - private fun showHeader(albumListType: String): Boolean { + override fun showSelectFolderHeader(args: Bundle?): Boolean { + if (args == null) return false + + val albumListType = args.getString(Constants.INTENT_EXTRA_NAME_ALBUM_LIST_TYPE)!! + val isAlphabetical = (albumListType == AlbumListType.SORTED_BY_NAME.toString()) || (albumListType == AlbumListType.SORTED_BY_ARTIST.toString()) return !isOffline() && !Util.getShouldUseId3Tags() && isAlphabetical } - private fun sortableCollection(albumListType: String): Boolean { + private fun isCollectionSortable(albumListType: String): Boolean { return albumListType != "newest" && albumListType != "random" && albumListType != "highest" && albumListType != "recent" && albumListType != "frequent" diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/AlbumRowAdapter.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/AlbumRowAdapter.kt index 65c1d6d1..9785c9e5 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/AlbumRowAdapter.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/AlbumRowAdapter.kt @@ -1,5 +1,5 @@ /* - * ArtistRowAdapter.kt + * AlbumRowAdapter.kt * Copyright (C) 2009-2021 Ultrasonic developers * * Distributed under terms of the GNU GPLv3 license. @@ -21,7 +21,7 @@ import org.moire.ultrasonic.util.ImageLoader import org.moire.ultrasonic.view.SelectMusicFolderView /** - * Creates a Row in a RecyclerView which contains the details of an Artist + * Creates a Row in a RecyclerView which contains the details of an Album */ class AlbumRowAdapter( albumList: List, diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/ArtistListFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/ArtistListFragment.kt index 1836eb15..2f8e78a6 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/ArtistListFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/ArtistListFragment.kt @@ -6,7 +6,6 @@ import androidx.lifecycle.LiveData import org.koin.core.component.KoinApiExtension import org.moire.ultrasonic.R import org.moire.ultrasonic.domain.Artist -import org.moire.ultrasonic.domain.MusicFolder import org.moire.ultrasonic.util.Constants /** @@ -61,12 +60,4 @@ class ArtistListFragment : GenericListFragment() { imageLoaderProvider.getImageLoader() ) } - - override val musicFolderObserver = { changedFolders: List -> - viewAdapter.notifyDataSetChanged() - selectFolderHeader!!.setData( - activeServerProvider.getActiveServer().musicFolderId, - changedFolders - ) - } } diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/ArtistListModel.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/ArtistListModel.kt index 21ebc39f..2611e3d2 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/ArtistListModel.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/ArtistListModel.kt @@ -49,11 +49,7 @@ class ArtistListModel(application: Application) : GenericListModel(application) refresh: Boolean, args: Bundle ) { - if (!isOffline && !useId3Tags) { - musicFolders.postValue( - musicService.getMusicFolders(refresh) - ) - } + super.load(isOffline, useId3Tags, musicService, refresh, args) val musicFolderId = activeServer.musicFolderId diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/GenericListFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/GenericListFragment.kt index e976dbc1..a0b0021e 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/GenericListFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/GenericListFragment.kt @@ -88,15 +88,21 @@ abstract class GenericListFragment> /** * The observer to be called if the available music folders have changed */ - abstract val musicFolderObserver: (List) -> Unit + val musicFolderObserver = { changedFolders: List -> + viewAdapter.notifyDataSetChanged() + selectFolderHeader?.setData( + activeServerProvider.getActiveServer().musicFolderId, + changedFolders + ) + Unit + } /** * Whether to show the folder selector */ - internal open var folderHeaderEnabled: Boolean = true - fun showFolderHeader(): Boolean { - return folderHeaderEnabled && listModel.isOffline() && !Util.getShouldUseId3Tags() + return listModel.showSelectFolderHeader(arguments) && + !listModel.isOffline() && !Util.getShouldUseId3Tags() } fun setTitle(title: String?) { diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/GenericListModel.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/GenericListModel.kt index 6087e309..1fe45f3f 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/GenericListModel.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/GenericListModel.kt @@ -29,7 +29,7 @@ import org.moire.ultrasonic.util.Util * An abstract Model, which can be extended to retrieve a list of items from the API */ @KoinApiExtension -abstract class GenericListModel(application: Application) : +open class GenericListModel(application: Application) : AndroidViewModel(application), KoinComponent { val activeServerProvider: ActiveServerProvider by inject() @@ -42,7 +42,11 @@ abstract class GenericListModel(application: Application) : var currentListIsSortable = true var showHeader = true - var showSelectFolderHeader = false + + @Suppress("UNUSED_PARAMETER") + open fun showSelectFolderHeader(args: Bundle?): Boolean { + return true + } internal val musicFolders: MutableLiveData> = MutableLiveData() @@ -96,13 +100,20 @@ abstract class GenericListModel(application: Application) : /** * This is the central function you need to implement if you want to extend this class */ - abstract fun load( + open fun load( isOffline: Boolean, useId3Tags: Boolean, musicService: MusicService, refresh: Boolean, args: Bundle - ) + ) { + // Update the list of available folders if enabled + if (showSelectFolderHeader(args) && !isOffline && !useId3Tags) { + musicFolders.postValue( + musicService.getMusicFolders(refresh) + ) + } + } /** * Retrieves the available Music Folders in a LiveData diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/TrackCollectionFragment.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/TrackCollectionFragment.kt index 90e524f5..8eeaf9c5 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/TrackCollectionFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/TrackCollectionFragment.kt @@ -232,7 +232,6 @@ class TrackCollectionFragment : Fragment() { } val handler = CoroutineExceptionHandler { _, exception -> - println("CoroutineExceptionHandler got $exception") Handler(Looper.getMainLooper()).post { context?.let { CommunicationErrorHandler.handleError(exception, it) } } @@ -727,7 +726,7 @@ class TrackCollectionFragment : Fragment() { } } } else { - if (model.showSelectFolderHeader) { + if (model.showSelectFolderHeader(arguments)) { if (albumListView!!.headerViewsCount == 0) { albumListView!!.addHeaderView(selectFolderHeader!!.itemView, null, false) }