Определена логика суб скринов, добавлены строки и компоненты
This commit is contained in:
Generated
+1
-1
@@ -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>
|
||||||
@@ -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>
|
||||||
Reference in New Issue
Block a user