From bc16b64be431a6600036ef2757f140f12bd8b3c4 Mon Sep 17 00:00:00 2001 From: tzugen Date: Mon, 21 Jun 2021 13:41:39 +0200 Subject: [PATCH] Avoid unnecessary reloads when navigating back, this preserves the scroll position. --- .../moire/ultrasonic/fragment/AlbumListFragment.kt | 3 ++- .../org/moire/ultrasonic/fragment/AlbumListModel.kt | 11 +++++++++-- .../org/moire/ultrasonic/fragment/ArtistListModel.kt | 8 ++++++-- 3 files changed, 17 insertions(+), 5 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 75b93057..97285d68 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/AlbumListFragment.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/AlbumListFragment.kt @@ -49,8 +49,9 @@ class AlbumListFragment : GenericListFragment> = MutableLiveData() + val albumList: MutableLiveData> = MutableLiveData(listOf()) + var lastType: String? = null private var loadedUntil: Int = 0 fun getAlbumList( @@ -21,8 +22,14 @@ class AlbumListModel(application: Application) : GenericListModel(application) { swipe: SwipeRefreshLayout, args: Bundle ): LiveData> { + // Don't reload the data if navigating back to the view that was active before. + // This way, we keep the scroll position + val albumListType = args.getString(Constants.INTENT_EXTRA_NAME_ALBUM_LIST_TYPE)!! - backgroundLoadFromServer(refresh, swipe, args) + if (refresh || albumList.value!!.isEmpty() || albumListType != lastType) { + lastType = albumListType + backgroundLoadFromServer(refresh, swipe, args) + } return albumList } 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 d58e97ca..a774ebcd 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/ArtistListModel.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/fragment/ArtistListModel.kt @@ -30,13 +30,17 @@ import org.moire.ultrasonic.service.MusicService * Provides ViewModel which contains the list of available Artists */ class ArtistListModel(application: Application) : GenericListModel(application) { - private val artists: MutableLiveData> = MutableLiveData() + private val artists: MutableLiveData> = MutableLiveData(listOf()) /** * Retrieves all available Artists in a LiveData */ fun getItems(refresh: Boolean, swipe: SwipeRefreshLayout): LiveData> { - backgroundLoadFromServer(refresh, swipe) + // Don't reload the data if navigating back to the view that was active before. + // This way, we keep the scroll position + if (artists.value!!.isEmpty() || refresh) { + backgroundLoadFromServer(refresh, swipe) + } return artists }