From d91d988e0e73debbb3199b45e314334030cd1a34 Mon Sep 17 00:00:00 2001 From: Rahul Patel Date: Tue, 27 May 2025 18:06:29 +0530 Subject: [PATCH] Fix infinite cluster load animation --- .../viewmodel/browse/StreamBrowseViewModel.kt | 8 ++++++++ .../viewmodel/homestream/StreamViewModel.kt | 18 +++++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/aurora/store/viewmodel/browse/StreamBrowseViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/browse/StreamBrowseViewModel.kt index a832b3292..a5237728e 100644 --- a/app/src/main/java/com/aurora/store/viewmodel/browse/StreamBrowseViewModel.kt +++ b/app/src/main/java/com/aurora/store/viewmodel/browse/StreamBrowseViewModel.kt @@ -60,9 +60,17 @@ class StreamBrowseViewModel @Inject constructor( liveData.postValue(streamCluster) } else { Log.i(TAG, "End of Cluster") + postClusterEnd() } } catch (_: Exception) { } } } + + fun postClusterEnd() { + streamCluster = streamCluster.copy( + clusterNextPageUrl = "" + ) + liveData.postValue(streamCluster) + } } diff --git a/app/src/main/java/com/aurora/store/viewmodel/homestream/StreamViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/homestream/StreamViewModel.kt index 7ea8bbf9b..64201ea9e 100644 --- a/app/src/main/java/com/aurora/store/viewmodel/homestream/StreamViewModel.kt +++ b/app/src/main/java/com/aurora/store/viewmodel/homestream/StreamViewModel.kt @@ -114,7 +114,11 @@ class StreamViewModel @Inject constructor( liveData.postValue(ViewState.Success(stash.toMap())) } else { - Log.i(TAG, "End of cluster ${streamCluster.id}") + stashMutex.withLock { + postClusterEnd(category, streamCluster.id) + } + + liveData.postValue(ViewState.Success(stash.toMap())) } } catch (e: Exception) { liveData.postValue(ViewState.Error(e.message)) @@ -142,6 +146,18 @@ class StreamViewModel @Inject constructor( stash[category] = bundle.copy(streamClusters = updatedClusters) } + private fun postClusterEnd(category: StreamContract.Category, clusterID: Int) { + val bundle = stash[category] ?: return + val oldCluster = bundle.streamClusters[clusterID] ?: return + + val updatedCluster = oldCluster.copy(clusterNextPageUrl = "") + val updatedClusters = bundle.streamClusters.toMutableMap().apply { + this[clusterID] = updatedCluster + } + + stash[category] = bundle.copy(streamClusters = updatedClusters) + } + private fun targetBundle(category: StreamContract.Category): StreamBundle { return stash.getOrPut(category) { StreamBundle() } }