Skip to content

Commit 5d31323

Browse files
committed
change detailed statistics blocks ordering logic
1 parent d60112e commit 5d31323

23 files changed

Lines changed: 225 additions & 81 deletions

features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/interactor/StatisticsDetailContentInteractor.kt

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,49 @@ package com.example.util.simpletimetracker.feature_statistics_detail.interactor
33
import com.example.util.simpletimetracker.feature_base_adapter.ViewHolderType
44
import com.example.util.simpletimetracker.feature_statistics_detail.viewData.StatisticsDetailPreviewCompositeViewData
55
import com.example.util.simpletimetracker.feature_statistics_detail.viewData.StatisticsDetailViewData
6+
import com.example.util.simpletimetracker.feature_statistics_detail.viewModel.delegate.StatisticsDetailChartViewModelDelegate
7+
import com.example.util.simpletimetracker.feature_statistics_detail.viewModel.delegate.StatisticsDetailDailyCalendarViewModelDelegate
8+
import com.example.util.simpletimetracker.feature_statistics_detail.viewModel.delegate.StatisticsDetailDataDistributionViewModelDelegate
9+
import com.example.util.simpletimetracker.feature_statistics_detail.viewModel.delegate.StatisticsDetailDurationSplitViewModelDelegate
10+
import com.example.util.simpletimetracker.feature_statistics_detail.viewModel.delegate.StatisticsDetailGoalsViewModelDelegate
11+
import com.example.util.simpletimetracker.feature_statistics_detail.viewModel.delegate.StatisticsDetailNextActivitiesViewModelDelegate
12+
import com.example.util.simpletimetracker.feature_statistics_detail.viewModel.delegate.StatisticsDetailPreviewViewModelDelegate
13+
import com.example.util.simpletimetracker.feature_statistics_detail.viewModel.delegate.StatisticsDetailSplitChartViewModelDelegate
14+
import com.example.util.simpletimetracker.feature_statistics_detail.viewModel.delegate.StatisticsDetailStatsViewModelDelegate
15+
import com.example.util.simpletimetracker.feature_statistics_detail.viewModel.delegate.StatisticsDetailStreaksViewModelDelegate
16+
import com.example.util.simpletimetracker.feature_statistics_detail.viewModel.delegate.StatisticsDetailTagValueViewModelDelegate
17+
import com.example.util.simpletimetracker.feature_statistics_detail.viewModel.delegate.StatisticsDetailViewModelDelegate
618
import javax.inject.Inject
719

820
class StatisticsDetailContentInteractor @Inject constructor() {
921

1022
fun getContent(
1123
previewViewData: StatisticsDetailPreviewCompositeViewData.Preview?,
12-
data: List<StatisticsDetailViewData<*>>,
24+
delegates: List<StatisticsDetailViewModelDelegate>,
1325
): List<ViewHolderType> {
14-
return data.map { it.itemProducer?.invoke(previewViewData) ?: it.item }
26+
val viewData = delegates
27+
.mapNotNull { it.getViewData() }
28+
.associateBy { it.key }
29+
30+
return getBlocksOrder()
31+
.mapNotNull { key -> viewData[key]?.data }
32+
.flatten()
33+
.map { item -> item.itemProducer?.invoke(previewViewData) ?: item.item }
34+
}
35+
36+
private fun getBlocksOrder(): List<StatisticsDetailViewData.Key> {
37+
return listOf(
38+
StatisticsDetailPreviewViewModelDelegate,
39+
StatisticsDetailChartViewModelDelegate,
40+
StatisticsDetailDailyCalendarViewModelDelegate,
41+
StatisticsDetailStatsViewModelDelegate,
42+
StatisticsDetailStreaksViewModelDelegate,
43+
StatisticsDetailSplitChartViewModelDelegate,
44+
StatisticsDetailDurationSplitViewModelDelegate,
45+
StatisticsDetailNextActivitiesViewModelDelegate,
46+
StatisticsDetailGoalsViewModelDelegate,
47+
StatisticsDetailTagValueViewModelDelegate,
48+
StatisticsDetailDataDistributionViewModelDelegate,
49+
)
1550
}
1651
}

