From 4b30d4f446f23fc59a8640cd555de9e99eddfbe0 Mon Sep 17 00:00:00 2001 From: webfussel Date: Sat, 2 Aug 2025 07:46:03 +0200 Subject: [PATCH] ADD: last mood on app opening --- .../de/webfussel/soulecho/MainActivity.kt | 7 ++++++ .../de/webfussel/soulecho/data/dao/MoodDao.kt | 3 +++ .../data/repository/MoodRepository.kt | 5 +++- .../soulecho/viewmodel/MoodViewModel.kt | 25 ++++++++++++++++++- 4 files changed, 38 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/de/webfussel/soulecho/MainActivity.kt b/app/src/main/java/de/webfussel/soulecho/MainActivity.kt index 32b1a76..d0a2a92 100644 --- a/app/src/main/java/de/webfussel/soulecho/MainActivity.kt +++ b/app/src/main/java/de/webfussel/soulecho/MainActivity.kt @@ -22,6 +22,13 @@ val LocalMoodState = compositionLocalOf { error("No MoodState prov @Composable fun SoulEchoApp(moodViewModel: MoodViewModel) { var currentMood by remember { mutableStateOf(MoodWithInfo(mood = PossibleMood.HAPPY, info = "")) } + LaunchedEffect(Unit) { + val lastMood = moodViewModel.getLastMood() + if (lastMood != null) { + currentMood = lastMood + } + } + val coroutineScope = rememberCoroutineScope() CompositionLocalProvider(LocalMoodState provides currentMood) { diff --git a/app/src/main/java/de/webfussel/soulecho/data/dao/MoodDao.kt b/app/src/main/java/de/webfussel/soulecho/data/dao/MoodDao.kt index 456fc46..18831ad 100644 --- a/app/src/main/java/de/webfussel/soulecho/data/dao/MoodDao.kt +++ b/app/src/main/java/de/webfussel/soulecho/data/dao/MoodDao.kt @@ -23,6 +23,9 @@ interface MoodDao { @Query("SELECT * FROM moods WHERE DATE(timestamp) = DATE('now', 'localtime') ORDER BY timestamp DESC") fun getTodaysMoods(): Flow> + @Query("SELECT * FROM moods ORDER BY timestamp DESC LIMIT 1") + suspend fun getLastMood(): MoodEntity? + @Update suspend fun updateMood(mood: MoodEntity) diff --git a/app/src/main/java/de/webfussel/soulecho/data/repository/MoodRepository.kt b/app/src/main/java/de/webfussel/soulecho/data/repository/MoodRepository.kt index 8aa6834..6d21bbd 100644 --- a/app/src/main/java/de/webfussel/soulecho/data/repository/MoodRepository.kt +++ b/app/src/main/java/de/webfussel/soulecho/data/repository/MoodRepository.kt @@ -16,6 +16,10 @@ class MoodRepository(private val moodDao: MoodDao) { return moodDao.insertMood(moodEntity) } + suspend fun getLastMood(): MoodWithInfo? { + return moodDao.getLastMood()?.toMoodWithInfo() + } + fun getAllMoods(): Flow> { return moodDao.getAllMoods() } @@ -44,7 +48,6 @@ class MoodRepository(private val moodDao: MoodDao) { moodDao.deleteAllMoods() } - // Hilfsmethode um MoodEntity zu MoodWithInfo zu konvertieren fun MoodEntity.toMoodWithInfo(): MoodWithInfo { return MoodWithInfo(mood = this.mood, info = this.info) } diff --git a/app/src/main/java/de/webfussel/soulecho/viewmodel/MoodViewModel.kt b/app/src/main/java/de/webfussel/soulecho/viewmodel/MoodViewModel.kt index 18dd63e..9332fba 100644 --- a/app/src/main/java/de/webfussel/soulecho/viewmodel/MoodViewModel.kt +++ b/app/src/main/java/de/webfussel/soulecho/viewmodel/MoodViewModel.kt @@ -8,6 +8,9 @@ import de.webfussel.soulecho.data.repository.MoodRepository import de.webfussel.soulecho.mood.MoodWithInfo import de.webfussel.soulecho.mood.PossibleMood import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.launch class MoodViewModel(private val repository: MoodRepository) : ViewModel() { @@ -15,8 +18,28 @@ class MoodViewModel(private val repository: MoodRepository) : ViewModel() { val allMoods: Flow> = repository.getAllMoods() val todaysMoods: Flow> = repository.getTodaysMoods() + private val _currentMood = MutableStateFlow(null) + val currentMood: StateFlow = _currentMood.asStateFlow() + + init { + loadLastMood() + } + + private fun loadLastMood() { + viewModelScope.launch { + val lastMood = repository.getLastMood() + _currentMood.value = lastMood + } + } + suspend fun saveMood(moodWithInfo: MoodWithInfo): Long { - return repository.saveMood(moodWithInfo) + val result = repository.saveMood(moodWithInfo) + _currentMood.value = moodWithInfo + return result + } + + suspend fun getLastMood(): MoodWithInfo? { + return repository.getLastMood() } fun getMoodsByType(mood: PossibleMood): Flow> {