From a000eff8cc13854c770d5b8490a36c3e67bf4a08 Mon Sep 17 00:00:00 2001
From: Geoffroy Bonneville <24917789+wismna@users.noreply.github.com>
Date: Thu, 30 Oct 2025 12:32:36 -0400
Subject: [PATCH] Update packages Add french translation Migrate VM strings
resources
---
.idea/caches/deviceStreaming.xml | 24 +++++++++
.idea/dictionaries/project.xml | 1 +
donextv2/build.gradle.kts | 6 +--
.../donext/domain/model/AppDestination.kt | 3 --
.../donext/presentation/screen/MainScreen.kt | 16 ++++--
.../donext/presentation/screen/TaskScreen.kt | 6 ++-
.../donext/presentation/ui/events/UiEvent.kt | 2 +-
.../viewmodel/DueTodayViewModel.kt | 5 +-
.../viewmodel/ManageListsViewModel.kt | 3 +-
.../viewmodel/RecycleBinViewModel.kt | 3 +-
.../viewmodel/TaskListViewModel.kt | 5 +-
.../presentation/viewmodel/TaskViewModel.kt | 1 -
donextv2/src/main/res/values-fr/strings.xml | 50 +++++++++++++++++++
donextv2/src/main/res/values/strings.xml | 16 +++---
14 files changed, 115 insertions(+), 26 deletions(-)
create mode 100644 donextv2/src/main/res/values-fr/strings.xml
diff --git a/.idea/caches/deviceStreaming.xml b/.idea/caches/deviceStreaming.xml
index 45290de..a2c5a7a 100644
--- a/.idea/caches/deviceStreaming.xml
+++ b/.idea/caches/deviceStreaming.xml
@@ -342,6 +342,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
@@ -765,6 +777,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.idea/dictionaries/project.xml b/.idea/dictionaries/project.xml
index 83a788d..50a7873 100644
--- a/.idea/dictionaries/project.xml
+++ b/.idea/dictionaries/project.xml
@@ -2,6 +2,7 @@
donext
+ snackbar
\ No newline at end of file
diff --git a/donextv2/build.gradle.kts b/donextv2/build.gradle.kts
index 85bc6c9..992e26d 100644
--- a/donextv2/build.gradle.kts
+++ b/donextv2/build.gradle.kts
@@ -51,7 +51,7 @@ 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.10.00"))
+ implementation(platform("androidx.compose:compose-bom:2025.10.01"))
implementation("androidx.compose.ui:ui")
implementation("androidx.compose.ui:ui-graphics")
implementation("androidx.compose.ui:ui-tooling-preview")
@@ -62,12 +62,12 @@ dependencies {
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.10.00"))
+ androidTestImplementation(platform("androidx.compose:compose-bom:2025.10.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.2"
+ val roomVersion = "2.8.3"
implementation("androidx.room:room-runtime:$roomVersion")
ksp("androidx.room:room-compiler:$roomVersion")
diff --git a/donextv2/src/main/java/com/wismna/geoffroy/donext/domain/model/AppDestination.kt b/donextv2/src/main/java/com/wismna/geoffroy/donext/domain/model/AppDestination.kt
index eb3432c..bdee2c8 100644
--- a/donextv2/src/main/java/com/wismna/geoffroy/donext/domain/model/AppDestination.kt
+++ b/donextv2/src/main/java/com/wismna/geoffroy/donext/domain/model/AppDestination.kt
@@ -13,16 +13,13 @@ sealed class AppDestination(
object DueTodayList : AppDestination(
route = "todayList",
title = "Due Today",
- showBackButton = false,
)
object ManageLists : AppDestination(
route = "manageLists",
title = "Manage Lists",
- showBackButton = false,
)
object RecycleBin : AppDestination(
route = "recycleBin",
title = "Recycle Bin",
- showBackButton = false,
)
}
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 b0e539f..e83e9c8 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
@@ -57,6 +57,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalConfiguration
+import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Dialog
@@ -199,7 +200,7 @@ fun AppContent(
) {
val scope = rememberCoroutineScope()
val snackbarHostState = remember { SnackbarHostState() }
- val snackbarActionLabel = stringResource(R.string.snackbar_action)
+ val context = LocalContext.current
LaunchedEffect(Unit) {
viewModel.uiEventBus.events.collectLatest { event ->
@@ -211,8 +212,8 @@ fun AppContent(
is UiEvent.NavigateBack -> navController.popBackStack()
is UiEvent.ShowUndoSnackbar -> {
val result = snackbarHostState.showSnackbar(
- message = event.message,
- actionLabel = snackbarActionLabel,
+ message = context.getString(event.message),
+ actionLabel = context.getString(R.string.snackbar_action),
duration = SnackbarDuration.Short
)
if (result == SnackbarResult.ActionPerformed) {
@@ -238,7 +239,14 @@ fun AppContent(
snackbarHost = { SnackbarHost(hostState = snackbarHostState) },
topBar = {
TopAppBar(
- title = { Text(viewModel.currentDestination.title) },
+ title = { Text(
+ when (viewModel.currentDestination) {
+ is AppDestination.DueTodayList -> stringResource(R.string.navigation_due_today)
+ is AppDestination.ManageLists -> stringResource(R.string.navigation_edit_lists)
+ is AppDestination.RecycleBin -> stringResource(R.string.navigation_recycle_bin)
+ else -> viewModel.currentDestination.title
+ }
+ )},
colors = TopAppBarDefaults.topAppBarColors(
containerColor = MaterialTheme.colorScheme.primaryContainer,
titleContentColor = MaterialTheme.colorScheme.onPrimaryContainer,
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 2231801..1f12528 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
@@ -63,7 +63,11 @@ fun TaskScreen(
Column(Modifier.padding(16.dp)) {
Text(
- viewModel.screenTitle(),
+ stringResource(
+ if (viewModel.isDeleted) R.string.task_title_deleted
+ else
+ if (viewModel.isEditing()) R.string.task_title_edit
+ else R.string.task_title_new),
style = MaterialTheme.typography.titleLarge
)
Spacer(Modifier.height(8.dp))
diff --git a/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/ui/events/UiEvent.kt b/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/ui/events/UiEvent.kt
index 5202ca2..8d350ac 100644
--- a/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/ui/events/UiEvent.kt
+++ b/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/ui/events/UiEvent.kt
@@ -9,7 +9,7 @@ sealed class UiEvent {
data class CreateNewTask(val taskListId: Long) : UiEvent()
data object CloseTask : UiEvent()
data class ShowUndoSnackbar(
- val message: String,
+ val message: Int,
val undoAction: () -> Unit
) : UiEvent()
}
\ No newline at end of file
diff --git a/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/viewmodel/DueTodayViewModel.kt b/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/viewmodel/DueTodayViewModel.kt
index 6868ffa..f5daa72 100644
--- a/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/viewmodel/DueTodayViewModel.kt
+++ b/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/viewmodel/DueTodayViewModel.kt
@@ -5,6 +5,7 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
+import com.wismna.geoffroy.donext.R
import com.wismna.geoffroy.donext.domain.model.Task
import com.wismna.geoffroy.donext.domain.usecase.GetDueTodayTasksUseCase
import com.wismna.geoffroy.donext.domain.usecase.ToggleTaskDeletedUseCase
@@ -48,7 +49,7 @@ class DueTodayViewModel @Inject constructor(
uiEventBus.send(
UiEvent.ShowUndoSnackbar(
- message = "Task done",
+ message = R.string.snackbar_message_task_done,
undoAction = {
viewModelScope.launch {
toggleTaskDoneUseCase(taskId, false)
@@ -65,7 +66,7 @@ class DueTodayViewModel @Inject constructor(
uiEventBus.send(
UiEvent.ShowUndoSnackbar(
- message = "Task moved to recycle bin",
+ message = R.string.snackbar_message_task_recycle,
undoAction = {
viewModelScope.launch {
toggleTaskDeletedUseCase(taskId, false)
diff --git a/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/viewmodel/ManageListsViewModel.kt b/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/viewmodel/ManageListsViewModel.kt
index 87ebe93..4df4eb0 100644
--- a/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/viewmodel/ManageListsViewModel.kt
+++ b/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/viewmodel/ManageListsViewModel.kt
@@ -6,6 +6,7 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
+import com.wismna.geoffroy.donext.R
import com.wismna.geoffroy.donext.domain.model.TaskList
import com.wismna.geoffroy.donext.domain.usecase.AddTaskListUseCase
import com.wismna.geoffroy.donext.domain.usecase.DeleteTaskListUseCase
@@ -58,7 +59,7 @@ class ManageListsViewModel @Inject constructor(
uiEventBus.send(
UiEvent.ShowUndoSnackbar(
- message = "Task list moved to recycle bin",
+ message = R.string.snackbar_message_task_list_recycle,
undoAction = {
viewModelScope.launch {
deleteTaskListUseCase(taskListId, false)
diff --git a/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/viewmodel/RecycleBinViewModel.kt b/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/viewmodel/RecycleBinViewModel.kt
index ebc5c96..552a413 100644
--- a/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/viewmodel/RecycleBinViewModel.kt
+++ b/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/viewmodel/RecycleBinViewModel.kt
@@ -6,6 +6,7 @@ import androidx.compose.runtime.setValue
import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
+import com.wismna.geoffroy.donext.R
import com.wismna.geoffroy.donext.domain.model.Task
import com.wismna.geoffroy.donext.domain.model.TaskWithListName
import com.wismna.geoffroy.donext.domain.usecase.EmptyRecycleBinUseCase
@@ -64,7 +65,7 @@ class RecycleBinViewModel @Inject constructor(
uiEventBus.send(
UiEvent.ShowUndoSnackbar(
- message = "Task restored",
+ message = R.string.snackbar_message_task_restore,
undoAction = {
viewModelScope.launch {
toggleTaskDeletedUseCase(taskId, true)
diff --git a/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/viewmodel/TaskListViewModel.kt b/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/viewmodel/TaskListViewModel.kt
index f69ea4a..6688338 100644
--- a/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/viewmodel/TaskListViewModel.kt
+++ b/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/viewmodel/TaskListViewModel.kt
@@ -6,6 +6,7 @@ import androidx.compose.runtime.setValue
import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
+import com.wismna.geoffroy.donext.R
import com.wismna.geoffroy.donext.domain.model.Task
import com.wismna.geoffroy.donext.domain.usecase.GetTasksForListUseCase
import com.wismna.geoffroy.donext.domain.usecase.ToggleTaskDeletedUseCase
@@ -55,7 +56,7 @@ class TaskListViewModel @Inject constructor(
uiEventBus.send(
UiEvent.ShowUndoSnackbar(
- message = "Task done",
+ message = if (isDone) R.string.snackbar_message_task_done else R.string.snackbar_message_task_undone,
undoAction = {
viewModelScope.launch {
toggleTaskDoneUseCase(taskId, !isDone)
@@ -71,7 +72,7 @@ class TaskListViewModel @Inject constructor(
uiEventBus.send(
UiEvent.ShowUndoSnackbar(
- message = "Task moved to recycle bin",
+ message = R.string.snackbar_message_task_recycle,
undoAction = {
viewModelScope.launch {
toggleTaskDeletedUseCase(taskId, false)
diff --git a/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/viewmodel/TaskViewModel.kt b/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/viewmodel/TaskViewModel.kt
index cecd25b..c0eba87 100644
--- a/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/viewmodel/TaskViewModel.kt
+++ b/donextv2/src/main/java/com/wismna/geoffroy/donext/presentation/viewmodel/TaskViewModel.kt
@@ -55,7 +55,6 @@ class TaskViewModel @Inject constructor(
}
}
- fun screenTitle(): String = if (isDeleted) "Task details" else if (isEditing()) "Edit Task" else "New Task"
fun isEditing(): Boolean = editingTaskId != null
fun onTitleChanged(value: String) { title = value }
fun onDescriptionChanged(value: String) { description = value }
diff --git a/donextv2/src/main/res/values-fr/strings.xml b/donextv2/src/main/res/values-fr/strings.xml
new file mode 100644
index 0000000..9e2f615
--- /dev/null
+++ b/donextv2/src/main/res/values-fr/strings.xml
@@ -0,0 +1,50 @@
+
+
+ Edition des listes
+ Corbeille
+ À faire aujourd\'hui
+ Créer une tâche
+ Cliquez sur + pour créer un nouvelle tâche.
+ La corbeille est vide
+ Rien à faire aujourd\'hui !
+ Nouvelle tâche
+ Edition de tâche
+ Détails de la tâche
+ Titre
+ Description
+ Priorité
+ Basse
+ Normale
+ Haute
+ Echéance
+ Créer
+ Sauvegarder
+ Annuler
+ Hier
+ Aujourd\'hui
+ Demain
+ Mettre à la corbeille
+ Supprimer
+ Restaurer
+ Terminée
+ En cours
+ OK
+ Annuler
+ Supprimer la tâche
+ Êtes-vous sûr de vouloir supprimer cette tâche ? Cette action ne peut être annulée.
+ Annuler
+ Supprimer
+ Vider la corbeille
+ Êtes-vous sûr de vider la corbeille ? Cette action ne peut être annulée.
+ Annuler
+ Vider
+ Nouvelle liste
+ Titre
+ Créer
+ Tâche terminée.
+ Tâche active.
+ Tâche placée dans la corbeille.
+ Liste de tâches déplacée dans la corbeille.
+ Tâche restaurée
+ Annuler
+
\ No newline at end of file
diff --git a/donextv2/src/main/res/values/strings.xml b/donextv2/src/main/res/values/strings.xml
index adc49a6..68d9f85 100644
--- a/donextv2/src/main/res/values/strings.xml
+++ b/donextv2/src/main/res/values/strings.xml
@@ -1,8 +1,8 @@
- DoNext
- MainActivity
+ DoNext
+ MainActivity
- DoNext v2
+ DoNext v2
Edit lists
Recycle Bin
Due Today
@@ -15,6 +15,7 @@
New Task
Edit Task
+ Task Details
Title
Description
Priority
@@ -53,9 +54,10 @@
Title
Create
- Task done
- Task undone
- Task moved to recycle bin
- Task restored
+ Task done
+ Task undone
+ Task moved to recycle bin
+ Task list moved to recycle bin
+ Task restored
Undo
\ No newline at end of file