/PomodoroTimer

Manage your time and task with Pomodoro

Primary LanguageKotlin

The Pomodoro Timer makes it easy to manage time and tasks and support dark mode

Pomodoro Timer

License API

Pomodoro app has three features: task management, time management, and statistics graphs


Download

Architecture overview

The app architecture has three layers: a data layer, a domain layer and a UI layer.

Diagram showing overall app architecture

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.

Data layer

Diagram showing the data layer architecture

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.

Domain layer

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

UI Layer

The UI layer comprises:

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.

Diagram showing the UI layer architecture

Tech stack & Open-source libraries

  • 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

License

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.