Skip to content

Commit b7ebb4f

Browse files
committed
refactor record actions delegates
1 parent 498245d commit b7ebb4f

12 files changed

+466
-260
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,201 @@
1+
package com.example.util.simpletimetracker.feature_change_record.mapper
2+
3+
import com.example.util.simpletimetracker.feature_change_record.viewModel.ChangeRecordActionsAdjustDelegate
4+
import com.example.util.simpletimetracker.feature_change_record.viewModel.ChangeRecordActionsContinueDelegate
5+
import com.example.util.simpletimetracker.feature_change_record.viewModel.ChangeRecordActionsDelegate
6+
import com.example.util.simpletimetracker.feature_change_record.viewModel.ChangeRecordActionsDelegate.Parent.ViewDataParams
7+
import com.example.util.simpletimetracker.feature_change_record.viewModel.ChangeRecordActionsDuplicateDelegate
8+
import com.example.util.simpletimetracker.feature_change_record.viewModel.ChangeRecordActionsMergeDelegate
9+
import com.example.util.simpletimetracker.feature_change_record.viewModel.ChangeRecordActionsRepeatDelegate
10+
import com.example.util.simpletimetracker.feature_change_record.viewModel.ChangeRecordActionsSplitDelegate
11+
import javax.inject.Inject
12+
13+
class ChangeRecordActionsDelegateMapper @Inject constructor() {
14+
15+
fun getSplitDelegateParent(
16+
parent: ChangeRecordActionsDelegate.Parent?,
17+
updateViewData: () -> Unit,
18+
): ChangeRecordActionsSplitDelegate.Parent {
19+
return object : ChangeRecordActionsSplitDelegate.Parent {
20+
override fun getViewDataParams(): ChangeRecordActionsSplitDelegate.Parent.ViewDataParams? {
21+
return parent?.getViewDataParams()?.mapSplitParams()
22+
}
23+
24+
override fun update() {
25+
updateViewData()
26+
}
27+
28+
override suspend fun onSplitComplete() {
29+
parent?.onSplitComplete()
30+
}
31+
}
32+
}
33+
34+
fun getAdjustDelegateParent(
35+
parent: ChangeRecordActionsDelegate.Parent?,
36+
updateViewData: () -> Unit,
37+
): ChangeRecordActionsAdjustDelegate.Parent {
38+
return object : ChangeRecordActionsAdjustDelegate.Parent {
39+
override fun getViewDataParams(): ChangeRecordActionsAdjustDelegate.Parent.ViewDataParams? {
40+
return parent?.getViewDataParams()?.mapAdjustParams()
41+
}
42+
43+
override fun update() {
44+
updateViewData()
45+
}
46+
47+
override suspend fun onAdjustComplete() {
48+
parent?.onSaveClickDelegate()
49+
}
50+
}
51+
}
52+
53+
fun getContinueActionsDelegateParent(
54+
parent: ChangeRecordActionsDelegate.Parent?,
55+
updateViewData: () -> Unit,
56+
): ChangeRecordActionsContinueDelegate.Parent {
57+
return object : ChangeRecordActionsContinueDelegate.Parent {
58+
override fun getViewDataParams(): ChangeRecordActionsContinueDelegate.Parent.ViewDataParams? {
59+
return parent?.getViewDataParams()?.mapContinueParams()
60+
}
61+
62+
override fun update() {
63+
updateViewData()
64+
}
65+
66+
override suspend fun onSaveClickDelegate() {
67+
parent?.onSaveClickDelegate()
68+
}
69+
70+
override fun showMessage(stringResId: Int) {
71+
parent?.showMessage(stringResId)
72+
}
73+
}
74+
}
75+
76+
fun getRepeatActionsDelegateParent(
77+
parent: ChangeRecordActionsDelegate.Parent?,
78+
updateViewData: () -> Unit,
79+
): ChangeRecordActionsRepeatDelegate.Parent {
80+
return object : ChangeRecordActionsRepeatDelegate.Parent {
81+
override fun getViewDataParams(): ChangeRecordActionsRepeatDelegate.Parent.ViewDataParams? {
82+
return parent?.getViewDataParams()?.mapRepeatParams()
83+
}
84+
85+
override fun update() {
86+
updateViewData()
87+
}
88+
89+
override suspend fun onSaveClickDelegate() {
90+
parent?.onSaveClickDelegate()
91+
}
92+
}
93+
}
94+
95+
fun getDuplicateActionsDelegateParent(
96+
parent: ChangeRecordActionsDelegate.Parent?,
97+
updateViewData: () -> Unit,
98+
): ChangeRecordActionsDuplicateDelegate.Parent {
99+
return object : ChangeRecordActionsDuplicateDelegate.Parent {
100+
override fun getViewDataParams(): ChangeRecordActionsDuplicateDelegate.Parent.ViewDataParams? {
101+
return parent?.getViewDataParams()?.mapDuplicateParams()
102+
}
103+
104+
override fun update() {
105+
updateViewData()
106+
}
107+
108+
override suspend fun onSaveClickDelegate() {
109+
parent?.onSaveClickDelegate()
110+
}
111+
}
112+
}
113+
114+
fun getMergeDelegateParent(
115+
parent: ChangeRecordActionsDelegate.Parent?,
116+
updateViewData: () -> Unit,
117+
): ChangeRecordActionsMergeDelegate.Parent {
118+
return object : ChangeRecordActionsMergeDelegate.Parent {
119+
override fun getViewDataParams(): ChangeRecordActionsMergeDelegate.Parent.ViewDataParams? {
120+
return parent?.getViewDataParams()?.mapMergeParams()
121+
}
122+
123+
override fun update() {
124+
updateViewData()
125+
}
126+
}
127+
}
128+
129+
private fun ViewDataParams.mapSplitParams(): ChangeRecordActionsSplitDelegate.Parent.ViewDataParams {
130+
return ChangeRecordActionsSplitDelegate.Parent.ViewDataParams(
131+
newTimeSplit = splitParams.newTimeSplit,
132+
newTypeId = baseParams.newTypeId,
133+
newTimeStarted = baseParams.newTimeStarted,
134+
splitPreviewTimeEnded = splitParams.splitPreviewTimeEnded,
135+
newComment = baseParams.newComment,
136+
newCategoryIds = baseParams.newCategoryIds,
137+
showTimeEndedOnSplitPreview = splitParams.showTimeEndedOnSplitPreview,
138+
isButtonEnabled = baseParams.isButtonEnabled,
139+
)
140+
}
141+
142+
private fun ViewDataParams.mapAdjustParams(): ChangeRecordActionsAdjustDelegate.Parent.ViewDataParams {
143+
return ChangeRecordActionsAdjustDelegate.Parent.ViewDataParams(
144+
originalRecordId = adjustParams.originalRecordId,
145+
adjustNextRecordAvailable = adjustParams.adjustNextRecordAvailable,
146+
newTypeId = baseParams.newTypeId,
147+
newTimeStarted = baseParams.newTimeStarted,
148+
newTimeEnded = baseParams.newTimeEnded,
149+
adjustPreviewTimeEnded = adjustParams.adjustPreviewTimeEnded,
150+
originalTypeId = adjustParams.originalTypeId,
151+
originalTimeStarted = adjustParams.originalTimeStarted,
152+
adjustPreviewOriginalTimeEnded = adjustParams.adjustPreviewOriginalTimeEnded,
153+
showTimeEndedOnAdjustPreview = adjustParams.showTimeEndedOnAdjustPreview,
154+
isTimeEndedAvailable = adjustParams.isTimeEndedAvailable,
155+
isButtonEnabled = baseParams.isButtonEnabled,
156+
)
157+
}
158+
159+
private fun ViewDataParams.mapContinueParams(): ChangeRecordActionsContinueDelegate.Parent.ViewDataParams {
160+
return ChangeRecordActionsContinueDelegate.Parent.ViewDataParams(
161+
originalRecordId = continueParams.originalRecordId,
162+
newTypeId = baseParams.newTypeId,
163+
newTimeStarted = baseParams.newTimeStarted,
164+
newComment = baseParams.newComment,
165+
newCategoryIds = baseParams.newCategoryIds,
166+
isAdditionalActionsAvailable = continueParams.isAdditionalActionsAvailable,
167+
isButtonEnabled = baseParams.isButtonEnabled,
168+
)
169+
}
170+
171+
private fun ViewDataParams.mapRepeatParams(): ChangeRecordActionsRepeatDelegate.Parent.ViewDataParams {
172+
return ChangeRecordActionsRepeatDelegate.Parent.ViewDataParams(
173+
newTypeId = baseParams.newTypeId,
174+
newComment = baseParams.newComment,
175+
newCategoryIds = baseParams.newCategoryIds,
176+
isAdditionalActionsAvailable = repeatParams.isAdditionalActionsAvailable,
177+
isButtonEnabled = baseParams.isButtonEnabled,
178+
)
179+
}
180+
181+
private fun ViewDataParams.mapDuplicateParams(): ChangeRecordActionsDuplicateDelegate.Parent.ViewDataParams {
182+
return ChangeRecordActionsDuplicateDelegate.Parent.ViewDataParams(
183+
newTypeId = baseParams.newTypeId,
184+
newTimeStarted = baseParams.newTimeStarted,
185+
newTimeEnded = baseParams.newTimeEnded,
186+
newComment = baseParams.newComment,
187+
newCategoryIds = baseParams.newCategoryIds,
188+
isAdditionalActionsAvailable = duplicateParams.isAdditionalActionsAvailable,
189+
isButtonEnabled = baseParams.isButtonEnabled,
190+
)
191+
}
192+
193+
private fun ViewDataParams.mapMergeParams(): ChangeRecordActionsMergeDelegate.Parent.ViewDataParams {
194+
return ChangeRecordActionsMergeDelegate.Parent.ViewDataParams(
195+
mergeAvailable = mergeParams.mergeAvailable,
196+
prevRecord = mergeParams.prevRecord,
197+
newTimeEnded = baseParams.newTimeEnded,
198+
isButtonEnabled = baseParams.isButtonEnabled,
199+
)
200+
}
201+
}

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -96,15 +96,15 @@ class ChangeRecordActionsAdjustDelegate @Inject constructor(
9696
}.let(resourceRepo::getString)
9797
result += HintViewData(hintText)
9898
val state = loadViewData(
99-
recordId = params.recordId,
99+
recordId = params.originalRecordId,
100100
adjustNextRecordAvailable = params.adjustNextRecordAvailable,
101101
newTypeId = params.newTypeId,
102102
newTimeStarted = params.newTimeStarted,
103103
adjustPreviewTimeEnded = params.adjustPreviewTimeEnded,
104104
originalTypeId = params.originalTypeId,
105105
originalTimeStarted = params.originalTimeStarted,
106-
originalTimeEnded = params.originalTimeEnded,
107-
showTimeEnded = params.showTimeEnded,
106+
originalTimeEnded = params.adjustPreviewOriginalTimeEnded,
107+
showTimeEnded = params.showTimeEndedOnAdjustPreview,
108108
)
109109
val previewData = state.currentData
110110
result += ChangeRecordChangePreviewViewData(
@@ -153,7 +153,7 @@ class ChangeRecordActionsAdjustDelegate @Inject constructor(
153153
val params = parent?.getViewDataParams() ?: return
154154

155155
val adjacentRecords = getAdjacentRecords(
156-
recordId = params.recordId,
156+
recordId = params.originalRecordId,
157157
newTimeStarted = params.newTimeStarted,
158158
newTimeEnded = params.newTimeEnded,
159159
adjustNextRecordAvailable = params.adjustNextRecordAvailable,
@@ -440,16 +440,16 @@ class ChangeRecordActionsAdjustDelegate @Inject constructor(
440440
suspend fun onAdjustComplete()
441441

442442
data class ViewDataParams(
443-
val recordId: Long,
443+
val originalRecordId: Long,
444444
val adjustNextRecordAvailable: Boolean,
445445
val newTypeId: Long,
446446
val newTimeStarted: Long,
447447
val newTimeEnded: Long,
448448
val adjustPreviewTimeEnded: Long,
449449
val originalTypeId: Long,
450450
val originalTimeStarted: Long,
451-
val originalTimeEnded: Long,
452-
val showTimeEnded: Boolean,
451+
val adjustPreviewOriginalTimeEnded: Long,
452+
val showTimeEndedOnAdjustPreview: Boolean,
453453
val isTimeEndedAvailable: Boolean,
454454
val isButtonEnabled: Boolean,
455455
)

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ class ChangeRecordActionsContinueDelegate @Inject constructor(
3535
suspend fun onContinueClickDelegate() {
3636
val params = parent?.getViewDataParams() ?: return
3737
recordActionContinueMediator.execute(
38-
recordId = params.recordId,
38+
recordId = params.originalRecordId,
3939
typeId = params.newTypeId,
4040
timeStarted = params.newTimeStarted,
4141
comment = params.newComment,
@@ -60,6 +60,7 @@ class ChangeRecordActionsContinueDelegate @Inject constructor(
6060
private fun loadContinueViewData(): List<ViewHolderType> {
6161
val params = parent?.getViewDataParams()
6262
?: return emptyList()
63+
if (!params.isAdditionalActionsAvailable) return emptyList()
6364

6465
val result = mutableListOf<ViewHolderType>()
6566
result += HintViewData(
@@ -83,11 +84,12 @@ class ChangeRecordActionsContinueDelegate @Inject constructor(
8384
fun showMessage(stringResId: Int)
8485

8586
data class ViewDataParams(
86-
val recordId: Long,
87+
val originalRecordId: Long,
8788
val newTypeId: Long,
8889
val newTimeStarted: Long,
8990
val newComment: String,
9091
val newCategoryIds: List<Long>,
92+
val isAdditionalActionsAvailable: Boolean,
9193
val isButtonEnabled: Boolean,
9294
)
9395
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package com.example.util.simpletimetracker.feature_change_record.viewModel
2+
3+
import androidx.lifecycle.LiveData
4+
import com.example.util.simpletimetracker.domain.model.Record
5+
import com.example.util.simpletimetracker.feature_base_adapter.ViewHolderType
6+
7+
interface ChangeRecordActionsDelegate {
8+
val actionsViewData: LiveData<List<ViewHolderType>>
9+
10+
interface Parent {
11+
fun getViewDataParams(): ViewDataParams
12+
13+
fun updateViewData()
14+
15+
fun onRecordChangeButtonClick(
16+
onProceed: suspend () -> Unit,
17+
checkTypeSelected: Boolean = true,
18+
)
19+
20+
suspend fun onSaveClickDelegate()
21+
22+
suspend fun onSplitComplete()
23+
24+
fun showMessage(stringResId: Int)
25+
26+
data class ViewDataParams(
27+
val baseParams: BaseParams,
28+
val splitParams: SplitParams,
29+
val duplicateParams: DuplicateParams,
30+
val continueParams: ContinueParams,
31+
val repeatParams: RepeatParams,
32+
val adjustParams: AdjustParams,
33+
val mergeParams: MergeParams,
34+
) {
35+
36+
data class BaseParams(
37+
val newTypeId: Long,
38+
val newTimeStarted: Long,
39+
val newTimeEnded: Long,
40+
val newComment: String,
41+
val newCategoryIds: List<Long>,
42+
val isButtonEnabled: Boolean,
43+
)
44+
45+
data class SplitParams(
46+
val newTimeSplit: Long,
47+
val splitPreviewTimeEnded: Long,
48+
val showTimeEndedOnSplitPreview: Boolean,
49+
)
50+
51+
data class DuplicateParams(
52+
val isAdditionalActionsAvailable: Boolean,
53+
)
54+
55+
data class ContinueParams(
56+
val originalRecordId: Long,
57+
val isAdditionalActionsAvailable: Boolean,
58+
)
59+
60+
data class RepeatParams(
61+
val isAdditionalActionsAvailable: Boolean,
62+
)
63+
64+
data class AdjustParams(
65+
val originalRecordId: Long,
66+
val originalTypeId: Long,
67+
val originalTimeStarted: Long,
68+
val adjustNextRecordAvailable: Boolean,
69+
val adjustPreviewTimeEnded: Long,
70+
val adjustPreviewOriginalTimeEnded: Long,
71+
val showTimeEndedOnAdjustPreview: Boolean,
72+
val isTimeEndedAvailable: Boolean,
73+
)
74+
75+
data class MergeParams(
76+
val mergeAvailable: Boolean,
77+
val prevRecord: Record?,
78+
)
79+
}
80+
}
81+
}

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

Lines changed: 0 additions & 28 deletions
This file was deleted.

0 commit comments

Comments
 (0)