Android
Android copied to clipboard
[Bug] App theme stays Light when system theme is set to automatically switch between Dark and Light themes
Describe the bug
When I set the system theme to be dark from sunset to sunrise, and set the DDG theme to system default, the app remains in light theme all the time.
How to Reproduce
- Set your phone's dark mode to be automatically enabled from sunset to sunrise.
- Open DDG app.
- Go to Settings.
- Set Theme option to "System Default".
- Observe that the app always stays in light mode, even during the night.
Expected behavior
The app should be in dark mode from sunset to sunrise in your geographical region, and in light mode from sunrise to sunset. All other apps behave accordingly (Firefox, Bitwarden, Aegis, and Signal are few OSS app examples that behave correctly, might be useful when investigating the root cause of the problem)
Environment
- DDG App Version: 5.111.0
- Device: OnePlus 7T Pro
- OS: Android 11
Florisboard had the same issue, if that could help come up with a fix?
https://github.com/florisboard/florisboard/issues/1557
This issue occurs only below Android 12
Also, with System Default
web content follows device theme. Only DDG UI does not.
We faced this problem last week, our investigations leads us to appcompat library upgrade we did, apparently, this bug was happening due to our upgrade to 1.4.1 This bug is documented and reported here https://issuetracker.google.com/issues/188681415
Is there any progress to share on the matter?
Dd
I've got this issue, still isn't fixed.
OnePlus 8T, Android 12
The issue also occurs with battery saver. The system will turn dark, but not the app (Android 12)
I still have this issue. To fix it, I have to go into Developer mode in the Android settings and override whatever the issue is. Whenever my phone resets, I have to go back into the Android Developer mode and turn the setting override back on. It's really annoying. Please fix.
I think there is need just small fix in Theming.kt
:
fun AppCompatActivity.applyTheme(theme: DuckDuckGoTheme): BroadcastReceiver? {
if (theme == DuckDuckGoTheme.SYSTEM_DEFAULT) {
val themeId =
when (resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) {
Configuration.UI_MODE_NIGHT_YES -> THEME_MAP[Pair(manifestThemeId(), DuckDuckGoTheme.DARK)]
Configuration.UI_MODE_NIGHT_NO -> THEME_MAP[Pair(manifestThemeId(), DuckDuckGoTheme.LIGHT)]
else -> THEME_MAP[Pair(manifestThemeId(), DuckDuckGoTheme.LIGHT)]
}
if (themeId != null) setTheme(themeId)
}
....
}
And, by the way, in DuckDuckGoActivity
there is fun isDarkThemeEnabled(): Boolean
which duplicate wrong logic from applyTheme
and not in use.
I think there is need just small fix in
Theming.kt
:fun AppCompatActivity.applyTheme(theme: DuckDuckGoTheme): BroadcastReceiver? { if (theme == DuckDuckGoTheme.SYSTEM_DEFAULT) { val themeId = when (resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) { Configuration.UI_MODE_NIGHT_YES -> THEME_MAP[Pair(manifestThemeId(), DuckDuckGoTheme.DARK)] Configuration.UI_MODE_NIGHT_NO -> THEME_MAP[Pair(manifestThemeId(), DuckDuckGoTheme.LIGHT)] else -> THEME_MAP[Pair(manifestThemeId(), DuckDuckGoTheme.LIGHT)] } if (themeId != null) setTheme(themeId) } .... }
And, by the way, in
DuckDuckGoActivity
there isfun isDarkThemeEnabled(): Boolean
which duplicate wrong logic fromapplyTheme
and not in use.
My brother, you figured it out. Guys, push the fix.
Yeah! Push the fix!
@malmstein cool theme refactoring, but please fix auto night mode, also this bug now in getThemedDrawable
too.
UiModeManager
provides only static information about night mode (yes/no/auto/custom), needs to get dynamic info about mode from Configuration
.
I'll provide PR with fix.
@malmstein can you take a look to the comments inside this issue and the @simonvar proposal? Not sure if you are already addressing the issue inside your current project.
Fixed in https://github.com/duckduckgo/Android/pull/2447