Translate default lists

Change task list icon
Improve empty tasks and task lists screens
This commit is contained in:
Geoffroy Bonneville
2025-10-30 13:32:53 -04:00
parent a000eff8cc
commit d626a381ba
8 changed files with 51 additions and 17 deletions

View File

@@ -7,6 +7,7 @@ import androidx.room.RoomDatabase
import androidx.room.TypeConverters import androidx.room.TypeConverters
import androidx.room.migration.Migration import androidx.room.migration.Migration
import androidx.sqlite.db.SupportSQLiteDatabase import androidx.sqlite.db.SupportSQLiteDatabase
import com.wismna.geoffroy.donext.R
import com.wismna.geoffroy.donext.data.Converters import com.wismna.geoffroy.donext.data.Converters
import com.wismna.geoffroy.donext.data.entities.TaskEntity import com.wismna.geoffroy.donext.data.entities.TaskEntity
import com.wismna.geoffroy.donext.data.entities.TaskListEntity import com.wismna.geoffroy.donext.data.entities.TaskListEntity
@@ -137,10 +138,11 @@ abstract class AppDatabase : RoomDatabase() {
super.onCreate(db) super.onCreate(db)
// insert default lists // insert default lists
CoroutineScope(Dispatchers.IO).launch { CoroutineScope(Dispatchers.IO).launch {
val res = context.resources
val dao = DB_INSTANCE?.taskListDao() val dao = DB_INSTANCE?.taskListDao()
dao?.insertTaskList(TaskListEntity(name = "Personal", order = 1)) dao?.insertTaskList(TaskListEntity(name = res.getString(R.string.sample_list_personal), order = 1))
dao?.insertTaskList(TaskListEntity(name = "Work", order = 2)) dao?.insertTaskList(TaskListEntity(name = res.getString(R.string.sample_list_work), order = 2))
dao?.insertTaskList(TaskListEntity(name = "Shopping", order = 3)) dao?.insertTaskList(TaskListEntity(name = res.getString(R.string.sample_list_shopping), order = 3))
} }
} }
}) })

View File

