Files
vyatsu-schedule/app/src/main/java/agzam/vyatsu/AppRoot.kt
T

77 lines
3.2 KiB
Kotlin
Raw Normal View History

2026-09-02 23:47:00 +03:00
package agzam.vyatsu
import agzam.vyatsu.di.AppContainer
import agzam.vyatsu.ui.groups.GroupPickerScreen
import agzam.vyatsu.ui.groups.GroupPickerViewModel
import agzam.vyatsu.ui.home.HomeScreen
import agzam.vyatsu.ui.schedule.ScheduleViewModel
2026-09-06 12:38:00 +03:00
import agzam.vyatsu.ui.settings.UpdateViewModel
2026-09-06 17:23:55 +03:00
import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
2026-09-02 23:47:00 +03:00
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.ui.platform.LocalContext
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewmodel.compose.viewModel
@Composable
fun AppRoot() {
val app = LocalContext.current.applicationContext as VyatsuApplication
val container = app.container
val scheduleViewModel: ScheduleViewModel = viewModel(factory = scheduleFactory(container))
2026-09-06 12:38:00 +03:00
val updateViewModel: UpdateViewModel = viewModel(factory = updateFactory(container))
2026-09-02 23:47:00 +03:00
val state by scheduleViewModel.uiState.collectAsState()
2026-09-06 17:23:55 +03:00
val showFirstRunDialog by updateViewModel.showFirstRunDialog.collectAsState()
if (showFirstRunDialog) {
AlertDialog(
onDismissRequest = { updateViewModel.onFirstRunDecision(false) },
title = { Text("Автоматические обновления") },
text = {
Text(
"Разрешить автоматически проверять и устанавливать " +
"новые версии приложения?"
)
},
confirmButton = {
TextButton(onClick = { updateViewModel.onFirstRunDecision(true) }) {
Text("Разрешить")
}
},
dismissButton = {
TextButton(onClick = { updateViewModel.onFirstRunDecision(false) }) {
Text("Не надо")
}
}
)
}
2026-09-02 23:47:00 +03:00
if (state.noGroup) {
2026-09-11 00:18:23 +03:00
val groupPickerViewModel: GroupPickerViewModel = viewModel(factory = groupPickerFactory(container))
2026-09-02 23:47:00 +03:00
GroupPickerScreen(
viewModel = groupPickerViewModel,
onGroupPicked = { group -> scheduleViewModel.selectGroup(group.id) }
)
return
}
HomeScreen(
scheduleViewModel = scheduleViewModel,
2026-09-06 12:38:00 +03:00
updateViewModel = updateViewModel,
2026-09-02 23:47:00 +03:00
onSwitchGroup = { scheduleViewModel.switchGroup() }
)
}
private class SimpleFactory<T : ViewModel>(private val create: () -> T) : ViewModelProvider.Factory {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel> create(modelClass: Class<T>): T = create() as T
}
2026-09-04 02:05:52 +03:00
private fun scheduleFactory(c: AppContainer): ViewModelProvider.Factory = SimpleFactory { ScheduleViewModel(c.scheduleRepository, c.preferencesRepository, c.groupRepository) }
2026-09-02 23:47:00 +03:00
private fun groupPickerFactory(c: AppContainer): ViewModelProvider.Factory = SimpleFactory { GroupPickerViewModel(c.groupRepository) }
2026-09-06 12:38:00 +03:00
private fun updateFactory(c: AppContainer): ViewModelProvider.Factory = SimpleFactory { UpdateViewModel(c.appUpdater, c.preferencesRepository) }