From 4f9e31f53faf0f0aeadd020ce12f7485edea2675 Mon Sep 17 00:00:00 2001 From: vojtasmrcek Date: Thu, 22 Aug 2019 11:01:10 +0200 Subject: [PATCH 1/3] Add Insights management ellipsis to follower totals --- .../insights/usecases/FollowerTotalsUseCase.kt | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/FollowerTotalsUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/FollowerTotalsUseCase.kt index 8ec6ef6d417b..b3ff06f8951e 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/FollowerTotalsUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/FollowerTotalsUseCase.kt @@ -1,5 +1,6 @@ package org.wordpress.android.ui.stats.refresh.lists.sections.insights.usecases +import android.view.View import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.async @@ -21,6 +22,7 @@ import org.wordpress.android.ui.stats.refresh.lists.sections.insights.usecases.F import org.wordpress.android.ui.stats.refresh.lists.sections.insights.usecases.FollowerTotalsUseCase.FollowerType.SOCIAL import org.wordpress.android.ui.stats.refresh.lists.sections.insights.usecases.FollowerTotalsUseCase.FollowerType.WP_COM import org.wordpress.android.ui.stats.refresh.utils.ContentDescriptionHelper +import org.wordpress.android.ui.stats.refresh.utils.ItemPopupMenuHandler import org.wordpress.android.ui.stats.refresh.utils.StatsSiteProvider import org.wordpress.android.ui.stats.refresh.utils.toFormattedString import javax.inject.Inject @@ -33,10 +35,15 @@ class FollowerTotalsUseCase private val followersStore: FollowersStore, private val publicizeStore: PublicizeStore, private val statsSiteProvider: StatsSiteProvider, - private val contentDescriptionHelper: ContentDescriptionHelper + private val contentDescriptionHelper: ContentDescriptionHelper, + private val popupMenuHandler: ItemPopupMenuHandler ) : StatelessUseCase>(FOLLOWER_TOTALS, mainDispatcher) { override fun buildLoadingItem(): List = listOf(Title(R.string.stats_view_follower_totals)) + override fun buildEmptyItem(): List { + return listOf(buildTitle(), Empty()) + } + override suspend fun loadCachedData(): Map? { val wpComFollowers = followersStore.getWpComFollowers(statsSiteProvider.siteModel, LimitMode.Top(0)) val emailFollowers = followersStore.getEmailFollowers(statsSiteProvider.siteModel, LimitMode.Top(0)) @@ -135,7 +142,7 @@ class FollowerTotalsUseCase override fun buildUiModel(domainModel: Map): List { val items = mutableListOf() - items.add(Title(R.string.stats_view_follower_totals)) + items.add(buildTitle()) if (domainModel.isNotEmpty()) { domainModel.entries.forEach { @@ -159,5 +166,11 @@ class FollowerTotalsUseCase return items } + private fun buildTitle() = Title(R.string.stats_view_follower_totals, menuAction = this::onMenuClick) + + private fun onMenuClick(view: View) { + popupMenuHandler.onMenuClick(view, type) + } + enum class FollowerType { WP_COM, EMAIL, SOCIAL } } From 261afc92fea3221f6f16bb6f97136ab9d03dba59 Mon Sep 17 00:00:00 2001 From: vojtasmrcek Date: Thu, 22 Aug 2019 11:01:25 +0200 Subject: [PATCH 2/3] Fix title of the Follower totals card --- WordPress/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/src/main/res/values/strings.xml b/WordPress/src/main/res/values/strings.xml index 02d6b46bd592..c19adef5ea8f 100644 --- a/WordPress/src/main/res/values/strings.xml +++ b/WordPress/src/main/res/values/strings.xml @@ -929,7 +929,7 @@ Search Terms Publicize Followers - Followers Totals + Follower Totals seconds ago From ae5eab1e17449c2db9164fa368910bf65210439f Mon Sep 17 00:00:00 2001 From: vojtasmrcek Date: Thu, 22 Aug 2019 11:33:09 +0200 Subject: [PATCH 3/3] Fix test --- .../insights/usecases/FollowerTotalsUseCaseTest.kt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/FollowerTotalsUseCaseTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/FollowerTotalsUseCaseTest.kt index 5dc0d8bd6695..76a7a904d4ee 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/FollowerTotalsUseCaseTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/FollowerTotalsUseCaseTest.kt @@ -27,6 +27,7 @@ import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Title import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Type.LIST_ITEM_WITH_ICON import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Type.TITLE import org.wordpress.android.ui.stats.refresh.utils.ContentDescriptionHelper +import org.wordpress.android.ui.stats.refresh.utils.ItemPopupMenuHandler import org.wordpress.android.ui.stats.refresh.utils.StatsSiteProvider class FollowerTotalsUseCaseTest : BaseUnitTest() { @@ -34,6 +35,7 @@ class FollowerTotalsUseCaseTest : BaseUnitTest() { @Mock lateinit var publicizeStore: PublicizeStore @Mock lateinit var statsSiteProvider: StatsSiteProvider @Mock lateinit var contentDescriptionHelper: ContentDescriptionHelper + @Mock lateinit var popupMenuHandler: ItemPopupMenuHandler @Mock lateinit var site: SiteModel private lateinit var useCase: FollowerTotalsUseCase @@ -53,7 +55,8 @@ class FollowerTotalsUseCaseTest : BaseUnitTest() { followersStore, publicizeStore, statsSiteProvider, - contentDescriptionHelper + contentDescriptionHelper, + popupMenuHandler ) whenever(statsSiteProvider.siteModel).thenReturn(site) @@ -67,7 +70,7 @@ class FollowerTotalsUseCaseTest : BaseUnitTest() { } @Test - fun `maps follower totals to U`() = test { + fun `maps follower totals to UI model`() = test { val forced = false val refresh = true @@ -107,6 +110,7 @@ class FollowerTotalsUseCaseTest : BaseUnitTest() { private fun assertTitle(item: BlockListItem) { assertThat(item.type).isEqualTo(TITLE) assertThat((item as Title).textResource).isEqualTo(R.string.stats_view_follower_totals) + assertThat(item.menuAction).isNotNull } private suspend fun loadFollowerTotalsData(refresh: Boolean, forced: Boolean): UseCaseModel {