From 50fba5f6978b8774be03b51b937dafc7fbe5dc04 Mon Sep 17 00:00:00 2001 From: Clara Dautermann Date: Wed, 4 Jun 2025 00:07:08 +0200 Subject: [PATCH] worked on trackers screen --- .../de/cdaut/dbtapp/components/Tracking.kt | 167 +++++++++++------- .../main/java/de/cdaut/dbtapp/model/Skill.kt | 5 +- .../cdaut/dbtapp/model/TherapyAssignment.kt | 6 +- .../java/de/cdaut/dbtapp/model/Tracker.kt | 26 +++ DBTApp/app/src/main/res/values-de/strings.xml | 1 + DBTApp/app/src/main/res/values/strings.xml | 1 + 6 files changed, 135 insertions(+), 71 deletions(-) create mode 100644 DBTApp/app/src/main/java/de/cdaut/dbtapp/model/Tracker.kt diff --git a/DBTApp/app/src/main/java/de/cdaut/dbtapp/components/Tracking.kt b/DBTApp/app/src/main/java/de/cdaut/dbtapp/components/Tracking.kt index 5bd9d04..36e4916 100644 --- a/DBTApp/app/src/main/java/de/cdaut/dbtapp/components/Tracking.kt +++ b/DBTApp/app/src/main/java/de/cdaut/dbtapp/components/Tracking.kt @@ -23,7 +23,6 @@ import androidx.compose.material.icons.filled.Add import androidx.compose.material.icons.filled.CalendarMonth import androidx.compose.material.icons.filled.ChevronLeft import androidx.compose.material.icons.filled.ChevronRight -import androidx.compose.material.icons.filled.DataExploration import androidx.compose.material.icons.filled.RemoveRedEye import androidx.compose.material3.Button import androidx.compose.material3.Card @@ -32,7 +31,6 @@ import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text -import androidx.compose.material3.VerticalDivider import androidx.compose.runtime.Composable import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf @@ -48,14 +46,17 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.em import de.cdaut.dbtapp.R +import de.cdaut.dbtapp.model.TherapyAssignment import de.cdaut.dbtapp.model.TherapyAssignment.Companion.mockTherapyAssignments +import de.cdaut.dbtapp.model.Tracker +import de.cdaut.dbtapp.model.Tracker.Companion.mockTrackers import de.cdaut.dbtapp.util.weekdayListByLocale import java.time.LocalDate import java.time.format.DateTimeFormatter import java.time.format.FormatStyle import java.time.temporal.WeekFields -@Preview +@Preview(device = "id:pixel_6") @Composable fun TrackingScreen() { Column( @@ -63,6 +64,8 @@ fun TrackingScreen() { .fillMaxWidth() .fillMaxHeight() .background(MaterialTheme.colorScheme.background), + //TODO: Scrolling is fucked up + //.verticalScroll(rememberScrollState()), horizontalAlignment = Alignment.CenterHorizontally ) { Column( @@ -77,23 +80,14 @@ fun TrackingScreen() { Spacer(modifier = Modifier.height(10.dp)) Row( modifier = Modifier - .fillMaxWidth() - .background( - color = MaterialTheme.colorScheme.primary, - shape = CircleShape - ), + .fillMaxWidth(), verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceBetween + horizontalArrangement = Arrangement.SpaceEvenly ) { - Row( - modifier = Modifier - .padding(10.dp) - .padding(horizontal = 10.dp, vertical = 0.dp) - .clickable(onClick = { - //TODO: Add tracker - }), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.Start + Button( + onClick = { + //TODO: Add tracker + } ) { Icon( Icons.Filled.Add, @@ -106,20 +100,11 @@ fun TrackingScreen() { color = MaterialTheme.colorScheme.onPrimary ) } - VerticalDivider( - modifier = Modifier - .fillMaxHeight(0.1f) - .padding(5.dp) - ) - Row( - modifier = Modifier - .padding(10.dp) - .padding(horizontal = 10.dp, vertical = 0.dp) - .clickable(onClick = { - //TODO: Add tracker - }), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.Start + + Button( + onClick = { + //TODO: View statistics + } ) { Text( modifier = Modifier.padding(horizontal = 5.dp), @@ -144,7 +129,29 @@ fun TrackingScreen() { Text(stringResource(R.string.btn_add_diarycard)) } Spacer(modifier = Modifier.height(10.dp)) - TitledListCard(stringResource(R.string.card_therapy_hw_heading)) + TitledListCard( + stringResource(R.string.card_therapy_hw_heading), + rows = { + //TODO: This can probably be typed better… + assignments -> + TherapyAssignmentCardContent(assignments) + }, + addAction = { + //TODO: Add Therapy assignment + }, + items = mockTherapyAssignments() + ) + + Spacer(modifier = Modifier.height(10.dp)) + + TitledListCard( + stringResource(R.string.tracker_card_title), + rows = { trackers -> OtherTrackersCardContent(trackers = trackers) }, + addAction = { + //TODO: Add new tracker + }, + items = mockTrackers() + ) } } @@ -237,7 +244,7 @@ private fun TopCalendar() { } @Composable -fun CalendarDaysGrid(selectedDateMut: MutableState) { +private fun CalendarDaysGrid(selectedDateMut: MutableState) { val locale = LocalConfiguration.current.locales[0] val selectedDate = selectedDateMut.value @@ -297,7 +304,12 @@ fun CalendarDaysGrid(selectedDateMut: MutableState) { } @Composable -fun TitledListCard(title: String) { +private fun TitledListCard( + title: String, + rows: @Composable Function1, Unit>, + addAction: () -> Unit, + items: List +) { Card( modifier = Modifier.fillMaxWidth() ) { @@ -317,39 +329,68 @@ fun TitledListCard(title: String) { modifier = Modifier .size(30.dp) .clip(CircleShape) - .clickable(onClick = { - //TODO: Add Therapiehausaufgabe - }), + .clickable(onClick = addAction), imageVector = Icons.Filled.Add, contentDescription = "TODO: Provide" ) } HorizontalDivider() - for (assignment in mockTherapyAssignments()) { - Row( - modifier = Modifier.fillMaxWidth(), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceBetween, - ) { - Column { - Text( - modifier = Modifier.padding(horizontal = 10.dp, vertical = 0.dp), - text = assignment.title, - style = MaterialTheme.typography.bodyMedium - ) - Text( - modifier = Modifier.padding(horizontal = 10.dp, vertical = 0.dp), - text = assignment.description, - style = MaterialTheme.typography.bodySmall - ) - } - Checkbox( - onCheckedChange = { - assignment.done = !assignment.done - }, - checked = assignment.done - ) - } + rows(items) + } + } +} + +@Composable +private fun TherapyAssignmentCardContent(assignments: List) { + for (assignment in assignments) { + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween, + ) { + Column { + Text( + modifier = Modifier.padding(horizontal = 10.dp, vertical = 0.dp), + text = assignment.title, + style = MaterialTheme.typography.bodyMedium + ) + Text( + modifier = Modifier.padding(horizontal = 10.dp, vertical = 0.dp), + text = assignment.description, + style = MaterialTheme.typography.bodySmall + ) + } + Checkbox( + onCheckedChange = { + assignment.done = !assignment.done + }, + checked = assignment.done + ) + } + } +} + +@Composable +private fun OtherTrackersCardContent(trackers: List) { + for (tracker in trackers) { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(5.dp), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween, + ) { + Column { + Text( + modifier = Modifier.padding(horizontal = 10.dp, vertical = 0.dp), + text = tracker.title, + style = MaterialTheme.typography.bodyMedium + ) + Text( + modifier = Modifier.padding(horizontal = 10.dp, vertical = 0.dp), + text = tracker.description, + style = MaterialTheme.typography.bodySmall + ) } } } diff --git a/DBTApp/app/src/main/java/de/cdaut/dbtapp/model/Skill.kt b/DBTApp/app/src/main/java/de/cdaut/dbtapp/model/Skill.kt index 0528f62..7dbdeed 100644 --- a/DBTApp/app/src/main/java/de/cdaut/dbtapp/model/Skill.kt +++ b/DBTApp/app/src/main/java/de/cdaut/dbtapp/model/Skill.kt @@ -11,7 +11,7 @@ import java.util.UUID @Entity class Skill( - @PrimaryKey val identifier: UUID, + @PrimaryKey val identifier: UUID = UUID.randomUUID(), @ColumnInfo(name = "title") val title: String, @ColumnInfo(name = "description") val description: String ) { @@ -21,17 +21,14 @@ class Skill( fun mockSkills(): List { return listOf( Skill( - identifier = UUID.randomUUID(), title = "Test Hallo :3", description = "lorem ipsum dolor sid amnet consequetur blabla yada yada" ), Skill( - identifier = UUID.randomUUID(), title = "5-4-3-2-1", description = "Hier kurz beschreiben wie die Übung funktioniert. Ggf. mehrere Zeilen aber nicht super lang" ), Skill( - identifier = UUID.randomUUID(), title = "UwU UwU awawawa", description = "Just arf a little like the good fopsgirl you are :3" ) diff --git a/DBTApp/app/src/main/java/de/cdaut/dbtapp/model/TherapyAssignment.kt b/DBTApp/app/src/main/java/de/cdaut/dbtapp/model/TherapyAssignment.kt index 4c54dfb..f336f48 100644 --- a/DBTApp/app/src/main/java/de/cdaut/dbtapp/model/TherapyAssignment.kt +++ b/DBTApp/app/src/main/java/de/cdaut/dbtapp/model/TherapyAssignment.kt @@ -7,7 +7,7 @@ import java.util.UUID @Entity class TherapyAssignment( - @PrimaryKey val identifier: UUID, + @PrimaryKey val identifier: UUID = UUID.randomUUID(), @ColumnInfo(name = "title") val title: String, @ColumnInfo(name = "description") val description: String, @ColumnInfo(name = "done") var done: Boolean @@ -17,13 +17,11 @@ class TherapyAssignment( fun mockTherapyAssignments(): List { return listOf( TherapyAssignment( - identifier = UUID.randomUUID(), title = "Selbstfürsorge", description = "Mir selbst eine gute Sache tun", - done = false + done = true ), TherapyAssignment( - identifier = UUID.randomUUID(), title = "Bedürfnis durchsetzen", description = "Eine Sache durchsetzen, die mir schwer fällt", done = false diff --git a/DBTApp/app/src/main/java/de/cdaut/dbtapp/model/Tracker.kt b/DBTApp/app/src/main/java/de/cdaut/dbtapp/model/Tracker.kt new file mode 100644 index 0000000..4cb59d1 --- /dev/null +++ b/DBTApp/app/src/main/java/de/cdaut/dbtapp/model/Tracker.kt @@ -0,0 +1,26 @@ +package de.cdaut.dbtapp.model + +import androidx.room.ColumnInfo +import androidx.room.Entity +import androidx.room.PrimaryKey +import java.util.UUID + +@Entity +class Tracker( + @PrimaryKey val identifier: UUID = UUID.randomUUID(), + @ColumnInfo(name = "title") val title: String, + @ColumnInfo(name = "description") val description: String +) { + + companion object { + fun mockTrackers(): List { + return listOf( + Tracker( + title = "Stimmung", + description = "Deine aktuelle Stimmung" + ) + ) + } + } + +} \ No newline at end of file diff --git a/DBTApp/app/src/main/res/values-de/strings.xml b/DBTApp/app/src/main/res/values-de/strings.xml index 315bb4d..c9fb175 100644 --- a/DBTApp/app/src/main/res/values-de/strings.xml +++ b/DBTApp/app/src/main/res/values-de/strings.xml @@ -13,4 +13,5 @@ Therapiehausaufgaben Tracker hinzufügen Statistiken + Tracker \ No newline at end of file diff --git a/DBTApp/app/src/main/res/values/strings.xml b/DBTApp/app/src/main/res/values/strings.xml index 2daf59e..2833231 100644 --- a/DBTApp/app/src/main/res/values/strings.xml +++ b/DBTApp/app/src/main/res/values/strings.xml @@ -12,4 +12,5 @@ Therapy Assignments Add Tracker View Statistics + Trackers \ No newline at end of file