From fcce3c27487c23bdbb83e4893eced4f203d4912e Mon Sep 17 00:00:00 2001 From: soyeonLee <109227292+soyeonLee126@users.noreply.github.com> Date: Tue, 18 Aug 2026 09:05:51 +0900 Subject: [PATCH 1/8] =?UTF-8?q?feat:=20=EC=84=A4=EC=A0=95/=EB=8B=89?= =?UTF-8?q?=EB=84=A4=EC=9E=84=20=EB=B3=80=EA=B2=BD=20=ED=99=94=EB=A9=B4=20?= =?UTF-8?q?=EC=8B=9C=EC=95=88=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 설정 목록에 알림 설정 항목과 ON/OFF 배지 추가 - OS 알림 허용 여부를 읽어 표시하고, 탭하면 앱별 알림 설정으로 이동 - 화면이 다시 보일 때마다 다시 읽어 배지를 갱신 - 목록 항목 높이/여백과 화면 배경을 시안 값으로 정렬 - 상단 내비게이션 배경을 화면 배경색으로 명시 기본값이 기기 다크 모드를 따라가 라이트로 고정된 셸과 어긋났다 - 시스템 바 아이콘 색을 밝은 배경용으로 고정 같은 이유로 기기가 다크 모드면 흰 배경에 흰 아이콘이 겹쳤다 - 닉네임 변경 화면 안내 문구/입력 필드/버튼 여백을 시안에 맞춤 입력 필드는 모서리가 직각이고 높이가 52dp라 OutlinedTextField 대신 BasicTextField 로 다시 그렸다 --- .../com/gamss/android/app/MainActivity.kt | 10 +++- .../designsystem/textfield/GamssTextField.kt | 43 +++++++++++---- feature/setting/build.gradle.kts | 1 + .../setting/accountinfo/AccountInfoScreen.kt | 6 ++- .../setting/component/SettingListItem.kt | 52 ++++++++++++++++++- .../feature/setting/main/SettingScreen.kt | 52 ++++++++++++++++++- .../nicknamechange/NicknameChangeScreen.kt | 17 +++--- .../setting/src/main/res/values/strings.xml | 4 ++ gradle/libs.versions.toml | 1 + 9 files changed, 164 insertions(+), 22 deletions(-) diff --git a/app/src/main/kotlin/com/gamss/android/app/MainActivity.kt b/app/src/main/kotlin/com/gamss/android/app/MainActivity.kt index 5b8c72db..a830070e 100644 --- a/app/src/main/kotlin/com/gamss/android/app/MainActivity.kt +++ b/app/src/main/kotlin/com/gamss/android/app/MainActivity.kt @@ -1,7 +1,9 @@ package com.gamss.android.app +import android.graphics.Color import android.os.Bundle import androidx.activity.ComponentActivity +import androidx.activity.SystemBarStyle import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge import com.gamss.android.app.navigation.GamssRootNavHost @@ -13,7 +15,13 @@ class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - enableEdgeToEdge() + // 인자 없는 기본값은 시스템 바 아이콘 색을 기기 다크 모드에 맞춘다. 하지만 셸이 라이트로 + // 고정돼 있어(MainScreen 참고) 기기가 다크면 흰 배경에 흰 아이콘이 겹친다. 다크 시안이 + // 나와 셸 고정을 풀 때 이 스타일도 함께 되돌린다. + enableEdgeToEdge( + statusBarStyle = SystemBarStyle.light(Color.TRANSPARENT, Color.BLACK), + navigationBarStyle = SystemBarStyle.light(Color.TRANSPARENT, Color.BLACK), + ) setContent { GamssTheme { GamssRootNavHost() diff --git a/core/designsystem/src/main/java/com/gamss/android/core/designsystem/textfield/GamssTextField.kt b/core/designsystem/src/main/java/com/gamss/android/core/designsystem/textfield/GamssTextField.kt index 9a7faad3..3d540c18 100644 --- a/core/designsystem/src/main/java/com/gamss/android/core/designsystem/textfield/GamssTextField.kt +++ b/core/designsystem/src/main/java/com/gamss/android/core/designsystem/textfield/GamssTextField.kt @@ -1,20 +1,30 @@ package com.gamss.android.core.designsystem.textfield +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height -import androidx.compose.material3.OutlinedTextField -import androidx.compose.material3.OutlinedTextFieldDefaults +import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.text.BasicTextField import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp import com.gamss.android.core.designsystem.theme.GamssTheme /** - * 라벨 텍스트 + [OutlinedTextField] 조합의 입력 필드. + * 라벨 텍스트 + 입력 필드 조합의 입력 필드. * 라벨이 필드 위에 별도로 표시되는 형태 + * + * 시안의 필드는 모서리가 직각이고 높이가 52dp라, 최소 높이 56dp에 자체 여백을 가진 + * [androidx.compose.material3.OutlinedTextField] 대신 [BasicTextField]로 그린다. */ @Composable fun GamssTextField( @@ -31,19 +41,32 @@ fun GamssTextField( color = GamssTheme.colors.gray950, ) Spacer(modifier = Modifier.height(GamssTheme.spacing.spacing200)) - OutlinedTextField( + BasicTextField( modifier = Modifier.fillMaxWidth(), value = value, onValueChange = onValueChange, singleLine = singleLine, - colors = OutlinedTextFieldDefaults.colors( - focusedBorderColor = GamssTheme.colors.gray200, - unfocusedBorderColor = GamssTheme.colors.gray200, - ), - ) + textStyle = GamssTheme.typography.body3Medium.copy(color = GamssTheme.colors.gray950), + cursorBrush = SolidColor(GamssTheme.colors.gray950), + ) { innerTextField -> + Box( + modifier = Modifier + .fillMaxWidth() + .heightIn(min = FieldMinHeight) + .background(GamssTheme.colors.gray025) + .border(width = FieldBorderWidth, color = GamssTheme.colors.gray950) + .padding(horizontal = GamssTheme.spacing.spacing300), + contentAlignment = Alignment.CenterStart, + ) { + innerTextField() + } + } } } +private val FieldMinHeight = 52.dp +private val FieldBorderWidth = 1.dp + @Preview(name = "GamssTextField", showBackground = true) @Composable @Suppress("UnusedPrivateMember") @@ -51,7 +74,7 @@ private fun GamssTextFieldPreview() { GamssTheme { GamssTextField( modifier = Modifier.fillMaxWidth(), - label = "닉네임 변경", + label = "변경할 닉네임을 입력해주세요.", value = "송지연", onValueChange = {}, ) diff --git a/feature/setting/build.gradle.kts b/feature/setting/build.gradle.kts index 1f7ac65c..1fc9ad9b 100644 --- a/feature/setting/build.gradle.kts +++ b/feature/setting/build.gradle.kts @@ -10,5 +10,6 @@ dependencies { implementation(projects.core.common) implementation(projects.core.ui) implementation(projects.domain) + implementation(libs.androidx.lifecycle.runtime.compose) implementation(libs.compose.material.icons.core) } \ No newline at end of file diff --git a/feature/setting/src/main/java/com/gamss/android/feature/setting/accountinfo/AccountInfoScreen.kt b/feature/setting/src/main/java/com/gamss/android/feature/setting/accountinfo/AccountInfoScreen.kt index 328a5762..cf17d224 100644 --- a/feature/setting/src/main/java/com/gamss/android/feature/setting/accountinfo/AccountInfoScreen.kt +++ b/feature/setting/src/main/java/com/gamss/android/feature/setting/accountinfo/AccountInfoScreen.kt @@ -73,10 +73,12 @@ fun AccountInfoScreen( Column( modifier = modifier .fillMaxSize() - .background(GamssTheme.colors.gray025), + .background(GamssTheme.colors.background), ) { GamssTopNavigation( - modifier = Modifier.padding(bottom = GamssTheme.spacing.spacing150), + modifier = Modifier.padding(bottom = GamssTheme.spacing.spacing300), + // 기본값은 기기의 다크 모드를 보므로, 라이트로 고정된 앱 테마와 어긋나지 않게 직접 넘긴다. + backgroundColor = GamssTheme.colors.background, title = stringResource(R.string.setting_list_user_account), showLeftIcon = true, onLeftIconClick = onBackClick, diff --git a/feature/setting/src/main/java/com/gamss/android/feature/setting/component/SettingListItem.kt b/feature/setting/src/main/java/com/gamss/android/feature/setting/component/SettingListItem.kt index 12cd4ebc..23aa808d 100644 --- a/feature/setting/src/main/java/com/gamss/android/feature/setting/component/SettingListItem.kt +++ b/feature/setting/src/main/java/com/gamss/android/feature/setting/component/SettingListItem.kt @@ -1,18 +1,23 @@ package com.gamss.android.feature.setting.component +import androidx.annotation.StringRes +import androidx.compose.foundation.background import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.shape.CircleShape import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.gamss.android.core.designsystem.modifier.noRippleClickableIfNotNull import com.gamss.android.core.designsystem.theme.GamssTheme +import com.gamss.android.feature.setting.R @Suppress("LongParameterList") @Composable @@ -21,6 +26,7 @@ fun SettingListItem( contentColor: Color = GamssTheme.colors.gray950, modifier: Modifier = Modifier, onClick: (() -> Unit)? = null, + badge: SettingListItemBadge? = null, additionalInfo: String? = null, contentPadding: PaddingValues = SettingListItemDefaults.ContentPadding, ) { @@ -37,6 +43,13 @@ fun SettingListItem( color = contentColor, ) + if (badge != null) { + BadgeChip( + modifier = Modifier.padding(start = GamssTheme.spacing.spacing050), + badge = badge, + ) + } + Spacer(modifier = Modifier.weight(1f)) if (additionalInfo != null) { @@ -49,6 +62,43 @@ fun SettingListItem( } } +/** + * 제목 바로 옆에 붙는 상태 배지입니다. 알림 설정의 ON/OFF 표시에 사용합니다. + * + * 라벨과 색을 한곳에 묶어 두어 두 상태가 서로 어긋나지 않게 합니다. + */ +enum class SettingListItemBadge(@StringRes internal val labelRes: Int) { + On(R.string.setting_badge_on), + Off(R.string.setting_badge_off), +} + +@Composable +private fun BadgeChip( + badge: SettingListItemBadge, + modifier: Modifier = Modifier, +) { + val containerColor = when (badge) { + SettingListItemBadge.On -> GamssTheme.colors.apricot + SettingListItemBadge.Off -> GamssTheme.colors.gray200 + } + val contentColor = when (badge) { + SettingListItemBadge.On -> GamssTheme.colors.white + SettingListItemBadge.Off -> GamssTheme.colors.gray900 + } + + Text( + modifier = modifier + .background(color = containerColor, shape = CircleShape) + .padding( + horizontal = GamssTheme.spacing.spacing075, + vertical = GamssTheme.spacing.spacing025, + ), + text = stringResource(badge.labelRes), + style = GamssTheme.typography.caption3, + color = contentColor, + ) +} + object SettingListItemDefaults { - val ContentPadding = PaddingValues(horizontal = 18.dp, vertical = 12.dp) + val ContentPadding = PaddingValues(horizontal = 18.dp, vertical = 8.dp) } diff --git a/feature/setting/src/main/java/com/gamss/android/feature/setting/main/SettingScreen.kt b/feature/setting/src/main/java/com/gamss/android/feature/setting/main/SettingScreen.kt index 297a95e9..945fdfdc 100644 --- a/feature/setting/src/main/java/com/gamss/android/feature/setting/main/SettingScreen.kt +++ b/feature/setting/src/main/java/com/gamss/android/feature/setting/main/SettingScreen.kt @@ -1,6 +1,9 @@ package com.gamss.android.feature.setting.main +import android.content.ActivityNotFoundException import android.content.Context +import android.content.Intent +import android.provider.Settings import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -10,14 +13,22 @@ import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material3.HorizontalDivider import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource +import androidx.core.app.NotificationManagerCompat +import androidx.core.net.toUri +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.compose.LifecycleEventEffect import com.gamss.android.core.designsystem.theme.GamssTheme import com.gamss.android.core.designsystem.topnavigation.GamssTopNavigation import com.gamss.android.feature.setting.R import com.gamss.android.feature.setting.component.SettingListItem +import com.gamss.android.feature.setting.component.SettingListItemBadge @Composable fun SettingScreen( @@ -30,14 +41,22 @@ fun SettingScreen( val context = LocalContext.current val appVersion = remember(context) { context.appVersion() } + // 알림 허용 여부는 앱 밖(OS 설정)에서 바뀌므로, 화면이 다시 보일 때마다 읽어 배지를 갱신한다. + var notificationsEnabled by remember(context) { mutableStateOf(context.notificationsEnabled()) } + LifecycleEventEffect(Lifecycle.Event.ON_RESUME) { + notificationsEnabled = context.notificationsEnabled() + } + Column( modifier = modifier .fillMaxSize() - .background(GamssTheme.colors.gray025) + .background(GamssTheme.colors.background) .verticalScroll(rememberScrollState()), ) { GamssTopNavigation( - modifier = Modifier.padding(bottom = GamssTheme.spacing.spacing150), + modifier = Modifier.padding(bottom = GamssTheme.spacing.spacing300), + // 기본값은 기기의 다크 모드를 보므로, 라이트로 고정된 앱 테마와 어긋나지 않게 직접 넘긴다. + backgroundColor = GamssTheme.colors.background, title = stringResource(R.string.setting_title), showLeftIcon = true, onLeftIconClick = onBackClick, @@ -49,6 +68,17 @@ fun SettingScreen( ) SettingDivider() + SettingListItem( + title = stringResource(R.string.setting_list_notification), + onClick = { context.openNotificationSettings() }, + badge = if (notificationsEnabled) { + SettingListItemBadge.On + } else { + SettingListItemBadge.Off + }, + ) + SettingDivider() + Column(verticalArrangement = Arrangement.spacedBy(GamssTheme.spacing.spacing300)) { if (SHOW_SERVICE_TERMS) { SettingListItem( @@ -80,5 +110,23 @@ private fun SettingDivider() { private fun Context.appVersion(): String = packageManager.getPackageInfo(packageName, 0).versionName.orEmpty() +private fun Context.notificationsEnabled(): Boolean = + NotificationManagerCompat.from(this).areNotificationsEnabled() + +/** + * 앱 내에 알림 토글을 두지 않고 OS의 앱별 알림 설정으로 보낸다. + */ +private fun Context.openNotificationSettings() { + try { + startActivity( + Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS) + .putExtra(Settings.EXTRA_APP_PACKAGE, packageName), + ) + } catch (_: ActivityNotFoundException) { + // 앱별 알림 설정 화면이 없는 기기를 위해 앱 정보 화면으로 대체한다. + startActivity(Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, "package:$packageName".toUri())) + } +} + // 약관과 처리방침이 한 문서에 함께 실려 있다. 문서가 분리되면 true 로 되돌린다. private const val SHOW_SERVICE_TERMS = false diff --git a/feature/setting/src/main/java/com/gamss/android/feature/setting/nicknamechange/NicknameChangeScreen.kt b/feature/setting/src/main/java/com/gamss/android/feature/setting/nicknamechange/NicknameChangeScreen.kt index 3c4e80ba..d8aa41fe 100644 --- a/feature/setting/src/main/java/com/gamss/android/feature/setting/nicknamechange/NicknameChangeScreen.kt +++ b/feature/setting/src/main/java/com/gamss/android/feature/setting/nicknamechange/NicknameChangeScreen.kt @@ -1,6 +1,7 @@ package com.gamss.android.feature.setting.nicknamechange import android.widget.Toast +import androidx.compose.foundation.background import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize @@ -58,9 +59,12 @@ fun NicknameChangeScreen( Column( modifier = modifier .fillMaxSize() + .background(GamssTheme.colors.background) .imePadding(), ) { GamssTopNavigation( + // 기본값은 기기의 다크 모드를 보므로, 라이트로 고정된 앱 테마와 어긋나지 않게 직접 넘긴다. + backgroundColor = GamssTheme.colors.background, title = stringResource(R.string.account_info_nickname_change), showLeftIcon = true, onLeftIconClick = onBackClick, @@ -69,11 +73,9 @@ fun NicknameChangeScreen( GamssTextField( modifier = Modifier .fillMaxWidth() - .padding( - horizontal = 18.dp, - vertical = GamssTheme.spacing.spacing400, - ), - label = stringResource(R.string.account_info_nickname_change), + .padding(horizontal = ScreenHorizontalPadding) + .padding(top = GamssTheme.spacing.spacing300), + label = stringResource(R.string.nickname_change_input_label), value = state.nicknameInput, onValueChange = { nickname -> if (nickname.length <= NicknamePolicy.MAX_LENGTH) { @@ -87,7 +89,8 @@ fun NicknameChangeScreen( GamssButton( modifier = Modifier .fillMaxWidth() - .padding(18.dp), + .padding(horizontal = ScreenHorizontalPadding) + .padding(bottom = GamssTheme.spacing.spacing200), label = stringResource(R.string.nickname_change_save), onClick = viewModel::saveNickname, variant = GamssButtonVariant.Primary, @@ -96,6 +99,8 @@ fun NicknameChangeScreen( } } +private val ScreenHorizontalPadding = 18.dp + private fun NicknameFailureReason.toMessage(): String = when (this) { NicknameFailureReason.MISSING -> "닉네임을 입력해주세요" diff --git a/feature/setting/src/main/res/values/strings.xml b/feature/setting/src/main/res/values/strings.xml index 4b9ec673..de890b09 100644 --- a/feature/setting/src/main/res/values/strings.xml +++ b/feature/setting/src/main/res/values/strings.xml @@ -2,6 +2,9 @@ 설정 계정 정보 + 알림 설정 + ON + OFF 서비스 이용약관 개인정보 처리방침 앱 버전 @@ -16,5 +19,6 @@ 회원 탈퇴 시 지금까지 기록된 카드와 대화 내용은\n영원히 삭제되며 복구되지 않아요. 탈퇴하기 뒤로가기 + 변경할 닉네임을 입력해주세요. 저장하기 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e3b3c180..4b6963f1 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -46,6 +46,7 @@ paging = "3.4.2" [libraries] androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activity" } androidx-hilt-navigation-compose = { module = "androidx.hilt:hilt-navigation-compose", version.ref = "androidx-hilt" } +androidx-lifecycle-runtime-compose = { module = "androidx.lifecycle:lifecycle-runtime-compose", version.ref = "androidx-lifecycle" } androidx-lifecycle-runtime-ktx = { module = "androidx.lifecycle:lifecycle-runtime-ktx", version.ref = "androidx-lifecycle" } androidx-lifecycle-viewmodel-ktx = { module = "androidx.lifecycle:lifecycle-viewmodel-ktx", version.ref = "androidx-lifecycle" } androidx-lifecycle-viewmodel-navigation3 = { module = "androidx.lifecycle:lifecycle-viewmodel-navigation3-android", version.ref = "lifecycle-viewmodel-navigation3" } From 0bffe807e1e1f27ed82196c706ffc678e865ca0e Mon Sep 17 00:00:00 2001 From: soyeonLee <109227292+soyeonLee126@users.noreply.github.com> Date: Tue, 18 Aug 2026 11:30:10 +0900 Subject: [PATCH 2/8] =?UTF-8?q?fix:=20=EB=8B=A4=ED=81=AC=20=EB=AA=A8?= =?UTF-8?q?=EB=93=9C=20=EA=B8=B0=EA=B8=B0=EC=97=90=EC=84=9C=20=EC=95=B1=20?= =?UTF-8?q?=EC=85=B8=EA=B3=BC=20=EC=8B=9C=EC=8A=A4=ED=85=9C=20=EB=B0=94=20?= =?UTF-8?q?=EC=83=89=EC=9D=B4=20=EC=96=B4=EA=B8=8B=EB=82=98=EB=8A=94=20?= =?UTF-8?q?=EB=AC=B8=EC=A0=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - GamssTopNavigation 의 배경 기본값과 로고 분기를 isSystemInDarkTheme() 대신 앱 테마 기준으로 바꿈 셸이 라이트로 고정된 동안 기기 다크 모드를 직접 보면 흰 배경에 검은 상단바가 나왔다 - 판정에 쓸 GamssColors.isDark 토큰 추가 - 호출부 5곳에서 기본값을 우회하던 backgroundColor 인자와 주석 제거 - MainActivity 의 테마도 라이트로 고정 시스템 바 아이콘만 라이트로 고정돼 있어 다크 모드 기기의 로그인/온보딩 화면에서 검은 배경에 검은 아이콘이 겹쳤다 - values-night 윈도우 배경도 라이트로 통일해 첫 프레임 깜빡임 제거 - Material 색 스킴에 primary/onPrimary 를 지정 CircularProgressIndicator 가 M3 기본 보라를 쓰고 있었다 --- .../kotlin/com/gamss/android/app/MainActivity.kt | 7 +++---- app/src/main/res/values-night/themes.xml | 3 ++- .../android/core/designsystem/theme/Color.kt | 5 +++++ .../android/core/designsystem/theme/Theme.kt | 14 ++++++++++++-- .../topnavigation/GamssTopNavigation.kt | 15 +++------------ .../feature/chat/component/ChattingListTopBar.kt | 1 - .../feature/onboarding/OnboardingScreen.kt | 1 - .../setting/accountinfo/AccountInfoScreen.kt | 2 -- .../android/feature/setting/main/SettingScreen.kt | 2 -- .../nicknamechange/NicknameChangeScreen.kt | 2 -- 10 files changed, 25 insertions(+), 27 deletions(-) diff --git a/app/src/main/kotlin/com/gamss/android/app/MainActivity.kt b/app/src/main/kotlin/com/gamss/android/app/MainActivity.kt index a830070e..fe954f99 100644 --- a/app/src/main/kotlin/com/gamss/android/app/MainActivity.kt +++ b/app/src/main/kotlin/com/gamss/android/app/MainActivity.kt @@ -15,15 +15,14 @@ class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - // 인자 없는 기본값은 시스템 바 아이콘 색을 기기 다크 모드에 맞춘다. 하지만 셸이 라이트로 - // 고정돼 있어(MainScreen 참고) 기기가 다크면 흰 배경에 흰 아이콘이 겹친다. 다크 시안이 - // 나와 셸 고정을 풀 때 이 스타일도 함께 되돌린다. + // 시스템 바 아이콘과 테마를 모두 라이트로 고정한다. 둘 중 하나만 고정하면 다크 모드 기기에서 + // 검은 배경에 검은 아이콘이 겹친다. 다크 시안이 나오면 이 고정과 MainScreen 의 고정을 함께 푼다. enableEdgeToEdge( statusBarStyle = SystemBarStyle.light(Color.TRANSPARENT, Color.BLACK), navigationBarStyle = SystemBarStyle.light(Color.TRANSPARENT, Color.BLACK), ) setContent { - GamssTheme { + GamssTheme(darkTheme = false) { GamssRootNavHost() } } diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml index e53a9879..869ce45b 100644 --- a/app/src/main/res/values-night/themes.xml +++ b/app/src/main/res/values-night/themes.xml @@ -1,4 +1,5 @@ -