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.fillMaxWidth
|
||||||
import androidx.compose.foundation.layout.height
|
import androidx.compose.foundation.layout.height
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
|
import androidx.compose.foundation.layout.size
|
||||||
import androidx.compose.foundation.layout.width
|
import androidx.compose.foundation.layout.width
|
||||||
import androidx.compose.foundation.lazy.LazyColumn
|
import androidx.compose.foundation.lazy.LazyColumn
|
||||||
import androidx.compose.foundation.text.TextAutoSize
|
import androidx.compose.foundation.text.TextAutoSize
|
||||||
@@ -26,6 +27,7 @@ import androidx.compose.material3.ExperimentalMaterial3Api
|
|||||||
import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
|
import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
|
||||||
import androidx.compose.material3.FilledTonalIconToggleButton
|
import androidx.compose.material3.FilledTonalIconToggleButton
|
||||||
import androidx.compose.material3.Icon
|
import androidx.compose.material3.Icon
|
||||||
|
import androidx.compose.material3.IconButton
|
||||||
import androidx.compose.material3.IconButtonDefaults
|
import androidx.compose.material3.IconButtonDefaults
|
||||||
import androidx.compose.material3.LocalTextStyle
|
import androidx.compose.material3.LocalTextStyle
|
||||||
import androidx.compose.material3.MaterialTheme
|
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.columnSeries
|
||||||
import com.patrykandpatrick.vico.core.cartesian.data.lineSeries
|
import com.patrykandpatrick.vico.core.cartesian.data.lineSeries
|
||||||
import com.patrykandpatrick.vico.core.common.data.ExtraStore
|
import com.patrykandpatrick.vico.core.common.data.ExtraStore
|
||||||
|
import org.nsh07.pomodoro.BuildConfig
|
||||||
import org.nsh07.pomodoro.R
|
import org.nsh07.pomodoro.R
|
||||||
import org.nsh07.pomodoro.data.Stat
|
import org.nsh07.pomodoro.data.Stat
|
||||||
import org.nsh07.pomodoro.ui.statsScreen.viewModel.StatsViewModel
|
import org.nsh07.pomodoro.ui.statsScreen.viewModel.StatsViewModel
|
||||||
@@ -93,6 +96,7 @@ fun StatsScreenRoot(
|
|||||||
lastWeekAverageFocusTimes = lastWeekAnalysisValues,
|
lastWeekAverageFocusTimes = lastWeekAnalysisValues,
|
||||||
lastMonthAverageFocusTimes = lastMonthAnalysisValues,
|
lastMonthAverageFocusTimes = lastMonthAnalysisValues,
|
||||||
lastYearAverageFocusTimes = lastYearAnalysisValues,
|
lastYearAverageFocusTimes = lastYearAnalysisValues,
|
||||||
|
generateSampleData = viewModel::generateSampleData,
|
||||||
modifier = modifier
|
modifier = modifier
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -108,6 +112,7 @@ fun StatsScreen(
|
|||||||
lastWeekAverageFocusTimes: List<Int>,
|
lastWeekAverageFocusTimes: List<Int>,
|
||||||
lastMonthAverageFocusTimes: List<Int>,
|
lastMonthAverageFocusTimes: List<Int>,
|
||||||
lastYearAverageFocusTimes: List<Int>,
|
lastYearAverageFocusTimes: List<Int>,
|
||||||
|
generateSampleData: () -> Unit,
|
||||||
modifier: Modifier = Modifier
|
modifier: Modifier = Modifier
|
||||||
) {
|
) {
|
||||||
val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior()
|
val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior()
|
||||||
@@ -152,6 +157,17 @@ fun StatsScreen(
|
|||||||
.padding(vertical = 14.dp)
|
.padding(vertical = 14.dp)
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
actions = if (BuildConfig.DEBUG) {
|
||||||
|
{
|
||||||
|
IconButton(
|
||||||
|
onClick = generateSampleData
|
||||||
|
) {
|
||||||
|
Spacer(Modifier.size(24.dp))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
{}
|
||||||
|
},
|
||||||
subtitle = {},
|
subtitle = {},
|
||||||
titleHorizontalAlignment = Alignment.CenterHorizontally,
|
titleHorizontalAlignment = Alignment.CenterHorizontally,
|
||||||
scrollBehavior = scrollBehavior,
|
scrollBehavior = scrollBehavior,
|
||||||
@@ -458,7 +474,8 @@ fun StatsScreenPreview() {
|
|||||||
null,
|
null,
|
||||||
listOf(0, 0, 0, 0),
|
listOf(0, 0, 0, 0),
|
||||||
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.distinctUntilChanged
|
||||||
import kotlinx.coroutines.flow.map
|
import kotlinx.coroutines.flow.map
|
||||||
import kotlinx.coroutines.flow.stateIn
|
import kotlinx.coroutines.flow.stateIn
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import org.nsh07.pomodoro.BuildConfig
|
||||||
import org.nsh07.pomodoro.TomatoApplication
|
import org.nsh07.pomodoro.TomatoApplication
|
||||||
|
import org.nsh07.pomodoro.data.Stat
|
||||||
import org.nsh07.pomodoro.data.StatRepository
|
import org.nsh07.pomodoro.data.StatRepository
|
||||||
|
import java.time.LocalDate
|
||||||
import java.time.format.DateTimeFormatter
|
import java.time.format.DateTimeFormatter
|
||||||
import java.time.format.TextStyle
|
import java.time.format.TextStyle
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
|
|
||||||
class StatsViewModel(
|
class StatsViewModel(
|
||||||
statRepository: StatRepository
|
private val statRepository: StatRepository
|
||||||
) : ViewModel() {
|
) : ViewModel() {
|
||||||
|
|
||||||
val todayStat = statRepository.getTodayStat().distinctUntilChanged()
|
val todayStat = statRepository.getTodayStat().distinctUntilChanged()
|
||||||
@@ -151,6 +155,31 @@ class StatsViewModel(
|
|||||||
initialValue = listOf(0, 0, 0, 0)
|
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 {
|
companion object {
|
||||||
val Factory: ViewModelProvider.Factory = viewModelFactory {
|
val Factory: ViewModelProvider.Factory = viewModelFactory {
|
||||||
initializer {
|
initializer {
|
||||||
|
|||||||
Reference in New Issue
Block a user