diff --git a/features/feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/adapter/ChangeRecordCommentFieldAdapterDelegate.kt b/features/feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/adapter/ChangeRecordCommentFieldAdapterDelegate.kt index 5b832ca8c..6449c211e 100644 --- a/features/feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/adapter/ChangeRecordCommentFieldAdapterDelegate.kt +++ b/features/feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/adapter/ChangeRecordCommentFieldAdapterDelegate.kt @@ -21,7 +21,9 @@ fun createChangeRecordCommentFieldAdapterDelegate( with(binding) { item as ViewData - if (item.text != etChangeRecordCommentField.text.toString()) { + if (item.text != null && + item.text != etChangeRecordCommentField.text.toString() + ) { etChangeRecordCommentField.setText(item.text) etChangeRecordCommentField.setSelection(item.text.length) } @@ -38,7 +40,7 @@ fun createChangeRecordCommentFieldAdapterDelegate( data class ChangeRecordCommentFieldViewData( val id: Long, - val text: String, + val text: String?, @ColorInt val iconColor: Int, ) : ViewHolderType { diff --git a/features/feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/interactor/ChangeRecordViewDataInteractor.kt b/features/feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/interactor/ChangeRecordViewDataInteractor.kt index 7e1e3b7c0..f742a4ec4 100644 --- a/features/feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/interactor/ChangeRecordViewDataInteractor.kt +++ b/features/feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/interactor/ChangeRecordViewDataInteractor.kt @@ -7,10 +7,10 @@ import com.example.util.simpletimetracker.core.view.timeAdjustment.TimeAdjustmen import com.example.util.simpletimetracker.domain.favourite.interactor.FavouriteCommentInteractor import com.example.util.simpletimetracker.domain.prefs.interactor.PrefsInteractor import com.example.util.simpletimetracker.domain.record.interactor.RecordInteractor -import com.example.util.simpletimetracker.domain.recordTag.interactor.RecordTagInteractor -import com.example.util.simpletimetracker.domain.recordType.interactor.RecordTypeInteractor import com.example.util.simpletimetracker.domain.record.interactor.RunningRecordInteractor import com.example.util.simpletimetracker.domain.record.model.Record +import com.example.util.simpletimetracker.domain.recordTag.interactor.RecordTagInteractor +import com.example.util.simpletimetracker.domain.recordType.interactor.RecordTypeInteractor import com.example.util.simpletimetracker.feature_base_adapter.ViewHolderType import com.example.util.simpletimetracker.feature_base_adapter.hint.HintViewData import com.example.util.simpletimetracker.feature_change_record.R @@ -63,6 +63,7 @@ class ChangeRecordViewDataInteractor @Inject constructor( suspend fun getCommentsViewData( comment: String, typeId: Long, + fromCommentChange: Boolean, ): List { data class Data(val timeStarted: Long, val comment: String) @@ -71,8 +72,10 @@ class ChangeRecordViewDataInteractor @Inject constructor( val isFavourite = favouriteCommentInteractor.get(comment) != null ChangeRecordCommentFieldViewData( - id = 1L, // Only one at the time. - text = comment, + // Only one at the time. + id = 1L, + // Do not update text if update coming from typing. + text = if (fromCommentChange) null else comment, iconColor = if (isFavourite) { resourceRepo.getColor(R.color.colorSecondary) } else { 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 ec5556658..868ed0e3e 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 @@ -80,7 +80,7 @@ abstract class ChangeRecordBaseViewModel( return@lazy MutableLiveData>().let { initial -> viewModelScope.launch { initializePreviewViewData() - initial.value = loadCommentsViewData() + initial.value = loadCommentsViewData(fromCommentChange = false) } initial } @@ -338,7 +338,13 @@ abstract class ChangeRecordBaseViewModel( } fun onCommentClick(item: ChangeRecordCommentViewData) { - onCommentChange(item.text) + viewModelScope.launch { + if (item.text != newComment) { + newComment = item.text + updatePreview() + updateCommentsViewData() + } + } } fun onCommentChange(comment: String) { @@ -346,7 +352,7 @@ abstract class ChangeRecordBaseViewModel( if (comment != newComment) { newComment = comment updatePreview() - updateCommentsViewData() + updateCommentsViewData(fromCommentChange = true) } } } @@ -845,17 +851,22 @@ abstract class ChangeRecordBaseViewModel( ) } - private fun updateCommentsViewData() { + private fun updateCommentsViewData( + fromCommentChange: Boolean = false, + ) { searchLoadJob?.cancel() searchLoadJob = viewModelScope.launch { - comments.set(loadCommentsViewData()) + comments.set(loadCommentsViewData(fromCommentChange)) } } - private suspend fun loadCommentsViewData(): List { + private suspend fun loadCommentsViewData( + fromCommentChange: Boolean, + ): List { return changeRecordViewDataInteractor.getCommentsViewData( comment = newComment, typeId = newTypeId, + fromCommentChange = fromCommentChange, ) }