@@ -34,7 +34,7 @@ fun DueTodayTasksScreen(
modifier = modifier.fillMaxSize(), modifier = modifier.fillMaxSize(),
contentAlignment = Alignment.Center contentAlignment = Alignment.Center
) { ) {
Column(horizontalAlignment = Alignment.CenterHorizontally) { Column(modifier = Modifier.padding(start = 10.dp, end = 10.dp), horizontalAlignment = Alignment.CenterHorizontally) {
Icon( Icon(
Icons.Default.CalendarToday, Icons.Default.CalendarToday,
contentDescription = "Due today background icon", contentDescription = "Due today background icon",

View File

@@ -15,6 +15,7 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.foundation.lazy.itemsIndexed
import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.lazy.rememberLazyListState
@@ -24,6 +25,7 @@ import androidx.compose.material.icons.filled.Close
import androidx.compose.material.icons.filled.Delete import androidx.compose.material.icons.filled.Delete
import androidx.compose.material.icons.filled.DragHandle import androidx.compose.material.icons.filled.DragHandle
import androidx.compose.material.icons.filled.Edit import androidx.compose.material.icons.filled.Edit
import androidx.compose.material.icons.filled.EditNote
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.Card import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults import androidx.compose.material3.CardDefaults
@@ -71,7 +73,14 @@ fun ManageListsScreen(
modifier = modifier.fillMaxSize(), modifier = modifier.fillMaxSize(),
contentAlignment = Alignment.Center contentAlignment = Alignment.Center
) { ) {
Text(stringResource(R.string.tasklist_no_tasks)) Column (modifier = Modifier.padding(start = 10.dp, end = 10.dp), horizontalAlignment = Alignment.CenterHorizontally) {
Icon(
Icons.Default.EditNote,
contentDescription = "Due today background icon",
modifier = Modifier.size(60.dp),
tint = MaterialTheme.colorScheme.secondary)
Text(stringResource(R.string.tasklists_no_task_list), color = MaterialTheme.colorScheme.secondary)
}
} }
return return
} }

View File

@@ -7,9 +7,9 @@ import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Checklist
import androidx.compose.material.icons.filled.Delete import androidx.compose.material.icons.filled.Delete
import androidx.compose.material.icons.filled.EditNote import androidx.compose.material.icons.filled.EditNote
import androidx.compose.material.icons.filled.LineWeight
import androidx.compose.material.icons.filled.Today import androidx.compose.material.icons.filled.Today
import androidx.compose.material3.Badge import androidx.compose.material3.Badge
import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.HorizontalDivider
@@ -74,7 +74,7 @@ fun MenuScreen(
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
}, },
icon = { Icon(Icons.Default.LineWeight, contentDescription = list.name) }, icon = { Icon(Icons.Default.Checklist, contentDescription = list.name) },
selected = currentDestination is AppDestination.TaskList && selected = currentDestination is AppDestination.TaskList &&
currentDestination.taskListId == list.id, currentDestination.taskListId == list.id,
onClick = { viewModel.navigateTo("taskList/${list.id}", currentDestination.route) }, onClick = { viewModel.navigateTo("taskList/${list.id}", currentDestination.route) },
@@ -90,13 +90,6 @@ fun MenuScreen(
Column { Column {
HorizontalDivider() HorizontalDivider()
NavigationDrawerItem(
label = { Text(stringResource(R.string.navigation_recycle_bin)) },
icon = { Icon(Icons.Default.Delete, contentDescription = stringResource(R.string.navigation_recycle_bin)) },
selected = currentDestination is AppDestination.RecycleBin,
onClick = { viewModel.navigateTo(AppDestination.RecycleBin.route, currentDestination.route) },
modifier = Modifier.padding(NavigationDrawerItemDefaults.ItemPadding)
)
NavigationDrawerItem( NavigationDrawerItem(
label = { Text(stringResource(R.string.navigation_edit_lists)) }, label = { Text(stringResource(R.string.navigation_edit_lists)) },
icon = { Icon(Icons.Default.EditNote, contentDescription = stringResource(R.string.navigation_edit_lists)) }, icon = { Icon(Icons.Default.EditNote, contentDescription = stringResource(R.string.navigation_edit_lists)) },
@@ -104,6 +97,13 @@ fun MenuScreen(
onClick = { viewModel.navigateTo(AppDestination.ManageLists.route, currentDestination.route) }, onClick = { viewModel.navigateTo(AppDestination.ManageLists.route, currentDestination.route) },
modifier = Modifier.padding(NavigationDrawerItemDefaults.ItemPadding) modifier = Modifier.padding(NavigationDrawerItemDefaults.ItemPadding)
) )
NavigationDrawerItem(
label = { Text(stringResource(R.string.navigation_recycle_bin)) },
icon = { Icon(Icons.Default.Delete, contentDescription = stringResource(R.string.navigation_recycle_bin)) },
selected = currentDestination is AppDestination.RecycleBin,
onClick = { viewModel.navigateTo(AppDestination.RecycleBin.route, currentDestination.route) },
modifier = Modifier.padding(NavigationDrawerItemDefaults.ItemPadding)
)
} }
} }
} }

View File

