[fenix] For https://github.com/mozilla-mobile/fenix/issues/25025 - Download sponsored stories on debug only

pull/600/head
Mugurell 2 years ago committed by mergify[bot]
parent f28fbf3240
commit 67cc604dab

@ -62,6 +62,13 @@ object FeatureFlags {
return listOf("en-US", "en-CA").contains(langTag)
}
/**
* Show Pocket sponsored stories in between Pocket recommended stories on home.
*/
fun isPocketSponsoredStoriesFeatureEnabled(context: Context): Boolean {
return isPocketRecommendationsFeatureEnabled(context) && Config.channel.isDebug
}
/**
* Enables showing the homescreen onboarding card.
*/

@ -288,8 +288,15 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity {
components.core.contileTopSitesUpdater.startPeriodicWork()
}
if (settings().showPocketRecommendationsFeature) {
components.core.pocketStoriesService.startPeriodicStoriesRefresh()
// To assess whether the Pocket stories are to be downloaded or not multiple SharedPreferences
// are read possibly needing to load them on the current thread. Move that to a background thread.
lifecycleScope.launch(IO) {
if (settings().showPocketRecommendationsFeature) {
components.core.pocketStoriesService.startPeriodicStoriesRefresh()
}
if (FeatureFlags.isPocketSponsoredStoriesFeatureEnabled(this@HomeActivity)) {
components.core.pocketStoriesService.startPeriodicSponsoredStoriesRefresh()
}
}
components.core.engine.profiler?.addMarker(
@ -459,6 +466,7 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity {
components.core.contileTopSitesUpdater.stopPeriodicWork()
components.core.pocketStoriesService.stopPeriodicStoriesRefresh()
components.core.pocketStoriesService.stopPeriodicSponsoredStoriesRefresh()
privateNotificationObserver?.stop()
}

@ -68,6 +68,7 @@ import mozilla.components.service.location.LocationService
import mozilla.components.service.location.MozillaLocationService
import mozilla.components.service.pocket.PocketStoriesConfig
import mozilla.components.service.pocket.PocketStoriesService
import mozilla.components.service.pocket.Profile
import mozilla.components.service.sync.autofill.AutofillCreditCardsAddressesStorage
import mozilla.components.service.sync.logins.SyncableLoginsStorage
import mozilla.components.support.base.worker.Frequency
@ -94,6 +95,7 @@ import org.mozilla.fenix.tabstray.SearchTermTabGroupMiddleware
import org.mozilla.fenix.telemetry.TelemetryMiddleware
import org.mozilla.fenix.utils.getUndoDelay
import org.mozilla.geckoview.GeckoRuntime
import java.util.UUID
import java.util.concurrent.TimeUnit
/**
@ -360,7 +362,12 @@ class Core(
@Suppress("MagicNumber")
val pocketStoriesConfig by lazyMonitored {
PocketStoriesConfig(client, Frequency(4, TimeUnit.HOURS))
PocketStoriesConfig(
client,
Frequency(4, TimeUnit.HOURS),
// These need to be updated. See https://mozilla-hub.atlassian.net/browse/FNXV2-20329.
Profile(UUID.randomUUID(), "fenix")
)
}
val pocketStoriesService by lazyMonitored { PocketStoriesService(context, pocketStoriesConfig) }

@ -10,6 +10,7 @@ import mozilla.components.lib.crash.Crash.NativeCodeCrash
import mozilla.components.lib.state.Action
import mozilla.components.service.pocket.PocketStory
import mozilla.components.service.pocket.PocketStory.PocketRecommendedStory
import mozilla.components.service.pocket.PocketStory.PocketSponsoredStory
import org.mozilla.fenix.components.AppStore
import org.mozilla.fenix.home.Mode
import org.mozilla.fenix.home.pocket.PocketRecommendedStoriesCategory
@ -59,6 +60,10 @@ sealed class AppAction : Action {
data class DeselectPocketStoriesCategory(val categoryName: String) : AppAction()
data class PocketStoriesShown(val storiesShown: List<PocketStory>) : AppAction()
data class PocketStoriesChange(val pocketStories: List<PocketRecommendedStory>) : AppAction()
/**
* Replaces the current list of Pocket sponsored stories.
*/
data class PocketSponsoredStoriesChange(val sponsoredStories: List<PocketSponsoredStory>) : AppAction()
/**
* Adds a set of items marked for removal to the app state, to be hidden in the UI.
*/

@ -145,6 +145,9 @@ internal object AppStoreReducer {
is AppAction.PocketStoriesChange -> state.copy(
pocketStories = action.pocketStories
)
is AppAction.PocketSponsoredStoriesChange -> state.copy(
pocketSponsoredStories = action.sponsoredStories
)
is AppAction.PocketStoriesShown -> {
var updatedCategories = state.pocketStoriesCategories
action.storiesShown.filterIsInstance<PocketRecommendedStory>().forEach { shownStory ->

@ -228,6 +228,14 @@ class HomeFragment : Fragment() {
.map { (category, stories) -> PocketRecommendedStoriesCategory(category, stories) }
components.appStore.dispatch(AppAction.PocketStoriesCategoriesChange(categories))
if (FeatureFlags.isPocketSponsoredStoriesFeatureEnabled(requireContext())) {
components.appStore.dispatch(
AppAction.PocketSponsoredStoriesChange(
components.core.pocketStoriesService.getSponsoredStories()
)
)
}
} else {
components.appStore.dispatch(AppAction.PocketStoriesChange(emptyList()))
}

@ -16,6 +16,7 @@ import mozilla.components.feature.top.sites.TopSite
import mozilla.components.service.fxa.manager.FxaAccountManager
import mozilla.components.service.pocket.PocketStory
import mozilla.components.service.pocket.PocketStory.PocketRecommendedStory
import mozilla.components.service.pocket.PocketStory.PocketSponsoredStory
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertNotNull
@ -357,6 +358,22 @@ class AppStoreTest {
assertTrue(updatedStories.containsAll(appStore.state.pocketStories))
}
@Test
fun `Test updating the list of Pocket sponsored stories`() = runTest {
val story1 = PocketSponsoredStory("title", "url", "imageUrl", "sponsor", mockk())
val story2 = story1.copy(imageUrl = "imageUrl2")
appStore = AppStore(AppState())
appStore.dispatch(AppAction.PocketSponsoredStoriesChange(listOf(story1, story2)))
.join()
assertTrue(appStore.state.pocketSponsoredStories.containsAll(listOf(story1, story2)))
val updatedStories = listOf(story2.copy("title3"))
appStore.dispatch(AppAction.PocketSponsoredStoriesChange(updatedStories)).join()
assertTrue(updatedStories.containsAll(appStore.state.pocketSponsoredStories))
}
@Test
fun `Test updating the list of Pocket recommendations categories`() = runTest {
val otherStoriesCategory = PocketRecommendedStoriesCategory("other")

Loading…
Cancel
Save