Skip to content

Commit 30e68fc

Browse files
committed
Moved Preference Helper Initialization to Viewmodel
1 parent d4553ea commit 30e68fc

File tree

3 files changed

+23
-17
lines changed

3 files changed

+23
-17
lines changed

androidApp/src/main/kotlin/org/mifos/mobile/HomeActivity.kt

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import androidx.activity.viewModels
1717
import androidx.compose.foundation.isSystemInDarkTheme
1818
import androidx.compose.runtime.CompositionLocalProvider
1919
import androidx.compose.runtime.DisposableEffect
20-
import androidx.compose.runtime.collectAsState
2120
import androidx.compose.runtime.getValue
2221
import androidx.compose.runtime.mutableStateOf
2322
import androidx.compose.runtime.setValue
@@ -33,7 +32,6 @@ import kotlinx.coroutines.flow.onEach
3332
import kotlinx.coroutines.launch
3433
import org.mifos.mobile.HomeActivityUiState.Success
3534
import org.mifos.mobile.core.data.utils.NetworkMonitor
36-
import org.mifos.mobile.core.datastore.PreferencesHelper
3735
import org.mifos.mobile.core.designsystem.theme.MifosMobileTheme
3836
import org.mifos.mobile.core.designsystem.theme.darkScrim
3937
import org.mifos.mobile.core.designsystem.theme.lightScrim
@@ -50,17 +48,13 @@ class HomeActivity : ComponentActivity() {
5048
@Inject
5149
lateinit var networkMonitor: NetworkMonitor
5250

53-
@Inject
54-
lateinit var preferenceHelper: PreferencesHelper
55-
5651
private val viewModel: HomeActivityViewModel by viewModels()
5752

5853
override fun onCreate(savedInstanceState: Bundle?) {
5954
val splashScreen = installSplashScreen()
6055
super.onCreate(savedInstanceState)
6156
var uiState: HomeActivityUiState by mutableStateOf(HomeActivityUiState.Loading)
6257

63-
// Update the uiState
6458
lifecycleScope.launch {
6559
lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
6660
viewModel.uiState
@@ -76,6 +70,7 @@ class HomeActivity : ComponentActivity() {
7670
}
7771
}
7872

73+
7974
enableEdgeToEdge()
8075

8176
setContent {
@@ -99,12 +94,15 @@ class HomeActivity : ComponentActivity() {
9994
onDispose {}
10095
}
10196

102-
val currentTheme by preferenceHelper.themeFlow.collectAsState()
103-
val isDarkMode = when (currentTheme) {
104-
AppTheme.DARK -> true
105-
AppTheme.LIGHT -> false
106-
AppTheme.SYSTEM -> isSystemInDarkMode
97+
val isDarkMode = when (uiState) {
98+
is Success -> when ((uiState as Success).themeState) {
99+
AppTheme.DARK -> true
100+
AppTheme.LIGHT -> false
101+
AppTheme.SYSTEM -> isSystemInDarkMode
102+
}
103+
else -> isSystemInDarkMode
107104
}
105+
108106
CompositionLocalProvider {
109107
MifosMobileTheme(isDarkMode) {
110108
RootNavGraph(
@@ -124,4 +122,4 @@ class HomeActivity : ComponentActivity() {
124122
}
125123
}
126124
}
127-
}
125+
}

androidApp/src/main/kotlin/org/mifos/mobile/HomeActivityViewModel.kt

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,22 +14,29 @@ import androidx.lifecycle.viewModelScope
1414
import dagger.hilt.android.lifecycle.HiltViewModel
1515
import kotlinx.coroutines.flow.SharingStarted
1616
import kotlinx.coroutines.flow.StateFlow
17+
import kotlinx.coroutines.flow.combine
1718
import kotlinx.coroutines.flow.map
1819
import kotlinx.coroutines.flow.stateIn
1920
import kotlinx.coroutines.launch
2021
import org.mifos.library.passcode.data.PasscodeManager
2122
import org.mifos.mobile.core.data.repository.UserDataRepository
23+
import org.mifos.mobile.core.datastore.PreferencesHelper
2224
import org.mifos.mobile.core.model.UserData
25+
import org.mifos.mobile.core.model.enums.AppTheme
2326
import javax.inject.Inject
2427

2528
@HiltViewModel
2629
class HomeActivityViewModel @Inject constructor(
2730
private val userDataRepository: UserDataRepository,
2831
private val passcodeManager: PasscodeManager,
32+
private val preferencesHelper: PreferencesHelper
2933
) : ViewModel() {
3034

31-
val uiState: StateFlow<HomeActivityUiState> = userDataRepository.userData.map {
32-
HomeActivityUiState.Success(it)
35+
val uiState: StateFlow<HomeActivityUiState> = combine(
36+
userDataRepository.userData,
37+
preferencesHelper.themeFlow
38+
) { userData, themeState ->
39+
HomeActivityUiState.Success(userData, themeState)
3340
}.stateIn(
3441
scope = viewModelScope,
3542
initialValue = HomeActivityUiState.Loading,
@@ -46,5 +53,5 @@ class HomeActivityViewModel @Inject constructor(
4653

4754
sealed interface HomeActivityUiState {
4855
data object Loading : HomeActivityUiState
49-
data class Success(val userData: UserData) : HomeActivityUiState
56+
data class Success(val userData: UserData,val themeState: AppTheme) : HomeActivityUiState
5057
}

core/datastore/src/main/java/org/mifos/mobile/core/datastore/PreferencesHelper.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import kotlinx.coroutines.channels.Channel
1818
import kotlinx.coroutines.channels.awaitClose
1919
import kotlinx.coroutines.flow.MutableStateFlow
2020
import kotlinx.coroutines.flow.StateFlow
21+
import kotlinx.coroutines.flow.asStateFlow
2122
import kotlinx.coroutines.flow.buffer
2223
import kotlinx.coroutines.flow.callbackFlow
2324
import org.mifos.mobile.core.model.enums.AppTheme
@@ -31,8 +32,8 @@ import javax.inject.Singleton
3132
*/
3233
@Singleton
3334
class PreferencesHelper @Inject constructor(@ApplicationContext context: Context?) {
34-
val themeFlowState: MutableStateFlow<AppTheme>
35-
val themeFlow: StateFlow<AppTheme> get() = themeFlowState
35+
private val themeFlowState: MutableStateFlow<AppTheme>
36+
val themeFlow: StateFlow<AppTheme> get() = themeFlowState.asStateFlow()
3637

3738
private val sharedPreferences: SharedPreferences? =
3839
PreferenceManager.getDefaultSharedPreferences(context)

0 commit comments

Comments
 (0)