Определена логика суб скринов, добавлены строки и компоненты

This commit is contained in:
Michael Kits
2023-01-08 23:56:45 +03:00
parent 2527cae931
commit 0500e8fb0a
9 changed files with 507 additions and 97 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_17_PREVIEW" project-jdk-name="Android Studio default JDK" project-jdk-type="JavaSDK"> <component name="ProjectRootManager" version="2" languageLevel="JDK_17" project-jdk-name="Android Studio default JDK" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" /> <output url="file://$PROJECT_DIR$/build/classes" />
</component> </component>
<component name="ProjectType"> <component name="ProjectType">
@@ -23,6 +23,7 @@ import androidx.compose.ui.unit.dp
import androidx.navigation.NavController import androidx.navigation.NavController
import androidx.navigation.NavHostController import androidx.navigation.NavHostController
import ru.megboyzz.dnevnik.navigation.AppNavRoute import ru.megboyzz.dnevnik.navigation.AppNavRoute
import ru.megboyzz.dnevnik.navigation.BaseNavRote
@Composable @Composable
fun Int.AsPainter() = painterResource(this) fun Int.AsPainter() = painterResource(this)
@@ -41,7 +42,7 @@ fun SpacerHeight(height: Dp) = Spacer(Modifier.height(height))
fun Int.AsImageVector() = ImageVector.vectorResource(this) fun Int.AsImageVector() = ImageVector.vectorResource(this)
@Composable @Composable
fun NavController.navigate(to: AppNavRoute){ fun NavController.navigate(to: BaseNavRote){
LaunchedEffect(Unit) { LaunchedEffect(Unit) {
navigate(to.route) { navigate(to.route) {
popUpTo(to.route) { inclusive = true } popUpTo(to.route) { inclusive = true }
@@ -21,8 +21,9 @@ import ru.megboyzz.dnevnik.screens.LoginScreen
import ru.megboyzz.dnevnik.screens.MarksScreen import ru.megboyzz.dnevnik.screens.MarksScreen
import ru.megboyzz.dnevnik.screens.ScheduleScreen import ru.megboyzz.dnevnik.screens.ScheduleScreen
sealed class BaseNavRote(open val route: String)
sealed class AppNavRoute(val route: String){ sealed class AppNavRoute(override val route: String): BaseNavRote(route){
object Splash : AppNavRoute("splash_screen") object Splash : AppNavRoute("splash_screen")
@@ -0,0 +1,81 @@
package ru.megboyzz.dnevnik.navigation
import androidx.compose.animation.ExperimentalAnimationApi
import androidx.compose.foundation.layout.Column
import androidx.compose.material.Text
import androidx.compose.material.rememberScaffoldState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import com.google.accompanist.navigation.animation.rememberAnimatedNavController
import ru.megboyzz.dnevnik.AsString
import ru.megboyzz.dnevnik.R
import ru.megboyzz.dnevnik.screens.*
sealed class MarksNavRoute(override val route: String): BaseNavRote(route){
object LastMarks: MarksNavRoute("last_marks")
object ByDaysMarks: MarksNavRoute("by_days_marks")
object StatsByMarks: MarksNavRoute("stats_by_marks")
object StatsBySubjects: MarksNavRoute("stats_by_subjects")
object ByTermsMarks: MarksNavRoute("by_terms_marks")
object ByYearMarks: MarksNavRoute("by_terms_marks")
}
@OptIn(ExperimentalAnimationApi::class)
@Composable
fun MarksSubScreenNavHost() {
val navController = rememberAnimatedNavController()
val list = listOf(
SubScreenData(
R.string.title_last_marks.AsString(),
MarksNavRoute.LastMarks,
remember { mutableStateOf(true) }
),
SubScreenData(
R.string.title_by_days.AsString(),
MarksNavRoute.ByDaysMarks,
remember { mutableStateOf(false) }
),
SubScreenData(
R.string.title_statistics_by_marks.AsString(),
MarksNavRoute.StatsByMarks,
remember { mutableStateOf(false) }
),
SubScreenData(
R.string.title_statistics_by_subjects.AsString(),
MarksNavRoute.StatsBySubjects,
remember { mutableStateOf(false) }
),
SubScreenData(
R.string.title_by_terms_4.AsString(),
MarksNavRoute.ByTermsMarks,
remember { mutableStateOf(false) }
),
SubScreenData(
R.string.title_one_year.AsString(),
MarksNavRoute.ByYearMarks,
remember { mutableStateOf(false) }
),
)
Column {
SubScreenNavBar(list = list, subScreenNavController = navController)
NavHost(
navController = navController,
startDestination = MarksNavRoute.LastMarks.route
){
composable(MarksNavRoute.LastMarks.route) { Text(MarksNavRoute.LastMarks.route) }
composable(MarksNavRoute.ByDaysMarks.route) { Text(MarksNavRoute.ByDaysMarks.route) }
composable(MarksNavRoute.StatsByMarks.route) { Text(MarksNavRoute.StatsByMarks.route) }
composable(MarksNavRoute.StatsBySubjects.route) { Text(MarksNavRoute.StatsBySubjects.route) }
composable(MarksNavRoute.ByTermsMarks.route) { Text(MarksNavRoute.ByTermsMarks.route) }
composable(MarksNavRoute.ByYearMarks.route) { Text(MarksNavRoute.ByYearMarks.route) }
}
}
}
@@ -1,2 +0,0 @@
package ru.megboyzz.dnevnik.navigation
@@ -1,11 +1,9 @@
package ru.megboyzz.dnevnik.screens package ru.megboyzz.dnevnik.screens
import android.annotation.SuppressLint import android.annotation.SuppressLint
import androidx.compose.animation.animateColorAsState import android.widget.Toast
import androidx.compose.animation.*
import androidx.compose.animation.core.tween import androidx.compose.animation.core.tween
import androidx.compose.animation.expandHorizontally
import androidx.compose.animation.fadeOut
import androidx.compose.animation.slideInHorizontally
import androidx.compose.foundation.* import androidx.compose.foundation.*
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.*
import androidx.compose.foundation.selection.toggleable import androidx.compose.foundation.selection.toggleable
@@ -14,6 +12,7 @@ import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material.* import androidx.compose.material.*
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Check import androidx.compose.material.icons.filled.Check
import androidx.compose.material.icons.filled.Menu
import androidx.compose.material.icons.filled.Visibility import androidx.compose.material.icons.filled.Visibility
import androidx.compose.material.icons.filled.VisibilityOff import androidx.compose.material.icons.filled.VisibilityOff
import androidx.compose.runtime.* import androidx.compose.runtime.*
@@ -35,6 +34,7 @@ import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.modifier.modifierLocalConsumer import androidx.compose.ui.modifier.modifierLocalConsumer
import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.semantics.Role import androidx.compose.ui.semantics.Role
import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.input.KeyboardType
@@ -46,11 +46,15 @@ import androidx.compose.ui.unit.*
import androidx.constraintlayout.compose.Visibility import androidx.constraintlayout.compose.Visibility
import androidx.navigation.NavController import androidx.navigation.NavController
import androidx.navigation.compose.rememberNavController import androidx.navigation.compose.rememberNavController
import com.google.accompanist.navigation.animation.rememberAnimatedNavController
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import ru.megboyzz.dnevnik.* import ru.megboyzz.dnevnik.*
import ru.megboyzz.dnevnik.R import ru.megboyzz.dnevnik.R
import ru.megboyzz.dnevnik.navigation.AppNavRoute import ru.megboyzz.dnevnik.navigation.AppNavRoute
import ru.megboyzz.dnevnik.navigation.BaseNavRote
import ru.megboyzz.dnevnik.navigation.MarksNavRoute
import ru.megboyzz.dnevnik.ui.theme.* import ru.megboyzz.dnevnik.ui.theme.*
import java.util.Calendar
@Composable @Composable
fun MainScaffold( fun MainScaffold(
@@ -80,13 +84,23 @@ fun MainScaffold(
} }
} }
) { ) {
Image(painter = icon, contentDescription = "icon")
Icon(
imageVector = Icons.Filled.Menu,
contentDescription = "menu",
tint = white
)
} }
SpacerWidth(width = 5.dp)
Text( Text(
text = title, text = title,
fontSize = 16.sp, fontSize = 16.sp,
color = white color = white
) )
Spacer(Modifier.weight(1f))
Box(Modifier.padding(15.dp, 15.dp)) {
Image(painter = icon, contentDescription = "icon")
}
} }
}, },
content = content, content = content,
@@ -123,6 +137,9 @@ fun BottomBar(navController: NavController) {
Box( Box(
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.drawColoredShadow(
offsetY = 1.dp
)
.height(90.dp) .height(90.dp)
.background(white) .background(white)
.padding(10.dp, 10.dp, 10.dp, 15.dp), .padding(10.dp, 10.dp, 10.dp, 15.dp),
@@ -180,31 +197,6 @@ fun BottomNavButton(
} }
} }
@Preview
@Composable
fun BottomNavButtonPrev() {
Row(horizontalArrangement = Arrangement.spacedBy(20.dp)) {
BottomNavButton(
icon = R.drawable.ic_marks.AsPainter(),
text = R.string.title_marks.AsString()
) { /* TODO*/ }
BottomNavButton(
icon = R.drawable.ic_homework.AsPainter(),
text = R.string.title_hw.AsString()
) { /* TODO*/ }
BottomNavButton(
icon = R.drawable.ic_schedule.AsPainter(),
text = R.string.title_schedule.AsString()
) { /* TODO*/ }
}
}
@Preview
@Composable
fun BottomBarPrev() {
val navController = rememberNavController()
BottomBar(navController = navController)
}
@SuppressLint("CoroutineCreationDuringComposition") @SuppressLint("CoroutineCreationDuringComposition")
@@ -385,14 +377,6 @@ fun BigLoginBackground() {
} }
} }
@Preview
@Composable
fun ProfilePrev() {
ProfileCard(painter = R.drawable.ic_author.AsPainter())
}
@Composable @Composable
fun MainTextField( fun MainTextField(
value: MutableState<String>, value: MutableState<String>,
@@ -486,59 +470,6 @@ fun DrawerMainButton(
} }
} }
@Preview
@Composable
fun Almst() {
Column() {
AlmostOutlinedText(text = "Идет 3-я четверть")
}
}
@Preview
@Composable
fun ButtonPrev() {
DrawerMainButton(
icon = R.drawable.ic_marks.AsPainter(),
text = "Оценки"
)
}
@Preview
@Composable
fun CheckBoxed() {
val isCheck = remember { mutableStateOf(false) }
val titleColor = mainBlue
Row {
Card(
elevation = 0.dp,
shape = RoundedCornerShape(6.dp),
border = BorderStroke(1.5.dp, color = titleColor)
) {
Box(
modifier = Modifier
.size(20.dp)
.background(if (isCheck.value) titleColor else Color.White)
.clickable {
isCheck.value = !isCheck.value
},
contentAlignment = Alignment.Center
) {
if(isCheck.value)
Icon(Icons.Default.Check, contentDescription = "", tint = Color.White)
}
}
}
}
@Preview
@Composable
fun PrevCB() {
val checkedState = remember { mutableStateOf(true) }
MainCheckbox(checkedState){
}
}
@Composable @Composable
fun MainCheckbox( fun MainCheckbox(
@@ -730,3 +661,302 @@ fun LoginScreenContent(
} }
} }
} }
@Composable
fun SubScreenNavButton(
text: String,
isClicked: MutableState<Boolean>,
onCLick: () -> Unit
) {
val colors = ButtonDefaults.buttonColors(
backgroundColor = if(isClicked.value) mainBlue else white,
contentColor = if(isClicked.value) white else dark
)
Button(
onClick = {
isClicked.value = !isClicked.value
onCLick.invoke()
},
shape = RoundedCornerShape(20.dp),
border = BorderStroke(
width = 1.dp,
color = mainBlue,
),
colors = colors,
) {
Text(
text = text,
style= MainText
)
}
}
data class SubScreenData(
val title: String,
val to: BaseNavRote,
val isClicked: MutableState<Boolean>
)
@Composable
fun SubScreenNavBar(
list: List<SubScreenData>,
subScreenNavController: NavController
) {
val horizontalScroll = rememberScrollState()
Row(
modifier = Modifier
.fillMaxWidth()
.horizontalScroll(horizontalScroll)
.padding(15.dp),
horizontalArrangement = Arrangement.spacedBy(15.dp)
){
for(data in list){
if(data.isClicked.value)
subScreenNavController.navigate(data.to)
SubScreenNavButton(
text = data.title,
isClicked = data.isClicked
) {
for(d in list){
if(data != d)
d.isClicked.value = false
}
}
}
}
}
@Composable
fun LastMarkCard(
subjectName: String,
mark: Int,
date: String, /* мейби стоит поменять на Date или инстанс */
teacher: String,
reason: String = "null"
) {
Card(
backgroundColor = white,
shape = RoundedCornerShape(10.dp),
border = BorderStroke(
width = 1.dp,
color = mainBlue
),
modifier = Modifier.fillMaxWidth()
) {
Row(
horizontalArrangement = Arrangement.SpaceBetween,
modifier = Modifier.padding(15.dp)
) {
Column(
horizontalAlignment = Alignment.Start,
verticalArrangement = Arrangement.SpaceBetween,
modifier = Modifier.width(200.dp)
) {
Text(
text = subjectName,
style = MainText
)
Text(
text = mark.toString(),
style = H1,
color = mainBlue
)
}
Column(verticalArrangement = Arrangement.spacedBy(2.dp)) {
Text(
text = "${R.string.title_mark_recive.AsString()} $date",
style = MainText,
color = dark
)
Text(
text = "${R.string.title_teacher_name.AsString()}: $teacher",
style = MainText,
color = dark
)
if(reason != "null")
Text(
text = "${R.string.title_reason.AsString()} $reason",
style = MainText,
color = dark
)
}
}
}
}
@Preview
@Composable
fun LastMarkPrev() {
Column(verticalArrangement = Arrangement.spacedBy(20.dp)) {
LastMarkCard(
subjectName = "Русский язык",
mark = 3,
date = "03.02.2023",
teacher = "Джаналиева Д. Ф.",
reason = "диктнант"
)
LastMarkCard(
subjectName = "Алгебра и начала математического анализа",
mark = 5,
date = "03.08.2023",
teacher = "Штрошер С. Н.")
}
}
data class CalendarData(
val title: String,
)
@Composable
fun CardCalendar(
onClick: (day: Int) -> Unit
) {
//Calendar(Calendar.FEBRUARY)
val listOfDays = listOf(
R.string.title_mon.AsString(),
R.string.title_tue.AsString(),
R.string.title_wed.AsString(),
R.string.title_thu.AsString(),
R.string.title_fri.AsString(),
R.string.title_sat.AsString(),
)
Card(
backgroundColor = white,
modifier = Modifier.fillMaxWidth(),
shape = RoundedCornerShape(10.dp)
){
Box(
modifier = Modifier
.fillMaxWidth()
.padding(15.dp)
){
Column(
//horizontalAlignment = Alignment.CenterHorizontally,
modifier = Modifier.fillMaxWidth()
) {
Row(
horizontalArrangement = Arrangement.SpaceBetween,
modifier = Modifier
.fillMaxWidth()
.padding(10.dp, 0.dp, 10.dp, 5.dp)
){
for(day in listOfDays){
Text(
text = day,
style = MainText,
color = dark
)
}
}
Divider(
thickness = 1.dp,
color = dark,
modifier = Modifier.padding(0.dp, 0.dp, 0.dp, 10.dp)
)
val days = 28
val weeks = days / 6
var dayIn = 2
val startDay = 1
Row(
horizontalArrangement = Arrangement.SpaceBetween,
modifier = Modifier
.fillMaxWidth()
.padding(10.dp, 10.dp, 10.dp, 5.dp)
) {
for (i in 1..6) {
//if(i != 7)
Column(
verticalArrangement = Arrangement.spacedBy(10.dp)
) {
for(j in i..days step 7){
var text = j.toString()
if(j < startDay)
text = ""
val isClicked = remember {
mutableStateOf(false)
}
NumberOnCalendar(
isClicked = isClicked,
number = j
) { onClick.invoke(j) }
}
}
}
}
/*for(day in 1..weeks){
Row(
horizontalArrangement = Arrangement.SpaceBetween,
modifier = Modifier
.fillMaxWidth()
.padding(10.dp, 10.dp, 10.dp, 5.dp)
){
for(i in dayIn..dayIn + 5){
Text(
text = i.toString(),
color = dark,
style = MainText,
modifier = Modifier.clickable{
onClick.invoke(i)
}
)
}
dayIn += 6
}
}*/
}
}
}
}
// TODO СДЕЛАТЬ КЛИКАБЕЛЬНОЕ ЧИСЛО НА КАЛЕНДАРЕ
@Composable
fun NumberOnCalendar(
isClicked: MutableState<Boolean>,
number: Int,
onClick: () -> Unit
) {
val isClickedModifier = if(isClicked.value)
Modifier
.border(
width = 1.dp,
color = mainBlue,
shape = RoundedCornerShape(20.dp)
)
.background(
color = lightGray,
shape = RoundedCornerShape(20.dp)
)
.padding(2.dp)
else Modifier
Box(
modifier = Modifier
.size(30.dp)
.then(isClickedModifier),
contentAlignment = Alignment.Center
){
Text(
text = number.toString(),
style = H2,
color = dark,
modifier = Modifier.clickable{
isClicked.value = !isClicked.value
onClick.invoke()
}
)
}
}
@Preview
@Composable
fun CalendarPrev() {
val current = LocalContext.current
CardCalendar(){
Toast.makeText(current, "Число $it", Toast.LENGTH_SHORT).show()
}
}
@@ -6,6 +6,7 @@ import androidx.navigation.NavController
import ru.megboyzz.dnevnik.AsPainter import ru.megboyzz.dnevnik.AsPainter
import ru.megboyzz.dnevnik.AsString import ru.megboyzz.dnevnik.AsString
import ru.megboyzz.dnevnik.R import ru.megboyzz.dnevnik.R
import ru.megboyzz.dnevnik.navigation.MarksSubScreenNavHost
@Composable @Composable
fun MarksScreen( fun MarksScreen(
@@ -18,7 +19,7 @@ fun MarksScreen(
navController = navController, navController = navController,
scaffoldState = scaffoldState scaffoldState = scaffoldState
) { ) {
MarksSubScreenNavHost()
} }
} }
@@ -14,4 +14,53 @@
<string name="title_remember_me">Remember me</string> <string name="title_remember_me">Remember me</string>
<string name="title_sign_in">Sign in</string> <string name="title_sign_in">Sign in</string>
<string name="title_sign_up">Sign up</string> <string name="title_sign_up">Sign up</string>
<string name="title_mark_recive">"Recived: "</string>
<string name="title_teacher_name">Teacher</string>
<string name="title_last_marks">Last marks</string>
<string name="title_by_days">By days</string>
<string name="title_statistics_by_marks">Statistics by marks</string>
<string name="title_statistics_by_subjects">Statistics by subjects</string>
<string name="title_by_terms_4">By terms</string>
<string name="title_by_trems_2">By terms</string>
<string name="title_term_4">Term</string>
<string name="title_trem_2">Term</string>
<string name="title_common_stats">Common</string>
<string name="title_stats_by_subject">Subjects</string>
<string name="title_one_year">Year</string>
<string name="title_academic_year">Аcademic year</string>
<string name="title_stats_by_mark_5">Summary of ratings 5</string>
<string name="title_stats_by_mark_4">Summary of ratings 4</string>
<string name="title_stats_by_mark_3">Summary of ratings 3</string>
<string name="title_stats_by_mark_2">Summary of ratings 2</string>
<string name="title_stats_by_mark_1">Summary of ratings 1</string>
<string name="title_mon">MON</string>
<string name="title_tue">TUE</string>
<string name="title_wed">WED</string>
<string name="title_thu">THU</string>
<string name="title_fri">FRI</string>
<string name="title_sat">SAT</string>
<string name="title_january">January</string>
<string name="title_february">February</string>
<string name="title_march">March</string>
<string name="title_april">April</string>
<string name="title_may">May</string>
<string name="title_june">June</string>
<string name="title_july">July</string>
<string name="title_august">August</string>
<string name="title_september">September</string>
<string name="title_october">October</string>
<string name="title_november">November</string>
<string name="title_december">December</string>
<string name="title_no_marks">There are no ratings</string>
<string name="title_day_no_marks">There are no ratings for this day.</string>
<string name="title_lessons_schedule">Schedule of lessons</string>
<string name="title_calls_schedule">Schedule of calls</string>
<string name="title_no_lessons">No lessons</string>
<string name="title_no_calls_schedule">No calls schedule</string>
<string name="title_now_lesson">Now there is a lesson</string>
<string name="title_lesson_teacher">Teacher</string>
<string name="title_classroom">Classroom</string>
<string name="title_next_lesson">The next lesson</string>
<string name="title_lesson">Lesson</string>
<string name="title_reason">"Reason: "</string>
</resources> </resources>
+49
View File
@@ -13,4 +13,53 @@
<string name="title_remember_me">Запомнить меня</string> <string name="title_remember_me">Запомнить меня</string>
<string name="title_sign_in">Войти</string> <string name="title_sign_in">Войти</string>
<string name="title_sign_up">Нет аккаунта? Расскажем как его зарегистрировать и подключить к школе</string> <string name="title_sign_up">Нет аккаунта? Расскажем как его зарегистрировать и подключить к школе</string>
<string name="title_mark_recive">Получена:</string>
<string name="title_teacher_name">Преподаватель</string>
<string name="title_last_marks">Последние</string>
<string name="title_by_days">По дням</string>
<string name="title_statistics_by_marks">Статистика по оценкам</string>
<string name="title_statistics_by_subjects">Статистика по предметам</string>
<string name="title_by_terms_4">По четвертям</string>
<string name="title_by_trems_2">По семестрам</string>
<string name="title_term_4">Четверть</string>
<string name="title_trem_2">Семестр</string>
<string name="title_common_stats">Общая сводка</string>
<string name="title_stats_by_subject">Сводка по предметам</string>
<string name="title_one_year">За год</string>
<string name="title_academic_year">учебный год</string>
<string name="title_stats_by_mark_5">Сводка по оценкам отлично</string>
<string name="title_stats_by_mark_4">Сводка по оценкам хорошо</string>
<string name="title_stats_by_mark_3">Сводка по оценкам уд.</string>
<string name="title_stats_by_mark_2">Сводка по оценкам неуд.</string>
<string name="title_stats_by_mark_1">Сводка по оценкам кол</string>
<string name="title_mon">ПН</string>
<string name="title_tue">ВТ</string>
<string name="title_wed">СР</string>
<string name="title_thu">ЧТ</string>
<string name="title_fri">ПТ</string>
<string name="title_sat">СБ</string>
<string name="title_january">Январь</string>
<string name="title_february">Февраль</string>
<string name="title_march">Март</string>
<string name="title_april">Апрель</string>
<string name="title_may">Май</string>
<string name="title_june">Июнь</string>
<string name="title_july">Июль</string>
<string name="title_august">Август</string>
<string name="title_september">Сентябрь</string>
<string name="title_october">Октябрь</string>
<string name="title_november">Ноябрь</string>
<string name="title_december">Декабрь</string>
<string name="title_no_marks">Таких оценок нет</string>
<string name="title_day_no_marks">В этот день нет ни одной оценки</string>
<string name="title_lessons_schedule">Расписание уроков</string>
<string name="title_calls_schedule">Распиание звонков</string>
<string name="title_no_lessons">Сейчас нет уроков можно отдыхать!</string>
<string name="title_no_calls_schedule">Пока не выложили расписание звонков</string>
<string name="title_now_lesson">Сейчас идет урок</string>
<string name="title_lesson_teacher">Урок ведет</string>
<string name="title_classroom">В кабинете</string>
<string name="title_next_lesson">Следующий урок</string>
<string name="title_lesson">Урок</string>
<string name="title_reason">Причина:</string>
</resources> </resources>