Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Stop hiding data when there is no connection #10848

Merged
merged 1 commit into from
Nov 25, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ public enum DeletablePrefKey implements PrefKey {
STATS_WIDGET_SELECTED_SITE_ID,
STATS_WIDGET_COLOR_MODE,
STATS_WIDGET_DATA_TYPE,
STATS_WIDGET_HAS_DATA,

// Keep the local_blog_id + local_post_id values that have HW Acc. turned off
AZTEC_EDITOR_DISABLE_HW_ACC_KEYS,
Expand Down Expand Up @@ -948,22 +949,38 @@ public static void removeStatsWidgetColorModeId(int appWidgetId) {
return DeletablePrefKey.STATS_WIDGET_COLOR_MODE.name() + appWidgetId;
}

public static void setStatsWidgetDatatTypeId(int dataTypeId, int appWidgetId) {
prefs().edit().putInt(getDatatTypeIdWidgetKey(appWidgetId), dataTypeId).apply();
public static void setStatsWidgetDataTypeId(int dataTypeId, int appWidgetId) {
prefs().edit().putInt(getDataTypeIdWidgetKey(appWidgetId), dataTypeId).apply();
}

public static int getStatsWidgetDatatTypeId(int appWidgetId) {
return prefs().getInt(getDatatTypeIdWidgetKey(appWidgetId), -1);
public static int getStatsWidgetDataTypeId(int appWidgetId) {
return prefs().getInt(getDataTypeIdWidgetKey(appWidgetId), -1);
}

public static void removeStatsWidgetDatatTypeId(int appWidgetId) {
prefs().edit().remove(getDatatTypeIdWidgetKey(appWidgetId)).apply();
public static void removeStatsWidgetDataTypeId(int appWidgetId) {
prefs().edit().remove(getDataTypeIdWidgetKey(appWidgetId)).apply();
}

@NonNull private static String getDatatTypeIdWidgetKey(int appWidgetId) {
@NonNull private static String getDataTypeIdWidgetKey(int appWidgetId) {
return DeletablePrefKey.STATS_WIDGET_DATA_TYPE.name() + appWidgetId;
}

public static void setStatsWidgetHasData(boolean hasData, int appWidgetId) {
prefs().edit().putBoolean(getHasDataWidgetKey(appWidgetId), hasData).apply();
}

public static boolean getStatsWidgetHasData(int appWidgetId) {
return prefs().getBoolean(getHasDataWidgetKey(appWidgetId), false);
}

public static void removeStatsWidgetHasData(int appWidgetId) {
prefs().edit().remove(getHasDataWidgetKey(appWidgetId)).apply();
}

@NonNull private static String getHasDataWidgetKey(int appWidgetId) {
return DeletablePrefKey.STATS_WIDGET_HAS_DATA.name() + appWidgetId;
}

public static void setSystemNotificationsEnabled(boolean enabled) {
setBoolean(UndeletablePrefKey.SYSTEM_NOTIFICATIONS_ENABLED, enabled);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ class AppPrefsWrapper @Inject constructor() {
fun removeAppWidgetColorModeId(appWidgetId: Int) = AppPrefs.removeStatsWidgetColorModeId(appWidgetId)

fun getAppWidgetDataType(appWidgetId: Int): DataType? {
return when (AppPrefs.getStatsWidgetDatatTypeId(appWidgetId)) {
return when (AppPrefs.getStatsWidgetDataTypeId(appWidgetId)) {
VIEWS_TYPE_ID -> VIEWS
VISITORS_TYPE_ID -> VISITORS
COMMENTS_TYPE_ID -> COMMENTS
Expand All @@ -89,10 +89,20 @@ class AppPrefsWrapper @Inject constructor() {
COMMENTS -> COMMENTS_TYPE_ID
LIKES -> LIKES_TYPE_ID
}
AppPrefs.setStatsWidgetDatatTypeId(dataTypeId, appWidgetId)
AppPrefs.setStatsWidgetDataTypeId(dataTypeId, appWidgetId)
}

fun removeAppWidgetDataTypeModeId(appWidgetId: Int) = AppPrefs.removeStatsWidgetDatatTypeId(appWidgetId)
fun removeAppWidgetDataTypeModeId(appWidgetId: Int) = AppPrefs.removeStatsWidgetDataTypeId(appWidgetId)

fun hasAppWidgetData(appWidgetId: Int): Boolean {
return AppPrefs.getStatsWidgetHasData(appWidgetId)
}

fun setAppWidgetHasData(hasData: Boolean, appWidgetId: Int) {
AppPrefs.setStatsWidgetHasData(hasData, appWidgetId)
}

fun removeAppWidgetHasData(appWidgetId: Int) = AppPrefs.removeStatsWidgetHasData(appWidgetId)

companion object {
private const val LIGHT_MODE_ID = 0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import org.wordpress.android.R
import org.wordpress.android.fluxc.model.stats.InsightsAllTimeModel
import org.wordpress.android.fluxc.store.SiteStore
import org.wordpress.android.fluxc.store.stats.insights.AllTimeInsightsStore
import org.wordpress.android.ui.prefs.AppPrefsWrapper
import org.wordpress.android.ui.stats.refresh.lists.widget.WidgetBlockListProvider.BlockItemUiModel
import org.wordpress.android.ui.stats.refresh.lists.widget.WidgetBlockListProvider.WidgetBlockListViewModel
import org.wordpress.android.ui.stats.refresh.lists.widget.configuration.StatsColorSelectionViewModel.Color
Expand All @@ -19,7 +20,8 @@ class AllTimeWidgetBlockListViewModel
private val siteStore: SiteStore,
private val allTimeStore: AllTimeInsightsStore,
private val resourceProvider: ResourceProvider,
private val allTimeWidgetUpdater: AllTimeWidgetUpdater
private val allTimeWidgetUpdater: AllTimeWidgetUpdater,
private val appPrefsWrapper: AppPrefsWrapper
) : WidgetBlockListViewModel {
private var siteId: Int? = null
private var colorMode: Color = Color.LIGHT
Expand All @@ -44,6 +46,9 @@ class AllTimeWidgetBlockListViewModel
if (uiModels != data) {
mutableData.clear()
mutableData.addAll(uiModels)
appWidgetId?.let {
appPrefsWrapper.setAppWidgetHasData(true, it)
}
}
}
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import org.wordpress.android.R
import org.wordpress.android.fluxc.model.stats.InsightsAllTimeModel
import org.wordpress.android.fluxc.store.SiteStore
import org.wordpress.android.fluxc.store.stats.insights.AllTimeInsightsStore
import org.wordpress.android.ui.prefs.AppPrefsWrapper
import org.wordpress.android.ui.stats.refresh.lists.widget.configuration.StatsColorSelectionViewModel.Color
import org.wordpress.android.ui.stats.refresh.utils.ONE_THOUSAND
import org.wordpress.android.ui.stats.refresh.utils.toFormattedString
Expand All @@ -16,7 +17,8 @@ class AllTimeWidgetListViewModel
@Inject constructor(
private val siteStore: SiteStore,
private val allTimeStore: AllTimeInsightsStore,
private val resourceProvider: ResourceProvider
private val resourceProvider: ResourceProvider,
private val appPrefsWrapper: AppPrefsWrapper
) {
private var siteId: Int? = null
private var colorMode: Color = Color.LIGHT
Expand All @@ -41,6 +43,9 @@ class AllTimeWidgetListViewModel
if (uiModels != data) {
mutableData.clear()
mutableData.addAll(uiModels)
appWidgetId?.let {
appPrefsWrapper.setAppWidgetHasData(true, it)
}
}
}
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ class AllTimeWidgetUpdater
val hasToken = accountStore.hasAccessToken()
val views = RemoteViews(context.packageName, widgetUtils.getLayout(colorMode))
views.setTextViewText(R.id.widget_title, resourceProvider.getString(R.string.stats_insights_all_time_stats))
val widgetHasData = appPrefsWrapper.hasAppWidgetData(appWidgetId)
if (networkAvailable && siteModel != null && hasToken) {
widgetUtils.setSiteIcon(siteModel, context, views, appWidgetId)
siteModel.let {
Expand All @@ -65,7 +66,7 @@ class AllTimeWidgetUpdater
ALL_TIME_VIEWS,
isWideView
)
} else {
} else if (!widgetHasData || !hasToken || siteModel == null) {
widgetUtils.showError(
widgetManager,
views,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import org.wordpress.android.R
import org.wordpress.android.fluxc.model.stats.VisitsModel
import org.wordpress.android.fluxc.store.SiteStore
import org.wordpress.android.fluxc.store.stats.insights.TodayInsightsStore
import org.wordpress.android.ui.prefs.AppPrefsWrapper
import org.wordpress.android.ui.stats.refresh.lists.widget.WidgetBlockListProvider.BlockItemUiModel
import org.wordpress.android.ui.stats.refresh.lists.widget.WidgetBlockListProvider.WidgetBlockListViewModel
import org.wordpress.android.ui.stats.refresh.lists.widget.configuration.StatsColorSelectionViewModel.Color
Expand All @@ -19,7 +20,8 @@ class TodayWidgetBlockListViewModel
private val siteStore: SiteStore,
private val todayInsightsStore: TodayInsightsStore,
private val resourceProvider: ResourceProvider,
private val todayWidgetUpdater: TodayWidgetUpdater
private val todayWidgetUpdater: TodayWidgetUpdater,
private val appPrefsWrapper: AppPrefsWrapper
) : WidgetBlockListViewModel {
private var siteId: Int? = null
private var colorMode: Color = Color.LIGHT
Expand Down Expand Up @@ -48,6 +50,9 @@ class TodayWidgetBlockListViewModel
if (uiModels != data) {
mutableData.clear()
mutableData.addAll(uiModels)
appWidgetId?.let {
appPrefsWrapper.setAppWidgetHasData(true, it)
}
}
}
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import org.wordpress.android.R
import org.wordpress.android.fluxc.model.stats.VisitsModel
import org.wordpress.android.fluxc.store.SiteStore
import org.wordpress.android.fluxc.store.stats.insights.TodayInsightsStore
import org.wordpress.android.ui.prefs.AppPrefsWrapper
import org.wordpress.android.ui.stats.refresh.lists.widget.configuration.StatsColorSelectionViewModel.Color
import org.wordpress.android.ui.stats.refresh.utils.ONE_THOUSAND
import org.wordpress.android.ui.stats.refresh.utils.toFormattedString
Expand All @@ -16,7 +17,8 @@ class TodayWidgetListViewModel
@Inject constructor(
private val siteStore: SiteStore,
private val todayInsightsStore: TodayInsightsStore,
private val resourceProvider: ResourceProvider
private val resourceProvider: ResourceProvider,
private val appPrefsWrapper: AppPrefsWrapper
) {
private var siteId: Int? = null
private var colorMode: Color = Color.LIGHT
Expand All @@ -30,17 +32,20 @@ class TodayWidgetListViewModel
}

fun onDataSetChanged(onError: (appWidgetId: Int) -> Unit) {
siteId?.apply {
val site = siteStore.getSiteByLocalId(this)
siteId?.let { nonNullSiteId ->
val site = siteStore.getSiteByLocalId(nonNullSiteId)
if (site != null) {
runBlocking {
todayInsightsStore.fetchTodayInsights(site)
}
todayInsightsStore.getTodayInsights(site)?.let { visitsAndViewsModel ->
val uiModels = buildListItemUiModel(visitsAndViewsModel, this)
val uiModels = buildListItemUiModel(visitsAndViewsModel, nonNullSiteId)
if (uiModels != data) {
mutableData.clear()
mutableData.addAll(uiModels)
appWidgetId?.let {
appPrefsWrapper.setAppWidgetHasData(true, it)
}
}
}
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ class TodayWidgetUpdater
val views = RemoteViews(context.packageName, widgetUtils.getLayout(colorMode))
views.setTextViewText(R.id.widget_title, resourceProvider.getString(R.string.stats_insights_today_stats))
val hasAccessToken = accountStore.hasAccessToken()
val widgetHasData = appPrefsWrapper.hasAppWidgetData(appWidgetId)
if (networkAvailable && hasAccessToken && siteModel != null) {
widgetUtils.setSiteIcon(siteModel, context, views, appWidgetId)
siteModel.let {
Expand All @@ -65,7 +66,7 @@ class TodayWidgetUpdater
TODAY_VIEWS,
isWideView
)
} else {
} else if (!widgetHasData || !hasAccessToken || siteModel == null) {
widgetUtils.showError(
widgetManager,
views,
Expand All @@ -85,5 +86,7 @@ class TodayWidgetUpdater
analyticsTrackerWrapper.trackWithWidgetType(AnalyticsTracker.Stat.STATS_WIDGET_REMOVED, TODAY_VIEWS)
appPrefsWrapper.removeAppWidgetColorModeId(appWidgetId)
appPrefsWrapper.removeAppWidgetSiteId(appWidgetId)
appPrefsWrapper.removeAppWidgetDataTypeModeId(appWidgetId)
appPrefsWrapper.removeAppWidgetHasData(appWidgetId)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import org.wordpress.android.fluxc.model.stats.time.VisitsAndViewsModel.PeriodDa
import org.wordpress.android.fluxc.network.utils.StatsGranularity.DAYS
import org.wordpress.android.fluxc.store.SiteStore
import org.wordpress.android.fluxc.store.stats.time.VisitsAndViewsStore
import org.wordpress.android.ui.prefs.AppPrefsWrapper
import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.ValueItem.State.NEGATIVE
import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.ValueItem.State.NEUTRAL
import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.ValueItem.State.POSITIVE
Expand All @@ -29,7 +30,8 @@ class ViewsWidgetListViewModel
private val visitsAndViewsStore: VisitsAndViewsStore,
private val overviewMapper: OverviewMapper,
private val resourceProvider: ResourceProvider,
private val statsDateFormatter: StatsDateFormatter
private val statsDateFormatter: StatsDateFormatter,
private val appPrefsWrapper: AppPrefsWrapper
) {
private var siteId: Int? = null
private var colorMode: Color = Color.LIGHT
Expand Down Expand Up @@ -63,6 +65,9 @@ class ViewsWidgetListViewModel
if (uiModels != data) {
mutableData.clear()
mutableData.addAll(uiModels)
appWidgetId?.let {
appPrefsWrapper.setAppWidgetHasData(true, it)
}
}
} else {
appWidgetId?.let { nonNullAppWidgetId ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ class ViewsWidgetUpdater
views.setTextViewText(R.id.widget_title, resourceProvider.getString(R.string.stats_views))
widgetUtils.setSiteIcon(siteModel, context, views, appWidgetId)
val hasAccessToken = accountStore.hasAccessToken()
val widgetHasData = appPrefsWrapper.hasAppWidgetData(appWidgetId)
if (networkAvailable && hasAccessToken && siteModel != null) {
siteModel.let {
views.setOnClickPendingIntent(
Expand All @@ -63,7 +64,7 @@ class ViewsWidgetUpdater
WEEK_VIEWS,
isWideView
)
} else {
} else if (!widgetHasData || !hasAccessToken || siteModel == null) {
widgetUtils.showError(
widgetManager,
views,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import org.wordpress.android.fluxc.model.SiteModel
import org.wordpress.android.fluxc.model.stats.InsightsAllTimeModel
import org.wordpress.android.fluxc.store.SiteStore
import org.wordpress.android.fluxc.store.stats.insights.AllTimeInsightsStore
import org.wordpress.android.ui.prefs.AppPrefsWrapper
import org.wordpress.android.ui.stats.refresh.lists.widget.WidgetBlockListProvider.BlockItemUiModel
import org.wordpress.android.ui.stats.refresh.lists.widget.configuration.StatsColorSelectionViewModel.Color
import org.wordpress.android.viewmodel.ResourceProvider
Expand All @@ -30,13 +31,20 @@ class AllTimeWidgetBlockListViewModelTest {
@Mock private lateinit var site: SiteModel
@Mock private lateinit var context: Context
@Mock private lateinit var allTimeWidgetUpdater: AllTimeWidgetUpdater
@Mock private lateinit var appPrefsWrapper: AppPrefsWrapper
private lateinit var viewModel: AllTimeWidgetBlockListViewModel
private val siteId: Int = 15
private val appWidgetId: Int = 1
private val color = Color.LIGHT
@Before
fun setUp() {
viewModel = AllTimeWidgetBlockListViewModel(siteStore, allTimeStore, resourceProvider, allTimeWidgetUpdater)
viewModel = AllTimeWidgetBlockListViewModel(
siteStore,
allTimeStore,
resourceProvider,
allTimeWidgetUpdater,
appPrefsWrapper
)
viewModel.start(siteId, color, appWidgetId)
}

Expand Down Expand Up @@ -71,6 +79,7 @@ class AllTimeWidgetBlockListViewModelTest {
Assertions.assertThat(viewModel.data).hasSize(2)
assertListItem(viewModel.data[0], viewsKey, views, visitorsKey, visitors)
assertListItem(viewModel.data[1], postsKey, posts, bestKey, viewsBestDayTotal)
verify(appPrefsWrapper).setAppWidgetHasData(true, appWidgetId)
}

@Test
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.wordpress.android.ui.stats.refresh.lists.widget.alltime

import com.nhaarman.mockitokotlin2.verify
import com.nhaarman.mockitokotlin2.whenever
import org.assertj.core.api.Assertions.assertThat
import org.junit.Before
Expand All @@ -12,6 +13,7 @@ import org.wordpress.android.fluxc.model.SiteModel
import org.wordpress.android.fluxc.model.stats.InsightsAllTimeModel
import org.wordpress.android.fluxc.store.SiteStore
import org.wordpress.android.fluxc.store.stats.insights.AllTimeInsightsStore
import org.wordpress.android.ui.prefs.AppPrefsWrapper
import org.wordpress.android.ui.stats.refresh.lists.widget.alltime.AllTimeWidgetListViewModel.AllTimeItemUiModel
import org.wordpress.android.ui.stats.refresh.lists.widget.configuration.StatsColorSelectionViewModel.Color
import org.wordpress.android.viewmodel.ResourceProvider
Expand All @@ -21,14 +23,15 @@ class AllTimeWidgetListViewModelTest {
@Mock private lateinit var siteStore: SiteStore
@Mock private lateinit var allTimeStore: AllTimeInsightsStore
@Mock private lateinit var resourceProvider: ResourceProvider
@Mock private lateinit var appPrefsWrapper: AppPrefsWrapper
@Mock private lateinit var site: SiteModel
private lateinit var viewModel: AllTimeWidgetListViewModel
private val siteId: Int = 15
private val appWidgetId: Int = 1
private val color = Color.LIGHT
@Before
fun setUp() {
viewModel = AllTimeWidgetListViewModel(siteStore, allTimeStore, resourceProvider)
viewModel = AllTimeWidgetListViewModel(siteStore, allTimeStore, resourceProvider, appPrefsWrapper)
viewModel.start(siteId, color, appWidgetId)
}

Expand Down Expand Up @@ -66,6 +69,7 @@ class AllTimeWidgetListViewModelTest {
assertListItem(viewModel.data[1], visitorsKey, visitors)
assertListItem(viewModel.data[2], postsKey, posts)
assertListItem(viewModel.data[3], bestKey, viewsBestDayTotal)
verify(appPrefsWrapper).setAppWidgetHasData(true, appWidgetId)
}

@Test
Expand Down
Loading