feat(stats): add a button to generate sample data in stats page in debug build
This commit is contained in:
@@ -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),
|
||||
{}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user