From b0f6d196a9adbdca27158d1f235bc4e53e76426e Mon Sep 17 00:00:00 2001 From: Joel Dean Date: Fri, 31 Jan 2020 19:30:43 -0500 Subject: [PATCH 01/30] started PageListDialogHelper --- .../viewmodel/pages/PageListDialogHelper.kt | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt diff --git a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt new file mode 100644 index 000000000000..cee771356725 --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt @@ -0,0 +1,68 @@ +package org.wordpress.android.viewmodel.pages + +import org.wordpress.android.R.string +import org.wordpress.android.analytics.AnalyticsTracker.Stat.UNPUBLISHED_REVISION_DIALOG_LOAD_LOCAL_VERSION_CLICKED +import org.wordpress.android.analytics.AnalyticsTracker.Stat.UNPUBLISHED_REVISION_DIALOG_LOAD_UNPUBLISHED_VERSION_CLICKED +import org.wordpress.android.analytics.AnalyticsTracker.Stat.UNPUBLISHED_REVISION_DIALOG_SHOWN +import org.wordpress.android.fluxc.model.PostModel +import org.wordpress.android.ui.posts.PostUtils +import org.wordpress.android.ui.utils.UiString.UiStringRes +import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper +import org.wordpress.android.viewmodel.helpers.DialogHolder + +private const val CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG = "CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG" + +class PageListDialogHelper( + private val showDialog: (DialogHolder) -> Unit, + private val checkNetworkConnection: () -> Boolean, + private val analyticsTracker: AnalyticsTrackerWrapper +) { + private var localPostIdForAutosaveRevisionResolutionDialog: Int? = null + + fun showAutoSaveRevisionDialog(post: PostModel) { + analyticsTracker.track(UNPUBLISHED_REVISION_DIALOG_SHOWN) + val dialogHolder = DialogHolder( + tag = CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG, + title = UiStringRes(string.dialog_confirm_autosave_title), + message = PostUtils.getCustomStringForAutosaveRevisionDialog(post), + positiveButton = UiStringRes(string.dialog_confirm_autosave_restore_button), + negativeButton = UiStringRes(string.dialog_confirm_autosave_dont_restore_button) + ) + localPostIdForAutosaveRevisionResolutionDialog = post.id + showDialog.invoke(dialogHolder) + } + + fun onPositiveClickedForBasicDialog( + instanceTag: String, + trashPostWithLocalChanges: (Int) -> Unit, + deletePost: (Int) -> Unit, + publishPost: (Int) -> Unit, + updateConflictedPostWithRemoteVersion: (Int) -> Unit, + editRestoredAutoSavePost: (Int) -> Unit + ) { + when (instanceTag) { + CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG -> localPostIdForAutosaveRevisionResolutionDialog?.let { + // open the editor with the restored auto save + localPostIdForAutosaveRevisionResolutionDialog = null + editRestoredAutoSavePost(it) + analyticsTracker.track(UNPUBLISHED_REVISION_DIALOG_LOAD_UNPUBLISHED_VERSION_CLICKED) + } + else -> throw IllegalArgumentException("Dialog's positive button click is not handled: $instanceTag") + } + } + + fun onNegativeClickedForBasicDialog( + instanceTag: String, + updateConflictedPostWithLocalVersion: (Int) -> Unit, + editLocalPost: (Int) -> Unit + ) { + when (instanceTag) { + CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG -> localPostIdForAutosaveRevisionResolutionDialog?.let { + // open the editor with the local post (don't use the auto save version) + editLocalPost(it) + analyticsTracker.track(UNPUBLISHED_REVISION_DIALOG_LOAD_LOCAL_VERSION_CLICKED) + } + else -> throw IllegalArgumentException("Dialog's negative button click is not handled: $instanceTag") + } + } +} From def1b796ebb42e104e22d7a701e1f7c014fd071c Mon Sep 17 00:00:00 2001 From: Joel Dean Date: Mon, 3 Feb 2020 15:26:48 -0500 Subject: [PATCH 02/30] added logic to edit local or auto revision version. --- .../viewmodel/pages/PageListDialogHelper.kt | 14 ++---- .../android/viewmodel/pages/PagesViewModel.kt | 44 +++++++++++++++++++ .../viewmodel/pages/PagesViewModelTest.kt | 1 + 3 files changed, 49 insertions(+), 10 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt index cee771356725..77883efac1ad 100644 --- a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt +++ b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt @@ -14,7 +14,6 @@ private const val CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG = "CONFIRM_ON_AUTOSAVE class PageListDialogHelper( private val showDialog: (DialogHolder) -> Unit, - private val checkNetworkConnection: () -> Boolean, private val analyticsTracker: AnalyticsTrackerWrapper ) { private var localPostIdForAutosaveRevisionResolutionDialog: Int? = null @@ -34,17 +33,13 @@ class PageListDialogHelper( fun onPositiveClickedForBasicDialog( instanceTag: String, - trashPostWithLocalChanges: (Int) -> Unit, - deletePost: (Int) -> Unit, - publishPost: (Int) -> Unit, - updateConflictedPostWithRemoteVersion: (Int) -> Unit, - editRestoredAutoSavePost: (Int) -> Unit + editRestoredAutoSavePage: (Int) -> Unit ) { when (instanceTag) { CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG -> localPostIdForAutosaveRevisionResolutionDialog?.let { // open the editor with the restored auto save localPostIdForAutosaveRevisionResolutionDialog = null - editRestoredAutoSavePost(it) + editRestoredAutoSavePage(it) analyticsTracker.track(UNPUBLISHED_REVISION_DIALOG_LOAD_UNPUBLISHED_VERSION_CLICKED) } else -> throw IllegalArgumentException("Dialog's positive button click is not handled: $instanceTag") @@ -53,13 +48,12 @@ class PageListDialogHelper( fun onNegativeClickedForBasicDialog( instanceTag: String, - updateConflictedPostWithLocalVersion: (Int) -> Unit, - editLocalPost: (Int) -> Unit + editLocalPage: (Int) -> Unit ) { when (instanceTag) { CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG -> localPostIdForAutosaveRevisionResolutionDialog?.let { // open the editor with the local post (don't use the auto save version) - editLocalPost(it) + editLocalPage(it) analyticsTracker.track(UNPUBLISHED_REVISION_DIALOG_LOAD_LOCAL_VERSION_CLICKED) } else -> throw IllegalArgumentException("Dialog's negative button click is not handled: $instanceTag") diff --git a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PagesViewModel.kt b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PagesViewModel.kt index f04509ab3017..f30e0600fcca 100644 --- a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PagesViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PagesViewModel.kt @@ -48,10 +48,12 @@ import org.wordpress.android.util.AppLog import org.wordpress.android.util.AppLog.T import org.wordpress.android.util.EventBusWrapper import org.wordpress.android.util.NetworkUtilsWrapper +import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper import org.wordpress.android.util.analytics.AnalyticsUtils import org.wordpress.android.util.coroutines.suspendCoroutineWithTimeout import org.wordpress.android.viewmodel.ScopedViewModel import org.wordpress.android.viewmodel.SingleLiveEvent +import org.wordpress.android.viewmodel.helpers.DialogHolder import org.wordpress.android.viewmodel.pages.ActionPerformer.PageAction import org.wordpress.android.viewmodel.pages.ActionPerformer.PageAction.EventType.DELETE import org.wordpress.android.viewmodel.pages.ActionPerformer.PageAction.EventType.UPDATE @@ -88,6 +90,7 @@ class PagesViewModel private val networkUtils: NetworkUtilsWrapper, private val eventBusWrapper: EventBusWrapper, private val previewStateHelper: PreviewStateHelper, + private val analyticsTracker: AnalyticsTrackerWrapper, @Named(UI_THREAD) private val uiDispatcher: CoroutineDispatcher, @Named(BG_THREAD) private val defaultDispatcher: CoroutineDispatcher ) : ScopedViewModel(uiDispatcher) { @@ -115,6 +118,9 @@ class PagesViewModel private val _editPage = SingleLiveEvent() val editPage: LiveData = _editPage + private val _editAutoRevisionPage = SingleLiveEvent>() + val editAutoRevisionPage: LiveData> = _editAutoRevisionPage + private val _previewPage = SingleLiveEvent() val previewPage: LiveData = _previewPage @@ -146,6 +152,9 @@ class PagesViewModel private val _showSnackbarMessage = SingleLiveEvent() val showSnackbarMessage: LiveData = _showSnackbarMessage + private val _dialogAction = SingleLiveEvent() + val dialogAction: LiveData = _dialogAction + private var _site: SiteModel? = null val site: SiteModel get() = checkNotNull(_site) { "Trying to access unitialized site" } @@ -162,6 +171,13 @@ class PagesViewModel private var pageUpdateContinuations: MutableMap> = mutableMapOf() private var currentPageType = PUBLISHED + private val pageListDialogHelper: PageListDialogHelper by lazy { + PageListDialogHelper( + showDialog = { _dialogAction.postValue(it) }, + analyticsTracker = analyticsTracker + ) + } + data class BrowsePreview( val post: PostModel, val previewType: RemotePreviewType @@ -674,6 +690,34 @@ class PagesViewModel } } + // BasicFragmentDialog Events + + fun onPositiveClickedForBasicDialog(instanceTag: String) { + pageListDialogHelper.onPositiveClickedForBasicDialog( + instanceTag = instanceTag, + editRestoredAutoSavePage = this::editRestoredAutoSavePage + ) + } + + fun onNegativeClickedForBasicDialog(instanceTag: String) { + pageListDialogHelper.onNegativeClickedForBasicDialog( + instanceTag = instanceTag, + editLocalPage = this::editLocalPage + ) + } + + private fun editLocalPage(localPageId: Int) { + launch { + val page = pageStore.getPageByLocalId(localPageId, site) + _editPage.postValue(page) + } + } + + private fun editRestoredAutoSavePage(localPageId: Int) { + val page = postStore.getPostByLocalPostId(localPageId) + _editAutoRevisionPage.postValue(Pair(page, site)) + } + private fun isRemotePreviewingFromPostsList() = _previewState.value != null && _previewState.value != PostListRemotePreviewState.NONE diff --git a/WordPress/src/test/java/org/wordpress/android/viewmodel/pages/PagesViewModelTest.kt b/WordPress/src/test/java/org/wordpress/android/viewmodel/pages/PagesViewModelTest.kt index d8ab3f045bbc..893cfb4035fe 100644 --- a/WordPress/src/test/java/org/wordpress/android/viewmodel/pages/PagesViewModelTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/viewmodel/pages/PagesViewModelTest.kt @@ -60,6 +60,7 @@ class PagesViewModelTest { actionPerfomer = actionPerformer, networkUtils = networkUtils, previewStateHelper = mock(), + analyticsTracker = mock(), uiDispatcher = Dispatchers.Unconfined, defaultDispatcher = Dispatchers.Unconfined, eventBusWrapper = mock() From 3dfcfa1e2de615b8e4a872a6d095c0a286888497 Mon Sep 17 00:00:00 2001 From: Joel Dean Date: Mon, 3 Feb 2020 16:11:56 -0500 Subject: [PATCH 03/30] refactored delete dialog implementation so that the fragment could have point of communication with the PageListDialogHelper --- .../android/ui/pages/PagesActivity.kt | 10 ++--- .../android/ui/pages/PagesFragment.kt | 26 +++-------- .../viewmodel/pages/PageListDialogHelper.kt | 45 ++++++++++++++----- .../android/viewmodel/pages/PagesViewModel.kt | 30 ++++++------- 4 files changed, 60 insertions(+), 51 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/pages/PagesActivity.kt b/WordPress/src/main/java/org/wordpress/android/ui/pages/PagesActivity.kt index d46b421721bd..58508bfb8373 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/pages/PagesActivity.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/pages/PagesActivity.kt @@ -53,16 +53,16 @@ class PagesActivity : AppCompatActivity(), } override fun onPositiveClicked(instanceTag: String) { - passDeleteConfirmation(instanceTag.toLong()) + val fragment = supportFragmentManager.findFragmentById(R.id.fragment_container) + if (fragment is PagesFragment) { + fragment.onPositiveClickedForBasicDialog(instanceTag) + } } override fun onNegativeClicked(instanceTag: String) { - } - - private fun passDeleteConfirmation(remoteId: Long) { val fragment = supportFragmentManager.findFragmentById(R.id.fragment_container) if (fragment is PagesFragment) { - fragment.onPageDeleteConfirmed(remoteId) + fragment.onNegativeClickedForBasicDialog(instanceTag) } } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/pages/PagesFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/pages/PagesFragment.kt index dec2c9e56596..14a0f6ab1abf 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/pages/PagesFragment.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/pages/PagesFragment.kt @@ -42,8 +42,6 @@ import org.wordpress.android.fluxc.store.QuickStartStore.QuickStartTask import org.wordpress.android.ui.ActivityLauncher import org.wordpress.android.ui.PagePostCreationSourcesDetail.PAGE_FROM_PAGES_LIST import org.wordpress.android.ui.RequestCodes -import org.wordpress.android.ui.pages.PageItem.Page -import org.wordpress.android.ui.posts.BasicFragmentDialog import org.wordpress.android.ui.posts.EditPostActivity import org.wordpress.android.ui.posts.PostListAction.PreviewPost import org.wordpress.android.ui.posts.PreviewStateHelper @@ -345,10 +343,6 @@ class PagesFragment : Fragment() { page?.let { ActivityLauncher.viewPageParentForResult(this, page) } }) - viewModel.displayDeleteDialog.observe(this, Observer { page -> - page?.let { displayDeleteDialog(page) } - }) - viewModel.isNewPageButtonVisible.observe(this, Observer { isVisible -> isVisible?.let { if (isVisible) { @@ -378,10 +372,6 @@ class PagesFragment : Fragment() { initializeSearchView() } - fun onPageDeleteConfirmed(remoteId: Long) { - viewModel.onDeleteConfirmed(remoteId) - } - private fun refreshProgressBars(listState: PageListState?) { if (!isAdded || view == null) { return @@ -408,16 +398,12 @@ class PagesFragment : Fragment() { } } - private fun displayDeleteDialog(page: Page) { - val dialog = BasicFragmentDialog() - dialog.initialize( - page.id.toString(), - getString(R.string.delete_page), - getString(R.string.page_delete_dialog_message, page.title), - getString(R.string.delete), - getString(R.string.cancel) - ) - dialog.show(fragmentManager, page.id.toString()) + fun onPositiveClickedForBasicDialog(instanceTag: String) { + viewModel.onPositiveClickedForBasicDialog(instanceTag) + } + + fun onNegativeClickedForBasicDialog(instanceTag: String) { + viewModel.onNegativeClickedForBasicDialog(instanceTag) } override fun onStart() { diff --git a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt index 77883efac1ad..afe01f548610 100644 --- a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt +++ b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt @@ -1,9 +1,11 @@ package org.wordpress.android.viewmodel.pages -import org.wordpress.android.R.string +import org.wordpress.android.R import org.wordpress.android.analytics.AnalyticsTracker.Stat.UNPUBLISHED_REVISION_DIALOG_LOAD_LOCAL_VERSION_CLICKED import org.wordpress.android.analytics.AnalyticsTracker.Stat.UNPUBLISHED_REVISION_DIALOG_LOAD_UNPUBLISHED_VERSION_CLICKED import org.wordpress.android.analytics.AnalyticsTracker.Stat.UNPUBLISHED_REVISION_DIALOG_SHOWN +import org.wordpress.android.fluxc.model.LocalOrRemoteId.LocalId +import org.wordpress.android.fluxc.model.LocalOrRemoteId.RemoteId import org.wordpress.android.fluxc.model.PostModel import org.wordpress.android.ui.posts.PostUtils import org.wordpress.android.ui.utils.UiString.UiStringRes @@ -11,34 +13,54 @@ import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper import org.wordpress.android.viewmodel.helpers.DialogHolder private const val CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG = "CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG" +private const val CONFIRM_DELETE_PAGE_DIALOG_TAG = "CONFIRM_DELETE_PAGE_DIALOG_TAG" + class PageListDialogHelper( private val showDialog: (DialogHolder) -> Unit, private val analyticsTracker: AnalyticsTrackerWrapper ) { - private var localPostIdForAutosaveRevisionResolutionDialog: Int? = null + private var localPageIdForAutosaveRevisionResolutionDialog: LocalId? = null + private var remotePageIdForDeleteDialog: RemoteId? = null fun showAutoSaveRevisionDialog(post: PostModel) { analyticsTracker.track(UNPUBLISHED_REVISION_DIALOG_SHOWN) val dialogHolder = DialogHolder( tag = CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG, - title = UiStringRes(string.dialog_confirm_autosave_title), + title = UiStringRes(R.string.dialog_confirm_autosave_title), message = PostUtils.getCustomStringForAutosaveRevisionDialog(post), - positiveButton = UiStringRes(string.dialog_confirm_autosave_restore_button), - negativeButton = UiStringRes(string.dialog_confirm_autosave_dont_restore_button) + positiveButton = UiStringRes(R.string.dialog_confirm_autosave_restore_button), + negativeButton = UiStringRes(R.string.dialog_confirm_autosave_dont_restore_button) ) - localPostIdForAutosaveRevisionResolutionDialog = post.id + localPageIdForAutosaveRevisionResolutionDialog = LocalId(post.id) + showDialog.invoke(dialogHolder) + } + + fun showDeletePostConfirmationDialog(localPageId : RemoteId) { + val dialogHolder = DialogHolder( + tag = CONFIRM_DELETE_PAGE_DIALOG_TAG, + title = UiStringRes(R.string.delete_page), + message = UiStringRes(R.string.page_delete_dialog_message), + positiveButton = UiStringRes(R.string.delete), + negativeButton = UiStringRes(R.string.cancel) + ) + remotePageIdForDeleteDialog = localPageId showDialog.invoke(dialogHolder) } fun onPositiveClickedForBasicDialog( instanceTag: String, - editRestoredAutoSavePage: (Int) -> Unit + deletePage: (RemoteId) -> Unit, + editRestoredAutoSavePage: (LocalId) -> Unit ) { when (instanceTag) { - CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG -> localPostIdForAutosaveRevisionResolutionDialog?.let { + CONFIRM_DELETE_PAGE_DIALOG_TAG -> remotePageIdForDeleteDialog?.let { + remotePageIdForDeleteDialog = null + deletePage(it) + } + CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG -> localPageIdForAutosaveRevisionResolutionDialog?.let { // open the editor with the restored auto save - localPostIdForAutosaveRevisionResolutionDialog = null + localPageIdForAutosaveRevisionResolutionDialog = null editRestoredAutoSavePage(it) analyticsTracker.track(UNPUBLISHED_REVISION_DIALOG_LOAD_UNPUBLISHED_VERSION_CLICKED) } @@ -48,10 +70,11 @@ class PageListDialogHelper( fun onNegativeClickedForBasicDialog( instanceTag: String, - editLocalPage: (Int) -> Unit + editLocalPage: (LocalId) -> Unit ) { when (instanceTag) { - CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG -> localPostIdForAutosaveRevisionResolutionDialog?.let { + CONFIRM_DELETE_PAGE_DIALOG_TAG -> remotePageIdForDeleteDialog = null + CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG -> localPageIdForAutosaveRevisionResolutionDialog?.let { // open the editor with the local post (don't use the auto save version) editLocalPage(it) analyticsTracker.track(UNPUBLISHED_REVISION_DIALOG_LOAD_LOCAL_VERSION_CLICKED) diff --git a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PagesViewModel.kt b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PagesViewModel.kt index f30e0600fcca..06e4111fbbb9 100644 --- a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PagesViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PagesViewModel.kt @@ -20,6 +20,8 @@ import org.wordpress.android.analytics.AnalyticsTracker.Stat.PAGES_TAB_PRESSED import org.wordpress.android.fluxc.Dispatcher import org.wordpress.android.fluxc.model.CauseOfOnPostChanged import org.wordpress.android.fluxc.model.CauseOfOnPostChanged.RemoteAutoSavePost +import org.wordpress.android.fluxc.model.LocalOrRemoteId.LocalId +import org.wordpress.android.fluxc.model.LocalOrRemoteId.RemoteId import org.wordpress.android.fluxc.model.PostModel import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.page.PageModel @@ -100,9 +102,6 @@ class PagesViewModel private val _listState = MutableLiveData() val listState: LiveData = _listState - private val _displayDeleteDialog = SingleLiveEvent() - val displayDeleteDialog: LiveData = _displayDeleteDialog - private val _isNewPageButtonVisible = MutableLiveData() val isNewPageButtonVisible: LiveData = _isNewPageButtonVisible @@ -391,7 +390,7 @@ class PagesViewModel private fun deletePage(page: Page) { performIfNetworkAvailable { - _displayDeleteDialog.postValue(page) + pageListDialogHelper.showDeletePostConfirmationDialog(RemoteId(page.id)) } } @@ -457,12 +456,6 @@ class PagesViewModel } } - fun onDeleteConfirmed(remoteId: Long) { - launch(defaultDispatcher) { - pageMap[remoteId]?.let { deletePage(it) } - } - } - fun onItemTapped(pageItem: Page) { _editPage.postValue(pageMap[pageItem.id]) } @@ -695,7 +688,8 @@ class PagesViewModel fun onPositiveClickedForBasicDialog(instanceTag: String) { pageListDialogHelper.onPositiveClickedForBasicDialog( instanceTag = instanceTag, - editRestoredAutoSavePage = this::editRestoredAutoSavePage + editRestoredAutoSavePage = this::editRestoredAutoSavePage, + deletePage = this::onDeleteConfirmed ) } @@ -706,15 +700,21 @@ class PagesViewModel ) } - private fun editLocalPage(localPageId: Int) { + private fun onDeleteConfirmed(pageId: RemoteId) { + launch(defaultDispatcher) { + pageMap[pageId.value]?.let { deletePage(it) } + } + } + + private fun editLocalPage(pageId: LocalId) { launch { - val page = pageStore.getPageByLocalId(localPageId, site) + val page = pageStore.getPageByLocalId(pageId.value, site) _editPage.postValue(page) } } - private fun editRestoredAutoSavePage(localPageId: Int) { - val page = postStore.getPostByLocalPostId(localPageId) + private fun editRestoredAutoSavePage(pageId: LocalId) { + val page = postStore.getPostByLocalPostId(pageId.value) _editAutoRevisionPage.postValue(Pair(page, site)) } From abff27e32d0db68a1fd752b720287263a3656282 Mon Sep 17 00:00:00 2001 From: Joel Dean Date: Mon, 3 Feb 2020 16:58:27 -0500 Subject: [PATCH 04/30] added logic to enable auto revision checks --- .../org/wordpress/android/ui/pages/PagesFragment.kt | 8 ++++++++ .../android/viewmodel/pages/PageConflictResolver.kt | 11 +++++++++++ .../android/viewmodel/pages/PagesViewModel.kt | 11 +++++++++-- .../android/viewmodel/pages/PagesViewModelTest.kt | 3 ++- 4 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageConflictResolver.kt diff --git a/WordPress/src/main/java/org/wordpress/android/ui/pages/PagesFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/pages/PagesFragment.kt index 14a0f6ab1abf..c113bb657e8e 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/pages/PagesFragment.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/pages/PagesFragment.kt @@ -318,6 +318,10 @@ class PagesFragment : Fragment() { } }) + viewModel.editAutoRevisionPage.observe(this, Observer { models -> models.first?.let { + ActivityLauncher.editPostOrPageForResult(activity, models.second, it) + } }) + viewModel.previewPage.observe(this, Observer { post -> post?.let { previewPage(activity, post) @@ -360,6 +364,10 @@ class PagesFragment : Fragment() { (pagesPager.adapter as PagesPagerAdapter).scrollToPage(page) } }) + + viewModel.dialogAction.observe(this, Observer { + it?.show(activity, activity.supportFragmentManager, uiHelpers) + }) } override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { diff --git a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageConflictResolver.kt b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageConflictResolver.kt new file mode 100644 index 000000000000..439102652107 --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageConflictResolver.kt @@ -0,0 +1,11 @@ +package org.wordpress.android.viewmodel.pages + +import org.wordpress.android.fluxc.model.PostModel +import org.wordpress.android.ui.posts.PostUtils +import javax.inject.Inject + +class PageConflictResolver @Inject constructor() { + fun hasUnhandledAutoSave(post: PostModel): Boolean { + return PostUtils.hasAutoSave(post) + } +} diff --git a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PagesViewModel.kt b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PagesViewModel.kt index 06e4111fbbb9..4bad48721247 100644 --- a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PagesViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PagesViewModel.kt @@ -93,6 +93,7 @@ class PagesViewModel private val eventBusWrapper: EventBusWrapper, private val previewStateHelper: PreviewStateHelper, private val analyticsTracker: AnalyticsTrackerWrapper, + private val pageConflictResolver: PageConflictResolver, @Named(UI_THREAD) private val uiDispatcher: CoroutineDispatcher, @Named(BG_THREAD) private val defaultDispatcher: CoroutineDispatcher ) : ScopedViewModel(uiDispatcher) { @@ -117,8 +118,8 @@ class PagesViewModel private val _editPage = SingleLiveEvent() val editPage: LiveData = _editPage - private val _editAutoRevisionPage = SingleLiveEvent>() - val editAutoRevisionPage: LiveData> = _editAutoRevisionPage + private val _editAutoRevisionPage = SingleLiveEvent>() + val editAutoRevisionPage: LiveData> = _editAutoRevisionPage private val _previewPage = SingleLiveEvent() val previewPage: LiveData = _previewPage @@ -457,6 +458,12 @@ class PagesViewModel } fun onItemTapped(pageItem: Page) { + val page = postStore.getPostByRemotePostId(pageItem.id, site) + // Then check if an autosave revision is available + if (pageConflictResolver.hasUnhandledAutoSave(page)) { + pageListDialogHelper.showAutoSaveRevisionDialog(page) + return + } _editPage.postValue(pageMap[pageItem.id]) } diff --git a/WordPress/src/test/java/org/wordpress/android/viewmodel/pages/PagesViewModelTest.kt b/WordPress/src/test/java/org/wordpress/android/viewmodel/pages/PagesViewModelTest.kt index 893cfb4035fe..1384f3cd8435 100644 --- a/WordPress/src/test/java/org/wordpress/android/viewmodel/pages/PagesViewModelTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/viewmodel/pages/PagesViewModelTest.kt @@ -63,7 +63,8 @@ class PagesViewModelTest { analyticsTracker = mock(), uiDispatcher = Dispatchers.Unconfined, defaultDispatcher = Dispatchers.Unconfined, - eventBusWrapper = mock() + eventBusWrapper = mock(), + pageConflictResolver = mock() ) listStates = mutableListOf() pages = mutableListOf() From 7087c23506a9e790d75368c20b83c50e2fef36d9 Mon Sep 17 00:00:00 2001 From: Joel Dean Date: Mon, 3 Feb 2020 16:58:58 -0500 Subject: [PATCH 05/30] refactored parameter name since type provides enough context. --- .../wordpress/android/viewmodel/pages/PageListDialogHelper.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt index afe01f548610..e3ba29b4cc65 100644 --- a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt +++ b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt @@ -36,7 +36,7 @@ class PageListDialogHelper( showDialog.invoke(dialogHolder) } - fun showDeletePostConfirmationDialog(localPageId : RemoteId) { + fun showDeletePostConfirmationDialog(pageId : RemoteId) { val dialogHolder = DialogHolder( tag = CONFIRM_DELETE_PAGE_DIALOG_TAG, title = UiStringRes(R.string.delete_page), @@ -44,7 +44,7 @@ class PageListDialogHelper( positiveButton = UiStringRes(R.string.delete), negativeButton = UiStringRes(R.string.cancel) ) - remotePageIdForDeleteDialog = localPageId + remotePageIdForDeleteDialog = pageId showDialog.invoke(dialogHolder) } From bc5d7a4d1fd43ab425129e67ddd4b650a95d5e3f Mon Sep 17 00:00:00 2001 From: Joel Dean Date: Mon, 3 Feb 2020 17:22:17 -0500 Subject: [PATCH 06/30] style changes. --- .../java/org/wordpress/android/ui/pages/PagesFragment.kt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/pages/PagesFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/pages/PagesFragment.kt index c113bb657e8e..0bd1b6b5ba9e 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/pages/PagesFragment.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/pages/PagesFragment.kt @@ -318,9 +318,11 @@ class PagesFragment : Fragment() { } }) - viewModel.editAutoRevisionPage.observe(this, Observer { models -> models.first?.let { - ActivityLauncher.editPostOrPageForResult(activity, models.second, it) - } }) + viewModel.editAutoRevisionPage.observe(this, Observer { models -> + models.first?.let { + ActivityLauncher.editPostOrPageForResult(activity, models.second, it) + } + }) viewModel.previewPage.observe(this, Observer { post -> post?.let { From 41b5d04c5ccdef903e5709f572d34d918b00b0e2 Mon Sep 17 00:00:00 2001 From: Joel Dean Date: Tue, 4 Feb 2020 13:32:42 -0500 Subject: [PATCH 07/30] used names for pair and fixed activity launcher function. --- .../java/org/wordpress/android/ui/pages/PagesFragment.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/pages/PagesFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/pages/PagesFragment.kt index 0bd1b6b5ba9e..4518472f472a 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/pages/PagesFragment.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/pages/PagesFragment.kt @@ -318,9 +318,9 @@ class PagesFragment : Fragment() { } }) - viewModel.editAutoRevisionPage.observe(this, Observer { models -> - models.first?.let { - ActivityLauncher.editPostOrPageForResult(activity, models.second, it) + viewModel.editAutoRevisionPage.observe(this, Observer { (page, site) -> + page?.let { + ActivityLauncher.editPostOrPageForResult(activity, site, page, true) } }) From c1193eb98c7cfe109f8d06db0ae7352c8e133378 Mon Sep 17 00:00:00 2001 From: Joel Dean Date: Tue, 4 Feb 2020 13:38:59 -0500 Subject: [PATCH 08/30] dialog now says page instead of post for auto revision --- .../java/org/wordpress/android/ui/posts/PostUtils.java | 7 ++++++- .../android/viewmodel/pages/PageListDialogHelper.kt | 2 +- WordPress/src/main/res/values/strings.xml | 1 + 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/posts/PostUtils.java b/WordPress/src/main/java/org/wordpress/android/ui/posts/PostUtils.java index bda07b7924c1..54db98e0659d 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/posts/PostUtils.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/posts/PostUtils.java @@ -460,8 +460,13 @@ public static String getConflictedPostCustomStringForDialog(PostModel post) { } public static UiStringText getCustomStringForAutosaveRevisionDialog(PostModel post) { + return getCustomStringForAutosaveRevisionDialog(post, false); + } + + public static UiStringText getCustomStringForAutosaveRevisionDialog(PostModel post, boolean isPage) { Context context = WordPress.getContext(); - String firstPart = context.getString(R.string.dialog_confirm_autosave_body_first_part); + String firstPart = isPage ? context.getString(R.string.dialog_confirm_autosave_body_first_part_for_page) + : context.getString(R.string.dialog_confirm_autosave_body_first_part); String lastModified = TextUtils.isEmpty(post.getDateLocallyChanged()) ? post.getLastModified() : post.getDateLocallyChanged(); diff --git a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt index e3ba29b4cc65..c3a6adcd8159 100644 --- a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt +++ b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt @@ -28,7 +28,7 @@ class PageListDialogHelper( val dialogHolder = DialogHolder( tag = CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG, title = UiStringRes(R.string.dialog_confirm_autosave_title), - message = PostUtils.getCustomStringForAutosaveRevisionDialog(post), + message = PostUtils.getCustomStringForAutosaveRevisionDialog(post, true), positiveButton = UiStringRes(R.string.dialog_confirm_autosave_restore_button), negativeButton = UiStringRes(R.string.dialog_confirm_autosave_dont_restore_button) ) diff --git a/WordPress/src/main/res/values/strings.xml b/WordPress/src/main/res/values/strings.xml index d01329ddbfe0..8d9e15459b63 100644 --- a/WordPress/src/main/res/values/strings.xml +++ b/WordPress/src/main/res/values/strings.xml @@ -358,6 +358,7 @@ Which version would you like to edit? You recently made changes to this post but didn\'t save them. Choose a version to load:\n\n + You recently made changes to this page but didn\'t save them. Choose a version to load:\n\n From this app\nSaved on %s\n\nFrom another device\nSaved on %s\n The version from another device The version from this app From e9c140f727a2b2f38dfd8cbdc78f3a8eb7fb0346 Mon Sep 17 00:00:00 2001 From: Joel Dean Date: Tue, 4 Feb 2020 13:46:20 -0500 Subject: [PATCH 09/30] added page title to delete dialog. --- .../android/viewmodel/pages/PageListDialogHelper.kt | 10 ++++++++-- .../android/viewmodel/pages/PagesViewModel.kt | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt index c3a6adcd8159..552f80e68a73 100644 --- a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt +++ b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt @@ -1,6 +1,7 @@ package org.wordpress.android.viewmodel.pages import org.wordpress.android.R +import org.wordpress.android.WordPress import org.wordpress.android.analytics.AnalyticsTracker.Stat.UNPUBLISHED_REVISION_DIALOG_LOAD_LOCAL_VERSION_CLICKED import org.wordpress.android.analytics.AnalyticsTracker.Stat.UNPUBLISHED_REVISION_DIALOG_LOAD_UNPUBLISHED_VERSION_CLICKED import org.wordpress.android.analytics.AnalyticsTracker.Stat.UNPUBLISHED_REVISION_DIALOG_SHOWN @@ -9,6 +10,7 @@ import org.wordpress.android.fluxc.model.LocalOrRemoteId.RemoteId import org.wordpress.android.fluxc.model.PostModel import org.wordpress.android.ui.posts.PostUtils import org.wordpress.android.ui.utils.UiString.UiStringRes +import org.wordpress.android.ui.utils.UiString.UiStringText import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper import org.wordpress.android.viewmodel.helpers.DialogHolder @@ -36,11 +38,15 @@ class PageListDialogHelper( showDialog.invoke(dialogHolder) } - fun showDeletePostConfirmationDialog(pageId : RemoteId) { + fun showDeletePostConfirmationDialog(pageId : RemoteId, pageTitle :String) { + val dialogMessage = { + WordPress.getContext().getString(R.string.page_delete_dialog_message, pageTitle) + } + val dialogHolder = DialogHolder( tag = CONFIRM_DELETE_PAGE_DIALOG_TAG, title = UiStringRes(R.string.delete_page), - message = UiStringRes(R.string.page_delete_dialog_message), + message = UiStringText(dialogMessage()), positiveButton = UiStringRes(R.string.delete), negativeButton = UiStringRes(R.string.cancel) ) diff --git a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PagesViewModel.kt b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PagesViewModel.kt index 4bad48721247..8236451e5fa7 100644 --- a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PagesViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PagesViewModel.kt @@ -391,7 +391,7 @@ class PagesViewModel private fun deletePage(page: Page) { performIfNetworkAvailable { - pageListDialogHelper.showDeletePostConfirmationDialog(RemoteId(page.id)) + pageListDialogHelper.showDeletePostConfirmationDialog(RemoteId(page.id), page.title) } } From dc26429a6950394618421d89bee4764843623abf Mon Sep 17 00:00:00 2001 From: Joel Dean Date: Tue, 4 Feb 2020 13:49:14 -0500 Subject: [PATCH 10/30] fixed style errors. --- .../wordpress/android/viewmodel/pages/PageListDialogHelper.kt | 3 +-- .../org/wordpress/android/viewmodel/pages/PagesViewModel.kt | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt index 552f80e68a73..e36bb6a5e17a 100644 --- a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt +++ b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt @@ -17,7 +17,6 @@ import org.wordpress.android.viewmodel.helpers.DialogHolder private const val CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG = "CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG" private const val CONFIRM_DELETE_PAGE_DIALOG_TAG = "CONFIRM_DELETE_PAGE_DIALOG_TAG" - class PageListDialogHelper( private val showDialog: (DialogHolder) -> Unit, private val analyticsTracker: AnalyticsTrackerWrapper @@ -38,7 +37,7 @@ class PageListDialogHelper( showDialog.invoke(dialogHolder) } - fun showDeletePostConfirmationDialog(pageId : RemoteId, pageTitle :String) { + fun showDeletePostConfirmationDialog(pageId: RemoteId, pageTitle: String) { val dialogMessage = { WordPress.getContext().getString(R.string.page_delete_dialog_message, pageTitle) } diff --git a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PagesViewModel.kt b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PagesViewModel.kt index 8236451e5fa7..47ca22781e17 100644 --- a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PagesViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PagesViewModel.kt @@ -118,8 +118,8 @@ class PagesViewModel private val _editPage = SingleLiveEvent() val editPage: LiveData = _editPage - private val _editAutoRevisionPage = SingleLiveEvent>() - val editAutoRevisionPage: LiveData> = _editAutoRevisionPage + private val _editAutoRevisionPage = SingleLiveEvent>() + val editAutoRevisionPage: LiveData> = _editAutoRevisionPage private val _previewPage = SingleLiveEvent() val previewPage: LiveData = _previewPage From 45cc77d477d93ab0e71ed72924ce4b7b65c95ea5 Mon Sep 17 00:00:00 2001 From: Joel Dean Date: Tue, 4 Feb 2020 14:00:23 -0500 Subject: [PATCH 11/30] style fixes. --- .../viewmodel/pages/PageListDialogHelper.kt | 22 +++++++++---------- .../android/viewmodel/pages/PagesViewModel.kt | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt index e36bb6a5e17a..5399240d3ea1 100644 --- a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt +++ b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt @@ -21,8 +21,8 @@ class PageListDialogHelper( private val showDialog: (DialogHolder) -> Unit, private val analyticsTracker: AnalyticsTrackerWrapper ) { - private var localPageIdForAutosaveRevisionResolutionDialog: LocalId? = null - private var remotePageIdForDeleteDialog: RemoteId? = null + private var pageIdForAutosaveRevisionResolutionDialog: LocalId? = null + private var pageIdForDeleteDialog: RemoteId? = null fun showAutoSaveRevisionDialog(post: PostModel) { analyticsTracker.track(UNPUBLISHED_REVISION_DIALOG_SHOWN) @@ -33,11 +33,11 @@ class PageListDialogHelper( positiveButton = UiStringRes(R.string.dialog_confirm_autosave_restore_button), negativeButton = UiStringRes(R.string.dialog_confirm_autosave_dont_restore_button) ) - localPageIdForAutosaveRevisionResolutionDialog = LocalId(post.id) + pageIdForAutosaveRevisionResolutionDialog = LocalId(post.id) showDialog.invoke(dialogHolder) } - fun showDeletePostConfirmationDialog(pageId: RemoteId, pageTitle: String) { + fun showDeletePageConfirmationDialog(pageId: RemoteId, pageTitle: String) { val dialogMessage = { WordPress.getContext().getString(R.string.page_delete_dialog_message, pageTitle) } @@ -49,7 +49,7 @@ class PageListDialogHelper( positiveButton = UiStringRes(R.string.delete), negativeButton = UiStringRes(R.string.cancel) ) - remotePageIdForDeleteDialog = pageId + pageIdForDeleteDialog = pageId showDialog.invoke(dialogHolder) } @@ -59,13 +59,13 @@ class PageListDialogHelper( editRestoredAutoSavePage: (LocalId) -> Unit ) { when (instanceTag) { - CONFIRM_DELETE_PAGE_DIALOG_TAG -> remotePageIdForDeleteDialog?.let { - remotePageIdForDeleteDialog = null + CONFIRM_DELETE_PAGE_DIALOG_TAG -> pageIdForDeleteDialog?.let { + pageIdForDeleteDialog = null deletePage(it) } - CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG -> localPageIdForAutosaveRevisionResolutionDialog?.let { + CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG -> pageIdForAutosaveRevisionResolutionDialog?.let { // open the editor with the restored auto save - localPageIdForAutosaveRevisionResolutionDialog = null + pageIdForAutosaveRevisionResolutionDialog = null editRestoredAutoSavePage(it) analyticsTracker.track(UNPUBLISHED_REVISION_DIALOG_LOAD_UNPUBLISHED_VERSION_CLICKED) } @@ -78,8 +78,8 @@ class PageListDialogHelper( editLocalPage: (LocalId) -> Unit ) { when (instanceTag) { - CONFIRM_DELETE_PAGE_DIALOG_TAG -> remotePageIdForDeleteDialog = null - CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG -> localPageIdForAutosaveRevisionResolutionDialog?.let { + CONFIRM_DELETE_PAGE_DIALOG_TAG -> pageIdForDeleteDialog = null + CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG -> pageIdForAutosaveRevisionResolutionDialog?.let { // open the editor with the local post (don't use the auto save version) editLocalPage(it) analyticsTracker.track(UNPUBLISHED_REVISION_DIALOG_LOAD_LOCAL_VERSION_CLICKED) diff --git a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PagesViewModel.kt b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PagesViewModel.kt index 47ca22781e17..baec69a0dcb2 100644 --- a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PagesViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PagesViewModel.kt @@ -391,7 +391,7 @@ class PagesViewModel private fun deletePage(page: Page) { performIfNetworkAvailable { - pageListDialogHelper.showDeletePostConfirmationDialog(RemoteId(page.id), page.title) + pageListDialogHelper.showDeletePageConfirmationDialog(RemoteId(page.id), page.title) } } From 09eef06b7754486bfbd9552ea3f6837000156c02 Mon Sep 17 00:00:00 2001 From: Joel Dean Date: Tue, 4 Feb 2020 14:37:07 -0500 Subject: [PATCH 12/30] utilize page that is stored in pageMap to perform edit. --- .../android/ui/ActivityLauncher.java | 8 ++++-- .../android/ui/pages/PagesFragment.kt | 12 ++------ .../viewmodel/pages/PageListDialogHelper.kt | 13 ++++----- .../android/viewmodel/pages/PagesViewModel.kt | 28 ++++++------------- 4 files changed, 23 insertions(+), 38 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/ActivityLauncher.java b/WordPress/src/main/java/org/wordpress/android/ui/ActivityLauncher.java index 1039c0110a8f..dc41f14ffabb 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/ActivityLauncher.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/ActivityLauncher.java @@ -556,15 +556,17 @@ public static void editPostOrPageForResult(Intent intent, Activity activity, Sit activity.startActivityForResult(intent, RequestCodes.EDIT_POST); } - public static void editPageForResult(@NonNull Fragment fragment, @NonNull PageModel page) { + public static void editPageForResult(@NonNull Fragment fragment, @NonNull PageModel page, + boolean loadAutoSaveRevision) { Intent intent = new Intent(fragment.getContext(), EditPostActivity.class); - editPageForResult(intent, fragment, page.getSite(), page.getPageId()); + editPageForResult(intent, fragment, page.getSite(), page.getPageId(), loadAutoSaveRevision); } public static void editPageForResult(Intent intent, @NonNull Fragment fragment, @NonNull SiteModel site, - int pageLocalId) { + int pageLocalId, boolean loadAutoSaveRevision) { intent.putExtra(WordPress.SITE, site); intent.putExtra(EditPostActivity.EXTRA_POST_LOCAL_ID, pageLocalId); + intent.putExtra(EditPostActivity.EXTRA_LOAD_AUTO_SAVE_REVISION, loadAutoSaveRevision); fragment.startActivityForResult(intent, RequestCodes.EDIT_POST); } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/pages/PagesFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/pages/PagesFragment.kt index 4518472f472a..b15dba087784 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/pages/PagesFragment.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/pages/PagesFragment.kt @@ -123,7 +123,7 @@ class PagesFragment : Fragment() { if (EditPostActivity.checkToRestart(data)) { ActivityLauncher.editPageForResult(data, this@PagesFragment, viewModel.site, - data.getIntExtra(EditPostActivity.EXTRA_POST_LOCAL_ID, 0)) + data.getIntExtra(EditPostActivity.EXTRA_POST_LOCAL_ID, 0), false) // a restart will happen so, no need to continue here return @@ -312,15 +312,9 @@ class PagesFragment : Fragment() { } }) - viewModel.editPage.observe(this, Observer { page -> + viewModel.editPage.observe(this, Observer { (page, loadAutoRevision) -> page?.let { - ActivityLauncher.editPageForResult(this, page) - } - }) - - viewModel.editAutoRevisionPage.observe(this, Observer { (page, site) -> - page?.let { - ActivityLauncher.editPostOrPageForResult(activity, site, page, true) + ActivityLauncher.editPageForResult(this, page, loadAutoRevision) } }) diff --git a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt index 5399240d3ea1..95fdd92fa3f0 100644 --- a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt +++ b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt @@ -5,7 +5,6 @@ import org.wordpress.android.WordPress import org.wordpress.android.analytics.AnalyticsTracker.Stat.UNPUBLISHED_REVISION_DIALOG_LOAD_LOCAL_VERSION_CLICKED import org.wordpress.android.analytics.AnalyticsTracker.Stat.UNPUBLISHED_REVISION_DIALOG_LOAD_UNPUBLISHED_VERSION_CLICKED import org.wordpress.android.analytics.AnalyticsTracker.Stat.UNPUBLISHED_REVISION_DIALOG_SHOWN -import org.wordpress.android.fluxc.model.LocalOrRemoteId.LocalId import org.wordpress.android.fluxc.model.LocalOrRemoteId.RemoteId import org.wordpress.android.fluxc.model.PostModel import org.wordpress.android.ui.posts.PostUtils @@ -21,7 +20,7 @@ class PageListDialogHelper( private val showDialog: (DialogHolder) -> Unit, private val analyticsTracker: AnalyticsTrackerWrapper ) { - private var pageIdForAutosaveRevisionResolutionDialog: LocalId? = null + private var pageIdForAutosaveRevisionResolutionDialog: RemoteId? = null private var pageIdForDeleteDialog: RemoteId? = null fun showAutoSaveRevisionDialog(post: PostModel) { @@ -33,7 +32,7 @@ class PageListDialogHelper( positiveButton = UiStringRes(R.string.dialog_confirm_autosave_restore_button), negativeButton = UiStringRes(R.string.dialog_confirm_autosave_dont_restore_button) ) - pageIdForAutosaveRevisionResolutionDialog = LocalId(post.id) + pageIdForAutosaveRevisionResolutionDialog = RemoteId(post.remotePostId) showDialog.invoke(dialogHolder) } @@ -56,7 +55,7 @@ class PageListDialogHelper( fun onPositiveClickedForBasicDialog( instanceTag: String, deletePage: (RemoteId) -> Unit, - editRestoredAutoSavePage: (LocalId) -> Unit + editRestoredAutoSavePage: (RemoteId, LoadAutoSaveRevision) -> Unit ) { when (instanceTag) { CONFIRM_DELETE_PAGE_DIALOG_TAG -> pageIdForDeleteDialog?.let { @@ -66,7 +65,7 @@ class PageListDialogHelper( CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG -> pageIdForAutosaveRevisionResolutionDialog?.let { // open the editor with the restored auto save pageIdForAutosaveRevisionResolutionDialog = null - editRestoredAutoSavePage(it) + editRestoredAutoSavePage(it, true) analyticsTracker.track(UNPUBLISHED_REVISION_DIALOG_LOAD_UNPUBLISHED_VERSION_CLICKED) } else -> throw IllegalArgumentException("Dialog's positive button click is not handled: $instanceTag") @@ -75,13 +74,13 @@ class PageListDialogHelper( fun onNegativeClickedForBasicDialog( instanceTag: String, - editLocalPage: (LocalId) -> Unit + editLocalPage: (RemoteId, LoadAutoSaveRevision) -> Unit ) { when (instanceTag) { CONFIRM_DELETE_PAGE_DIALOG_TAG -> pageIdForDeleteDialog = null CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG -> pageIdForAutosaveRevisionResolutionDialog?.let { // open the editor with the local post (don't use the auto save version) - editLocalPage(it) + editLocalPage(it, false) analyticsTracker.track(UNPUBLISHED_REVISION_DIALOG_LOAD_LOCAL_VERSION_CLICKED) } else -> throw IllegalArgumentException("Dialog's negative button click is not handled: $instanceTag") diff --git a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PagesViewModel.kt b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PagesViewModel.kt index baec69a0dcb2..c3b274f08e86 100644 --- a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PagesViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PagesViewModel.kt @@ -20,7 +20,6 @@ import org.wordpress.android.analytics.AnalyticsTracker.Stat.PAGES_TAB_PRESSED import org.wordpress.android.fluxc.Dispatcher import org.wordpress.android.fluxc.model.CauseOfOnPostChanged import org.wordpress.android.fluxc.model.CauseOfOnPostChanged.RemoteAutoSavePost -import org.wordpress.android.fluxc.model.LocalOrRemoteId.LocalId import org.wordpress.android.fluxc.model.LocalOrRemoteId.RemoteId import org.wordpress.android.fluxc.model.PostModel import org.wordpress.android.fluxc.model.SiteModel @@ -83,6 +82,8 @@ private const val SNACKBAR_DELAY = 500L private const val SEARCH_COLLAPSE_DELAY = 500L private const val PAGE_UPLOAD_TIMEOUT = 5000L +typealias LoadAutoSaveRevision = Boolean + class PagesViewModel @Inject constructor( private val pageStore: PageStore, @@ -115,11 +116,8 @@ class PagesViewModel private val _createNewPage = SingleLiveEvent() val createNewPage: LiveData = _createNewPage - private val _editPage = SingleLiveEvent() - val editPage: LiveData = _editPage - - private val _editAutoRevisionPage = SingleLiveEvent>() - val editAutoRevisionPage: LiveData> = _editAutoRevisionPage + private val _editPage = SingleLiveEvent>() + val editPage: LiveData> = _editPage private val _previewPage = SingleLiveEvent() val previewPage: LiveData = _previewPage @@ -464,7 +462,7 @@ class PagesViewModel pageListDialogHelper.showAutoSaveRevisionDialog(page) return } - _editPage.postValue(pageMap[pageItem.id]) + editPage(RemoteId(pageItem.id)) } fun onNewPageButtonTapped() { @@ -695,7 +693,7 @@ class PagesViewModel fun onPositiveClickedForBasicDialog(instanceTag: String) { pageListDialogHelper.onPositiveClickedForBasicDialog( instanceTag = instanceTag, - editRestoredAutoSavePage = this::editRestoredAutoSavePage, + editRestoredAutoSavePage = this::editPage, deletePage = this::onDeleteConfirmed ) } @@ -703,7 +701,7 @@ class PagesViewModel fun onNegativeClickedForBasicDialog(instanceTag: String) { pageListDialogHelper.onNegativeClickedForBasicDialog( instanceTag = instanceTag, - editLocalPage = this::editLocalPage + editLocalPage = this::editPage ) } @@ -713,16 +711,8 @@ class PagesViewModel } } - private fun editLocalPage(pageId: LocalId) { - launch { - val page = pageStore.getPageByLocalId(pageId.value, site) - _editPage.postValue(page) - } - } - - private fun editRestoredAutoSavePage(pageId: LocalId) { - val page = postStore.getPostByLocalPostId(pageId.value) - _editAutoRevisionPage.postValue(Pair(page, site)) + private fun editPage(pageId: RemoteId, loadAutoSaveRevision: LoadAutoSaveRevision = false) { + _editPage.postValue(Pair(pageMap[pageId.value], loadAutoSaveRevision)) } private fun isRemotePreviewingFromPostsList() = _previewState.value != null && From 6ca5d59b564c4b73ab892efeb298db8168cc2cc6 Mon Sep 17 00:00:00 2001 From: Joel Dean Date: Tue, 4 Feb 2020 15:06:50 -0500 Subject: [PATCH 13/30] changed post to page for more clarity and consistency. --- .../android/viewmodel/pages/PageListDialogHelper.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt index 95fdd92fa3f0..297fd973d5b6 100644 --- a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt +++ b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt @@ -23,16 +23,16 @@ class PageListDialogHelper( private var pageIdForAutosaveRevisionResolutionDialog: RemoteId? = null private var pageIdForDeleteDialog: RemoteId? = null - fun showAutoSaveRevisionDialog(post: PostModel) { + fun showAutoSaveRevisionDialog(page: PostModel) { analyticsTracker.track(UNPUBLISHED_REVISION_DIALOG_SHOWN) val dialogHolder = DialogHolder( tag = CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG, title = UiStringRes(R.string.dialog_confirm_autosave_title), - message = PostUtils.getCustomStringForAutosaveRevisionDialog(post, true), + message = PostUtils.getCustomStringForAutosaveRevisionDialog(page, true), positiveButton = UiStringRes(R.string.dialog_confirm_autosave_restore_button), negativeButton = UiStringRes(R.string.dialog_confirm_autosave_dont_restore_button) ) - pageIdForAutosaveRevisionResolutionDialog = RemoteId(post.remotePostId) + pageIdForAutosaveRevisionResolutionDialog = RemoteId(page.remotePostId) showDialog.invoke(dialogHolder) } @@ -79,7 +79,7 @@ class PageListDialogHelper( when (instanceTag) { CONFIRM_DELETE_PAGE_DIALOG_TAG -> pageIdForDeleteDialog = null CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG -> pageIdForAutosaveRevisionResolutionDialog?.let { - // open the editor with the local post (don't use the auto save version) + // open the editor with the local page (don't use the auto save version) editLocalPage(it, false) analyticsTracker.track(UNPUBLISHED_REVISION_DIALOG_LOAD_LOCAL_VERSION_CLICKED) } From 42a636af71ed8eae83ef009db644b0cdad2c1e24 Mon Sep 17 00:00:00 2001 From: Joel Dean Date: Tue, 4 Feb 2020 15:18:39 -0500 Subject: [PATCH 14/30] fixed a minor test issue with viewmodel initialization --- .../wordpress/android/viewmodel/pages/PagesViewModelTest.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/WordPress/src/test/java/org/wordpress/android/viewmodel/pages/PagesViewModelTest.kt b/WordPress/src/test/java/org/wordpress/android/viewmodel/pages/PagesViewModelTest.kt index 37cdcb9e0c82..ab7c00e52fee 100644 --- a/WordPress/src/test/java/org/wordpress/android/viewmodel/pages/PagesViewModelTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/viewmodel/pages/PagesViewModelTest.kt @@ -65,11 +65,11 @@ class PagesViewModelTest { networkUtils = networkUtils, previewStateHelper = mock(), analyticsTracker = mock(), - uiDispatcher = Dispatchers.Unconfined, + pageConflictResolver = mock(), + uiDispatcher = Dispatchers.Unconfined, defaultDispatcher = Dispatchers.Unconfined, eventBusWrapper = mock(), uploadStarter = uploadStarter - pageConflictResolver = mock() ) listStates = mutableListOf() pages = mutableListOf() From 98946e5e81b91a8cc6a87064edc29321a4060dd0 Mon Sep 17 00:00:00 2001 From: Joel Dean Date: Tue, 4 Feb 2020 15:19:47 -0500 Subject: [PATCH 15/30] fixed formatting issue. --- .../org/wordpress/android/viewmodel/pages/PagesViewModelTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/src/test/java/org/wordpress/android/viewmodel/pages/PagesViewModelTest.kt b/WordPress/src/test/java/org/wordpress/android/viewmodel/pages/PagesViewModelTest.kt index ab7c00e52fee..d8d2c984bcf0 100644 --- a/WordPress/src/test/java/org/wordpress/android/viewmodel/pages/PagesViewModelTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/viewmodel/pages/PagesViewModelTest.kt @@ -66,7 +66,7 @@ class PagesViewModelTest { previewStateHelper = mock(), analyticsTracker = mock(), pageConflictResolver = mock(), - uiDispatcher = Dispatchers.Unconfined, + uiDispatcher = Dispatchers.Unconfined, defaultDispatcher = Dispatchers.Unconfined, eventBusWrapper = mock(), uploadStarter = uploadStarter From f6cbb9fda8525b71973aa1156e99b109c87a690b Mon Sep 17 00:00:00 2001 From: Joel Dean Date: Tue, 4 Feb 2020 15:30:20 -0500 Subject: [PATCH 16/30] refactored naming of click actions. --- .../android/viewmodel/pages/PageListDialogHelper.kt | 8 ++++---- .../wordpress/android/viewmodel/pages/PagesViewModel.kt | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt index 297fd973d5b6..dee1b48739fd 100644 --- a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt +++ b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt @@ -55,7 +55,7 @@ class PageListDialogHelper( fun onPositiveClickedForBasicDialog( instanceTag: String, deletePage: (RemoteId) -> Unit, - editRestoredAutoSavePage: (RemoteId, LoadAutoSaveRevision) -> Unit + editPage: (RemoteId, LoadAutoSaveRevision) -> Unit ) { when (instanceTag) { CONFIRM_DELETE_PAGE_DIALOG_TAG -> pageIdForDeleteDialog?.let { @@ -65,7 +65,7 @@ class PageListDialogHelper( CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG -> pageIdForAutosaveRevisionResolutionDialog?.let { // open the editor with the restored auto save pageIdForAutosaveRevisionResolutionDialog = null - editRestoredAutoSavePage(it, true) + editPage(it, true) analyticsTracker.track(UNPUBLISHED_REVISION_DIALOG_LOAD_UNPUBLISHED_VERSION_CLICKED) } else -> throw IllegalArgumentException("Dialog's positive button click is not handled: $instanceTag") @@ -74,13 +74,13 @@ class PageListDialogHelper( fun onNegativeClickedForBasicDialog( instanceTag: String, - editLocalPage: (RemoteId, LoadAutoSaveRevision) -> Unit + editPage: (RemoteId, LoadAutoSaveRevision) -> Unit ) { when (instanceTag) { CONFIRM_DELETE_PAGE_DIALOG_TAG -> pageIdForDeleteDialog = null CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG -> pageIdForAutosaveRevisionResolutionDialog?.let { // open the editor with the local page (don't use the auto save version) - editLocalPage(it, false) + editPage(it, false) analyticsTracker.track(UNPUBLISHED_REVISION_DIALOG_LOAD_LOCAL_VERSION_CLICKED) } else -> throw IllegalArgumentException("Dialog's negative button click is not handled: $instanceTag") diff --git a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PagesViewModel.kt b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PagesViewModel.kt index 12191dc78119..ee425051f019 100644 --- a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PagesViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PagesViewModel.kt @@ -697,7 +697,7 @@ class PagesViewModel fun onPositiveClickedForBasicDialog(instanceTag: String) { pageListDialogHelper.onPositiveClickedForBasicDialog( instanceTag = instanceTag, - editRestoredAutoSavePage = this::editPage, + editPage = this::editPage, deletePage = this::onDeleteConfirmed ) } @@ -705,7 +705,7 @@ class PagesViewModel fun onNegativeClickedForBasicDialog(instanceTag: String) { pageListDialogHelper.onNegativeClickedForBasicDialog( instanceTag = instanceTag, - editLocalPage = this::editPage + editPage = this::editPage ) } From 28a76e40532a9355a542e96bb9108e984fbb6b92 Mon Sep 17 00:00:00 2001 From: Joel Dean Date: Mon, 10 Feb 2020 12:23:14 -0500 Subject: [PATCH 17/30] added an exception to the else clause of this event; fail fast principle --- .../main/java/org/wordpress/android/ui/pages/PagesActivity.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/pages/PagesActivity.kt b/WordPress/src/main/java/org/wordpress/android/ui/pages/PagesActivity.kt index 58508bfb8373..3888a4a3a163 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/pages/PagesActivity.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/pages/PagesActivity.kt @@ -56,6 +56,8 @@ class PagesActivity : AppCompatActivity(), val fragment = supportFragmentManager.findFragmentById(R.id.fragment_container) if (fragment is PagesFragment) { fragment.onPositiveClickedForBasicDialog(instanceTag) + } else { + throw IllegalStateException("PagesFragment is required to consume this event.") } } @@ -63,6 +65,8 @@ class PagesActivity : AppCompatActivity(), val fragment = supportFragmentManager.findFragmentById(R.id.fragment_container) if (fragment is PagesFragment) { fragment.onNegativeClickedForBasicDialog(instanceTag) + } else { + throw IllegalStateException("PagesFragment is required to consume this event.") } } } From aa7d8dba7171fc901a4003bd628b1e050b735f60 Mon Sep 17 00:00:00 2001 From: Joel Dean Date: Mon, 10 Feb 2020 12:25:24 -0500 Subject: [PATCH 18/30] removed isPage from function parameter and used the PostModel directly. --- .../main/java/org/wordpress/android/ui/posts/PostUtils.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/posts/PostUtils.java b/WordPress/src/main/java/org/wordpress/android/ui/posts/PostUtils.java index 54db98e0659d..413665fc5ff1 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/posts/PostUtils.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/posts/PostUtils.java @@ -460,12 +460,8 @@ public static String getConflictedPostCustomStringForDialog(PostModel post) { } public static UiStringText getCustomStringForAutosaveRevisionDialog(PostModel post) { - return getCustomStringForAutosaveRevisionDialog(post, false); - } - - public static UiStringText getCustomStringForAutosaveRevisionDialog(PostModel post, boolean isPage) { Context context = WordPress.getContext(); - String firstPart = isPage ? context.getString(R.string.dialog_confirm_autosave_body_first_part_for_page) + String firstPart = post.isPage() ? context.getString(R.string.dialog_confirm_autosave_body_first_part_for_page) : context.getString(R.string.dialog_confirm_autosave_body_first_part); String lastModified = From d522cd2bbea43f9d8942f4300d6650374b78a538 Mon Sep 17 00:00:00 2001 From: Joel Dean Date: Mon, 10 Feb 2020 12:37:25 -0500 Subject: [PATCH 19/30] added params to UiString & UiHelpers functionality. --- .../src/main/java/org/wordpress/android/ui/utils/UiHelpers.kt | 2 ++ .../src/main/java/org/wordpress/android/ui/utils/UiString.kt | 1 + 2 files changed, 3 insertions(+) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/utils/UiHelpers.kt b/WordPress/src/main/java/org/wordpress/android/ui/utils/UiHelpers.kt index c254da41e941..25e58c35df4c 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/utils/UiHelpers.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/utils/UiHelpers.kt @@ -16,6 +16,7 @@ import org.wordpress.android.ui.utils.UiString.UiStringText import org.wordpress.android.util.DisplayUtils import javax.inject.Inject import android.graphics.Point +import org.wordpress.android.ui.utils.UiString.UiStringResWithParams class UiHelpers @Inject constructor() { fun getPxOfUiDimen(context: Context, uiDimen: UiDimen): Int = @@ -28,6 +29,7 @@ class UiHelpers @Inject constructor() { when (uiString) { is UiStringRes -> context.getString(uiString.stringRes) is UiStringText -> uiString.text + is UiStringResWithParams -> context.getString(uiString.stringRes, uiString.params) } fun updateVisibility(view: View, visible: Boolean) { diff --git a/WordPress/src/main/java/org/wordpress/android/ui/utils/UiString.kt b/WordPress/src/main/java/org/wordpress/android/ui/utils/UiString.kt index 12c2320b9edf..b0b08a342685 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/utils/UiString.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/utils/UiString.kt @@ -9,4 +9,5 @@ import androidx.annotation.StringRes sealed class UiString { data class UiStringText(val text: String) : UiString() data class UiStringRes(@StringRes val stringRes: Int) : UiString() + data class UiStringResWithParams(@StringRes val stringRes: Int, val params : List) : UiString() } From d5f27b7e42c983b9bbe76780e5c94766766ebcc5 Mon Sep 17 00:00:00 2001 From: Joel Dean Date: Mon, 10 Feb 2020 12:55:02 -0500 Subject: [PATCH 20/30] convert to an array that can be passed as a vararg --- .../src/main/java/org/wordpress/android/ui/utils/UiHelpers.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/utils/UiHelpers.kt b/WordPress/src/main/java/org/wordpress/android/ui/utils/UiHelpers.kt index 25e58c35df4c..bd545fadc5a0 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/utils/UiHelpers.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/utils/UiHelpers.kt @@ -29,7 +29,7 @@ class UiHelpers @Inject constructor() { when (uiString) { is UiStringRes -> context.getString(uiString.stringRes) is UiStringText -> uiString.text - is UiStringResWithParams -> context.getString(uiString.stringRes, uiString.params) + is UiStringResWithParams -> context.getString(uiString.stringRes, *uiString.params.toTypedArray()) } fun updateVisibility(view: View, visible: Boolean) { From 8dd300bb8194419c30156822356a2be3beeeb846 Mon Sep 17 00:00:00 2001 From: Joel Dean Date: Mon, 10 Feb 2020 12:55:47 -0500 Subject: [PATCH 21/30] Removed unneeded parameter since value is being accessed inside --- .../wordpress/android/viewmodel/pages/PageListDialogHelper.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt index dee1b48739fd..f0bed94fa1f6 100644 --- a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt +++ b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt @@ -28,7 +28,7 @@ class PageListDialogHelper( val dialogHolder = DialogHolder( tag = CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG, title = UiStringRes(R.string.dialog_confirm_autosave_title), - message = PostUtils.getCustomStringForAutosaveRevisionDialog(page, true), + message = PostUtils.getCustomStringForAutosaveRevisionDialog(page), positiveButton = UiStringRes(R.string.dialog_confirm_autosave_restore_button), negativeButton = UiStringRes(R.string.dialog_confirm_autosave_dont_restore_button) ) From d276c95795c7e1b84215713ccb292c7d2dcc7caf Mon Sep 17 00:00:00 2001 From: Joel Dean Date: Mon, 10 Feb 2020 12:56:30 -0500 Subject: [PATCH 22/30] utilize the UIiStringResWithParams functionality for the arguments. --- .../android/viewmodel/pages/PageListDialogHelper.kt | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt index f0bed94fa1f6..a2739469f083 100644 --- a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt +++ b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt @@ -1,7 +1,6 @@ package org.wordpress.android.viewmodel.pages import org.wordpress.android.R -import org.wordpress.android.WordPress import org.wordpress.android.analytics.AnalyticsTracker.Stat.UNPUBLISHED_REVISION_DIALOG_LOAD_LOCAL_VERSION_CLICKED import org.wordpress.android.analytics.AnalyticsTracker.Stat.UNPUBLISHED_REVISION_DIALOG_LOAD_UNPUBLISHED_VERSION_CLICKED import org.wordpress.android.analytics.AnalyticsTracker.Stat.UNPUBLISHED_REVISION_DIALOG_SHOWN @@ -9,7 +8,7 @@ import org.wordpress.android.fluxc.model.LocalOrRemoteId.RemoteId import org.wordpress.android.fluxc.model.PostModel import org.wordpress.android.ui.posts.PostUtils import org.wordpress.android.ui.utils.UiString.UiStringRes -import org.wordpress.android.ui.utils.UiString.UiStringText +import org.wordpress.android.ui.utils.UiString.UiStringResWithParams import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper import org.wordpress.android.viewmodel.helpers.DialogHolder @@ -37,14 +36,13 @@ class PageListDialogHelper( } fun showDeletePageConfirmationDialog(pageId: RemoteId, pageTitle: String) { - val dialogMessage = { - WordPress.getContext().getString(R.string.page_delete_dialog_message, pageTitle) - } - val dialogHolder = DialogHolder( tag = CONFIRM_DELETE_PAGE_DIALOG_TAG, title = UiStringRes(R.string.delete_page), - message = UiStringText(dialogMessage()), + message = UiStringResWithParams( + R.string.page_delete_dialog_message, + listOf(pageTitle) + ), positiveButton = UiStringRes(R.string.delete), negativeButton = UiStringRes(R.string.cancel) ) From ca2ccdcd90b38c9f649416c051d7a96b250179b2 Mon Sep 17 00:00:00 2001 From: Joel Dean Date: Mon, 10 Feb 2020 13:03:28 -0500 Subject: [PATCH 23/30] throw NullPointerException for appropriate dialog click events. --- .../android/viewmodel/pages/PageListDialogHelper.kt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt index a2739469f083..4569d2599577 100644 --- a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt +++ b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt @@ -11,6 +11,7 @@ import org.wordpress.android.ui.utils.UiString.UiStringRes import org.wordpress.android.ui.utils.UiString.UiStringResWithParams import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper import org.wordpress.android.viewmodel.helpers.DialogHolder +import java.lang.NullPointerException private const val CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG = "CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG" private const val CONFIRM_DELETE_PAGE_DIALOG_TAG = "CONFIRM_DELETE_PAGE_DIALOG_TAG" @@ -59,12 +60,16 @@ class PageListDialogHelper( CONFIRM_DELETE_PAGE_DIALOG_TAG -> pageIdForDeleteDialog?.let { pageIdForDeleteDialog = null deletePage(it) + } ?: run { + throw NullPointerException("pageIdForDeleteDialog shouldn't be null.") } CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG -> pageIdForAutosaveRevisionResolutionDialog?.let { // open the editor with the restored auto save pageIdForAutosaveRevisionResolutionDialog = null editPage(it, true) analyticsTracker.track(UNPUBLISHED_REVISION_DIALOG_LOAD_UNPUBLISHED_VERSION_CLICKED) + } ?: run { + throw NullPointerException("pageIdForAutosaveRevisionResolutionDialog shouldn't be null.") } else -> throw IllegalArgumentException("Dialog's positive button click is not handled: $instanceTag") } @@ -80,6 +85,8 @@ class PageListDialogHelper( // open the editor with the local page (don't use the auto save version) editPage(it, false) analyticsTracker.track(UNPUBLISHED_REVISION_DIALOG_LOAD_LOCAL_VERSION_CLICKED) + } ?: run { + throw NullPointerException("pageIdForAutosaveRevisionResolutionDialog shouldn't be null.") } else -> throw IllegalArgumentException("Dialog's negative button click is not handled: $instanceTag") } From 155b6dd88d9214558ada88f0cdeb6550ca499cdf Mon Sep 17 00:00:00 2001 From: Joel Dean Date: Mon, 10 Feb 2020 13:07:13 -0500 Subject: [PATCH 24/30] added a TODO comment to link to the issue related to refactoring. --- .../org/wordpress/android/viewmodel/pages/PagesViewModel.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PagesViewModel.kt b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PagesViewModel.kt index ee425051f019..166f1d0c9c62 100644 --- a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PagesViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PagesViewModel.kt @@ -459,6 +459,9 @@ class PagesViewModel } fun onItemTapped(pageItem: Page) { + // TODO We are going to be doing a refactor of the ViewModels related to Pages so that the PostModel is + // available without doing subsequent fetches from the PostStore + // https://github.com/wordpress-mobile/WordPress-Android/issues/11233 val page = postStore.getPostByRemotePostId(pageItem.id, site) // Then check if an autosave revision is available if (pageConflictResolver.hasUnhandledAutoSave(page)) { From 65bf483eba79bed429ca5b9f6f92ef238da30d7e Mon Sep 17 00:00:00 2001 From: Joel Dean Date: Mon, 10 Feb 2020 13:41:02 -0500 Subject: [PATCH 25/30] removed unneeded space. --- .../src/main/java/org/wordpress/android/ui/utils/UiString.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/utils/UiString.kt b/WordPress/src/main/java/org/wordpress/android/ui/utils/UiString.kt index b0b08a342685..5c50d5560f85 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/utils/UiString.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/utils/UiString.kt @@ -9,5 +9,5 @@ import androidx.annotation.StringRes sealed class UiString { data class UiStringText(val text: String) : UiString() data class UiStringRes(@StringRes val stringRes: Int) : UiString() - data class UiStringResWithParams(@StringRes val stringRes: Int, val params : List) : UiString() + data class UiStringResWithParams(@StringRes val stringRes: Int, val params: List) : UiString() } From 9c3dfcb594f2452ca160ca60840c55180dd7e100 Mon Sep 17 00:00:00 2001 From: Joel Dean Date: Mon, 10 Feb 2020 13:42:05 -0500 Subject: [PATCH 26/30] fixed indentation issue. --- .../wordpress/android/viewmodel/pages/PageListDialogHelper.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt index 4569d2599577..169d897e98df 100644 --- a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt +++ b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt @@ -61,7 +61,7 @@ class PageListDialogHelper( pageIdForDeleteDialog = null deletePage(it) } ?: run { - throw NullPointerException("pageIdForDeleteDialog shouldn't be null.") + throw NullPointerException("pageIdForDeleteDialog shouldn't be null.") } CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG -> pageIdForAutosaveRevisionResolutionDialog?.let { // open the editor with the restored auto save From ac2129bb159cd5334f2e1ec9093f9fea3547a8b4 Mon Sep 17 00:00:00 2001 From: Joel Dean Date: Mon, 10 Feb 2020 14:35:57 -0500 Subject: [PATCH 27/30] added post type to events that are being tracked for the dialogs. --- .../android/viewmodel/pages/PageListDialogHelper.kt | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt index 169d897e98df..7f177c982270 100644 --- a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt +++ b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt @@ -15,6 +15,7 @@ import java.lang.NullPointerException private const val CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG = "CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG" private const val CONFIRM_DELETE_PAGE_DIALOG_TAG = "CONFIRM_DELETE_PAGE_DIALOG_TAG" +private const val POST_TYPE ="post_type" class PageListDialogHelper( private val showDialog: (DialogHolder) -> Unit, @@ -24,7 +25,7 @@ class PageListDialogHelper( private var pageIdForDeleteDialog: RemoteId? = null fun showAutoSaveRevisionDialog(page: PostModel) { - analyticsTracker.track(UNPUBLISHED_REVISION_DIALOG_SHOWN) + analyticsTracker.track(UNPUBLISHED_REVISION_DIALOG_SHOWN, mapOf(POST_TYPE to "page")) val dialogHolder = DialogHolder( tag = CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG, title = UiStringRes(R.string.dialog_confirm_autosave_title), @@ -67,7 +68,10 @@ class PageListDialogHelper( // open the editor with the restored auto save pageIdForAutosaveRevisionResolutionDialog = null editPage(it, true) - analyticsTracker.track(UNPUBLISHED_REVISION_DIALOG_LOAD_UNPUBLISHED_VERSION_CLICKED) + analyticsTracker.track( + UNPUBLISHED_REVISION_DIALOG_LOAD_UNPUBLISHED_VERSION_CLICKED, + mapOf(POST_TYPE to "page") + ) } ?: run { throw NullPointerException("pageIdForAutosaveRevisionResolutionDialog shouldn't be null.") } @@ -84,7 +88,10 @@ class PageListDialogHelper( CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG -> pageIdForAutosaveRevisionResolutionDialog?.let { // open the editor with the local page (don't use the auto save version) editPage(it, false) - analyticsTracker.track(UNPUBLISHED_REVISION_DIALOG_LOAD_LOCAL_VERSION_CLICKED) + analyticsTracker.track( + UNPUBLISHED_REVISION_DIALOG_LOAD_LOCAL_VERSION_CLICKED, + mapOf(POST_TYPE to "page") + ) } ?: run { throw NullPointerException("pageIdForAutosaveRevisionResolutionDialog shouldn't be null.") } From 0ef669e411f8f827308678c6bf52015fe34cbaa7 Mon Sep 17 00:00:00 2001 From: Joel Dean Date: Mon, 10 Feb 2020 15:03:20 -0500 Subject: [PATCH 28/30] Fixed spacing issue --- .../wordpress/android/viewmodel/pages/PageListDialogHelper.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt index 7f177c982270..e01725b23e58 100644 --- a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt +++ b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt @@ -15,7 +15,7 @@ import java.lang.NullPointerException private const val CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG = "CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG" private const val CONFIRM_DELETE_PAGE_DIALOG_TAG = "CONFIRM_DELETE_PAGE_DIALOG_TAG" -private const val POST_TYPE ="post_type" +private const val POST_TYPE = "post_type" class PageListDialogHelper( private val showDialog: (DialogHolder) -> Unit, From 4b912f0ec7c6ba143ec57a6456c3e55c55953677 Mon Sep 17 00:00:00 2001 From: Joel Dean Date: Tue, 11 Feb 2020 10:54:00 -0500 Subject: [PATCH 29/30] Utilized UiString instead of any for string resource formatting. --- .../java/org/wordpress/android/ui/utils/UiHelpers.kt | 10 +++++++++- .../java/org/wordpress/android/ui/utils/UiString.kt | 2 +- .../android/viewmodel/pages/PageListDialogHelper.kt | 3 ++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/utils/UiHelpers.kt b/WordPress/src/main/java/org/wordpress/android/ui/utils/UiHelpers.kt index bd545fadc5a0..47bfe7625fc3 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/utils/UiHelpers.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/utils/UiHelpers.kt @@ -29,7 +29,15 @@ class UiHelpers @Inject constructor() { when (uiString) { is UiStringRes -> context.getString(uiString.stringRes) is UiStringText -> uiString.text - is UiStringResWithParams -> context.getString(uiString.stringRes, *uiString.params.toTypedArray()) + is UiStringResWithParams -> context.getString( + uiString.stringRes, + *uiString.params.map { value -> + getTextOfUiString( + context, + value + ) + }.toTypedArray() + ) } fun updateVisibility(view: View, visible: Boolean) { diff --git a/WordPress/src/main/java/org/wordpress/android/ui/utils/UiString.kt b/WordPress/src/main/java/org/wordpress/android/ui/utils/UiString.kt index 5c50d5560f85..b55359658942 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/utils/UiString.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/utils/UiString.kt @@ -9,5 +9,5 @@ import androidx.annotation.StringRes sealed class UiString { data class UiStringText(val text: String) : UiString() data class UiStringRes(@StringRes val stringRes: Int) : UiString() - data class UiStringResWithParams(@StringRes val stringRes: Int, val params: List) : UiString() + data class UiStringResWithParams(@StringRes val stringRes: Int, val params: List) : UiString() } diff --git a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt index e01725b23e58..778f9f560f87 100644 --- a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt +++ b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt @@ -9,6 +9,7 @@ import org.wordpress.android.fluxc.model.PostModel import org.wordpress.android.ui.posts.PostUtils import org.wordpress.android.ui.utils.UiString.UiStringRes import org.wordpress.android.ui.utils.UiString.UiStringResWithParams +import org.wordpress.android.ui.utils.UiString.UiStringText import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper import org.wordpress.android.viewmodel.helpers.DialogHolder import java.lang.NullPointerException @@ -43,7 +44,7 @@ class PageListDialogHelper( title = UiStringRes(R.string.delete_page), message = UiStringResWithParams( R.string.page_delete_dialog_message, - listOf(pageTitle) + listOf(UiStringText(pageTitle)) ), positiveButton = UiStringRes(R.string.delete), negativeButton = UiStringRes(R.string.cancel) From 2a6afe551b4d0ad7c53810f445143686cf7b088b Mon Sep 17 00:00:00 2001 From: Joel Dean Date: Tue, 11 Feb 2020 11:00:27 -0500 Subject: [PATCH 30/30] simplified how exceptions are thrown --- .../android/viewmodel/pages/PageListDialogHelper.kt | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt index 778f9f560f87..d5a05636e5c9 100644 --- a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt +++ b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListDialogHelper.kt @@ -62,9 +62,7 @@ class PageListDialogHelper( CONFIRM_DELETE_PAGE_DIALOG_TAG -> pageIdForDeleteDialog?.let { pageIdForDeleteDialog = null deletePage(it) - } ?: run { - throw NullPointerException("pageIdForDeleteDialog shouldn't be null.") - } + } ?: throw NullPointerException("pageIdForDeleteDialog shouldn't be null.") CONFIRM_ON_AUTOSAVE_REVISION_DIALOG_TAG -> pageIdForAutosaveRevisionResolutionDialog?.let { // open the editor with the restored auto save pageIdForAutosaveRevisionResolutionDialog = null @@ -73,9 +71,9 @@ class PageListDialogHelper( UNPUBLISHED_REVISION_DIALOG_LOAD_UNPUBLISHED_VERSION_CLICKED, mapOf(POST_TYPE to "page") ) - } ?: run { - throw NullPointerException("pageIdForAutosaveRevisionResolutionDialog shouldn't be null.") } + ?: throw NullPointerException("pageIdForAutosaveRevisionResolutionDialog shouldn't be null.") + else -> throw IllegalArgumentException("Dialog's positive button click is not handled: $instanceTag") } } @@ -93,9 +91,9 @@ class PageListDialogHelper( UNPUBLISHED_REVISION_DIALOG_LOAD_LOCAL_VERSION_CLICKED, mapOf(POST_TYPE to "page") ) - } ?: run { - throw NullPointerException("pageIdForAutosaveRevisionResolutionDialog shouldn't be null.") } + ?: throw NullPointerException("pageIdForAutosaveRevisionResolutionDialog shouldn't be null.") + else -> throw IllegalArgumentException("Dialog's negative button click is not handled: $instanceTag") } }