A feature-rich, native Android todo application built with Kotlin and Room Database, following clean architecture principles and modern Android development practices.
- โ Create, Edit, Delete todos with comprehensive form validation
- ๐ฏ Priority levels (High/Medium/Low) with color-coded visual indicators
- ๐ Due date & time management with date/time pickers
- ๐ Smart reminders with notification scheduling using AlarmManager
- โ๏ธ Rich text descriptions with multi-line support
- ๐ Real-time search across todo titles with instant results
- ๐ Multiple sorting options:
- Newest First (default)
- Priority-based sorting
- Due date sorting (earliest/latest)
- ๐๏ธ Intuitive toolbar controls with search bar integration
- ๐จ Visual indicators for overdue tasks with warning icons
- ๐ Dynamic date formatting showing days overdue
- ๐จ Color-coded urgency (red text for overdue items)
- ๐ Dedicated completed todos view with distinct styling
- ๐ฌ Smooth slide animations when marking todos as incomplete
- ๐จ Visual differentiation (strikethrough text, muted colors, transparency)
- โฉ๏ธ One-tap reactivation to move todos back to active list
- ๐ App statistics (total, active, completed todos, completion rate)
- ๐๏ธ Bulk operations:
- Clear all todos
- Clear completed todos only
- Clear all scheduled reminders
- ๐ Comprehensive app information
UI Layer (Activities/Fragments)
โ
ViewModel Layer (State Management)
โ
Domain Layer (Business Logic)
โ
Repository Layer (Data Abstraction)
โ
Data Layer (Room Database)
- Language: Kotlin 100%
- Database: Room Persistence Library
- Architecture: MVVM with LiveData/StateFlow
- UI: Material Design 3 components
- Async: Coroutines + Flow for reactive programming
- DI: Manual dependency injection (ViewModelFactory pattern)
- Notifications: AlarmManager + NotificationManager
Room Database โ Flow<List<Todo>> โ ViewModel โ StateFlow โ UI Updates- Real-time UI updates using Kotlin Flows
- Automatic data synchronization across screens
- No manual refresh needed
data class TodoViewUiState(
val isLoading: Boolean = false,
val todos: List<Todo> = emptyList(),
val searchQuery: String = "",
val isSearchActive: Boolean = false,
val currentSortOption: SortOption = SortOption.CREATED_DESC
)@Entity(tableName = "todos")
data class Todo(
@PrimaryKey(autoGenerate = true)
var id: Long = 0L,
val title: String,
val description: String,
val priority: Priority,
val dueDate: LocalDateTime,
val reminderDateTime: LocalDateTime? = null,
val isCompleted: Boolean = false
)| Main Screen | Completed Todos | Add Todo | Sort Options |
|---|---|---|---|
![]() |
![]() |
![]() |
The app features a clean, Material Design interface with intuitive navigation and visual feedback
- ๐จ Consistent color scheme with priority-based card backgrounds
- ๐ฑ Responsive layouts using ConstraintLayout and CardView
- โจ Smooth animations for state transitions and user interactions
- ๐ Loading states with progress indicators
- ๐ฏ One-handed usage with bottom-positioned FAB
- โก Instant feedback with toast messages and visual confirmations
- ๐ Confirmation dialogs for destructive actions
- ๐ฑ Proper keyboard handling in search mode
- โฐ Precise timing using AlarmManager for exact notifications
- ๐ Permission handling for Android 13+ notification permissions
- ๐ฏ Automatic cancellation when todos are completed or deleted
- ๐ Database-level filtering using Room SQL queries
- โก Debounced input to prevent excessive database calls
- ๐๏ธ Clean state management with search activation/deactivation
- ๐พ Robust error handling with Result wrapper pattern
- ๐ Automatic data validation at multiple layers
- ๐ Efficient queries with proper indexing
- Android Studio Arctic Fox or later
- Android SDK 24+ (Android 7.0)
- Kotlin 1.8+
# Clone the repository
git clone https://github.com/yourusername/todo-app.git
# Open in Android Studio
cd todo-app
# File -> Open -> Select project folder
# Build and run
./gradlew assembleDebug// Room Database
implementation "androidx.room:room-runtime:2.5.0"
implementation "androidx.room:room-ktx:2.5.0"
// Coroutines & Flow
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3"
// Lifecycle & ViewModel
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.7.0"
// Material Design
implementation "com.google.android.material:material:1.9.0"- ๐ Data Export/Import (CSV, JSON)
- ๐ Dark Mode support
- ๐ฑ Widget for home screen
- ๐ Cloud Sync with Firebase
- ๐ Analytics and productivity insights
- ๐จ Custom themes and color schemes
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
This project is licensed under the MIT License - see the LICENSE file for details.
Saptarshi Das
- ๐ง Email: saptarshidas0101@gmail.com
- ๐ผ LinkedIn: Saptarshi Das
- ๐ฑ GitHub: @babatezpur
Built with โค๏ธ using modern Android development practices