features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/interactor/StatisticsDetailStreaksInteractor.kt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import com.example.util.simpletimetracker.feature_statistics_detail.adapter.Stat
3030
import com.example.util.simpletimetracker.feature_statistics_detail.adapter.StatisticsDetailSeriesCalendarViewData
3131
import com.example.util.simpletimetracker.feature_statistics_detail.adapter.StatisticsDetailSeriesChartViewData
3232
import com.example.util.simpletimetracker.feature_statistics_detail.mapper.mapItem
33+
import com.example.util.simpletimetracker.feature_statistics_detail.mapper.mapItems
3334
import com.example.util.simpletimetracker.feature_statistics_detail.viewData.StatisticsDetailCardInternalViewData
3435
import com.example.util.simpletimetracker.feature_statistics_detail.viewData.StatisticsDetailStreaksGoalViewData
3536
import com.example.util.simpletimetracker.feature_statistics_detail.viewData.StatisticsDetailStreaksTypeViewData
@@ -58,7 +59,7 @@ class StatisticsDetailStreaksInteractor @Inject constructor(
5859
compareLongestStreak = "",
5960
currentStreak = "",
6061
compareCurrentStreak = "",
61-
).map { it.mapItem() },
62+
).mapItems(),
6263
)
6364
}
6465

@@ -193,9 +194,9 @@ class StatisticsDetailStreaksInteractor @Inject constructor(
193194
emptyList()
194195
}
195196

196-
val viewData = mutableListOf<StatisticsDetailViewData<*>>()
197-
viewData += streaks.map { it.mapItem() }
198-
viewData += streakGoalTypeData.map { it.mapItem() }
197+
val viewData = mutableListOf<StatisticsDetailViewData.Item<*>>()
198+
viewData += streaks.mapItems()
199+
viewData += streakGoalTypeData.mapItems()
199200
viewData += streaksListData.takeIf { it.isNotEmpty() }?.let {
200201
StatisticsDetailSeriesChartViewData(
201202
block = StatisticsDetailBlock.SeriesChart,
@@ -212,7 +213,7 @@ class StatisticsDetailStreaksInteractor @Inject constructor(
212213
animate = OneShotValue(true),
213214
)
214215
}?.mapItem(forComparison = true)
215-
viewData += streakTypeData?.mapItem()
216+
viewData += listOfNotNull(streakTypeData).mapItems()
216217
viewData += calendarData.takeIf { it.isNotEmpty() }?.let {
217218
StatisticsDetailSeriesCalendarViewData(
218219
block = StatisticsDetailBlock.SeriesCalendar,

features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/mapper/StatisticsDetailMapperExtensions.kt

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,29 +7,38 @@ import com.example.util.simpletimetracker.feature_statistics_detail.adapter.Stat
77
import com.example.util.simpletimetracker.feature_statistics_detail.adapter.StatisticsDetailSeriesChartViewData
88
import com.example.util.simpletimetracker.feature_statistics_detail.viewData.StatisticsDetailViewData
99

10-
fun ViewHolderType.mapItem(): StatisticsDetailViewData<*> =
11-
StatisticsDetailViewData(item = this)
10+
fun StatisticsDetailViewData.Key.mapToViewData(
11+
items: List<StatisticsDetailViewData.Item<*>>,
12+
): StatisticsDetailViewData {
13+
return StatisticsDetailViewData(
14+
key = this,
15+
data = items,
16+
)
17+
}
1218

13-
fun List<ViewHolderType>.mapItems(): List<StatisticsDetailViewData<*>> =
19+
fun ViewHolderType.mapItem(): StatisticsDetailViewData.Item<*> =
20+
StatisticsDetailViewData.Item(item = this)
21+
22+
fun List<ViewHolderType>.mapItems(): List<StatisticsDetailViewData.Item<*>> =
1423
this.map { it.mapItem() }
1524

1625
fun StatisticsDetailBarChartViewData.mapItem(
1726
forComparison: Boolean,
18-
): StatisticsDetailViewData<*> = this.mapItemInternal(forComparison) { copy(singleColor = it) }
27+
): StatisticsDetailViewData.Item<*> = this.mapItemInternal(forComparison) { copy(singleColor = it) }
1928

2029
fun StatisticsDetailSeriesChartViewData.mapItem(
2130
forComparison: Boolean,
22-
): StatisticsDetailViewData<*> = this.mapItemInternal(forComparison) { copy(color = it) }
31+
): StatisticsDetailViewData.Item<*> = this.mapItemInternal(forComparison) { copy(color = it) }
2332

2433
fun StatisticsDetailSeriesCalendarViewData.mapItem(
2534
forComparison: Boolean,
26-
): StatisticsDetailViewData<*> = this.mapItemInternal(forComparison) { copy(color = it) }
35+
): StatisticsDetailViewData.Item<*> = this.mapItemInternal(forComparison) { copy(color = it) }
2736

