diff --git a/features/feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/viewData/TimeAdjustmentState.kt b/features/feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/model/TimeAdjustmentState.kt similarity index 93% rename from features/feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/viewData/TimeAdjustmentState.kt rename to features/feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/model/TimeAdjustmentState.kt index ffd7cdc5..a785ba4e 100644 --- a/features/feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/viewData/TimeAdjustmentState.kt +++ b/features/feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/model/TimeAdjustmentState.kt @@ -1,4 +1,4 @@ -package com.example.util.simpletimetracker.feature_change_record.viewData +package com.example.util.simpletimetracker.feature_change_record.model enum class TimeAdjustmentState { HIDDEN, TIME_STARTED, TIME_ENDED diff --git a/features/feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/view/ChangeRecordCore.kt b/features/feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/view/ChangeRecordCore.kt index a7c06f89..d902f895 100644 --- a/features/feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/view/ChangeRecordCore.kt +++ b/features/feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/view/ChangeRecordCore.kt @@ -2,6 +2,7 @@ package com.example.util.simpletimetracker.feature_change_record.view import android.view.View import androidx.cardview.widget.CardView +import androidx.core.view.isInvisible import androidx.core.view.isVisible import androidx.core.widget.doAfterTextChanged import androidx.viewbinding.ViewBinding @@ -27,7 +28,7 @@ import com.example.util.simpletimetracker.feature_change_record.viewData.ChangeR import com.example.util.simpletimetracker.feature_change_record.viewData.ChangeRecordChooserState.State.Tag import com.example.util.simpletimetracker.feature_change_record.viewData.ChangeRecordPreview import com.example.util.simpletimetracker.feature_change_record.viewData.ChangeRecordSimpleViewData -import com.example.util.simpletimetracker.feature_change_record.viewData.TimeAdjustmentState +import com.example.util.simpletimetracker.feature_change_record.model.TimeAdjustmentState import com.example.util.simpletimetracker.feature_change_record.viewModel.ChangeRecordBaseViewModel import com.example.util.simpletimetracker.feature_views.RecordSimpleView import com.example.util.simpletimetracker.feature_views.extension.rotateDown @@ -157,6 +158,7 @@ class ChangeRecordCore( lastComments.observe(commentsAdapter::replace) comment.observe { updateUi(binding, it) } mergePreview.observe { setMergePreview(it, binding) } + splitPreview.observe { setSplitPreview(it, binding) } } } @@ -235,6 +237,25 @@ class ChangeRecordCore( } } + private fun setSplitPreview( + data: ChangeRecordPreview, + binding: ChangeRecordCoreLayoutBinding, + ) = with(binding) { + when (data) { + is ChangeRecordPreview.NotAvailable -> { + containerChangeRecordSplit.isVisible = false + } + is ChangeRecordPreview.Available -> { + containerChangeRecordSplit.isVisible = true + with(containerChangeRecordSplitPreview) { + ivChangeRecordPreviewCompare.isInvisible = true + viewChangeRecordPreviewBefore.setData(data.before) + viewChangeRecordPreviewAfter.setData(data.after) + } + } + } + } + private fun RecordSimpleView.setData(data: ChangeRecordSimpleViewData) { itemName = data.name itemTime = data.time 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 52df7668..73732b39 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 @@ -11,8 +11,6 @@ import com.example.util.simpletimetracker.core.interactor.RecordTagViewDataInter import com.example.util.simpletimetracker.core.interactor.RecordTypesViewDataInteractor import com.example.util.simpletimetracker.core.repo.ResourceRepo import com.example.util.simpletimetracker.core.view.timeAdjustment.TimeAdjustmentView -import com.example.util.simpletimetracker.domain.extension.flip -import com.example.util.simpletimetracker.domain.extension.orFalse import com.example.util.simpletimetracker.domain.interactor.AddRecordMediator import com.example.util.simpletimetracker.domain.interactor.PrefsInteractor import com.example.util.simpletimetracker.domain.interactor.RecordInteractor @@ -22,9 +20,9 @@ import com.example.util.simpletimetracker.feature_base_adapter.category.Category import com.example.util.simpletimetracker.feature_base_adapter.recordType.RecordTypeViewData import com.example.util.simpletimetracker.feature_change_record.R import com.example.util.simpletimetracker.feature_change_record.interactor.ChangeRecordViewDataInteractor +import com.example.util.simpletimetracker.feature_change_record.model.TimeAdjustmentState import com.example.util.simpletimetracker.feature_change_record.viewData.ChangeRecordChooserState import com.example.util.simpletimetracker.feature_change_record.viewData.ChangeRecordCommentViewData -import com.example.util.simpletimetracker.feature_change_record.viewData.TimeAdjustmentState import com.example.util.simpletimetracker.navigation.Router import com.example.util.simpletimetracker.navigation.params.notification.ToastParams import com.example.util.simpletimetracker.navigation.params.screen.ChangeRecordTagFromScreen @@ -45,8 +43,10 @@ abstract class ChangeRecordBaseViewModel( private val addRecordMediator: AddRecordMediator, private val recordInteractor: RecordInteractor, private val changeRecordMergeDelegate: ChangeRecordMergeDelegateImpl, + private val changeRecordSplitDelegate: ChangeRecordSplitDelegateImpl, ) : ViewModel(), - ChangeRecordMergeDelegate by changeRecordMergeDelegate { + ChangeRecordMergeDelegate by changeRecordMergeDelegate, + ChangeRecordSplitDelegate by changeRecordSplitDelegate { val types: LiveData> by lazy { return@lazy MutableLiveData>().let { initial -> @@ -75,9 +75,6 @@ abstract class ChangeRecordBaseViewModel( val timeAdjustmentItems: LiveData> by lazy { MutableLiveData(loadTimeAdjustmentItems()) } - val timeSplitAdjustmentItems: LiveData> by lazy { - MutableLiveData(loadTimeSplitAdjustmentItems()) - } val chooserState: LiveData = MutableLiveData( ChangeRecordChooserState( current = ChangeRecordChooserState.State.Closed, @@ -85,8 +82,6 @@ abstract class ChangeRecordBaseViewModel( ) ) val timeAdjustmentState: LiveData = MutableLiveData(TimeAdjustmentState.HIDDEN) - val timeSplitAdjustmentState: LiveData = MutableLiveData(false) - val timeSplitText: LiveData = MutableLiveData() val saveButtonEnabled: LiveData = MutableLiveData(true) val keyboardVisibility: LiveData = MutableLiveData(false) val comment: LiveData = MutableLiveData() @@ -99,19 +94,20 @@ abstract class ChangeRecordBaseViewModel( protected var newCategoryIds: MutableList = mutableListOf() protected var originalTimeStarted: Long = 0 protected var originalTimeEnded: Long = 0 + protected var prevRecord: Record? = null protected var nextRecord: Record? = null protected abstract suspend fun updatePreview() protected abstract fun getChangeCategoryParams(data: ChangeTagData): ChangeRecordTagFromScreen - protected abstract fun onTimeSplitChanged() protected abstract fun onTimeStartedChanged() protected abstract fun onTimeEndedChanged() protected abstract suspend fun onSaveClickDelegate() - protected abstract suspend fun onSplitClickDelegate() protected abstract suspend fun onAdjustClickDelegate() protected open suspend fun onContinueClickDelegate() {} protected abstract val mergeAvailable: Boolean + protected abstract val splitPreviewTimeEnded: Long + protected abstract val showTimeEndedOnSplitPreview: Boolean protected open suspend fun initializePreviewViewData() { initializePrevNextRecords() @@ -147,6 +143,19 @@ abstract class ChangeRecordBaseViewModel( } } + protected suspend fun updateTimeSplitValue() { + changeRecordSplitDelegate.updateTimeSplitValue( + newTimeSplit = newTimeSplit + ) + changeRecordSplitDelegate.updateSplitPreviewViewData( + newTypeId = newTypeId, + newTimeStarted = newTimeStarted, + newTimeSplit = newTimeSplit, + newTimeEnded = splitPreviewTimeEnded, + showTimeEnded = showTimeEndedOnSplitPreview, + ) + } + fun onTypeChooserClick() { onNewChooserState(ChangeRecordChooserState.State.Activity) } @@ -183,7 +192,19 @@ abstract class ChangeRecordBaseViewModel( fun onSplitClick() { onRecordChangeButtonClick( - onProceed = ::onSplitClickDelegate, + onProceed = { + changeRecordSplitDelegate.onSplitClickDelegate( + newTypeId = newTypeId, + newTimeStarted = newTimeStarted, + newTimeSplit = newTimeSplit, + newComment = newComment, + newCategoryIds = newCategoryIds, + onSplitComplete = { + newTimeStarted = newTimeSplit + onSaveClick() + } + ) + }, ) } @@ -207,7 +228,7 @@ abstract class ChangeRecordBaseViewModel( fun onMergeClick() { onRecordChangeButtonClick( onProceed = { - onMergeClickDelegate( + changeRecordMergeDelegate.onMergeClickDelegate( prevRecord = prevRecord, newTimeEnded = newTimeEnded, onMergeComplete = { @@ -227,6 +248,7 @@ abstract class ChangeRecordBaseViewModel( updatePreview() updateCategoriesViewData() updateLastCommentsViewData() + updateTimeSplitValue() } } onTypeChooserClick() @@ -333,11 +355,6 @@ abstract class ChangeRecordBaseViewModel( ) } - fun onAdjustTimeSplitClick() { - val newValue = timeSplitAdjustmentState.value?.flip().orFalse() - timeSplitAdjustmentState.set(newValue) - } - fun onAdjustTimeItemClick(viewData: TimeAdjustmentView.ViewData) { viewModelScope.launch { when (viewData) { @@ -479,6 +496,10 @@ abstract class ChangeRecordBaseViewModel( } } + private fun onTimeSplitChanged() { + newTimeSplit = newTimeSplit.coerceIn(newTimeStarted..splitPreviewTimeEnded) + } + private suspend fun initializePrevNextRecords() { // TODO get directly from room val records = recordInteractor.getAll() @@ -513,19 +534,6 @@ abstract class ChangeRecordBaseViewModel( return changeRecordViewDataInteractor.getTimeAdjustmentItems() } - private fun loadTimeSplitAdjustmentItems(): List { - return changeRecordViewDataInteractor.getTimeAdjustmentItems() - } - - private suspend fun updateTimeSplitValue() { - val data = loadTimeSplitValue() - timeSplitText.set(data) - } - - private suspend fun loadTimeSplitValue(): String { - return changeRecordViewDataInteractor.mapTime(newTimeSplit) - } - private fun updateLastCommentsViewData() = viewModelScope.launch { val data = loadLastCommentsViewData() lastComments.set(data) diff --git a/features/feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/viewModel/ChangeRecordMergeDelegate.kt b/features/feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/viewModel/ChangeRecordMergeDelegate.kt index 42148974..fb90b228 100644 --- a/features/feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/viewModel/ChangeRecordMergeDelegate.kt +++ b/features/feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/viewModel/ChangeRecordMergeDelegate.kt @@ -13,12 +13,6 @@ import javax.inject.Inject interface ChangeRecordMergeDelegate { val mergePreview: LiveData - - suspend fun onMergeClickDelegate( - prevRecord: Record?, - newTimeEnded: Long, - onMergeComplete: () -> Unit, - ) } class ChangeRecordMergeDelegateImpl @Inject constructor( @@ -27,7 +21,7 @@ class ChangeRecordMergeDelegateImpl @Inject constructor( ) : ChangeRecordMergeDelegate { override val mergePreview: LiveData = MutableLiveData() - override suspend fun onMergeClickDelegate( + suspend fun onMergeClickDelegate( prevRecord: Record?, newTimeEnded: Long, onMergeComplete: () -> Unit, @@ -41,6 +35,15 @@ class ChangeRecordMergeDelegateImpl @Inject constructor( } } + private fun getChangedRecord( + previousRecord: Record, + newTimeEnded: Long, + ): Record { + return previousRecord.copy( + timeEnded = newTimeEnded, + ) + } + suspend fun updateMergePreviewViewData( mergeAvailable: Boolean, prevRecord: Record?, @@ -55,15 +58,6 @@ class ChangeRecordMergeDelegateImpl @Inject constructor( mergePreview.set(data) } - private fun getChangedRecord( - previousRecord: Record, - newTimeEnded: Long, - ): Record { - return previousRecord.copy( - timeEnded = newTimeEnded, - ) - } - private suspend fun loadMergePreviewViewData( mergeAvailable: Boolean, prevRecord: Record?, @@ -85,7 +79,7 @@ class ChangeRecordMergeDelegateImpl @Inject constructor( ) } - fun map(preview: ChangeRecordViewData): ChangeRecordSimpleViewData { + private fun map(preview: ChangeRecordViewData): ChangeRecordSimpleViewData { return ChangeRecordSimpleViewData( name = preview.name, time = "${preview.timeStarted} - ${preview.timeFinished}", diff --git a/features/feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/viewModel/ChangeRecordSplitDelegate.kt b/features/feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/viewModel/ChangeRecordSplitDelegate.kt new file mode 100644 index 00000000..f632032c --- /dev/null +++ b/features/feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/viewModel/ChangeRecordSplitDelegate.kt @@ -0,0 +1,141 @@ +package com.example.util.simpletimetracker.feature_change_record.viewModel + +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import com.example.util.simpletimetracker.core.extension.set +import com.example.util.simpletimetracker.domain.extension.flip +import com.example.util.simpletimetracker.domain.extension.orFalse +import com.example.util.simpletimetracker.domain.interactor.AddRecordMediator +import com.example.util.simpletimetracker.domain.model.Record +import com.example.util.simpletimetracker.feature_base_adapter.ViewHolderType +import com.example.util.simpletimetracker.feature_change_record.interactor.ChangeRecordViewDataInteractor +import com.example.util.simpletimetracker.feature_change_record.viewData.ChangeRecordPreview +import com.example.util.simpletimetracker.feature_change_record.viewData.ChangeRecordSimpleViewData +import com.example.util.simpletimetracker.feature_change_record.viewData.ChangeRecordViewData +import javax.inject.Inject + +interface ChangeRecordSplitDelegate { + val timeSplitAdjustmentState: LiveData + val timeSplitText: LiveData + val splitPreview: LiveData + val timeSplitAdjustmentItems: LiveData> + + fun onAdjustTimeSplitClick() +} + +class ChangeRecordSplitDelegateImpl @Inject constructor( + private val changeRecordViewDataInteractor: ChangeRecordViewDataInteractor, + private val addRecordMediator: AddRecordMediator, +) : ChangeRecordSplitDelegate { + override val timeSplitAdjustmentItems: LiveData> by lazy { + MutableLiveData(loadTimeSplitAdjustmentItems()) + } + override val timeSplitAdjustmentState: LiveData = MutableLiveData(false) + override val timeSplitText: LiveData = MutableLiveData() + override val splitPreview: LiveData = MutableLiveData() + + override fun onAdjustTimeSplitClick() { + val newValue = timeSplitAdjustmentState.value?.flip().orFalse() + timeSplitAdjustmentState.set(newValue) + } + + suspend fun onSplitClickDelegate( + newTypeId: Long, + newTimeStarted: Long, + newTimeSplit: Long, + newComment: String, + newCategoryIds: List, + onSplitComplete: () -> Unit, + ) { + Record( + id = 0L, // Zero id creates new record + typeId = newTypeId, + timeStarted = newTimeStarted, + timeEnded = newTimeSplit, + comment = newComment, + tagIds = newCategoryIds + ).let { + addRecordMediator.add(it) + } + onSplitComplete() + } + + suspend fun updateTimeSplitValue( + newTimeSplit: Long, + ) { + val data = loadTimeSplitValue(newTimeSplit) + timeSplitText.set(data) + } + + suspend fun updateSplitPreviewViewData( + newTypeId: Long, + newTimeStarted: Long, + newTimeSplit: Long, + newTimeEnded: Long, + showTimeEnded: Boolean, + ) { + val data = loadSplitPreviewViewData( + newTypeId = newTypeId, + newTimeStarted = newTimeStarted, + newTimeSplit = newTimeSplit, + newTimeEnded = newTimeEnded, + showTimeEnded = showTimeEnded, + ) + splitPreview.set(data) + } + + private fun loadTimeSplitAdjustmentItems(): List { + return changeRecordViewDataInteractor.getTimeAdjustmentItems() + } + + private suspend fun loadTimeSplitValue( + newTimeSplit: Long, + ): String { + return changeRecordViewDataInteractor.mapTime(newTimeSplit) + } + + private suspend fun loadSplitPreviewViewData( + newTypeId: Long, + newTimeStarted: Long, + newTimeSplit: Long, + newTimeEnded: Long, + showTimeEnded: Boolean, + ): ChangeRecordPreview { + val firstRecord = Record( + typeId = newTypeId, + timeStarted = newTimeStarted, + timeEnded = newTimeSplit, + comment = "", + ).let { + changeRecordViewDataInteractor.getPreviewViewData(it) + } + val secondRecord = Record( + typeId = newTypeId, + timeStarted = newTimeSplit, + timeEnded = newTimeEnded, + comment = "", + ).let { + changeRecordViewDataInteractor.getPreviewViewData(it) + } + + return ChangeRecordPreview.Available( + before = map(firstRecord, showTimeEnded = true), + after = map(secondRecord, showTimeEnded = showTimeEnded), + ) + } + + private fun map( + preview: ChangeRecordViewData, + showTimeEnded: Boolean, + ): ChangeRecordSimpleViewData { + return ChangeRecordSimpleViewData( + name = preview.name, + time = preview.timeStarted.let { + if (showTimeEnded) "$it - ${preview.timeFinished}" else it + }, + duration = preview.duration, + iconId = preview.iconId, + color = preview.color, + ) + } +} \ No newline at end of file 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 9565f14f..d641decd 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 @@ -33,6 +33,7 @@ class ChangeRecordViewModel @Inject constructor( prefsInteractor: PrefsInteractor, resourceRepo: ResourceRepo, changeRecordMergeDelegate: ChangeRecordMergeDelegateImpl, + changeRecordSplitDelegate: ChangeRecordSplitDelegateImpl, private val router: Router, private val recordInteractor: RecordInteractor, private val addRecordMediator: AddRecordMediator, @@ -52,12 +53,14 @@ class ChangeRecordViewModel @Inject constructor( addRecordMediator, recordInteractor, changeRecordMergeDelegate, + changeRecordSplitDelegate, ) { lateinit var extra: ChangeRecordParams - override val mergeAvailable: Boolean - get() = extra is ChangeRecordParams.Untracked + override val mergeAvailable: Boolean get() = extra is ChangeRecordParams.Untracked + override val splitPreviewTimeEnded: Long get() = newTimeEnded + override val showTimeEndedOnSplitPreview: Boolean get() = true val record: LiveData by lazy { return@lazy MutableLiveData().let { initial -> @@ -93,21 +96,6 @@ class ChangeRecordViewModel @Inject constructor( } } - override suspend fun onSplitClickDelegate() { - Record( - id = 0L, // Zero id creates new record - typeId = newTypeId, - timeStarted = newTimeStarted, - timeEnded = newTimeSplit, - comment = newComment, - tagIds = newCategoryIds - ).let { - addRecordMediator.add(it) - } - newTimeStarted = newTimeSplit - onSaveClick() - } - override suspend fun onContinueClickDelegate() { // Remove current record if exist. (extra as? ChangeRecordParams.Tracked)?.id?.let { @@ -148,10 +136,6 @@ class ChangeRecordViewModel @Inject constructor( if (newTimeStarted > newTimeSplit) newTimeSplit = newTimeStarted } - override fun onTimeSplitChanged() { - newTimeSplit = newTimeSplit.coerceIn(newTimeStarted..newTimeEnded) - } - private fun getInitialDate(daysFromToday: Int): Long { return timeMapper.toTimestampShifted(daysFromToday, RangeLength.Day) } diff --git a/features/feature_change_record/src/main/res/layout/change_record_core_layout.xml b/features/feature_change_record/src/main/res/layout/change_record_core_layout.xml index fe6ae669..18d9ed05 100644 --- a/features/feature_change_record/src/main/res/layout/change_record_core_layout.xml +++ b/features/feature_change_record/src/main/res/layout/change_record_core_layout.xml @@ -387,11 +387,9 @@ @@ -447,17 +445,22 @@ app:layout_constraintTop_toBottomOf="@id/fieldChangeRecordTimeSplit" tools:visibility="visible" /> + + + app:layout_constraintTop_toBottomOf="@id/containerChangeRecordSplitPreview" /> @@ -549,6 +552,13 @@ android:textColor="?appTextHintColor" app:layout_constraintTop_toBottomOf="@id/dividerChangeRecordMerge" /> + + - - + app:layout_constraintTop_toBottomOf="@id/containerChangeRecordMergePreview" /> 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 f60a505a..e7a4c07d 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 @@ -14,11 +14,12 @@ import com.example.util.simpletimetracker.domain.interactor.PrefsInteractor import com.example.util.simpletimetracker.domain.interactor.RecordInteractor import com.example.util.simpletimetracker.domain.interactor.RemoveRunningRecordMediator import com.example.util.simpletimetracker.domain.interactor.RunningRecordInteractor -import com.example.util.simpletimetracker.domain.model.Record import com.example.util.simpletimetracker.domain.model.RunningRecord import com.example.util.simpletimetracker.feature_change_record.interactor.ChangeRecordViewDataInteractor +import com.example.util.simpletimetracker.feature_change_record.viewData.ChangeRecordChooserState import com.example.util.simpletimetracker.feature_change_record.viewModel.ChangeRecordBaseViewModel import com.example.util.simpletimetracker.feature_change_record.viewModel.ChangeRecordMergeDelegateImpl +import com.example.util.simpletimetracker.feature_change_record.viewModel.ChangeRecordSplitDelegateImpl import com.example.util.simpletimetracker.feature_change_running_record.R import com.example.util.simpletimetracker.feature_change_running_record.interactor.ChangeRunningRecordViewDataInteractor import com.example.util.simpletimetracker.feature_change_running_record.viewData.ChangeRunningRecordViewData @@ -41,12 +42,13 @@ class ChangeRunningRecordViewModel @Inject constructor( prefsInteractor: PrefsInteractor, changeRecordViewDataInteractor: ChangeRecordViewDataInteractor, changeRecordMergeDelegate: ChangeRecordMergeDelegateImpl, + changeRecordSplitDelegate: ChangeRecordSplitDelegateImpl, recordInteractor: RecordInteractor, + addRecordMediator: AddRecordMediator, private val router: Router, private val addRunningRecordMediator: AddRunningRecordMediator, private val removeRunningRecordMediator: RemoveRunningRecordMediator, private val runningRecordInteractor: RunningRecordInteractor, - private val addRecordMediator: AddRecordMediator, private val changeRunningRecordViewDataInteractor: ChangeRunningRecordViewDataInteractor, private val resourceRepo: ResourceRepo, ) : ChangeRecordBaseViewModel( @@ -59,11 +61,14 @@ class ChangeRunningRecordViewModel @Inject constructor( addRecordMediator, recordInteractor, changeRecordMergeDelegate, + changeRecordSplitDelegate, ) { lateinit var extra: ChangeRunningRecordParams override val mergeAvailable: Boolean = false + override val splitPreviewTimeEnded: Long get() = System.currentTimeMillis() + override val showTimeEndedOnSplitPreview: Boolean get() = false val record: LiveData by lazy { return@lazy MutableLiveData().let { initial -> @@ -93,21 +98,6 @@ class ChangeRunningRecordViewModel @Inject constructor( router.back() } - override suspend fun onSplitClickDelegate() { - Record( - id = 0, // Zero id creates new record - typeId = newTypeId, - timeStarted = newTimeStarted, - timeEnded = newTimeSplit, - comment = newComment, - tagIds = newCategoryIds - ).let { - addRecordMediator.add(it) - } - newTimeStarted = newTimeSplit - onSaveClick() - } - override suspend fun onAdjustClickDelegate() { adjustPrevRecord() onSaveClick() @@ -146,10 +136,6 @@ class ChangeRunningRecordViewModel @Inject constructor( // Do nothing } - override fun onTimeSplitChanged() { - newTimeSplit = newTimeSplit.coerceIn(newTimeStarted..System.currentTimeMillis()) - } - override suspend fun updatePreview() { (record as MutableLiveData).value = loadPreviewViewData() } @@ -187,6 +173,10 @@ class ChangeRunningRecordViewModel @Inject constructor( timerJob?.cancelAndJoin() while (isActive) { updatePreview() + // Update split preview only if it is visible + if (chooserState.value?.current is ChangeRecordChooserState.State.Action) { + updateTimeSplitValue() + } delay(TIMER_UPDATE) } }