Skip to content

Commit 6d51dbb

Browse files
committed
chore: Bump dependencies
fix: Disable task groups, they are causing recomposition issues that lead to empty lists sometimes chore: Switch to short month names to better fit smaller screens
1 parent 21d3735 commit 6d51dbb

File tree

7 files changed

+78
-91
lines changed

7 files changed

+78
-91
lines changed

app-android/build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ dependencies {
1212
implementation(libs.androidx.activity.compose)
1313
// implementation(libs.androidx.glance.appwidget)
1414
// implementation(libs.androidx.glance.material3)
15-
implementation("androidx.glance:glance-appwidget:1.0.0")
16-
implementation("androidx.glance:glance-material3:1.0.0")
15+
// implementation("androidx.glance:glance-appwidget:1.1.1")
16+
// implementation("androidx.glance:glance-material3:1.1.1")
1717
implementation(libs.kotlin.multiplatform.appdirs)
1818
implementation(libs.koin.android)
1919
implementation(libs.androidx.startup.runtime)

app-android/src/main/res/xml/widget_quickadd.xml

Lines changed: 0 additions & 5 deletions
This file was deleted.

app-common/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ kotlin {
5555
implementation(libs.uuid)
5656

5757
implementation(libs.ktor.client.core)
58-
implementation(libs.ktor.serialization.json.eap)
58+
implementation(libs.ktor.serialization.json)
5959
implementation(libs.ktor.client.content.negotiation)
6060
implementation(libs.ktor.client.auth)
6161
implementation(libs.multiplatform.settings)

app-common/src/commonMain/kotlin/me/dvyy/tasks/tasks/ui/elements/list/TaskList.kt

Lines changed: 55 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package me.dvyy.tasks.tasks.ui.elements.list
22

3-
import androidx.compose.animation.AnimatedVisibility
43
import androidx.compose.foundation.ExperimentalFoundationApi
54
import androidx.compose.foundation.draganddrop.dragAndDropTarget
65
import androidx.compose.foundation.layout.*
@@ -76,81 +75,77 @@ fun TaskList(
7675
key = listId,
7776
)
7877
val tasks = tasks.loadedOrNull() ?: return@Column
78+
// println("Loading ${listId.date} with ${tasks.size}")
7979
val scrollState = rememberScrollState()
8080
val scrollModifier =
8181
if (scrollable) Modifier.verticalScroll(scrollState)
8282
else Modifier
8383

84-
// Split into two lists based on filter
85-
// val (shown, incompleteTasks) = tasks.partition { it.state.completed }
86-
8784
fun String.isGroupToggle() = startsWith("--") || startsWith("==")
88-
Column(
89-
modifier = Modifier
90-
) {
85+
Column {
9186
val selectedTask by viewModel.selectedTask.collectAsState()
92-
val groupedTasks = mutableListOf(mutableListOf<TaskWithIDState>())
93-
tasks.forEach { task ->
94-
if (task.state.text.isGroupToggle()) groupedTasks.add(mutableListOf(task))
95-
else groupedTasks.lastOrNull()?.add(task)
96-
}
87+
// val groupedTasks = mutableListOf(mutableListOf<TaskWithIDState>())
88+
// tasks.forEach { task ->
89+
// if (task.state.text.isGroupToggle()) groupedTasks.add(mutableListOf(task))
90+
// else groupedTasks.lastOrNull()?.add(task)
91+
// }
9792
Column(scrollModifier.padding(horizontal = 6.dp)) {
98-
groupedTasks.forEachIndexed { groupIndex, tasksInGroup ->
99-
var isGroupHidden by remember { mutableStateOf(tasksInGroup.firstOrNull()?.state?.completed == true) }
100-
tasksInGroup.forEachIndexed { index, task ->
101-
key(task.uuid) {
102-
val selected = selectedTask?.taskId == task.uuid
103-
val focusRequested = selected && selectedTask?.requestFocus == true
93+
// groupedTasks.forEachIndexed { groupIndex, tasksInGroup ->
94+
// var isGroupHidden by remember { mutableStateOf(tasksInGroup.firstOrNull()?.state?.completed == true) }
95+
tasks.forEachIndexed { index, task ->
96+
key(task.uuid) {
97+
val selected = selectedTask?.taskId == task.uuid
98+
val focusRequested = selected && selectedTask?.requestFocus == true
10499
// val onChange = remember(task) { getInteractions(task) }::onTaskChanged
105-
// cached task is the SSOT in this context, some things like text updates take too long to update in db
106-
CachedUpdate(
107-
key = task.uuid,
108-
value = task.state,
109-
onValueChanged = { viewModel.onTaskChanged(task.uuid, it) }
110-
) { cachedTask, setTask ->
111-
val focusManager = LocalFocusManager.current
112-
val keyboardOpen by keyboardAsState()
113-
val isGroupToggle = index == 0 && cachedTask.text.isGroupToggle()
100+
// cached task is the SSOT in this context, some things like text updates take too long to update in db
101+
CachedUpdate(
102+
key = task.uuid,
103+
value = task.state,
104+
onValueChanged = { viewModel.onTaskChanged(task.uuid, it) }
105+
) { cachedTask, setTask ->
106+
val focusManager = LocalFocusManager.current
107+
val keyboardOpen by keyboardAsState()
108+
val isGroupToggle = index == 0 && cachedTask.text.isGroupToggle()
114109

115-
LaunchedEffect(cachedTask) {
116-
if (isGroupToggle) isGroupHidden = cachedTask.completed
117-
}
110+
// LaunchedEffect(cachedTask) {
111+
// if (isGroupToggle) isGroupHidden = cachedTask.completed
112+
// }
118113

119-
LaunchedEffect(keyboardOpen) {
120-
if (!keyboardOpen) {
121-
focusManager.clearFocus()
122-
}
114+
LaunchedEffect(keyboardOpen) {
115+
if (!keyboardOpen) {
116+
focusManager.clearFocus()
123117
}
118+
}
124119

125-
val taskInteractions = remember(cachedTask) {
126-
viewModel.interactionsFor(task.uuid, listId, cachedTask, setTask)
127-
}
120+
val taskInteractions = remember(cachedTask) {
121+
viewModel.interactionsFor(task.uuid, listId, cachedTask, setTask)
122+
}
128123

129-
AnimatedVisibility(isGroupToggle || !isGroupHidden) {
130-
Column {
131-
ReorderableTask(key = task.uuid, reorderInteractions = reorderInteractions) {
132-
Task(
133-
cachedTask,
134-
setTask,
135-
selected,
136-
taskInteractions,
137-
focusRequested = focusRequested,
138-
forceShowCheckbox = isGroupToggle,
139-
overrideCheckboxIcon = if (isGroupToggle) AppIcons.ArrowDropDown else null,
140-
overrideCheckboxCompletedIcon = if (isGroupToggle) AppIcons.ArrowDropUp else null,
141-
)
142-
}
143-
if (!isGroupToggle) HorizontalDivider()
144-
}
124+
// AnimatedVisibility(isGroupToggle || !isGroupHidden) {
125+
Column {
126+
ReorderableTask(key = task.uuid, reorderInteractions = reorderInteractions) {
127+
Task(
128+
cachedTask,
129+
setTask,
130+
selected,
131+
taskInteractions,
132+
focusRequested = focusRequested,
133+
forceShowCheckbox = isGroupToggle,
134+
overrideCheckboxIcon = if (isGroupToggle) AppIcons.ArrowDropDown else null,
135+
overrideCheckboxCompletedIcon = if (isGroupToggle) AppIcons.ArrowDropUp else null,
136+
)
145137
}
146-
147-
if (isGroupToggle) HorizontalDivider(
148-
thickness = 2.dp,
149-
color = cachedTask.highlight.color
150-
.takeIf { it != Color.Transparent }
151-
?: MaterialTheme.colorScheme.onSurface
152-
)
138+
if (!isGroupToggle) HorizontalDivider()
153139
}
140+
// }
141+
142+
if (isGroupToggle) HorizontalDivider(
143+
thickness = 2.dp,
144+
color = cachedTask.highlight.color
145+
.takeIf { it != Color.Transparent }
146+
?: MaterialTheme.colorScheme.onSurface
147+
)
148+
// }
154149
}
155150
}
156151
}

app-common/src/commonMain/kotlin/me/dvyy/tasks/tasks/ui/elements/list/TaskListTitle.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ import me.dvyy.tasks.model.TaskListProperties
2222
import me.dvyy.tasks.tasks.ui.CachedUpdate
2323
import me.dvyy.tasks.utils.Loadable
2424
import me.dvyy.tasks.utils.loadedOrNull
25+
import java.time.format.TextStyle
26+
import java.util.*
2527

2628
@Composable
2729
fun TaskListTitle(
@@ -46,7 +48,7 @@ fun TaskListTitle(
4648
if (props.date != null) {
4749
val date = props.date!!
4850
Text(
49-
"${date.month.name.lowercase().capitalize()} ${date.dayOfMonth}",
51+
"${date.month.getDisplayName(TextStyle.SHORT, Locale.getDefault()).lowercase().capitalize()} ${date.dayOfMonth}",
5052
Modifier.weight(1f, true),
5153
style = MaterialTheme.typography.headlineMedium,
5254
fontWeight = FontWeight.Bold,

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
group=me.dvyy
2-
version=1.1.0-alpha.2
2+
version=1.1.0-alpha.3
33
org.jetbrains.compose.experimental.wasm.enabled=true
44
kotlin.native.ignoreDisabledTargets=true
55
kotlin.mpp.stability.nowarn=true

gradle/libs.versions.toml

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,34 +3,31 @@ agp = "8.2.0"
33
android-compileSdk = "34"
44
android-minSdk = "24"
55
android-targetSdk = "34"
6-
androidx-activityCompose = "1.9.2"
6+
androidx-activityCompose = "1.9.3"
77
androidx-appcompat = "1.7.0"
88
androidx-constraintlayout = "2.1.4"
99
androidx-core-ktx = "1.13.1"
1010
androidx-espresso-core = "3.6.1"
1111
androidx-material = "1.12.0"
1212
androidx-test-junit = "1.2.1"
13-
androidx-glance = "1.1.0-rc01"
14-
compose = "1.7.0-beta02"
15-
exposed = "0.51.1"
13+
compose = "1.7.0"
14+
exposed = "0.55.0"
1615
h2 = "2.2.224"
1716
hikaricp = "5.1.0"
18-
jdbcDriver = "2.0.2"
1917
jib = "3.4.3"
2018
junit = "4.13.2"
21-
koin = "4.0.0-RC2"
22-
kotlin = "2.0.20"
19+
koin = "4.0.0"
20+
kotlin = "2.0.21"
2321
kotlinMultiplatformAppdirs = "1.2.0"
24-
coroutines = "1.8.1"
22+
coroutines = "1.9.0"
2523
kotest = "5.9.1"
2624
kotlinResult = "2.0.0"
2725
kotlinxDatetime = "0.6.1"
28-
kotlinxSerialization = "1.7.2"
29-
ktor = "2.3.12"
30-
ktor-eap = "3.0.0-rc-1"
31-
lifecycleViewmodelCompose = "2.8.0-beta02"
32-
logback = "1.5.7"
33-
foundationAndroid = "1.7.2"
26+
kotlinxSerialization = "1.7.3"
27+
ktor = "3.0.0"
28+
lifecycleViewmodelCompose = "2.8.0"
29+
logback = "1.5.9"
30+
foundationAndroid = "1.7.4"
3431
material3WindowSizeClassMultiplatform = "0.5.0"
3532
multiplatformSettings = "1.2.0"
3633
postgresql = "42.7.4"
@@ -39,7 +36,6 @@ uuid = "0.8.4"
3936
navigationCompose = "2.7.0-alpha03"
4037
slf4j = "2.0.9"
4138
sqlDelight = "2.1.0-SNAPSHOT"
42-
oidc = "0.10.0"
4339
colorpicker = "1.1.0"
4440
startupRuntime = "1.2.0"
4541
workRuntimeKtx = "2.9.1"
@@ -91,12 +87,11 @@ kotest-property = { module = "io.kotest:kotest-property", version.ref = "kotest"
9187
kotest-runner-junit5 = { module = "io.kotest:kotest-runner-junit5", version.ref = "kotest" }
9288
ktor-server-core = { module = "io.ktor:ktor-server-core-jvm", version.ref = "ktor" }
9389
ktor-server-netty = { module = "io.ktor:ktor-server-netty-jvm", version.ref = "ktor" }
94-
ktor-client-auth = { module = "io.ktor:ktor-client-auth", version.ref = "ktor-eap" }
95-
ktor-client-core = { module = "io.ktor:ktor-client-core", version.ref = "ktor-eap" }
96-
ktor-client-okhttp = { module = "io.ktor:ktor-client-okhttp", version.ref = "ktor-eap" }
97-
ktor-client-darwin = { module = "io.ktor:ktor-client-darwin", version.ref = "ktor-eap" }
98-
ktor-client-content-negotiation = { module = "io.ktor:ktor-client-content-negotiation", version.ref = "ktor-eap" }
99-
ktor-serialization-json-eap = { module = "io.ktor:ktor-serialization-kotlinx-json", version.ref = "ktor-eap" }
90+
ktor-client-auth = { module = "io.ktor:ktor-client-auth", version.ref = "ktor" }
91+
ktor-client-core = { module = "io.ktor:ktor-client-core", version.ref = "ktor" }
92+
ktor-client-okhttp = { module = "io.ktor:ktor-client-okhttp", version.ref = "ktor" }
93+
ktor-client-darwin = { module = "io.ktor:ktor-client-darwin", version.ref = "ktor" }
94+
ktor-client-content-negotiation = { module = "io.ktor:ktor-client-content-negotiation", version.ref = "ktor" }
10095
ktor-serialization-json = { module = "io.ktor:ktor-serialization-kotlinx-json", version.ref = "ktor" }
10196
androidx-foundation-android = { group = "androidx.compose.foundation", name = "foundation-android", version.ref = "foundationAndroid" }
10297
material3-window-sizeclass-multiplatform = { module = "dev.chrisbanes.material3:material3-window-size-class-multiplatform", version.ref = "material3WindowSizeClassMultiplatform" }

0 commit comments

Comments
 (0)