diff --git a/app/src/main/java/agzam/vyatsu/AppRoot.kt b/app/src/main/java/agzam/vyatsu/AppRoot.kt index 337221b..90b21e2 100644 --- a/app/src/main/java/agzam/vyatsu/AppRoot.kt +++ b/app/src/main/java/agzam/vyatsu/AppRoot.kt @@ -41,5 +41,5 @@ private class SimpleFactory(private val create: () -> T) : ViewMo override fun create(modelClass: Class): T = create() as T } -private fun scheduleFactory(c: AppContainer): ViewModelProvider.Factory = SimpleFactory { ScheduleViewModel(c.scheduleRepository, c.preferencesRepository) } +private fun scheduleFactory(c: AppContainer): ViewModelProvider.Factory = SimpleFactory { ScheduleViewModel(c.scheduleRepository, c.preferencesRepository, c.groupRepository) } private fun groupPickerFactory(c: AppContainer): ViewModelProvider.Factory = SimpleFactory { GroupPickerViewModel(c.groupRepository) } diff --git a/app/src/main/java/agzam/vyatsu/data/repository/GroupRepositoryImpl.kt b/app/src/main/java/agzam/vyatsu/data/repository/GroupRepositoryImpl.kt index e588d78..86884b7 100644 --- a/app/src/main/java/agzam/vyatsu/data/repository/GroupRepositoryImpl.kt +++ b/app/src/main/java/agzam/vyatsu/data/repository/GroupRepositoryImpl.kt @@ -23,6 +23,9 @@ class GroupRepositoryImpl( override suspend fun getGroups(): List = groupDao.observeAll().first().map { it.toDomain() } + override suspend fun getGroup(id: String): Group? = + groupDao.getById(id)?.toDomain() + override suspend fun getFaculties(): List = groupDao.getFaculties() override suspend fun refreshIfStale(): Boolean { diff --git a/app/src/main/java/agzam/vyatsu/domain/repository/GroupRepository.kt b/app/src/main/java/agzam/vyatsu/domain/repository/GroupRepository.kt index 3a19821..fee4418 100644 --- a/app/src/main/java/agzam/vyatsu/domain/repository/GroupRepository.kt +++ b/app/src/main/java/agzam/vyatsu/domain/repository/GroupRepository.kt @@ -6,6 +6,7 @@ import kotlinx.coroutines.flow.Flow interface GroupRepository { fun observeGroups(): Flow> suspend fun getGroups(): List + suspend fun getGroup(id: String): Group? suspend fun getFaculties(): List suspend fun refreshIfStale(): Boolean suspend fun forceRefresh(): Boolean diff --git a/app/src/main/java/agzam/vyatsu/ui/schedule/ScheduleScreen.kt b/app/src/main/java/agzam/vyatsu/ui/schedule/ScheduleScreen.kt index 8454d94..64defc0 100644 --- a/app/src/main/java/agzam/vyatsu/ui/schedule/ScheduleScreen.kt +++ b/app/src/main/java/agzam/vyatsu/ui/schedule/ScheduleScreen.kt @@ -44,7 +44,7 @@ fun ScheduleScreen(viewModel: ScheduleViewModel, onSwitchGroup: () -> Unit) { Column(Modifier.fillMaxSize()) { TopAppBar( - title = { Text("Расписание") }, + title = { Text(state.groupName ?: "Расписание", style = MaterialTheme.typography.titleMedium) }, actions = { TextButton(onClick = { onSwitchGroup() }) { Text("Сменить группу") @@ -53,7 +53,7 @@ fun ScheduleScreen(viewModel: ScheduleViewModel, onSwitchGroup: () -> Unit) { Icon(Icons.Default.Refresh, contentDescription = "Обновить") } }, - windowInsets = WindowInsets.systemBars.only(androidx.compose.foundation.layout.WindowInsetsSides.Top) + windowInsets = WindowInsets(0.dp) ) Column(Modifier.fillMaxSize().padding(horizontal = 16.dp, vertical = 0.dp)) { when { diff --git a/app/src/main/java/agzam/vyatsu/ui/schedule/ScheduleViewModel.kt b/app/src/main/java/agzam/vyatsu/ui/schedule/ScheduleViewModel.kt index 6dd5e75..6fa2143 100644 --- a/app/src/main/java/agzam/vyatsu/ui/schedule/ScheduleViewModel.kt +++ b/app/src/main/java/agzam/vyatsu/ui/schedule/ScheduleViewModel.kt @@ -3,6 +3,7 @@ package agzam.vyatsu.ui.schedule import agzam.vyatsu.domain.ScheduleDates import agzam.vyatsu.domain.model.Day import agzam.vyatsu.domain.model.Schedule +import agzam.vyatsu.domain.repository.GroupRepository import agzam.vyatsu.domain.repository.PreferencesRepository import agzam.vyatsu.domain.repository.ScheduleRepository import androidx.lifecycle.ViewModel @@ -14,7 +15,8 @@ import kotlinx.coroutines.launch class ScheduleViewModel( private val scheduleRepository: ScheduleRepository, - private val preferencesRepository: PreferencesRepository + private val preferencesRepository: PreferencesRepository, + private val groupRepository: GroupRepository ) : ViewModel() { private val _uiState = MutableStateFlow(ScheduleUiState()) @@ -37,7 +39,8 @@ class ScheduleViewModel( currentGroupId = groupId viewModelScope.launch { preferencesRepository.setSelectedGroup(groupId) - _uiState.value = _uiState.value.copy(noGroup = false) + val groupName = groupRepository.getGroup(groupId)?.name + _uiState.value = _uiState.value.copy(noGroup = false, groupName = groupName) launch { scheduleRepository.observeSchedule(groupId).collect { schedule -> @@ -124,6 +127,7 @@ data class ScheduleUiState( val noGroup: Boolean = false, val isRefreshing: Boolean = false, val isSyncing: Boolean = false, + val groupName: String? = null, val schedule: Schedule? = null, val todayIndex: Int = 0, val selectedIndex: Int = 0