refactor: Scope statsviewmodel to activity instead of composable to improve performance
This commit is contained in:
@@ -8,19 +8,21 @@ import androidx.activity.viewModels
|
||||
import org.nsh07.pomodoro.ui.AppScreen
|
||||
import org.nsh07.pomodoro.ui.NavItem
|
||||
import org.nsh07.pomodoro.ui.Screen
|
||||
import org.nsh07.pomodoro.ui.statsScreen.viewModel.StatsViewModel
|
||||
import org.nsh07.pomodoro.ui.theme.TomatoTheme
|
||||
import org.nsh07.pomodoro.ui.timerScreen.viewModel.TimerViewModel
|
||||
|
||||
class MainActivity : ComponentActivity() {
|
||||
|
||||
private val viewModel: TimerViewModel by viewModels(factoryProducer = { TimerViewModel.Factory })
|
||||
private val timerViewModel: TimerViewModel by viewModels(factoryProducer = { TimerViewModel.Factory })
|
||||
private val statsViewModel: StatsViewModel by viewModels(factoryProducer = { StatsViewModel.Factory })
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
enableEdgeToEdge()
|
||||
setContent {
|
||||
TomatoTheme {
|
||||
AppScreen(viewModel = viewModel)
|
||||
AppScreen(timerViewModel = timerViewModel, statsViewModel = statsViewModel)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,6 +46,7 @@ import androidx.window.core.layout.WindowSizeClass
|
||||
import org.nsh07.pomodoro.MainActivity.Companion.screens
|
||||
import org.nsh07.pomodoro.ui.settingsScreen.SettingsScreenRoot
|
||||
import org.nsh07.pomodoro.ui.statsScreen.StatsScreenRoot
|
||||
import org.nsh07.pomodoro.ui.statsScreen.viewModel.StatsViewModel
|
||||
import org.nsh07.pomodoro.ui.timerScreen.TimerScreen
|
||||
import org.nsh07.pomodoro.ui.timerScreen.viewModel.TimerViewModel
|
||||
|
||||
@@ -53,10 +54,11 @@ import org.nsh07.pomodoro.ui.timerScreen.viewModel.TimerViewModel
|
||||
@Composable
|
||||
fun AppScreen(
|
||||
modifier: Modifier = Modifier,
|
||||
viewModel: TimerViewModel = viewModel(factory = TimerViewModel.Factory)
|
||||
timerViewModel: TimerViewModel = viewModel(factory = TimerViewModel.Factory),
|
||||
statsViewModel: StatsViewModel = viewModel(factory = StatsViewModel.Factory)
|
||||
) {
|
||||
val uiState by viewModel.timerState.collectAsStateWithLifecycle()
|
||||
val remainingTime by viewModel.time.collectAsStateWithLifecycle()
|
||||
val uiState by timerViewModel.timerState.collectAsStateWithLifecycle()
|
||||
val remainingTime by timerViewModel.time.collectAsStateWithLifecycle()
|
||||
|
||||
val progress by rememberUpdatedState((uiState.totalTime.toFloat() - remainingTime) / uiState.totalTime)
|
||||
|
||||
@@ -137,7 +139,7 @@ fun AppScreen(
|
||||
TimerScreen(
|
||||
timerState = uiState,
|
||||
progress = { progress },
|
||||
onAction = viewModel::onAction,
|
||||
onAction = timerViewModel::onAction,
|
||||
modifier = modifier.padding(
|
||||
start = contentPadding.calculateStartPadding(layoutDirection),
|
||||
end = contentPadding.calculateEndPadding(layoutDirection),
|
||||
@@ -158,6 +160,7 @@ fun AppScreen(
|
||||
|
||||
entry<Screen.Stats> {
|
||||
StatsScreenRoot(
|
||||
viewModel = statsViewModel,
|
||||
modifier = modifier.padding(
|
||||
start = contentPadding.calculateStartPadding(layoutDirection),
|
||||
end = contentPadding.calculateEndPadding(layoutDirection),
|
||||
|
||||
@@ -68,10 +68,10 @@ fun StatsScreenRoot(
|
||||
) {
|
||||
val todayStat by viewModel.todayStat.collectAsState(null)
|
||||
StatsScreen(
|
||||
lastWeekSummaryChartData = viewModel.lastWeekSummaryChartData,
|
||||
lastWeekSummaryAnalysisModelProducer = viewModel.lastWeekSummaryAnalysisModelProducer,
|
||||
lastMonthSummaryChartData = viewModel.lastMonthSummaryChartData,
|
||||
lastMonthSummaryAnalysisModelProducer = viewModel.lastMonthSummaryAnalysisModelProducer,
|
||||
lastWeekSummaryChartData = remember { viewModel.lastWeekSummaryChartData },
|
||||
lastWeekSummaryAnalysisModelProducer = remember { viewModel.lastWeekSummaryAnalysisModelProducer },
|
||||
lastMonthSummaryChartData = remember { viewModel.lastMonthSummaryChartData },
|
||||
lastMonthSummaryAnalysisModelProducer = remember { viewModel.lastMonthSummaryAnalysisModelProducer },
|
||||
todayStat = todayStat,
|
||||
modifier = modifier
|
||||
)
|
||||
|
||||
@@ -111,7 +111,6 @@ internal fun TimeColumnChart(
|
||||
minZoom = Zoom.min(Zoom.Content, Zoom.fixed())
|
||||
),
|
||||
animationSpec = animationSpec,
|
||||
animateIn = false,
|
||||
modifier = modifier,
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user