Skip to content

Commit 9c55474

Browse files
authored
CMM-1071 jetpack android read view shows outdated post content (#22443)
* Reloading the content in every new load * Fixing pull to refresh * Detekt * Removing dead code
1 parent c3b9027 commit 9c55474

File tree

3 files changed

+45
-13
lines changed

3 files changed

+45
-13
lines changed

WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostDetailFragment.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1385,12 +1385,15 @@ class ReaderPostDetailFragment : ViewPagerFragment(),
13851385

13861386
// if the post has changed, reload it from the db and update the like/comment counts
13871387
if (result.isNewOrChanged) {
1388-
viewModel.post = ReaderPostTable.getBlogPost(post.blogId, post.postId, false)
1389-
viewModel.post?.let {
1388+
val newPost = ReaderPostTable.getBlogPost(post.blogId, post.postId, false)
1389+
newPost?.let {
1390+
viewModel.post = it
13901391
if (likesEnhancementsFeatureConfig.isEnabled()) {
13911392
viewModel.onRefreshLikersData(it)
13921393
}
13931394
viewModel.onUpdatePost(it)
1395+
// Re-render the WebView with updated content
1396+
showPostInWebView(it)
13941397
}
13951398
}
13961399

WordPress/src/main/java/org/wordpress/android/ui/reader/viewmodels/ReaderPostDetailViewModel.kt

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -391,34 +391,59 @@ class ReaderPostDetailViewModel @Inject constructor(
391391
launch { getOrFetchReaderPost(blogId = blogId, postId = postId) }
392392
}
393393

394+
@Suppress("CyclomaticComplexMethod")
394395
private suspend fun getOrFetchReaderPost(blogId: Long, postId: Long) {
395396
getReaderPostFromDb(blogId = blogId, postId = postId)
396-
if (post == null) {
397+
398+
// Show cached content immediately if available, otherwise show loading
399+
val hasCachedPost = post != null
400+
if (hasCachedPost) {
401+
updatePostDetailsUi()
402+
} else {
397403
_uiState.value = LoadingUiState
398-
when (readerFetchPostUseCase.fetchPost(blogId = blogId, postId = postId, isFeed = isFeed)) {
399-
FetchReaderPostState.Success -> {
400-
getReaderPostFromDb(blogId, postId)
404+
}
405+
406+
// Always fetch fresh content from the server
407+
val oldPostText = post?.text
408+
when (readerFetchPostUseCase.fetchPost(blogId = blogId, postId = postId, isFeed = isFeed)) {
409+
FetchReaderPostState.Success -> {
410+
getReaderPostFromDb(blogId, postId)
411+
// Update UI if content changed or we didn't have cached content
412+
if (!hasCachedPost || post?.text != oldPostText) {
401413
updatePostDetailsUi()
402414
}
415+
}
403416

404-
FetchReaderPostState.AlreadyRunning -> {
417+
FetchReaderPostState.AlreadyRunning -> {
418+
if (!hasCachedPost) {
405419
AppLog.i(T.READER, "reader post detail > fetch post already running")
406420
_uiState.value = ErrorUiState(null)
407421
}
422+
}
408423

409-
FetchReaderPostState.Failed.NoNetwork ->
424+
FetchReaderPostState.Failed.NoNetwork -> {
425+
if (!hasCachedPost) {
410426
_uiState.value = ErrorUiState(UiStringRes(R.string.no_network_message))
427+
}
428+
}
411429

412-
FetchReaderPostState.Failed.RequestFailed ->
430+
FetchReaderPostState.Failed.RequestFailed -> {
431+
if (!hasCachedPost) {
413432
_uiState.value = ErrorUiState(UiStringRes(R.string.reader_err_get_post_generic))
433+
}
434+
}
414435

415-
FetchReaderPostState.Failed.NotAuthorised -> trackAndUpdateNotAuthorisedErrorState()
436+
FetchReaderPostState.Failed.NotAuthorised -> {
437+
if (!hasCachedPost) {
438+
trackAndUpdateNotAuthorisedErrorState()
439+
}
440+
}
416441

417-
FetchReaderPostState.Failed.PostNotFound ->
442+
FetchReaderPostState.Failed.PostNotFound -> {
443+
if (!hasCachedPost) {
418444
_uiState.value = ErrorUiState(UiStringRes(R.string.reader_err_get_post_not_found))
445+
}
419446
}
420-
} else {
421-
updatePostDetailsUi()
422447
}
423448
}
424449

WordPress/src/test/java/org/wordpress/android/ui/reader/viewmodels/ReaderPostDetailViewModelTest.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,10 @@ class ReaderPostDetailViewModelTest : BaseUnitTest() {
335335
whenever(commentsSnippetFeatureConfig.isEnabled()).thenReturn(true)
336336

337337
likesCaptor = argumentCaptor()
338+
339+
// Default mock for fetch post - returns Success
340+
whenever(readerFetchPostUseCase.fetchPost(anyLong(), anyLong(), anyBoolean()))
341+
.thenReturn(FetchReaderPostState.Success)
338342
}
339343

340344
/* SHOW POST - LOADING */

0 commit comments

Comments
 (0)