diff --git a/app/src/main/java/ru/sweetbread/unn/ui/composes/Schedule.kt b/app/src/main/java/ru/sweetbread/unn/ui/composes/Schedule.kt index 2d25b52..2e5632d 100644 --- a/app/src/main/java/ru/sweetbread/unn/ui/composes/Schedule.kt +++ b/app/src/main/java/ru/sweetbread/unn/ui/composes/Schedule.kt @@ -18,10 +18,10 @@ import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.aspectRatio import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.offset import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.LinearProgressIndicator @@ -42,6 +42,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.geometry.Offset import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.RectangleShape import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow @@ -49,8 +50,8 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.compose.ui.zIndex -import com.kizitonwose.calendar.compose.WeekCalendar import com.kizitonwose.calendar.compose.weekcalendar.rememberWeekCalendarState +import com.kizitonwose.calendar.core.WeekDay import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.launch @@ -65,6 +66,7 @@ import ru.sweetbread.unn.ScheduleUnit import ru.sweetbread.unn.getScheduleDay import ru.sweetbread.unn.ui.theme.UNNTheme import splitties.resources.appStr +import splitties.resources.appStrArray import java.time.DayOfWeek import java.time.LocalDate import java.time.LocalDateTime @@ -75,35 +77,75 @@ import java.util.Calendar @Composable fun Schedule() { - val state = rememberWeekCalendarState( - firstDayOfWeek = DayOfWeek.MONDAY // TODO: set start and end weeks to September and July of current year + var selectedDate by remember { mutableStateOf(LocalDate.now()) } + val calendarState = rememberWeekCalendarState( + startDate = LocalDate.now(), + firstVisibleWeekDate = LocalDate.now(), + firstDayOfWeek = DayOfWeek.MONDAY ) Column { - var curDate by remember { mutableStateOf(LocalDate.now()) } - WeekCalendar( - state = state, - dayContent = { - Box( - modifier = Modifier - .padding(vertical = 16.dp) - .aspectRatio(1f) // This is important for square sizing! - .offset(2.dp) - .background(if (it.date == curDate) MaterialTheme.colorScheme.inversePrimary else MaterialTheme.colorScheme.surfaceContainer) - .clickable( - onClick = { curDate = it.date }, - enabled = curDate != it.date - ), - contentAlignment = Alignment.Center, - ) { - Text( - text = it.date.dayOfMonth.toString(), - fontWeight = if (it.date == LocalDate.now()) FontWeight.Bold else null + Row( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 8.dp), + horizontalArrangement = Arrangement.SpaceEvenly + ) { + calendarState.firstVisibleWeek.days + .filter { it.date.dayOfWeek != DayOfWeek.SUNDAY } + .forEach { day -> + DayItem ( + Modifier + .weight(1f) + .aspectRatio(1f) + .padding(2.dp), + day = day, + isSelected = day.date == selectedDate, + onClick = { selectedDate = day.date } ) } - } - ) - ScheduleDay(date = curDate) + } + + ScheduleDay(date = selectedDate) + } +} + +@Composable +private fun DayItem( + modifier: Modifier = Modifier, + day: WeekDay, + isSelected: Boolean, + onClick: () -> Unit +) { + val isToday = day.date == LocalDate.now() + + Box( + modifier = modifier + .background( + color = if (isSelected) MaterialTheme.colorScheme.inversePrimary + else MaterialTheme.colorScheme.surfaceContainer, + shape = if (isToday) CircleShape else RectangleShape + ) + .clickable( + onClick = onClick, + enabled = !isSelected + ), + contentAlignment = Alignment.Center + ) { + Column ( + horizontalAlignment = Alignment.CenterHorizontally + ) { + Text( + text = day.date.dayOfMonth.toString(), + fontWeight = if (isToday) FontWeight.Bold else null, + color = MaterialTheme.colorScheme.onSurface + ) + Text( + text = appStrArray(R.array.short_weekdays)[day.date.dayOfWeek.value-1], + fontWeight = if (isToday) FontWeight.Bold else null, + color = MaterialTheme.colorScheme.onSurface + ) + } } } diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index fa433db..d266189 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -21,4 +21,12 @@ Нет данных Новости Расписание + + Пн + Вт + Ср + Чт + Пт + Сб + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ee2c9e0..90e98ab 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -23,5 +23,13 @@ No Data News Schedule + + Mn + Tu + We + Th + Fr + Sa + \ No newline at end of file