diff --git a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt index 757889b8ef..0c87a43558 100644 --- a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +++ b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt @@ -490,7 +490,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { } } - val shouldUseDarkTheme by booleanPreference( + var shouldUseDarkTheme by booleanPreference( appContext.getPreferenceKey(R.string.pref_key_dark_theme), default = false ) diff --git a/app/src/main/java/org/mozilla/fenix/wallpapers/Wallpaper.kt b/app/src/main/java/org/mozilla/fenix/wallpapers/Wallpaper.kt index 08a131aaee..98792e054e 100644 --- a/app/src/main/java/org/mozilla/fenix/wallpapers/Wallpaper.kt +++ b/app/src/main/java/org/mozilla/fenix/wallpapers/Wallpaper.kt @@ -9,8 +9,8 @@ import org.mozilla.fenix.R /** * A enum that represents the available wallpapers and their states. */ -enum class Wallpaper(val drawable: Int) { - FIRST(R.drawable.wallpaper_1), - SECOND(R.drawable.wallpaper_2), - NONE(R.attr.homeBackground); +enum class Wallpaper(val drawable: Int, val isDark: Boolean) { + FIRST(drawable = R.drawable.wallpaper_1, isDark = true), + SECOND(drawable = R.drawable.wallpaper_2, isDark = false), + NONE(drawable = R.attr.homeBackground, isDark = false); } diff --git a/app/src/main/java/org/mozilla/fenix/wallpapers/WallpaperManager.kt b/app/src/main/java/org/mozilla/fenix/wallpapers/WallpaperManager.kt index d4c124cc75..e647b3c7b5 100644 --- a/app/src/main/java/org/mozilla/fenix/wallpapers/WallpaperManager.kt +++ b/app/src/main/java/org/mozilla/fenix/wallpapers/WallpaperManager.kt @@ -4,8 +4,11 @@ package org.mozilla.fenix.wallpapers +import android.content.Context import android.view.View +import androidx.appcompat.app.AppCompatDelegate import mozilla.components.support.ktx.android.content.getColorFromAttr +import org.mozilla.fenix.ext.asActivity import org.mozilla.fenix.utils.Settings /** @@ -30,6 +33,38 @@ class WallpaperManager(private val settings: Settings) { wallpaperContainer.setBackgroundResource(newWallpaper.drawable) } currentWallpaper = newWallpaper + + adjustTheme(wallpaperContainer.context) + } + + private fun adjustTheme(context: Context) { + val mode = if (currentWallpaper != Wallpaper.NONE) { + if (currentWallpaper.isDark) { + updateThemePreference(useDarkTheme = true) + AppCompatDelegate.MODE_NIGHT_YES + } else { + updateThemePreference(useLightTheme = true) + AppCompatDelegate.MODE_NIGHT_NO + } + } else { + updateThemePreference(followDeviceTheme = true) + AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM + } + + if (AppCompatDelegate.getDefaultNightMode() != mode) { + AppCompatDelegate.setDefaultNightMode(mode) + context.asActivity()?.recreate() + } + } + + private fun updateThemePreference( + useDarkTheme: Boolean = false, + useLightTheme: Boolean = false, + followDeviceTheme: Boolean = false + ) { + settings.shouldUseDarkTheme = useDarkTheme + settings.shouldUseLightTheme = useLightTheme + settings.shouldFollowDeviceTheme = followDeviceTheme } /**