feat: Add comprehensive todo management system with Gemini-powered brain dump analysis

- Add TodoEntity, TodoDao, TodoRepository, and TodoRepositoryImpl for local todo storage with sync support
- Implement TodoViewModel with CRUD operations, group management, and subtask handling
- Create TodoScreen with Kanban-style board view, group-based organization, and drag-to-reorder support
- Add BrainDumpSheet for AI-powered task extraction from natural language input using Gemini API
- Implement TodoNot
This commit is contained in:
2026-02-13 15:51:39 -05:00
parent fc0fe3b30b
commit bccd5ea2d4
39 changed files with 4272 additions and 97 deletions
@@ -48,6 +48,7 @@ sealed class Screen(val route: String) {
fun createRoute(linkId: Int): String = "reader/$linkId"
}
object Reminders : Screen("reminders")
object Todo : Screen("todo")
}
@Composable
@@ -154,7 +155,6 @@ fun AppNavGraph(
onNavigateToTags = { navController.navigate(Screen.Tags.route) },
onNavigateToCollections = { navController.navigate(Screen.Collections.route) },
onNavigateToSettings = { navController.navigate(Screen.Settings.route) },
onNavigateToRandom = { },
onNavigateToHelp = { navController.navigate(Screen.Help.route) },
onNavigateToDeadLinks = { navController.navigate(Screen.DeadLinks.route) },
onNavigateToPinned = { navController.navigate(Screen.Pinned.route) },
@@ -162,6 +162,7 @@ fun AppNavGraph(
navController.navigate(Screen.Reader.createRoute(linkId))
},
onNavigateToReminders = { navController.navigate(Screen.Reminders.route) },
onNavigateToTodo = { navController.navigate(Screen.Todo.route) },
onPlayAudio = onPlayAudio,
initialTagFilter = tag,
initialCollectionId = collectionId
@@ -343,5 +344,16 @@ fun AppNavGraph(
}
)
}
composable(
route = Screen.Todo.route,
deepLinks = listOf(
navDeepLink { uriPattern = "shaarit://todo" }
)
) {
com.shaarit.presentation.todo.TodoScreen(
onNavigateBack = { navController.popBackStack() }
)
}
}
}