Skip to content

Commit 8002ef3

Browse files
committed
WIP add filter change on stat detail swipe
1 parent cff5964 commit 8002ef3

File tree

15 files changed

+134
-28
lines changed

15 files changed

+134
-28
lines changed

app/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ dependencies {
117117
implementation(project(":feature_tag_selection"))
118118
implementation(project(":feature_data_edit"))
119119
implementation(project(":feature_records_filter"))
120+
implementation(project(":feature_records_filter:api"))
120121
implementation(project(":feature_goals"))
121122
implementation(project(":feature_pomodoro"))
122123
implementation(project(":feature_complex_rules"))
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/build
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import com.example.util.simpletimetracker.Base
2+
import com.example.util.simpletimetracker.applyAndroidLibrary
3+
4+
plugins {
5+
alias(libs.plugins.gradleLibrary)
6+
alias(libs.plugins.kotlin)
7+
alias(libs.plugins.ksp)
8+
}
9+
10+
applyAndroidLibrary()
11+
12+
android {
13+
namespace = "${Base.namespace}.feature_records_filter.api"
14+
}
15+
16+
dependencies {
17+
implementation(project(":core"))
18+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
2+
3+
<application android:theme="@style/AppTheme" />
4+
5+
</manifest>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.example.util.simpletimetracker.feature_records_filter.api
2+
3+
import com.example.util.simpletimetracker.domain.record.model.RecordsFilter
4+
5+
interface RecordsFilterExcludeInteractor {
6+
7+
fun exclude(
8+
id: Long,
9+
type: ExcludeType,
10+
currentFilters: List<RecordsFilter>,
11+
): List<RecordsFilter>
12+
13+
sealed interface ExcludeType {
14+
data object Activity: ExcludeType
15+
data object Category: ExcludeType
16+
data object Tag: ExcludeType
17+
}
18+
}

features/feature_records_filter/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ android {
1616

1717
dependencies {
1818
implementation(project(":core"))
19+
implementation(project(":feature_records_filter:api"))
1920
implementation(libs.google.dagger)
2021
ksp(libs.kapt.dagger)
2122
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.example.util.simpletimetracker.feature_records_filter.di
2+
3+
import com.example.util.simpletimetracker.feature_records_filter.api.RecordsFilterExcludeInteractor
4+
import com.example.util.simpletimetracker.feature_records_filter.interactor.RecordsFilterExcludeInteractorImpl
5+
import dagger.Binds
6+
import dagger.Module
7+
import dagger.hilt.InstallIn
8+
import dagger.hilt.components.SingletonComponent
9+
10+
@Module
11+
@InstallIn(SingletonComponent::class)
12+
interface RecordsFilterModule {
13+
14+
@Binds
15+
fun bindRecordsFilterExcludeInteractor(impl: RecordsFilterExcludeInteractorImpl): RecordsFilterExcludeInteractor
16+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.example.util.simpletimetracker.feature_records_filter.interactor
2+
3+
import com.example.util.simpletimetracker.domain.record.model.RecordsFilter
4+
import com.example.util.simpletimetracker.feature_records_filter.api.RecordsFilterExcludeInteractor
5+
import com.example.util.simpletimetracker.feature_records_filter.api.RecordsFilterExcludeInteractor.ExcludeType
6+
import com.example.util.simpletimetracker.feature_records_filter.model.RecordFilterType
7+
import javax.inject.Inject
8+
9+
class RecordsFilterExcludeInteractorImpl @Inject constructor(
10+
private val recordsFilterUpdateInteractor: RecordsFilterUpdateInteractor,
11+
) : RecordsFilterExcludeInteractor {
12+
13+
override fun exclude(
14+
id: Long,
15+
type: ExcludeType,
16+
currentFilters: List<RecordsFilter>,
17+
): List<RecordsFilter> {
18+
// TODO change filter
19+
// TODO check tag consistency
20+
// TODO multitask?
21+
// TODO untracked?
22+
return when (type) {
23+
is ExcludeType.Activity -> {
24+
currentFilters
25+
}
26+
is ExcludeType.Category -> {
27+
currentFilters
28+
}
29+
is ExcludeType.Tag -> {
30+
recordsFilterUpdateInteractor.handleTagClick(
31+
currentState = RecordFilterType.FilteredTags,
32+
currentFilters = currentFilters,
33+
itemId = id,
34+
)
35+
}
36+
}
37+
}
38+
}

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import com.example.util.simpletimetracker.domain.recordTag.model.RecordTag
2626
import com.example.util.simpletimetracker.domain.recordTag.model.RecordTypeToTag
2727
import com.example.util.simpletimetracker.domain.recordType.model.RecordType
2828
import com.example.util.simpletimetracker.domain.statistics.model.RangeLength
29-
import com.example.util.simpletimetracker.feature_base_adapter.category.CategoryViewData
3029
import com.example.util.simpletimetracker.feature_base_adapter.record.RecordViewData
3130
import com.example.util.simpletimetracker.feature_base_adapter.recordFilter.FilterViewData
3231
import com.example.util.simpletimetracker.feature_records_filter.mapper.RecordsFilterViewDataMapper
@@ -115,7 +114,7 @@ class RecordsFilterUpdateInteractor @Inject constructor(
115114
fun handleTagClick(
116115
currentState: RecordFilterType,
117116
currentFilters: List<RecordsFilter>,
118-
item: CategoryViewData.Record,
117+
itemId: Long,
119118
): List<RecordsFilter> {
120119
val filters = currentFilters.toMutableList()
121120
val currentTags = when (currentState) {
@@ -124,9 +123,9 @@ class RecordsFilterUpdateInteractor @Inject constructor(
124123
else -> return currentFilters
125124
}
126125

127-
val newTags = when (item) {
128-
is CategoryViewData.Record.Tagged -> RecordsFilter.TagItem.Tagged(item.id)
129-
is CategoryViewData.Record.Untagged -> RecordsFilter.TagItem.Untagged
126+
val newTags = when (itemId) {
127+
UNCATEGORIZED_ITEM_ID -> RecordsFilter.TagItem.Untagged
128+
else -> RecordsFilter.TagItem.Tagged(itemId)
130129
}.let { currentTags.toMutableList().apply { addOrRemove(it) } }
131130

132131
return handleSelectTags(currentState, filters, newTags)

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -417,7 +417,7 @@ class RecordsFilterViewModel @Inject constructor(
417417
filters = recordsFilterUpdateInteractor.handleTagClick(
418418
currentState = filterSelectionState.type ?: return,
419419
currentFilters = filters,
420-
item = item,
420+
itemId = item.id,
421421
)
422422
}
423423

0 commit comments

Comments
 (0)