Skip to content

Commit f60d2fe

Browse files
committed
add complex rules to backup
1 parent f710449 commit f60d2fe

File tree

76 files changed

+1047
-510
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

76 files changed

+1047
-510
lines changed

buildSrc/src/main/kotlin/com/example/util/simpletimetracker/Base.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ object Base {
55
const val namespace = "com.example.util.simpletimetracker"
66

77
// Raise by 2 to account for wear version code.
8-
const val versionCode = 61
8+
const val versionCode = 63
99
const val versionName = "1.44"
1010
const val minSDK = 21
1111
const val currentSDK = 34

core/src/main/java/com/example/util/simpletimetracker/core/interactor/RecordTagViewDataInteractor.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.example.util.simpletimetracker.core.interactor
22

33
import com.example.util.simpletimetracker.core.mapper.CategoryViewDataMapper
4+
import com.example.util.simpletimetracker.core.mapper.CommonViewDataMapper
45
import com.example.util.simpletimetracker.domain.interactor.GetSelectableTagsInteractor
56
import com.example.util.simpletimetracker.domain.interactor.PrefsInteractor
67
import com.example.util.simpletimetracker.domain.interactor.RecordTagInteractor
@@ -15,6 +16,7 @@ class RecordTagViewDataInteractor @Inject constructor(
1516
private val recordTagInteractor: RecordTagInteractor,
1617
private val getSelectableTagsInteractor: GetSelectableTagsInteractor,
1718
private val categoryViewDataMapper: CategoryViewDataMapper,
19+
private val commonViewDataMapper: CommonViewDataMapper,
1820
) {
1921

2022
suspend fun getViewData(
@@ -42,7 +44,7 @@ class RecordTagViewDataInteractor @Inject constructor(
4244
DividerViewData(1),
4345
).takeIf { showAddButton }?.let(viewData::addAll)
4446

45-
categoryViewDataMapper.mapSelectedCategoriesHint(
47+
commonViewDataMapper.mapSelectedHint(
4648
isEmpty = selected.isEmpty(),
4749
).takeIf { multipleChoiceAvailable }?.let(viewData::add)
4850

core/src/main/java/com/example/util/simpletimetracker/core/mapper/CategoryViewDataMapper.kt

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -206,16 +206,6 @@ class CategoryViewDataMapper @Inject constructor(
206206
)
207207
}
208208

209-
fun mapSelectedCategoriesHint(isEmpty: Boolean): ViewHolderType {
210-
return InfoViewData(
211-
text = if (isEmpty) {
212-
R.string.nothing_selected
213-
} else {
214-
R.string.something_selected
215-
}.let(resourceRepo::getString),
216-
)
217-
}
218-
219209
fun getTextColor(
220210
isDarkTheme: Boolean,
221211
isFiltered: Boolean,
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
package com.example.util.simpletimetracker.feature_change_category.mapper
1+
package com.example.util.simpletimetracker.core.mapper
22

3+
import com.example.util.simpletimetracker.core.R
4+
import com.example.util.simpletimetracker.core.repo.ResourceRepo
35
import com.example.util.simpletimetracker.feature_base_adapter.ViewHolderType
46
import com.example.util.simpletimetracker.feature_base_adapter.info.InfoViewData
5-
import com.example.util.simpletimetracker.core.repo.ResourceRepo
6-
import com.example.util.simpletimetracker.feature_change_category.R
77
import javax.inject.Inject
88

9-
class ChangeCategoryMapper @Inject constructor(
9+
class CommonViewDataMapper @Inject constructor(
1010
private val resourceRepo: ResourceRepo,
1111
) {
1212

13-
fun mapSelectedTypesHint(isEmpty: Boolean): ViewHolderType {
13+
fun mapSelectedHint(isEmpty: Boolean): ViewHolderType {
1414
return InfoViewData(
1515
text = if (isEmpty) {
1616
R.string.nothing_selected

data_local/src/main/java/com/example/util/simpletimetracker/data_local/mapper/ComplexRuleDataLocalMapper.kt

Lines changed: 7 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ import com.example.util.simpletimetracker.domain.model.ComplexRule
55
import com.example.util.simpletimetracker.domain.model.DayOfWeek
66
import javax.inject.Inject
77

8-
class ComplexRuleDataLocalMapper @Inject constructor() {
8+
class ComplexRuleDataLocalMapper @Inject constructor(
9+
private val daysOfWeekDataLocalMapper: DaysOfWeekDataLocalMapper,
10+
) {
911

1012
fun map(dbo: ComplexRuleDBO): ComplexRule {
1113
return ComplexRule(
@@ -15,7 +17,8 @@ class ComplexRuleDataLocalMapper @Inject constructor() {
1517
actionAssignTagIds = mapIds(dbo.actionSetTagIds),
1618
conditionStartingTypeIds = mapIds(dbo.conditionStartingTypeIds),
1719
conditionCurrentTypeIds = mapIds(dbo.conditionCurrentTypeIds),
18-
conditionDaysOfWeek = mapDaysOfWeek(dbo.conditionDaysOfWeek),
20+
conditionDaysOfWeek = daysOfWeekDataLocalMapper
21+
.mapDaysOfWeek(dbo.conditionDaysOfWeek).toSet(),
1922
)
2023
}
2124

@@ -27,7 +30,8 @@ class ComplexRuleDataLocalMapper @Inject constructor() {
2730
actionSetTagIds = mapIds(domain.actionAssignTagIds),
2831
conditionStartingTypeIds = mapIds(domain.conditionStartingTypeIds),
2932
conditionCurrentTypeIds = mapIds(domain.conditionCurrentTypeIds),
30-
conditionDaysOfWeek = mapDaysOfWeek(domain.conditionDaysOfWeek),
33+
conditionDaysOfWeek = daysOfWeekDataLocalMapper
34+
.mapDaysOfWeek(domain.conditionDaysOfWeek.toList()),
3135
)
3236
}
3337

@@ -59,26 +63,4 @@ class ComplexRuleDataLocalMapper @Inject constructor() {
5963
is ComplexRule.Action.AssignTag -> 2L
6064
}
6165
}
62-
63-
private fun mapDaysOfWeek(dbo: String): Set<DayOfWeek> {
64-
return dbo.split(',').mapNotNull(daysOfWeekMapReversed::get).toSet()
65-
}
66-
67-
private fun mapDaysOfWeek(domain: Set<DayOfWeek>): String {
68-
return domain.mapNotNull(daysOfWeekMap::get).joinToString(separator = ",")
69-
}
70-
71-
companion object {
72-
private val daysOfWeekMap = mapOf(
73-
DayOfWeek.SUNDAY to "SUNDAY",
74-
DayOfWeek.MONDAY to "MONDAY",
75-
DayOfWeek.TUESDAY to "TUESDAY",
76-
DayOfWeek.WEDNESDAY to "WEDNESDAY",
77-
DayOfWeek.THURSDAY to "THURSDAY",
78-
DayOfWeek.FRIDAY to "FRIDAY",
79-
DayOfWeek.SATURDAY to "SATURDAY",
80-
)
81-
val daysOfWeekMapReversed = daysOfWeekMap.entries
82-
.associate { (key, value) -> value to key }
83-
}
8466
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.example.util.simpletimetracker.data_local.mapper
2+
3+
import com.example.util.simpletimetracker.domain.model.DayOfWeek
4+
import javax.inject.Inject
5+
6+
class DaysOfWeekDataLocalMapper @Inject constructor() {
7+
8+
fun mapDaysOfWeek(dbo: String): List<DayOfWeek> {
9+
return daysOfWeek.mapIndexedNotNull { index, dayOfWeek ->
10+
when (dbo.getOrNull(index)) {
11+
// Selected days are marked with 1, days that are not selected - with 0,
12+
// if string is empty - assume day is selected to support old app versions.
13+
'1' -> dayOfWeek
14+
null -> dayOfWeek
15+
'0' -> null
16+
else -> null
17+
}
18+
}
19+
}
20+
21+
fun mapDaysOfWeek(domain: List<DayOfWeek>): String {
22+
return daysOfWeek.map { dayOfWeek ->
23+
if (dayOfWeek in domain) '1' else '0'
24+
}.joinToString(separator = "")
25+
}
26+
27+
companion object {
28+
// Do not change order, this values saved in database accordingly.
29+
private val daysOfWeek = listOf(
30+
DayOfWeek.SUNDAY,
31+
DayOfWeek.MONDAY,
32+
DayOfWeek.TUESDAY,
33+
DayOfWeek.WEDNESDAY,
34+
DayOfWeek.THURSDAY,
35+
DayOfWeek.FRIDAY,
36+
DayOfWeek.SATURDAY,
37+
)
38+
}
39+
}

data_local/src/main/java/com/example/util/simpletimetracker/data_local/mapper/RecordTypeGoalDataLocalMapper.kt

Lines changed: 5 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ import com.example.util.simpletimetracker.domain.model.DayOfWeek
66
import com.example.util.simpletimetracker.domain.model.RecordTypeGoal
77
import javax.inject.Inject
88

9-
class RecordTypeGoalDataLocalMapper @Inject constructor() {
9+
class RecordTypeGoalDataLocalMapper @Inject constructor(
10+
private val daysOfWeekDataLocalMapper: DaysOfWeekDataLocalMapper,
11+
) {
1012

1113
fun map(dbo: RecordTypeGoalDBO): RecordTypeGoal {
1214
return RecordTypeGoal(
@@ -28,7 +30,7 @@ class RecordTypeGoalDataLocalMapper @Inject constructor() {
2830
1L -> RecordTypeGoal.Type.Count(dbo.value)
2931
else -> RecordTypeGoal.Type.Duration(dbo.value)
3032
},
31-
daysOfWeek = mapDaysOfWeek(dbo.daysOfWeek),
33+
daysOfWeek = daysOfWeekDataLocalMapper.mapDaysOfWeek(dbo.daysOfWeek),
3234
)
3335
}
3436

@@ -48,39 +50,7 @@ class RecordTypeGoalDataLocalMapper @Inject constructor() {
4850
},
4951
value = domain.type.value,
5052
categoryId = (domain.idData as? RecordTypeGoal.IdData.Category)?.value.orZero(),
51-
daysOfWeek = mapDaysOfWeek(domain.daysOfWeek),
52-
)
53-
}
54-
55-
fun mapDaysOfWeek(dbo: String): List<DayOfWeek> {
56-
return daysOfWeek.mapIndexedNotNull { index, dayOfWeek ->
57-
when (dbo.getOrNull(index)) {
58-
// Selected days are marked with 1, days that are not selected - with 0,
59-
// if string is empty - assume day is selected to support old app versions.
60-
'1' -> dayOfWeek
61-
null -> dayOfWeek
62-
'0' -> null
63-
else -> null
64-
}
65-
}
66-
}
67-
68-
fun mapDaysOfWeek(domain: List<DayOfWeek>): String {
69-
return daysOfWeek.map { dayOfWeek ->
70-
if (dayOfWeek in domain) '1' else '0'
71-
}.joinToString(separator = "")
72-
}
73-
74-
companion object {
75-
// Do not change order, this values saved in database accordingly.
76-
private val daysOfWeek = listOf(
77-
DayOfWeek.SUNDAY,
78-
DayOfWeek.MONDAY,
79-
DayOfWeek.TUESDAY,
80-
DayOfWeek.WEDNESDAY,
81-
DayOfWeek.THURSDAY,
82-
DayOfWeek.FRIDAY,
83-
DayOfWeek.SATURDAY,
53+
daysOfWeek = daysOfWeekDataLocalMapper.mapDaysOfWeek(domain.daysOfWeek),
8454
)
8555
}
8656
}

data_local/src/main/java/com/example/util/simpletimetracker/data_local/model/ComplexRuleDBO.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,10 @@ data class ComplexRuleDBO(
2828
@ColumnInfo(name = "conditionCurrentTypeIds")
2929
val conditionCurrentTypeIds: String,
3030

31-
// Days of week stored in string comma separated
31+
// Stored as "0000000" string, where each number is a day,
32+
// 0 - not selected, 1 - selected,
33+
// starting from sunday.
34+
// For example, "0111110" - only work days selected.
3235
@ColumnInfo(name = "conditionDaysOfWeek")
3336
val conditionDaysOfWeek: String,
3437
)

data_local/src/main/java/com/example/util/simpletimetracker/data_local/model/RecordTypeGoalDBO.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ data class RecordTypeGoalDBO(
3737
// Stored as "0000000" string, where each number is a day,
3838
// 0 - not selected, 1 - selected,
3939
// starting from sunday.
40-
// For example, "1111100" - only work days selected.
40+
// For example, "0111110" - only work days selected.
4141
@ColumnInfo(name = "days_of_week")
4242
val daysOfWeek: String,
4343
)

0 commit comments

Comments
 (0)