From eee4ccb28143185d1046a1b167e9d2d35322e00a Mon Sep 17 00:00:00 2001 From: vojtasmrcek Date: Tue, 15 Jan 2019 09:46:09 +0100 Subject: [PATCH 01/17] Update FluxC --- .../org/wordpress/android/ui/stats/refresh/StatsModule.kt | 6 +++--- .../android/ui/stats/refresh/lists/BaseListUseCase.kt | 6 +++--- .../ui/stats/refresh/lists/sections/BaseStatsUseCase.kt | 2 +- .../lists/sections/insights/usecases/AllTimeStatsUseCase.kt | 4 ++-- build.gradle | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsModule.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsModule.kt index ed7d592d6322..6a27bbdd0666 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsModule.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsModule.kt @@ -7,7 +7,7 @@ import org.wordpress.android.fluxc.network.utils.StatsGranularity.DAYS import org.wordpress.android.fluxc.network.utils.StatsGranularity.MONTHS import org.wordpress.android.fluxc.network.utils.StatsGranularity.WEEKS import org.wordpress.android.fluxc.network.utils.StatsGranularity.YEARS -import org.wordpress.android.fluxc.store.StatsStore +import org.wordpress.android.fluxc.store.stats.StatsStore import org.wordpress.android.modules.BG_THREAD import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.refresh.lists.BaseListUseCase @@ -120,8 +120,8 @@ class StatsModule { @Named(UI_THREAD) mainDispatcher: CoroutineDispatcher, @Named(INSIGHTS_USE_CASES) useCases: List<@JvmSuppressWildcards BaseStatsUseCase<*, *>> ): BaseListUseCase { - return BaseListUseCase(bgDispatcher, mainDispatcher, useCases) { - statsStore.getInsights() + return BaseListUseCase(bgDispatcher, mainDispatcher, useCases) { site -> + statsStore.getInsights(site) } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/BaseListUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/BaseListUseCase.kt index 8174a0a9572e..ad063865703f 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/BaseListUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/BaseListUseCase.kt @@ -6,7 +6,7 @@ import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import org.wordpress.android.fluxc.model.SiteModel -import org.wordpress.android.fluxc.store.StatsStore.StatsTypes +import org.wordpress.android.fluxc.store.stats.StatsStore.StatsTypes import org.wordpress.android.ui.stats.refresh.lists.sections.BaseStatsUseCase import org.wordpress.android.util.AppLog import org.wordpress.android.util.AppLog.T @@ -19,7 +19,7 @@ constructor( private val bgDispatcher: CoroutineDispatcher, private val mainDispatcher: CoroutineDispatcher, private val useCases: List>, - private val getStatsTypes: suspend (() -> List) + private val getStatsTypes: suspend ((site: SiteModel) -> List) ) { private val blockListData = combineMap( useCases.associateBy { it.type }.mapValues { entry -> entry.value.liveData } @@ -52,7 +52,7 @@ constructor( throw RuntimeException("Duplicate stats type in a use case") } useCases.forEach { block -> launch { block.fetch(site, refresh, forced) } } - val items = getStatsTypes() + val items = getStatsTypes(site) withContext(mainDispatcher) { statsTypes.value = items } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/BaseStatsUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/BaseStatsUseCase.kt index 0f0ff0f0d03c..6333c9b07c67 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/BaseStatsUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/BaseStatsUseCase.kt @@ -5,7 +5,7 @@ import android.arch.lifecycle.MutableLiveData import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.withContext import org.wordpress.android.fluxc.model.SiteModel -import org.wordpress.android.fluxc.store.StatsStore.StatsTypes +import org.wordpress.android.fluxc.store.stats.StatsStore.StatsTypes import org.wordpress.android.ui.stats.refresh.lists.BlockList import org.wordpress.android.ui.stats.refresh.lists.Error import org.wordpress.android.ui.stats.refresh.lists.Loading diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/AllTimeStatsUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/AllTimeStatsUseCase.kt index 089e6bdcb8ec..53a65cb7223f 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/AllTimeStatsUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/AllTimeStatsUseCase.kt @@ -4,8 +4,8 @@ import kotlinx.coroutines.CoroutineDispatcher import org.wordpress.android.R import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.stats.InsightsAllTimeModel -import org.wordpress.android.fluxc.store.InsightsStore -import org.wordpress.android.fluxc.store.StatsStore.InsightsTypes.ALL_TIME_STATS +import org.wordpress.android.fluxc.store.stats.InsightsStore +import org.wordpress.android.fluxc.store.stats.StatsStore.InsightsTypes.ALL_TIME_STATS import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.refresh.lists.sections.BaseStatsUseCase.StatelessUseCase import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem diff --git a/build.gradle b/build.gradle index c142c1485e7f..6f2a43aea749 100644 --- a/build.gradle +++ b/build.gradle @@ -92,5 +92,5 @@ subprojects { } ext { - fluxCVersion = '0b78142d158b06f3017807d0395d39bbc65ed88e' + fluxCVersion = '9d330335b2f8b2eb909aa967450b523e29baa2b6' } From cf9f0878284d236abd3f8e9b7f6b522f33bff1fd Mon Sep 17 00:00:00 2001 From: vojtasmrcek Date: Thu, 17 Jan 2019 09:30:52 +0100 Subject: [PATCH 02/17] Add overflow menu to title --- .../ic_ellipsis_vertical_grey_darken_48dp.xml | 15 +++++++++++++++ .../main/res/layout/stats_block_title_item.xml | 15 +++++++++++++-- WordPress/src/main/res/values/strings.xml | 1 + 3 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 WordPress/src/main/res/drawable/ic_ellipsis_vertical_grey_darken_48dp.xml diff --git a/WordPress/src/main/res/drawable/ic_ellipsis_vertical_grey_darken_48dp.xml b/WordPress/src/main/res/drawable/ic_ellipsis_vertical_grey_darken_48dp.xml new file mode 100644 index 000000000000..047b3c616cc3 --- /dev/null +++ b/WordPress/src/main/res/drawable/ic_ellipsis_vertical_grey_darken_48dp.xml @@ -0,0 +1,15 @@ + + + + + + + + diff --git a/WordPress/src/main/res/layout/stats_block_title_item.xml b/WordPress/src/main/res/layout/stats_block_title_item.xml index 072e9b7a9aec..54bc3041a6bd 100644 --- a/WordPress/src/main/res/layout/stats_block_title_item.xml +++ b/WordPress/src/main/res/layout/stats_block_title_item.xml @@ -1,15 +1,26 @@ + + + + diff --git a/WordPress/src/main/res/values/strings.xml b/WordPress/src/main/res/values/strings.xml index b1e56319fb0e..80d044bc3430 100644 --- a/WordPress/src/main/res/values/strings.xml +++ b/WordPress/src/main/res/values/strings.xml @@ -812,6 +812,7 @@ Service Followers %1$s - %2$s + Stats item settings We cannot open the statistics at the moment. Please try again later From 5ae3d8da130b41e47273c65a5da7fb5293051eb5 Mon Sep 17 00:00:00 2001 From: vojtasmrcek Date: Thu, 17 Jan 2019 09:39:20 +0100 Subject: [PATCH 03/17] Add overflow menu resource and icons --- .../res/drawable/ic_arrow_down_grey_dark_24dp.xml | 13 +++++++++++++ .../res/drawable/ic_arrow_up_grey_dark_24dp.xml | 13 +++++++++++++ .../main/res/drawable/ic_trash_grey_dark_24dp.xml | 15 +++++++++++++++ WordPress/src/main/res/menu/menu_stats_item.xml | 15 +++++++++++++++ WordPress/src/main/res/values/strings.xml | 3 +++ 5 files changed, 59 insertions(+) create mode 100644 WordPress/src/main/res/drawable/ic_arrow_down_grey_dark_24dp.xml create mode 100644 WordPress/src/main/res/drawable/ic_arrow_up_grey_dark_24dp.xml create mode 100644 WordPress/src/main/res/drawable/ic_trash_grey_dark_24dp.xml create mode 100644 WordPress/src/main/res/menu/menu_stats_item.xml diff --git a/WordPress/src/main/res/drawable/ic_arrow_down_grey_dark_24dp.xml b/WordPress/src/main/res/drawable/ic_arrow_down_grey_dark_24dp.xml new file mode 100644 index 000000000000..11365e9c23b0 --- /dev/null +++ b/WordPress/src/main/res/drawable/ic_arrow_down_grey_dark_24dp.xml @@ -0,0 +1,13 @@ + + + + + + diff --git a/WordPress/src/main/res/drawable/ic_arrow_up_grey_dark_24dp.xml b/WordPress/src/main/res/drawable/ic_arrow_up_grey_dark_24dp.xml new file mode 100644 index 000000000000..c1cdf781c6a7 --- /dev/null +++ b/WordPress/src/main/res/drawable/ic_arrow_up_grey_dark_24dp.xml @@ -0,0 +1,13 @@ + + + + + + diff --git a/WordPress/src/main/res/drawable/ic_trash_grey_dark_24dp.xml b/WordPress/src/main/res/drawable/ic_trash_grey_dark_24dp.xml new file mode 100644 index 000000000000..a7d5e8e7e921 --- /dev/null +++ b/WordPress/src/main/res/drawable/ic_trash_grey_dark_24dp.xml @@ -0,0 +1,15 @@ + + + + + + diff --git a/WordPress/src/main/res/menu/menu_stats_item.xml b/WordPress/src/main/res/menu/menu_stats_item.xml new file mode 100644 index 000000000000..4c707d8be788 --- /dev/null +++ b/WordPress/src/main/res/menu/menu_stats_item.xml @@ -0,0 +1,15 @@ + + + + + + diff --git a/WordPress/src/main/res/values/strings.xml b/WordPress/src/main/res/values/strings.xml index 80d044bc3430..6ad70d63a3cc 100644 --- a/WordPress/src/main/res/values/strings.xml +++ b/WordPress/src/main/res/values/strings.xml @@ -814,6 +814,9 @@ %1$s - %2$s Stats item settings We cannot open the statistics at the moment. Please try again later + Move up + Move down + Remove from insights Jetpack From 12b2fbb0246c3a8f44f4a170b3291ccbcc2fbe89 Mon Sep 17 00:00:00 2001 From: vojtasmrcek Date: Thu, 17 Jan 2019 11:14:05 +0100 Subject: [PATCH 04/17] Update imports to fix build --- .../ui/stats/refresh/lists/BaseListUseCase.kt | 9 +++++ .../ui/stats/refresh/lists/StatsBlock.kt | 2 +- .../stats/refresh/lists/StatsListFragment.kt | 34 +++++++++++++++++++ .../stats/refresh/lists/StatsListViewModel.kt | 16 +++++++++ .../lists/sections/BaseStatsUseCase.kt | 11 ++++++ .../refresh/lists/sections/BlockListItem.kt | 7 +++- .../lists/sections/BlockListItemViewHolder.kt | 9 +++++ .../granular/GranularStatefulUseCase.kt | 2 +- .../granular/GranularStatelessUseCase.kt | 2 +- .../granular/usecases/AuthorsUseCase.kt | 2 +- .../granular/usecases/ClicksUseCase.kt | 2 +- .../granular/usecases/CountryViewsUseCase.kt | 2 +- .../sections/granular/usecases/DateUseCase.kt | 2 +- .../granular/usecases/OverviewUseCase.kt | 2 +- .../granular/usecases/PostsAndPagesUseCase.kt | 2 +- .../granular/usecases/ReferrersUseCase.kt | 2 +- .../granular/usecases/SearchTermsUseCase.kt | 2 +- .../granular/usecases/VideoPlaysUseCase.kt | 2 +- .../insights/usecases/AllTimeStatsUseCase.kt | 2 +- .../insights/usecases/CommentsUseCase.kt | 6 ++-- .../insights/usecases/FollowersUseCase.kt | 6 ++-- .../usecases/LatestPostSummaryUseCase.kt | 6 ++-- .../usecases/MostPopularInsightsUseCase.kt | 6 ++-- .../insights/usecases/PublicizeUseCase.kt | 6 ++-- .../usecases/TagsAndCategoriesUseCase.kt | 6 ++-- .../insights/usecases/TodayStatsUseCase.kt | 6 ++-- .../lists/viewholders/BaseStatsViewHolder.kt | 6 ++-- .../lists/viewholders/BlockListViewHolder.kt | 2 +- .../res/layout/stats_block_title_item.xml | 1 + .../lists/sections/BaseStatsUseCaseTest.kt | 2 +- .../granular/usecases/AuthorsUseCaseTest.kt | 6 ++-- .../granular/usecases/ClicksUseCaseTest.kt | 6 ++-- .../usecases/CountryViewsUseCaseTest.kt | 6 ++-- .../granular/usecases/OverviewUseCaseTest.kt | 6 ++-- .../usecases/PostsAndPagesUseCaseTest.kt | 6 ++-- .../granular/usecases/ReferrersUseCaseTest.kt | 6 ++-- .../usecases/SearchTermsUseCaseTest.kt | 6 ++-- .../usecases/VideoPlaysUseCaseTest.kt | 6 ++-- .../usecases/AllTimeStatsUseCaseTest.kt | 6 ++-- .../insights/usecases/CommentsUseCaseTest.kt | 6 ++-- .../insights/usecases/FollowersUseCaseTest.kt | 6 ++-- .../usecases/LatestPostSummaryUseCaseTest.kt | 6 ++-- .../MostPopularInsightsUseCaseTest.kt | 6 ++-- .../insights/usecases/PublicizeUseCaseTest.kt | 6 ++-- .../usecases/TagsAndCategoriesUseCaseTest.kt | 6 ++-- .../usecases/TodayStatsUseCaseTest.kt | 6 ++-- 46 files changed, 173 insertions(+), 88 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/BaseListUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/BaseListUseCase.kt index ad063865703f..37422c189167 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/BaseListUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/BaseListUseCase.kt @@ -12,6 +12,7 @@ import org.wordpress.android.util.AppLog import org.wordpress.android.util.AppLog.T import org.wordpress.android.util.PackageUtils import org.wordpress.android.util.combineMap +import org.wordpress.android.util.merge import org.wordpress.android.util.mergeNotNull class BaseListUseCase @@ -37,6 +38,14 @@ constructor( } val navigationTarget: LiveData = mergeNotNull(useCases.map { it.navigationTarget }) + val menuClick: LiveData = merge(mergeNotNull(useCases.map { it.menuClick }), data) { click, viewModel -> + if (click != null && viewModel != null) { + val indexOfBlock = viewModel.indexOfFirst { it.type == click.second } + MenuClick(click.first, click.second, indexOfBlock == 0, indexOfBlock == viewModel.size - 1) + } else { + null + } + } suspend fun loadData(site: SiteModel) { loadData(site, false, false) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsBlock.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsBlock.kt index 695b0d5a3bab..b930acee33a2 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsBlock.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsBlock.kt @@ -1,6 +1,6 @@ package org.wordpress.android.ui.stats.refresh.lists -import org.wordpress.android.fluxc.store.StatsStore.StatsTypes +import org.wordpress.android.fluxc.store.stats.StatsStore.StatsTypes import org.wordpress.android.ui.stats.refresh.lists.StatsBlock.Type.BLOCK_LIST import org.wordpress.android.ui.stats.refresh.lists.StatsBlock.Type.EMPTY import org.wordpress.android.ui.stats.refresh.lists.StatsBlock.Type.ERROR diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListFragment.kt index ad407cc5f15e..093ac4ac07f4 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListFragment.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListFragment.kt @@ -8,6 +8,7 @@ import android.os.Bundle import android.os.Parcelable import android.support.v4.app.FragmentActivity import android.support.v7.widget.LinearLayoutManager +import android.support.v7.widget.PopupMenu import android.support.v7.widget.RecyclerView.LayoutManager import android.support.v7.widget.StaggeredGridLayoutManager import android.view.LayoutInflater @@ -24,6 +25,7 @@ import org.wordpress.android.fluxc.network.utils.StatsGranularity.DAYS import org.wordpress.android.fluxc.network.utils.StatsGranularity.MONTHS import org.wordpress.android.fluxc.network.utils.StatsGranularity.WEEKS import org.wordpress.android.fluxc.network.utils.StatsGranularity.YEARS +import org.wordpress.android.fluxc.store.stats.StatsStore.StatsTypes import org.wordpress.android.ui.ActivityLauncher import org.wordpress.android.ui.WPWebViewActivity import org.wordpress.android.ui.stats.StatsConstants @@ -273,6 +275,36 @@ class StatsListFragment : DaggerFragment() { } true } + + viewModel.menuClick.observe(this, Observer { menuClick -> + if (menuClick != null) { + val popup = PopupMenu(activity, menuClick.view) + val popupMenu = popup.menu + popup.inflate(R.menu.menu_stats_item) + popupMenu.findItem(R.id.action_move_up).isEnabled = menuClick.showUpAction + popupMenu.findItem(R.id.action_move_down).isEnabled = menuClick.showDownAction + popup.setOnMenuItemClickListener { menuItem -> + when (menuItem.itemId) { + R.id.action_move_up -> { + viewModel.onMoveUpClick(menuClick.type) + true + } + R.id.action_move_down -> { + viewModel.onMoveDownClick(menuClick.type) + true + } + R.id.action_remove -> { + viewModel.onRemoveClick(menuClick.type) + true + } + else -> { + false + } + } + } + popup.show() + } + }) } private fun updateInsights(statsState: List) { @@ -326,3 +358,5 @@ fun StatsGranularity.toStatsTimeFrame(): StatsTimeframe { YEARS -> StatsTimeframe.YEAR } } + +data class MenuClick(val view: View, val type: StatsTypes, val showUpAction: Boolean, val showDownAction: Boolean) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListViewModel.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListViewModel.kt index f6944bf079cf..422d0418e28d 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListViewModel.kt @@ -4,6 +4,8 @@ import android.arch.lifecycle.LiveData import android.support.annotation.StringRes import kotlinx.coroutines.CoroutineDispatcher import org.wordpress.android.R +import org.wordpress.android.fluxc.store.stats.StatsStore +import org.wordpress.android.fluxc.store.stats.StatsStore.StatsTypes import org.wordpress.android.viewmodel.ScopedViewModel abstract class StatsListViewModel(defaultDispatcher: CoroutineDispatcher, private val statsUseCase: BaseListUseCase) : @@ -20,10 +22,24 @@ abstract class StatsListViewModel(defaultDispatcher: CoroutineDispatcher, privat val navigationTarget: LiveData = statsUseCase.navigationTarget + val menuClick: LiveData = statsUseCase.menuClick + val data: LiveData> = _data override fun onCleared() { statsUseCase.onCleared() super.onCleared() } + + fun onMoveDownClick(type: StatsTypes) { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } + + fun onMoveUpClick(type: StatsTypes) { + TODO() + } + + fun onRemoveClick(type: StatsTypes) { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/BaseStatsUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/BaseStatsUseCase.kt index 6333c9b07c67..f73c4fffecf1 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/BaseStatsUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/BaseStatsUseCase.kt @@ -2,6 +2,7 @@ package org.wordpress.android.ui.stats.refresh.lists.sections import android.arch.lifecycle.LiveData import android.arch.lifecycle.MutableLiveData +import android.view.View import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.withContext import org.wordpress.android.fluxc.model.SiteModel @@ -27,6 +28,7 @@ abstract class BaseStatsUseCase( ) { private val domainModel = MutableLiveData>() private val uiState = MutableLiveData() + val liveData: LiveData = merge(domainModel, uiState) { data, uiState -> try { when (data) { @@ -43,6 +45,8 @@ abstract class BaseStatsUseCase( private val mutableNavigationTarget = MutableLiveData() val navigationTarget: LiveData = mutableNavigationTarget + private val mutableMenuClick = MutableLiveData>() + val menuClick: LiveData> = mutableMenuClick /** * Fetches data either from a local cache or from remote API @@ -100,6 +104,13 @@ abstract class BaseStatsUseCase( uiState.value = newState ?: uiState.value } + /** + * Trigger this method when the item menu button is clicked + */ + fun onMenuClick(view: View) { + mutableMenuClick.value = view to type + } + /** * Trigger this method when updating only a part of UI state. * @param update function diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/BlockListItem.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/BlockListItem.kt index 6e9d73681f56..34858a7938c6 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/BlockListItem.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/BlockListItem.kt @@ -2,6 +2,7 @@ package org.wordpress.android.ui.stats.refresh.lists.sections import android.support.annotation.DrawableRes import android.support.annotation.StringRes +import android.view.View import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Columns.Alignment.CENTER import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.ListItemWithIcon.IconStyle.NORMAL import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Type.BACKGROUND_INFO @@ -47,7 +48,11 @@ sealed class BlockListItem(val type: Type) { DIVIDER } - data class Title(@StringRes val textResource: Int? = null, val text: String? = null) : BlockListItem(TITLE) + data class Title( + @StringRes val textResource: Int? = null, + val text: String? = null, + val menuAction: ((View) -> Unit)? = null + ) : BlockListItem(TITLE) data class ListItem( val text: String, diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/BlockListItemViewHolder.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/BlockListItemViewHolder.kt index 60d75f84417d..369f0d59ffe2 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/BlockListItemViewHolder.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/BlockListItemViewHolder.kt @@ -28,6 +28,7 @@ import android.webkit.WebSettings import android.webkit.WebView import android.webkit.WebViewClient import android.widget.FrameLayout +import android.widget.ImageButton import android.widget.ImageView import android.widget.LinearLayout import android.widget.TextView @@ -71,8 +72,16 @@ sealed class BlockListItemViewHolder( R.layout.stats_block_title_item ) { private val text = itemView.findViewById(R.id.text) + private val menu = itemView.findViewById(R.id.menu) fun bind(item: Title) { text.setTextOrHide(item.textResource, item.text) + if (item.menuAction != null) { + menu.visibility = View.VISIBLE + menu.setOnClickListener { item.menuAction.invoke(menu) } + } else { + menu.visibility = View.GONE + menu.setOnClickListener(null) + } } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/GranularStatefulUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/GranularStatefulUseCase.kt index 6250ab7ea09f..f104b97fd1d0 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/GranularStatefulUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/GranularStatefulUseCase.kt @@ -3,7 +3,7 @@ package org.wordpress.android.ui.stats.refresh.lists.sections.granular import kotlinx.coroutines.CoroutineDispatcher import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.network.utils.StatsGranularity -import org.wordpress.android.fluxc.store.StatsStore.StatsTypes +import org.wordpress.android.fluxc.store.stats.StatsStore.StatsTypes import org.wordpress.android.ui.stats.refresh.lists.sections.BaseStatsUseCase.StatefulUseCase import java.util.Date diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/GranularStatelessUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/GranularStatelessUseCase.kt index 216388bdcde0..910d53d4ec14 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/GranularStatelessUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/GranularStatelessUseCase.kt @@ -3,7 +3,7 @@ package org.wordpress.android.ui.stats.refresh.lists.sections.granular import kotlinx.coroutines.CoroutineDispatcher import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.network.utils.StatsGranularity -import org.wordpress.android.fluxc.store.StatsStore.StatsTypes +import org.wordpress.android.fluxc.store.stats.StatsStore.StatsTypes import org.wordpress.android.ui.stats.refresh.lists.sections.BaseStatsUseCase.StatelessUseCase import java.util.Date diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/AuthorsUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/AuthorsUseCase.kt index f1f53e266a71..e80a1d684bd9 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/AuthorsUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/AuthorsUseCase.kt @@ -7,7 +7,7 @@ import org.wordpress.android.analytics.AnalyticsTracker import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.stats.time.AuthorsModel import org.wordpress.android.fluxc.network.utils.StatsGranularity -import org.wordpress.android.fluxc.store.StatsStore.TimeStatsTypes.AUTHORS +import org.wordpress.android.fluxc.store.stats.StatsStore.TimeStatsTypes.AUTHORS import org.wordpress.android.fluxc.store.stats.time.AuthorsStore import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.refresh.lists.NavigationTarget.ViewAuthors diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/ClicksUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/ClicksUseCase.kt index 67e237109bd4..43a751097974 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/ClicksUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/ClicksUseCase.kt @@ -7,7 +7,7 @@ import org.wordpress.android.analytics.AnalyticsTracker import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.stats.time.ClicksModel import org.wordpress.android.fluxc.network.utils.StatsGranularity -import org.wordpress.android.fluxc.store.StatsStore.TimeStatsTypes.CLICKS +import org.wordpress.android.fluxc.store.stats.StatsStore.TimeStatsTypes.CLICKS import org.wordpress.android.fluxc.store.stats.time.ClicksStore import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.refresh.lists.NavigationTarget.ViewClicks diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/CountryViewsUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/CountryViewsUseCase.kt index b346d48efa0d..c6be6a204c28 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/CountryViewsUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/CountryViewsUseCase.kt @@ -7,7 +7,7 @@ import org.wordpress.android.analytics.AnalyticsTracker import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.stats.time.CountryViewsModel import org.wordpress.android.fluxc.network.utils.StatsGranularity -import org.wordpress.android.fluxc.store.StatsStore.TimeStatsTypes.COUNTRIES +import org.wordpress.android.fluxc.store.stats.StatsStore.TimeStatsTypes.COUNTRIES import org.wordpress.android.fluxc.store.stats.time.CountryViewsStore import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.refresh.lists.NavigationTarget.ViewCountries diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/DateUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/DateUseCase.kt index e05f05a11500..77783651b1e7 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/DateUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/DateUseCase.kt @@ -4,7 +4,7 @@ import kotlinx.coroutines.CoroutineDispatcher import org.wordpress.android.R.string import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.network.utils.StatsGranularity -import org.wordpress.android.fluxc.store.StatsStore.TimeStatsTypes.DATE +import org.wordpress.android.fluxc.store.stats.StatsStore.TimeStatsTypes.DATE import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.BackgroundInformation diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/OverviewUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/OverviewUseCase.kt index fdf5b06cb856..9e24d2ec9540 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/OverviewUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/OverviewUseCase.kt @@ -5,7 +5,7 @@ import org.wordpress.android.analytics.AnalyticsTracker import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.stats.time.VisitsAndViewsModel import org.wordpress.android.fluxc.network.utils.StatsGranularity -import org.wordpress.android.fluxc.store.StatsStore.TimeStatsTypes.OVERVIEW +import org.wordpress.android.fluxc.store.stats.StatsStore.TimeStatsTypes.OVERVIEW import org.wordpress.android.fluxc.store.stats.time.VisitsAndViewsStore import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.refresh.lists.sections.BaseStatsUseCase.StatefulUseCase diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/PostsAndPagesUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/PostsAndPagesUseCase.kt index 7f339d0cfa8c..f7901993aa35 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/PostsAndPagesUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/PostsAndPagesUseCase.kt @@ -10,7 +10,7 @@ import org.wordpress.android.fluxc.model.stats.time.PostAndPageViewsModel.ViewsT import org.wordpress.android.fluxc.model.stats.time.PostAndPageViewsModel.ViewsType.PAGE import org.wordpress.android.fluxc.model.stats.time.PostAndPageViewsModel.ViewsType.POST import org.wordpress.android.fluxc.network.utils.StatsGranularity -import org.wordpress.android.fluxc.store.StatsStore.TimeStatsTypes.POSTS_AND_PAGES +import org.wordpress.android.fluxc.store.stats.StatsStore.TimeStatsTypes.POSTS_AND_PAGES import org.wordpress.android.fluxc.store.stats.time.PostAndPageViewsStore import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.StatsConstants.ITEM_TYPE_HOME_PAGE diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/ReferrersUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/ReferrersUseCase.kt index ac77ce2164d6..94358a38630e 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/ReferrersUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/ReferrersUseCase.kt @@ -7,7 +7,7 @@ import org.wordpress.android.analytics.AnalyticsTracker import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.stats.time.ReferrersModel import org.wordpress.android.fluxc.network.utils.StatsGranularity -import org.wordpress.android.fluxc.store.StatsStore.TimeStatsTypes.REFERRERS +import org.wordpress.android.fluxc.store.stats.StatsStore.TimeStatsTypes.REFERRERS import org.wordpress.android.fluxc.store.stats.time.ReferrersStore import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.refresh.lists.NavigationTarget.ViewReferrers diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/SearchTermsUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/SearchTermsUseCase.kt index 8ddeb3dcdcdc..6b5741aeb80c 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/SearchTermsUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/SearchTermsUseCase.kt @@ -7,7 +7,7 @@ import org.wordpress.android.analytics.AnalyticsTracker import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.stats.time.SearchTermsModel import org.wordpress.android.fluxc.network.utils.StatsGranularity -import org.wordpress.android.fluxc.store.StatsStore.TimeStatsTypes.SEARCH_TERMS +import org.wordpress.android.fluxc.store.stats.StatsStore.TimeStatsTypes.SEARCH_TERMS import org.wordpress.android.fluxc.store.stats.time.SearchTermsStore import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.refresh.lists.NavigationTarget.ViewSearchTerms diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/VideoPlaysUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/VideoPlaysUseCase.kt index 83e04b5a3680..4ff6b00b8c7a 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/VideoPlaysUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/VideoPlaysUseCase.kt @@ -7,7 +7,7 @@ import org.wordpress.android.analytics.AnalyticsTracker import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.stats.time.VideoPlaysModel import org.wordpress.android.fluxc.network.utils.StatsGranularity -import org.wordpress.android.fluxc.store.StatsStore.TimeStatsTypes.VIDEOS +import org.wordpress.android.fluxc.store.stats.StatsStore.TimeStatsTypes.VIDEOS import org.wordpress.android.fluxc.store.stats.time.VideoPlaysStore import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.refresh.lists.NavigationTarget.ViewUrl diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/AllTimeStatsUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/AllTimeStatsUseCase.kt index 53a65cb7223f..4202d7b14240 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/AllTimeStatsUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/AllTimeStatsUseCase.kt @@ -44,7 +44,7 @@ class AllTimeStatsUseCase override fun buildUiModel(domainModel: InsightsAllTimeModel): List { val items = mutableListOf() - items.add(Title(R.string.stats_insights_all_time_stats)) + items.add(Title(R.string.stats_insights_all_time_stats, menuAction = this::onMenuClick)) val hasPosts = domainModel.posts > 0 val hasViews = domainModel.views > 0 diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/CommentsUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/CommentsUseCase.kt index df74ed22cacb..9f4dd2a9e4bf 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/CommentsUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/CommentsUseCase.kt @@ -6,8 +6,8 @@ import org.wordpress.android.R.string import org.wordpress.android.analytics.AnalyticsTracker import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.stats.CommentsModel -import org.wordpress.android.fluxc.store.InsightsStore -import org.wordpress.android.fluxc.store.StatsStore.InsightsTypes.COMMENTS +import org.wordpress.android.fluxc.store.stats.InsightsStore +import org.wordpress.android.fluxc.store.stats.StatsStore.InsightsTypes.COMMENTS import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.refresh.lists.NavigationTarget.ViewCommentsStats import org.wordpress.android.ui.stats.refresh.lists.sections.BaseStatsUseCase.StatefulUseCase @@ -57,7 +57,7 @@ class CommentsUseCase override fun buildStatefulUiModel(model: CommentsModel, uiState: Int): List { val items = mutableListOf() - items.add(Title(string.stats_view_comments)) + items.add(Title(string.stats_view_comments, menuAction = this::onMenuClick)) if (model.authors.isNotEmpty() || model.posts.isNotEmpty()) { items.add( TabsItem( diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/FollowersUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/FollowersUseCase.kt index 1d7c860c44c7..d189832c1fd0 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/FollowersUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/FollowersUseCase.kt @@ -9,8 +9,8 @@ import org.wordpress.android.analytics.AnalyticsTracker import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.stats.FollowersModel import org.wordpress.android.fluxc.model.stats.FollowersModel.FollowerModel -import org.wordpress.android.fluxc.store.InsightsStore -import org.wordpress.android.fluxc.store.StatsStore.InsightsTypes.FOLLOWERS +import org.wordpress.android.fluxc.store.stats.InsightsStore +import org.wordpress.android.fluxc.store.stats.StatsStore.InsightsTypes.FOLLOWERS import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.StatsUtilsWrapper import org.wordpress.android.ui.stats.refresh.lists.NavigationTarget.ViewFollowersStats @@ -77,7 +77,7 @@ class FollowersUseCase val wpComModel = domainModel.first val emailModel = domainModel.second val items = mutableListOf() - items.add(Title(string.stats_view_followers)) + items.add(Title(string.stats_view_followers, menuAction = this::onMenuClick)) if (domainModel.first.followers.isNotEmpty() || domainModel.second.followers.isNotEmpty()) { items.add( TabsItem( diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/LatestPostSummaryUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/LatestPostSummaryUseCase.kt index 0a305d221e28..d2009cd65674 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/LatestPostSummaryUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/LatestPostSummaryUseCase.kt @@ -9,8 +9,8 @@ import org.wordpress.android.analytics.AnalyticsTracker.Stat.STATS_LATEST_POST_S import org.wordpress.android.analytics.AnalyticsTracker.Stat.STATS_LATEST_POST_SUMMARY_VIEW_POST_DETAILS_TAPPED import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.stats.InsightsLatestPostModel -import org.wordpress.android.fluxc.store.InsightsStore -import org.wordpress.android.fluxc.store.StatsStore.InsightsTypes.LATEST_POST_SUMMARY +import org.wordpress.android.fluxc.store.stats.InsightsStore +import org.wordpress.android.fluxc.store.stats.StatsStore.InsightsTypes.LATEST_POST_SUMMARY import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.refresh.lists.NavigationTarget.AddNewPost import org.wordpress.android.ui.stats.refresh.lists.NavigationTarget.SharePost @@ -55,7 +55,7 @@ class LatestPostSummaryUseCase override fun buildUiModel(domainModel: InsightsLatestPostModel): List { val items = mutableListOf() - items.add(Title(string.stats_insights_latest_post_summary)) + items.add(Title(string.stats_insights_latest_post_summary, menuAction = this::onMenuClick)) items.add(latestPostSummaryMapper.buildMessageItem(domainModel, this::onLinkClicked)) if (domainModel.hasData()) { items.add( diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/MostPopularInsightsUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/MostPopularInsightsUseCase.kt index d9972c5b092d..9e93e1ee667f 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/MostPopularInsightsUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/MostPopularInsightsUseCase.kt @@ -4,8 +4,8 @@ import kotlinx.coroutines.CoroutineDispatcher import org.wordpress.android.R import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.stats.InsightsMostPopularModel -import org.wordpress.android.fluxc.store.InsightsStore -import org.wordpress.android.fluxc.store.StatsStore.InsightsTypes.MOST_POPULAR_DAY_AND_HOUR +import org.wordpress.android.fluxc.store.stats.InsightsStore +import org.wordpress.android.fluxc.store.stats.StatsStore.InsightsTypes.MOST_POPULAR_DAY_AND_HOUR import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.refresh.lists.sections.BaseStatsUseCase.StatelessUseCase import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem @@ -46,7 +46,7 @@ class MostPopularInsightsUseCase override fun buildUiModel(domainModel: InsightsMostPopularModel): List { val items = mutableListOf() - items.add(Title(R.string.stats_insights_popular)) + items.add(Title(R.string.stats_insights_popular, menuAction = this::onMenuClick)) items.add(Header( R.string.stats_insights_most_popular_day_and_hour_label, R.string.stats_insights_most_popular_views_label) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/PublicizeUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/PublicizeUseCase.kt index 1b5812400a5e..96e8e66f8a26 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/PublicizeUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/PublicizeUseCase.kt @@ -6,8 +6,8 @@ import org.wordpress.android.R.string import org.wordpress.android.analytics.AnalyticsTracker import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.stats.PublicizeModel -import org.wordpress.android.fluxc.store.InsightsStore -import org.wordpress.android.fluxc.store.StatsStore.InsightsTypes.PUBLICIZE +import org.wordpress.android.fluxc.store.stats.InsightsStore +import org.wordpress.android.fluxc.store.stats.StatsStore.InsightsTypes.PUBLICIZE import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.refresh.lists.NavigationTarget.ViewPublicizeStats import org.wordpress.android.ui.stats.refresh.lists.sections.BaseStatsUseCase.StatelessUseCase @@ -59,7 +59,7 @@ class PublicizeUseCase override fun buildUiModel(domainModel: PublicizeModel): List { val items = mutableListOf() - items.add(Title(string.stats_view_publicize)) + items.add(Title(string.stats_view_publicize, menuAction = this::onMenuClick)) if (domainModel.services.isEmpty()) { items.add(Empty()) } else { diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TagsAndCategoriesUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TagsAndCategoriesUseCase.kt index 594f27fbba35..fbd74d1d8e18 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TagsAndCategoriesUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TagsAndCategoriesUseCase.kt @@ -8,8 +8,8 @@ import org.wordpress.android.analytics.AnalyticsTracker import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.stats.TagsModel import org.wordpress.android.fluxc.model.stats.TagsModel.TagModel -import org.wordpress.android.fluxc.store.InsightsStore -import org.wordpress.android.fluxc.store.StatsStore.InsightsTypes.TAGS_AND_CATEGORIES +import org.wordpress.android.fluxc.store.stats.InsightsStore +import org.wordpress.android.fluxc.store.stats.StatsStore.InsightsTypes.TAGS_AND_CATEGORIES import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.refresh.lists.NavigationTarget.ViewTag import org.wordpress.android.ui.stats.refresh.lists.NavigationTarget.ViewTagsAndCategoriesStats @@ -64,7 +64,7 @@ class TagsAndCategoriesUseCase override fun buildStatefulUiModel(domainModel: TagsModel, uiState: TagsAndCategoriesUiState): List { val items = mutableListOf() - items.add(Title(R.string.stats_insights_tags_and_categories)) + items.add(Title(R.string.stats_insights_tags_and_categories, menuAction = this::onMenuClick)) if (domainModel.tags.isEmpty()) { items.add(Empty()) } else { diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TodayStatsUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TodayStatsUseCase.kt index c3b32ead0455..2b3393834a46 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TodayStatsUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TodayStatsUseCase.kt @@ -4,8 +4,8 @@ import kotlinx.coroutines.CoroutineDispatcher import org.wordpress.android.R import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.stats.VisitsModel -import org.wordpress.android.fluxc.store.InsightsStore -import org.wordpress.android.fluxc.store.StatsStore.InsightsTypes.TODAY_STATS +import org.wordpress.android.fluxc.store.stats.InsightsStore +import org.wordpress.android.fluxc.store.stats.StatsStore.InsightsTypes.TODAY_STATS import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.refresh.lists.sections.BaseStatsUseCase.StatelessUseCase import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem @@ -42,7 +42,7 @@ class TodayStatsUseCase override fun buildUiModel(domainModel: VisitsModel): List { val items = mutableListOf() - items.add(Title(R.string.stats_insights_today_stats)) + items.add(Title(R.string.stats_insights_today_stats, menuAction = this::onMenuClick)) val hasViews = domainModel.views > 0 val hasVisitors = domainModel.visitors > 0 diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/viewholders/BaseStatsViewHolder.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/viewholders/BaseStatsViewHolder.kt index af8effe951d0..731f78d57b11 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/viewholders/BaseStatsViewHolder.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/viewholders/BaseStatsViewHolder.kt @@ -6,9 +6,9 @@ import android.support.v7.widget.RecyclerView.ViewHolder import android.support.v7.widget.StaggeredGridLayoutManager import android.view.LayoutInflater import android.view.ViewGroup -import org.wordpress.android.fluxc.store.StatsStore.InsightsTypes.LATEST_POST_SUMMARY -import org.wordpress.android.fluxc.store.StatsStore.TimeStatsTypes.DATE -import org.wordpress.android.fluxc.store.StatsStore.TimeStatsTypes.OVERVIEW +import org.wordpress.android.fluxc.store.stats.StatsStore.InsightsTypes.LATEST_POST_SUMMARY +import org.wordpress.android.fluxc.store.stats.StatsStore.TimeStatsTypes.DATE +import org.wordpress.android.fluxc.store.stats.StatsStore.TimeStatsTypes.OVERVIEW import org.wordpress.android.ui.stats.refresh.lists.StatsBlock abstract class BaseStatsViewHolder( diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/viewholders/BlockListViewHolder.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/viewholders/BlockListViewHolder.kt index a5843c598467..fdacb332798c 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/viewholders/BlockListViewHolder.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/viewholders/BlockListViewHolder.kt @@ -7,7 +7,7 @@ import android.support.v7.widget.RecyclerView import android.view.ViewGroup import org.wordpress.android.R import org.wordpress.android.R.layout -import org.wordpress.android.fluxc.store.StatsStore.TimeStatsTypes.DATE +import org.wordpress.android.fluxc.store.stats.StatsStore.TimeStatsTypes.DATE import org.wordpress.android.ui.stats.refresh.lists.BlockList import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListAdapter import org.wordpress.android.util.image.ImageManager diff --git a/WordPress/src/main/res/layout/stats_block_title_item.xml b/WordPress/src/main/res/layout/stats_block_title_item.xml index 54bc3041a6bd..b6c1634fed01 100644 --- a/WordPress/src/main/res/layout/stats_block_title_item.xml +++ b/WordPress/src/main/res/layout/stats_block_title_item.xml @@ -18,6 +18,7 @@ android:layout_weight="1"/> Date: Tue, 22 Jan 2019 16:10:02 +0100 Subject: [PATCH 05/17] Implement moving blocks up and down --- .../android/ui/stats/refresh/StatsModule.kt | 40 ++++++++---- .../ui/stats/refresh/lists/BaseListUseCase.kt | 35 ++++++++--- .../stats/refresh/lists/StatsListFragment.kt | 61 +++++++++++-------- .../stats/refresh/lists/StatsListViewModel.kt | 18 +++--- .../lists/sections/BaseStatsUseCase.kt | 7 ++- build.gradle | 2 +- 6 files changed, 105 insertions(+), 58 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsModule.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsModule.kt index 6a27bbdd0666..ff9b627bcda4 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsModule.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsModule.kt @@ -8,6 +8,7 @@ import org.wordpress.android.fluxc.network.utils.StatsGranularity.MONTHS import org.wordpress.android.fluxc.network.utils.StatsGranularity.WEEKS import org.wordpress.android.fluxc.network.utils.StatsGranularity.YEARS import org.wordpress.android.fluxc.store.stats.StatsStore +import org.wordpress.android.fluxc.store.stats.StatsStore.InsightsTypes import org.wordpress.android.modules.BG_THREAD import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.refresh.lists.BaseListUseCase @@ -120,9 +121,26 @@ class StatsModule { @Named(UI_THREAD) mainDispatcher: CoroutineDispatcher, @Named(INSIGHTS_USE_CASES) useCases: List<@JvmSuppressWildcards BaseStatsUseCase<*, *>> ): BaseListUseCase { - return BaseListUseCase(bgDispatcher, mainDispatcher, useCases) { site -> - statsStore.getInsights(site) - } + return BaseListUseCase( + bgDispatcher, + mainDispatcher, + useCases, + statsStore::getInsights, + moveTypeUp = { site, type -> + if (type is InsightsTypes) { + statsStore.moveTypeUp(site, type) + } + }, + moveTypeDown = { site, type -> + if (type is InsightsTypes) { + statsStore.moveTypeDown(site, type) + } + }, + removeType = { site, type -> + if (type is InsightsTypes) { + statsStore.removeType(site, type) + } + }) } /** @@ -138,9 +156,9 @@ class StatsModule { @Named(UI_THREAD) mainDispatcher: CoroutineDispatcher, @Named(GRANULAR_USE_CASE_FACTORIES) useCasesFactories: List<@JvmSuppressWildcards UseCaseFactory> ): BaseListUseCase { - return BaseListUseCase(bgDispatcher, mainDispatcher, useCasesFactories.map { it.build(DAYS) }) { + return BaseListUseCase(bgDispatcher, mainDispatcher, useCasesFactories.map { it.build(DAYS) }, { statsStore.getTimeStatsTypes() - } + }) } /** @@ -156,9 +174,9 @@ class StatsModule { @Named(UI_THREAD) mainDispatcher: CoroutineDispatcher, @Named(GRANULAR_USE_CASE_FACTORIES) useCasesFactories: List<@JvmSuppressWildcards UseCaseFactory> ): BaseListUseCase { - return BaseListUseCase(bgDispatcher, mainDispatcher, useCasesFactories.map { it.build(WEEKS) }) { + return BaseListUseCase(bgDispatcher, mainDispatcher, useCasesFactories.map { it.build(WEEKS) }, { statsStore.getTimeStatsTypes() - } + }) } /** @@ -174,9 +192,9 @@ class StatsModule { @Named(UI_THREAD) mainDispatcher: CoroutineDispatcher, @Named(GRANULAR_USE_CASE_FACTORIES) useCasesFactories: List<@JvmSuppressWildcards UseCaseFactory> ): BaseListUseCase { - return BaseListUseCase(bgDispatcher, mainDispatcher, useCasesFactories.map { it.build(MONTHS) }) { + return BaseListUseCase(bgDispatcher, mainDispatcher, useCasesFactories.map { it.build(MONTHS) }, { statsStore.getTimeStatsTypes() - } + }) } /** @@ -192,8 +210,8 @@ class StatsModule { @Named(UI_THREAD) mainDispatcher: CoroutineDispatcher, @Named(GRANULAR_USE_CASE_FACTORIES) useCasesFactories: List<@JvmSuppressWildcards UseCaseFactory> ): BaseListUseCase { - return BaseListUseCase(bgDispatcher, mainDispatcher, useCasesFactories.map { it.build(YEARS) }) { + return BaseListUseCase(bgDispatcher, mainDispatcher, useCasesFactories.map { it.build(YEARS) }, { statsStore.getTimeStatsTypes() - } + }) } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/BaseListUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/BaseListUseCase.kt index 37422c189167..39926d2b3a30 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/BaseListUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/BaseListUseCase.kt @@ -7,6 +7,10 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.store.stats.StatsStore.StatsTypes +import org.wordpress.android.ui.stats.refresh.lists.StatsListViewModel.Action +import org.wordpress.android.ui.stats.refresh.lists.StatsListViewModel.Action.MOVE_DOWN +import org.wordpress.android.ui.stats.refresh.lists.StatsListViewModel.Action.MOVE_UP +import org.wordpress.android.ui.stats.refresh.lists.StatsListViewModel.Action.REMOVE import org.wordpress.android.ui.stats.refresh.lists.sections.BaseStatsUseCase import org.wordpress.android.util.AppLog import org.wordpress.android.util.AppLog.T @@ -20,7 +24,10 @@ constructor( private val bgDispatcher: CoroutineDispatcher, private val mainDispatcher: CoroutineDispatcher, private val useCases: List>, - private val getStatsTypes: suspend ((site: SiteModel) -> List) + private val getStatsTypes: suspend ((site: SiteModel) -> List), + private val moveTypeUp: suspend ((site: SiteModel, type: StatsTypes) -> Unit) = { _, _ -> }, + private val moveTypeDown: suspend ((site: SiteModel, type: StatsTypes) -> Unit) = { _, _ -> }, + private val removeType: suspend ((site: SiteModel, type: StatsTypes) -> Unit) = { _, _ -> } ) { private val blockListData = combineMap( useCases.associateBy { it.type }.mapValues { entry -> entry.value.liveData } @@ -40,8 +47,10 @@ constructor( val navigationTarget: LiveData = mergeNotNull(useCases.map { it.navigationTarget }) val menuClick: LiveData = merge(mergeNotNull(useCases.map { it.menuClick }), data) { click, viewModel -> if (click != null && viewModel != null) { - val indexOfBlock = viewModel.indexOfFirst { it.type == click.second } - MenuClick(click.first, click.second, indexOfBlock == 0, indexOfBlock == viewModel.size - 1) + val indexOfBlock = viewModel.indexOfFirst { it.statsTypes == click.type } + click.showUpAction = indexOfBlock > 0 + click.showDownAction = indexOfBlock < viewModel.size - 1 + click } else { null } @@ -55,20 +64,32 @@ constructor( loadData(site, true, forced) } + suspend fun refreshTypes(site: SiteModel) { + val items = getStatsTypes(site) + withContext(mainDispatcher) { + statsTypes.value = items + } + } + private suspend fun loadData(site: SiteModel, refresh: Boolean, forced: Boolean) { withContext(bgDispatcher) { if (PackageUtils.isDebugBuild() && useCases.distinctBy { it.type }.size < useCases.size) { throw RuntimeException("Duplicate stats type in a use case") } useCases.forEach { block -> launch { block.fetch(site, refresh, forced) } } - val items = getStatsTypes(site) - withContext(mainDispatcher) { - statsTypes.value = items - } + refreshTypes(site) } } fun onCleared() { useCases.forEach { it.clear() } } + + suspend fun onAction(site: SiteModel, type: StatsTypes, action: Action) { + when (action) { + MOVE_UP -> moveTypeUp(site, type) + MOVE_DOWN -> moveTypeDown(site, type) + REMOVE -> removeType(site, type) + } + } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListFragment.kt index 093ac4ac07f4..d08341ade036 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListFragment.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListFragment.kt @@ -14,6 +14,7 @@ import android.support.v7.widget.StaggeredGridLayoutManager import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Toast import dagger.android.support.DaggerFragment import kotlinx.android.synthetic.main.stats_list_fragment.* import org.wordpress.android.R @@ -50,6 +51,7 @@ import org.wordpress.android.ui.stats.refresh.lists.NavigationTarget.ViewTag import org.wordpress.android.ui.stats.refresh.lists.NavigationTarget.ViewTagsAndCategoriesStats import org.wordpress.android.ui.stats.refresh.lists.NavigationTarget.ViewUrl import org.wordpress.android.ui.stats.refresh.lists.NavigationTarget.ViewVideoPlays +import org.wordpress.android.ui.stats.refresh.lists.StatsListViewModel.Action import org.wordpress.android.ui.stats.refresh.lists.StatsListViewModel.StatsSection import org.wordpress.android.ui.stats.refresh.lists.sections.granular.DaysListViewModel import org.wordpress.android.ui.stats.refresh.lists.sections.granular.MonthsListViewModel @@ -276,35 +278,34 @@ class StatsListFragment : DaggerFragment() { true } - viewModel.menuClick.observe(this, Observer { menuClick -> - if (menuClick != null) { - val popup = PopupMenu(activity, menuClick.view) - val popupMenu = popup.menu - popup.inflate(R.menu.menu_stats_item) - popupMenu.findItem(R.id.action_move_up).isEnabled = menuClick.showUpAction - popupMenu.findItem(R.id.action_move_down).isEnabled = menuClick.showDownAction - popup.setOnMenuItemClickListener { menuItem -> - when (menuItem.itemId) { - R.id.action_move_up -> { - viewModel.onMoveUpClick(menuClick.type) - true - } - R.id.action_move_down -> { - viewModel.onMoveDownClick(menuClick.type) - true - } - R.id.action_remove -> { - viewModel.onRemoveClick(menuClick.type) - true - } - else -> { - false - } + viewModel.menuClick.observeEvent(this) { menuClick -> + val popup = PopupMenu(activity, menuClick.view) + val popupMenu = popup.menu + popup.inflate(R.menu.menu_stats_item) + popupMenu.findItem(R.id.action_move_up).isVisible = menuClick.showUpAction + popupMenu.findItem(R.id.action_move_down).isVisible = menuClick.showDownAction + popup.show() + popup.setOnMenuItemClickListener { menuItem -> + when (menuItem.itemId) { + R.id.action_move_up -> { + viewModel.onAction(site, menuClick.type, Action.MOVE_UP) + true + } + R.id.action_move_down -> { + viewModel.onAction(site, menuClick.type, Action.MOVE_DOWN) + true + } + R.id.action_remove -> { + viewModel.onAction(site, menuClick.type, Action.REMOVE) + true + } + else -> { + false } } - popup.show() } - }) + true + } } private fun updateInsights(statsState: List) { @@ -359,4 +360,10 @@ fun StatsGranularity.toStatsTimeFrame(): StatsTimeframe { } } -data class MenuClick(val view: View, val type: StatsTypes, val showUpAction: Boolean, val showDownAction: Boolean) +data class MenuClick( + val view: View, + val type: StatsTypes, + var showUpAction: Boolean = true, + var showDownAction: Boolean = true +) : + Event() diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListViewModel.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListViewModel.kt index 422d0418e28d..55b49316fd8b 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListViewModel.kt @@ -3,8 +3,9 @@ package org.wordpress.android.ui.stats.refresh.lists import android.arch.lifecycle.LiveData import android.support.annotation.StringRes import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.launch import org.wordpress.android.R -import org.wordpress.android.fluxc.store.stats.StatsStore +import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.store.stats.StatsStore.StatsTypes import org.wordpress.android.viewmodel.ScopedViewModel @@ -31,15 +32,14 @@ abstract class StatsListViewModel(defaultDispatcher: CoroutineDispatcher, privat super.onCleared() } - fun onMoveDownClick(type: StatsTypes) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + fun onAction(site: SiteModel, type: StatsTypes, action: Action) { + launch { + statsUseCase.onAction(site, type, action) + statsUseCase.refreshTypes(site) + } } - fun onMoveUpClick(type: StatsTypes) { - TODO() - } - - fun onRemoveClick(type: StatsTypes) { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + enum class Action { + MOVE_DOWN, MOVE_UP, REMOVE } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/BaseStatsUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/BaseStatsUseCase.kt index f73c4fffecf1..3b48056818ca 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/BaseStatsUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/BaseStatsUseCase.kt @@ -10,6 +10,7 @@ import org.wordpress.android.fluxc.store.stats.StatsStore.StatsTypes import org.wordpress.android.ui.stats.refresh.lists.BlockList import org.wordpress.android.ui.stats.refresh.lists.Error import org.wordpress.android.ui.stats.refresh.lists.Loading +import org.wordpress.android.ui.stats.refresh.lists.MenuClick import org.wordpress.android.ui.stats.refresh.lists.NavigationTarget import org.wordpress.android.ui.stats.refresh.lists.StatsBlock import org.wordpress.android.ui.stats.refresh.lists.sections.BaseStatsUseCase.State.Data @@ -45,8 +46,8 @@ abstract class BaseStatsUseCase( private val mutableNavigationTarget = MutableLiveData() val navigationTarget: LiveData = mutableNavigationTarget - private val mutableMenuClick = MutableLiveData>() - val menuClick: LiveData> = mutableMenuClick + private val mutableMenuClick = MutableLiveData() + val menuClick: LiveData = mutableMenuClick /** * Fetches data either from a local cache or from remote API @@ -108,7 +109,7 @@ abstract class BaseStatsUseCase( * Trigger this method when the item menu button is clicked */ fun onMenuClick(view: View) { - mutableMenuClick.value = view to type + mutableMenuClick.value = MenuClick(view, type) } /** diff --git a/build.gradle b/build.gradle index 6f2a43aea749..59dec8425d49 100644 --- a/build.gradle +++ b/build.gradle @@ -92,5 +92,5 @@ subprojects { } ext { - fluxCVersion = '9d330335b2f8b2eb909aa967450b523e29baa2b6' + fluxCVersion = 'd4978fd021f7cac8b70724916959e774f2af8b6c' } From fb0daee236625e08271dcbad2ca495d57090f829 Mon Sep 17 00:00:00 2001 From: vojtasmrcek Date: Tue, 22 Jan 2019 16:48:21 +0100 Subject: [PATCH 06/17] Update fluxc with the fix --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 59dec8425d49..8db0647389ef 100644 --- a/build.gradle +++ b/build.gradle @@ -92,5 +92,5 @@ subprojects { } ext { - fluxCVersion = 'd4978fd021f7cac8b70724916959e774f2af8b6c' + fluxCVersion = 'f62c5ff07d807affc9dd1b5f29d9161250e95c43' } From ac253ee7ab5a5689e61bfc13d575bbb645c29bd1 Mon Sep 17 00:00:00 2001 From: vojtasmrcek Date: Tue, 22 Jan 2019 17:09:40 +0100 Subject: [PATCH 07/17] Revert FluxC package changes --- .../org/wordpress/android/ui/stats/refresh/StatsModule.kt | 4 ++-- .../android/ui/stats/refresh/lists/BaseListUseCase.kt | 2 +- .../wordpress/android/ui/stats/refresh/lists/StatsBlock.kt | 2 +- .../android/ui/stats/refresh/lists/StatsListFragment.kt | 2 +- .../android/ui/stats/refresh/lists/StatsListViewModel.kt | 2 +- .../ui/stats/refresh/lists/sections/BaseStatsUseCase.kt | 2 +- .../lists/sections/granular/GranularStatefulUseCase.kt | 2 +- .../lists/sections/granular/GranularStatelessUseCase.kt | 2 +- .../lists/sections/granular/usecases/AuthorsUseCase.kt | 2 +- .../lists/sections/granular/usecases/ClicksUseCase.kt | 2 +- .../lists/sections/granular/usecases/CountryViewsUseCase.kt | 2 +- .../refresh/lists/sections/granular/usecases/DateUseCase.kt | 2 +- .../lists/sections/granular/usecases/OverviewUseCase.kt | 2 +- .../sections/granular/usecases/PostsAndPagesUseCase.kt | 2 +- .../lists/sections/granular/usecases/ReferrersUseCase.kt | 2 +- .../lists/sections/granular/usecases/SearchTermsUseCase.kt | 2 +- .../lists/sections/granular/usecases/VideoPlaysUseCase.kt | 2 +- .../lists/sections/insights/usecases/AllTimeStatsUseCase.kt | 4 ++-- .../lists/sections/insights/usecases/CommentsUseCase.kt | 4 ++-- .../lists/sections/insights/usecases/FollowersUseCase.kt | 4 ++-- .../sections/insights/usecases/LatestPostSummaryUseCase.kt | 4 ++-- .../insights/usecases/MostPopularInsightsUseCase.kt | 4 ++-- .../lists/sections/insights/usecases/PublicizeUseCase.kt | 4 ++-- .../sections/insights/usecases/TagsAndCategoriesUseCase.kt | 4 ++-- .../lists/sections/insights/usecases/TodayStatsUseCase.kt | 4 ++-- .../stats/refresh/lists/viewholders/BaseStatsViewHolder.kt | 6 +++--- .../stats/refresh/lists/viewholders/BlockListViewHolder.kt | 2 +- .../ui/stats/refresh/lists/sections/BaseStatsUseCaseTest.kt | 2 +- .../lists/sections/granular/usecases/AuthorsUseCaseTest.kt | 6 +++--- .../lists/sections/granular/usecases/ClicksUseCaseTest.kt | 6 +++--- .../sections/granular/usecases/CountryViewsUseCaseTest.kt | 6 +++--- .../lists/sections/granular/usecases/OverviewUseCaseTest.kt | 6 +++--- .../sections/granular/usecases/PostsAndPagesUseCaseTest.kt | 6 +++--- .../sections/granular/usecases/ReferrersUseCaseTest.kt | 6 +++--- .../sections/granular/usecases/SearchTermsUseCaseTest.kt | 6 +++--- .../sections/granular/usecases/VideoPlaysUseCaseTest.kt | 6 +++--- .../sections/insights/usecases/AllTimeStatsUseCaseTest.kt | 6 +++--- .../lists/sections/insights/usecases/CommentsUseCaseTest.kt | 6 +++--- .../sections/insights/usecases/FollowersUseCaseTest.kt | 6 +++--- .../insights/usecases/LatestPostSummaryUseCaseTest.kt | 6 +++--- .../insights/usecases/MostPopularInsightsUseCaseTest.kt | 6 +++--- .../sections/insights/usecases/PublicizeUseCaseTest.kt | 6 +++--- .../insights/usecases/TagsAndCategoriesUseCaseTest.kt | 6 +++--- .../sections/insights/usecases/TodayStatsUseCaseTest.kt | 6 +++--- build.gradle | 2 +- 45 files changed, 88 insertions(+), 88 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsModule.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsModule.kt index ff9b627bcda4..acfea8d03aa7 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsModule.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsModule.kt @@ -7,8 +7,8 @@ import org.wordpress.android.fluxc.network.utils.StatsGranularity.DAYS import org.wordpress.android.fluxc.network.utils.StatsGranularity.MONTHS import org.wordpress.android.fluxc.network.utils.StatsGranularity.WEEKS import org.wordpress.android.fluxc.network.utils.StatsGranularity.YEARS -import org.wordpress.android.fluxc.store.stats.StatsStore -import org.wordpress.android.fluxc.store.stats.StatsStore.InsightsTypes +import org.wordpress.android.fluxc.store.StatsStore +import org.wordpress.android.fluxc.store.StatsStore.InsightsTypes import org.wordpress.android.modules.BG_THREAD import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.refresh.lists.BaseListUseCase diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/BaseListUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/BaseListUseCase.kt index 39926d2b3a30..d4adfebbe95d 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/BaseListUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/BaseListUseCase.kt @@ -6,7 +6,7 @@ import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import org.wordpress.android.fluxc.model.SiteModel -import org.wordpress.android.fluxc.store.stats.StatsStore.StatsTypes +import org.wordpress.android.fluxc.store.StatsStore.StatsTypes import org.wordpress.android.ui.stats.refresh.lists.StatsListViewModel.Action import org.wordpress.android.ui.stats.refresh.lists.StatsListViewModel.Action.MOVE_DOWN import org.wordpress.android.ui.stats.refresh.lists.StatsListViewModel.Action.MOVE_UP diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsBlock.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsBlock.kt index b930acee33a2..695b0d5a3bab 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsBlock.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsBlock.kt @@ -1,6 +1,6 @@ package org.wordpress.android.ui.stats.refresh.lists -import org.wordpress.android.fluxc.store.stats.StatsStore.StatsTypes +import org.wordpress.android.fluxc.store.StatsStore.StatsTypes import org.wordpress.android.ui.stats.refresh.lists.StatsBlock.Type.BLOCK_LIST import org.wordpress.android.ui.stats.refresh.lists.StatsBlock.Type.EMPTY import org.wordpress.android.ui.stats.refresh.lists.StatsBlock.Type.ERROR diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListFragment.kt index d08341ade036..3be935864a52 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListFragment.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListFragment.kt @@ -26,7 +26,7 @@ import org.wordpress.android.fluxc.network.utils.StatsGranularity.DAYS import org.wordpress.android.fluxc.network.utils.StatsGranularity.MONTHS import org.wordpress.android.fluxc.network.utils.StatsGranularity.WEEKS import org.wordpress.android.fluxc.network.utils.StatsGranularity.YEARS -import org.wordpress.android.fluxc.store.stats.StatsStore.StatsTypes +import org.wordpress.android.fluxc.store.StatsStore.StatsTypes import org.wordpress.android.ui.ActivityLauncher import org.wordpress.android.ui.WPWebViewActivity import org.wordpress.android.ui.stats.StatsConstants diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListViewModel.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListViewModel.kt index 55b49316fd8b..0f5006b022c4 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListViewModel.kt @@ -6,7 +6,7 @@ import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.launch import org.wordpress.android.R import org.wordpress.android.fluxc.model.SiteModel -import org.wordpress.android.fluxc.store.stats.StatsStore.StatsTypes +import org.wordpress.android.fluxc.store.StatsStore.StatsTypes import org.wordpress.android.viewmodel.ScopedViewModel abstract class StatsListViewModel(defaultDispatcher: CoroutineDispatcher, private val statsUseCase: BaseListUseCase) : diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/BaseStatsUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/BaseStatsUseCase.kt index 3b48056818ca..2a402007b79d 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/BaseStatsUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/BaseStatsUseCase.kt @@ -6,7 +6,7 @@ import android.view.View import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.withContext import org.wordpress.android.fluxc.model.SiteModel -import org.wordpress.android.fluxc.store.stats.StatsStore.StatsTypes +import org.wordpress.android.fluxc.store.StatsStore.StatsTypes import org.wordpress.android.ui.stats.refresh.lists.BlockList import org.wordpress.android.ui.stats.refresh.lists.Error import org.wordpress.android.ui.stats.refresh.lists.Loading diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/GranularStatefulUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/GranularStatefulUseCase.kt index f104b97fd1d0..6250ab7ea09f 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/GranularStatefulUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/GranularStatefulUseCase.kt @@ -3,7 +3,7 @@ package org.wordpress.android.ui.stats.refresh.lists.sections.granular import kotlinx.coroutines.CoroutineDispatcher import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.network.utils.StatsGranularity -import org.wordpress.android.fluxc.store.stats.StatsStore.StatsTypes +import org.wordpress.android.fluxc.store.StatsStore.StatsTypes import org.wordpress.android.ui.stats.refresh.lists.sections.BaseStatsUseCase.StatefulUseCase import java.util.Date diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/GranularStatelessUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/GranularStatelessUseCase.kt index 910d53d4ec14..216388bdcde0 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/GranularStatelessUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/GranularStatelessUseCase.kt @@ -3,7 +3,7 @@ package org.wordpress.android.ui.stats.refresh.lists.sections.granular import kotlinx.coroutines.CoroutineDispatcher import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.network.utils.StatsGranularity -import org.wordpress.android.fluxc.store.stats.StatsStore.StatsTypes +import org.wordpress.android.fluxc.store.StatsStore.StatsTypes import org.wordpress.android.ui.stats.refresh.lists.sections.BaseStatsUseCase.StatelessUseCase import java.util.Date diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/AuthorsUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/AuthorsUseCase.kt index e80a1d684bd9..f1f53e266a71 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/AuthorsUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/AuthorsUseCase.kt @@ -7,7 +7,7 @@ import org.wordpress.android.analytics.AnalyticsTracker import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.stats.time.AuthorsModel import org.wordpress.android.fluxc.network.utils.StatsGranularity -import org.wordpress.android.fluxc.store.stats.StatsStore.TimeStatsTypes.AUTHORS +import org.wordpress.android.fluxc.store.StatsStore.TimeStatsTypes.AUTHORS import org.wordpress.android.fluxc.store.stats.time.AuthorsStore import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.refresh.lists.NavigationTarget.ViewAuthors diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/ClicksUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/ClicksUseCase.kt index 43a751097974..67e237109bd4 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/ClicksUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/ClicksUseCase.kt @@ -7,7 +7,7 @@ import org.wordpress.android.analytics.AnalyticsTracker import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.stats.time.ClicksModel import org.wordpress.android.fluxc.network.utils.StatsGranularity -import org.wordpress.android.fluxc.store.stats.StatsStore.TimeStatsTypes.CLICKS +import org.wordpress.android.fluxc.store.StatsStore.TimeStatsTypes.CLICKS import org.wordpress.android.fluxc.store.stats.time.ClicksStore import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.refresh.lists.NavigationTarget.ViewClicks diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/CountryViewsUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/CountryViewsUseCase.kt index c6be6a204c28..b346d48efa0d 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/CountryViewsUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/CountryViewsUseCase.kt @@ -7,7 +7,7 @@ import org.wordpress.android.analytics.AnalyticsTracker import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.stats.time.CountryViewsModel import org.wordpress.android.fluxc.network.utils.StatsGranularity -import org.wordpress.android.fluxc.store.stats.StatsStore.TimeStatsTypes.COUNTRIES +import org.wordpress.android.fluxc.store.StatsStore.TimeStatsTypes.COUNTRIES import org.wordpress.android.fluxc.store.stats.time.CountryViewsStore import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.refresh.lists.NavigationTarget.ViewCountries diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/DateUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/DateUseCase.kt index 77783651b1e7..e05f05a11500 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/DateUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/DateUseCase.kt @@ -4,7 +4,7 @@ import kotlinx.coroutines.CoroutineDispatcher import org.wordpress.android.R.string import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.network.utils.StatsGranularity -import org.wordpress.android.fluxc.store.stats.StatsStore.TimeStatsTypes.DATE +import org.wordpress.android.fluxc.store.StatsStore.TimeStatsTypes.DATE import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.BackgroundInformation diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/OverviewUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/OverviewUseCase.kt index 9e24d2ec9540..fdf5b06cb856 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/OverviewUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/OverviewUseCase.kt @@ -5,7 +5,7 @@ import org.wordpress.android.analytics.AnalyticsTracker import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.stats.time.VisitsAndViewsModel import org.wordpress.android.fluxc.network.utils.StatsGranularity -import org.wordpress.android.fluxc.store.stats.StatsStore.TimeStatsTypes.OVERVIEW +import org.wordpress.android.fluxc.store.StatsStore.TimeStatsTypes.OVERVIEW import org.wordpress.android.fluxc.store.stats.time.VisitsAndViewsStore import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.refresh.lists.sections.BaseStatsUseCase.StatefulUseCase diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/PostsAndPagesUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/PostsAndPagesUseCase.kt index f7901993aa35..7f339d0cfa8c 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/PostsAndPagesUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/PostsAndPagesUseCase.kt @@ -10,7 +10,7 @@ import org.wordpress.android.fluxc.model.stats.time.PostAndPageViewsModel.ViewsT import org.wordpress.android.fluxc.model.stats.time.PostAndPageViewsModel.ViewsType.PAGE import org.wordpress.android.fluxc.model.stats.time.PostAndPageViewsModel.ViewsType.POST import org.wordpress.android.fluxc.network.utils.StatsGranularity -import org.wordpress.android.fluxc.store.stats.StatsStore.TimeStatsTypes.POSTS_AND_PAGES +import org.wordpress.android.fluxc.store.StatsStore.TimeStatsTypes.POSTS_AND_PAGES import org.wordpress.android.fluxc.store.stats.time.PostAndPageViewsStore import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.StatsConstants.ITEM_TYPE_HOME_PAGE diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/ReferrersUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/ReferrersUseCase.kt index 94358a38630e..ac77ce2164d6 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/ReferrersUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/ReferrersUseCase.kt @@ -7,7 +7,7 @@ import org.wordpress.android.analytics.AnalyticsTracker import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.stats.time.ReferrersModel import org.wordpress.android.fluxc.network.utils.StatsGranularity -import org.wordpress.android.fluxc.store.stats.StatsStore.TimeStatsTypes.REFERRERS +import org.wordpress.android.fluxc.store.StatsStore.TimeStatsTypes.REFERRERS import org.wordpress.android.fluxc.store.stats.time.ReferrersStore import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.refresh.lists.NavigationTarget.ViewReferrers diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/SearchTermsUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/SearchTermsUseCase.kt index 6b5741aeb80c..8ddeb3dcdcdc 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/SearchTermsUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/SearchTermsUseCase.kt @@ -7,7 +7,7 @@ import org.wordpress.android.analytics.AnalyticsTracker import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.stats.time.SearchTermsModel import org.wordpress.android.fluxc.network.utils.StatsGranularity -import org.wordpress.android.fluxc.store.stats.StatsStore.TimeStatsTypes.SEARCH_TERMS +import org.wordpress.android.fluxc.store.StatsStore.TimeStatsTypes.SEARCH_TERMS import org.wordpress.android.fluxc.store.stats.time.SearchTermsStore import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.refresh.lists.NavigationTarget.ViewSearchTerms diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/VideoPlaysUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/VideoPlaysUseCase.kt index 4ff6b00b8c7a..83e04b5a3680 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/VideoPlaysUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/VideoPlaysUseCase.kt @@ -7,7 +7,7 @@ import org.wordpress.android.analytics.AnalyticsTracker import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.stats.time.VideoPlaysModel import org.wordpress.android.fluxc.network.utils.StatsGranularity -import org.wordpress.android.fluxc.store.stats.StatsStore.TimeStatsTypes.VIDEOS +import org.wordpress.android.fluxc.store.StatsStore.TimeStatsTypes.VIDEOS import org.wordpress.android.fluxc.store.stats.time.VideoPlaysStore import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.refresh.lists.NavigationTarget.ViewUrl diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/AllTimeStatsUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/AllTimeStatsUseCase.kt index 4202d7b14240..9c7f68f18730 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/AllTimeStatsUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/AllTimeStatsUseCase.kt @@ -4,8 +4,8 @@ import kotlinx.coroutines.CoroutineDispatcher import org.wordpress.android.R import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.stats.InsightsAllTimeModel -import org.wordpress.android.fluxc.store.stats.InsightsStore -import org.wordpress.android.fluxc.store.stats.StatsStore.InsightsTypes.ALL_TIME_STATS +import org.wordpress.android.fluxc.store.InsightsStore +import org.wordpress.android.fluxc.store.StatsStore.InsightsTypes.ALL_TIME_STATS import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.refresh.lists.sections.BaseStatsUseCase.StatelessUseCase import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/CommentsUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/CommentsUseCase.kt index 9f4dd2a9e4bf..0332639558cb 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/CommentsUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/CommentsUseCase.kt @@ -6,8 +6,8 @@ import org.wordpress.android.R.string import org.wordpress.android.analytics.AnalyticsTracker import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.stats.CommentsModel -import org.wordpress.android.fluxc.store.stats.InsightsStore -import org.wordpress.android.fluxc.store.stats.StatsStore.InsightsTypes.COMMENTS +import org.wordpress.android.fluxc.store.InsightsStore +import org.wordpress.android.fluxc.store.StatsStore.InsightsTypes.COMMENTS import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.refresh.lists.NavigationTarget.ViewCommentsStats import org.wordpress.android.ui.stats.refresh.lists.sections.BaseStatsUseCase.StatefulUseCase diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/FollowersUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/FollowersUseCase.kt index d189832c1fd0..10709e6fd9f6 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/FollowersUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/FollowersUseCase.kt @@ -9,8 +9,8 @@ import org.wordpress.android.analytics.AnalyticsTracker import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.stats.FollowersModel import org.wordpress.android.fluxc.model.stats.FollowersModel.FollowerModel -import org.wordpress.android.fluxc.store.stats.InsightsStore -import org.wordpress.android.fluxc.store.stats.StatsStore.InsightsTypes.FOLLOWERS +import org.wordpress.android.fluxc.store.InsightsStore +import org.wordpress.android.fluxc.store.StatsStore.InsightsTypes.FOLLOWERS import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.StatsUtilsWrapper import org.wordpress.android.ui.stats.refresh.lists.NavigationTarget.ViewFollowersStats diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/LatestPostSummaryUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/LatestPostSummaryUseCase.kt index d2009cd65674..adcd21728f38 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/LatestPostSummaryUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/LatestPostSummaryUseCase.kt @@ -9,8 +9,8 @@ import org.wordpress.android.analytics.AnalyticsTracker.Stat.STATS_LATEST_POST_S import org.wordpress.android.analytics.AnalyticsTracker.Stat.STATS_LATEST_POST_SUMMARY_VIEW_POST_DETAILS_TAPPED import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.stats.InsightsLatestPostModel -import org.wordpress.android.fluxc.store.stats.InsightsStore -import org.wordpress.android.fluxc.store.stats.StatsStore.InsightsTypes.LATEST_POST_SUMMARY +import org.wordpress.android.fluxc.store.InsightsStore +import org.wordpress.android.fluxc.store.StatsStore.InsightsTypes.LATEST_POST_SUMMARY import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.refresh.lists.NavigationTarget.AddNewPost import org.wordpress.android.ui.stats.refresh.lists.NavigationTarget.SharePost diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/MostPopularInsightsUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/MostPopularInsightsUseCase.kt index 9e93e1ee667f..afa1ddef8e73 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/MostPopularInsightsUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/MostPopularInsightsUseCase.kt @@ -4,8 +4,8 @@ import kotlinx.coroutines.CoroutineDispatcher import org.wordpress.android.R import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.stats.InsightsMostPopularModel -import org.wordpress.android.fluxc.store.stats.InsightsStore -import org.wordpress.android.fluxc.store.stats.StatsStore.InsightsTypes.MOST_POPULAR_DAY_AND_HOUR +import org.wordpress.android.fluxc.store.InsightsStore +import org.wordpress.android.fluxc.store.StatsStore.InsightsTypes.MOST_POPULAR_DAY_AND_HOUR import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.refresh.lists.sections.BaseStatsUseCase.StatelessUseCase import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/PublicizeUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/PublicizeUseCase.kt index 96e8e66f8a26..2390d68b5047 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/PublicizeUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/PublicizeUseCase.kt @@ -6,8 +6,8 @@ import org.wordpress.android.R.string import org.wordpress.android.analytics.AnalyticsTracker import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.stats.PublicizeModel -import org.wordpress.android.fluxc.store.stats.InsightsStore -import org.wordpress.android.fluxc.store.stats.StatsStore.InsightsTypes.PUBLICIZE +import org.wordpress.android.fluxc.store.InsightsStore +import org.wordpress.android.fluxc.store.StatsStore.InsightsTypes.PUBLICIZE import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.refresh.lists.NavigationTarget.ViewPublicizeStats import org.wordpress.android.ui.stats.refresh.lists.sections.BaseStatsUseCase.StatelessUseCase diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TagsAndCategoriesUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TagsAndCategoriesUseCase.kt index fbd74d1d8e18..8f44deb11233 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TagsAndCategoriesUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TagsAndCategoriesUseCase.kt @@ -8,8 +8,8 @@ import org.wordpress.android.analytics.AnalyticsTracker import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.stats.TagsModel import org.wordpress.android.fluxc.model.stats.TagsModel.TagModel -import org.wordpress.android.fluxc.store.stats.InsightsStore -import org.wordpress.android.fluxc.store.stats.StatsStore.InsightsTypes.TAGS_AND_CATEGORIES +import org.wordpress.android.fluxc.store.InsightsStore +import org.wordpress.android.fluxc.store.StatsStore.InsightsTypes.TAGS_AND_CATEGORIES import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.refresh.lists.NavigationTarget.ViewTag import org.wordpress.android.ui.stats.refresh.lists.NavigationTarget.ViewTagsAndCategoriesStats diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TodayStatsUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TodayStatsUseCase.kt index 2b3393834a46..e793cf6ce404 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TodayStatsUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TodayStatsUseCase.kt @@ -4,8 +4,8 @@ import kotlinx.coroutines.CoroutineDispatcher import org.wordpress.android.R import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.stats.VisitsModel -import org.wordpress.android.fluxc.store.stats.InsightsStore -import org.wordpress.android.fluxc.store.stats.StatsStore.InsightsTypes.TODAY_STATS +import org.wordpress.android.fluxc.store.InsightsStore +import org.wordpress.android.fluxc.store.StatsStore.InsightsTypes.TODAY_STATS import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.refresh.lists.sections.BaseStatsUseCase.StatelessUseCase import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/viewholders/BaseStatsViewHolder.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/viewholders/BaseStatsViewHolder.kt index 731f78d57b11..af8effe951d0 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/viewholders/BaseStatsViewHolder.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/viewholders/BaseStatsViewHolder.kt @@ -6,9 +6,9 @@ import android.support.v7.widget.RecyclerView.ViewHolder import android.support.v7.widget.StaggeredGridLayoutManager import android.view.LayoutInflater import android.view.ViewGroup -import org.wordpress.android.fluxc.store.stats.StatsStore.InsightsTypes.LATEST_POST_SUMMARY -import org.wordpress.android.fluxc.store.stats.StatsStore.TimeStatsTypes.DATE -import org.wordpress.android.fluxc.store.stats.StatsStore.TimeStatsTypes.OVERVIEW +import org.wordpress.android.fluxc.store.StatsStore.InsightsTypes.LATEST_POST_SUMMARY +import org.wordpress.android.fluxc.store.StatsStore.TimeStatsTypes.DATE +import org.wordpress.android.fluxc.store.StatsStore.TimeStatsTypes.OVERVIEW import org.wordpress.android.ui.stats.refresh.lists.StatsBlock abstract class BaseStatsViewHolder( diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/viewholders/BlockListViewHolder.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/viewholders/BlockListViewHolder.kt index fdacb332798c..a5843c598467 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/viewholders/BlockListViewHolder.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/viewholders/BlockListViewHolder.kt @@ -7,7 +7,7 @@ import android.support.v7.widget.RecyclerView import android.view.ViewGroup import org.wordpress.android.R import org.wordpress.android.R.layout -import org.wordpress.android.fluxc.store.stats.StatsStore.TimeStatsTypes.DATE +import org.wordpress.android.fluxc.store.StatsStore.TimeStatsTypes.DATE import org.wordpress.android.ui.stats.refresh.lists.BlockList import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListAdapter import org.wordpress.android.util.image.ImageManager diff --git a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/BaseStatsUseCaseTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/BaseStatsUseCaseTest.kt index 11053c9c28d9..01c098e60144 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/BaseStatsUseCaseTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/BaseStatsUseCaseTest.kt @@ -10,7 +10,7 @@ import org.mockito.Mock import org.wordpress.android.BaseUnitTest import org.wordpress.android.R.string import org.wordpress.android.fluxc.model.SiteModel -import org.wordpress.android.fluxc.store.stats.StatsStore.InsightsTypes.ALL_TIME_STATS +import org.wordpress.android.fluxc.store.StatsStore.InsightsTypes.ALL_TIME_STATS import org.wordpress.android.test import org.wordpress.android.ui.stats.refresh.lists.BlockList import org.wordpress.android.ui.stats.refresh.lists.Loading diff --git a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/AuthorsUseCaseTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/AuthorsUseCaseTest.kt index 4716026d41f4..2a3a014c3de3 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/AuthorsUseCaseTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/AuthorsUseCaseTest.kt @@ -13,9 +13,9 @@ import org.wordpress.android.fluxc.model.stats.time.AuthorsModel import org.wordpress.android.fluxc.model.stats.time.AuthorsModel.Author import org.wordpress.android.fluxc.model.stats.time.AuthorsModel.Post import org.wordpress.android.fluxc.network.utils.StatsGranularity.DAYS -import org.wordpress.android.fluxc.store.stats.StatsStore.OnStatsFetched -import org.wordpress.android.fluxc.store.stats.StatsStore.StatsError -import org.wordpress.android.fluxc.store.stats.StatsStore.StatsErrorType.GENERIC_ERROR +import org.wordpress.android.fluxc.store.StatsStore.OnStatsFetched +import org.wordpress.android.fluxc.store.StatsStore.StatsError +import org.wordpress.android.fluxc.store.StatsStore.StatsErrorType.GENERIC_ERROR import org.wordpress.android.fluxc.store.stats.time.AuthorsStore import org.wordpress.android.test import org.wordpress.android.ui.stats.refresh.lists.BlockList diff --git a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/ClicksUseCaseTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/ClicksUseCaseTest.kt index b1a95107738a..7e3446e62694 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/ClicksUseCaseTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/ClicksUseCaseTest.kt @@ -13,9 +13,9 @@ import org.wordpress.android.fluxc.model.stats.time.ClicksModel import org.wordpress.android.fluxc.model.stats.time.ClicksModel.Click import org.wordpress.android.fluxc.model.stats.time.ClicksModel.Group import org.wordpress.android.fluxc.network.utils.StatsGranularity.DAYS -import org.wordpress.android.fluxc.store.stats.StatsStore.OnStatsFetched -import org.wordpress.android.fluxc.store.stats.StatsStore.StatsError -import org.wordpress.android.fluxc.store.stats.StatsStore.StatsErrorType.GENERIC_ERROR +import org.wordpress.android.fluxc.store.StatsStore.OnStatsFetched +import org.wordpress.android.fluxc.store.StatsStore.StatsError +import org.wordpress.android.fluxc.store.StatsStore.StatsErrorType.GENERIC_ERROR import org.wordpress.android.fluxc.store.stats.time.ClicksStore import org.wordpress.android.test import org.wordpress.android.ui.stats.refresh.lists.BlockList diff --git a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/CountryViewsUseCaseTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/CountryViewsUseCaseTest.kt index 0d944a7cf1c7..5ce56c1ea372 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/CountryViewsUseCaseTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/CountryViewsUseCaseTest.kt @@ -13,9 +13,9 @@ import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.stats.time.CountryViewsModel import org.wordpress.android.fluxc.model.stats.time.CountryViewsModel.Country import org.wordpress.android.fluxc.network.utils.StatsGranularity.DAYS -import org.wordpress.android.fluxc.store.stats.StatsStore.OnStatsFetched -import org.wordpress.android.fluxc.store.stats.StatsStore.StatsError -import org.wordpress.android.fluxc.store.stats.StatsStore.StatsErrorType.GENERIC_ERROR +import org.wordpress.android.fluxc.store.StatsStore.OnStatsFetched +import org.wordpress.android.fluxc.store.StatsStore.StatsError +import org.wordpress.android.fluxc.store.StatsStore.StatsErrorType.GENERIC_ERROR import org.wordpress.android.fluxc.store.stats.time.CountryViewsStore import org.wordpress.android.test import org.wordpress.android.ui.stats.refresh.lists.BlockList diff --git a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/OverviewUseCaseTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/OverviewUseCaseTest.kt index 7e53cd57483a..cfc8e950901b 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/OverviewUseCaseTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/OverviewUseCaseTest.kt @@ -13,9 +13,9 @@ import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.stats.time.VisitsAndViewsModel import org.wordpress.android.fluxc.model.stats.time.VisitsAndViewsModel.PeriodData import org.wordpress.android.fluxc.network.utils.StatsGranularity.DAYS -import org.wordpress.android.fluxc.store.stats.StatsStore.OnStatsFetched -import org.wordpress.android.fluxc.store.stats.StatsStore.StatsError -import org.wordpress.android.fluxc.store.stats.StatsStore.StatsErrorType.GENERIC_ERROR +import org.wordpress.android.fluxc.store.StatsStore.OnStatsFetched +import org.wordpress.android.fluxc.store.StatsStore.StatsError +import org.wordpress.android.fluxc.store.StatsStore.StatsErrorType.GENERIC_ERROR import org.wordpress.android.fluxc.store.stats.time.VisitsAndViewsStore import org.wordpress.android.test import org.wordpress.android.ui.stats.refresh.lists.BlockList diff --git a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/PostsAndPagesUseCaseTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/PostsAndPagesUseCaseTest.kt index 3c2cd8085c3e..f08b3314fc47 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/PostsAndPagesUseCaseTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/PostsAndPagesUseCaseTest.kt @@ -15,9 +15,9 @@ import org.wordpress.android.fluxc.model.stats.time.PostAndPageViewsModel.ViewsT import org.wordpress.android.fluxc.model.stats.time.PostAndPageViewsModel.ViewsType.PAGE import org.wordpress.android.fluxc.model.stats.time.PostAndPageViewsModel.ViewsType.POST import org.wordpress.android.fluxc.network.utils.StatsGranularity.DAYS -import org.wordpress.android.fluxc.store.stats.StatsStore.OnStatsFetched -import org.wordpress.android.fluxc.store.stats.StatsStore.StatsError -import org.wordpress.android.fluxc.store.stats.StatsStore.StatsErrorType.GENERIC_ERROR +import org.wordpress.android.fluxc.store.StatsStore.OnStatsFetched +import org.wordpress.android.fluxc.store.StatsStore.StatsError +import org.wordpress.android.fluxc.store.StatsStore.StatsErrorType.GENERIC_ERROR import org.wordpress.android.fluxc.store.stats.time.PostAndPageViewsStore import org.wordpress.android.test import org.wordpress.android.ui.stats.refresh.lists.BlockList diff --git a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/ReferrersUseCaseTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/ReferrersUseCaseTest.kt index fb4492f4a6d1..999655a839a7 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/ReferrersUseCaseTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/ReferrersUseCaseTest.kt @@ -13,9 +13,9 @@ import org.wordpress.android.fluxc.model.stats.time.ReferrersModel import org.wordpress.android.fluxc.model.stats.time.ReferrersModel.Group import org.wordpress.android.fluxc.model.stats.time.ReferrersModel.Referrer import org.wordpress.android.fluxc.network.utils.StatsGranularity.DAYS -import org.wordpress.android.fluxc.store.stats.StatsStore.OnStatsFetched -import org.wordpress.android.fluxc.store.stats.StatsStore.StatsError -import org.wordpress.android.fluxc.store.stats.StatsStore.StatsErrorType.GENERIC_ERROR +import org.wordpress.android.fluxc.store.StatsStore.OnStatsFetched +import org.wordpress.android.fluxc.store.StatsStore.StatsError +import org.wordpress.android.fluxc.store.StatsStore.StatsErrorType.GENERIC_ERROR import org.wordpress.android.fluxc.store.stats.time.ReferrersStore import org.wordpress.android.test import org.wordpress.android.ui.stats.refresh.lists.BlockList diff --git a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/SearchTermsUseCaseTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/SearchTermsUseCaseTest.kt index e44d18e66898..1b3252ff33bd 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/SearchTermsUseCaseTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/SearchTermsUseCaseTest.kt @@ -13,9 +13,9 @@ import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.stats.time.SearchTermsModel import org.wordpress.android.fluxc.model.stats.time.SearchTermsModel.SearchTerm import org.wordpress.android.fluxc.network.utils.StatsGranularity.DAYS -import org.wordpress.android.fluxc.store.stats.StatsStore.OnStatsFetched -import org.wordpress.android.fluxc.store.stats.StatsStore.StatsError -import org.wordpress.android.fluxc.store.stats.StatsStore.StatsErrorType.GENERIC_ERROR +import org.wordpress.android.fluxc.store.StatsStore.OnStatsFetched +import org.wordpress.android.fluxc.store.StatsStore.StatsError +import org.wordpress.android.fluxc.store.StatsStore.StatsErrorType.GENERIC_ERROR import org.wordpress.android.fluxc.store.stats.time.SearchTermsStore import org.wordpress.android.test import org.wordpress.android.ui.stats.refresh.lists.BlockList diff --git a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/VideoPlaysUseCaseTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/VideoPlaysUseCaseTest.kt index ec8ac8358449..96877d4f9d96 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/VideoPlaysUseCaseTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/granular/usecases/VideoPlaysUseCaseTest.kt @@ -12,9 +12,9 @@ import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.stats.time.VideoPlaysModel import org.wordpress.android.fluxc.model.stats.time.VideoPlaysModel.VideoPlays import org.wordpress.android.fluxc.network.utils.StatsGranularity.DAYS -import org.wordpress.android.fluxc.store.stats.StatsStore.OnStatsFetched -import org.wordpress.android.fluxc.store.stats.StatsStore.StatsError -import org.wordpress.android.fluxc.store.stats.StatsStore.StatsErrorType.GENERIC_ERROR +import org.wordpress.android.fluxc.store.StatsStore.OnStatsFetched +import org.wordpress.android.fluxc.store.StatsStore.StatsError +import org.wordpress.android.fluxc.store.StatsStore.StatsErrorType.GENERIC_ERROR import org.wordpress.android.fluxc.store.stats.time.VideoPlaysStore import org.wordpress.android.test import org.wordpress.android.ui.stats.refresh.lists.BlockList diff --git a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/AllTimeStatsUseCaseTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/AllTimeStatsUseCaseTest.kt index 90ec4e9d1e0d..e8fce3d9e96e 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/AllTimeStatsUseCaseTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/AllTimeStatsUseCaseTest.kt @@ -12,9 +12,9 @@ import org.wordpress.android.R import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.stats.InsightsAllTimeModel import org.wordpress.android.fluxc.store.InsightsStore -import org.wordpress.android.fluxc.store.stats.StatsStore.OnStatsFetched -import org.wordpress.android.fluxc.store.stats.StatsStore.StatsError -import org.wordpress.android.fluxc.store.stats.StatsStore.StatsErrorType.GENERIC_ERROR +import org.wordpress.android.fluxc.store.StatsStore.OnStatsFetched +import org.wordpress.android.fluxc.store.StatsStore.StatsError +import org.wordpress.android.fluxc.store.StatsStore.StatsErrorType.GENERIC_ERROR import org.wordpress.android.test import org.wordpress.android.ui.stats.refresh.lists.BlockList import org.wordpress.android.ui.stats.refresh.lists.Error diff --git a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/CommentsUseCaseTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/CommentsUseCaseTest.kt index afb0c0d35b40..5fc194cea2b6 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/CommentsUseCaseTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/CommentsUseCaseTest.kt @@ -13,9 +13,9 @@ import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.stats.CommentsModel import org.wordpress.android.fluxc.model.stats.CommentsModel.Post import org.wordpress.android.fluxc.store.InsightsStore -import org.wordpress.android.fluxc.store.stats.StatsStore.OnStatsFetched -import org.wordpress.android.fluxc.store.stats.StatsStore.StatsError -import org.wordpress.android.fluxc.store.stats.StatsStore.StatsErrorType.GENERIC_ERROR +import org.wordpress.android.fluxc.store.StatsStore.OnStatsFetched +import org.wordpress.android.fluxc.store.StatsStore.StatsError +import org.wordpress.android.fluxc.store.StatsStore.StatsErrorType.GENERIC_ERROR import org.wordpress.android.test import org.wordpress.android.ui.stats.refresh.lists.BlockList import org.wordpress.android.ui.stats.refresh.lists.Error diff --git a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/FollowersUseCaseTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/FollowersUseCaseTest.kt index a277b15eb057..08925fb09361 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/FollowersUseCaseTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/FollowersUseCaseTest.kt @@ -16,9 +16,9 @@ import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.stats.FollowersModel import org.wordpress.android.fluxc.model.stats.FollowersModel.FollowerModel import org.wordpress.android.fluxc.store.InsightsStore -import org.wordpress.android.fluxc.store.stats.StatsStore.OnStatsFetched -import org.wordpress.android.fluxc.store.stats.StatsStore.StatsError -import org.wordpress.android.fluxc.store.stats.StatsStore.StatsErrorType.GENERIC_ERROR +import org.wordpress.android.fluxc.store.StatsStore.OnStatsFetched +import org.wordpress.android.fluxc.store.StatsStore.StatsError +import org.wordpress.android.fluxc.store.StatsStore.StatsErrorType.GENERIC_ERROR import org.wordpress.android.test import org.wordpress.android.ui.stats.StatsUtilsWrapper import org.wordpress.android.ui.stats.refresh.lists.BlockList diff --git a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/LatestPostSummaryUseCaseTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/LatestPostSummaryUseCaseTest.kt index 802bf2a1a8a9..d73ff2a22fe6 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/LatestPostSummaryUseCaseTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/LatestPostSummaryUseCaseTest.kt @@ -14,9 +14,9 @@ import org.wordpress.android.R import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.stats.InsightsLatestPostModel import org.wordpress.android.fluxc.store.InsightsStore -import org.wordpress.android.fluxc.store.stats.StatsStore.OnStatsFetched -import org.wordpress.android.fluxc.store.stats.StatsStore.StatsError -import org.wordpress.android.fluxc.store.stats.StatsStore.StatsErrorType.GENERIC_ERROR +import org.wordpress.android.fluxc.store.StatsStore.OnStatsFetched +import org.wordpress.android.fluxc.store.StatsStore.StatsError +import org.wordpress.android.fluxc.store.StatsStore.StatsErrorType.GENERIC_ERROR import org.wordpress.android.test import org.wordpress.android.ui.stats.refresh.lists.BlockList import org.wordpress.android.ui.stats.refresh.lists.Error diff --git a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/MostPopularInsightsUseCaseTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/MostPopularInsightsUseCaseTest.kt index 7e1ee9665293..88e9794cac07 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/MostPopularInsightsUseCaseTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/MostPopularInsightsUseCaseTest.kt @@ -11,9 +11,9 @@ import org.wordpress.android.R import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.stats.InsightsMostPopularModel import org.wordpress.android.fluxc.store.InsightsStore -import org.wordpress.android.fluxc.store.stats.StatsStore.OnStatsFetched -import org.wordpress.android.fluxc.store.stats.StatsStore.StatsError -import org.wordpress.android.fluxc.store.stats.StatsStore.StatsErrorType.GENERIC_ERROR +import org.wordpress.android.fluxc.store.StatsStore.OnStatsFetched +import org.wordpress.android.fluxc.store.StatsStore.StatsError +import org.wordpress.android.fluxc.store.StatsStore.StatsErrorType.GENERIC_ERROR import org.wordpress.android.test import org.wordpress.android.ui.stats.refresh.lists.BlockList import org.wordpress.android.ui.stats.refresh.lists.Error diff --git a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/PublicizeUseCaseTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/PublicizeUseCaseTest.kt index eb799e239a08..9a4f45b6f36f 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/PublicizeUseCaseTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/PublicizeUseCaseTest.kt @@ -14,9 +14,9 @@ import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.stats.PublicizeModel import org.wordpress.android.fluxc.model.stats.PublicizeModel.Service import org.wordpress.android.fluxc.store.InsightsStore -import org.wordpress.android.fluxc.store.stats.StatsStore.OnStatsFetched -import org.wordpress.android.fluxc.store.stats.StatsStore.StatsError -import org.wordpress.android.fluxc.store.stats.StatsStore.StatsErrorType.GENERIC_ERROR +import org.wordpress.android.fluxc.store.StatsStore.OnStatsFetched +import org.wordpress.android.fluxc.store.StatsStore.StatsError +import org.wordpress.android.fluxc.store.StatsStore.StatsErrorType.GENERIC_ERROR import org.wordpress.android.test import org.wordpress.android.ui.stats.refresh.lists.BlockList import org.wordpress.android.ui.stats.refresh.lists.Error diff --git a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TagsAndCategoriesUseCaseTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TagsAndCategoriesUseCaseTest.kt index 5881a0044b08..727a13b6df1f 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TagsAndCategoriesUseCaseTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TagsAndCategoriesUseCaseTest.kt @@ -14,9 +14,9 @@ import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.stats.TagsModel import org.wordpress.android.fluxc.model.stats.TagsModel.TagModel import org.wordpress.android.fluxc.store.InsightsStore -import org.wordpress.android.fluxc.store.stats.StatsStore.OnStatsFetched -import org.wordpress.android.fluxc.store.stats.StatsStore.StatsError -import org.wordpress.android.fluxc.store.stats.StatsStore.StatsErrorType.GENERIC_ERROR +import org.wordpress.android.fluxc.store.StatsStore.OnStatsFetched +import org.wordpress.android.fluxc.store.StatsStore.StatsError +import org.wordpress.android.fluxc.store.StatsStore.StatsErrorType.GENERIC_ERROR import org.wordpress.android.test import org.wordpress.android.ui.stats.refresh.lists.BlockList import org.wordpress.android.ui.stats.refresh.lists.Error diff --git a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TodayStatsUseCaseTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TodayStatsUseCaseTest.kt index c5f214174a9f..1facc8da95c9 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TodayStatsUseCaseTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TodayStatsUseCaseTest.kt @@ -11,9 +11,9 @@ import org.wordpress.android.R import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.model.stats.VisitsModel import org.wordpress.android.fluxc.store.InsightsStore -import org.wordpress.android.fluxc.store.stats.StatsStore.OnStatsFetched -import org.wordpress.android.fluxc.store.stats.StatsStore.StatsError -import org.wordpress.android.fluxc.store.stats.StatsStore.StatsErrorType.GENERIC_ERROR +import org.wordpress.android.fluxc.store.StatsStore.OnStatsFetched +import org.wordpress.android.fluxc.store.StatsStore.StatsError +import org.wordpress.android.fluxc.store.StatsStore.StatsErrorType.GENERIC_ERROR import org.wordpress.android.test import org.wordpress.android.ui.stats.refresh.lists.BlockList import org.wordpress.android.ui.stats.refresh.lists.Error diff --git a/build.gradle b/build.gradle index 8db0647389ef..039f65f63dc3 100644 --- a/build.gradle +++ b/build.gradle @@ -92,5 +92,5 @@ subprojects { } ext { - fluxCVersion = 'f62c5ff07d807affc9dd1b5f29d9161250e95c43' + fluxCVersion = 'ef55aed59e8da89837c277654505a6c93282e5a3' } From 814af3fad53b3695f3e56cd07224e182061034f3 Mon Sep 17 00:00:00 2001 From: vojtasmrcek Date: Tue, 22 Jan 2019 17:16:12 +0100 Subject: [PATCH 08/17] Remove background from an imagebutton --- WordPress/src/main/res/layout/stats_block_title_item.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/WordPress/src/main/res/layout/stats_block_title_item.xml b/WordPress/src/main/res/layout/stats_block_title_item.xml index b6c1634fed01..4ff1df73b702 100644 --- a/WordPress/src/main/res/layout/stats_block_title_item.xml +++ b/WordPress/src/main/res/layout/stats_block_title_item.xml @@ -21,6 +21,7 @@ android:id="@+id/menu" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:background="@color/transparent" android:src="@drawable/ic_ellipsis_vertical_grey_darken_48dp" android:contentDescription="@string/stats_item_settings"/> From 9f66dcc75097377bd9319c0d30c58633f1c9d186 Mon Sep 17 00:00:00 2001 From: vojtasmrcek Date: Wed, 23 Jan 2019 09:07:04 +0100 Subject: [PATCH 09/17] Remove unused import --- .../android/ui/stats/refresh/lists/StatsListFragment.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListFragment.kt index 3be935864a52..9cf15d3d2835 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListFragment.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListFragment.kt @@ -14,7 +14,6 @@ import android.support.v7.widget.StaggeredGridLayoutManager import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.widget.Toast import dagger.android.support.DaggerFragment import kotlinx.android.synthetic.main.stats_list_fragment.* import org.wordpress.android.R From e3f45f65b3e31d3e1cf0c4a0bee7e47c13ace34a Mon Sep 17 00:00:00 2001 From: vojtasmrcek Date: Wed, 20 Mar 2019 09:00:42 +0100 Subject: [PATCH 10/17] Update FluxC hash --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 4c08624001e2..a042bc5516e3 100644 --- a/build.gradle +++ b/build.gradle @@ -104,5 +104,5 @@ buildScan { } ext { - fluxCVersion = 'b5f72ff5a2e6657ea6cd5301e07d9c3bd42100e2' + fluxCVersion = '1dfb0d15b16cf5c747287bcf580a22419f1ec7be' } From 3c06109c5f65bfb3dfa46b33d73e2800a6412d07 Mon Sep 17 00:00:00 2001 From: vojtasmrcek Date: Wed, 20 Mar 2019 09:47:17 +0100 Subject: [PATCH 11/17] Fixes after merge --- .../android/ui/stats/refresh/StatsModule.kt | 14 ++++++------- .../ui/stats/refresh/lists/BaseListUseCase.kt | 20 ++++++++++--------- .../stats/refresh/lists/StatsListFragment.kt | 13 +++++++----- .../stats/refresh/lists/StatsListViewModel.kt | 10 ++++------ .../lists/sections/BaseStatsUseCase.kt | 2 +- .../insights/usecases/CommentsUseCase.kt | 2 ++ .../usecases/PostingActivityUseCase.kt | 2 +- 7 files changed, 34 insertions(+), 29 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsModule.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsModule.kt index 3e2701af9d25..f126ccf256b5 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsModule.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsModule.kt @@ -168,21 +168,21 @@ class StatsModule { mainDispatcher, statsSiteProvider, useCases, - { statsStore.getInsights() }, + { statsStore.getInsights(statsSiteProvider.siteModel) }, uiModelMapper::mapInsights, - moveTypeUp = { site, type -> + moveTypeUp = { type -> if (type is InsightsTypes) { - statsStore.moveTypeUp(site, type) + statsStore.moveTypeUp(statsSiteProvider.siteModel, type) } }, - moveTypeDown = { site, type -> + moveTypeDown = { type -> if (type is InsightsTypes) { - statsStore.moveTypeDown(site, type) + statsStore.moveTypeDown(statsSiteProvider.siteModel, type) } }, - removeType = { site, type -> + removeType = { type -> if (type is InsightsTypes) { - statsStore.removeType(site, type) + statsStore.removeType(statsSiteProvider.siteModel, type) } } ) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/BaseListUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/BaseListUseCase.kt index 9c1578884376..464b6ea3867e 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/BaseListUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/BaseListUseCase.kt @@ -7,7 +7,6 @@ import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import org.wordpress.android.R -import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.fluxc.store.StatsStore.StatsTypes import org.wordpress.android.ui.pages.SnackbarMessageHolder import org.wordpress.android.ui.stats.refresh.NavigationTarget @@ -36,9 +35,9 @@ class BaseListUseCase( private val useCases: List>, private val getStatsTypes: suspend () -> List, private val mapUiModel: (useCaseModels: List, showError: (Int) -> Unit) -> UiModel, - private val moveTypeUp: suspend ((site: SiteModel, type: StatsTypes) -> Unit) = { _, _ -> }, - private val moveTypeDown: suspend ((site: SiteModel, type: StatsTypes) -> Unit) = { _, _ -> }, - private val removeType: suspend ((site: SiteModel, type: StatsTypes) -> Unit) = { _, _ -> } + private val moveTypeUp: suspend ((type: StatsTypes) -> Unit) = {}, + private val moveTypeDown: suspend ((type: StatsTypes) -> Unit) = {}, + private val removeType: suspend ((type: StatsTypes) -> Unit) = {} ) { private val blockListData = combineMap( useCases.associateBy { it.type }.mapValues { entry -> entry.value.liveData } @@ -62,7 +61,10 @@ class BaseListUseCase( useCases.map { it.navigationTarget }, distinct = false ) - val menuClick: LiveData = merge(mergeNotNull(useCases.map { it.menuClick }), data) { click, viewModel: UiModel? -> + val menuClick: LiveData = merge( + mergeNotNull(useCases.map { it.menuClick }), + data + ) { click, viewModel: UiModel? -> val success = viewModel as? Success if (click != null && success != null) { val indexOfBlock = success.data.indexOfFirst { it.statsTypes == click.type } @@ -127,11 +129,11 @@ class BaseListUseCase( mutableListSelected.call() } - suspend fun onAction(site: SiteModel, type: StatsTypes, action: Action) { + suspend fun onAction(type: StatsTypes, action: Action) { when (action) { - MOVE_UP -> moveTypeUp(site, type) - MOVE_DOWN -> moveTypeDown(site, type) - REMOVE -> removeType(site, type) + MOVE_UP -> moveTypeUp(type) + MOVE_DOWN -> moveTypeDown(type) + REMOVE -> removeType(type) } } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListFragment.kt index e5b02df935ce..717d10f94364 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListFragment.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListFragment.kt @@ -20,11 +20,14 @@ import kotlinx.android.synthetic.main.stats_error_view.* import kotlinx.android.synthetic.main.stats_list_fragment.* import org.wordpress.android.R import org.wordpress.android.R.dimen +import org.wordpress.android.fluxc.store.StatsStore.StatsTypes import org.wordpress.android.ui.stats.refresh.StatsListItemDecoration +import org.wordpress.android.ui.stats.refresh.lists.StatsListViewModel.Action import org.wordpress.android.ui.stats.refresh.lists.StatsListViewModel.StatsSection import org.wordpress.android.ui.stats.refresh.lists.StatsListViewModel.UiModel import org.wordpress.android.ui.stats.refresh.utils.StatsDateFormatter import org.wordpress.android.ui.stats.refresh.utils.StatsNavigator +import org.wordpress.android.util.Event import org.wordpress.android.util.image.ImageManager import org.wordpress.android.util.observeEvent import javax.inject.Inject @@ -111,10 +114,10 @@ class StatsListFragment : DaggerFragment() { val nonNullActivity = checkNotNull(activity) initializeViews(savedInstanceState) - initializeViewModels(nonNullActivity, savedInstanceState) + initializeViewModels(nonNullActivity) } - private fun initializeViewModels(activity: FragmentActivity, savedInstanceState: Bundle?) { + private fun initializeViewModels(activity: FragmentActivity) { val statsSection = arguments?.getSerializable(typeKey) as StatsSection val viewModelClass = when (statsSection) { @@ -189,15 +192,15 @@ class StatsListFragment : DaggerFragment() { popup.setOnMenuItemClickListener { menuItem -> when (menuItem.itemId) { R.id.action_move_up -> { - viewModel.onAction(site, menuClick.type, Action.MOVE_UP) + viewModel.onAction(menuClick.type, Action.MOVE_UP) true } R.id.action_move_down -> { - viewModel.onAction(site, menuClick.type, Action.MOVE_DOWN) + viewModel.onAction(menuClick.type, Action.MOVE_DOWN) true } R.id.action_remove -> { - viewModel.onAction(site, menuClick.type, Action.REMOVE) + viewModel.onAction(menuClick.type, Action.REMOVE) true } else -> { diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListViewModel.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListViewModel.kt index 27c06638b799..afdceabdcf10 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListViewModel.kt @@ -7,9 +7,9 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.delay import kotlinx.coroutines.launch -import kotlinx.coroutines.launch import org.wordpress.android.R import org.wordpress.android.analytics.AnalyticsTracker +import org.wordpress.android.fluxc.store.StatsStore.StatsTypes import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.refresh.DAY_STATS_USE_CASE import org.wordpress.android.ui.stats.refresh.INSIGHTS_USE_CASE @@ -22,8 +22,6 @@ import org.wordpress.android.ui.stats.refresh.utils.StatsDateSelector import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper import org.wordpress.android.util.mapNullable import org.wordpress.android.util.throttle -import org.wordpress.android.fluxc.model.SiteModel -import org.wordpress.android.fluxc.store.StatsStore.StatsTypes import org.wordpress.android.viewmodel.ScopedViewModel import javax.inject.Inject import javax.inject.Named @@ -119,10 +117,10 @@ abstract class StatsListViewModel( class Error(val message: Int = R.string.stats_loading_error) : UiModel() } - fun onAction(site: SiteModel, type: StatsTypes, action: Action) { + fun onAction(type: StatsTypes, action: Action) { launch { - statsUseCase.onAction(site, type, action) - statsUseCase.refreshTypes(site) + statsUseCase.onAction(type, action) + statsUseCase.refreshTypes() } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/BaseStatsUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/BaseStatsUseCase.kt index d4938e2feea6..9130631cefa0 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/BaseStatsUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/BaseStatsUseCase.kt @@ -8,8 +8,8 @@ import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.withContext import org.wordpress.android.R import org.wordpress.android.fluxc.store.StatsStore.StatsTypes +import org.wordpress.android.ui.stats.refresh.NavigationTarget import org.wordpress.android.ui.stats.refresh.lists.MenuClick -import org.wordpress.android.ui.stats.refresh.lists.NavigationTarget import org.wordpress.android.ui.stats.refresh.lists.sections.BaseStatsUseCase.State.Data import org.wordpress.android.ui.stats.refresh.lists.sections.BaseStatsUseCase.State.Empty import org.wordpress.android.ui.stats.refresh.lists.sections.BaseStatsUseCase.State.Error diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/CommentsUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/CommentsUseCase.kt index dff43c35c6b3..f9e2261b3e94 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/CommentsUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/CommentsUseCase.kt @@ -5,7 +5,9 @@ import org.wordpress.android.R import org.wordpress.android.R.string import org.wordpress.android.analytics.AnalyticsTracker import org.wordpress.android.fluxc.model.stats.CommentsModel +import org.wordpress.android.fluxc.model.stats.LimitMode import org.wordpress.android.fluxc.store.StatsStore.InsightsTypes.COMMENTS +import org.wordpress.android.fluxc.store.stats.insights.CommentsStore import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.refresh.NavigationTarget.ViewCommentsStats import org.wordpress.android.ui.stats.refresh.lists.sections.BaseStatsUseCase.StatefulUseCase diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/PostingActivityUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/PostingActivityUseCase.kt index e74598851d3b..54a908c3c1e5 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/PostingActivityUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/PostingActivityUseCase.kt @@ -44,7 +44,7 @@ class PostingActivityUseCase override fun buildUiModel(domainModel: PostingActivityModel): List { val items = mutableListOf() - items.add(Title(R.string.stats_insights_posting_activity)) + items.add(Title(R.string.stats_insights_posting_activity, menuAction = this::onMenuClick)) val activityItem = postingActivityMapper.buildActivityItem(domainModel.months, domainModel.max) items.add(activityItem) return items From 72e49e85cb6afeb1546ed767750cd32120cc5315 Mon Sep 17 00:00:00 2001 From: vojtasmrcek Date: Thu, 21 Mar 2019 11:32:27 +0100 Subject: [PATCH 12/17] Extract popup handling into a separate class --- .../android/ui/stats/refresh/StatsModule.kt | 18 +---- .../ui/stats/refresh/lists/BaseListUseCase.kt | 33 +------- .../stats/refresh/lists/StatsListFragment.kt | 39 +--------- .../stats/refresh/lists/StatsListViewModel.kt | 15 ++-- .../lists/sections/BaseStatsUseCase.kt | 11 --- .../insights/usecases/AllTimeStatsUseCase.kt | 20 ++++- .../insights/usecases/CommentsUseCase.kt | 26 +++++-- .../insights/usecases/FollowersUseCase.kt | 17 +++- .../usecases/LatestPostSummaryUseCase.kt | 13 +++- .../usecases/MostPopularInsightsUseCase.kt | 19 ++++- .../usecases/PostingActivityUseCase.kt | 20 ++++- .../insights/usecases/PublicizeUseCase.kt | 19 ++++- .../usecases/TagsAndCategoriesUseCase.kt | 19 ++++- .../insights/usecases/TodayStatsUseCase.kt | 18 ++++- .../refresh/utils/ItemPopupMenuHandler.kt | 78 +++++++++++++++++++ .../usecases/AllTimeStatsUseCaseTest.kt | 5 +- .../insights/usecases/CommentsUseCaseTest.kt | 5 +- .../insights/usecases/FollowersUseCaseTest.kt | 22 +++--- .../usecases/LatestPostSummaryUseCaseTest.kt | 5 +- .../MostPopularInsightsUseCaseTest.kt | 5 +- .../insights/usecases/PublicizeUseCaseTest.kt | 3 + .../usecases/TagsAndCategoriesUseCaseTest.kt | 3 + .../usecases/TodayStatsUseCaseTest.kt | 5 +- 23 files changed, 274 insertions(+), 144 deletions(-) create mode 100644 WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/utils/ItemPopupMenuHandler.kt diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsModule.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsModule.kt index f126ccf256b5..113637c53754 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsModule.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/StatsModule.kt @@ -11,7 +11,6 @@ import org.wordpress.android.fluxc.network.utils.StatsGranularity.MONTHS import org.wordpress.android.fluxc.network.utils.StatsGranularity.WEEKS import org.wordpress.android.fluxc.network.utils.StatsGranularity.YEARS import org.wordpress.android.fluxc.store.StatsStore -import org.wordpress.android.fluxc.store.StatsStore.InsightsTypes import org.wordpress.android.modules.BG_THREAD import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.refresh.lists.BaseListUseCase @@ -169,22 +168,7 @@ class StatsModule { statsSiteProvider, useCases, { statsStore.getInsights(statsSiteProvider.siteModel) }, - uiModelMapper::mapInsights, - moveTypeUp = { type -> - if (type is InsightsTypes) { - statsStore.moveTypeUp(statsSiteProvider.siteModel, type) - } - }, - moveTypeDown = { type -> - if (type is InsightsTypes) { - statsStore.moveTypeDown(statsSiteProvider.siteModel, type) - } - }, - removeType = { type -> - if (type is InsightsTypes) { - statsStore.removeType(statsSiteProvider.siteModel, type) - } - } + uiModelMapper::mapInsights ) } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/BaseListUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/BaseListUseCase.kt index 464b6ea3867e..29c43b9ea92b 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/BaseListUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/BaseListUseCase.kt @@ -10,12 +10,7 @@ import org.wordpress.android.R import org.wordpress.android.fluxc.store.StatsStore.StatsTypes import org.wordpress.android.ui.pages.SnackbarMessageHolder import org.wordpress.android.ui.stats.refresh.NavigationTarget -import org.wordpress.android.ui.stats.refresh.lists.StatsListViewModel.Action -import org.wordpress.android.ui.stats.refresh.lists.StatsListViewModel.Action.MOVE_DOWN -import org.wordpress.android.ui.stats.refresh.lists.StatsListViewModel.Action.MOVE_UP -import org.wordpress.android.ui.stats.refresh.lists.StatsListViewModel.Action.REMOVE import org.wordpress.android.ui.stats.refresh.lists.StatsListViewModel.UiModel -import org.wordpress.android.ui.stats.refresh.lists.StatsListViewModel.UiModel.Success import org.wordpress.android.ui.stats.refresh.lists.sections.BaseStatsUseCase import org.wordpress.android.ui.stats.refresh.lists.sections.BaseStatsUseCase.UseCaseModel import org.wordpress.android.ui.stats.refresh.utils.StatsSiteProvider @@ -24,7 +19,6 @@ import org.wordpress.android.util.PackageUtils import org.wordpress.android.util.combineMap import org.wordpress.android.util.distinct import org.wordpress.android.util.map -import org.wordpress.android.util.merge import org.wordpress.android.util.mergeNotNull import org.wordpress.android.viewmodel.SingleLiveEvent @@ -34,10 +28,7 @@ class BaseListUseCase( private val statsSiteProvider: StatsSiteProvider, private val useCases: List>, private val getStatsTypes: suspend () -> List, - private val mapUiModel: (useCaseModels: List, showError: (Int) -> Unit) -> UiModel, - private val moveTypeUp: suspend ((type: StatsTypes) -> Unit) = {}, - private val moveTypeDown: suspend ((type: StatsTypes) -> Unit) = {}, - private val removeType: suspend ((type: StatsTypes) -> Unit) = {} + private val mapUiModel: (useCaseModels: List, showError: (Int) -> Unit) -> UiModel ) { private val blockListData = combineMap( useCases.associateBy { it.type }.mapValues { entry -> entry.value.liveData } @@ -61,20 +52,6 @@ class BaseListUseCase( useCases.map { it.navigationTarget }, distinct = false ) - val menuClick: LiveData = merge( - mergeNotNull(useCases.map { it.menuClick }), - data - ) { click, viewModel: UiModel? -> - val success = viewModel as? Success - if (click != null && success != null) { - val indexOfBlock = success.data.indexOfFirst { it.statsTypes == click.type } - click.showUpAction = indexOfBlock > 0 - click.showDownAction = indexOfBlock < success.data.size - 1 - click - } else { - null - } - } private val mutableSnackbarMessage = MutableLiveData() val snackbarMessage: LiveData = mutableSnackbarMessage.map { @@ -128,12 +105,4 @@ class BaseListUseCase( fun onListSelected() { mutableListSelected.call() } - - suspend fun onAction(type: StatsTypes, action: Action) { - when (action) { - MOVE_UP -> moveTypeUp(type) - MOVE_DOWN -> moveTypeDown(type) - REMOVE -> removeType(type) - } - } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListFragment.kt index 717d10f94364..df877d8d860c 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListFragment.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListFragment.kt @@ -7,7 +7,6 @@ import android.os.Bundle import android.os.Parcelable import android.support.v4.app.FragmentActivity import android.support.v7.widget.LinearLayoutManager -import android.support.v7.widget.PopupMenu import android.support.v7.widget.RecyclerView import android.support.v7.widget.RecyclerView.LayoutManager import android.support.v7.widget.StaggeredGridLayoutManager @@ -20,14 +19,11 @@ import kotlinx.android.synthetic.main.stats_error_view.* import kotlinx.android.synthetic.main.stats_list_fragment.* import org.wordpress.android.R import org.wordpress.android.R.dimen -import org.wordpress.android.fluxc.store.StatsStore.StatsTypes import org.wordpress.android.ui.stats.refresh.StatsListItemDecoration -import org.wordpress.android.ui.stats.refresh.lists.StatsListViewModel.Action import org.wordpress.android.ui.stats.refresh.lists.StatsListViewModel.StatsSection import org.wordpress.android.ui.stats.refresh.lists.StatsListViewModel.UiModel import org.wordpress.android.ui.stats.refresh.utils.StatsDateFormatter import org.wordpress.android.ui.stats.refresh.utils.StatsNavigator -import org.wordpress.android.util.Event import org.wordpress.android.util.image.ImageManager import org.wordpress.android.util.observeEvent import javax.inject.Inject @@ -182,32 +178,8 @@ class StatsListFragment : DaggerFragment() { viewModel.onListSelected() }) - viewModel.menuClick.observeEvent(this) { menuClick -> - val popup = PopupMenu(activity, menuClick.view) - val popupMenu = popup.menu - popup.inflate(R.menu.menu_stats_item) - popupMenu.findItem(R.id.action_move_up).isVisible = menuClick.showUpAction - popupMenu.findItem(R.id.action_move_down).isVisible = menuClick.showDownAction - popup.show() - popup.setOnMenuItemClickListener { menuItem -> - when (menuItem.itemId) { - R.id.action_move_up -> { - viewModel.onAction(menuClick.type, Action.MOVE_UP) - true - } - R.id.action_move_down -> { - viewModel.onAction(menuClick.type, Action.MOVE_DOWN) - true - } - R.id.action_remove -> { - viewModel.onAction(menuClick.type, Action.REMOVE) - true - } - else -> { - false - } - } - } + viewModel.typeMoved?.observeEvent(this) { + viewModel.onTypeMoved() true } } @@ -228,10 +200,3 @@ class StatsListFragment : DaggerFragment() { layoutManager?.onRestoreInstanceState(recyclerViewState) } } - -data class MenuClick( - val view: View, - val type: StatsTypes, - var showUpAction: Boolean = true, - var showDownAction: Boolean = true -) : Event() diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListViewModel.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListViewModel.kt index afdceabdcf10..00d20794df2d 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListViewModel.kt @@ -9,7 +9,6 @@ import kotlinx.coroutines.delay import kotlinx.coroutines.launch import org.wordpress.android.R import org.wordpress.android.analytics.AnalyticsTracker -import org.wordpress.android.fluxc.store.StatsStore.StatsTypes import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.refresh.DAY_STATS_USE_CASE import org.wordpress.android.ui.stats.refresh.INSIGHTS_USE_CASE @@ -18,6 +17,7 @@ import org.wordpress.android.ui.stats.refresh.NavigationTarget import org.wordpress.android.ui.stats.refresh.StatsViewModel.DateSelectorUiModel import org.wordpress.android.ui.stats.refresh.WEEK_STATS_USE_CASE import org.wordpress.android.ui.stats.refresh.YEAR_STATS_USE_CASE +import org.wordpress.android.ui.stats.refresh.utils.ItemPopupMenuHandler import org.wordpress.android.ui.stats.refresh.utils.StatsDateSelector import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper import org.wordpress.android.util.mapNullable @@ -32,7 +32,8 @@ abstract class StatsListViewModel( defaultDispatcher: CoroutineDispatcher, private val statsUseCase: BaseListUseCase, private val analyticsTracker: AnalyticsTrackerWrapper, - private val dateSelector: StatsDateSelector + private val dateSelector: StatsDateSelector, + private val popupMenuHandler: ItemPopupMenuHandler? = null ) : ScopedViewModel(defaultDispatcher) { private var trackJob: Job? = null private var isInitialized = false @@ -57,7 +58,7 @@ abstract class StatsListViewModel( it ?: DateSelectorUiModel(false) } - val menuClick: LiveData = statsUseCase.menuClick + val typeMoved = popupMenuHandler?.typeMoved override fun onCleared() { statsUseCase.onCleared() @@ -117,9 +118,8 @@ abstract class StatsListViewModel( class Error(val message: Int = R.string.stats_loading_error) : UiModel() } - fun onAction(type: StatsTypes, action: Action) { + fun onTypeMoved() { launch { - statsUseCase.onAction(type, action) statsUseCase.refreshTypes() } } @@ -134,8 +134,9 @@ class InsightsListViewModel @Named(UI_THREAD) mainDispatcher: CoroutineDispatcher, @Named(INSIGHTS_USE_CASE) private val insightsUseCase: BaseListUseCase, analyticsTracker: AnalyticsTrackerWrapper, - dateSelector: StatsDateSelector -) : StatsListViewModel(mainDispatcher, insightsUseCase, analyticsTracker, dateSelector) + dateSelector: StatsDateSelector, + popupMenuHandler: ItemPopupMenuHandler +) : StatsListViewModel(mainDispatcher, insightsUseCase, analyticsTracker, dateSelector, popupMenuHandler) class YearsListViewModel @Inject constructor( @Named(UI_THREAD) mainDispatcher: CoroutineDispatcher, diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/BaseStatsUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/BaseStatsUseCase.kt index 9130631cefa0..1fa35c58ec91 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/BaseStatsUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/BaseStatsUseCase.kt @@ -3,13 +3,11 @@ package org.wordpress.android.ui.stats.refresh.lists.sections import android.arch.lifecycle.LiveData import android.arch.lifecycle.MediatorLiveData import android.arch.lifecycle.MutableLiveData -import android.view.View import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.withContext import org.wordpress.android.R import org.wordpress.android.fluxc.store.StatsStore.StatsTypes import org.wordpress.android.ui.stats.refresh.NavigationTarget -import org.wordpress.android.ui.stats.refresh.lists.MenuClick import org.wordpress.android.ui.stats.refresh.lists.sections.BaseStatsUseCase.State.Data import org.wordpress.android.ui.stats.refresh.lists.sections.BaseStatsUseCase.State.Empty import org.wordpress.android.ui.stats.refresh.lists.sections.BaseStatsUseCase.State.Error @@ -58,8 +56,6 @@ abstract class BaseStatsUseCase( private val mutableNavigationTarget = MutableLiveData() val navigationTarget: LiveData = mutableNavigationTarget - private val mutableMenuClick = MutableLiveData() - val menuClick: LiveData = mutableMenuClick /** * Fetches data either from a local cache or from remote API @@ -123,13 +119,6 @@ abstract class BaseStatsUseCase( uiState.value = newState ?: uiState.value } - /** - * Trigger this method when the item menu button is clicked - */ - fun onMenuClick(view: View) { - mutableMenuClick.value = MenuClick(view, type) - } - /** * Trigger this method when updating only a part of UI state. * @param update function diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/AllTimeStatsUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/AllTimeStatsUseCase.kt index b885b4a17757..a927d9f3d25e 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/AllTimeStatsUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/AllTimeStatsUseCase.kt @@ -1,7 +1,9 @@ package org.wordpress.android.ui.stats.refresh.lists.sections.insights.usecases +import android.view.View import kotlinx.coroutines.CoroutineDispatcher import org.wordpress.android.R +import org.wordpress.android.R.string import org.wordpress.android.fluxc.model.stats.InsightsAllTimeModel import org.wordpress.android.fluxc.store.StatsStore.InsightsTypes.ALL_TIME_STATS import org.wordpress.android.fluxc.store.stats.insights.AllTimeInsightsStore @@ -11,8 +13,9 @@ import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Empty import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.ListItemWithIcon import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Title -import org.wordpress.android.ui.stats.refresh.utils.StatsSiteProvider +import org.wordpress.android.ui.stats.refresh.utils.ItemPopupMenuHandler import org.wordpress.android.ui.stats.refresh.utils.StatsDateFormatter +import org.wordpress.android.ui.stats.refresh.utils.StatsSiteProvider import org.wordpress.android.ui.stats.refresh.utils.toFormattedString import javax.inject.Inject import javax.inject.Named @@ -22,10 +25,15 @@ class AllTimeStatsUseCase @Named(UI_THREAD) private val mainDispatcher: CoroutineDispatcher, private val allTimeStore: AllTimeInsightsStore, private val statsSiteProvider: StatsSiteProvider, - private val statsDateFormatter: StatsDateFormatter + private val statsDateFormatter: StatsDateFormatter, + private val popupMenuHandler: ItemPopupMenuHandler ) : StatelessUseCase(ALL_TIME_STATS, mainDispatcher) { override fun buildLoadingItem(): List = listOf(Title(R.string.stats_insights_all_time_stats)) + override fun buildEmptyItem(): List { + return listOf(buildTitle(), Empty()) + } + override suspend fun loadCachedData(): InsightsAllTimeModel? { return allTimeStore.getAllTimeInsights(statsSiteProvider.siteModel) } @@ -49,7 +57,7 @@ class AllTimeStatsUseCase override fun buildUiModel(domainModel: InsightsAllTimeModel): List { val items = mutableListOf() - items.add(Title(R.string.stats_insights_all_time_stats, menuAction = this::onMenuClick)) + items.add(buildTitle()) val hasPosts = domainModel.posts > 0 val hasViews = domainModel.views > 0 @@ -102,4 +110,10 @@ class AllTimeStatsUseCase } return items } + + private fun buildTitle() = Title(string.stats_insights_all_time_stats, menuAction = this::onMenuClick) + + private fun onMenuClick(view: View) { + popupMenuHandler.onMenuClick(view, type) + } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/CommentsUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/CommentsUseCase.kt index f9e2261b3e94..f0309244ba9f 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/CommentsUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/CommentsUseCase.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 org.wordpress.android.R import org.wordpress.android.R.string @@ -24,6 +25,7 @@ import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Navig import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.TabsItem import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Title import org.wordpress.android.ui.stats.refresh.lists.sections.insights.InsightUseCaseFactory +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 org.wordpress.android.util.analytics.AnalyticsTrackerWrapper @@ -40,7 +42,8 @@ class CommentsUseCase private val commentsStore: CommentsStore, private val statsSiteProvider: StatsSiteProvider, private val analyticsTracker: AnalyticsTrackerWrapper, - private val useCaseMode: UseCaseMode + private val useCaseMode: UseCaseMode, + private val popupMenuHandler: ItemPopupMenuHandler ) : StatefulUseCase(COMMENTS, mainDispatcher, 0) { override suspend fun fetchRemoteData(forced: Boolean): State { val fetchMode = if (useCaseMode == VIEW_ALL) LimitMode.All else LimitMode.Top(BLOCK_ITEM_COUNT) @@ -52,7 +55,8 @@ class CommentsUseCase error != null -> State.Error(error.message ?: error.type.name) model != null && (model.authors.isNotEmpty() || model.posts.isNotEmpty()) -> State.Data( model, - cached = response.cached) + cached = response.cached + ) else -> State.Empty() } } @@ -64,11 +68,15 @@ class CommentsUseCase override fun buildLoadingItem(): List = listOf(Title(R.string.stats_view_comments)) + override fun buildEmptyItem(): List { + return listOf(buildTitle(), Empty()) + } + override fun buildStatefulUiModel(model: CommentsModel, uiState: Int): List { val items = mutableListOf() if (useCaseMode == BLOCK) { - items.add(Title(string.stats_view_comments, menuAction = this::onMenuClick)) + items.add(buildTitle()) } if (model.authors.isNotEmpty() || model.posts.isNotEmpty()) { @@ -99,6 +107,8 @@ class CommentsUseCase return items } + private fun buildTitle() = Title(string.stats_view_comments, menuAction = this::onMenuClick) + private fun buildAuthorsTab(authors: List): List { val mutableItems = mutableListOf() if (authors.isNotEmpty()) { @@ -140,12 +150,17 @@ class CommentsUseCase navigateTo(ViewCommentsStats(selectedTab)) } + private fun onMenuClick(view: View) { + popupMenuHandler.onMenuClick(view, type) + } + class CommentsUseCaseFactory @Inject constructor( @Named(UI_THREAD) private val mainDispatcher: CoroutineDispatcher, private val commentsStore: CommentsStore, private val statsSiteProvider: StatsSiteProvider, - private val analyticsTracker: AnalyticsTrackerWrapper + private val analyticsTracker: AnalyticsTrackerWrapper, + private val popupMenuHandler: ItemPopupMenuHandler ) : InsightUseCaseFactory { override fun build(useCaseMode: UseCaseMode) = CommentsUseCase( @@ -153,7 +168,8 @@ class CommentsUseCase commentsStore, statsSiteProvider, analyticsTracker, - useCaseMode + useCaseMode, + popupMenuHandler ) } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/FollowersUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/FollowersUseCase.kt index 6474e75f80e0..34d1ecc7897c 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/FollowersUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/FollowersUseCase.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 @@ -34,6 +35,7 @@ import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.TabsI import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Title import org.wordpress.android.ui.stats.refresh.lists.sections.insights.InsightUseCaseFactory import org.wordpress.android.ui.stats.refresh.lists.sections.insights.usecases.FollowersUseCase.FollowersUiState +import org.wordpress.android.ui.stats.refresh.utils.ItemPopupMenuHandler import org.wordpress.android.ui.stats.refresh.utils.StatsSiteProvider import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper import org.wordpress.android.viewmodel.ResourceProvider @@ -52,6 +54,7 @@ class FollowersUseCase private val statsUtilsWrapper: StatsUtilsWrapper, private val resourceProvider: ResourceProvider, private val analyticsTracker: AnalyticsTrackerWrapper, + private val popupMenuHandler: ItemPopupMenuHandler, private val useCaseMode: UseCaseMode ) : StatefulUseCase, FollowersUiState>( FOLLOWERS, @@ -119,6 +122,10 @@ class FollowersUseCase override fun buildLoadingItem(): List = listOf(Title(R.string.stats_view_followers)) + override fun buildEmptyItem(): List { + return listOf(buildTitle(), Empty()) + } + override fun buildStatefulUiModel( domainModel: Pair, uiState: FollowersUiState @@ -128,7 +135,7 @@ class FollowersUseCase val items = mutableListOf() if (useCaseMode == BLOCK) { - items.add(Title(string.stats_view_followers, menuAction = this::onMenuClick)) + items.add(buildTitle()) } if (domainModel.first.followers.isNotEmpty() || domainModel.second.followers.isNotEmpty()) { @@ -169,6 +176,8 @@ class FollowersUseCase return items } + private fun buildTitle() = Title(string.stats_view_followers, menuAction = this::onMenuClick) + private fun loadMore() { GlobalScope.launch(bgDispatcher) { val state = fetchData(true, PagedMode(itemsToLoad, true)) @@ -215,6 +224,10 @@ class FollowersUseCase data class FollowersUiState(val selectedTab: Int = 0, val isLoading: Boolean = false) + private fun onMenuClick(view: View) { + popupMenuHandler.onMenuClick(view, type) + } + class FollowersUseCaseFactory @Inject constructor( @Named(UI_THREAD) private val mainDispatcher: CoroutineDispatcher, @@ -223,6 +236,7 @@ class FollowersUseCase private val statsSiteProvider: StatsSiteProvider, private val statsUtilsWrapper: StatsUtilsWrapper, private val resourceProvider: ResourceProvider, + private val popupMenuHandler: ItemPopupMenuHandler, private val analyticsTracker: AnalyticsTrackerWrapper ) : InsightUseCaseFactory { override fun build(useCaseMode: UseCaseMode) = @@ -234,6 +248,7 @@ class FollowersUseCase statsUtilsWrapper, resourceProvider, analyticsTracker, + popupMenuHandler, useCaseMode ) } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/LatestPostSummaryUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/LatestPostSummaryUseCase.kt index c986393fc760..fc9b7138a93d 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/LatestPostSummaryUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/LatestPostSummaryUseCase.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 org.wordpress.android.R import org.wordpress.android.R.string @@ -23,6 +24,7 @@ import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Navig import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Title import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.ValueItem import org.wordpress.android.ui.stats.refresh.utils.HUNDRED_THOUSAND +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 org.wordpress.android.util.analytics.AnalyticsTrackerWrapper @@ -35,7 +37,8 @@ class LatestPostSummaryUseCase private val latestPostStore: LatestPostInsightsStore, private val statsSiteProvider: StatsSiteProvider, private val latestPostSummaryMapper: LatestPostSummaryMapper, - private val analyticsTracker: AnalyticsTrackerWrapper + private val analyticsTracker: AnalyticsTrackerWrapper, + private val popupMenuHandler: ItemPopupMenuHandler ) : StatelessUseCase(LATEST_POST_SUMMARY, mainDispatcher) { override suspend fun loadCachedData(): InsightsLatestPostModel? { return latestPostStore.getLatestPostInsights(statsSiteProvider.siteModel) @@ -67,7 +70,7 @@ class LatestPostSummaryUseCase private fun buildNullableUiModel(domainModel: InsightsLatestPostModel?): MutableList { val items = mutableListOf() - items.add(Title(string.stats_insights_latest_post_summary, menuAction = this::onMenuClick)) + items.add(buildTitle()) items.add(latestPostSummaryMapper.buildMessageItem(domainModel, this::onLinkClicked)) if (domainModel != null && domainModel.hasData()) { items.add( @@ -100,6 +103,8 @@ class LatestPostSummaryUseCase return items } + private fun buildTitle() = Title(string.stats_insights_latest_post_summary, menuAction = this::onMenuClick) + private fun InsightsLatestPostModel.hasData() = this.postViewsCount > 0 || this.postCommentCount > 0 || this.postLikeCount > 0 @@ -154,6 +159,10 @@ class LatestPostSummaryUseCase navigateTo(ViewPost(params.postId, params.postUrl)) } + private fun onMenuClick(view: View) { + popupMenuHandler.onMenuClick(view, type) + } + data class LinkClickParams(val postId: Long, val postUrl: String) data class SharePostParams(val postUrl: String, val postTitle: String) data class ViewMoreParams(val postId: Long, val postTitle: String, val postUrl: String) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/MostPopularInsightsUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/MostPopularInsightsUseCase.kt index 6bd94723667e..c939ea1e9a79 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/MostPopularInsightsUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/MostPopularInsightsUseCase.kt @@ -1,16 +1,20 @@ package org.wordpress.android.ui.stats.refresh.lists.sections.insights.usecases +import android.view.View import kotlinx.coroutines.CoroutineDispatcher import org.wordpress.android.R +import org.wordpress.android.R.string import org.wordpress.android.fluxc.model.stats.InsightsMostPopularModel import org.wordpress.android.fluxc.store.StatsStore.InsightsTypes.MOST_POPULAR_DAY_AND_HOUR import org.wordpress.android.fluxc.store.stats.insights.MostPopularInsightsStore import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.refresh.lists.sections.BaseStatsUseCase.StatelessUseCase import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem +import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Empty import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.ListItemWithIcon import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Title import org.wordpress.android.ui.stats.refresh.utils.DateUtils +import org.wordpress.android.ui.stats.refresh.utils.ItemPopupMenuHandler import org.wordpress.android.ui.stats.refresh.utils.StatsSiteProvider import org.wordpress.android.viewmodel.ResourceProvider import javax.inject.Inject @@ -23,7 +27,8 @@ class MostPopularInsightsUseCase private val mostPopularStore: MostPopularInsightsStore, private val statsSiteProvider: StatsSiteProvider, private val dateUtils: DateUtils, - private val resourceProvider: ResourceProvider + private val resourceProvider: ResourceProvider, + private val popupMenuHandler: ItemPopupMenuHandler ) : StatelessUseCase(MOST_POPULAR_DAY_AND_HOUR, mainDispatcher) { override suspend fun loadCachedData(): InsightsMostPopularModel? { return mostPopularStore.getMostPopularInsights(statsSiteProvider.siteModel) @@ -43,9 +48,13 @@ class MostPopularInsightsUseCase override fun buildLoadingItem(): List = listOf(Title(R.string.stats_insights_popular)) + override fun buildEmptyItem(): List { + return listOf(buildTitle(), Empty()) + } + override fun buildUiModel(domainModel: InsightsMostPopularModel): List { val items = mutableListOf() - items.add(Title(R.string.stats_insights_popular, menuAction = this::onMenuClick)) + items.add(buildTitle()) items.add( ListItemWithIcon( icon = R.drawable.ic_calendar_white_24dp, @@ -70,4 +79,10 @@ class MostPopularInsightsUseCase ) return items } + + private fun buildTitle() = Title(string.stats_insights_popular, menuAction = this::onMenuClick) + + private fun onMenuClick(view: View) { + popupMenuHandler.onMenuClick(view, type) + } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/PostingActivityUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/PostingActivityUseCase.kt index 54a908c3c1e5..32ca6117dce7 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/PostingActivityUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/PostingActivityUseCase.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 org.wordpress.android.R import org.wordpress.android.fluxc.model.stats.insights.PostingActivityModel @@ -9,7 +10,9 @@ import org.wordpress.android.fluxc.store.stats.insights.PostingActivityStore import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.stats.refresh.lists.sections.BaseStatsUseCase.StatelessUseCase import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem +import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Empty import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Title +import org.wordpress.android.ui.stats.refresh.utils.ItemPopupMenuHandler import org.wordpress.android.ui.stats.refresh.utils.StatsSiteProvider import java.util.Calendar import javax.inject.Inject @@ -20,9 +23,14 @@ class PostingActivityUseCase @Named(UI_THREAD) private val mainDispatcher: CoroutineDispatcher, private val store: PostingActivityStore, private val statsSiteProvider: StatsSiteProvider, - private val postingActivityMapper: PostingActivityMapper + private val postingActivityMapper: PostingActivityMapper, + private val popupMenuHandler: ItemPopupMenuHandler ) : StatelessUseCase(POSTING_ACTIVITY, mainDispatcher) { - override fun buildLoadingItem(): List = listOf(Title(R.string.stats_insights_all_time_stats)) + override fun buildLoadingItem(): List = listOf(Title(R.string.stats_insights_posting_activity)) + + override fun buildEmptyItem(): List { + return listOf(buildTitle(), Empty()) + } override suspend fun loadCachedData(): PostingActivityModel? { return store.getPostingActivity(statsSiteProvider.siteModel, getStartDate(), getEndDate()) @@ -44,12 +52,14 @@ class PostingActivityUseCase override fun buildUiModel(domainModel: PostingActivityModel): List { val items = mutableListOf() - items.add(Title(R.string.stats_insights_posting_activity, menuAction = this::onMenuClick)) + items.add(buildTitle()) val activityItem = postingActivityMapper.buildActivityItem(domainModel.months, domainModel.max) items.add(activityItem) return items } + private fun buildTitle() = Title(R.string.stats_insights_posting_activity, menuAction = this::onMenuClick) + private fun getEndDate(): Day { val endDate = Calendar.getInstance() return Day( @@ -68,4 +78,8 @@ class PostingActivityUseCase startDate.getActualMinimum(Calendar.DAY_OF_MONTH) ) } + + private fun onMenuClick(view: View) { + popupMenuHandler.onMenuClick(view, type) + } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/PublicizeUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/PublicizeUseCase.kt index c3eb7196c648..5abaef887398 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/PublicizeUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/PublicizeUseCase.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 org.wordpress.android.R import org.wordpress.android.R.string @@ -20,6 +21,7 @@ import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Link import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.NavigationAction import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Title import org.wordpress.android.ui.stats.refresh.lists.sections.insights.InsightUseCaseFactory +import org.wordpress.android.ui.stats.refresh.utils.ItemPopupMenuHandler import org.wordpress.android.ui.stats.refresh.utils.ServiceMapper import org.wordpress.android.ui.stats.refresh.utils.StatsSiteProvider import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper @@ -36,6 +38,7 @@ class PublicizeUseCase private val statsSiteProvider: StatsSiteProvider, private val mapper: ServiceMapper, private val analyticsTracker: AnalyticsTrackerWrapper, + private val popupMenuHandler: ItemPopupMenuHandler, private val useCaseMode: UseCaseMode ) : StatelessUseCase(PUBLICIZE, mainDispatcher) { private val itemsToLoad = if (useCaseMode == VIEW_ALL) VIEW_ALL_ITEM_COUNT else BLOCK_ITEM_COUNT @@ -67,11 +70,15 @@ class PublicizeUseCase override fun buildLoadingItem(): List = listOf(Title(R.string.stats_view_publicize)) + override fun buildEmptyItem(): List { + return listOf(buildTitle(), Empty()) + } + override fun buildUiModel(domainModel: PublicizeModel): List { val items = mutableListOf() if (useCaseMode == BLOCK) { - items.add(Title(string.stats_view_publicize, menuAction = this::onMenuClick)) + items.add(buildTitle()) } if (domainModel.services.isEmpty()) { @@ -91,18 +98,25 @@ class PublicizeUseCase return items } + private fun buildTitle() = Title(R.string.stats_view_publicize, menuAction = this::onMenuClick) + private fun onLinkClick() { analyticsTracker.track(AnalyticsTracker.Stat.STATS_PUBLICIZE_VIEW_MORE_TAPPED) return navigateTo(ViewPublicizeStats()) } + private fun onMenuClick(view: View) { + popupMenuHandler.onMenuClick(view, type) + } + class PublicizeUseCaseFactory @Inject constructor( @Named(UI_THREAD) private val mainDispatcher: CoroutineDispatcher, private val publicizeStore: PublicizeStore, private val statsSiteProvider: StatsSiteProvider, private val mapper: ServiceMapper, - private val analyticsTracker: AnalyticsTrackerWrapper + private val analyticsTracker: AnalyticsTrackerWrapper, + private val popupMenuHandler: ItemPopupMenuHandler ) : InsightUseCaseFactory { override fun build(useCaseMode: UseCaseMode) = PublicizeUseCase( @@ -111,6 +125,7 @@ class PublicizeUseCase statsSiteProvider, mapper, analyticsTracker, + popupMenuHandler, useCaseMode ) } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TagsAndCategoriesUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TagsAndCategoriesUseCase.kt index e1992f69c68e..c59eed254dcf 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TagsAndCategoriesUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TagsAndCategoriesUseCase.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 org.wordpress.android.R import org.wordpress.android.R.drawable @@ -28,6 +29,7 @@ import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Navig import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Title import org.wordpress.android.ui.stats.refresh.lists.sections.insights.InsightUseCaseFactory import org.wordpress.android.ui.stats.refresh.lists.sections.insights.usecases.TagsAndCategoriesUseCase.TagsAndCategoriesUiState +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 org.wordpress.android.util.analytics.AnalyticsTrackerWrapper @@ -45,6 +47,7 @@ class TagsAndCategoriesUseCase private val statsSiteProvider: StatsSiteProvider, private val resourceProvider: ResourceProvider, private val analyticsTracker: AnalyticsTrackerWrapper, + private val popupMenuHandler: ItemPopupMenuHandler, private val useCaseMode: UseCaseMode ) : StatefulUseCase( TAGS_AND_CATEGORIES, @@ -71,11 +74,15 @@ class TagsAndCategoriesUseCase override fun buildLoadingItem(): List = listOf(Title(R.string.stats_insights_tags_and_categories)) + override fun buildEmptyItem(): List { + return listOf(buildTitle(), Empty()) + } + override fun buildStatefulUiModel(domainModel: TagsModel, uiState: TagsAndCategoriesUiState): List { val items = mutableListOf() if (useCaseMode == BLOCK) { - items.add(Title(R.string.stats_insights_tags_and_categories, menuAction = this::onMenuClick)) + items.add(buildTitle()) } if (domainModel.tags.isEmpty()) { @@ -122,6 +129,8 @@ class TagsAndCategoriesUseCase return items } + private fun buildTitle() = Title(string.stats_insights_tags_and_categories, menuAction = this::onMenuClick) + private fun areTagsEqual(tagA: TagModel, tagB: TagModel?): Boolean { return tagA.items == tagB?.items && tagA.views == tagB.views } @@ -175,6 +184,10 @@ class TagsAndCategoriesUseCase navigateTo(ViewTag(link)) } + private fun onMenuClick(view: View) { + popupMenuHandler.onMenuClick(view, type) + } + data class TagsAndCategoriesUiState(val expandedTag: TagModel? = null) class TagsAndCategoriesUseCaseFactory @@ -183,7 +196,8 @@ class TagsAndCategoriesUseCase private val tagsStore: TagsStore, private val statsSiteProvider: StatsSiteProvider, private val resourceProvider: ResourceProvider, - private val analyticsTracker: AnalyticsTrackerWrapper + private val analyticsTracker: AnalyticsTrackerWrapper, + private val popupMenuHandler: ItemPopupMenuHandler ) : InsightUseCaseFactory { override fun build(useCaseMode: UseCaseMode) = TagsAndCategoriesUseCase( @@ -192,6 +206,7 @@ class TagsAndCategoriesUseCase statsSiteProvider, resourceProvider, analyticsTracker, + popupMenuHandler, useCaseMode ) } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TodayStatsUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TodayStatsUseCase.kt index b89f326ad947..4268eb16c1eb 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TodayStatsUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TodayStatsUseCase.kt @@ -1,7 +1,9 @@ package org.wordpress.android.ui.stats.refresh.lists.sections.insights.usecases +import android.view.View import kotlinx.coroutines.CoroutineDispatcher import org.wordpress.android.R +import org.wordpress.android.R.string import org.wordpress.android.fluxc.model.stats.VisitsModel import org.wordpress.android.fluxc.store.StatsStore.InsightsTypes.TODAY_STATS import org.wordpress.android.fluxc.store.stats.insights.TodayInsightsStore @@ -11,6 +13,7 @@ import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Empty import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.ListItemWithIcon import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Title +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 @@ -20,7 +23,8 @@ class TodayStatsUseCase @Inject constructor( @Named(UI_THREAD) private val mainDispatcher: CoroutineDispatcher, private val todayStore: TodayInsightsStore, - private val statsSiteProvider: StatsSiteProvider + private val statsSiteProvider: StatsSiteProvider, + private val popupMenuHandler: ItemPopupMenuHandler ) : StatelessUseCase(TODAY_STATS, mainDispatcher) { override suspend fun loadCachedData(): VisitsModel? { return todayStore.getTodayInsights(statsSiteProvider.siteModel) @@ -43,9 +47,13 @@ class TodayStatsUseCase override fun buildLoadingItem(): List = listOf(Title(R.string.stats_insights_today_stats)) + override fun buildEmptyItem(): List { + return listOf(buildTitle(), Empty()) + } + override fun buildUiModel(domainModel: VisitsModel): List { val items = mutableListOf() - items.add(Title(R.string.stats_insights_today_stats, menuAction = this::onMenuClick)) + items.add(buildTitle()) val hasViews = domainModel.views > 0 val hasVisitors = domainModel.visitors > 0 @@ -97,4 +105,10 @@ class TodayStatsUseCase } return items } + + private fun onMenuClick(view: View) { + popupMenuHandler.onMenuClick(view, type) + } + + private fun buildTitle() = Title(string.stats_insights_today_stats, menuAction = this::onMenuClick) } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/utils/ItemPopupMenuHandler.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/utils/ItemPopupMenuHandler.kt new file mode 100644 index 000000000000..4cd6a7a70920 --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/utils/ItemPopupMenuHandler.kt @@ -0,0 +1,78 @@ +package org.wordpress.android.ui.stats.refresh.utils + +import android.arch.lifecycle.LiveData +import android.arch.lifecycle.MutableLiveData +import android.support.v7.widget.PopupMenu +import android.view.View +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import org.wordpress.android.R +import org.wordpress.android.fluxc.store.StatsStore +import org.wordpress.android.fluxc.store.StatsStore.InsightsTypes +import org.wordpress.android.fluxc.store.StatsStore.StatsTypes +import org.wordpress.android.modules.BG_THREAD +import org.wordpress.android.modules.UI_THREAD +import org.wordpress.android.util.Event +import javax.inject.Inject +import javax.inject.Named +import javax.inject.Singleton + +@Singleton +class ItemPopupMenuHandler +@Inject constructor( + @Named(BG_THREAD) private val bgDispatcher: CoroutineDispatcher, + @Named(UI_THREAD) private val mainDispatcher: CoroutineDispatcher, + private val statsStore: StatsStore, + private val statsSiteProvider: StatsSiteProvider +) { + private val mutableTypeMoved = MutableLiveData() + val typeMoved: LiveData = mutableTypeMoved + fun onMenuClick(view: View, statsType: StatsTypes) { + GlobalScope.launch(bgDispatcher) { + val type = statsType as InsightsTypes + val insights = statsStore.getInsights(statsSiteProvider.siteModel) + + val indexOfBlock = insights.indexOfFirst { it == type } + val showUpAction = indexOfBlock > 0 + val showDownAction = indexOfBlock < insights.size - 1 + withContext(mainDispatcher) { + val popup = PopupMenu(view.context, view) + val popupMenu = popup.menu + popup.inflate(R.menu.menu_stats_item) + popupMenu.findItem(R.id.action_move_up).isVisible = showUpAction + popupMenu.findItem(R.id.action_move_down).isVisible = showDownAction + popup.show() + popup.setOnMenuItemClickListener { menuItem -> + when (menuItem.itemId) { + R.id.action_move_up -> { + GlobalScope.launch(bgDispatcher) { + statsStore.moveTypeUp(statsSiteProvider.siteModel, type) + mutableTypeMoved.postValue(TypeChangeEvent(type)) + } + true + } + R.id.action_move_down -> { + GlobalScope.launch(bgDispatcher) { + statsStore.moveTypeDown(statsSiteProvider.siteModel, type) + mutableTypeMoved.postValue(TypeChangeEvent(type)) + } + true + } + R.id.action_remove -> { + GlobalScope.launch(bgDispatcher) { + statsStore.removeType(statsSiteProvider.siteModel, type) + mutableTypeMoved.postValue(TypeChangeEvent(type)) + } + true + } + else -> false + } + } + } + } + } + + data class TypeChangeEvent(val types: StatsTypes) : Event() +} diff --git a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/AllTimeStatsUseCaseTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/AllTimeStatsUseCaseTest.kt index b4ca9fd06635..64276a608bc3 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/AllTimeStatsUseCaseTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/AllTimeStatsUseCaseTest.kt @@ -23,6 +23,7 @@ import org.wordpress.android.ui.stats.refresh.lists.sections.BaseStatsUseCase.Us import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Empty import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.ListItemWithIcon import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Title +import org.wordpress.android.ui.stats.refresh.utils.ItemPopupMenuHandler import org.wordpress.android.ui.stats.refresh.utils.StatsDateFormatter import org.wordpress.android.ui.stats.refresh.utils.StatsSiteProvider @@ -30,6 +31,7 @@ class AllTimeStatsUseCaseTest : BaseUnitTest() { @Mock lateinit var insightsStore: AllTimeInsightsStore @Mock lateinit var statsDateFormatter: StatsDateFormatter @Mock lateinit var statsSiteProvider: StatsSiteProvider + @Mock lateinit var popupMenuHandler: ItemPopupMenuHandler @Mock lateinit var site: SiteModel private lateinit var useCase: AllTimeStatsUseCase private val bestDay = "2018-11-25" @@ -40,7 +42,8 @@ class AllTimeStatsUseCaseTest : BaseUnitTest() { Dispatchers.Unconfined, insightsStore, statsSiteProvider, - statsDateFormatter + statsDateFormatter, + popupMenuHandler ) whenever(statsSiteProvider.siteModel).thenReturn(site) } diff --git a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/CommentsUseCaseTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/CommentsUseCaseTest.kt index 50626e03b46d..41420d60b7d7 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/CommentsUseCaseTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/CommentsUseCaseTest.kt @@ -36,6 +36,7 @@ import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Type. import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Type.LIST_ITEM 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.ItemPopupMenuHandler import org.wordpress.android.ui.stats.refresh.utils.StatsSiteProvider import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper @@ -44,6 +45,7 @@ class CommentsUseCaseTest : BaseUnitTest() { @Mock lateinit var statsSiteProvider: StatsSiteProvider @Mock lateinit var site: SiteModel @Mock lateinit var tracker: AnalyticsTrackerWrapper + @Mock lateinit var popupMenuHandler: ItemPopupMenuHandler private lateinit var useCase: CommentsUseCase private val postId: Long = 10 private val postTitle = "Post" @@ -59,7 +61,8 @@ class CommentsUseCaseTest : BaseUnitTest() { insightsStore, statsSiteProvider, tracker, - BLOCK + BLOCK, + popupMenuHandler ) whenever(statsSiteProvider.siteModel).thenReturn(site) } diff --git a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/FollowersUseCaseTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/FollowersUseCaseTest.kt index 00782dc473a4..e37af56fb042 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/FollowersUseCaseTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/FollowersUseCaseTest.kt @@ -36,6 +36,8 @@ import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Loadi import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.TabsItem import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Title import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Type.TITLE +import org.wordpress.android.ui.stats.refresh.lists.sections.insights.usecases.FollowersUseCase.FollowersUseCaseFactory +import org.wordpress.android.ui.stats.refresh.utils.ItemPopupMenuHandler import org.wordpress.android.ui.stats.refresh.utils.StatsSiteProvider import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper import org.wordpress.android.viewmodel.ResourceProvider @@ -48,6 +50,8 @@ class FollowersUseCaseTest : BaseUnitTest() { @Mock lateinit var statsSiteProvider: StatsSiteProvider @Mock lateinit var site: SiteModel @Mock lateinit var tracker: AnalyticsTrackerWrapper + @Mock lateinit var popupMenuHandler: ItemPopupMenuHandler + private lateinit var useCaseFactory: FollowersUseCaseFactory private lateinit var useCase: FollowersUseCase private val avatar = "avatar.jpg" private val user = "John Smith" @@ -64,16 +68,17 @@ class FollowersUseCaseTest : BaseUnitTest() { val message = "Total followers count is 50" @Before fun setUp() { - useCase = FollowersUseCase( + useCaseFactory = FollowersUseCaseFactory( Dispatchers.Unconfined, Dispatchers.Unconfined, insightsStore, statsSiteProvider, statsUtilsWrapper, resourceProvider, - tracker, - BLOCK + popupMenuHandler, + tracker ) + useCase = useCaseFactory.build(BLOCK) whenever(statsUtilsWrapper.getSinceLabelLowerCase(dateSubscribed)).thenReturn(sinceLabel) whenever(resourceProvider.getString(any())).thenReturn(wordPressLabel) whenever(resourceProvider.getString(eq(R.string.stats_followers_count_message), any(), any())).thenReturn( @@ -234,16 +239,7 @@ class FollowersUseCaseTest : BaseUnitTest() { @Test fun `maps email followers to UI model in the view all mode`() = test { - useCase = FollowersUseCase( - Dispatchers.Unconfined, - Dispatchers.Unconfined, - insightsStore, - statsSiteProvider, - statsUtilsWrapper, - resourceProvider, - tracker, - VIEW_ALL - ) + useCase = useCaseFactory.build(VIEW_ALL) val refresh = true val wpComModel = FollowersModel( diff --git a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/LatestPostSummaryUseCaseTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/LatestPostSummaryUseCaseTest.kt index 2638e81f22d4..d1357e29057f 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/LatestPostSummaryUseCaseTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/LatestPostSummaryUseCaseTest.kt @@ -29,6 +29,7 @@ import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.ListI import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Text import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Title import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.ValueItem +import org.wordpress.android.ui.stats.refresh.utils.ItemPopupMenuHandler import org.wordpress.android.ui.stats.refresh.utils.StatsSiteProvider import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper import java.util.Date @@ -39,6 +40,7 @@ class LatestPostSummaryUseCaseTest : BaseUnitTest() { @Mock lateinit var statsSiteProvider: StatsSiteProvider @Mock lateinit var site: SiteModel @Mock lateinit var tracker: AnalyticsTrackerWrapper + @Mock lateinit var popupMenuHandler: ItemPopupMenuHandler private lateinit var useCase: LatestPostSummaryUseCase @Before fun setUp() = test { @@ -47,7 +49,8 @@ class LatestPostSummaryUseCaseTest : BaseUnitTest() { insightsStore, statsSiteProvider, latestPostSummaryMapper, - tracker + tracker, + popupMenuHandler ) whenever(statsSiteProvider.siteModel).thenReturn(site) useCase.navigationTarget.observeForever {} diff --git a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/MostPopularInsightsUseCaseTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/MostPopularInsightsUseCaseTest.kt index 980e5252169d..05f4833e86e4 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/MostPopularInsightsUseCaseTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/MostPopularInsightsUseCaseTest.kt @@ -23,6 +23,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.DateUtils +import org.wordpress.android.ui.stats.refresh.utils.ItemPopupMenuHandler import org.wordpress.android.ui.stats.refresh.utils.StatsSiteProvider import org.wordpress.android.viewmodel.ResourceProvider import kotlin.math.roundToInt @@ -33,6 +34,7 @@ class MostPopularInsightsUseCaseTest : BaseUnitTest() { @Mock lateinit var site: SiteModel @Mock lateinit var dateUtils: DateUtils @Mock lateinit var resourceProvider: ResourceProvider + @Mock lateinit var popupMenuHandler: ItemPopupMenuHandler private lateinit var useCase: MostPopularInsightsUseCase private val day = 2 private val highestDayPercent = 15.0 @@ -47,7 +49,8 @@ class MostPopularInsightsUseCaseTest : BaseUnitTest() { insightsStore, statsSiteProvider, dateUtils, - resourceProvider + resourceProvider, + popupMenuHandler ) whenever(statsSiteProvider.siteModel).thenReturn(site) whenever(dateUtils.getWeekDay(day)).thenReturn(dayString) diff --git a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/PublicizeUseCaseTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/PublicizeUseCaseTest.kt index 7fcebe831534..52520000cb52 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/PublicizeUseCaseTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/PublicizeUseCaseTest.kt @@ -29,6 +29,7 @@ import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.ListI import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Title import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Type.LINK import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Type.TITLE +import org.wordpress.android.ui.stats.refresh.utils.ItemPopupMenuHandler import org.wordpress.android.ui.stats.refresh.utils.ServiceMapper import org.wordpress.android.ui.stats.refresh.utils.StatsSiteProvider import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper @@ -39,6 +40,7 @@ class PublicizeUseCaseTest : BaseUnitTest() { @Mock lateinit var site: SiteModel @Mock lateinit var serviceMapper: ServiceMapper @Mock lateinit var tracker: AnalyticsTrackerWrapper + @Mock lateinit var popupMenuHandler: ItemPopupMenuHandler private lateinit var useCase: PublicizeUseCase private val itemsToLoad = 6 private val limitMode = LimitMode.Top(itemsToLoad) @@ -50,6 +52,7 @@ class PublicizeUseCaseTest : BaseUnitTest() { statsSiteProvider, serviceMapper, tracker, + popupMenuHandler, BLOCK ) whenever(statsSiteProvider.siteModel).thenReturn(site) diff --git a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TagsAndCategoriesUseCaseTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TagsAndCategoriesUseCaseTest.kt index dbfdb7f017af..b3df05e2bde4 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TagsAndCategoriesUseCaseTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TagsAndCategoriesUseCaseTest.kt @@ -34,6 +34,7 @@ import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Type. import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Type.LINK 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.ItemPopupMenuHandler import org.wordpress.android.ui.stats.refresh.utils.StatsSiteProvider import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper import org.wordpress.android.viewmodel.ResourceProvider @@ -44,6 +45,7 @@ class TagsAndCategoriesUseCaseTest : BaseUnitTest() { @Mock lateinit var site: SiteModel @Mock lateinit var resourceProvider: ResourceProvider @Mock lateinit var tracker: AnalyticsTrackerWrapper + @Mock lateinit var popupMenuHandler: ItemPopupMenuHandler private lateinit var useCase: TagsAndCategoriesUseCase private val blockItemCount = 6 private val singleTagViews: Long = 10 @@ -59,6 +61,7 @@ class TagsAndCategoriesUseCaseTest : BaseUnitTest() { statsSiteProvider, resourceProvider, tracker, + popupMenuHandler, BLOCK ) whenever(statsSiteProvider.siteModel).thenReturn(site) diff --git a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TodayStatsUseCaseTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TodayStatsUseCaseTest.kt index 2f2bd9287148..62ec8b61fabb 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TodayStatsUseCaseTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TodayStatsUseCaseTest.kt @@ -23,11 +23,13 @@ import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.ListI 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.ItemPopupMenuHandler import org.wordpress.android.ui.stats.refresh.utils.StatsSiteProvider class TodayStatsUseCaseTest : BaseUnitTest() { @Mock lateinit var insightsStore: TodayInsightsStore @Mock lateinit var statsSiteProvider: StatsSiteProvider + @Mock lateinit var popupMenuHandler: ItemPopupMenuHandler @Mock lateinit var site: SiteModel private lateinit var useCase: TodayStatsUseCase private val views = 10 @@ -39,7 +41,8 @@ class TodayStatsUseCaseTest : BaseUnitTest() { useCase = TodayStatsUseCase( Dispatchers.Unconfined, insightsStore, - statsSiteProvider + statsSiteProvider, + popupMenuHandler ) whenever(statsSiteProvider.siteModel).thenReturn(site) } From 8bb04997f4bf981307144566bb66e65c181f0c3a Mon Sep 17 00:00:00 2001 From: vojtasmrcek Date: Thu, 21 Mar 2019 11:40:20 +0100 Subject: [PATCH 13/17] Removee unused code and fix lint issue --- .../ui/stats/refresh/lists/StatsListViewModel.kt | 4 ---- .../sections/insights/usecases/CommentsUseCase.kt | 10 +++++----- .../sections/insights/usecases/CommentsUseCaseTest.kt | 4 ++-- 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListViewModel.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListViewModel.kt index 00d20794df2d..10d4753c9c37 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsListViewModel.kt @@ -123,10 +123,6 @@ abstract class StatsListViewModel( statsUseCase.refreshTypes() } } - - enum class Action { - MOVE_DOWN, MOVE_UP, REMOVE - } } class InsightsListViewModel diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/CommentsUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/CommentsUseCase.kt index f0309244ba9f..29195d0506b1 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/CommentsUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/CommentsUseCase.kt @@ -42,8 +42,8 @@ class CommentsUseCase private val commentsStore: CommentsStore, private val statsSiteProvider: StatsSiteProvider, private val analyticsTracker: AnalyticsTrackerWrapper, - private val useCaseMode: UseCaseMode, - private val popupMenuHandler: ItemPopupMenuHandler + private val popupMenuHandler: ItemPopupMenuHandler, + private val useCaseMode: UseCaseMode ) : StatefulUseCase(COMMENTS, mainDispatcher, 0) { override suspend fun fetchRemoteData(forced: Boolean): State { val fetchMode = if (useCaseMode == VIEW_ALL) LimitMode.All else LimitMode.Top(BLOCK_ITEM_COUNT) @@ -160,7 +160,7 @@ class CommentsUseCase private val commentsStore: CommentsStore, private val statsSiteProvider: StatsSiteProvider, private val analyticsTracker: AnalyticsTrackerWrapper, - private val popupMenuHandler: ItemPopupMenuHandler + private val popupMenuHandler: ItemPopupMenuHandler ) : InsightUseCaseFactory { override fun build(useCaseMode: UseCaseMode) = CommentsUseCase( @@ -168,8 +168,8 @@ class CommentsUseCase commentsStore, statsSiteProvider, analyticsTracker, - useCaseMode, - popupMenuHandler + popupMenuHandler, + useCaseMode ) } } diff --git a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/CommentsUseCaseTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/CommentsUseCaseTest.kt index 41420d60b7d7..38a1cfbfa2b6 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/CommentsUseCaseTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/CommentsUseCaseTest.kt @@ -61,8 +61,8 @@ class CommentsUseCaseTest : BaseUnitTest() { insightsStore, statsSiteProvider, tracker, - BLOCK, - popupMenuHandler + popupMenuHandler, + BLOCK ) whenever(statsSiteProvider.siteModel).thenReturn(site) } From a13459192b66bfbc2adacd029fda6a58d03dd425 Mon Sep 17 00:00:00 2001 From: vojtasmrcek Date: Thu, 21 Mar 2019 14:11:33 +0100 Subject: [PATCH 14/17] Reduce number of requests on insights screen --- .../ui/stats/refresh/lists/BaseListUseCase.kt | 16 +++++++++++----- .../refresh/lists/StatsBlockDiffCallback.kt | 3 +-- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/BaseListUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/BaseListUseCase.kt index 29c43b9ea92b..4cddd61baf0f 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/BaseListUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/BaseListUseCase.kt @@ -34,8 +34,8 @@ class BaseListUseCase( useCases.associateBy { it.type }.mapValues { entry -> entry.value.liveData } ) private val statsTypes = DistinctMutableLiveData>(listOf()) - val data: MediatorLiveData = mergeNotNull(statsTypes, blockListData) { insights, map -> - insights.mapNotNull { + val data: MediatorLiveData = mergeNotNull(statsTypes, blockListData) { types, map -> + types.mapNotNull { if (map.containsKey(it)) { map[it] } else { @@ -69,11 +69,12 @@ class BaseListUseCase( loadData(true, forced) } - suspend fun refreshTypes() { + suspend fun refreshTypes(): List { val items = getStatsTypes() withContext(mainDispatcher) { statsTypes.value = items } + return items } private suspend fun loadData(refresh: Boolean, forced: Boolean) { @@ -82,8 +83,13 @@ class BaseListUseCase( if (PackageUtils.isDebugBuild() && useCases.distinctBy { it.type }.size < useCases.size) { throw RuntimeException("Duplicate stats type in a use case") } - useCases.forEach { block -> launch { block.fetch(refresh, forced) } } - refreshTypes() + val visibleTypes = refreshTypes() + visibleTypes.forEach { type -> + useCases.find { it.type == type } + ?.let { block -> launch(bgDispatcher) { + block.fetch(refresh, forced) } + } + } } } else { mutableSnackbarMessage.value = R.string.stats_site_not_loaded_yet diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsBlockDiffCallback.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsBlockDiffCallback.kt index 16c949f8c8fc..af10b9d3118d 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsBlockDiffCallback.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/StatsBlockDiffCallback.kt @@ -1,7 +1,6 @@ package org.wordpress.android.ui.stats.refresh.lists import android.support.v7.util.DiffUtil.Callback -import org.wordpress.android.ui.stats.refresh.lists.StatsBlock.Success class StatsBlockDiffCallback( private val oldList: List, @@ -30,7 +29,7 @@ class StatsBlockDiffCallback( override fun getChangePayload(oldItemPosition: Int, newItemPosition: Int): Any? { val newItem = newList[newItemPosition] val oldItem = oldList[oldItemPosition] - if (oldItem is Success && newItem is Success) { + if (oldItem.type == newItem.type) { return Payload } return null From 33f5d8e8e59613d1f42e12143224b85e42475e4f Mon Sep 17 00:00:00 2001 From: vojtasmrcek Date: Thu, 21 Mar 2019 16:36:43 +0100 Subject: [PATCH 15/17] Fix the throttle method in utils --- .../src/main/java/org/wordpress/android/util/LiveDataUtils.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/util/LiveDataUtils.kt b/WordPress/src/main/java/org/wordpress/android/util/LiveDataUtils.kt index b036b1270a95..84c9d8805982 100644 --- a/WordPress/src/main/java/org/wordpress/android/util/LiveDataUtils.kt +++ b/WordPress/src/main/java/org/wordpress/android/util/LiveDataUtils.kt @@ -204,8 +204,8 @@ fun LiveData.throttle( ): ThrottleLiveData { val mediatorLiveData: ThrottleLiveData = ThrottleLiveData(coroutineScope = coroutineScope, offset = offset) mediatorLiveData.addSource(this) { - if (it != mediatorLiveData.value || !distinct) { - mediatorLiveData.value = it + if ((it != mediatorLiveData.value || !distinct) && it != null) { + mediatorLiveData.postValue(it) } } return mediatorLiveData From fbfc384525fe8edd577f56015332f5f7310bf561 Mon Sep 17 00:00:00 2001 From: vojtasmrcek Date: Fri, 22 Mar 2019 09:28:26 +0100 Subject: [PATCH 16/17] Update FluxC version --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index c79187da8f28..ed8af793e12e 100644 --- a/build.gradle +++ b/build.gradle @@ -104,5 +104,5 @@ buildScan { } ext { - fluxCVersion = '8c78b7cb3c3960525a34d8af9125ca261cf50977' + fluxCVersion = 'e049ac97ac54f371aef152de5e02b1dc2eb32f82' } From 0f3de5bd04f60d66ab979aae2ac409d2f60bef7d Mon Sep 17 00:00:00 2001 From: vojtasmrcek Date: Fri, 22 Mar 2019 09:45:26 +0100 Subject: [PATCH 17/17] Fix scroll issue in insights --- .../ui/stats/refresh/lists/sections/BlockListAdapter.kt | 6 +++--- WordPress/src/main/res/layout/stats_list_fragment.xml | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/BlockListAdapter.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/BlockListAdapter.kt index b709a1fa71c6..9f5d045d855d 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/BlockListAdapter.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/BlockListAdapter.kt @@ -20,8 +20,8 @@ import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.ListI import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.ListItemWithIcon import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.LoadingItem import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.MapItem -import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.ReferredItem import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.QuickScanItem +import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.ReferredItem import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.TabsItem import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Text import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Title @@ -39,8 +39,8 @@ import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Type. 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.LOADING_ITEM import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Type.MAP -import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Type.REFERRED_ITEM import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Type.QUICK_SCAN_ITEM +import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Type.REFERRED_ITEM import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Type.TABS import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Type.TEXT import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Type.TITLE @@ -62,8 +62,8 @@ import org.wordpress.android.ui.stats.refresh.lists.sections.viewholders.ListIte import org.wordpress.android.ui.stats.refresh.lists.sections.viewholders.ListItemWithIconViewHolder import org.wordpress.android.ui.stats.refresh.lists.sections.viewholders.LoadingItemViewHolder import org.wordpress.android.ui.stats.refresh.lists.sections.viewholders.MapViewHolder -import org.wordpress.android.ui.stats.refresh.lists.sections.viewholders.ReferredItemViewHolder import org.wordpress.android.ui.stats.refresh.lists.sections.viewholders.QuickScanItemViewHolder +import org.wordpress.android.ui.stats.refresh.lists.sections.viewholders.ReferredItemViewHolder import org.wordpress.android.ui.stats.refresh.lists.sections.viewholders.TabsViewHolder import org.wordpress.android.ui.stats.refresh.lists.sections.viewholders.TextViewHolder import org.wordpress.android.ui.stats.refresh.lists.sections.viewholders.TitleViewHolder diff --git a/WordPress/src/main/res/layout/stats_list_fragment.xml b/WordPress/src/main/res/layout/stats_list_fragment.xml index a6c6c4e3db2c..5b30ad47a550 100644 --- a/WordPress/src/main/res/layout/stats_list_fragment.xml +++ b/WordPress/src/main/res/layout/stats_list_fragment.xml @@ -32,6 +32,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:clipToPadding="false" + android:descendantFocusability="beforeDescendants" android:scrollbars="vertical"/> @@ -39,6 +40,7 @@ android:id="@+id/recyclerView" style="@style/StatsList" android:clipToPadding="false" + android:descendantFocusability="beforeDescendants" android:scrollbars="vertical"/>