From 12262491b8bf7ed8c8e34bd7f879f42d16fe7cd2 Mon Sep 17 00:00:00 2001 From: shaominngqing Date: Wed, 4 Feb 2026 12:06:45 +0800 Subject: [PATCH] Address Gemini code review feedback - Move toNightMode() extension to core:ui module to eliminate code duplication - Refactor MainActivity flow logic to use filterIsInstance() for better readability - Remove duplicate DarkThemeConfigExt.kt files from app and feature:settings modules - Update imports in MainActivity and SettingsViewModel --- .../samples/apps/nowinandroid/MainActivity.kt | 14 ++++----- .../core/ui}/DarkThemeConfigExt.kt | 7 ++--- .../settings/impl/DarkThemeConfigExt.kt | 30 ------------------- .../settings/impl/SettingsViewModel.kt | 1 + 4 files changed, 9 insertions(+), 43 deletions(-) rename {app/src/main/kotlin/com/google/samples/apps/nowinandroid/util => core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui}/DarkThemeConfigExt.kt (77%) delete mode 100644 feature/settings/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/settings/impl/DarkThemeConfigExt.kt diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/MainActivity.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/MainActivity.kt index 90f842d0e..461298550 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/MainActivity.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/MainActivity.kt @@ -43,13 +43,14 @@ import com.google.samples.apps.nowinandroid.core.data.util.NetworkMonitor import com.google.samples.apps.nowinandroid.core.data.util.TimeZoneMonitor import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme import com.google.samples.apps.nowinandroid.core.ui.LocalTimeZone +import com.google.samples.apps.nowinandroid.core.ui.toNightMode import com.google.samples.apps.nowinandroid.ui.NiaApp import com.google.samples.apps.nowinandroid.ui.rememberNiaAppState import com.google.samples.apps.nowinandroid.util.isSystemInDarkTheme -import com.google.samples.apps.nowinandroid.util.toNightMode import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.filterIsInstance import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch @@ -86,14 +87,9 @@ class MainActivity : ComponentActivity() { // uses the correct theme. This addresses issue #633. lifecycleScope.launch { viewModel.uiState - .map { state -> - if (state is Success) { - state.userData.darkThemeConfig.toNightMode() - } else { - null - } - } - .first { it != null } // Only take the first non-null mode + .filterIsInstance() + .map { it.userData.darkThemeConfig.toNightMode() } + .first() .let { mode -> AppCompatDelegate.setDefaultNightMode(mode) } diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/util/DarkThemeConfigExt.kt b/core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/DarkThemeConfigExt.kt similarity index 77% rename from app/src/main/kotlin/com/google/samples/apps/nowinandroid/util/DarkThemeConfigExt.kt rename to core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/DarkThemeConfigExt.kt index 670685791..1d7aa97f0 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/util/DarkThemeConfigExt.kt +++ b/core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/DarkThemeConfigExt.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022 The Android Open Source Project + * Copyright 2026 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,14 +14,13 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.util +package com.google.samples.apps.nowinandroid.core.ui import androidx.appcompat.app.AppCompatDelegate import com.google.samples.apps.nowinandroid.core.model.data.DarkThemeConfig /** - * Converts [DarkThemeConfig] to the corresponding [AppCompatDelegate] night mode constant. - * This is used to set the application-level night mode for the splash screen and system UI. + * Converts [DarkThemeConfig] to [AppCompatDelegate] night mode constant. */ fun DarkThemeConfig.toNightMode(): Int = when (this) { DarkThemeConfig.FOLLOW_SYSTEM -> AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM diff --git a/feature/settings/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/settings/impl/DarkThemeConfigExt.kt b/feature/settings/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/settings/impl/DarkThemeConfigExt.kt deleted file mode 100644 index c7ba042e4..000000000 --- a/feature/settings/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/settings/impl/DarkThemeConfigExt.kt +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2022 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.samples.apps.nowinandroid.feature.settings.impl - -import androidx.appcompat.app.AppCompatDelegate -import com.google.samples.apps.nowinandroid.core.model.data.DarkThemeConfig - -/** - * Converts [DarkThemeConfig] to the corresponding [AppCompatDelegate] night mode constant. - * This is used to set the application-level night mode for the splash screen and system UI. - */ -internal fun DarkThemeConfig.toNightMode(): Int = when (this) { - DarkThemeConfig.FOLLOW_SYSTEM -> AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM - DarkThemeConfig.LIGHT -> AppCompatDelegate.MODE_NIGHT_NO - DarkThemeConfig.DARK -> AppCompatDelegate.MODE_NIGHT_YES -} diff --git a/feature/settings/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/settings/impl/SettingsViewModel.kt b/feature/settings/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/settings/impl/SettingsViewModel.kt index ddb7df2bf..ff5f67c09 100644 --- a/feature/settings/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/settings/impl/SettingsViewModel.kt +++ b/feature/settings/impl/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/settings/impl/SettingsViewModel.kt @@ -22,6 +22,7 @@ import androidx.lifecycle.viewModelScope import com.google.samples.apps.nowinandroid.core.data.repository.UserDataRepository import com.google.samples.apps.nowinandroid.core.model.data.DarkThemeConfig import com.google.samples.apps.nowinandroid.core.model.data.ThemeBrand +import com.google.samples.apps.nowinandroid.core.ui.toNightMode import com.google.samples.apps.nowinandroid.feature.settings.impl.SettingsUiState.Loading import com.google.samples.apps.nowinandroid.feature.settings.impl.SettingsUiState.Success import dagger.hilt.android.lifecycle.HiltViewModel