mirror of
https://github.com/fork-maintainers/iceraven-browser
synced 2024-11-19 09:25:34 +00:00
[fenix] For https://github.com/mozilla-mobile/fenix/issues/27330 - Cache selected wallpaper card colors
This commit is contained in:
parent
1a4af485fd
commit
3733fcb703
@ -200,6 +200,24 @@ class Settings(private val appContext: Context) : PreferencesHolder {
|
|||||||
default = 0,
|
default = 0,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A cache of the background color to use on cards overlaying the current wallpaper when the user's
|
||||||
|
* theme is set to Light.
|
||||||
|
*/
|
||||||
|
var currentWallpaperCardColorLight by longPreference(
|
||||||
|
appContext.getPreferenceKey(R.string.pref_key_current_wallpaper_card_color_light),
|
||||||
|
default = 0,
|
||||||
|
)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A cache of the background color to use on cards overlaying the current wallpaper when the user's
|
||||||
|
* theme is set to Dark.
|
||||||
|
*/
|
||||||
|
var currentWallpaperCardColorDark by longPreference(
|
||||||
|
appContext.getPreferenceKey(R.string.pref_key_current_wallpaper_card_color_dark),
|
||||||
|
default = 0,
|
||||||
|
)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Indicates if the current legacy wallpaper should be migrated.
|
* Indicates if the current legacy wallpaper should be migrated.
|
||||||
*/
|
*/
|
||||||
|
@ -117,15 +117,18 @@ data class Wallpaper(
|
|||||||
*
|
*
|
||||||
* @param settings The local cache.
|
* @param settings The local cache.
|
||||||
*/
|
*/
|
||||||
|
@Suppress("ComplexCondition")
|
||||||
fun getCurrentWallpaperFromSettings(settings: Settings): Wallpaper? {
|
fun getCurrentWallpaperFromSettings(settings: Settings): Wallpaper? {
|
||||||
val name = settings.currentWallpaperName
|
val name = settings.currentWallpaperName
|
||||||
val textColor = settings.currentWallpaperTextColor
|
val textColor = settings.currentWallpaperTextColor
|
||||||
return if (name.isNotEmpty() && textColor != 0L) {
|
val cardColorLight = settings.currentWallpaperCardColorLight
|
||||||
|
val cardColorDark = settings.currentWallpaperCardColorDark
|
||||||
|
return if (name.isNotEmpty() && textColor != 0L && cardColorLight != 0L && cardColorDark != 0L) {
|
||||||
Wallpaper(
|
Wallpaper(
|
||||||
name = name,
|
name = name,
|
||||||
textColor = textColor,
|
textColor = textColor,
|
||||||
cardColorLight = null,
|
cardColorLight = cardColorLight,
|
||||||
cardColorDark = null,
|
cardColorDark = cardColorDark,
|
||||||
collection = DefaultCollection,
|
collection = DefaultCollection,
|
||||||
thumbnailFileState = ImageFileState.Downloaded,
|
thumbnailFileState = ImageFileState.Downloaded,
|
||||||
assetsFileState = ImageFileState.Downloaded,
|
assetsFileState = ImageFileState.Downloaded,
|
||||||
|
@ -9,6 +9,7 @@ import kotlinx.coroutines.CoroutineScope
|
|||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
|
import org.mozilla.fenix.utils.Settings
|
||||||
import org.mozilla.fenix.wallpapers.Wallpaper.Companion.getLocalPath
|
import org.mozilla.fenix.wallpapers.Wallpaper.Companion.getLocalPath
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
@ -28,15 +29,18 @@ class WallpaperFileManager(
|
|||||||
/**
|
/**
|
||||||
* Lookup all the files for a wallpaper name. This lookup will fail if there are not
|
* Lookup all the files for a wallpaper name. This lookup will fail if there are not
|
||||||
* files for each of a portrait and landscape orientation as well as a thumbnail.
|
* files for each of a portrait and landscape orientation as well as a thumbnail.
|
||||||
|
*
|
||||||
|
* @param settings The local cache.
|
||||||
*/
|
*/
|
||||||
suspend fun lookupExpiredWallpaper(name: String): Wallpaper? = withContext(coroutineDispatcher) {
|
suspend fun lookupExpiredWallpaper(settings: Settings): Wallpaper? = withContext(coroutineDispatcher) {
|
||||||
|
val name = settings.currentWallpaperName
|
||||||
if (allAssetsExist(name)) {
|
if (allAssetsExist(name)) {
|
||||||
Wallpaper(
|
Wallpaper(
|
||||||
name = name,
|
name = name,
|
||||||
collection = Wallpaper.DefaultCollection,
|
collection = Wallpaper.DefaultCollection,
|
||||||
textColor = null,
|
textColor = settings.currentWallpaperTextColor,
|
||||||
cardColorLight = null,
|
cardColorLight = settings.currentWallpaperCardColorLight,
|
||||||
cardColorDark = null,
|
cardColorDark = settings.currentWallpaperCardColorDark,
|
||||||
thumbnailFileState = Wallpaper.ImageFileState.Downloaded,
|
thumbnailFileState = Wallpaper.ImageFileState.Downloaded,
|
||||||
assetsFileState = Wallpaper.ImageFileState.Downloaded,
|
assetsFileState = Wallpaper.ImageFileState.Downloaded,
|
||||||
)
|
)
|
||||||
|
@ -261,7 +261,7 @@ class WallpapersUseCases(
|
|||||||
!it.isExpired() && it.isAvailableInLocale()
|
!it.isExpired() && it.isAvailableInLocale()
|
||||||
}
|
}
|
||||||
val currentWallpaper = possibleWallpapers.find { it.name == currentWallpaperName }
|
val currentWallpaper = possibleWallpapers.find { it.name == currentWallpaperName }
|
||||||
?: fileManager.lookupExpiredWallpaper(currentWallpaperName)
|
?: fileManager.lookupExpiredWallpaper(settings)
|
||||||
?: Wallpaper.Default
|
?: Wallpaper.Default
|
||||||
|
|
||||||
// Dispatching this early will make it accessible to the home screen ASAP. If it has been
|
// Dispatching this early will make it accessible to the home screen ASAP. If it has been
|
||||||
@ -459,6 +459,8 @@ class WallpapersUseCases(
|
|||||||
override suspend fun invoke(wallpaper: Wallpaper): Wallpaper.ImageFileState {
|
override suspend fun invoke(wallpaper: Wallpaper): Wallpaper.ImageFileState {
|
||||||
settings.currentWallpaperName = wallpaper.name
|
settings.currentWallpaperName = wallpaper.name
|
||||||
settings.currentWallpaperTextColor = wallpaper.textColor ?: 0
|
settings.currentWallpaperTextColor = wallpaper.textColor ?: 0
|
||||||
|
settings.currentWallpaperCardColorLight = wallpaper.cardColorLight ?: 0
|
||||||
|
settings.currentWallpaperCardColorDark = wallpaper.cardColorDark ?: 0
|
||||||
store.dispatch(AppAction.WallpaperAction.UpdateCurrentWallpaper(wallpaper))
|
store.dispatch(AppAction.WallpaperAction.UpdateCurrentWallpaper(wallpaper))
|
||||||
return Wallpaper.ImageFileState.Downloaded
|
return Wallpaper.ImageFileState.Downloaded
|
||||||
}
|
}
|
||||||
@ -496,6 +498,8 @@ class WallpapersUseCases(
|
|||||||
internal fun selectWallpaper(wallpaper: Wallpaper) {
|
internal fun selectWallpaper(wallpaper: Wallpaper) {
|
||||||
settings.currentWallpaperName = wallpaper.name
|
settings.currentWallpaperName = wallpaper.name
|
||||||
settings.currentWallpaperTextColor = wallpaper.textColor ?: 0L
|
settings.currentWallpaperTextColor = wallpaper.textColor ?: 0L
|
||||||
|
settings.currentWallpaperCardColorLight = wallpaper.cardColorLight ?: 0L
|
||||||
|
settings.currentWallpaperCardColorDark = wallpaper.cardColorDark ?: 0L
|
||||||
store.dispatch(AppAction.WallpaperAction.UpdateCurrentWallpaper(wallpaper))
|
store.dispatch(AppAction.WallpaperAction.UpdateCurrentWallpaper(wallpaper))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -205,6 +205,8 @@
|
|||||||
<string name="pref_key_wallpapers" translatable="false">pref_key_wallpapers</string>
|
<string name="pref_key_wallpapers" translatable="false">pref_key_wallpapers</string>
|
||||||
<string name="pref_key_current_wallpaper" translatable="false">pref_key_current_wallpaper</string>
|
<string name="pref_key_current_wallpaper" translatable="false">pref_key_current_wallpaper</string>
|
||||||
<string name="pref_key_current_wallpaper_text_color" translatable="false">pref_key_current_wallpaper_text_color</string>
|
<string name="pref_key_current_wallpaper_text_color" translatable="false">pref_key_current_wallpaper_text_color</string>
|
||||||
|
<string name="pref_key_current_wallpaper_card_color_light" translatable="false">pref_key_current_wallpaper_card_color_light</string>
|
||||||
|
<string name="pref_key_current_wallpaper_card_color_dark" translatable="false">pref_key_current_wallpaper_card_color_dark</string>
|
||||||
<string name="pref_key_wallpapers_onboarding" translatable="false">pref_key_wallpapers_onboarding</string>
|
<string name="pref_key_wallpapers_onboarding" translatable="false">pref_key_wallpapers_onboarding</string>
|
||||||
<string name="pref_key_should_migrate_wallpaper" translatable="false">pref_key_should_migrate_wallpaper</string>
|
<string name="pref_key_should_migrate_wallpaper" translatable="false">pref_key_should_migrate_wallpaper</string>
|
||||||
|
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
package org.mozilla.fenix.wallpapers
|
package org.mozilla.fenix.wallpapers
|
||||||
|
|
||||||
|
import io.mockk.every
|
||||||
|
import io.mockk.mockk
|
||||||
import kotlinx.coroutines.test.UnconfinedTestDispatcher
|
import kotlinx.coroutines.test.UnconfinedTestDispatcher
|
||||||
import kotlinx.coroutines.test.runTest
|
import kotlinx.coroutines.test.runTest
|
||||||
import org.junit.Assert.assertEquals
|
import org.junit.Assert.assertEquals
|
||||||
@ -9,6 +11,7 @@ import org.junit.Before
|
|||||||
import org.junit.Rule
|
import org.junit.Rule
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import org.junit.rules.TemporaryFolder
|
import org.junit.rules.TemporaryFolder
|
||||||
|
import org.mozilla.fenix.utils.Settings
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
class WallpaperFileManagerTest {
|
class WallpaperFileManagerTest {
|
||||||
@ -21,6 +24,8 @@ class WallpaperFileManagerTest {
|
|||||||
|
|
||||||
private lateinit var fileManager: WallpaperFileManager
|
private lateinit var fileManager: WallpaperFileManager
|
||||||
|
|
||||||
|
private lateinit var settings: Settings
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
fun setup() {
|
fun setup() {
|
||||||
wallpapersFolder = File(tempFolder.root, "wallpapers")
|
wallpapersFolder = File(tempFolder.root, "wallpapers")
|
||||||
@ -28,14 +33,19 @@ class WallpaperFileManagerTest {
|
|||||||
storageRootDirectory = tempFolder.root,
|
storageRootDirectory = tempFolder.root,
|
||||||
coroutineDispatcher = dispatcher,
|
coroutineDispatcher = dispatcher,
|
||||||
)
|
)
|
||||||
|
settings = mockk {
|
||||||
|
every { currentWallpaperName } returns wallpaperName
|
||||||
|
every { currentWallpaperTextColor } returns 0L
|
||||||
|
every { currentWallpaperCardColorLight } returns 0L
|
||||||
|
every { currentWallpaperCardColorDark } returns 0L
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `GIVEN wallpaper directory exists WHEN looked up THEN wallpaper created with correct name`() = runTest {
|
fun `GIVEN wallpaper directory exists WHEN looked up THEN wallpaper created with correct name`() = runTest {
|
||||||
val wallpaperName = "name"
|
|
||||||
createAllFiles(wallpaperName)
|
createAllFiles(wallpaperName)
|
||||||
|
|
||||||
val result = fileManager.lookupExpiredWallpaper(wallpaperName)
|
val result = fileManager.lookupExpiredWallpaper(settings)
|
||||||
|
|
||||||
val expected = generateWallpaper(name = wallpaperName)
|
val expected = generateWallpaper(name = wallpaperName)
|
||||||
assertEquals(expected, result)
|
assertEquals(expected, result)
|
||||||
@ -43,7 +53,6 @@ class WallpaperFileManagerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `GIVEN portrait file missing in directories WHEN expired wallpaper looked up THEN null returned`() = runTest {
|
fun `GIVEN portrait file missing in directories WHEN expired wallpaper looked up THEN null returned`() = runTest {
|
||||||
val wallpaperName = "name"
|
|
||||||
File(wallpapersFolder, "$wallpaperName/landscape.png").apply {
|
File(wallpapersFolder, "$wallpaperName/landscape.png").apply {
|
||||||
mkdirs()
|
mkdirs()
|
||||||
createNewFile()
|
createNewFile()
|
||||||
@ -53,14 +62,13 @@ class WallpaperFileManagerTest {
|
|||||||
createNewFile()
|
createNewFile()
|
||||||
}
|
}
|
||||||
|
|
||||||
val result = fileManager.lookupExpiredWallpaper(wallpaperName)
|
val result = fileManager.lookupExpiredWallpaper(settings)
|
||||||
|
|
||||||
assertEquals(null, result)
|
assertEquals(null, result)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `GIVEN landscape file missing in directories WHEN expired wallpaper looked up THEN null returned`() = runTest {
|
fun `GIVEN landscape file missing in directories WHEN expired wallpaper looked up THEN null returned`() = runTest {
|
||||||
val wallpaperName = "name"
|
|
||||||
File(wallpapersFolder, "$wallpaperName/portrait.png").apply {
|
File(wallpapersFolder, "$wallpaperName/portrait.png").apply {
|
||||||
mkdirs()
|
mkdirs()
|
||||||
createNewFile()
|
createNewFile()
|
||||||
@ -70,14 +78,13 @@ class WallpaperFileManagerTest {
|
|||||||
createNewFile()
|
createNewFile()
|
||||||
}
|
}
|
||||||
|
|
||||||
val result = fileManager.lookupExpiredWallpaper(wallpaperName)
|
val result = fileManager.lookupExpiredWallpaper(settings)
|
||||||
|
|
||||||
assertEquals(null, result)
|
assertEquals(null, result)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `GIVEN thumbnail file missing in directories WHEN expired wallpaper looked up THEN null returned`() = runTest {
|
fun `GIVEN thumbnail file missing in directories WHEN expired wallpaper looked up THEN null returned`() = runTest {
|
||||||
val wallpaperName = "name"
|
|
||||||
File(wallpapersFolder, "$wallpaperName/portrait.png").apply {
|
File(wallpapersFolder, "$wallpaperName/portrait.png").apply {
|
||||||
mkdirs()
|
mkdirs()
|
||||||
createNewFile()
|
createNewFile()
|
||||||
@ -87,7 +94,7 @@ class WallpaperFileManagerTest {
|
|||||||
createNewFile()
|
createNewFile()
|
||||||
}
|
}
|
||||||
|
|
||||||
val result = fileManager.lookupExpiredWallpaper(wallpaperName)
|
val result = fileManager.lookupExpiredWallpaper(settings)
|
||||||
|
|
||||||
assertEquals(null, result)
|
assertEquals(null, result)
|
||||||
}
|
}
|
||||||
@ -153,11 +160,15 @@ class WallpaperFileManagerTest {
|
|||||||
|
|
||||||
private fun generateWallpaper(name: String) = Wallpaper(
|
private fun generateWallpaper(name: String) = Wallpaper(
|
||||||
name = name,
|
name = name,
|
||||||
textColor = null,
|
textColor = 0L,
|
||||||
cardColorLight = null,
|
cardColorLight = 0L,
|
||||||
cardColorDark = null,
|
cardColorDark = 0L,
|
||||||
thumbnailFileState = Wallpaper.ImageFileState.Downloaded,
|
thumbnailFileState = Wallpaper.ImageFileState.Downloaded,
|
||||||
assetsFileState = Wallpaper.ImageFileState.Downloaded,
|
assetsFileState = Wallpaper.ImageFileState.Downloaded,
|
||||||
collection = Wallpaper.DefaultCollection,
|
collection = Wallpaper.DefaultCollection,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
private companion object {
|
||||||
|
const val wallpaperName = "name"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -41,6 +41,10 @@ class WallpapersUseCasesTest {
|
|||||||
private val mockSettings = mockk<Settings> {
|
private val mockSettings = mockk<Settings> {
|
||||||
every { currentWallpaperTextColor } returns 0L
|
every { currentWallpaperTextColor } returns 0L
|
||||||
every { currentWallpaperTextColor = any() } just Runs
|
every { currentWallpaperTextColor = any() } just Runs
|
||||||
|
every { currentWallpaperCardColorLight } returns 0L
|
||||||
|
every { currentWallpaperCardColorLight = any() } just Runs
|
||||||
|
every { currentWallpaperCardColorDark } returns 0L
|
||||||
|
every { currentWallpaperCardColorDark = any() } just Runs
|
||||||
every { shouldMigrateLegacyWallpaper } returns false
|
every { shouldMigrateLegacyWallpaper } returns false
|
||||||
every { shouldMigrateLegacyWallpaper = any() } just Runs
|
every { shouldMigrateLegacyWallpaper = any() } just Runs
|
||||||
}
|
}
|
||||||
@ -609,6 +613,8 @@ class WallpapersUseCasesTest {
|
|||||||
val wallpaper: Wallpaper = mockk {
|
val wallpaper: Wallpaper = mockk {
|
||||||
every { name } returns "Test"
|
every { name } returns "Test"
|
||||||
every { textColor } returns null
|
every { textColor } returns null
|
||||||
|
every { cardColorLight } returns null
|
||||||
|
every { cardColorDark } returns null
|
||||||
}
|
}
|
||||||
|
|
||||||
wallpaperFileState.selectWallpaper(wallpaper)
|
wallpaperFileState.selectWallpaper(wallpaper)
|
||||||
@ -631,6 +637,8 @@ class WallpapersUseCasesTest {
|
|||||||
val wallpaper: Wallpaper = mockk {
|
val wallpaper: Wallpaper = mockk {
|
||||||
every { name } returns "Test"
|
every { name } returns "Test"
|
||||||
every { textColor } returns 321L
|
every { textColor } returns 321L
|
||||||
|
every { cardColorLight } returns 321L
|
||||||
|
every { cardColorDark } returns 321L
|
||||||
}
|
}
|
||||||
|
|
||||||
wallpaperFileState.selectWallpaper(wallpaper)
|
wallpaperFileState.selectWallpaper(wallpaper)
|
||||||
|
Loading…
Reference in New Issue
Block a user