This commit is contained in:
Rafal Wisniewski
2026-03-19 15:32:51 +01:00
commit 20370e3906
68 changed files with 3267 additions and 0 deletions

View File

@@ -0,0 +1,46 @@
package cc.n0th1ng.tripmoney.viewmodel
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewModelScope
import androidx.paging.PagingData
import androidx.paging.cachedIn
import cc.n0th1ng.tripmoney.data.entity.Category
import cc.n0th1ng.tripmoney.data.entity.Expense
import cc.n0th1ng.tripmoney.data.entity.ExpenseDto
import cc.n0th1ng.tripmoney.data.repository.CategoryRepository
import cc.n0th1ng.tripmoney.data.repository.ExpenseRepository
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.launch
import javax.inject.Inject
@HiltViewModel
class ExpenseAndCategoryViewModel @Inject constructor(
private val expenseRepo: ExpenseRepository,
private val categoryRepo: CategoryRepository
) : ViewModel() {
fun getExpenses(tripId: Int): Flow<PagingData<ExpenseDto>> =
expenseRepo.getExpenses(tripId).cachedIn(viewModelScope)
fun save(expense: Expense) {
viewModelScope.launch {
expenseRepo.save(expense)
}
}
fun delete(expense: Expense) {
viewModelScope.launch {
expenseRepo.delete(expense)
}
}
fun getCategories(): Flow<List<Category>> = categoryRepo.getCategories()
fun save(category: Category) {
viewModelScope.launch {
categoryRepo.save(category)
}
}
}

View File

@@ -0,0 +1,69 @@
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.ViewModelProvider
import androidx.lifecycle.viewModelScope
import cc.n0th1ng.tripmoney.data.repository.AppTheme
import cc.n0th1ng.tripmoney.data.repository.PreferencesRepository
import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.stateIn
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 currentTrip = repo.currentTripFlow.stateIn(
viewModelScope, SharingStarted.WhileSubscribed(5000),
-1
)
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)
}
}
}

View File

@@ -0,0 +1,19 @@
package cc.n0th1ng.tripmoney.viewmodel
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewModelScope
import androidx.paging.PagingData
import androidx.paging.cachedIn
import cc.n0th1ng.tripmoney.data.entity.Trip
import cc.n0th1ng.tripmoney.data.repository.TripRepository
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.Flow
import javax.inject.Inject
@HiltViewModel
class TripViewModel @Inject constructor(private val repository: TripRepository) : ViewModel() {
fun getTrips(): Flow<PagingData<Trip>> = repository.getTrips().cachedIn(viewModelScope)
}