Skip to content

Commit cff5964

Browse files
committed
refactor record filters
1 parent 9a1f13d commit cff5964

File tree

4 files changed

+86
-31
lines changed

4 files changed

+86
-31
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
android:width="24dp"
3+
android:height="24dp"
4+
android:viewportWidth="24"
5+
android:viewportHeight="24">
6+
<path
7+
android:fillColor="#FF000000"
8+
android:pathData="M12,7c2.76,0 5,2.24 5,5 0,0.65 -0.13,1.26 -0.36,1.83l2.92,2.92c1.51,-1.26 2.7,-2.89 3.43,-4.75 -1.73,-4.39 -6,-7.5 -11,-7.5 -1.4,0 -2.74,0.25 -3.98,0.7l2.16,2.16C10.74,7.13 11.35,7 12,7zM2,4.27l2.28,2.28 0.46,0.46C3.08,8.3 1.78,10.02 1,12c1.73,4.39 6,7.5 11,7.5 1.55,0 3.03,-0.3 4.38,-0.84l0.42,0.42L19.73,22 21,20.73 3.27,3 2,4.27zM7.53,9.8l1.55,1.55c-0.05,0.21 -0.08,0.43 -0.08,0.65 0,1.66 1.34,3 3,3 0.22,0 0.44,-0.03 0.65,-0.08l1.55,1.55c-0.67,0.33 -1.41,0.53 -2.2,0.53 -2.76,0 -5,-2.24 -5,-5 0,-0.79 0.2,-1.53 0.53,-2.2zM11.84,9.02l3.15,3.15 0.02,-0.16c0,-1.66 -1.34,-3 -3,-3l-0.17,0.01z"/>
9+
</vector>

features/feature_records_filter/src/main/java/com/example/util/simpletimetracker/feature_records_filter/interactor/RecordsFilterUpdateInteractor.kt

