Skip to content

Commit 5701430

Browse files
committed
feat :: 앱 시작 시 선택한 테마 적용
1 parent 1db03b4 commit 5701430

3 files changed

Lines changed: 24 additions & 1 deletion

File tree

app/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ dependencies {
9292
implementation(project(ProjectPaths.Core.DEVICE))
9393
implementation(project(ProjectPaths.Core.WIDGET))
9494
implementation(project(ProjectPaths.Core.ONBOARDING))
95+
implementation(project(ProjectPaths.Core.THEME))
9596

9697
implementation(project(ProjectPaths.DATA))
9798
implementation(project(ProjectPaths.DATABASE))

app/src/main/kotlin/team/aliens/dms/android/app/MainActivity.kt

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@ import androidx.activity.ComponentActivity
66
import androidx.activity.compose.setContent
77
import androidx.activity.result.contract.ActivityResultContracts
88
import androidx.activity.viewModels
9+
import androidx.compose.foundation.isSystemInDarkTheme
10+
import androidx.compose.runtime.getValue
911
import androidx.core.view.WindowCompat
12+
import androidx.lifecycle.compose.collectAsStateWithLifecycle
1013
import androidx.lifecycle.lifecycleScope
1114
import com.google.android.play.core.appupdate.AppUpdateManagerFactory
1215
import com.google.android.play.core.appupdate.AppUpdateOptions
@@ -19,6 +22,7 @@ import team.aliens.dms.android.app.ui.DmsApp
1922
import team.aliens.dms.android.core.designsystem.DmsTheme
2023
import team.aliens.dms.android.core.jwt.di.IsJwtAvailable
2124
import team.aliens.dms.android.core.notification.DeviceTokenManager
25+
import team.aliens.dms.android.core.theme.ThemeMode
2226
import javax.inject.Inject
2327

2428
@AndroidEntryPoint
@@ -52,7 +56,14 @@ class MainActivity : ComponentActivity() {
5256

5357
checkAppUpdate()
5458
setContent {
55-
DmsTheme {
59+
val themeMode by mainViewModel.themeMode.collectAsStateWithLifecycle()
60+
val systemIsDark = isSystemInDarkTheme()
61+
val isDark = when (themeMode) {
62+
ThemeMode.SYSTEM -> systemIsDark
63+
ThemeMode.LIGHT -> false
64+
ThemeMode.DARK -> true
65+
}
66+
DmsTheme(isDarkTheme = isDark) {
5667
DmsApp()
5768
}
5869
}

app/src/main/kotlin/team/aliens/dms/android/app/MainActivityViewModel.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import kotlinx.coroutines.flow.StateFlow
88
import kotlinx.coroutines.flow.asStateFlow
99
import kotlinx.coroutines.launch
1010
import team.aliens.dms.android.core.jwt.JwtProvider
11+
import team.aliens.dms.android.core.theme.ThemeMode
12+
import team.aliens.dms.android.core.theme.datastore.ThemeDataStoreDataSource
1113
import team.aliens.dms.android.onboarding.datastore.OnboardingDataStoreDataSource
1214
import team.aliens.dms.android.shared.exception.util.runCatchingCancellable
1315
import javax.inject.Inject
@@ -16,6 +18,7 @@ import javax.inject.Inject
1618
class MainActivityViewModel @Inject constructor(
1719
private val jwtProvider: JwtProvider,
1820
private val onboardingDataSource: OnboardingDataStoreDataSource,
21+
private val themeDataStoreDataSource: ThemeDataStoreDataSource,
1922
) : ViewModel() {
2023
val autoSignInAvailable: StateFlow<Boolean> = jwtProvider.isCachedRefreshTokenAvailable
2124

@@ -28,12 +31,20 @@ class MainActivityViewModel @Inject constructor(
2831
private val _isStartupResolved = MutableStateFlow(false)
2932
val isStartupResolved: StateFlow<Boolean> = _isStartupResolved.asStateFlow()
3033

34+
private val _themeMode = MutableStateFlow(ThemeMode.SYSTEM)
35+
val themeMode: StateFlow<ThemeMode> = _themeMode.asStateFlow()
36+
3137
init {
3238
viewModelScope.launch {
3339
runCatchingCancellable { jwtProvider.resolveSession() }
3440
_isOnboardingCompleted.value = onboardingDataSource.getOnboardingCompleted()
3541
_isStartupResolved.value = true
3642
}
43+
viewModelScope.launch {
44+
themeDataStoreDataSource.getThemeModeFlow().collect { mode ->
45+
_themeMode.value = mode
46+
}
47+
}
3748
}
3849

3950
fun resolveSession() {

0 commit comments

Comments
 (0)