Skip to content

Commit 59450bc

Browse files
committed
add records split cancel on screen close
1 parent 2a234c6 commit 59450bc

1 file changed

Lines changed: 10 additions & 5 deletions

File tree

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

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,16 @@ import com.example.util.simpletimetracker.domain.record.model.RecordsFilter
1414
import com.example.util.simpletimetracker.feature_statistics_detail.mapper.StatisticsDetailViewDataMapper
1515
import com.example.util.simpletimetracker.feature_statistics_detail.model.SplitChartGrouping
1616
import com.example.util.simpletimetracker.feature_statistics_detail.viewData.StatisticsDetailChartViewData
17+
import kotlinx.coroutines.CoroutineScope
1718
import java.util.Calendar
1819
import java.util.concurrent.TimeUnit
1920
import javax.inject.Inject
2021
import kotlin.math.abs
2122
import kotlin.math.ceil
2223
import kotlin.math.floor
2324
import kotlinx.coroutines.Dispatchers
25+
import kotlinx.coroutines.coroutineScope
26+
import kotlinx.coroutines.ensureActive
2427
import kotlinx.coroutines.withContext
2528

2629
class StatisticsDetailSplitChartInteractor @Inject constructor(
@@ -145,7 +148,7 @@ class StatisticsDetailSplitChartInteractor @Inject constructor(
145148
return@withContext mapper.mapToDurationsSlipChartViewData(data, isVisible)
146149
}
147150

148-
private fun getDurations(
151+
private suspend fun getDurations(
149152
records: List<RecordBase>,
150153
range: Range,
151154
splitChartGrouping: SplitChartGrouping,
@@ -184,19 +187,19 @@ class StatisticsDetailSplitChartInteractor @Inject constructor(
184187
}
185188
}
186189

187-
private fun processRecords(
190+
private suspend fun processRecords(
188191
calendar: Calendar,
189192
records: List<Range>,
190193
splitChartGrouping: SplitChartGrouping,
191194
startOfDayShift: Long,
192-
): List<Range> {
195+
): List<Range> = coroutineScope {
193196
val processedRecords: MutableList<Range> = mutableListOf()
194197

195198
records.forEach { record ->
196199
splitIntoRecords(calendar, record, splitChartGrouping, startOfDayShift).forEach(processedRecords::add)
197200
}
198201

199-
return processedRecords
202+
return@coroutineScope processedRecords
200203
}
201204

202205
private fun mapToGrouping(
@@ -224,13 +227,15 @@ class StatisticsDetailSplitChartInteractor @Inject constructor(
224227
/**
225228
* If a record is on several days or hours - split into several records each within separate range.
226229
*/
227-
private tailrec fun splitIntoRecords(
230+
private tailrec fun CoroutineScope.splitIntoRecords(
228231
calendar: Calendar,
229232
record: Range,
230233
splitChartGrouping: SplitChartGrouping,
231234
startOfDayShift: Long,
232235
splitRecords: MutableList<Range> = mutableListOf(),
233236
): List<Range> {
237+
ensureActive()
238+
234239
// Avoid infinite loop.
235240
if (record.duration < 0) return emptyList()
236241

0 commit comments

Comments
 (0)