Skip to content

Commit f30159c

Browse files
committed
limit number of previews in statistics detail
1 parent b2219d6 commit f30159c

File tree

13 files changed

+128
-6
lines changed

13 files changed

+128
-6
lines changed

features/feature_settings/src/main/java/com/example/util/simpletimetracker/feature_settings/mapper/SettingsAutomatedTrackingMapper.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ import com.example.util.simpletimetracker.core.utils.EXTRA_RECORD_TIME_ENDED
3535
import com.example.util.simpletimetracker.core.utils.EXTRA_RECORD_TIME_STARTED
3636
import com.example.util.simpletimetracker.core.utils.EXTRA_RECORD_TYPE_ICON
3737
import com.example.util.simpletimetracker.core.utils.EXTRA_RECORD_TYPE_NOTE
38-
import com.example.util.simpletimetracker.domain.color.model.AppColor
3938
import com.example.util.simpletimetracker.domain.extension.indexesOf
4039
import com.example.util.simpletimetracker.domain.notifications.model.ExternalActionCommentMode
4140
import com.example.util.simpletimetracker.domain.notifications.model.ExternalActionFindRecordMode
@@ -229,7 +228,7 @@ class SettingsAutomatedTrackingMapper @Inject constructor(
229228
extra = EXTRA_GOAL_VALUE,
230229
description = resourceRepo.getString(R.string.settings_automated_tracking_goal_value),
231230
values = emptyList(),
232-
)
231+
),
233232
),
234233
)
235234

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.example.util.simpletimetracker.feature_statistics_detail.adapter
2+
3+
import com.example.util.simpletimetracker.feature_base_adapter.createRecyclerBindingAdapterDelegate
4+
import com.example.util.simpletimetracker.feature_statistics_detail.viewData.StatisticsDetailPreview
5+
import com.example.util.simpletimetracker.feature_views.extension.setOnClickWith
6+
import com.example.util.simpletimetracker.feature_statistics_detail.databinding.StatisticsDetailPreviewMoreItemBinding as Binding
7+
import com.example.util.simpletimetracker.feature_statistics_detail.viewData.StatisticsDetailPreviewMoreViewData as ViewData
8+
9+
fun createStatisticsPreviewMoreAdapterDelegate(
10+
onClick: (StatisticsDetailPreview) -> Unit,
11+
) = createRecyclerBindingAdapterDelegate<ViewData, Binding>(
12+
Binding::inflate,
13+
) { binding, item, _ ->
14+
15+
with(binding) {
16+
item as ViewData
17+
18+
root.setOnClickWith(item, onClick)
19+
}
20+
}

features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/adapter/StatisticsDetailPreviewsAdapterDelegate.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,21 @@ package com.example.util.simpletimetracker.feature_statistics_detail.adapter
22

33
import com.example.util.simpletimetracker.feature_base_adapter.ViewHolderType
44
import com.example.util.simpletimetracker.feature_base_adapter.createRecyclerBindingAdapterDelegate
5+
import com.example.util.simpletimetracker.feature_statistics_detail.viewData.StatisticsDetailPreview
56
import com.example.util.simpletimetracker.feature_statistics_detail.adapter.StatisticsDetailPreviewsViewData as ViewData
67
import com.example.util.simpletimetracker.feature_statistics_detail.databinding.StatisticsDetailPreviewsItemBinding as Binding
78

