Necessity is the mother of invention, and I needed a way to time my classes that I teach, unit by unit. I want to be able to track how close I am to meeting the goal time for each unit. So, I've been developing an application to fill this need, and wanting it to be versatile, I added features that others may find useful. The application stores data about the following items: Events, Timers, and Timer Archives and you can find it in the Android market as TimeIt.
The way I use an Event is to use it to represent a course like "RHCE Rapid Track", or "RHCSA Rapid Track", so I set my Event unit to pages. Other people may find that an Event may represent something like "Trip to San Francisco" or "Five Mile Run", and may want to set their Event unit to miles. I had a wonderful idea to add dollars as an event unit as well, which could serve people who work for a fee, as the application would calculate dollars per time unit selected.
The heart of the application is the Timers. I wanted them to be more robust than what I need, so I enabled them to load any started timers at boot time and create notifications for when their goal is supposed to be reached. That way, if you have to reboot your phone for any reason, any running timers will still send goal notifications.
How I use Timers is to store information about each unit that I have to teach. I set the distance to the number of pages that I have to cover, and the goal time to how long I am supposed to spend on that unit. Once the timer is started within the Timer editing screen it creates a notification to be sent by the alarm service, just like timers loaded at boot time.
I imagine other people might use Timers for each leg of a trip, or maybe for each mile out of the five. Each timer has a name, distance, goal time, start time, stop time, and note that the user can set. As it is now, once the start time is set, then you can only stop the timer, or clear the start and stop times. Surveying the market for timer applications, I can also imagine people using the timer to track how long they spent on a task that for which they might be paid hourly. It makes sense to add a timer rate field in a standard time unit, and let the user interface select and convert whether that rate is per fee, day, hour, or minute. As it does not make sense to pause a timer with a set start time, and a recorded finish time, it makes sense to have a time adjustment which could be used to either increase or decrease the amount of time involved in the calculations.
The last type of record stored in the application is called a Timer Archive. I included them for the ability to be able to reuse a Timer at a later date. My use case is that after I have completed a course, then I can I've thought about adding restrictions like requiring the Timer to be started and/or stopped, as well as offering to archive a Timer that is about to be cleared. As of now, you can create a Timer Archive from any Timer, and if you don't before you clear the Timer, then you would lose any start or stop times. Carrying forward the concept of money being involved, perhaps the Timer Archives could be for paid Timers.
The way the application presents itself starts with a list of any Events that you have created. I want to add sorting options to this list view, as well as coding the colour differently for active and finished Events. At the top of the view is a button to add a new Event. If you tap an Event, it takes you to a list of Timers for that Event. If you press on an Event, then you can go to add an Event, delete the Event you pressed on, delete all Events, or edit that Event, or show Timers for that Event.
For a new Event, the only fields used are the name for the event, and the event unit. All other fields are for your own information. The event date defaults to the current date, but you can use the Date button to choose a date. The event date is not used in any calculations or notifications. I am considering changing the event date to an event start date, adding an event stop date, and having event notifications.
After defining a new Event, typically you would go to tap on that Event, where the application will then allow the you to add a new Timer for the Event. If tapping an existing Event, then a list of Timers will be presented.
If an item in the Timers list has a white background colour, then the item lacks any set goal, start, or stop time. If it's background colour is blue, then a goal time has been set. If it's background colour is green, then the timer is running with a start time set. If it's background colour is red, then a stop time has been set. Using the menu, you can archive all timers, clear the start and stop times of all timers, add a timer or go back to the Event list.
If you tap go to Edit a Timer or use the Add button to add a Timer, then you will be on the Timer editing screen. This is where the user can define a name, distance and goal for the Timer. Once you start the Timer, it is saved into the database, and a future notification is scheduled if a goal has been set for that goal time. Using the menu, you can specifically save your changes, archive the timer, delete the timer, or go to view the Timer Archives list.
Once you modify a Timer Archive, then it will be tainted automatically, and show a yellow background colour in the Timer Archive list. I developed a custom time setting dialog window that allows the user to edit the time in hours, minutes and seconds, since the standard TimePicker dialog does not allow for the setting of seconds. You can not only tap on the buttons to increase or decrease the values, but you can hold them down to move them quickly. I would like to add AM/PM settings, so you want have to set time in a 24 hour clock.
I'm sure I will have more ideas myself, but I'd love to hear how you'd like to use it!