Skip to content

Commit 498245d

Browse files
committed
improve record actions view data update speed
1 parent 9912e72 commit 498245d

10 files changed

+401
-167
lines changed

features/feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/viewModel/ChangeRecordActionsAdjustDelegate.kt

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -37,17 +37,28 @@ class ChangeRecordActionsAdjustDelegate @Inject constructor(
3737
private val recordInteractor: RecordInteractor,
3838
private val timeMapper: TimeMapper,
3939
private val prefsInteractor: PrefsInteractor,
40-
) : ViewModelDelegate() {
40+
) : ViewModelDelegate(),
41+
ChangeRecordActionsSubDelegate<ChangeRecordActionsAdjustDelegate.Parent> {
4142

4243
var timeChangeAdjustmentState: TimeAdjustmentState = TimeAdjustmentState.TIME_STARTED
4344

4445
private var parent: Parent? = null
46+
private var viewData: List<ViewHolderType> = emptyList()
4547
private var recordsUnmarkedFromAdjustment: List<Long> = emptyList()
4648

47-
fun attach(parent: Parent) {
49+
override fun attach(parent: Parent) {
4850
this.parent = parent
4951
}
5052

53+
override fun getViewData(): List<ViewHolderType> {
54+
return viewData
55+
}
56+
57+
override suspend fun updateViewData() {
58+
viewData = loadViewData()
59+
parent?.update()
60+
}
61+
5162
fun onAdjustTimeStartedClick() {
5263
updateAdjustTimeState(
5364
clicked = TimeAdjustmentState.TIME_STARTED,
@@ -67,11 +78,11 @@ class ChangeRecordActionsAdjustDelegate @Inject constructor(
6778
recordsUnmarkedFromAdjustment = recordsUnmarkedFromAdjustment
6879
.toMutableList()
6980
.apply { addOrRemove(item.id) }
70-
parent?.update()
81+
updateViewData()
7182
}
7283
}
7384

74-
suspend fun getViewData(): List<ViewHolderType> {
85+
private suspend fun loadViewData(): List<ViewHolderType> {
7586
val useMilitaryTime = prefsInteractor.getUseMilitaryTimeFormat()
7687
val showSeconds = prefsInteractor.getShowSeconds()
7788
val params = parent?.getViewDataParams()
@@ -393,18 +404,18 @@ class ChangeRecordActionsAdjustDelegate @Inject constructor(
393404
when (timeChangeAdjustmentState) {
394405
TimeAdjustmentState.HIDDEN -> {
395406
timeChangeAdjustmentState = clicked
396-
parent?.update()
407+
updateViewData()
397408
}
398409
clicked -> {
399410
timeChangeAdjustmentState = TimeAdjustmentState.HIDDEN
400-
parent?.update()
411+
updateViewData()
401412
}
402413
other -> delegateScope.launch {
403414
timeChangeAdjustmentState = TimeAdjustmentState.HIDDEN
404-
parent?.update()
415+
updateViewData()
405416
delay(300)
406417
timeChangeAdjustmentState = clicked
407-
parent?.update()
418+
updateViewData()
408419
}
409420
else -> {
410421
// Do nothing
@@ -425,7 +436,7 @@ class ChangeRecordActionsAdjustDelegate @Inject constructor(
425436
interface Parent {
426437

427438
fun getViewDataParams(): ViewDataParams?
428-
suspend fun update()
439+
fun update()
429440
suspend fun onAdjustComplete()
430441

431442
data class ViewDataParams(
Lines changed: 16 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ package com.example.util.simpletimetracker.feature_change_record.viewModel
22

33
import com.example.util.simpletimetracker.core.repo.ResourceRepo
44
import com.example.util.simpletimetracker.domain.interactor.RecordActionContinueMediator
5-
import com.example.util.simpletimetracker.domain.interactor.RecordActionDuplicateMediator
6-
import com.example.util.simpletimetracker.domain.interactor.RecordActionRepeatMediator
75
import com.example.util.simpletimetracker.feature_base_adapter.ViewHolderType
86
import com.example.util.simpletimetracker.feature_base_adapter.hint.HintViewData
97
import com.example.util.simpletimetracker.feature_change_record.R
@@ -12,36 +10,26 @@ import com.example.util.simpletimetracker.feature_change_record.model.ChangeReco
1210
import com.example.util.simpletimetracker.navigation.Router
1311
import javax.inject.Inject
1412

15-
class ChangeRecordActionsAdditionalDelegate @Inject constructor(
13+
class ChangeRecordActionsContinueDelegate @Inject constructor(
1614
private val router: Router,
1715
private val resourceRepo: ResourceRepo,
18-
private val recordActionDuplicateMediator: RecordActionDuplicateMediator,
19-
private val recordActionRepeatMediator: RecordActionRepeatMediator,
2016
private val recordActionContinueMediator: RecordActionContinueMediator,
21-
) {
17+
): ChangeRecordActionsSubDelegate<ChangeRecordActionsContinueDelegate.Parent> {
2218

2319
private var parent: Parent? = null
20+
private var viewData: List<ViewHolderType> = emptyList()
2421

25-
fun attach(parent: Parent) {
22+
override fun attach(parent: Parent) {
2623
this.parent = parent
2724
}
2825

29-
fun getContinueViewData(): List<ViewHolderType> {
30-
val params = parent?.getViewDataParams()
31-
?: return emptyList()
26+
override fun getViewData(): List<ViewHolderType> {
27+
return viewData
28+
}
3229

33-
val result = mutableListOf<ViewHolderType>()
34-
result += HintViewData(
35-
text = resourceRepo.getString(R.string.change_record_continue_hint),
36-
)
37-
result += ChangeRecordButtonViewData(
38-
block = ChangeRecordActionsBlock.ContinueButton,
39-
text = resourceRepo.getString(R.string.change_record_continue),
40-
icon = R.drawable.action_continue,
41-
iconSizeDp = 24,
42-
isEnabled = params.isButtonEnabled,
43-
)
44-
return result
30+
override suspend fun updateViewData() {
31+
viewData = loadContinueViewData()
32+
parent?.update()
4533
}
4634

4735
suspend fun onContinueClickDelegate() {
@@ -69,76 +57,35 @@ class ChangeRecordActionsAdditionalDelegate @Inject constructor(
6957
}
7058
}
7159

72-
fun getRepeatViewData(): List<ViewHolderType> {
60+
private fun loadContinueViewData(): List<ViewHolderType> {
7361
val params = parent?.getViewDataParams()
7462
?: return emptyList()
7563

7664
val result = mutableListOf<ViewHolderType>()
7765
result += HintViewData(
78-
text = resourceRepo.getString(R.string.change_record_repeat_hint),
66+
text = resourceRepo.getString(R.string.change_record_continue_hint),
7967
)
8068
result += ChangeRecordButtonViewData(
81-
block = ChangeRecordActionsBlock.RepeatButton,
82-
text = resourceRepo.getString(R.string.change_record_repeat),
83-
icon = R.drawable.repeat,
69+
block = ChangeRecordActionsBlock.ContinueButton,
70+
text = resourceRepo.getString(R.string.change_record_continue),
71+
icon = R.drawable.action_continue,
8472
iconSizeDp = 24,
8573
isEnabled = params.isButtonEnabled,
8674
)
8775
return result
8876
}
8977

90-
suspend fun onRepeatClickDelegate() {
91-
val params = parent?.getViewDataParams() ?: return
92-
recordActionRepeatMediator.execute(
93-
typeId = params.newTypeId,
94-
comment = params.newComment,
95-
tagIds = params.newCategoryIds,
96-
)
97-
// Exit.
98-
parent?.onSaveClickDelegate()
99-
}
100-
101-
fun getDuplicateViewData(): List<ViewHolderType> {
102-
val params = parent?.getViewDataParams()
103-
?: return emptyList()
104-
105-
val result = mutableListOf<ViewHolderType>()
106-
result += HintViewData(
107-
text = resourceRepo.getString(R.string.change_record_duplicate_hint),
108-
)
109-
result += ChangeRecordButtonViewData(
110-
block = ChangeRecordActionsBlock.DuplicateButton,
111-
text = resourceRepo.getString(R.string.change_record_duplicate),
112-
icon = R.drawable.action_copy,
113-
iconSizeDp = 20,
114-
isEnabled = params.isButtonEnabled,
115-
)
116-
return result
117-
}
118-
119-
suspend fun onDuplicateClickDelegate() {
120-
val params = parent?.getViewDataParams() ?: return
121-
recordActionDuplicateMediator.execute(
122-
typeId = params.newTypeId,
123-
timeStarted = params.newTimeStarted,
124-
timeEnded = params.newTimeEnded,
125-
comment = params.newComment,
126-
tagIds = params.newCategoryIds,
127-
)
128-
parent?.onSaveClickDelegate()
129-
}
130-
13178
interface Parent {
13279

13380
fun getViewDataParams(): ViewDataParams?
81+
fun update()
13482
suspend fun onSaveClickDelegate()
13583
fun showMessage(stringResId: Int)
13684

13785
data class ViewDataParams(
13886
val recordId: Long,
13987
val newTypeId: Long,
14088
val newTimeStarted: Long,
141-
val newTimeEnded: Long,
14289
val newComment: String,
14390
val newCategoryIds: List<Long>,
14491
val isButtonEnabled: Boolean,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.example.util.simpletimetracker.feature_change_record.viewModel
2+
3+
import androidx.lifecycle.LiveData
4+
import com.example.util.simpletimetracker.feature_base_adapter.ViewHolderType
5+
6+
interface ChangeRecordActionsDelegateBase {
7+
val actionsViewData: LiveData<List<ViewHolderType>>
8+
9+
interface Parent {
10+
fun getSplitViewDataParams(): ChangeRecordActionsSplitDelegate.Parent.ViewDataParams
11+
fun getAdjustViewDataParams(): ChangeRecordActionsAdjustDelegate.Parent.ViewDataParams
12+
fun getContinueViewDataParams(): ChangeRecordActionsContinueDelegate.Parent.ViewDataParams?
13+
fun getRepeatViewDataParams(): ChangeRecordActionsRepeatDelegate.Parent.ViewDataParams?
14+
fun getDuplicateViewDataParams(): ChangeRecordActionsDuplicateDelegate.Parent.ViewDataParams?
15+
fun getMergeViewDataParams(): ChangeRecordActionsMergeDelegate.Parent.ViewDataParams
16+
17+
fun onRecordChangeButtonClick(
18+
onProceed: suspend () -> Unit,
19+
checkTypeSelected: Boolean = true,
20+
)
21+
22+
suspend fun onSaveClickDelegate()
23+
24+
suspend fun onSplitComplete()
25+
26+
fun showMessage(stringResId: Int)
27+
}
28+
}

0 commit comments

Comments
 (0)