From 0de6ac27701d30162735a57dcd21ddaea723b043 Mon Sep 17 00:00:00 2001 From: Nick Bradbury Date: Wed, 10 Dec 2025 12:37:25 -0500 Subject: [PATCH 1/8] Added temp code to remove virtual homepage item --- .../org/wordpress/android/viewmodel/pages/PageListViewModel.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListViewModel.kt b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListViewModel.kt index 7dc1f6a3e97f..fcff5fc48d31 100644 --- a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListViewModel.kt @@ -353,7 +353,8 @@ class PageListViewModel @Inject constructor( } .let { if (showVirtualHomepage) { - listOf(VirtualHomepage) + it + // TODO listOf(VirtualHomepage) + it + it } else { it } From bef6b3564c85382aaa8bb652b57b3b3f3596cd7e Mon Sep 17 00:00:00 2001 From: Nick Bradbury Date: Wed, 10 Dec 2025 12:41:23 -0500 Subject: [PATCH 2/8] Removed empty view image and deleted img_illustration_pages_104dp --- WordPress/src/main/res/layout/page_empty_item.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/WordPress/src/main/res/layout/page_empty_item.xml b/WordPress/src/main/res/layout/page_empty_item.xml index 0564a27ffc8d..29b691956e0c 100644 --- a/WordPress/src/main/res/layout/page_empty_item.xml +++ b/WordPress/src/main/res/layout/page_empty_item.xml @@ -9,7 +9,6 @@ android:layout_width="match_parent" android:layout_height="match_parent" app:aevButton="@string/pages_empty_list_button" - app:aevImage="@drawable/img_illustration_pages_104dp" app:aevTitle="@string/empty_list_default" /> From bf5b68d3ee72be7564e53c61b0938f71072c5a40 Mon Sep 17 00:00:00 2001 From: Nick Bradbury Date: Wed, 10 Dec 2025 12:55:37 -0500 Subject: [PATCH 3/8] Removed empty view image, deleted img_illustration_pages_104dp, and added subtitle resource --- .../wordpress/android/ui/pages/PageItem.kt | 3 +- .../android/ui/pages/PageItemViewHolder.kt | 10 ++- .../viewmodel/pages/PageListViewModel.kt | 5 +- .../pages/PageParentSearchViewModel.kt | 8 +- .../viewmodel/pages/SearchListViewModel.kt | 8 +- .../drawable/img_illustration_pages_104dp.xml | 75 ------------------- WordPress/src/main/res/values/strings.xml | 3 +- 7 files changed, 29 insertions(+), 83 deletions(-) delete mode 100644 WordPress/src/main/res/drawable/img_illustration_pages_104dp.xml diff --git a/WordPress/src/main/java/org/wordpress/android/ui/pages/PageItem.kt b/WordPress/src/main/java/org/wordpress/android/ui/pages/PageItem.kt index 754ca39319b1..db7c57a62485 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/pages/PageItem.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/pages/PageItem.kt @@ -183,7 +183,8 @@ sealed class PageItem(open val type: Type) { data class Divider(val title: String = "") : PageItem(DIVIDER) data class Empty( - @StringRes val textResource: Int = R.string.empty_list_default, + @StringRes val titleResource: Int = R.string.empty_list_default, + @StringRes val subtitleResource: Int? = null, val isSearching: Boolean = false, val isButtonVisible: Boolean = true, val isImageVisible: Boolean = true diff --git a/WordPress/src/main/java/org/wordpress/android/ui/pages/PageItemViewHolder.kt b/WordPress/src/main/java/org/wordpress/android/ui/pages/PageItemViewHolder.kt index 1722ab42aa21..ef9697d9f4c7 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/pages/PageItemViewHolder.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/pages/PageItemViewHolder.kt @@ -342,7 +342,14 @@ sealed class PageItemViewHolder(internal val parent: ViewGroup, @LayoutRes layou @Suppress("DEPRECATION") override fun onBind(pageItem: PageItem) { (pageItem as Empty).apply { - emptyView.title.text = emptyView.resources.getString(pageItem.textResource) + emptyView.title.text = emptyView.resources.getString(pageItem.titleResource) + + pageItem.subtitleResource?.let { subtitleResource -> + emptyView.subtitle.text = emptyView.resources.getString(subtitleResource) + emptyView.subtitle.visibility = View.VISIBLE + } ?: { + emptyView.subtitle.visibility = View.GONE + } if (pageItem.isButtonVisible) { emptyView.button.setOnClickListener { @@ -353,6 +360,7 @@ sealed class PageItemViewHolder(internal val parent: ViewGroup, @LayoutRes layou emptyView.button.visibility = View.GONE } + // TODO remove image emptyView.image.visibility = if (pageItem.isImageVisible) View.VISIBLE else View.GONE emptyView.updateLayoutForSearch(pageItem.isSearching, 0) diff --git a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListViewModel.kt b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListViewModel.kt index fcff5fc48d31..058008606890 100644 --- a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListViewModel.kt @@ -269,7 +269,10 @@ class PageListViewModel @Inject constructor( ) } else { when (listType) { - PUBLISHED -> _pages.postValue(listOf(Empty(R.string.pages_empty_published))) + PUBLISHED -> _pages.postValue(listOf( + Empty(R.string.pages_empty_published), + Empty(R.string.pages_empty_published_subtitle)) + ) SCHEDULED -> _pages.postValue(listOf(Empty(R.string.pages_empty_scheduled))) DRAFTS -> _pages.postValue(listOf(Empty(R.string.pages_empty_drafts))) TRASHED -> _pages.postValue(listOf(Empty(R.string.pages_empty_trashed))) diff --git a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageParentSearchViewModel.kt b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageParentSearchViewModel.kt index fc68326edf4e..3830ede2710b 100644 --- a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageParentSearchViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageParentSearchViewModel.kt @@ -41,7 +41,9 @@ class PageParentSearchViewModel if (pageItems != null) { loadFoundPages(pageItems) } else { - _searchResult.value = listOf(Empty(R.string.pages_search_suggestion, true)) + _searchResult.value = listOf( + Empty(titleResource = R.string.pages_search_suggestion, isSearching = true) + ) } } @@ -53,7 +55,9 @@ class PageParentSearchViewModel if (pageItems.isNotEmpty()) { _searchResult.value = pageItems } else { - _searchResult.value = listOf(Empty(R.string.pages_empty_search_result, true)) + _searchResult.value = listOf( + Empty(titleResource = R.string.pages_empty_search_result, isSearching = true) + ) } } } diff --git a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/SearchListViewModel.kt b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/SearchListViewModel.kt index 9ef977756169..7c41df2ec997 100644 --- a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/SearchListViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/SearchListViewModel.kt @@ -64,7 +64,9 @@ class SearchListViewModel pagesViewModel.checkIfNewPageButtonShouldBeVisible() } else { - _searchResult.value = listOf(Empty(R.string.pages_search_suggestion, true)) + _searchResult.value = listOf( + Empty(titleResource = R.string.pages_search_suggestion, isSearching = true) + ) } } @@ -89,7 +91,9 @@ class SearchListViewModel } _searchResult.value = pageItems } else { - _searchResult.value = listOf(Empty(R.string.pages_empty_search_result, true)) + _searchResult.value = listOf( + Empty(titleResource = R.string.pages_empty_search_result, isSearching = true) + ) } } diff --git a/WordPress/src/main/res/drawable/img_illustration_pages_104dp.xml b/WordPress/src/main/res/drawable/img_illustration_pages_104dp.xml deleted file mode 100644 index 31df305ff9db..000000000000 --- a/WordPress/src/main/res/drawable/img_illustration_pages_104dp.xml +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/WordPress/src/main/res/values/strings.xml b/WordPress/src/main/res/values/strings.xml index 7f873cbe5f1d..0a1987dd1c23 100644 --- a/WordPress/src/main/res/values/strings.xml +++ b/WordPress/src/main/res/values/strings.xml @@ -3597,7 +3597,8 @@ Delete Permanently No pages matching your search Search pages - You haven\'t published any pages yet + You haven\'t published any pages - yet! + Why not create one? You don\'t have any draft pages You don\'t have any scheduled pages You don\'t have any trashed pages From 48dc90786ee0cd6f6ed6a0e98f2dc4eff4c98451 Mon Sep 17 00:00:00 2001 From: Nick Bradbury Date: Wed, 10 Dec 2025 13:12:58 -0500 Subject: [PATCH 4/8] Ensure subtitle appears for empty published view --- .../android/viewmodel/pages/PageListViewModel.kt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListViewModel.kt b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListViewModel.kt index 058008606890..f04fd668517d 100644 --- a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListViewModel.kt @@ -270,9 +270,11 @@ class PageListViewModel @Inject constructor( } else { when (listType) { PUBLISHED -> _pages.postValue(listOf( - Empty(R.string.pages_empty_published), - Empty(R.string.pages_empty_published_subtitle)) - ) + Empty( + titleResource = R.string.pages_empty_published, + subtitleResource = R.string.pages_empty_published_subtitle + ) + )) SCHEDULED -> _pages.postValue(listOf(Empty(R.string.pages_empty_scheduled))) DRAFTS -> _pages.postValue(listOf(Empty(R.string.pages_empty_drafts))) TRASHED -> _pages.postValue(listOf(Empty(R.string.pages_empty_trashed))) From 0741b3eb6a64f3c97213b57af41f96d15c02346a Mon Sep 17 00:00:00 2001 From: Nick Bradbury Date: Wed, 10 Dec 2025 13:17:23 -0500 Subject: [PATCH 5/8] Removed image resource from model --- .../main/java/org/wordpress/android/ui/pages/PageItem.kt | 3 +-- .../org/wordpress/android/ui/pages/PageItemViewHolder.kt | 3 --- .../wordpress/android/viewmodel/pages/PageListViewModel.kt | 6 ++---- 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/pages/PageItem.kt b/WordPress/src/main/java/org/wordpress/android/ui/pages/PageItem.kt index db7c57a62485..052577a1e205 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/pages/PageItem.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/pages/PageItem.kt @@ -186,8 +186,7 @@ sealed class PageItem(open val type: Type) { @StringRes val titleResource: Int = R.string.empty_list_default, @StringRes val subtitleResource: Int? = null, val isSearching: Boolean = false, - val isButtonVisible: Boolean = true, - val isImageVisible: Boolean = true + val isButtonVisible: Boolean = true ) : PageItem(EMPTY) object VirtualHomepage : PageItem(VIRTUAL_HOMEPAGE) { diff --git a/WordPress/src/main/java/org/wordpress/android/ui/pages/PageItemViewHolder.kt b/WordPress/src/main/java/org/wordpress/android/ui/pages/PageItemViewHolder.kt index ef9697d9f4c7..c2b8f53e054e 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/pages/PageItemViewHolder.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/pages/PageItemViewHolder.kt @@ -360,9 +360,6 @@ sealed class PageItemViewHolder(internal val parent: ViewGroup, @LayoutRes layou emptyView.button.visibility = View.GONE } - // TODO remove image - emptyView.image.visibility = if (pageItem.isImageVisible) View.VISIBLE else View.GONE - emptyView.updateLayoutForSearch(pageItem.isSearching, 0) } } diff --git a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListViewModel.kt b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListViewModel.kt index f04fd668517d..97b9650d4f6b 100644 --- a/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/viewmodel/pages/PageListViewModel.kt @@ -261,9 +261,8 @@ class PageListViewModel @Inject constructor( _pages.postValue( listOf( Empty( - R.string.pages_fetching, + titleResource = R.string.pages_fetching, isButtonVisible = false, - isImageVisible = false ) ) ) @@ -358,8 +357,7 @@ class PageListViewModel @Inject constructor( } .let { if (showVirtualHomepage) { - // TODO listOf(VirtualHomepage) + it - it + listOf(VirtualHomepage) + it } else { it } From 755d3cac402e6b30cc2b26f292ae68cb114acfad Mon Sep 17 00:00:00 2001 From: Nick Bradbury Date: Wed, 10 Dec 2025 13:29:24 -0500 Subject: [PATCH 6/8] added missing `run` --- .../java/org/wordpress/android/ui/pages/PageItemViewHolder.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/pages/PageItemViewHolder.kt b/WordPress/src/main/java/org/wordpress/android/ui/pages/PageItemViewHolder.kt index c2b8f53e054e..d645df22ede0 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/pages/PageItemViewHolder.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/pages/PageItemViewHolder.kt @@ -347,7 +347,7 @@ sealed class PageItemViewHolder(internal val parent: ViewGroup, @LayoutRes layou pageItem.subtitleResource?.let { subtitleResource -> emptyView.subtitle.text = emptyView.resources.getString(subtitleResource) emptyView.subtitle.visibility = View.VISIBLE - } ?: { + } ?: run { emptyView.subtitle.visibility = View.GONE } From a72005752ff13a2646e877aae349a45bcb45a02a Mon Sep 17 00:00:00 2001 From: Nick Bradbury Date: Wed, 10 Dec 2025 14:20:20 -0500 Subject: [PATCH 7/8] Fixed tests --- .../viewmodel/pages/PageParentSearchViewModelTest.kt | 6 +++--- .../android/viewmodel/pages/SearchListViewModelTest.kt | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/WordPress/src/test/java/org/wordpress/android/viewmodel/pages/PageParentSearchViewModelTest.kt b/WordPress/src/test/java/org/wordpress/android/viewmodel/pages/PageParentSearchViewModelTest.kt index ad7e9537b9b5..41778d941eb8 100644 --- a/WordPress/src/test/java/org/wordpress/android/viewmodel/pages/PageParentSearchViewModelTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/viewmodel/pages/PageParentSearchViewModelTest.kt @@ -38,14 +38,14 @@ class PageParentSearchViewModelTest : BaseUnitTest() { fun `show empty item on start`() { searchPages.value = null - assertThat(viewModel.searchResult.value).containsOnly(Empty(R.string.pages_search_suggestion, true)) + assertThat(viewModel.searchResult.value).containsOnly(Empty(titleResource = R.string.pages_search_suggestion, isSearching = true)) } @Test fun `show no matches on empty search results`() { - searchPages.value = mutableListOf(Empty(R.string.pages_empty_search_result, false)) + searchPages.value = mutableListOf(Empty(titleResource = R.string.pages_empty_search_result, isSearching = false)) - assertThat(viewModel.searchResult.value).containsOnly(Empty(R.string.pages_empty_search_result, false)) + assertThat(viewModel.searchResult.value).containsOnly(Empty(titleResource = R.string.pages_empty_search_result, isSearching = false)) } @Test diff --git a/WordPress/src/test/java/org/wordpress/android/viewmodel/pages/SearchListViewModelTest.kt b/WordPress/src/test/java/org/wordpress/android/viewmodel/pages/SearchListViewModelTest.kt index 2955cfe2fe9f..7408c7e2e4b5 100644 --- a/WordPress/src/test/java/org/wordpress/android/viewmodel/pages/SearchListViewModelTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/viewmodel/pages/SearchListViewModelTest.kt @@ -98,7 +98,7 @@ class SearchListViewModelTest : BaseUnitTest() { fun `show empty item on start`() { searchPages.value = null - assertThat(viewModel.searchResult.value).containsOnly(Empty(R.string.pages_search_suggestion, true)) + assertThat(viewModel.searchResult.value).containsOnly(Empty(titleResource = R.string.pages_search_suggestion, isSearching = true)) } @Test From c54c3ba34b0e8c28a67eb37c0cb787bf9d6ebcc0 Mon Sep 17 00:00:00 2001 From: Nick Bradbury Date: Wed, 10 Dec 2025 14:32:35 -0500 Subject: [PATCH 8/8] Fixed detekt errors --- .../viewmodel/pages/PageParentSearchViewModelTest.kt | 12 +++++++++--- .../viewmodel/pages/SearchListViewModelTest.kt | 4 +++- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/WordPress/src/test/java/org/wordpress/android/viewmodel/pages/PageParentSearchViewModelTest.kt b/WordPress/src/test/java/org/wordpress/android/viewmodel/pages/PageParentSearchViewModelTest.kt index 41778d941eb8..c42a553b9fc1 100644 --- a/WordPress/src/test/java/org/wordpress/android/viewmodel/pages/PageParentSearchViewModelTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/viewmodel/pages/PageParentSearchViewModelTest.kt @@ -38,14 +38,20 @@ class PageParentSearchViewModelTest : BaseUnitTest() { fun `show empty item on start`() { searchPages.value = null - assertThat(viewModel.searchResult.value).containsOnly(Empty(titleResource = R.string.pages_search_suggestion, isSearching = true)) + assertThat(viewModel.searchResult.value).containsOnly( + Empty(titleResource = R.string.pages_search_suggestion, isSearching = true) + ) } @Test fun `show no matches on empty search results`() { - searchPages.value = mutableListOf(Empty(titleResource = R.string.pages_empty_search_result, isSearching = false)) + searchPages.value = mutableListOf( + Empty(titleResource = R.string.pages_empty_search_result, isSearching = false) + ) - assertThat(viewModel.searchResult.value).containsOnly(Empty(titleResource = R.string.pages_empty_search_result, isSearching = false)) + assertThat(viewModel.searchResult.value).containsOnly( + Empty(titleResource = R.string.pages_empty_search_result, isSearching = false) + ) } @Test diff --git a/WordPress/src/test/java/org/wordpress/android/viewmodel/pages/SearchListViewModelTest.kt b/WordPress/src/test/java/org/wordpress/android/viewmodel/pages/SearchListViewModelTest.kt index 7408c7e2e4b5..c4919736bf1c 100644 --- a/WordPress/src/test/java/org/wordpress/android/viewmodel/pages/SearchListViewModelTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/viewmodel/pages/SearchListViewModelTest.kt @@ -98,7 +98,9 @@ class SearchListViewModelTest : BaseUnitTest() { fun `show empty item on start`() { searchPages.value = null - assertThat(viewModel.searchResult.value).containsOnly(Empty(titleResource = R.string.pages_search_suggestion, isSearching = true)) + assertThat(viewModel.searchResult.value).containsOnly( + Empty(titleResource = R.string.pages_search_suggestion, isSearching = true) + ) } @Test