From 9cc5a82adf49e07ddd5f0f060e4076e5be57b038 Mon Sep 17 00:00:00 2001 From: darken Date: Thu, 26 Feb 2026 12:49:43 +0100 Subject: [PATCH] fix(widget): Sync window background with Compose theme in config activity The widget configuration activity used enableEdgeToEdge() but never synced the Android window background with the Compose Material theme. When the system dark/light mode disagreed with the app's theme setting, text became invisible (dark on dark). Also extend the bottom bar Surface under the navigation bar to eliminate the white gap. --- .../main/ui/widget/WidgetConfigurationActivity.kt | 14 ++++++++++++++ .../main/ui/widget/WidgetConfigurationScreen.kt | 6 ++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/eu/darken/capod/main/ui/widget/WidgetConfigurationActivity.kt b/app/src/main/java/eu/darken/capod/main/ui/widget/WidgetConfigurationActivity.kt index 7f47774e..c28e9bbd 100644 --- a/app/src/main/java/eu/darken/capod/main/ui/widget/WidgetConfigurationActivity.kt +++ b/app/src/main/java/eu/darken/capod/main/ui/widget/WidgetConfigurationActivity.kt @@ -7,8 +7,13 @@ import android.os.Bundle import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge import androidx.activity.viewModels +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.SideEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue +import androidx.compose.ui.graphics.luminance +import androidx.compose.ui.graphics.toArgb +import androidx.core.view.WindowCompat import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.qualifiers.ApplicationContext import eu.darken.capod.common.compose.waitForState @@ -53,6 +58,15 @@ class WidgetConfigurationActivity : Activity2() { setContent { val themeState by generalSettings.themeState.collectAsState(initial = generalSettings.currentThemeState) CapodTheme(state = themeState) { + val backgroundColor = MaterialTheme.colorScheme.background + val useDarkIcons = backgroundColor.luminance() > 0.5f + SideEffect { + window.decorView.setBackgroundColor(backgroundColor.toArgb()) + val insetsController = WindowCompat.getInsetsController(window, window.decorView) + insetsController.isAppearanceLightStatusBars = useDarkIcons + insetsController.isAppearanceLightNavigationBars = useDarkIcons + } + val state by waitForState(vm.state) state?.let { currentState -> WidgetConfigurationScreen( diff --git a/app/src/main/java/eu/darken/capod/main/ui/widget/WidgetConfigurationScreen.kt b/app/src/main/java/eu/darken/capod/main/ui/widget/WidgetConfigurationScreen.kt index 47c6c6e4..28a3058a 100644 --- a/app/src/main/java/eu/darken/capod/main/ui/widget/WidgetConfigurationScreen.kt +++ b/app/src/main/java/eu/darken/capod/main/ui/widget/WidgetConfigurationScreen.kt @@ -31,6 +31,8 @@ import androidx.compose.foundation.layout.FlowRow import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.WindowInsetsSides +import androidx.compose.foundation.layout.only import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height @@ -113,7 +115,7 @@ fun WidgetConfigurationScreen( Column( modifier = Modifier .fillMaxSize() - .windowInsetsPadding(WindowInsets.systemBars), + .windowInsetsPadding(WindowInsets.systemBars.only(WindowInsetsSides.Top + WindowInsetsSides.Horizontal)), ) { Column( modifier = Modifier @@ -326,7 +328,7 @@ fun WidgetConfigurationScreen( // Bottom bar Surface(tonalElevation = 3.dp) { - Column { + Column(modifier = Modifier.windowInsetsPadding(WindowInsets.systemBars.only(WindowInsetsSides.Bottom))) { if (!state.isPro) { Text( text = stringResource(R.string.common_feature_requires_pro_msg),