for #24929: remove locale restriction for remote firefox wallpapers

pull/543/head
MatthewTighe 2 years ago committed by mergify[bot]
parent cc771df50f
commit 0f952284e6

@ -5,10 +5,8 @@
package org.mozilla.fenix package org.mozilla.fenix
import android.content.Context import android.content.Context
import android.os.StrictMode
import mozilla.components.support.locale.LocaleManager import mozilla.components.support.locale.LocaleManager
import mozilla.components.support.locale.LocaleManager.getSystemDefault import mozilla.components.support.locale.LocaleManager.getSystemDefault
import org.mozilla.fenix.ext.components
/** /**
* A single source for setting feature flags that are mostly based on build type. * A single source for setting feature flags that are mostly based on build type.
@ -89,17 +87,6 @@ object FeatureFlags {
*/ */
const val historyImprovementFeatures = true const val historyImprovementFeatures = true
/**
* Enables themed wallpapers feature.
*/
fun isThemedWallpapersFeatureEnabled(context: Context): Boolean {
return context.components.strictMode.resetAfter(StrictMode.allowThreadDiskReads()) {
val langTag = LocaleManager.getCurrentLocale(context)
?.toLanguageTag() ?: getSystemDefault().toLanguageTag()
listOf("en-US", "es-US").contains(langTag)
}
}
/** /**
* Enables the Task Continuity enhancements. * Enables the Task Continuity enhancements.
*/ */

