worked on trackers screen
This commit is contained in:
parent
70acdc756a
commit
50fba5f697
6 changed files with 135 additions and 71 deletions
|
|
@ -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)
|
//TODO: Add tracker
|
||||||
.padding(horizontal = 10.dp, vertical = 0.dp)
|
}
|
||||||
.clickable(onClick = {
|
|
||||||
//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,39 +329,68 @@ 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)
|
||||||
Row(
|
}
|
||||||
modifier = Modifier.fillMaxWidth(),
|
}
|
||||||
verticalAlignment = Alignment.CenterVertically,
|
}
|
||||||
horizontalArrangement = Arrangement.SpaceBetween,
|
|
||||||
) {
|
@Composable
|
||||||
Column {
|
private fun TherapyAssignmentCardContent(assignments: List<TherapyAssignment>) {
|
||||||
Text(
|
for (assignment in assignments) {
|
||||||
modifier = Modifier.padding(horizontal = 10.dp, vertical = 0.dp),
|
Row(
|
||||||
text = assignment.title,
|
modifier = Modifier.fillMaxWidth(),
|
||||||
style = MaterialTheme.typography.bodyMedium
|
verticalAlignment = Alignment.CenterVertically,
|
||||||
)
|
horizontalArrangement = Arrangement.SpaceBetween,
|
||||||
Text(
|
) {
|
||||||
modifier = Modifier.padding(horizontal = 10.dp, vertical = 0.dp),
|
Column {
|
||||||
text = assignment.description,
|
Text(
|
||||||
style = MaterialTheme.typography.bodySmall
|
modifier = Modifier.padding(horizontal = 10.dp, vertical = 0.dp),
|
||||||
)
|
text = assignment.title,
|
||||||
}
|
style = MaterialTheme.typography.bodyMedium
|
||||||
Checkbox(
|
)
|
||||||
onCheckedChange = {
|
Text(
|
||||||
assignment.done = !assignment.done
|
modifier = Modifier.padding(horizontal = 10.dp, vertical = 0.dp),
|
||||||
},
|
text = assignment.description,
|
||||||
checked = assignment.done
|
style = MaterialTheme.typography.bodySmall
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
Checkbox(
|
||||||
|
onCheckedChange = {
|
||||||
|
assignment.done = !assignment.done
|
||||||
|
},
|
||||||
|
checked = assignment.done
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@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
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
26
DBTApp/app/src/main/java/de/cdaut/dbtapp/model/Tracker.kt
Normal file
26
DBTApp/app/src/main/java/de/cdaut/dbtapp/model/Tracker.kt
Normal 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"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -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>
|
||||||
|
|
@ -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>
|
||||||
Loading…
Add table
Add a link
Reference in a new issue