From aa86310f59f06185a60037f317bf9997ff0862ce Mon Sep 17 00:00:00 2001 From: Joel Dean Date: Wed, 18 Mar 2020 20:40:15 -0500 Subject: [PATCH 1/4] Shared the upload status tracker with all Post List VMs. --- .../java/org/wordpress/android/ui/posts/PostListFragment.kt | 1 + .../org/wordpress/android/ui/posts/PostListMainViewModel.kt | 2 +- .../wordpress/android/viewmodel/posts/PostListViewModel.kt | 4 +++- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/posts/PostListFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/posts/PostListFragment.kt index 77a9d44c5331..e2fae82e4a66 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/posts/PostListFragment.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/posts/PostListFragment.kt @@ -132,6 +132,7 @@ class PostListFragment : Fragment() { // since the MainViewModel has been already started, we need to manually update the authorFilterSelection value viewModel.start( postListViewModelConnector, + mainViewModel.uploadStatusTracker, mainViewModel.authorSelectionUpdated.value!!, photonWidth = displayWidth - contentSpacing * 2, photonHeight = nonNullActivity.resources.getDimensionPixelSize(R.dimen.reader_featured_image_height) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/posts/PostListMainViewModel.kt b/WordPress/src/main/java/org/wordpress/android/ui/posts/PostListMainViewModel.kt index 31454c6b562e..04b720e529a0 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/posts/PostListMainViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/posts/PostListMainViewModel.kt @@ -134,7 +134,7 @@ class PostListMainViewModel @Inject constructor( private val _searchQuery = MutableLiveData() val searchQuery: LiveData = _searchQuery - private val uploadStatusTracker = PostModelUploadStatusTracker( + val uploadStatusTracker = PostModelUploadStatusTracker( uploadStore = uploadStore, uploadActionUseCase = uploadActionUseCase ) diff --git a/WordPress/src/main/java/org/wordpress/android/viewmodel/posts/PostListViewModel.kt b/WordPress/src/main/java/org/wordpress/android/viewmodel/posts/PostListViewModel.kt index cf39cc77c68c..44b95f5381d8 100644 --- a/WordPress/src/main/java/org/wordpress/android/viewmodel/posts/PostListViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/viewmodel/posts/PostListViewModel.kt @@ -70,7 +70,6 @@ class PostListViewModel @Inject constructor( private val uploadStarter: UploadStarter, private val readerUtilsWrapper: ReaderUtilsWrapper, private val uploadUtilsWrapper: UploadUtilsWrapper, - private val uploadStatusTracker: PostModelUploadStatusTracker, @Named(UI_THREAD) private val uiDispatcher: CoroutineDispatcher, @Named(BG_THREAD) private val bgDispatcher: CoroutineDispatcher, connectionStatus: LiveData @@ -80,6 +79,7 @@ class PostListViewModel @Inject constructor( } private var isStarted: Boolean = false private lateinit var connector: PostListViewModelConnector + private lateinit var uploadStatusTracker: PostModelUploadStatusTracker private var photonWidth by Delegates.notNull() private var photonHeight by Delegates.notNull() @@ -128,6 +128,7 @@ class PostListViewModel @Inject constructor( fun start( postListViewModelConnector: PostListViewModelConnector, + uploadStatusTracker: PostModelUploadStatusTracker, value: AuthorFilterSelection, photonWidth: Int, photonHeight: Int @@ -138,6 +139,7 @@ class PostListViewModel @Inject constructor( this.photonHeight = photonHeight this.photonWidth = photonWidth connector = postListViewModelConnector + this.uploadStatusTracker = uploadStatusTracker isStarted = true lifecycleRegistry.markState(Lifecycle.State.STARTED) From 300bcbfbf3626a9bfd66df0c5008abe4a02c5b18 Mon Sep 17 00:00:00 2001 From: Joel Dean Date: Wed, 18 Mar 2020 20:45:18 -0500 Subject: [PATCH 2/4] Fixed test issue that occurred as a result of changes in FluxC. --- .../android/ui/posts/AutoSavePostIfNotDraftUseCaseTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/src/test/java/org/wordpress/android/ui/posts/AutoSavePostIfNotDraftUseCaseTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/posts/AutoSavePostIfNotDraftUseCaseTest.kt index 1da553ebc67f..9283b7f3b7d9 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/posts/AutoSavePostIfNotDraftUseCaseTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/posts/AutoSavePostIfNotDraftUseCaseTest.kt @@ -160,7 +160,7 @@ class AutoSavePostIfNotDraftUseCaseTest { } private fun createOnPostChangedEvent(post: PostModel, error: PostError? = null): OnPostChanged { - val event = OnPostChanged(CauseOfOnPostChanged.RemoteAutoSavePost(post.id), 0) + val event = OnPostChanged(CauseOfOnPostChanged.RemoteAutoSavePost(post.id, post.remotePostId), 0) error?.let { event.error = it } return event } From b16221db411d90cdb571b96539359ece1f62b19c Mon Sep 17 00:00:00 2001 From: Joel Dean Date: Wed, 18 Mar 2020 20:45:32 -0500 Subject: [PATCH 3/4] Fixed Post List tests --- .../android/viewmodel/posts/PostListViewModelTest.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/WordPress/src/test/java/org/wordpress/android/viewmodel/posts/PostListViewModelTest.kt b/WordPress/src/test/java/org/wordpress/android/viewmodel/posts/PostListViewModelTest.kt index a12f01fafe19..2d5ee87d2465 100644 --- a/WordPress/src/test/java/org/wordpress/android/viewmodel/posts/PostListViewModelTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/viewmodel/posts/PostListViewModelTest.kt @@ -63,8 +63,7 @@ class PostListViewModelTest : BaseUnitTest() { connectionStatus = mock(), uploadUtilsWrapper = mock(), uiDispatcher = TEST_DISPATCHER, - bgDispatcher = TEST_DISPATCHER, - uploadStatusTracker = uploadStatusTracker + bgDispatcher = TEST_DISPATCHER ) } @@ -72,6 +71,7 @@ class PostListViewModelTest : BaseUnitTest() { fun `when swiping to refresh, it uploads all local drafts`() { viewModel.start( createPostListViewModelConnector(site = site, postListType = DRAFTS), + uploadStatusTracker, DEFAULT_AUTHOR_FILTER, DEFAULT_PHOTON_DIMENSIONS, DEFAULT_PHOTON_DIMENSIONS @@ -88,6 +88,7 @@ class PostListViewModelTest : BaseUnitTest() { fun `empty search query should show search prompt`() { viewModel.start( createPostListViewModelConnector(site = site, postListType = SEARCH), + uploadStatusTracker, DEFAULT_AUTHOR_FILTER, DEFAULT_PHOTON_DIMENSIONS, DEFAULT_PHOTON_DIMENSIONS From ac0b015d59df889b7891ce016dad831e28969b83 Mon Sep 17 00:00:00 2001 From: malinajirka Date: Thu, 19 Mar 2020 11:17:00 +0100 Subject: [PATCH 4/4] Move uploadStatusTracker into ViewModelConnector --- .../java/org/wordpress/android/ui/posts/PostListFragment.kt | 1 - .../org/wordpress/android/ui/posts/PostListMainViewModel.kt | 4 ++-- .../wordpress/android/viewmodel/posts/PostListViewModel.kt | 6 +----- .../android/viewmodel/posts/PostListViewModelConnector.kt | 3 ++- .../android/viewmodel/posts/PostListViewModelTest.kt | 6 +----- 5 files changed, 6 insertions(+), 14 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/posts/PostListFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/posts/PostListFragment.kt index e2fae82e4a66..77a9d44c5331 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/posts/PostListFragment.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/posts/PostListFragment.kt @@ -132,7 +132,6 @@ class PostListFragment : Fragment() { // since the MainViewModel has been already started, we need to manually update the authorFilterSelection value viewModel.start( postListViewModelConnector, - mainViewModel.uploadStatusTracker, mainViewModel.authorSelectionUpdated.value!!, photonWidth = displayWidth - contentSpacing * 2, photonHeight = nonNullActivity.resources.getDimensionPixelSize(R.dimen.reader_featured_image_height) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/posts/PostListMainViewModel.kt b/WordPress/src/main/java/org/wordpress/android/ui/posts/PostListMainViewModel.kt index 04b720e529a0..ffd95cb75b3b 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/posts/PostListMainViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/posts/PostListMainViewModel.kt @@ -134,7 +134,7 @@ class PostListMainViewModel @Inject constructor( private val _searchQuery = MutableLiveData() val searchQuery: LiveData = _searchQuery - val uploadStatusTracker = PostModelUploadStatusTracker( + private val uploadStatusTracker = PostModelUploadStatusTracker( uploadStore = uploadStore, uploadActionUseCase = uploadActionUseCase ) @@ -272,7 +272,7 @@ class PostListMainViewModel @Inject constructor( site = site, postListType = postListType, postActionHandler = postActionHandler, - getUploadStatus = uploadStatusTracker::getUploadStatus, + uploadStatusTracker = uploadStatusTracker, doesPostHaveUnhandledConflict = postConflictResolver::doesPostHaveUnhandledConflict, hasAutoSave = postConflictResolver::hasUnhandledAutoSave, postFetcher = postFetcher, diff --git a/WordPress/src/main/java/org/wordpress/android/viewmodel/posts/PostListViewModel.kt b/WordPress/src/main/java/org/wordpress/android/viewmodel/posts/PostListViewModel.kt index 44b95f5381d8..f9d13505a95d 100644 --- a/WordPress/src/main/java/org/wordpress/android/viewmodel/posts/PostListViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/viewmodel/posts/PostListViewModel.kt @@ -33,7 +33,6 @@ import org.wordpress.android.ui.posts.AuthorFilterSelection import org.wordpress.android.ui.posts.AuthorFilterSelection.EVERYONE import org.wordpress.android.ui.posts.AuthorFilterSelection.ME import org.wordpress.android.ui.posts.PostListType.SEARCH -import org.wordpress.android.ui.posts.PostModelUploadStatusTracker import org.wordpress.android.ui.posts.PostUtils import org.wordpress.android.ui.posts.trackPostListAction import org.wordpress.android.ui.reader.utils.ReaderUtilsWrapper @@ -79,7 +78,6 @@ class PostListViewModel @Inject constructor( } private var isStarted: Boolean = false private lateinit var connector: PostListViewModelConnector - private lateinit var uploadStatusTracker: PostModelUploadStatusTracker private var photonWidth by Delegates.notNull() private var photonHeight by Delegates.notNull() @@ -128,7 +126,6 @@ class PostListViewModel @Inject constructor( fun start( postListViewModelConnector: PostListViewModelConnector, - uploadStatusTracker: PostModelUploadStatusTracker, value: AuthorFilterSelection, photonWidth: Int, photonHeight: Int @@ -139,7 +136,6 @@ class PostListViewModel @Inject constructor( this.photonHeight = photonHeight this.photonWidth = photonWidth connector = postListViewModelConnector - this.uploadStatusTracker = uploadStatusTracker isStarted = true lifecycleRegistry.markState(Lifecycle.State.STARTED) @@ -375,7 +371,7 @@ class PostListViewModel @Inject constructor( trackPostListAction(connector.site, buttonType, postModel, statEvent) connector.postActionHandler.handlePostButton(buttonType, postModel) }, - uploadStatusTracker = uploadStatusTracker + uploadStatusTracker = connector.uploadStatusTracker ) private fun retryOnConnectionAvailableAfterRefreshError() { diff --git a/WordPress/src/main/java/org/wordpress/android/viewmodel/posts/PostListViewModelConnector.kt b/WordPress/src/main/java/org/wordpress/android/viewmodel/posts/PostListViewModelConnector.kt index 682d6207ecf7..58ee703ad99b 100644 --- a/WordPress/src/main/java/org/wordpress/android/viewmodel/posts/PostListViewModelConnector.kt +++ b/WordPress/src/main/java/org/wordpress/android/viewmodel/posts/PostListViewModelConnector.kt @@ -4,15 +4,16 @@ import org.wordpress.android.fluxc.model.PostModel import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.ui.posts.PostActionHandler import org.wordpress.android.ui.posts.PostListType +import org.wordpress.android.ui.posts.PostModelUploadStatusTracker class PostListViewModelConnector( val site: SiteModel, val postListType: PostListType, val postActionHandler: PostActionHandler, - val getUploadStatus: (PostModel, SiteModel) -> PostListItemUploadStatus, val doesPostHaveUnhandledConflict: (PostModel) -> Boolean, val hasAutoSave: (PostModel) -> Boolean, val postFetcher: PostFetcher, + val uploadStatusTracker: PostModelUploadStatusTracker, private val getFeaturedImageUrl: (site: SiteModel, featuredImageId: Long) -> String? ) { fun getFeaturedImageUrl(featuredImageId: Long): String? { diff --git a/WordPress/src/test/java/org/wordpress/android/viewmodel/posts/PostListViewModelTest.kt b/WordPress/src/test/java/org/wordpress/android/viewmodel/posts/PostListViewModelTest.kt index 2d5ee87d2465..95a64431d97b 100644 --- a/WordPress/src/test/java/org/wordpress/android/viewmodel/posts/PostListViewModelTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/viewmodel/posts/PostListViewModelTest.kt @@ -21,7 +21,6 @@ import org.wordpress.android.ui.posts.AuthorFilterSelection import org.wordpress.android.ui.posts.PostListType import org.wordpress.android.ui.posts.PostListType.DRAFTS import org.wordpress.android.ui.posts.PostListType.SEARCH -import org.wordpress.android.ui.posts.PostModelUploadStatusTracker import org.wordpress.android.ui.uploads.UploadStarter private const val DEFAULT_PHOTON_DIMENSIONS = -9 @@ -30,7 +29,6 @@ private val DEFAULT_AUTHOR_FILTER = AuthorFilterSelection.EVERYONE class PostListViewModelTest : BaseUnitTest() { @Mock private lateinit var site: SiteModel @Mock private lateinit var uploadStarter: UploadStarter - @Mock private lateinit var uploadStatusTracker: PostModelUploadStatusTracker private lateinit var viewModel: PostListViewModel @@ -71,7 +69,6 @@ class PostListViewModelTest : BaseUnitTest() { fun `when swiping to refresh, it uploads all local drafts`() { viewModel.start( createPostListViewModelConnector(site = site, postListType = DRAFTS), - uploadStatusTracker, DEFAULT_AUTHOR_FILTER, DEFAULT_PHOTON_DIMENSIONS, DEFAULT_PHOTON_DIMENSIONS @@ -88,7 +85,6 @@ class PostListViewModelTest : BaseUnitTest() { fun `empty search query should show search prompt`() { viewModel.start( createPostListViewModelConnector(site = site, postListType = SEARCH), - uploadStatusTracker, DEFAULT_AUTHOR_FILTER, DEFAULT_PHOTON_DIMENSIONS, DEFAULT_PHOTON_DIMENSIONS @@ -111,7 +107,7 @@ class PostListViewModelTest : BaseUnitTest() { site = site, postListType = postListType, postActionHandler = mock(), - getUploadStatus = mock(), + uploadStatusTracker = mock(), doesPostHaveUnhandledConflict = mock(), hasAutoSave = mock(), getFeaturedImageUrl = mock(),