worked on trackers screen

This commit is contained in:
Clara Dautermann 2025-06-04 00:07:08 +02:00
parent 70acdc756a
commit 50fba5f697
Signed by: clara
GPG key ID: 223391B52FAD4463
6 changed files with 135 additions and 71 deletions

View file

@ -23,7 +23,6 @@ import androidx.compose.material.icons.filled.Add
import androidx.compose.material.icons.filled.CalendarMonth import androidx.compose.material.icons.filled.CalendarMonth
import androidx.compose.material.icons.filled.ChevronLeft import androidx.compose.material.icons.filled.ChevronLeft
import androidx.compose.material.icons.filled.ChevronRight import androidx.compose.material.icons.filled.ChevronRight
import androidx.compose.material.icons.filled.DataExploration
import androidx.compose.material.icons.filled.RemoveRedEye import androidx.compose.material.icons.filled.RemoveRedEye
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.Card import androidx.compose.material3.Card
@ -32,7 +31,6 @@ import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.material3.VerticalDivider
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.MutableState import androidx.compose.runtime.MutableState
import androidx.compose.runtime.mutableStateOf 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.dp
import androidx.compose.ui.unit.em import androidx.compose.ui.unit.em
import de.cdaut.dbtapp.R import de.cdaut.dbtapp.R
import de.cdaut.dbtapp.model.TherapyAssignment
import de.cdaut.dbtapp.model.TherapyAssignment.Companion.mockTherapyAssignments 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 de.cdaut.dbtapp.util.weekdayListByLocale
import java.time.LocalDate import java.time.LocalDate
import java.time.format.DateTimeFormatter import java.time.format.DateTimeFormatter
import java.time.format.FormatStyle import java.time.format.FormatStyle
import java.time.temporal.WeekFields import java.time.temporal.WeekFields
@Preview @Preview(device = "id:pixel_6")
@Composable @Composable
fun TrackingScreen() { fun TrackingScreen() {
Column( Column(
@ -63,6 +64,8 @@ fun TrackingScreen() {
.fillMaxWidth() .fillMaxWidth()
.fillMaxHeight() .fillMaxHeight()
.background(MaterialTheme.colorScheme.background), .background(MaterialTheme.colorScheme.background),
//TODO: Scrolling is fucked up
//.verticalScroll(rememberScrollState()),
horizontalAlignment = Alignment.CenterHorizontally horizontalAlignment = Alignment.CenterHorizontally
) { ) {
Column( Column(
@ -77,23 +80,14 @@ fun TrackingScreen() {
Spacer(modifier = Modifier.height(10.dp)) Spacer(modifier = Modifier.height(10.dp))
Row( Row(
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth(),
.background(
color = MaterialTheme.colorScheme.primary,
shape = CircleShape
),
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.SpaceBetween horizontalArrangement = Arrangement.SpaceEvenly
) { ) {
Row( Button(
modifier = Modifier onClick = {
.padding(10.dp)
.padding(horizontal = 10.dp, vertical = 0.dp)
.clickable(onClick = {
//TODO: Add tracker //TODO: Add tracker
}), }
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Start
) { ) {
Icon( Icon(
Icons.Filled.Add, Icons.Filled.Add,
@ -106,20 +100,11 @@ fun TrackingScreen() {
color = MaterialTheme.colorScheme.onPrimary color = MaterialTheme.colorScheme.onPrimary
) )
} }
VerticalDivider(
modifier = Modifier Button(
.fillMaxHeight(0.1f) onClick = {
.padding(5.dp) //TODO: View statistics
) }
Row(
modifier = Modifier
.padding(10.dp)
.padding(horizontal = 10.dp, vertical = 0.dp)
.clickable(onClick = {
//TODO: Add tracker
}),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Start
) { ) {
Text( Text(
modifier = Modifier.padding(horizontal = 5.dp), modifier = Modifier.padding(horizontal = 5.dp),
@ -144,7 +129,29 @@ fun TrackingScreen() {
Text(stringResource(R.string.btn_add_diarycard)) Text(stringResource(R.string.btn_add_diarycard))
} }
Spacer(modifier = Modifier.height(10.dp)) Spacer(modifier = Modifier.height(10.dp))
TitledListCard(stringResource(R.string.card_therapy_hw_heading)) TitledListCard<TherapyAssignment>(
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<Tracker>(
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 @Composable
fun CalendarDaysGrid(selectedDateMut: MutableState<LocalDate>) { private fun CalendarDaysGrid(selectedDateMut: MutableState<LocalDate>) {
val locale = LocalConfiguration.current.locales[0] val locale = LocalConfiguration.current.locales[0]
val selectedDate = selectedDateMut.value val selectedDate = selectedDateMut.value
@ -297,7 +304,12 @@ fun CalendarDaysGrid(selectedDateMut: MutableState<LocalDate>) {
} }
@Composable @Composable
fun TitledListCard(title: String) { private fun <T> TitledListCard(
title: String,
rows: @Composable Function1<List<T>, Unit>,
addAction: () -> Unit,
items: List<T>
) {
Card( Card(
modifier = Modifier.fillMaxWidth() modifier = Modifier.fillMaxWidth()
) { ) {
@ -317,15 +329,20 @@ fun TitledListCard(title: String) {
modifier = Modifier modifier = Modifier
.size(30.dp) .size(30.dp)
.clip(CircleShape) .clip(CircleShape)
.clickable(onClick = { .clickable(onClick = addAction),
//TODO: Add Therapiehausaufgabe
}),
imageVector = Icons.Filled.Add, imageVector = Icons.Filled.Add,
contentDescription = "TODO: Provide" contentDescription = "TODO: Provide"
) )
} }
HorizontalDivider() HorizontalDivider()
for (assignment in mockTherapyAssignments()) { rows(items)
}
}
}
@Composable
private fun TherapyAssignmentCardContent(assignments: List<TherapyAssignment>) {
for (assignment in assignments) {
Row( Row(
modifier = Modifier.fillMaxWidth(), modifier = Modifier.fillMaxWidth(),
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
@ -351,6 +368,30 @@ fun TitledListCard(title: String) {
) )
} }
} }
}
@Composable
private fun OtherTrackersCardContent(trackers: List<Tracker>) {
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
)
}
} }
} }
} }

View file

@ -11,7 +11,7 @@ import java.util.UUID
@Entity @Entity
class Skill( class Skill(
@PrimaryKey val identifier: UUID, @PrimaryKey val identifier: UUID = UUID.randomUUID(),
@ColumnInfo(name = "title") val title: String, @ColumnInfo(name = "title") val title: String,
@ColumnInfo(name = "description") val description: String @ColumnInfo(name = "description") val description: String
) { ) {
@ -21,17 +21,14 @@ class Skill(
fun mockSkills(): List<Skill> { fun mockSkills(): List<Skill> {
return listOf( return listOf(
Skill( Skill(
identifier = UUID.randomUUID(),
title = "Test Hallo :3", title = "Test Hallo :3",
description = "lorem ipsum dolor sid amnet consequetur blabla yada yada" description = "lorem ipsum dolor sid amnet consequetur blabla yada yada"
), ),
Skill( Skill(
identifier = UUID.randomUUID(),
title = "5-4-3-2-1", title = "5-4-3-2-1",
description = "Hier kurz beschreiben wie die Übung funktioniert. Ggf. mehrere Zeilen aber nicht super lang" description = "Hier kurz beschreiben wie die Übung funktioniert. Ggf. mehrere Zeilen aber nicht super lang"
), ),
Skill( Skill(
identifier = UUID.randomUUID(),
title = "UwU UwU awawawa", title = "UwU UwU awawawa",
description = "Just arf a little like the good fopsgirl you are :3" description = "Just arf a little like the good fopsgirl you are :3"
) )

View file

@ -7,7 +7,7 @@ import java.util.UUID
@Entity @Entity
class TherapyAssignment( class TherapyAssignment(
@PrimaryKey val identifier: UUID, @PrimaryKey val identifier: UUID = UUID.randomUUID(),
@ColumnInfo(name = "title") val title: String, @ColumnInfo(name = "title") val title: String,
@ColumnInfo(name = "description") val description: String, @ColumnInfo(name = "description") val description: String,
@ColumnInfo(name = "done") var done: Boolean @ColumnInfo(name = "done") var done: Boolean
@ -17,13 +17,11 @@ class TherapyAssignment(
fun mockTherapyAssignments(): List<TherapyAssignment> { fun mockTherapyAssignments(): List<TherapyAssignment> {
return listOf( return listOf(
TherapyAssignment( TherapyAssignment(
identifier = UUID.randomUUID(),
title = "Selbstfürsorge", title = "Selbstfürsorge",
description = "Mir selbst eine gute Sache tun", description = "Mir selbst eine gute Sache tun",
done = false done = true
), ),
TherapyAssignment( TherapyAssignment(
identifier = UUID.randomUUID(),
title = "Bedürfnis durchsetzen", title = "Bedürfnis durchsetzen",
description = "Eine Sache durchsetzen, die mir schwer fällt", description = "Eine Sache durchsetzen, die mir schwer fällt",
done = false done = false

View file

@ -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<Tracker> {
return listOf(
Tracker(
title = "Stimmung",
description = "Deine aktuelle Stimmung"
)
)
}
}
}

View file

@ -13,4 +13,5 @@
<string name="card_therapy_hw_heading">Therapiehausaufgaben</string> <string name="card_therapy_hw_heading">Therapiehausaufgaben</string>
<string name="add_trackter">Tracker hinzufügen</string> <string name="add_trackter">Tracker hinzufügen</string>
<string name="view_stats">Statistiken</string> <string name="view_stats">Statistiken</string>
<string name="tracker_card_title">Tracker</string>
</resources> </resources>

View file

@ -12,4 +12,5 @@
<string name="card_therapy_hw_heading">Therapy Assignments</string> <string name="card_therapy_hw_heading">Therapy Assignments</string>
<string name="add_trackter">Add Tracker</string> <string name="add_trackter">Add Tracker</string>
<string name="view_stats">View Statistics</string> <string name="view_stats">View Statistics</string>
<string name="tracker_card_title">Trackers</string>
</resources> </resources>