Skip to content

11nonali23/Advanced-Workout-Clock

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 

Repository files navigation

Advanced Workout Clock

This applications was developed during Covid19 pandemic to encourage people triying HIIT workouts at home. This app features an interval timer with high personalization and a chronometer with charts to track performances. The app is offically on the play store Link to app

Basic features of the app

  • The user can create an activity for the chronometer and store the timings he does for the activities. The timings are visible and deletable.

  • The user can create an activity for an interval timer and schedule the timings to do, that are also divided into work and rest. The interval timer can be stopped, paused, resetted and fast forwarded.

  • The data stored for the chronometer and for the timer will be plotted into line charts.

  • The app support 4 languages: English (default), France, Spanish, Italian.

  • The app supports different screen size: normal, large, x-large

    Front-End

The front-end is made by following material design guidelines for Android.

You can check a front-end presentation here: https://www.youtube.com/watch?v=GXI3JSY52rQ

chronometer front end timer front end

timer activities front end charts_front_end

Back-End

The interval timer uses the Shared Preferences of the phone in order not to lose the timings already done.

Every part of the application uses MVP pattern in order the separate the development. This make every part testable and highly flexible: a programmer can implement the database ingoring the other components. Every component of the pattern implements the interface defined in the contract package.

Since I attach a presenter to a fragment, the presenter need to be almost stateless beacuse they are on different layers of architecture and lifecycle. The only un-stateless parts of the presenter are connected to the db.

MVP sequence_diagram

Presenter pseudocode

override fun presenterExapmle(args)
{
    if (model == null)
    {   view.notifyUserInternalError(); return   }

    if (checkConditions(args)== ERROR)
    {    view.displayTheError(); return }

    doTheLogic()

    model!!.interactWithModel()

    view.displayResults("R.string.SomeResultString")
}

Database Design Document

Database Design Doc

Releases

No releases published

Packages

No packages published

Languages