@ -796,7 +796,7 @@ open class FenixApplication : LocaleAwareApplication(), Provider {
@OptIn(DelicateCoroutinesApi::class) @OptIn(DelicateCoroutinesApi::class)
open fun downloadWallpapers() { open fun downloadWallpapers() {
if (FeatureFlags.showWallpapers && FeatureFlags.isThemedWallpapersFeatureEnabled(this)) { if (FeatureFlags.showWallpapers) {
GlobalScope.launch { GlobalScope.launch {
components.wallpaperManager.downloadAllRemoteWallpapers() components.wallpaperManager.downloadAllRemoteWallpapers()
} }

@ -19,6 +19,7 @@ import mozilla.components.feature.addons.update.DefaultAddonUpdater
import mozilla.components.feature.autofill.AutofillConfiguration import mozilla.components.feature.autofill.AutofillConfiguration
import mozilla.components.lib.publicsuffixlist.PublicSuffixList import mozilla.components.lib.publicsuffixlist.PublicSuffixList
import mozilla.components.support.base.worker.Frequency import mozilla.components.support.base.worker.Frequency
import mozilla.components.support.locale.LocaleManager
import org.mozilla.fenix.BuildConfig import org.mozilla.fenix.BuildConfig
import org.mozilla.fenix.Config import org.mozilla.fenix.Config
import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.HomeActivity
@ -163,11 +164,16 @@ class Components(private val context: Context) {
val strictMode by lazyMonitored { StrictModeManager(Config, this) } val strictMode by lazyMonitored { StrictModeManager(Config, this) }
val wallpaperManager by lazyMonitored { val wallpaperManager by lazyMonitored {
val currentLocale = strictMode.resetAfter(StrictMode.allowThreadDiskReads()) {
LocaleManager.getCurrentLocale(context)?.toLanguageTag()
?: LocaleManager.getSystemDefault().toLanguageTag()
}
strictMode.resetAfter(StrictMode.allowThreadDiskReads()) { strictMode.resetAfter(StrictMode.allowThreadDiskReads()) {
WallpaperManager( WallpaperManager(
settings, settings,
WallpaperDownloader(context, core.client), WallpaperDownloader(context, core.client),
WallpaperFileManager(context.filesDir) WallpaperFileManager(context.filesDir),
currentLocale
) )
} }
} }

@ -1209,8 +1209,7 @@ class HomeFragment : Fragment() {
return shouldEnableWallpaper() && settings.shouldAnimateFirefoxLogo && return shouldEnableWallpaper() && settings.shouldAnimateFirefoxLogo &&
onboarding.userHasBeenOnboarded() && onboarding.userHasBeenOnboarded() &&
settings.numberOfAppLaunches >= 3 && settings.numberOfAppLaunches >= 3
FeatureFlags.isThemedWallpapersFeatureEnabled(localContext)
} }
private fun shouldEnableWallpaper() = private fun shouldEnableWallpaper() =

@ -49,14 +49,19 @@ sealed class Wallpaper {
abstract val expirationDate: Date? abstract val expirationDate: Date?
abstract val remoteParentDirName: String abstract val remoteParentDirName: String
@Suppress("MagicNumber") @Suppress("MagicNumber")
/**
* A promotional partnered wallpaper.
*/
data class House( data class House(
override val name: String, override val name: String,
override val expirationDate: Date? = Calendar.getInstance().run { override val expirationDate: Date? = Calendar.getInstance().run {
set(2022, Calendar.APRIL, 30) set(2022, Calendar.APRIL, 30)
time time
} }
) : Remote() { ) : Remote(), Promotional {
override val remoteParentDirName: String = "house" override val remoteParentDirName: String = "house"
override fun isAvailableInLocale(locale: String): Boolean =
listOf("en-US", "es-US").contains(locale)
} }
/** /**
@ -70,6 +75,16 @@ sealed class Wallpaper {
} }
} }
/**
* Designates whether a wallpaper is part of a promotion that is locale-restricted.
*/
interface Promotional {
/**
* Returns whether the wallpaper is available in [locale] or not.
*/
fun isAvailableInLocale(locale: String): Boolean
}
companion object { companion object {
/** /**
* Defines the standard path at which a wallpaper resource is kept on disk. * Defines the standard path at which a wallpaper resource is kept on disk.

@ -32,11 +32,14 @@ class WallpaperManager(
private val settings: Settings, private val settings: Settings,
private val downloader: WallpaperDownloader, private val downloader: WallpaperDownloader,
private val fileManager: WallpaperFileManager, private val fileManager: WallpaperFileManager,
private val currentLocale: String,
allWallpapers: List<Wallpaper> = availableWallpapers allWallpapers: List<Wallpaper> = availableWallpapers
) { ) {
val logger = Logger("WallpaperManager") val logger = Logger("WallpaperManager")
val wallpapers = allWallpapers.filter(::filterExpiredRemoteWallpapers) val wallpapers = allWallpapers
.filter(::filterExpiredRemoteWallpapers)
.filter(::filterPromotionalWallpapers)
var currentWallpaper: Wallpaper = getCurrentWallpaperFromSettings() var currentWallpaper: Wallpaper = getCurrentWallpaperFromSettings()
set(value) { set(value) {
@ -104,6 +107,13 @@ class WallpaperManager(
else -> true else -> true
} }
private fun filterPromotionalWallpapers(wallpaper: Wallpaper): Boolean =
if (wallpaper is Wallpaper.Promotional) {
wallpaper.isAvailableInLocale(currentLocale)
} else {
true
}
private fun getCurrentWallpaperFromSettings(): Wallpaper { private fun getCurrentWallpaperFromSettings(): Wallpaper {
val currentWallpaper = settings.currentWallpaper val currentWallpaper = settings.currentWallpaper
return if (currentWallpaper.isEmpty()) { return if (currentWallpaper.isEmpty()) {

@ -42,14 +42,14 @@ class WallpaperManagerTest {
val updatedName = "new name" val updatedName = "new name"
val updatedWallpaper = Wallpaper.Local.Firefox(updatedName, drawableId = 0) val updatedWallpaper = Wallpaper.Local.Firefox(updatedName, drawableId = 0)
val wallpaperManager = WallpaperManager(mockSettings, mockk(), mockFileManager, listOf()) val wallpaperManager = WallpaperManager(mockSettings, mockk(), mockFileManager, "en-US", listOf())
wallpaperManager.currentWallpaper = updatedWallpaper wallpaperManager.currentWallpaper = updatedWallpaper
assertEquals(updatedWallpaper.name, currentCaptureSlot.captured) assertEquals(updatedWallpaper.name, currentCaptureSlot.captured)
} }
@Test @Test
fun `GIVEN no remote wallpapers expired WHEN downloading remote wallpapers THEN all downloaded`() = runBlockingTest { fun `GIVEN no remote wallpapers expired and locale in promo WHEN downloading remote wallpapers THEN all downloaded`() = runBlockingTest {
every { mockSettings.currentWallpaper } returns "" every { mockSettings.currentWallpaper } returns ""
val fakeRemoteWallpapers = listOf("first", "second", "third").map { name -> val fakeRemoteWallpapers = listOf("first", "second", "third").map { name ->
makeFakeRemoteWallpaper(TimeRelation.LATER, name) makeFakeRemoteWallpaper(TimeRelation.LATER, name)
@ -58,6 +58,7 @@ class WallpaperManagerTest {
mockSettings, mockSettings,
mockDownloader, mockDownloader,
mockFileManager, mockFileManager,
"en-US",
allWallpapers = fakeRemoteWallpapers allWallpapers = fakeRemoteWallpapers
) )
wallpaperManager.downloadAllRemoteWallpapers() wallpaperManager.downloadAllRemoteWallpapers()
@ -67,6 +68,51 @@ class WallpaperManagerTest {
} }
} }
@Test
fun `GIVEN no remote wallpapers expired and locale not in promo WHEN downloading remote wallpapers THEN none downloaded`() = runBlockingTest {
every { mockSettings.currentWallpaper } returns ""
val fakeRemoteWallpapers = listOf("first", "second", "third").map { name ->
makeFakeRemoteWallpaper(TimeRelation.LATER, name)
}
val wallpaperManager = WallpaperManager(
mockSettings,
mockDownloader,
mockFileManager,
"en-CA",
allWallpapers = fakeRemoteWallpapers
)
wallpaperManager.downloadAllRemoteWallpapers()
for (fakeRemoteWallpaper in fakeRemoteWallpapers) {
coVerify(exactly = 0) { mockDownloader.downloadWallpaper(fakeRemoteWallpaper) }
}
}
@Test
fun `GIVEN no remote wallpapers expired and locale not in promo WHEN downloading remote wallpapers THEN non-promo wallpapers downloaded`() = runBlockingTest {
every { mockSettings.currentWallpaper } returns ""
val fakePromoWallpapers = listOf("first", "second", "third").map { name ->
makeFakeRemoteWallpaper(TimeRelation.LATER, name)
}
val fakeNonPromoWallpapers = listOf(makeFakeRemoteWallpaper(TimeRelation.LATER, "fourth", false))
val fakeRemoteWallpapers = fakePromoWallpapers + fakeNonPromoWallpapers
val wallpaperManager = WallpaperManager(
mockSettings,
mockDownloader,
mockFileManager,
"en-CA",
allWallpapers = fakeRemoteWallpapers
)
wallpaperManager.downloadAllRemoteWallpapers()
for (wallpaper in fakePromoWallpapers) {
coVerify(exactly = 0) { mockDownloader.downloadWallpaper(wallpaper) }
}
for (wallpaper in fakeNonPromoWallpapers) {
coVerify { mockDownloader.downloadWallpaper(wallpaper) }
}
}
@Test @Test
fun `GIVEN some expired wallpapers WHEN initialized THEN wallpapers are not available`() { fun `GIVEN some expired wallpapers WHEN initialized THEN wallpapers are not available`() {
every { mockSettings.currentWallpaper } returns "" every { mockSettings.currentWallpaper } returns ""
@ -76,6 +122,7 @@ class WallpaperManagerTest {
mockSettings, mockSettings,
mockDownloader, mockDownloader,
mockFileManager, mockFileManager,
"en-US",
allWallpapers = listOf(expiredRemoteWallpaper, activeRemoteWallpaper) allWallpapers = listOf(expiredRemoteWallpaper, activeRemoteWallpaper)
) )
@ -96,6 +143,7 @@ class WallpaperManagerTest {
mockSettings, mockSettings,
mockDownloader, mockDownloader,
mockFileManager, mockFileManager,
"en-US",
allWallpapers = listOf(expiredRemoteWallpaper) allWallpapers = listOf(expiredRemoteWallpaper)
) )
@ -115,6 +163,7 @@ class WallpaperManagerTest {
mockSettings, mockSettings,
mockDownloader, mockDownloader,
mockFileManager, mockFileManager,
"en-US",
allWallpapers = listOf() allWallpapers = listOf()
) )
@ -132,7 +181,8 @@ class WallpaperManagerTest {
*/ */
private fun makeFakeRemoteWallpaper( private fun makeFakeRemoteWallpaper(
timeRelation: TimeRelation, timeRelation: TimeRelation,
name: String = "name" name: String = "name",
isInPromo: Boolean = true
): Wallpaper.Remote { ): Wallpaper.Remote {
fakeCalendar.time = baseFakeDate fakeCalendar.time = baseFakeDate
when (timeRelation) { when (timeRelation) {
@ -141,6 +191,10 @@ class WallpaperManagerTest {
TimeRelation.LATER -> fakeCalendar.add(Calendar.DATE, 5) TimeRelation.LATER -> fakeCalendar.add(Calendar.DATE, 5)
} }
val relativeTime = fakeCalendar.time val relativeTime = fakeCalendar.time
return Wallpaper.Remote.House(name = name, expirationDate = relativeTime) return if (isInPromo) {
Wallpaper.Remote.House(name = name, expirationDate = relativeTime)
} else {
Wallpaper.Remote.Firefox(name = name)
}
} }
} }

Loading…
Cancel
Save