@@ -48,7 +48,7 @@ fun RecycleBinScreen(
modifier = modifier.fillMaxSize(), modifier = modifier.fillMaxSize(),
contentAlignment = Alignment.Center contentAlignment = Alignment.Center
) { ) {
Column(horizontalAlignment = Alignment.CenterHorizontally) { Column(modifier = Modifier.padding(start = 10.dp, end = 10.dp), horizontalAlignment = Alignment.CenterHorizontally) {
Icon( Icon(
Icons.Default.DeleteOutline, Icons.Default.DeleteOutline,
contentDescription = "Recycle bin background icon", contentDescription = "Recycle bin background icon",

View File

@@ -2,13 +2,19 @@ package com.wismna.geoffroy.donext.presentation.screen
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Checklist
import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
@@ -33,7 +39,14 @@ fun TaskListScreen(
modifier = modifier.fillMaxSize(), modifier = modifier.fillMaxSize(),
contentAlignment = Alignment.Center contentAlignment = Alignment.Center
) { ) {
Text(stringResource(R.string.tasklist_no_tasks)) Column (modifier = Modifier.padding(start = 10.dp, end = 10.dp), horizontalAlignment = Alignment.CenterHorizontally) {
Icon(
Icons.Default.Checklist,
contentDescription = "Due today background icon",
modifier = Modifier.size(60.dp),
tint = MaterialTheme.colorScheme.secondary)
Text(stringResource(R.string.tasklist_no_tasks), color = MaterialTheme.colorScheme.secondary)
}
} }
return return
} }

View File

@@ -4,7 +4,7 @@
<string name="navigation_recycle_bin">Corbeille</string> <string name="navigation_recycle_bin">Corbeille</string>
<string name="navigation_due_today">À faire aujourd\'hui</string> <string name="navigation_due_today">À faire aujourd\'hui</string>
<string name="action_create_list">Créer une tâche</string> <string name="action_create_list">Créer une tâche</string>
<string name="tasklist_no_tasks">Cliquez sur + pour créer un nouvelle tâche.</string> <string name="tasklist_no_tasks">Cliquez sur + pour créer une nouvelle tâche.</string>
<string name="recycle_bin_no_tasks">La corbeille est vide</string> <string name="recycle_bin_no_tasks">La corbeille est vide</string>
<string name="today_no_tasks">Rien à faire aujourd\'hui !</string> <string name="today_no_tasks">Rien à faire aujourd\'hui !</string>
<string name="task_title_new">Nouvelle tâche</string> <string name="task_title_new">Nouvelle tâche</string>
@@ -47,4 +47,8 @@
<string name="snackbar_message_task_list_recycle">Liste de tâches déplacée dans la corbeille.</string> <string name="snackbar_message_task_list_recycle">Liste de tâches déplacée dans la corbeille.</string>
<string name="snackbar_message_task_restore">Tâche restaurée</string> <string name="snackbar_message_task_restore">Tâche restaurée</string>
<string name="snackbar_action">Annuler</string> <string name="snackbar_action">Annuler</string>
<string name="sample_list_personal">Personnel</string>
<string name="sample_list_work">Travail</string>
<string name="sample_list_shopping">Shopping</string>
<string name="tasklists_no_task_list">Aucune liste de tâches. Cliquez sur + pour en créer une.</string>
</resources> </resources>

View File

@@ -50,6 +50,8 @@
<string name="dialog_empty_task_cancel">Cancel</string> <string name="dialog_empty_task_cancel">Cancel</string>
<string name="dialog_empty_task_delete">Empty</string> <string name="dialog_empty_task_delete">Empty</string>
<string name="tasklists_no_task_list">No task lists. Tap the + button to create one.</string>
<string name="tasklist_new_title">New list</string> <string name="tasklist_new_title">New list</string>
<string name="tasklist_new_name">Title</string> <string name="tasklist_new_name">Title</string>
<string name="tasklist_new_create">Create</string> <string name="tasklist_new_create">Create</string>
@@ -60,4 +62,8 @@
<string name="snackbar_message_task_list_recycle">Task list moved to recycle bin</string> <string name="snackbar_message_task_list_recycle">Task list moved to recycle bin</string>
<string name="snackbar_message_task_restore">Task restored</string> <string name="snackbar_message_task_restore">Task restored</string>
<string name="snackbar_action">Undo</string> <string name="snackbar_action">Undo</string>
<string name="sample_list_personal">Personal</string>
<string name="sample_list_work">Work</string>
<string name="sample_list_shopping">Shopping</string>
</resources> </resources>