feat(stats): add a button to generate sample data in stats page in debug build

This commit is contained in:
Nishant Mishra
2025-10-18 14:10:23 +05:30
parent 1ebca0e867
commit b295585655
2 changed files with 48 additions and 2 deletions

View File

@@ -19,6 +19,7 @@ import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.text.TextAutoSize
@@ -26,6 +27,7 @@ import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
import androidx.compose.material3.FilledTonalIconToggleButton
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.IconButtonDefaults
import androidx.compose.material3.LocalTextStyle
import androidx.compose.material3.MaterialTheme
@@ -59,6 +61,7 @@ import com.patrykandpatrick.vico.core.cartesian.data.CartesianValueFormatter
import com.patrykandpatrick.vico.core.cartesian.data.columnSeries
import com.patrykandpatrick.vico.core.cartesian.data.lineSeries
import com.patrykandpatrick.vico.core.common.data.ExtraStore
import org.nsh07.pomodoro.BuildConfig
import org.nsh07.pomodoro.R
import org.nsh07.pomodoro.data.Stat
import org.nsh07.pomodoro.ui.statsScreen.viewModel.StatsViewModel
@@ -93,6 +96,7 @@ fun StatsScreenRoot(
lastWeekAverageFocusTimes = lastWeekAnalysisValues,
lastMonthAverageFocusTimes = lastMonthAnalysisValues,
lastYearAverageFocusTimes = lastYearAnalysisValues,
generateSampleData = viewModel::generateSampleData,
modifier = modifier
)
}
@@ -108,6 +112,7 @@ fun StatsScreen(
lastWeekAverageFocusTimes: List<Int>,
lastMonthAverageFocusTimes: List<Int>,
lastYearAverageFocusTimes: List<Int>,
generateSampleData: () -> Unit,
modifier: Modifier = Modifier
) {
val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior()
@@ -152,6 +157,17 @@ fun StatsScreen(
.padding(vertical = 14.dp)
)
},
actions = if (BuildConfig.DEBUG) {
{
IconButton(
onClick = generateSampleData
) {
Spacer(Modifier.size(24.dp))
}
}
} else {
{}
},
subtitle = {},
titleHorizontalAlignment = Alignment.CenterHorizontally,
scrollBehavior = scrollBehavior,
@@ -458,7 +474,8 @@ fun StatsScreenPreview() {
null,
listOf(0, 0, 0, 0),
listOf(0, 0, 0, 0),
listOf(0, 0, 0, 0)
listOf(0, 0, 0, 0),
{}
)
}
}

View File

@@ -22,14 +22,18 @@ import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.launch
import org.nsh07.pomodoro.BuildConfig
import org.nsh07.pomodoro.TomatoApplication
import org.nsh07.pomodoro.data.Stat
import org.nsh07.pomodoro.data.StatRepository
import java.time.LocalDate
import java.time.format.DateTimeFormatter
import java.time.format.TextStyle
import java.util.Locale
class StatsViewModel(
statRepository: StatRepository
private val statRepository: StatRepository
) : ViewModel() {
val todayStat = statRepository.getTodayStat().distinctUntilChanged()
@@ -151,6 +155,31 @@ class StatsViewModel(
initialValue = listOf(0, 0, 0, 0)
)
fun generateSampleData() {
if (BuildConfig.DEBUG) {
viewModelScope.launch {
val today = LocalDate.now().plusDays(1)
var it = today.minusDays(40)
while (it.isBefore(today)) {
statRepository.insertStat(
Stat(
it,
(0..30 * 60 * 1000L).random(),
(1 * 60 * 60 * 1000L..3 * 60 * 60 * 1000L).random(),
(0..3 * 60 * 60 * 1000L).random(),
(0..1 * 60 * 60 * 1000L).random(),
0
)
)
it = it.plusDays(1)
}
statRepository.addBreakTime((0..30 * 60 * 60 * 1000L).random())
}
}
}
companion object {
val Factory: ViewModelProvider.Factory = viewModelFactory {
initializer {