From 21654b2cfef916a0ef884ee5b31818402a6348c3 Mon Sep 17 00:00:00 2001 From: razeeman Date: Sat, 15 Apr 2023 17:34:15 +0300 Subject: [PATCH] add goal time reschedule after record activity change --- .../domain/interactor/RemoveRecordMediator.kt | 4 ++++ .../viewModel/ChangeRecordBaseViewModel.kt | 1 + .../viewModel/ChangeRecordViewModel.kt | 4 ++++ .../viewModel/ChangeRunningRecordViewModel.kt | 1 + .../interactor/DateEditChangeInteractor.kt | 18 +++++++++++++++--- 5 files changed, 25 insertions(+), 3 deletions(-) diff --git a/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/RemoveRecordMediator.kt b/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/RemoveRecordMediator.kt index 62a87764..3a6215cf 100644 --- a/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/RemoveRecordMediator.kt +++ b/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/RemoveRecordMediator.kt @@ -11,6 +11,10 @@ class RemoveRecordMediator @Inject constructor( suspend fun remove(recordId: Long, typeId: Long) { recordInteractor.remove(recordId) + doAfterRemove(typeId) + } + + private suspend fun doAfterRemove(typeId: Long) { notificationGoalTimeInteractor.checkAndReschedule(typeId) widgetInteractor.updateWidgets(listOf(WidgetType.STATISTICS_CHART)) } diff --git a/features/feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/viewModel/ChangeRecordBaseViewModel.kt b/features/feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/viewModel/ChangeRecordBaseViewModel.kt index ae3e14fd..a088bf68 100644 --- a/features/feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/viewModel/ChangeRecordBaseViewModel.kt +++ b/features/feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/viewModel/ChangeRecordBaseViewModel.kt @@ -94,6 +94,7 @@ abstract class ChangeRecordBaseViewModel( protected var newTimeSplit: Long = 0 protected var newComment: String = "" protected var newCategoryIds: MutableList = mutableListOf() + protected var originalTypeId: Long = 0 protected var originalTimeStarted: Long = 0 protected var originalTimeEnded: Long = 0 diff --git a/features/feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/viewModel/ChangeRecordViewModel.kt b/features/feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/viewModel/ChangeRecordViewModel.kt index 9eca30ed..a955797e 100644 --- a/features/feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/viewModel/ChangeRecordViewModel.kt +++ b/features/feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/viewModel/ChangeRecordViewModel.kt @@ -10,6 +10,7 @@ import com.example.util.simpletimetracker.core.repo.ResourceRepo import com.example.util.simpletimetracker.domain.extension.orZero import com.example.util.simpletimetracker.domain.interactor.AddRecordMediator import com.example.util.simpletimetracker.domain.interactor.AddRunningRecordMediator +import com.example.util.simpletimetracker.domain.interactor.NotificationGoalTimeInteractor import com.example.util.simpletimetracker.domain.interactor.PrefsInteractor import com.example.util.simpletimetracker.domain.interactor.RecordInteractor import com.example.util.simpletimetracker.domain.interactor.RecordTagInteractor @@ -47,6 +48,7 @@ class ChangeRecordViewModel @Inject constructor( private val runningRecordInteractor: RunningRecordInteractor, private val addRunningRecordMediator: AddRunningRecordMediator, private val removeRunningRecordMediator: RemoveRunningRecordMediator, + private val notificationGoalTimeInteractor: NotificationGoalTimeInteractor, private val timeMapper: TimeMapper, ) : ChangeRecordBaseViewModel( router, @@ -100,6 +102,7 @@ class ChangeRecordViewModel @Inject constructor( comment = newComment, tagIds = newCategoryIds ).let { + notificationGoalTimeInteractor.checkAndReschedule(originalTypeId) addRecordMediator.add(it) router.back() } @@ -183,6 +186,7 @@ class ChangeRecordViewModel @Inject constructor( } } newTimeSplit = newTimeStarted + originalTypeId = newTypeId originalTimeStarted = newTimeStarted originalTimeEnded = newTimeEnded super.initializePreviewViewData() diff --git a/features/feature_change_running_record/src/main/java/com/example/util/simpletimetracker/feature_change_running_record/viewModel/ChangeRunningRecordViewModel.kt b/features/feature_change_running_record/src/main/java/com/example/util/simpletimetracker/feature_change_running_record/viewModel/ChangeRunningRecordViewModel.kt index 0988d67c..bbb68d00 100644 --- a/features/feature_change_running_record/src/main/java/com/example/util/simpletimetracker/feature_change_running_record/viewModel/ChangeRunningRecordViewModel.kt +++ b/features/feature_change_running_record/src/main/java/com/example/util/simpletimetracker/feature_change_running_record/viewModel/ChangeRunningRecordViewModel.kt @@ -150,6 +150,7 @@ class ChangeRunningRecordViewModel @Inject constructor( newCategoryIds = record.tagIds.toMutableList() } newTimeSplit = newTimeStarted + originalTypeId = newTypeId originalTimeStarted = newTimeStarted originalTimeEnded = newTimeEnded super.initializePreviewViewData() diff --git a/features/feature_data_edit/src/main/java/com/example/util/simpletimetracker/feature_data_edit/interactor/DateEditChangeInteractor.kt b/features/feature_data_edit/src/main/java/com/example/util/simpletimetracker/feature_data_edit/interactor/DateEditChangeInteractor.kt index a98af3f2..75303c43 100644 --- a/features/feature_data_edit/src/main/java/com/example/util/simpletimetracker/feature_data_edit/interactor/DateEditChangeInteractor.kt +++ b/features/feature_data_edit/src/main/java/com/example/util/simpletimetracker/feature_data_edit/interactor/DateEditChangeInteractor.kt @@ -2,6 +2,7 @@ package com.example.util.simpletimetracker.feature_data_edit.interactor import com.example.util.simpletimetracker.core.interactor.RecordFilterInteractor import com.example.util.simpletimetracker.domain.interactor.AddRecordMediator +import com.example.util.simpletimetracker.domain.interactor.NotificationGoalTimeInteractor import com.example.util.simpletimetracker.domain.interactor.RecordInteractor import com.example.util.simpletimetracker.domain.interactor.RecordTagInteractor import com.example.util.simpletimetracker.domain.model.RecordsFilter @@ -12,6 +13,7 @@ class DateEditChangeInteractor @Inject constructor( private val addRecordMediator: AddRecordMediator, private val recordFilterInteractor: RecordFilterInteractor, private val recordTagInteractor: RecordTagInteractor, + private val notificationGoalTimeInteractor: NotificationGoalTimeInteractor, ) { suspend fun changeData( @@ -23,10 +25,15 @@ class DateEditChangeInteractor @Inject constructor( val records = recordFilterInteractor.getByFilter(filters) val tags = recordTagInteractor.getAll().associateBy { it.id } + val oldTypeIds = mutableSetOf() records.forEach { record -> - // Remove all typed tags. - val newTagIds = record.tagIds.filter { tagId -> tags[tagId]?.typeId == 0L } + // Remove all typed tags of previous activity. + val newTagIds = record.tagIds.filter { tagId -> + val tagTypeId = tags[tagId]?.typeId + tagTypeId == 0L || tagTypeId == newTypeId + } + oldTypeIds.add(record.typeId) // Change activity record.copy( typeId = newTypeId, @@ -34,7 +41,12 @@ class DateEditChangeInteractor @Inject constructor( ).let { recordInteractor.add(it) } - addRecordMediator.doAfterAdd(newTypeId) } + + // Check goal time and statistics widget consistency. + oldTypeIds.forEach { typeId -> + notificationGoalTimeInteractor.checkAndReschedule(typeId) + } + addRecordMediator.doAfterAdd(newTypeId) } } \ No newline at end of file -- 2.54.0