From 1aa5a1d90d4c229f749ebe04ce1326ef5e8ea359 Mon Sep 17 00:00:00 2001 From: Pun Butrach Date: Sat, 22 Nov 2025 22:40:13 +0700 Subject: [PATCH] feat: Better At-a-Glance perceptive wallpaper colour luminance detection --- GITHUB_CHANGELOG.md | 3 +++ .../src/app/lawnchair/util/WallpaperUtils.kt | 20 +++++++++++++------ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/GITHUB_CHANGELOG.md b/GITHUB_CHANGELOG.md index 869e894d90..2990594423 100644 --- a/GITHUB_CHANGELOG.md +++ b/GITHUB_CHANGELOG.md @@ -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) diff --git a/lawnchair/src/app/lawnchair/util/WallpaperUtils.kt b/lawnchair/src/app/lawnchair/util/WallpaperUtils.kt index faf44d14b3..73a8c61119 100644 --- a/lawnchair/src/app/lawnchair/util/WallpaperUtils.kt +++ b/lawnchair/src/app/lawnchair/util/WallpaperUtils.kt @@ -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 }