Files
tripMoney/app/src/main/java/cc/n0th1ng/tripmoney/viewmodel/SettingsViewModel.kt
Rafal Wisniewski 767d54e8f6 init
2026-04-02 10:46:41 +02:00

106 lines
3.2 KiB
Kotlin

package cc.n0th1ng.tripmoney.viewmodel
import android.app.UiModeManager
import android.content.Context
import android.os.Build
import androidx.annotation.RequiresApi
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import cc.n0th1ng.tripmoney.data.repository.AppTheme
import cc.n0th1ng.tripmoney.data.repository.PreferencesRepository
import cc.n0th1ng.tripmoney.utils.Currencies
import dagger.Provides
import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.android.scopes.ViewScoped
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.receiveAsFlow
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.flow.take
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
import javax.inject.Inject
@HiltViewModel
class SettingsViewModel @Inject constructor(
private val repo: PreferencesRepository,
@ApplicationContext private val context: Context
) : ViewModel() {
private val uiModeManager: UiModeManager =
context.getSystemService(Context.UI_MODE_SERVICE) as UiModeManager
val theme = repo.themeFlow
.stateIn(
viewModelScope,
SharingStarted.WhileSubscribed(5000),
AppTheme.SYSTEM
)
val autoOpenStartupPref = repo.currentAddExpenseSwitchFlow
.take(1)
.stateIn(
scope = viewModelScope,
started = SharingStarted.WhileSubscribed(5000),
initialValue = null
)
val addExpenseSwitch = repo.currentAddExpenseSwitchFlow.stateIn(
viewModelScope, SharingStarted.WhileSubscribed(5000), false
)
val currentTrip = repo.currentTripFlow.stateIn(
viewModelScope, SharingStarted.WhileSubscribed(5000),
-1
)
val defaultCurrency = repo.defaultCurrencyFlow.stateIn(
viewModelScope, SharingStarted.WhileSubscribed(5000),
Currencies.default()
)
fun setDefaultCurrency(currency: Currencies) {
viewModelScope.launch {
repo.saveDefaultCurrency(currency)
}
}
fun setCurrentAddExpenseSwitch(value: Boolean) {
viewModelScope.launch {
repo.saveAddExpenseSwitch(value)
}
}
fun setCurrentTrip(tripId: Int) {
viewModelScope.launch {
repo.saveCurrentTrip(tripId)
}
}
@RequiresApi(Build.VERSION_CODES.S)
fun setTheme(theme: AppTheme) {
applyTheme(theme)
viewModelScope.launch {
repo.saveTheme(theme)
}
}
@RequiresApi(Build.VERSION_CODES.S)
private fun applyTheme(theme: AppTheme) {
when (theme) {
AppTheme.LIGHT ->
uiModeManager.setApplicationNightMode(UiModeManager.MODE_NIGHT_NO)
AppTheme.DARK ->
uiModeManager.setApplicationNightMode(UiModeManager.MODE_NIGHT_YES)
AppTheme.SYSTEM ->
uiModeManager.setApplicationNightMode(UiModeManager.MODE_NIGHT_AUTO)
}
}
}