@@ -16,7 +16,9 @@ import com.example.util.simpletimetracker.domain.record.model.RepeatButtonType
1616import com.example.util.simpletimetracker.domain.recordTag.model.CardTagOrder
1717import com.example.util.simpletimetracker.domain.recordType.model.CardOrder
1818import com.example.util.simpletimetracker.domain.statistics.model.ChartFilterType
19+ import com.example.util.simpletimetracker.domain.statistics.model.ChartValueMode
1920import com.example.util.simpletimetracker.domain.statistics.model.RangeLength
21+ import com.example.util.simpletimetracker.domain.statistics.model.StatisticsDetailTagValueSettings
2022import com.example.util.simpletimetracker.domain.statistics.model.StatisticsStreaksType
2123import com.example.util.simpletimetracker.domain.widget.model.GridWidgetData
2224import com.example.util.simpletimetracker.domain.widget.model.StatisticsWidgetData
@@ -201,6 +203,24 @@ class PrefsInteractor @Inject constructor(
201203 prefsRepo.statisticsDetailRangeLastDays
202204 }
203205
206+ suspend fun getStatisticsDetailTagValueSettings (
207+ tagId : Long ,
208+ ): StatisticsDetailTagValueSettings = withContext(Dispatchers .IO ) {
209+ prefsRepo.statisticsDetailTagValueSettings
210+ .let (::mapStatisticsDetailTagValueSettings)[tagId]
211+ ? : StatisticsDetailTagValueSettings .getDefault(tagId)
212+ }
213+
214+ suspend fun setStatisticsDetailTagValueSettings (
215+ value : StatisticsDetailTagValueSettings ,
216+ ) = withContext(Dispatchers .IO ) {
217+ val settings = prefsRepo.statisticsDetailTagValueSettings
218+ .let (::mapStatisticsDetailTagValueSettings)
219+ .toMutableMap().apply { put(value.tagId, value) }
220+ .let { serializeStatisticsDetailTagValueSettings(it.values) }
221+ prefsRepo.statisticsDetailTagValueSettings = settings
222+ }
223+
204224 suspend fun getFileExportRange (): RangeLength = withContext(Dispatchers .IO ) {
205225 mapToRange(
206226 value = prefsRepo.fileExportRange,
@@ -1262,7 +1282,50 @@ class PrefsInteractor @Inject constructor(
12621282 ? : emptyMap()
12631283 }
12641284
1285+ private fun mapStatisticsDetailTagValueSettings (
1286+ set : Set <String >? ,
1287+ ): Map <Long , StatisticsDetailTagValueSettings > {
1288+ return set?.mapNotNull { string ->
1289+ string.split(STATISTICS_DETAIL_TAG_VALUE_DELIMITER ).let { parts ->
1290+ val tagId = parts.getOrNull(0 )?.toLongOrNull() ? : return @mapNotNull null
1291+ val modeInt = parts.getOrNull(1 )?.toIntOrNull().orZero()
1292+ val multiplyInt = parts.getOrNull(2 )?.toIntOrNull().orZero()
1293+ val chartValueMode = when (modeInt) {
1294+ 0 -> ChartValueMode .TOTAL
1295+ 1 -> ChartValueMode .AVERAGE
1296+ else -> ChartValueMode .TOTAL
1297+ }
1298+ val multiplyDuration = multiplyInt == 1
1299+ tagId to StatisticsDetailTagValueSettings (
1300+ tagId = tagId,
1301+ chartValueMode = chartValueMode,
1302+ multiplyDuration = multiplyDuration,
1303+ )
1304+ }
1305+ }?.toMap().orEmpty()
1306+ }
1307+
1308+ private fun serializeStatisticsDetailTagValueSettings (
1309+ values : Collection <StatisticsDetailTagValueSettings >,
1310+ ): Set <String > {
1311+ return values.map { settings ->
1312+ buildString {
1313+ append(settings.tagId)
1314+ append(STATISTICS_DETAIL_TAG_VALUE_DELIMITER )
1315+ append(
1316+ when (settings.chartValueMode) {
1317+ ChartValueMode .TOTAL -> 0
1318+ ChartValueMode .AVERAGE -> 1
1319+ },
1320+ )
1321+ append(STATISTICS_DETAIL_TAG_VALUE_DELIMITER )
1322+ append(if (settings.multiplyDuration) 1 else 0 )
1323+ }
1324+ }.toSet()
1325+ }
1326+
12651327 companion object {
12661328 private const val CARDS_ORDER_DELIMITER = " _"
1329+ private const val STATISTICS_DETAIL_TAG_VALUE_DELIMITER = " _"
12671330 }
12681331}
0 commit comments