The Pomodoro Timer makes it easy to manage time and tasks and support dark mode
Pomodoro app has three features: task management, time management, and statistics graphs
The app architecture has three layers: a data layer, a domain layer and a UI layer.
The architecture follows a reactive programming model with unidirectional data flow. With the data layer at the bottom, the key concepts are:
- Higher layers react to changes in lower layers.
- Events flow down.
- Data flows up.
The data flow is achieved using streams, implemented using Kotlin Flows.
The data layer is implemented as an source of app data and business logic. It is the source of truth for all data in the app.
Repositories are the public API for other packages, they provide the only way to access the app data. The repositories typically offer one or more methods for reading and writing data.
The domain layer contains use cases. These are classes which have a single invocable method (operator fun invoke
) containing business logic.
These use cases are used to simplify and remove duplicate logic from ViewModels. They typically combine and transform data from repositories. Used use case for most of repository call but it is not necessary
The UI layer comprises:
- UI elements built using Jetpack Compose
- Android ViewModels
The ViewModels receive streams of data from use cases and repositories, and transforms them into UI state. The UI elements reflect this state, and provide ways for the user to interact with the app. These interactions are passed as events to the ViewModel where they are processed.
- Minimum SDK level 24
- Jetpack Compose
- Hilt
- Navigation
- Flow, Coroutine
- Splash Screen Api
- Data Store
- Toggle Tab => com.github.ocetin00:ToggleTab
- Firebase-crashlytics
- Room
- Chart => com.githPhilJay:MPAndroidChartub
- Some accompanist libs => navigation-animation, systemuicontroller
Developed by 2022 ocetin00 (Oğuzhan Çetin) and designed Burak Koçak
This project is licensed under the Creative Commons Attribution-NonCommercial (CC BY-NC) license.
This license allows others to use, distribute, and build upon your code for non-commercial purposes.
This license prohibits the use of your code for commercial purposes without obtaining additional permission from me.
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.