feat: Better At-a-Glance perceptive wallpaper colour luminance detection

This commit is contained in:
Pun Butrach
2025-11-22 22:40:13 +07:00
parent 3d08b66a23
commit 1aa5a1d90d
2 changed files with 17 additions and 6 deletions
+3
View File
@@ -16,6 +16,9 @@ This is a developer-focused change log:
* Fix folder navigation (TODO)
* Enable Material Expressive Folder Expansion animation flag
* Move to Google Sans Flex font (TODO)
* Material 3 Expressive Settings (Phase 2, TODO)
* Better At-a-Glance perceptive wallpaper colour luminance detection
* Big word that means Lawnchair will take system default hint bright/dark theme and fallback to luminosity detection for bright/dark mode detection in At a Glance.
### 🥞 Snapshot 9 (Development 4 Release 1)
@@ -1,16 +1,24 @@
package app.lawnchair.util
import android.app.WallpaperColors
import android.content.Context
import android.graphics.Color
import androidx.core.graphics.ColorUtils
import app.lawnchair.wallpaper.WallpaperColorsCompat
import app.lawnchair.wallpaper.WallpaperManagerCompat
fun isWallpaperDark(context: Context): Boolean {
val wallpaperManager = WallpaperManagerCompat.INSTANCE.get(context)
val colors: WallpaperColorsCompat? = wallpaperManager.wallpaperColors
return colors?.primaryColor?.let { argb ->
val darkness =
1 - (0.299 * Color.red(argb) + 0.587 * Color.green(argb) + 0.114 * Color.blue(argb)) / 255
darkness >= 0.5
} ?: false
if (colors != null) {
val hints = colors.colorHints
if ((hints and WallpaperColors.HINT_SUPPORTS_DARK_TEXT) != 0) {
return false
}
if ((hints and WallpaperColors.HINT_SUPPORTS_DARK_THEME) != 0) {
return true
}
}
val primaryColor = colors?.primaryColor ?: return false
return ColorUtils.calculateLuminance(primaryColor) < 0.5
}