Skip to content

Commit d708b3e

Browse files
committed
trying to fix lag when navigating to statistics detail
1 parent 92c9e40 commit d708b3e

File tree

1 file changed

+14
-0
lines changed

1 file changed

+14
-0
lines changed

features/feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/viewModel/delegate/StatisticsDetailFilterViewModelDelegate.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import com.example.util.simpletimetracker.navigation.params.screen.RecordsFilter
1313
import com.example.util.simpletimetracker.navigation.params.screen.RecordsFilterParams
1414
import com.example.util.simpletimetracker.navigation.params.screen.RecordsFilterResultParams
1515
import kotlinx.coroutines.Job
16+
import kotlinx.coroutines.delay
1617
import kotlinx.coroutines.launch
1718
import javax.inject.Inject
1819

@@ -29,6 +30,7 @@ class StatisticsDetailFilterViewModelDelegate @Inject constructor(
2930
private var records: List<RecordBase> = emptyList() // all records with selected ids
3031
private var compareRecords: List<RecordBase> = emptyList() // all records with selected ids
3132
private var loadJob: Job? = null
33+
private var firstLoad: Boolean = true
3234

3335
override fun attach(parent: StatisticsDetailViewModelDelegate.Parent) {
3436
this.parent = parent
@@ -37,6 +39,7 @@ class StatisticsDetailFilterViewModelDelegate @Inject constructor(
3739
fun onVisible() {
3840
loadJob?.cancel()
3941
loadJob = delegateScope.launch {
42+
delayLoadIfNeeded()
4043
loadRecordsCache()
4144
parent?.updateViewData()
4245
}
@@ -122,6 +125,17 @@ class StatisticsDetailFilterViewModelDelegate @Inject constructor(
122125
)
123126
}
124127

128+
// Delay data load until screen transition finishes
129+
// to avoid lagging while recycler is inflating views.
130+
// Only done when no shared transitions, they delay onResume.
131+
private suspend fun delayLoadIfNeeded() {
132+
val extra = parent?.extra ?: return
133+
if (extra.transitionName.isEmpty() && firstLoad) {
134+
delay(300)
135+
firstLoad = false
136+
}
137+
}
138+
125139
private suspend fun loadRecordsCache() {
126140
// Load all records without date filter for faster date selection.
127141
records = recordFilterInteractor.getByFilter(filter)

0 commit comments

Comments
 (0)