2837
private fun <T : ViewHolderType> T.mapItemInternal(
2938
forComparison: Boolean,
3039
itemProducer: T.(color: Int) -> T,
31-
): StatisticsDetailViewData<*> {
32-
return StatisticsDetailViewData(
40+
): StatisticsDetailViewData.Item<*> {
41+
return StatisticsDetailViewData.Item(
3342
item = this,
3443
itemProducer = { preview ->
3544
val color = if (forComparison) preview?.comparisonPreviewColor else preview?.previewColor

features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/mapper/StatisticsDetailViewDataMapper.kt

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ import com.example.util.simpletimetracker.feature_statistics_detail.viewData.Sta
4545
import com.example.util.simpletimetracker.feature_statistics_detail.viewData.StatisticsDetailGroupingViewData
4646
import com.example.util.simpletimetracker.feature_statistics_detail.viewData.StatisticsDetailPreviewViewData
4747
import com.example.util.simpletimetracker.feature_statistics_detail.viewData.StatisticsDetailSplitGroupingViewData
48+
import com.example.util.simpletimetracker.feature_statistics_detail.viewModel.delegate.StatisticsDetailChartViewModelDelegate
4849
import com.example.util.simpletimetracker.feature_views.barChart.BarChartView
4950
import com.example.util.simpletimetracker.feature_views.viewData.RecordTypeIcon
5051
import java.util.concurrent.TimeUnit
@@ -414,11 +415,13 @@ class StatisticsDetailViewDataMapper @Inject constructor(
414415
(it as? StatisticsDetailButtonViewData)?.copy(marginTopDp = newMarginTopDp) ?: it
415416
}
416417

418+
val viewDataItems = listOfNotNull(chartData) +
419+
listOfNotNull(compareChartData) +
420+
buttons.mapItems() +
421+
rangeAverages.mapItems()
422+
417423
return StatisticsDetailChartCompositeViewData(
418-
data = listOfNotNull(chartData) +
419-
listOfNotNull(compareChartData) +
420-
buttons.map { it.mapItem() } +
421-
rangeAverages.map { it.mapItem() },
424+
data = StatisticsDetailChartViewModelDelegate.mapToViewData(viewDataItems),
422425
appliedChartGrouping = appliedChartGrouping,
423426
appliedChartLength = appliedChartLength,
424427
)
@@ -487,14 +490,15 @@ class StatisticsDetailViewDataMapper @Inject constructor(
487490
data = it,
488491
)
489492
}
493+
val viewDataItems = listOfNotNull(
494+
emptyChart?.mapItem(forComparison = false),
495+
chartGroupingViewData?.mapItem(),
496+
chartLengthViewData?.mapItem(),
497+
rangeAverages?.mapItem(),
498+
)
490499

491500
return StatisticsDetailChartCompositeViewData(
492-
data = listOfNotNull(
493-
emptyChart?.mapItem(forComparison = false),
494-
chartGroupingViewData?.mapItem(),
495-
chartLengthViewData?.mapItem(),
496-
rangeAverages?.mapItem(),
497-
),
501+
data = StatisticsDetailChartViewModelDelegate.mapToViewData(viewDataItems),
498502
appliedChartGrouping = ChartGrouping.DAILY,
499503
appliedChartLength = ChartLength.TEN,
500504
)

features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/view/StatisticsDetailFragment.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,13 @@ import com.example.util.simpletimetracker.feature_statistics_detail.adapter.crea
4545
import com.example.util.simpletimetracker.feature_statistics_detail.adapter.createStatisticsDetailSeriesCalendarAdapterDelegate
4646
import com.example.util.simpletimetracker.feature_statistics_detail.adapter.createStatisticsDetailSeriesChartAdapterDelegate
4747
import com.example.util.simpletimetracker.feature_statistics_detail.api.StatisticsDetailOptionsListItem
48+
import com.example.util.simpletimetracker.feature_statistics_detail.mapper.mapItems
49+
import com.example.util.simpletimetracker.feature_statistics_detail.mapper.mapToViewData
4850
import com.example.util.simpletimetracker.feature_statistics_detail.settings.dialog.StatisticsTagValuesSettingsDialogListener
4951
import com.example.util.simpletimetracker.feature_statistics_detail.viewData.StatisticsDetailPreviewCompositeViewData
5052
import com.example.util.simpletimetracker.feature_statistics_detail.viewData.StatisticsDetailPreviewViewData
51-
import com.example.util.simpletimetracker.feature_statistics_detail.viewData.StatisticsDetailViewData
5253
import com.example.util.simpletimetracker.feature_statistics_detail.viewModel.StatisticsDetailViewModel
54+
import com.example.util.simpletimetracker.feature_statistics_detail.viewModel.delegate.StatisticsDetailPreviewViewModelDelegate
5355
import com.example.util.simpletimetracker.feature_views.ColorUtils
5456
import com.example.util.simpletimetracker.feature_views.extension.getThemedAttr
5557
import com.example.util.simpletimetracker.feature_views.extension.postDelayed
@@ -222,7 +224,9 @@ class StatisticsDetailFragment :
222224
)
223225

224226
StatisticsDetailPreviewCompositeViewData(
225-
data = emptyList<StatisticsDetailViewData<ViewHolderType>>(),
227+
data = StatisticsDetailPreviewViewModelDelegate.mapToViewData(
228+
items = emptyList<ViewHolderType>().mapItems(),
229+
),
226230
preview = StatisticsDetailPreviewCompositeViewData.Preview(
227231
previewColor = preview.color,
228232
comparisonPreviewColor = null,

features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/viewData/StatisticsDetailChartCompositeViewData.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import com.example.util.simpletimetracker.feature_statistics_detail.model.ChartG
44
import com.example.util.simpletimetracker.feature_statistics_detail.model.ChartLength
55

66
data class StatisticsDetailChartCompositeViewData(
7-
val data: List<StatisticsDetailViewData<*>>,
7+
val data: StatisticsDetailViewData,
88
val appliedChartGrouping: ChartGrouping,
99
val appliedChartLength: ChartLength,
1010
)

features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/viewData/StatisticsDetailPreviewCompositeViewData.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.example.util.simpletimetracker.feature_statistics_detail.viewData
22

33
data class StatisticsDetailPreviewCompositeViewData(
4-
val data: List<StatisticsDetailViewData<*>>,
4+
val data: StatisticsDetailViewData,
55
val preview: Preview?,
66
) {
77

Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
package com.example.util.simpletimetracker.feature_statistics_detail.viewData
22

33
data class StatisticsDetailStreaksViewData(
4-
val viewData: List<StatisticsDetailViewData<*>>,
4+
val viewData: List<StatisticsDetailViewData.Item<*>>,
55
)

features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/viewData/StatisticsDetailTagValuesCompositeViewData.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import com.example.util.simpletimetracker.feature_statistics_detail.model.ChartG
44
import com.example.util.simpletimetracker.feature_statistics_detail.model.ChartLength
55

66
data class StatisticsDetailTagValuesCompositeViewData(
7-
val viewData: List<StatisticsDetailViewData<*>>,
7+
val viewData: List<StatisticsDetailViewData.Item<*>>,
88
val appliedChartGrouping: ChartGrouping,
99
val appliedChartLength: ChartLength,
1010
)

features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/viewData/StatisticsDetailViewData.kt

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,15 @@ package com.example.util.simpletimetracker.feature_statistics_detail.viewData
22

33
import com.example.util.simpletimetracker.feature_base_adapter.ViewHolderType
44

5-
data class StatisticsDetailViewData<T : ViewHolderType>(
6-
val item: T,
7-
val itemProducer: ((StatisticsDetailPreviewCompositeViewData.Preview?) -> T)? = null,
8-
)
5+
data class StatisticsDetailViewData(
6+
val key: Key,
7+
val data: List<Item<*>>,
8+
) {
9+
10+
interface Key
11+
12+
data class Item<T : ViewHolderType>(
13+
val item: T,
14+
val itemProducer: ((StatisticsDetailPreviewCompositeViewData.Preview?) -> T)? = null,
15+
)
16+
}

0 commit comments

Comments
 (0)