diff --git a/app/src/main/java/org/kiwix/kiwixmobile/zimManager/ZimManageViewModel.kt b/app/src/main/java/org/kiwix/kiwixmobile/zimManager/ZimManageViewModel.kt index e3a2018f1..465154e20 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/zimManager/ZimManageViewModel.kt +++ b/app/src/main/java/org/kiwix/kiwixmobile/zimManager/ZimManageViewModel.kt @@ -155,7 +155,9 @@ class ZimManageViewModel @Inject constructor( val category: String? = null, val lang: String? = null, val isLoadMoreItem: Boolean, - val page: Int + val page: Int, + // Bug Fix #4381 + val version: Long = System.nanoTime() ) data class OnlineLibraryResult( @@ -371,7 +373,20 @@ class ZimManageViewModel @Inject constructor( category = newRequest.category ?: current.category, lang = newRequest.lang ?: current.lang, page = newRequest.page, - isLoadMoreItem = newRequest.isLoadMoreItem + isLoadMoreItem = newRequest.isLoadMoreItem, + version = if (isUnitTestCase) { + // In unit tests, we want predictable and testable values, + // so use the provided version instead of a dynamic timestamp. + newRequest.version + } else { + // Bug Fix #4381: + // Force StateFlow to emit even if all other fields are unchanged. + // Without this, identical requests may not trigger observers, + // causing the UI not to refresh. + // Using System.nanoTime() ensures a unique value each time, + // guaranteeing that collectors receive an update. + System.nanoTime() + } ) } } diff --git a/app/src/test/java/org/kiwix/kiwixmobile/zimManager/ZimManageViewModelTest.kt b/app/src/test/java/org/kiwix/kiwixmobile/zimManager/ZimManageViewModelTest.kt index fca3a5fbf..47ac8d5b7 100644 --- a/app/src/test/java/org/kiwix/kiwixmobile/zimManager/ZimManageViewModelTest.kt +++ b/app/src/test/java/org/kiwix/kiwixmobile/zimManager/ZimManageViewModelTest.kt @@ -302,18 +302,22 @@ class ZimManageViewModelTest { } @Test - fun `updateOnlineLibraryFilters updates onlineLibraryRequest`() = runTest { - val newRequest = ZimManageViewModel.OnlineLibraryRequest( - query = "test", - category = "cat", - lang = "en", - page = 2, - isLoadMoreItem = true - ) - viewModel.onlineLibraryRequest.test { - skipItems(1) - viewModel.updateOnlineLibraryFilters(newRequest) - assertThat(awaitItem()).isEqualTo(newRequest) + fun `updateOnlineLibraryFilters updates onlineLibraryRequest`() = flakyTest { + runTest { + viewModel.setIsUnitTestCase() + val newRequest = ZimManageViewModel.OnlineLibraryRequest( + query = "test", + category = "cat", + lang = "en", + page = 2, + isLoadMoreItem = true, + version = 100L + ) + viewModel.onlineLibraryRequest.test { + skipItems(1) + viewModel.updateOnlineLibraryFilters(newRequest) + assertThat(awaitItem()).isEqualTo(newRequest) + } } }