Lines changed: 63 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ class RecordsFilterUpdateInteractor @Inject constructor(
5050
currentFilters: List<RecordsFilter>,
5151
recordTypes: List<RecordType>,
5252
recordTypeCategories: List<RecordTypeCategory>,
53+
recordTags: List<RecordTag>,
54+
typesToTags: List<RecordTypeToTag>,
5355
): List<RecordsFilter> {
5456
val filters = currentFilters.toMutableList()
5557
val currentIds = filters.getTypeIds().toMutableList()
@@ -65,12 +67,27 @@ class RecordsFilterUpdateInteractor @Inject constructor(
6567

6668
val newIds = currentIds.toMutableList().apply { addOrRemove(id) }
6769

68-
return handleSelectTypes(filters, newIds)
70+
return handleSelectTypes(
71+
currentFilters = filters,
72+
newIds = newIds,
73+
).let {
74+
checkTagFilterConsistency(
75+
currentFilters = it,
76+
recordTypes = recordTypes,
77+
recordTypeCategories = recordTypeCategories,
78+
recordTags = recordTags,
79+
typesToTags = typesToTags,
80+
)
81+
}
6982
}
7083

7184
fun handleCategoryClick(
7285
id: Long,
7386
currentFilters: List<RecordsFilter>,
87+
recordTypes: List<RecordType>,
88+
recordTypeCategories: List<RecordTypeCategory>,
89+
recordTags: List<RecordTag>,
90+
typesToTags: List<RecordTypeToTag>,
7491
): List<RecordsFilter> {
7592
val filters = currentFilters.toMutableList()
7693
val currentItems = filters.getCategoryItems()
@@ -81,7 +98,18 @@ class RecordsFilterUpdateInteractor @Inject constructor(
8198
RecordsFilter.CategoryItem.Categorized(id)
8299
}.let { currentItems.toMutableList().apply { addOrRemove(it) } }
83100

84-
return handleSelectCategories(filters, newItems)
101+
return handleSelectCategories(
102+
currentFilters = filters,
103+
newItems = newItems,
104+
).let {
105+
checkTagFilterConsistency(
106+
currentFilters = it,
107+
recordTypes = recordTypes,
108+
recordTypeCategories = recordTypeCategories,
109+
recordTags = recordTags,
110+
typesToTags = typesToTags,
111+
)
112+
}
85113
}
86114

87115
fun handleTagClick(
@@ -372,6 +400,9 @@ class RecordsFilterUpdateInteractor @Inject constructor(
372400
currentFilters: List<RecordsFilter>,
373401
subtype: RecordsFilterSelectionButtonType.Subtype,
374402
recordTypes: List<RecordType>,
403+
recordTypeCategories: List<RecordTypeCategory>,
404+
recordTags: List<RecordTag>,
405+
typesToTags: List<RecordTypeToTag>,
375406
): List<RecordsFilter> {
376407
val newIds = when (subtype) {
377408
is RecordsFilterSelectionButtonType.Subtype.SelectAll -> recordTypes.map { it.id }
@@ -380,13 +411,25 @@ class RecordsFilterUpdateInteractor @Inject constructor(
380411
return handleSelectTypes(
381412
currentFilters = currentFilters,
382413
newIds = newIds,
383-
)
414+
).let {
415+
checkTagFilterConsistency(
416+
currentFilters = it,
417+
recordTypes = recordTypes,
418+
recordTypeCategories = recordTypeCategories,
419+
recordTags = recordTags,
420+
typesToTags = typesToTags,
421+
)
422+
}
384423
}
385424

386425
fun onCategoriesSelectionButtonClick(
387426
currentFilters: List<RecordsFilter>,
388427
subtype: RecordsFilterSelectionButtonType.Subtype,
389428
categories: List<Category>,
429+
recordTypes: List<RecordType>,
430+
recordTypeCategories: List<RecordTypeCategory>,
431+
recordTags: List<RecordTag>,
432+
typesToTags: List<RecordTypeToTag>,
390433
): List<RecordsFilter> {
391434
val newItems = when (subtype) {
392435
is RecordsFilterSelectionButtonType.Subtype.SelectAll -> {
@@ -401,7 +444,15 @@ class RecordsFilterUpdateInteractor @Inject constructor(
401444
return handleSelectCategories(
402445
currentFilters = currentFilters,
403446
newItems = newItems,
404-
)
447+
).let {
448+
checkTagFilterConsistency(
449+
currentFilters = it,
450+
recordTypes = recordTypes,
451+
recordTypeCategories = recordTypeCategories,
452+
recordTags = recordTags,
453+
typesToTags = typesToTags,
454+
)
455+
}
405456
}
406457

407458
fun onTagsSelectionButtonClick(
@@ -427,7 +478,7 @@ class RecordsFilterUpdateInteractor @Inject constructor(
427478
)
428479
}
429480

430-
fun checkTagFilterConsistency(
481+
private fun checkTagFilterConsistency(
431482
currentFilters: List<RecordsFilter>,
432483
recordTypes: List<RecordType>,
433484
recordTypeCategories: List<RecordTypeCategory>,
@@ -440,20 +491,18 @@ class RecordsFilterUpdateInteractor @Inject constructor(
440491
recordTypes = recordTypes,
441492
recordTypeCategories = recordTypeCategories,
442493
)
494+
val tagIds = recordTags.map(RecordTag::id)
495+
val selectableTagIds = filterSelectableTagsInteractor.execute(
496+
tagIds = tagIds,
497+
typesToTags = typesToTags,
498+
typeIds = newTypeIds,
499+
)
443500

444501
fun update(tags: List<RecordsFilter.TagItem>): List<RecordsFilter.TagItem> {
445502
return tags.filter {
446503
when (it) {
447504
is RecordsFilter.TagItem.Tagged -> {
448-
it.tagId in recordTags
449-
.map { tag -> tag.id }
450-
.let { tags ->
451-
filterSelectableTagsInteractor.execute(
452-
tagIds = tags,
453-
typesToTags = typesToTags,
454-
typeIds = newTypeIds,
455-
)
456-
}
505+
it.tagId in selectableTagIds
457506
}
458507
is RecordsFilter.TagItem.Untagged -> {
459508
true
@@ -463,12 +512,10 @@ class RecordsFilterUpdateInteractor @Inject constructor(
463512
}
464513

465514
val newSelectedTags = update(filters.getSelectedTags())
466-
467515
filters.removeAll { filter -> filter is RecordsFilter.SelectedTags }
468516
if (newSelectedTags.isNotEmpty()) filters.add(RecordsFilter.SelectedTags(newSelectedTags))
469517

470518
val newFilteredTags = update(filters.getFilteredTags())
471-
472519
filters.removeAll { filter -> filter is RecordsFilter.FilteredTags }
473520
if (newFilteredTags.isNotEmpty()) filters.add(RecordsFilter.FilteredTags(newFilteredTags))
474521

features/feature_records_filter/src/main/java/com/example/util/simpletimetracker/feature_records_filter/viewModel/RecordsFilterViewModel.kt

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -209,17 +209,22 @@ class RecordsFilterViewModel @Inject constructor(
209209
currentFilters = filters,
210210
subtype = subtype,
211211
recordTypes = getTypesCache(),
212+
recordTypeCategories = getRecordTypeCategoriesCache(),
213+
recordTags = getTagsCache(),
214+
typesToTags = getRecordTypeToTagCache(),
212215
)
213-
checkTagFilterConsistency()
214216
}
215217
is RecordsFilterSelectionButtonType.Type.Categories -> {
216218
filterSelectionState = RecordsFilterSelectionState.Visible(RecordFilterType.Category)
217219
filters = recordsFilterUpdateInteractor.onCategoriesSelectionButtonClick(
218220
currentFilters = filters,
219221
subtype = subtype,
220222
categories = getCategoriesCache(),
223+
recordTypes = getTypesCache(),
224+
recordTypeCategories = getRecordTypeCategoriesCache(),
225+
recordTags = getTagsCache(),
226+
typesToTags = getRecordTypeToTagCache(),
221227
)
222-
checkTagFilterConsistency()
223228
}
224229
is RecordsFilterSelectionButtonType.Type.Tags -> {
225230
filters = recordsFilterUpdateInteractor.onTagsSelectionButtonClick(
@@ -348,17 +353,21 @@ class RecordsFilterViewModel @Inject constructor(
348353
currentFilters = filters,
349354
recordTypes = getTypesCache(),
350355
recordTypeCategories = getRecordTypeCategoriesCache(),
356+
recordTags = getTagsCache(),
357+
typesToTags = getRecordTypeToTagCache(),
351358
)
352-
checkTagFilterConsistency()
353359
}
354360

355361
private suspend fun handleCategoryClick(id: Long) {
356362
filterSelectionState = RecordsFilterSelectionState.Visible(RecordFilterType.Category)
357363
filters = recordsFilterUpdateInteractor.handleCategoryClick(
358364
id = id,
359365
currentFilters = filters,
366+
recordTypes = getTypesCache(),
367+
recordTypeCategories = getRecordTypeCategoriesCache(),
368+
recordTags = getTagsCache(),
369+
typesToTags = getRecordTypeToTagCache(),
360370
)
361-
checkTagFilterConsistency()
362371
}
363372

364373
private fun handleUntrackedClick() {
@@ -420,16 +429,6 @@ class RecordsFilterViewModel @Inject constructor(
420429
checkManualFilterVisibility()
421430
}
422431

423-
private suspend fun checkTagFilterConsistency() {
424-
filters = recordsFilterUpdateInteractor.checkTagFilterConsistency(
425-
currentFilters = filters,
426-
recordTypes = getTypesCache(),
427-
recordTypeCategories = getRecordTypeCategoriesCache(),
428-
recordTags = getTagsCache(),
429-
typesToTags = getRecordTypeToTagCache(),
430-
)
431-
}
432-
433432
private fun removeFilter(type: RecordFilterType) {
434433
filters = recordsFilterUpdateInteractor.removeFilter(
435434
currentFilters = filters,

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ class StatisticsDetailFragment :
226226

227227
val context = rvStatisticsDetailContent.context
228228
rvStatisticsDetailContent.onItemSwiped(
229-
iconRes = R.drawable.delete, // TODO
229+
iconRes = R.drawable.hide,
230230
iconColor = context.getThemedAttr(R.attr.appContrastColor),
231231
backgroundColor = ColorUtils.changeAlpha(
232232
context.getThemedAttr(R.attr.appContrastColor), 0.10f,

0 commit comments

Comments
 (0)