diff --git a/app/src/main/java/org/nsh07/pomodoro/ui/statsScreen/StatsScreen.kt b/app/src/main/java/org/nsh07/pomodoro/ui/statsScreen/StatsScreen.kt index 4a261e4..27051d9 100644 --- a/app/src/main/java/org/nsh07/pomodoro/ui/statsScreen/StatsScreen.kt +++ b/app/src/main/java/org/nsh07/pomodoro/ui/statsScreen/StatsScreen.kt @@ -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, lastMonthAverageFocusTimes: List, lastYearAverageFocusTimes: List, + 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), + {} ) } } diff --git a/app/src/main/java/org/nsh07/pomodoro/ui/statsScreen/viewModel/StatsViewModel.kt b/app/src/main/java/org/nsh07/pomodoro/ui/statsScreen/viewModel/StatsViewModel.kt index 2b907d5..7ed4423 100644 --- a/app/src/main/java/org/nsh07/pomodoro/ui/statsScreen/viewModel/StatsViewModel.kt +++ b/app/src/main/java/org/nsh07/pomodoro/ui/statsScreen/viewModel/StatsViewModel.kt @@ -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 {