Finish NotenActivity and FachActivity

This commit is contained in:
BuildTools
2024-04-18 16:42:16 +02:00
parent 888d737965
commit 90098cc83c
3 changed files with 197 additions and 34 deletions

View File

@@ -61,12 +61,12 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
var SAWeight = 0 private var SAWeight = 0
var name = "Test" private var name = "Test"
var typesSelection = listOf("Test", "Ex", "Referat", "Mündlich", "Sonstiges") private var typesSelection = listOf("Test", "Ex", "Referat", "Mündlich", "Sonstiges")
val gradesSelection = listOf(1, 2, 3, 4, 5, 6) private val gradesSelection = listOf(1, 2, 3, 4, 5, 6)
val weightsSelection = listOf(0.5f, 1f, 1.5f, 2f) private val weightsSelection = listOf(0.5f, 1f, 1.5f, 2f)
class FachActivity : ComponentActivity() { class FachActivity : ComponentActivity() {
companion object { companion object {
@@ -139,9 +139,7 @@ fun GradeContent(activity: ComponentActivity, loadedGrades: List<GradeData>){
DisposableEffect(activity) { DisposableEffect(activity) {
onDispose { onDispose {
CoroutineScope(Dispatchers.IO).launch { saveGradesStart(activity, grades)
saveGrades(activity, grades, name)
}
} }
} }
@@ -156,9 +154,8 @@ fun GradeContent(activity: ComponentActivity, loadedGrades: List<GradeData>){
)}, )},
navigationIcon = { navigationIcon = {
IconButton(onClick = { IconButton(onClick = {
CoroutineScope(Dispatchers.IO).launch { typesSelection = listOf("Test", "Ex", "Referat", "Mündlich", "Sonstiges")
saveGrades(activity, grades, name) saveGradesStart(activity, grades)
}
activity.finish() activity.finish()
}) { }) {
Icon( Icon(
@@ -197,7 +194,7 @@ fun GradeContent(activity: ComponentActivity, loadedGrades: List<GradeData>){
style = MaterialTheme.typography.headlineSmall) style = MaterialTheme.typography.headlineSmall)
Spacer(modifier = Modifier.weight(1f)) Spacer(modifier = Modifier.weight(1f))
Text( Text(
text = "Ø" + if(average.isNaN()) "0.0" else formatFloat(average), text = "Ø" + formatFloat(average),
style = MaterialTheme.typography.headlineSmall) style = MaterialTheme.typography.headlineSmall)
Spacer(modifier = Modifier.width(16.dp)) Spacer(modifier = Modifier.width(16.dp))
} }
@@ -226,20 +223,25 @@ fun GradeContent(activity: ComponentActivity, loadedGrades: List<GradeData>){
grades.forEach{ gradeData -> grades.forEach{ gradeData ->
GradePrefab( GradePrefab(
id = gradeData.id, id = gradeData.id,
onClose = { grades = grades.filter { it.id != gradeData.id } }, onClose = {
grades = grades.filter { it.id != gradeData.id }
saveGradesStart(activity, grades) },
type = gradeData.type, type = gradeData.type,
grade = gradeData.grade, grade = gradeData.grade,
weight = gradeData.weight, weight = gradeData.weight,
color = gradeData.color, color = gradeData.color,
onGradeChange = { grade -> onGradeChange = { grade ->
grades.find { it.id == gradeData.id }?.grade = grade grades.find { it.id == gradeData.id }?.grade = grade
average = calculateAverage(grades, editor) }, average = calculateAverage(grades, editor)
saveGradesStart(activity, grades) },
onWeightChange = { weight -> onWeightChange = { weight ->
grades.find { it.id == gradeData.id }?.weight = weight grades.find { it.id == gradeData.id }?.weight = weight
average = calculateAverage(grades, editor) }, average = calculateAverage(grades, editor)
saveGradesStart(activity, grades) },
onTypeChange = { type -> onTypeChange = { type ->
grades.find { it.id == gradeData.id }?.type = type grades.find { it.id == gradeData.id }?.type = type
average = calculateAverage(grades, editor) } average = calculateAverage(grades, editor)
saveGradesStart(activity, grades) }
) )
} }
Spacer(modifier = Modifier.height(216.dp)) Spacer(modifier = Modifier.height(216.dp))
@@ -258,6 +260,7 @@ fun GradeContent(activity: ComponentActivity, loadedGrades: List<GradeData>){
style = MaterialTheme.typography.labelMedium, style = MaterialTheme.typography.labelMedium,
modifier = Modifier.clickable { modifier = Modifier.clickable {
grades = emptyList() grades = emptyList()
saveGradesStart(activity, grades)
editor.putFloat(name, 0.0f).apply() editor.putFloat(name, 0.0f).apply()
showDeleteConfirmation = false showDeleteConfirmation = false
} }
@@ -555,3 +558,9 @@ fun calculateAverage(grades: List<GradeData>, editor: Editor): Float {
return finalGrade return finalGrade
} }
fun saveGradesStart(context: Context, grades: List<GradeData>){
CoroutineScope(Dispatchers.IO).launch {
saveGrades(context, grades, name)
}
}

View File

@@ -3,9 +3,11 @@ package com.schoolapp.cleverclass
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.SharedPreferences import android.content.SharedPreferences
import android.content.SharedPreferences.Editor
import android.os.Bundle import android.os.Bundle
import androidx.activity.ComponentActivity import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent import androidx.activity.compose.setContent
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer
@@ -20,9 +22,12 @@ import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ArrowBack import androidx.compose.material.icons.filled.ArrowBack
import androidx.compose.material.icons.outlined.Delete
import androidx.compose.material3.AlertDialog
import androidx.compose.material3.BottomAppBar import androidx.compose.material3.BottomAppBar
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Divider
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
@@ -44,17 +49,46 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.schoolapp.cleverclass.ui.theme.CleverClassTheme import com.schoolapp.cleverclass.ui.theme.CleverClassTheme
import com.schoolapp.cleverclass.ui.theme.TextOnColouredButton import com.schoolapp.cleverclass.ui.theme.TextOnColouredButton
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
val subjects = listOf("Biologie","Chemie","Deutsch","Englisch","Ethik","Evangelisch","Französisch", private val subjects = listOf(
"Geographie","Geschichte","Informatik","Katolisch","Kunst","Latein","Mathe","Musik","Physik", "Mathe", "Deutsch", "Englisch", "Französisch", "Latein",
"Pulitik und Gesellschaft","Sport","Wirtschaft") "Physik", "Chemie", "Biologie", "Informatik",
"Geographie", "Wirtschaft", "Geschichte", "Politik und Gesellschaft",
"Ethik", "Evangelisch", "Katholisch",
"Kunst", "Musik", "Sport"
)
val colors = listOf( private val saWeights = listOf(
Color(0xFF69F0AE), 2, 2, 2, 2, 2,
Color(0xFFEEFF41), 1, 1, 0, 0,
Color(0xFFFFAB40), 0, 0, 0, 0,
0, 0, 0,
0, 0, 0
)
private val colorsA = listOf(
Color(0xFF536DFE),
Color(0xFF18FFFF), Color(0xFF18FFFF),
Color(0xFFB2FF59)) Color(0xFF448AFF),
Color(0xFF64FFDA),
Color(0xFF40C4FF)
)
private val colorsB = listOf(
Color(0xFFFFFF00),
Color(0xFFFFAB40),
Color(0xFFFFD740),
Color(0xFFEEFF41)
)
private val colorsC = listOf(
Color(0xFFFF5252),
Color(0xFFFF4081),
Color(0xFFFF6052),
Color(0xFFFF6E40)
)
class NotenActivity : ComponentActivity() { class NotenActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
@@ -77,10 +111,14 @@ class NotenActivity : ComponentActivity() {
@Composable @Composable
fun NotenContent(activity: ComponentActivity){ fun NotenContent(activity: ComponentActivity){
val sharedPreferences = activity.getSharedPreferences("gradeAverages", Context.MODE_PRIVATE) val sharedPreferences = activity.getSharedPreferences("gradeAverages", Context.MODE_PRIVATE)
val editor = sharedPreferences.edit()
var allAverage by remember { var allAverage by remember {
mutableStateOf(calculateAllAverage(loadAllAverages(sharedPreferences))) mutableStateOf(calculateAllAverage(loadAllAverages(sharedPreferences)))
} }
var showDeleteConfirmation by remember {
mutableStateOf(false)
}
Scaffold( Scaffold(
topBar = { topBar = {
@@ -101,6 +139,16 @@ fun NotenContent(activity: ComponentActivity){
) )
} }
}, },
actions = {
IconButton(onClick = { showDeleteConfirmation = true }) {
Icon(
imageVector = Icons.Outlined.Delete,
contentDescription = null,
modifier = Modifier.size(28.dp),
tint = MaterialTheme.colorScheme.onPrimaryContainer
)
}
},
modifier = Modifier.fillMaxWidth() modifier = Modifier.fillMaxWidth()
) )
}, },
@@ -126,31 +174,114 @@ fun NotenContent(activity: ComponentActivity){
} }
} }
) {innerPadding -> ) {innerPadding ->
Column(modifier = Modifier Column(
.verticalScroll(rememberScrollState()) horizontalAlignment = Alignment.CenterHorizontally,
.padding(innerPadding)) modifier = Modifier
.verticalScroll(rememberScrollState())
.padding(innerPadding)
)
{ {
subjects.forEach { name -> GroopTitle("Hauptfächer", true)
for (i in 0..4){
FachButton( FachButton(
color = colors.random(), color = colorsA[i],
subject = name, subject = subjects[i],
saWeight = 2, saWeight = saWeights[i],
activity = activity, activity = activity,
sharedPreferences = sharedPreferences, sharedPreferences = sharedPreferences,
onAvgChange = { allAverage = calculateAllAverage(loadAllAverages(sharedPreferences)) } onAvgChange = { allAverage = calculateAllAverage(loadAllAverages(sharedPreferences)) }
) )
} }
GroopTitle("Naturwissenschaften", false)
for (i in 5..8){
FachButton(
color = colorsB[i - 5],
subject = subjects[i],
saWeight = saWeights[i],
activity = activity,
sharedPreferences = sharedPreferences,
onAvgChange = { allAverage = calculateAllAverage(loadAllAverages(sharedPreferences)) }
)
}
GroopTitle("Gesellschaftswissenschaften", false)
for (i in 9..12){
FachButton(
color = colorsC[i - 9],
subject = subjects[i],
saWeight = saWeights[i],
activity = activity,
sharedPreferences = sharedPreferences,
onAvgChange = { allAverage = calculateAllAverage(loadAllAverages(sharedPreferences)) }
)
}
GroopTitle("Religionen", false)
for (i in 13..15){
FachButton(
color = colorsA[i - 13],
subject = subjects[i],
saWeight = saWeights[i],
activity = activity,
sharedPreferences = sharedPreferences,
onAvgChange = { allAverage = calculateAllAverage(loadAllAverages(sharedPreferences)) }
)
}
GroopTitle("Sonstiges", false)
for (i in 16..18){
FachButton(
color = colorsB[i - 16],
subject = subjects[i],
saWeight = saWeights[i],
activity = activity,
sharedPreferences = sharedPreferences,
onAvgChange = { allAverage = calculateAllAverage(loadAllAverages(sharedPreferences)) }
)
}
Spacer(modifier = Modifier.height(16.dp)) Spacer(modifier = Modifier.height(16.dp))
} }
} }
if (showDeleteConfirmation){
AlertDialog(
onDismissRequest = { showDeleteConfirmation = false },
text = { Text(text = "Möchten Sie wirklich alle Noten aus Allen Fächern löschen?", color = MaterialTheme.colorScheme.onPrimaryContainer, style = MaterialTheme.typography.labelMedium) },
confirmButton = {
Row(modifier = Modifier.fillMaxWidth()){
Text(
text = "Bestätigen",
color = MaterialTheme.colorScheme.secondary,
style = MaterialTheme.typography.labelMedium,
modifier = Modifier.clickable {
deleteAll(editor, activity)
showDeleteConfirmation = false
}
)
Spacer(modifier = Modifier.weight(1f))
Text(
text = "Abbrechen",
color = MaterialTheme.colorScheme.secondary,
style = MaterialTheme.typography.labelMedium,
modifier = Modifier.clickable { showDeleteConfirmation = false }
)
}
},
containerColor = MaterialTheme.colorScheme.primaryContainer
)
}
} }
@Composable @Composable
fun FachButton( fun FachButton(
color : Color, color : Color,
subject : String, subject : String,
saWeight: Int, activity : saWeight: Int,
ComponentActivity, activity: ComponentActivity,
sharedPreferences: SharedPreferences, sharedPreferences: SharedPreferences,
onAvgChange: () -> Unit){ onAvgChange: () -> Unit){
var avg by remember { var avg by remember {
@@ -176,7 +307,7 @@ fun FachButton(
color = TextOnColouredButton, color = TextOnColouredButton,
style = MaterialTheme.typography.labelMedium) style = MaterialTheme.typography.labelMedium)
Spacer(modifier = Modifier.weight(1f)) Spacer(modifier = Modifier.weight(1f))
Text(text = "Ø${formatFloat(avg)}", Text(text = if (avg != 0.0f) "Ø${formatFloat(avg)}" else "---",
color = TextOnColouredButton, color = TextOnColouredButton,
style = MaterialTheme.typography.labelMedium) style = MaterialTheme.typography.labelMedium)
} }
@@ -201,6 +332,17 @@ fun FachButton(
} }
} }
@Composable
fun GroopTitle(name: String, top: Boolean){
if(!top) {
Spacer(modifier = Modifier.height(32.dp))
Divider()
}
Spacer(modifier = Modifier.height(32.dp))
Text(text = name, style = MaterialTheme.typography.headlineSmall, color = MaterialTheme.colorScheme.onBackground)
Spacer(modifier = Modifier.height(12.dp))
}
fun calculateAllAverage(avgs: List<Float>): Float{ fun calculateAllAverage(avgs: List<Float>): Float{
var total = 0.0f var total = 0.0f
var number = 0 var number = 0
@@ -223,3 +365,12 @@ fun loadAllAverages(sharedPreferences: SharedPreferences): List<Float>{
return avgs return avgs
} }
fun deleteAll(editor: Editor, context: Context){
subjects.forEach{name ->
editor.putFloat(name, 0.0f).apply()
CoroutineScope(Dispatchers.IO).launch {
GradeStoreManager.saveGrades(context, emptyList(), name)
}
}
}

View File

@@ -5,5 +5,8 @@ fun formatFloat(number: Float): String {
formattedString = formattedString.substring(0, if(formattedString.length == 3) 3 else 4) formattedString = formattedString.substring(0, if(formattedString.length == 3) 3 else 4)
if(number.isNaN())
formattedString = "0.0"
return formattedString return formattedString
} }