8-
fun createStatisticsDetailPreviewsAdapterDelegate() = createRecyclerBindingAdapterDelegate<ViewData, Binding>(
9+
fun createStatisticsDetailPreviewsAdapterDelegate(
10+
onClick: (StatisticsDetailPreview) -> Unit,
11+
) = createRecyclerBindingAdapterDelegate<ViewData, Binding>(
912
Binding::inflate,
1013
) { binding, item, _ ->
1114

1215
with(binding) {
1316
item as ViewData
1417

1518
root.adapter.replaceAsNew(item.data)
19+
root.setClickListener(onClick)
1620
}
1721
}
1822

features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/customView/StatisticsDetailPreviewsView.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ import android.widget.FrameLayout
77
import com.example.util.simpletimetracker.feature_base_adapter.BaseRecyclerAdapter
88
import com.example.util.simpletimetracker.feature_statistics_detail.adapter.createStatisticsPreviewAdapterDelegate
99
import com.example.util.simpletimetracker.feature_statistics_detail.adapter.createStatisticsPreviewCompareAdapterDelegate
10+
import com.example.util.simpletimetracker.feature_statistics_detail.adapter.createStatisticsPreviewMoreAdapterDelegate
1011
import com.example.util.simpletimetracker.feature_statistics_detail.databinding.StatisticsDetailPreviewsViewLayoutBinding
12+
import com.example.util.simpletimetracker.feature_statistics_detail.viewData.StatisticsDetailPreview
1113
import com.example.util.simpletimetracker.feature_statistics_detail.viewData.StatisticsDetailPreviewViewData
1214
import com.example.util.simpletimetracker.feature_views.extension.layoutInflater
1315
import com.google.android.flexbox.FlexDirection
@@ -28,17 +30,23 @@ class StatisticsDetailPreviewsView @JvmOverloads constructor(
2830
val adapter: BaseRecyclerAdapter by lazy {
2931
BaseRecyclerAdapter(
3032
createStatisticsPreviewCompareAdapterDelegate(),
33+
createStatisticsPreviewMoreAdapterDelegate(::onItemClick),
3134
createStatisticsPreviewAdapterDelegate(),
3235
)
3336
}
3437

3538
private val binding = StatisticsDetailPreviewsViewLayoutBinding.inflate(layoutInflater, this)
39+
private var clickListener: (StatisticsDetailPreview) -> Unit = {}
3640

3741
init {
3842
initRecycler()
3943
initEditMode()
4044
}
4145

46+
fun setClickListener(listener: (StatisticsDetailPreview) -> Unit) {
47+
clickListener = listener
48+
}
49+
4250
private fun initRecycler() {
4351
binding.rvStatisticsDetailPreviewsContainer.apply {
4452
layoutManager = FlexboxLayoutManager(context).apply {
@@ -50,6 +58,10 @@ class StatisticsDetailPreviewsView @JvmOverloads constructor(
5058
}
5159
}
5260

61+
private fun onItemClick(item: StatisticsDetailPreview) {
62+
clickListener(item)
63+
}
64+
5365
private fun initEditMode() {
5466
if (isInEditMode) {
5567
List(3) {

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ import com.example.util.simpletimetracker.domain.record.model.RecordsFilter
2020
import com.example.util.simpletimetracker.feature_base_adapter.ViewHolderType
2121
import com.example.util.simpletimetracker.feature_statistics_detail.mapper.StatisticsDetailViewDataMapper
2222
import com.example.util.simpletimetracker.feature_statistics_detail.viewData.StatisticsDetailPreviewCompareViewData
23+
import com.example.util.simpletimetracker.feature_statistics_detail.viewData.StatisticsDetailPreviewMoreViewData
24+
import com.example.util.simpletimetracker.feature_statistics_detail.viewData.StatisticsDetailPreviewViewData
2325
import javax.inject.Inject
2426
import kotlinx.coroutines.Dispatchers
2527
import kotlinx.coroutines.withContext
@@ -48,6 +50,7 @@ class StatisticsDetailPreviewInteractor @Inject constructor(
4850

4951
suspend fun getPreviewData(
5052
filterParams: List<RecordsFilter>,
53+
isExpanded: Boolean,
5154
isForComparison: Boolean,
5255
): List<ViewHolderType> = withContext(Dispatchers.Default) {
5356
val isDarkTheme = prefsInteractor.getDarkMode()
@@ -136,6 +139,17 @@ class StatisticsDetailPreviewInteractor @Inject constructor(
136139
val selectedIds = records.map { it.typeIds }.flatten().distinct()
137140
mapActivities(selectedIds)
138141
}
142+
}.let {
143+
if (it.size > MAX_PREVIEWS_COUNT && !isExpanded) {
144+
val type = if (isForComparison) {
145+
StatisticsDetailPreviewViewData.Type.COMPARISON
146+
} else {
147+
StatisticsDetailPreviewViewData.Type.FILTER
148+
}
149+
it.take(MAX_PREVIEWS_COUNT) + StatisticsDetailPreviewMoreViewData(type)
150+
} else {
151+
it
152+
}
139153
}
140154

141155
return@withContext if (isForComparison) {
@@ -179,4 +193,8 @@ class StatisticsDetailPreviewInteractor @Inject constructor(
179193
object SelectedTags : PreviewType
180194
object ActivitiesFromRecords : PreviewType
181195
}
196+
197+
companion object {
198+
private const val MAX_PREVIEWS_COUNT = 5
199+
}
182200
}

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,9 @@ class StatisticsDetailFragment :
6262

6363
private val contentAdapter: BaseRecyclerAdapter by lazy {
6464
BaseRecyclerAdapter(
65-
createStatisticsDetailPreviewsAdapterDelegate(),
65+
createStatisticsDetailPreviewsAdapterDelegate(
66+
onClick = viewModel::onPreviewItemClick,
67+
),
6668
createStatisticsDetailBarChartAdapterDelegate(),
6769
createStatisticsDetailPieChartAdapterDelegate(),
6870
createStatisticsDetailDayCalendarAdapterDelegate(),
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package com.example.util.simpletimetracker.feature_statistics_detail.viewData
2+
3+
interface StatisticsDetailPreview

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

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

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

5-
object StatisticsDetailPreviewCompareViewData : ViewHolderType {
5+
object StatisticsDetailPreviewCompareViewData : ViewHolderType, StatisticsDetailPreview {
66

77
// Only one item in recycler
88
override fun getUniqueId(): Long = 1L
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.example.util.simpletimetracker.feature_statistics_detail.viewData
2+
3+
import com.example.util.simpletimetracker.feature_base_adapter.ViewHolderType
4+
5+
data class StatisticsDetailPreviewMoreViewData(
6+
val type: StatisticsDetailPreviewViewData.Type,
7+
) : ViewHolderType, StatisticsDetailPreview {
8+
9+
override fun getUniqueId(): Long = type.hashCode().toLong()
10+
11+
override fun isValidType(other: ViewHolderType): Boolean =
12+
other is StatisticsDetailPreviewMoreViewData
13+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ data class StatisticsDetailPreviewViewData(
1010
val name: String,
1111
val iconId: RecordTypeIcon? = null,
1212
@ColorInt val color: Int,
13-
) : ViewHolderType {
13+
) : ViewHolderType, StatisticsDetailPreview {
1414

1515
override fun getUniqueId(): Long = id
1616

0 commit comments

Comments
 (0)