A sample demo app (two screen todo list app) which has Clean Architecture with MVVM , UI built with Jetpack Compose and includes Modern Android Development Best Practices with components as below:
- Jetpack Compose - UI (Includes - Text, Button, Dropdown Menu, Date Picker, Toggle Switch, RecyclerView, ConstraintLayout and Floating Action Button)
- Kotlin Flow
- Hilt - Dependency injection
- Kotlin Coroutines
- Room with Coroutines & Flow Support
- Jetpack Datastore - Proto DataStore
- Jetpack Compose Navigation - With SafeArgs
- Jetpack Compose Theming - With Light & Dark Mode Support
This App is inspired by Working with Proto DataStore Google Codelabs and includes Local Data Storage support - with Room as well as Proto DataStore.
- Room - Saves the Tasks created by User
- Proto DataStore - Saves User Preferences(SortOrder and ShowCompleted flag)
Task List | Task Details | App Tour |
---|---|---|
Task List | Task Details | App Tour |
---|---|---|
com.bhavnathacker.jettasks
├── data # DATA LAYER
│ ├── local # Local Persistence (Room) Database
│ │ ├── TaskDao # Data Access Object for Room
│ │ └── TaskDatabase # Database Instance
│ └── repository # All Repositories implemetations
│ └── TaskRepositoryImpl # Task Repo linked to Room
│ └── UserPreferencesRepositoryImpl # User Preference Repo linked to DataStoree
├── domain # DOMAIN LAYER
│ ├── use_cases # Use cases to interact with Repositories
│ │ ├── TaskUseCases # To interact with Task Repository
│ │ └── UserPreferenceUseCases # To interact with User Preference Repository
│ └── model # Model Classes
│ │ └── Task
│ │ └── TaskStatus
│ │ └── TaskPriority
│ └── repository # All Repositories
│ └── TaskRepository # Task Repo linked to Room
│ └── UserPreferencesRepository # User Preference Repo linked to DataStore
│ └── UserPreferencesSerializer # Serializer for UserPreferences required by DataStore
├── di # DI LAYER (Hilt DI Module)
├── ui # UI LAYER
│ ├── components # Reusable UI components
│ ├── events # Events from Screens
│ ├── navigation # Navigation Routes & Navigation Graph
│ ├── states # States for Screen (e.g. TaskUiModel)
│ ├── screens # Task List and Detail Screens
│ ├── theme # Theme setup
│ ├── viewmodels # TaskListViewModel, TaskDetailViewModel
├── util # Extension functions
├── MainActivity.kt # MainActivity
├── TaskApplication # Application class
App follows MVVM & Guide to Recommended architecture.
You need Android Studio BumbleBee or above to build this project.
I would love to hear from you. Here are my details:
DM me at
- Twitter: @bhavnathacker14
- Email: bhavnathacker03@gmail.com
You are most Welcome to Contribute!
Please see Contributing Guidelines.
Apache 2.0 License
Copyright 2022 Bhavna Thacker
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.