2 Commits
Author SHA1 Message Date
Sweetbread eb97371309 wip: group highlight 2026-09-22 17:29:48 +03:00
Sweetbread 44b0edf721 refactor: rewrite code architecture 2026-09-17 16:15:32 +03:00
3 changed files with 29 additions and 10 deletions
@@ -44,6 +44,7 @@ import androidx.compose.ui.zIndex
import androidx.lifecycle.viewmodel.compose.viewModel import androidx.lifecycle.viewmodel.compose.viewModel
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import ru.sweetbread.unn.R import ru.sweetbread.unn.R
import ru.sweetbread.unn.app.UNNApp
import ru.sweetbread.unn.feature.schedule.components.BoundedWeekPicker import ru.sweetbread.unn.feature.schedule.components.BoundedWeekPicker
import ru.sweetbread.unn.feature.schedule.components.GroupsNameText import ru.sweetbread.unn.feature.schedule.components.GroupsNameText
import ru.sweetbread.unn.model.Auditorium import ru.sweetbread.unn.model.Auditorium
@@ -53,7 +54,10 @@ import ru.sweetbread.unn.model.KindOfWork
import ru.sweetbread.unn.model.Lecturer import ru.sweetbread.unn.model.Lecturer
import ru.sweetbread.unn.model.LecturerRank import ru.sweetbread.unn.model.LecturerRank
import ru.sweetbread.unn.model.ScheduleUnit import ru.sweetbread.unn.model.ScheduleUnit
import ru.sweetbread.unn.model.Student
import ru.sweetbread.unn.model.Type
import ru.sweetbread.unn.ui.theme.UNNTheme import ru.sweetbread.unn.ui.theme.UNNTheme
import splitties.init.appCtx
import splitties.resources.appStr import splitties.resources.appStr
import java.time.LocalDate import java.time.LocalDate
import java.time.LocalDateTime import java.time.LocalDateTime
@@ -113,6 +117,9 @@ fun ScheduleDay(modifier: Modifier = Modifier, viewModel: ScheduleViewModel) {
@Composable @Composable
fun ScheduleItem(modifier: Modifier = Modifier, unit: ScheduleUnit, expanded: Boolean = false) { fun ScheduleItem(modifier: Modifier = Modifier, unit: ScheduleUnit, expanded: Boolean = false) {
val me = (appCtx as UNNApp).container.sessionManager.user.collectAsState().value
val currentGroup = if (me?.type == Type.Student) (me as Student).group else null
fun getRatio(): Float { fun getRatio(): Float {
val begin = LocalDateTime.of(unit.date, unit.begin).atZone(ZoneId.of("Europe/Moscow")).toEpochSecond() val begin = LocalDateTime.of(unit.date, unit.begin).atZone(ZoneId.of("Europe/Moscow")).toEpochSecond()
val end = LocalDateTime.of(unit.date, unit.end).atZone(ZoneId.of("Europe/Moscow")).toEpochSecond() val end = LocalDateTime.of(unit.date, unit.end).atZone(ZoneId.of("Europe/Moscow")).toEpochSecond()
@@ -202,7 +209,9 @@ fun ScheduleItem(modifier: Modifier = Modifier, unit: ScheduleUnit, expanded: Bo
AnimatedVisibility (expanded) { AnimatedVisibility (expanded) {
GroupsNameText( GroupsNameText(
unit.stream, unit.stream,
highlightColor = MaterialTheme.colorScheme.inversePrimary highlightColor = MaterialTheme.colorScheme.inversePrimary,
currentGroupName = currentGroup,
currentGroupColor = MaterialTheme.colorScheme.inverseSurface
) )
} }
} }
@@ -20,9 +20,11 @@ import androidx.compose.ui.unit.dp
fun GroupsNameText( fun GroupsNameText(
text: String, text: String,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
highlightColor: Color = MaterialTheme.colorScheme.secondaryContainer, highlightColor: Color = MaterialTheme.colorScheme.tertiaryContainer,
highlightPadding: PaddingValues = PaddingValues(horizontal = 6.dp, vertical = 2.dp), highlightPadding: PaddingValues = PaddingValues(horizontal = 6.dp, vertical = 2.dp),
highlightShape: Shape = MaterialTheme.shapes.small, highlightShape: Shape = MaterialTheme.shapes.small,
currentGroupName: String? = null,
currentGroupColor: Color = MaterialTheme.colorScheme.secondaryContainer,
horizontalArrangement: Arrangement.Horizontal = Arrangement.Start, horizontalArrangement: Arrangement.Horizontal = Arrangement.Start,
) { ) {
val suffix = if (text.endsWith("-В-OUP")) "-В-OUP" else null val suffix = if (text.endsWith("-В-OUP")) "-В-OUP" else null
@@ -47,7 +49,10 @@ fun GroupsNameText(
Box( Box(
modifier = Modifier modifier = Modifier
.padding(end = 2.dp) .padding(end = 2.dp)
.background(highlightColor, highlightShape) .background(
if (currentGroupName == block) currentGroupColor
else highlightColor, highlightShape
)
.padding(highlightPadding) .padding(highlightPadding)
) { ) {
Text(text = block) Text(text = block)
@@ -46,17 +46,17 @@ open class User(
companion object { companion object {
fun fromProfile(json: JSONObject): User { fun fromProfile(json: JSONObject): User {
val user = json.getJSONObject("user") val userField = json.getJSONObject("user")
return User( val user = User(
user.getInt("id"), userField.getInt("id"),
when (json.getString("type")) { when (json.getString("type")) {
"student" -> Type.Student "student" -> Type.Student
else -> Type.Employee else -> Type.Employee
}, },
user.getString("email"), userField.getString("email"),
user.getString("fullname"), userField.getString("fullname"),
user.getString("fullname_en"), userField.getString("fullname_en"),
user.getJSONObject("photo").let { userField.getJSONObject("photo").let {
AvatarSet( AvatarSet(
it.getString("orig"), it.getString("orig"),
it.getString("thumbnail"), it.getString("thumbnail"),
@@ -64,6 +64,11 @@ open class User(
) )
} }
) )
if (user.type == Type.Student)
user = Student()
return user
} }
fun getPlaceholder() = User( fun getPlaceholder() = User(