diff --git a/.idea/caches/deviceStreaming.xml b/.idea/caches/deviceStreaming.xml
index dc7149b..871d8b9 100644
--- a/.idea/caches/deviceStreaming.xml
+++ b/.idea/caches/deviceStreaming.xml
@@ -561,6 +561,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/README.md b/README.md
index 6707f3f..58cd199 100644
--- a/README.md
+++ b/README.md
@@ -2,10 +2,19 @@
[](https://github.com/wismna/DoNext/actions/workflows/android.yaml)
-DoNext is an innovative task application.
+DoNext is an a task app that aims for simplicity.
You can create and arrange task lists, create, edit and delete tasks...
-But the emphasis is not a long list, as the more you have to do, the less you actually do!
-Instead, focus only on the first task on the list:
-Swipe it to the left: it's done!
-Swipe it to the right: "nexted!". It goes to the end of the list and you can work on the next task.
\ No newline at end of file
+Focus on what's important:
+- Tasks are sorted by priority
+- Easily see when each task is due, with a warning when it's overdue
+- All tasks due today are grouped in a special view
+
+## Technical stack
+
+DoNext is made with:
+- Kotlin
+- Jetpack Compose for UI
+- Hilt for dependency injection
+- Room for the Database
+- Clean Architecture
diff --git a/donextv2/build.gradle.kts b/donextv2/build.gradle.kts
index 2156648..b228a3b 100644
--- a/donextv2/build.gradle.kts
+++ b/donextv2/build.gradle.kts
@@ -22,7 +22,10 @@ android {
buildTypes {
release {
- isMinifyEnabled = false
+ // Enables code-related app optimization.
+ isMinifyEnabled = true
+ // Enables resource shrinking.
+ isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
@@ -48,25 +51,26 @@ android {
dependencies {
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.9.4")
implementation("androidx.activity:activity-compose:1.11.0")
- implementation(platform("androidx.compose:compose-bom:2025.09.00"))
+ implementation(platform("androidx.compose:compose-bom:2025.09.01"))
implementation("androidx.compose.ui:ui")
implementation("androidx.compose.ui:ui-graphics")
implementation("androidx.compose.ui:ui-tooling-preview")
implementation("androidx.compose.material3:material3")
- implementation("androidx.navigation:navigation-compose:2.9.4")
+ implementation("androidx.compose.material:material-icons-extended:1.7.8")
+ implementation("androidx.navigation:navigation-compose:2.9.5")
implementation("androidx.hilt:hilt-navigation-compose:1.3.0")
implementation("androidx.test.ext:junit-ktx:1.3.0")
implementation("sh.calvin.reorderable:reorderable:3.0.0")
- androidTestImplementation(platform("androidx.compose:compose-bom:2025.09.00"))
+ androidTestImplementation(platform("androidx.compose:compose-bom:2025.09.01"))
androidTestImplementation("androidx.compose.ui:ui-test-junit4")
debugImplementation("androidx.compose.ui:ui-tooling")
debugImplementation("androidx.compose.ui:ui-test-manifest")
- val roomVersion = "2.8.0"
+ val roomVersion = "2.8.1"
implementation("androidx.room:room-runtime:$roomVersion")
ksp("androidx.room:room-compiler:$roomVersion")
- val hiltVersion = "2.57.1"
+ val hiltVersion = "2.57.2"
implementation("com.google.dagger:hilt-android:$hiltVersion")
ksp("com.google.dagger:hilt-android-compiler:$hiltVersion")
}
diff --git a/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/screen/MainScreen.kt b/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/screen/MainScreen.kt
index 48a299b..ce7d339 100644
--- a/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/screen/MainScreen.kt
+++ b/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/screen/MainScreen.kt
@@ -145,7 +145,7 @@ fun AppContent(
}
is AppDestination.RecycleBin -> {
TextButton(onClick = { viewModel.emptyRecycleBin() }) {
- Text(text = "Empty Recycle Bin", color = MaterialTheme.colorScheme.onPrimary)
+ Text(text = "Empty Recycle Bin", color = MaterialTheme.colorScheme.onPrimaryContainer)
}
}
else -> null
diff --git a/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/screen/ManageListsScreen.kt b/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/screen/ManageListsScreen.kt
index 78b4909..9903b2b 100644
--- a/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/screen/ManageListsScreen.kt
+++ b/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/screen/ManageListsScreen.kt
@@ -20,6 +20,7 @@ import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Check
import androidx.compose.material.icons.filled.Close
import androidx.compose.material.icons.filled.Delete
+import androidx.compose.material.icons.filled.DragHandle
import androidx.compose.material.icons.filled.Edit
import androidx.compose.material3.Button
import androidx.compose.material3.Card
@@ -70,7 +71,7 @@ fun ManageListsScreen(
)
LazyColumn(
- modifier = modifier.fillMaxWidth(),
+ modifier = modifier.fillMaxWidth().padding(start = 10.dp, end = 10.dp),
verticalArrangement = Arrangement.spacedBy(8.dp),
contentPadding = PaddingValues(vertical = 8.dp),
state = lazyListState
@@ -133,6 +134,7 @@ fun ManageListsScreen(
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically
) {
+ Icon(Icons.Default.DragHandle, contentDescription = "Edit")
AnimatedContent(
targetState = isInEditMode,
modifier = Modifier.weight(1f),
diff --git a/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/screen/MenuScreen.kt b/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/screen/MenuScreen.kt
index 3cfb4e3..339e687 100644
--- a/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/screen/MenuScreen.kt
+++ b/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/screen/MenuScreen.kt
@@ -7,10 +7,10 @@ import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.automirrored.filled.List
-import androidx.compose.material.icons.filled.DateRange
import androidx.compose.material.icons.filled.Delete
-import androidx.compose.material.icons.filled.Edit
+import androidx.compose.material.icons.filled.EditNote
+import androidx.compose.material.icons.filled.LineWeight
+import androidx.compose.material.icons.filled.Today
import androidx.compose.material3.Badge
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Icon
@@ -56,7 +56,7 @@ fun MenuScreen(
Text(viewModel.dueTodayTasksCount.toString())
}
},
- icon = { Icon(Icons.Default.DateRange, contentDescription = "Due Today") },
+ icon = { Icon(Icons.Default.Today, contentDescription = "Due Today") },
selected = currentDestination is AppDestination.DueTodayList,
onClick = { onNavigate(AppDestination.DueTodayList.route) },
modifier = Modifier.padding(NavigationDrawerItemDefaults.ItemPadding)
@@ -71,7 +71,7 @@ fun MenuScreen(
overflow = TextOverflow.Ellipsis
)
},
- icon = { Icon(Icons.AutoMirrored.Default.List, contentDescription = list.name) },
+ icon = { Icon(Icons.Default.LineWeight, contentDescription = list.name) },
selected = currentDestination is AppDestination.TaskList &&
currentDestination.taskListId == list.id,
onClick = { onNavigate("taskList/${list.id}") },
@@ -96,7 +96,7 @@ fun MenuScreen(
)
NavigationDrawerItem(
label = { Text("Edit Lists") },
- icon = { Icon(Icons.Default.Edit, contentDescription = "Edit Lists") },
+ icon = { Icon(Icons.Default.EditNote, contentDescription = "Edit Lists") },
selected = currentDestination is AppDestination.ManageLists,
onClick = { onNavigate(AppDestination.ManageLists.route) },
modifier = Modifier.padding(NavigationDrawerItemDefaults.ItemPadding)
diff --git a/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/screen/TaskItemScreen.kt b/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/screen/TaskItemScreen.kt
index f1c1927..78c7a45 100644
--- a/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/screen/TaskItemScreen.kt
+++ b/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/screen/TaskItemScreen.kt
@@ -12,11 +12,11 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.filled.AddCircle
import androidx.compose.material.icons.filled.CheckCircle
-import androidx.compose.material.icons.filled.Clear
-import androidx.compose.material.icons.filled.Delete
-import androidx.compose.material.icons.filled.PlayArrow
+import androidx.compose.material.icons.filled.DeleteForever
+import androidx.compose.material.icons.filled.DeleteOutline
+import androidx.compose.material.icons.filled.RestoreFromTrash
+import androidx.compose.material.icons.filled.Unpublished
import androidx.compose.material3.Badge
import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults
@@ -49,6 +49,7 @@ fun TaskItemScreen(
onSwipeLeft: () -> Unit,
onSwipeRight: () -> Unit
) {
+ // TODO: change this
val dismissState = rememberSwipeToDismissBoxState(
confirmValueChange = {
when (it) {
@@ -183,7 +184,7 @@ fun DismissBackground(dismissState: SwipeToDismissBoxState, isDone: Boolean, isD
) {
Column (horizontalAlignment = Alignment.CenterHorizontally) {
Icon(
- if (isDeleted) Icons.Default.Clear else Icons.Default.Delete,
+ if (isDeleted) Icons.Default.DeleteForever else Icons.Default.DeleteOutline,
tint = Color.LightGray,
contentDescription = "Delete"
)
@@ -196,15 +197,15 @@ fun DismissBackground(dismissState: SwipeToDismissBoxState, isDone: Boolean, isD
Spacer(modifier = Modifier)
Column (horizontalAlignment = Alignment.CenterHorizontally) {
Icon(
- if (isDeleted) Icons.Default.AddCircle else
- if (isDone) Icons.Default.PlayArrow else Icons.Default.CheckCircle,
+ if (isDeleted) Icons.Default.RestoreFromTrash else
+ if (isDone) Icons.Default.Unpublished else Icons.Default.CheckCircle,
tint = Color.LightGray,
contentDescription = "Archive"
)
Text(
color = MaterialTheme.colorScheme.onPrimary,
fontSize = 10.sp,
- text = if (isDeleted) "Restore" else if (isDone) "Active" else "Done"
+ text = if (isDeleted) "Restore" else if (isDone) "Undone" else "Done"
)
}
}
diff --git a/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/screen/TaskScreen.kt b/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/screen/TaskScreen.kt
index 19d7903..2080d5e 100644
--- a/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/screen/TaskScreen.kt
+++ b/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/screen/TaskScreen.kt
@@ -8,8 +8,8 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.CalendarMonth
import androidx.compose.material.icons.filled.Clear
-import androidx.compose.material.icons.filled.DateRange
import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.DatePicker
@@ -127,7 +127,7 @@ fun TaskBottomSheet(
IconButton(
onClick = { showDatePicker = true },
enabled = !viewModel.isDone) {
- Icon(Icons.Default.DateRange, contentDescription = "Pick due date")
+ Icon(Icons.Default.CalendarMonth, contentDescription = "Pick due date")
}
}
},