I've written a CountDown Timer app and I'd like input/suggestions on features which should be changed or added. The attached zip includes the readme.txt file and the Desktop-installable files. If you'd like to install OTA, the link is:http://johnstoneham.com/bb/CountDown.jad

For those installing OTA, I will paste the readme.txt here.

PLEASE NOTE: Time entry is done as a single number, with 2-digit groups automagically parsed into HH MM SS (e.g. 130 is 1 minute 30 second). This is done so that the time can be entered quickly in one text-entry field, without having to change from an hours field to a minutes field to a seconds field (which always bugged me about setting the time on the built-in alarm).

ALSO NOTE: The secondary alerts do not have a "seconds" part (e.g. a value of 2 for a secondary alert means 2 minutes, not 2 seconds).

Anyway, let me know what you think, and I'll be looking forward to your suggestions!

README.TXT

Code:

COUNTDOWN TIMER
----------------

Version 0.6
Copyright (c) 2006 by John Stoneham
captnjameskirk@yahoo.com

CountDown Timer is intended to serve one purpose: to be a simple, easy-to-use,
countdown-style timer with 0-time, secondary, and repeating alerts for
BlackBerry java-enabled devices. It is NOT intended to be a general purpose
chronograph or stopwatch with split times and millisecond accuracy.

TIME ENTRY:
Most of the settings should be fairly self-explanatory, however I should first
mention the unique way CountDown Timer displays and reads time values. Time
values do not contain separators between hours, minutes, and seconds, such as
":" or "|". Imagine a 4-digit number where the first 2 digits are minutes and
the last 2 digits are seconds, such as 1230 representing a time of 12 minutes
30 seconds, and it will be second nature almost immediately. However, the
number doesn't have to be 4 digits. If you only enter a 1- or 2-digit number
it would be in seconds, and a 5- or 6-digit number would be hours, minutes,
seconds. NOTE: Secondary alerts and repeating alerts DO NOT have a seconds part.
A value of 1 for a secondary alert would be 1 minute, not 1 second, and a value
of 100 for a secondary alert would be 1 hour, not 1 minute. See below for more
on secondary and repeating alerts.

A couple of examples will make the main time entry clear:

To enter a time of 30 seconds, enter: 30
To enter a time of 1 minute 0 seconds, enter 100
-If the number entered exceeds 2 digits, the two least
significant digits represent seconds. If you enter 60
to represent 1 minute, it will be converted to 100
when you click the Start Button.
To enter a time of 1 minute 30 seconds, enter 130
-Note that you could also enter 90, which would be
converted to 130 when you click the Start button.
This means it's possible to enter a value such as 190,
which would equal 1 minute 90 seconds, or 1 minutes plus
1 minute 30 seconds, which is 2 minutes 30 seconds. An
entry of 190 would be converted to 230 when you click
the Start button.
To enter a time of 10 minutes 0 seconds, enter 1000
To enter a time of 1 hour 30 minutes, enter 13000
-If the number entered exceeds 4 digits, the left-most
digits represent hours: HH MM SS (although the hours part
can be up to 4 digits, resulting in an 8-digit number).
Note, as explained above, that you could also enter 9000
here, which would be converted to 13000 when you click
the Start button.

START/STOP/PAUSE/RESET:
While counting down, the Start button becomes a Pause button. If you pause a
countdown, the button becomes a Resume button unless the time entry value has
changed while the countdown was running, in which case the button then becomes
a Start button again. If you edit the value of the time entry, either while
the timer is running or paused, this new value becomes the new countdown value
whenever the Start/Pause button is clicked. This means that you can edit the
timer entry field while the timer is running, but the new value will not take
effect until you click the Start/Pause/Resume button, or when you click the
Reset button. The Reset button, as its name implies, resets the timer to the
current value of the main timer entry field (which may be a new value). The
reset will take effect even if the timer is running, allowing for a quick
restart of a new countdown. Whenever the Start or Reset buttons are clicked,
the current values of the main timer and secondary alerts are saved and will
be the default values the next time the app is started. If you've edited a time
value but haven't used it (i.e. you haven't clicked the Start/Pause/Resume or
Reset buttons) that value won't be saved when you exit the app. You must use
a value to save it.

The ENTER key is a shortcut for pressing the Start/Pause/Resume button. This is
mainly useful when entering a value in the Timer entry field or one of the
alerts. Pressing ENTER in one of the time entry fields has the same effect as
clicking the Start/Pause/Resume button (that button will then have focus and be
selected). On some devices, this shortcut will work when outside the time entry
fields as well, but this behavior is unsupported.

When the total elasped time has expired, the main alert will play if "Tone" is
checked, and the device will vibrate if "Vibrate" is checked. An alternate tune
is available, called "Mosquito", which is faster and has a higher pitch than the
standard tune (which is called "Encounters"). The Mosquito tune may be more
noticeable and easier to hear in loud surroundings.

If you would like to see the elasped time displayed instead of time remaining,
select the "Elapsed" checkbox. This acts as a toggle and can be selected while
a countdown is running. The "L" key is a shortcut for selecting the Elapsed
checkbox, and is valid anywhere on the screen except for the time entry fields.
Pressing the "L" key toggles the Elasped checkbox and the countdown display will
then change between Elapsed Time and Remaining Time.

The "Z" key will zoom the current countdown time (the other screen elements are
not effected). There are 4 zoom levels, and pressing the "Z" key will toggle
between them. NOTE: Zooming is disabled when the time is greater than 100 hours.

MINIMIZE:
There are three ways to minimize the app, which will cause it to continue a
running countdown in the background. The "P" key (the single "O/P" key on the
7100/8100) is a shortcut key to minimize, which causes the app to immediately go
to the background. Pressing ESC will bring up a Quit Dialog box, one option of
which is "Minimize". Also, when the Quit Dialog is open, pressing ESC again will
minimize the app; this means that a quick shortcut to minimize the app is double
clicking the ESC key. If "Restore" is checked, when the specified time has
elapsed the timer will become the foreground app again and vibrate and play the
alert tone if those items are checked. If "Restore" is unchecked, it will remain
in the background but still vibrate and/or play the alert tone if those items
are checked. NOTE: Secondary alerts will not cause the app to restore, even if
"Restore" is checked.

SECONDARY ALERTS:
There are 4 additional time entry fields: Alert 1, Alert 2, Repeat Start, and
Repeat Every. Unlike the main time entry field, these fields DO NOT have a
"seconds" part (a value of 1 means 1 minute, and a value of 100 means 1 hour).
The Alert fields indicate that a secondary alert will sound when X time remains
in the countdown. Repeat Start marks a secondary alert as well, and it also sets
a threshhold time at which a repeating alert will begin. The actual value of the
repeat time is indicated by the Repeat Every field: an alert will sound at every
X interval, but as counted up from 0. For example, if Repeat Start is 6, and
Repeat Every is 2, an alert will sound with 6 minutes remaining, 4 minutes
remaining, and 2 minutes remaining. However, if Repeat Start is 7 and Repeat
Every is 2, an alert will sound with 7 minutes remaining, but the repeat alert
will actually begin with 6 minutes remaining (not 5), and repeat again with 4
minutes and 2 minutes remainining. If Repeat Start is 0 and Repeat Every is NOT
0, then the repeating alert begins when the countdown itself begins. All these
values can be edited while a countdown is in progress; however, they will not
take effect until the current countdown is reset or paused and restarted. If you
try to enter a value that would be out of range (for example, if the main timer
was set to 10 minutes and you try to enter a value of 30 minutes for an alert),
it will be reset to 0 when you press the Start/Pause/Resume or Reset buttons to
reflect the fact that the alert would have no effect.
NOTE: Secondary alerts will not vibrate unless *only* Vibrate is checked (i.e.,
Vibrate is checked but Tone is unchecked). In other words, secondary alerts are
"tone-only" alerts unless the main alert is "vibrate-only".

Sept 27, 2006
Release 0.5
-added an option to display elapsed time
-added the "Mosquito" tune
-added "Q" (reset), "ENTER" (start/pause), and "L" (elapsed/remaining)
shortcut keys
-fixed a bug where changes in the secondary and repeating alerts did not take
effect when the Reset button was clicked before clicking the Start button
-fixed a bug in which an exception was thrown if the Start button was pressed
while one of the time entry fields was completely empty
-fixed a stupid bug in the "vibrate only" setting

Release 0.5.1
-relabeled the "Start Timer"/"Pause Timer" button to "Start"/"Pause" so that
there is enough room on the 8100 (Pearl) display for the Elapsed checkbox

Sept 28, 2006
Release 0.5.2
-usability fixes:
*enforce maximum allowable time for main time and secondary/repeat times
*Start/Pause button now indicates "Resume" when a countdown is paused
-general code cleanup
-more specific description of time entry and alerts in the docs

Oct 23, 2006
Release 0.6
-added zooming feature and "z" shortcut key

obijohn

09-01-2006 01:01 PM

I forgot to mention that this probably requires OS 4.0 (4.1 is definitely ok). The API docs say that the audio functions I'm using require 4.0 or higher, so I guess that's true. I have tested it on just about every model in the Simulator pack and it appears to work fine on them all, but I only have 1 "real" unit (a 7100t running 4.1).

If you test it and it works on your unit, please post a reply to this thread stating the model you have and your OS version if you know it, so I can keep track of what models it's known to work on.

Thanks everyone!

Dispatcher35

09-01-2006 06:37 PM

Just installed it and tried it on a 7100i with 4.1 and worked like a champ. Only thing is the alert tone could be a little louder.

Mike

obijohn

09-01-2006 08:46 PM

Quote:

Originally Posted by Dispatcher35

Just installed it and tried it on a 7100i with 4.1 and worked like a champ. Only thing is the alert tone could be a little louder.

Mike

Thanks, glad it works ok for you! Unfortunately, RIM has not exposed an API that allows apps to play the tones and alerts already stored on the phone; the app has to create it's own, and the options are limited. The alert I'm using (anyone notice what it is?) already is at it's loudest volume, which is one reason I thought that vibrate should be offered in addition to the tone.

dbit

09-03-2006 12:47 PM

Thanks

This is great for playing cards, (raising the blinds). Works great on my 7130e.

Thanks
D.

rambo47

09-03-2006 01:25 PM

Very nice little app! I especially like that it's a very small application, eschewing a fancy interface for a no-nonsense countdown timer to save space. Does exactly what it's supposed to do, no more, no less.

obijohn

09-03-2006 02:23 PM

Quote:

Originally Posted by rambo47

Very nice little app! I especially like that it's a very small application, eschewing a fancy interface for a no-nonsense countdown timer to save space. Does exactly what it's supposed to do, no more, no less.

Thanks! One of my goals was for it to consume very few resources when "minimized" and running in the background.

patrickh

09-20-2006 08:55 PM

Features request:

May be a better time selection field and larger display of the count down.

Also, ability to set alerts before the timer expires.. like if it is a 15min count down, I would like to set multiple alerts at 10, 5, 1 minutes, etc. This would be helpful for chairing time-limited talks, etc.

P

obijohn

09-22-2006 03:34 PM

Quote:

Originally Posted by patrickh

Features request:

May be a better time selection field and larger display of the count down.

Done (I hope). I've enlarged the countdown display and given it a slightly different font, so it's much more visible. As for the time selection field, what I've done with my latest version (not yet uploaded, see below) is to have the cursor automatically jump to the end of the minutes section of the time field when you start the app. Like this: 25|00
This should be more convenient than starting at the very front or end of the field (like |2500 which it currently does, or 2500| which is the next best option). I've decided to stay with my original idea of not using separate fields for hours/minutes/seconds, for the reasons I've already explained.

Quote:

Also, ability to set alerts before the timer expires.. like if it is a 15min count down, I would like to set multiple alerts at 10, 5, 1 minutes, etc. This would be helpful for chairing time-limited talks, etc.
P

I've done a version of this as well, but before I upload it I wanted to get a general opinion on what would be more useful: a) repeating sub-alerts, e.g. every 5 minutes or 2 minutes or whatever until the total countdown is done and the final alert sounds; or b) a non-repeating x-minute warning, e.g. a single 5-minute or 2-minute warning before the countdown is done.

Actually, I could probably do this as a user-selectable option, now that I think about it. So you could chose either a non-repeating x-minute warning or a repeating x-minute alert until the final alert sounds, or none.

Let me know what you guys think. I may just go with this last idea, since it will be fairly easy to extend what I've already started.

I'll wait a day or so for some more input before uploading the new version, but if no one responds I'll go with my last idea.

Thanks for the input so far!

Inphektion

09-22-2006 04:21 PM

I think you should have two optional sections for user to configure alerts before timer hits 0.

So they set their time, lets say 2500
then there is an Optional alert section with two areas that can be configured

Sound alert at __x1__ time and then repeat every _x2__ time(s).
Sound alert at __y1__ time and then repeat every _y2__ time(s).

so for an example they could sound alert at 1500 and repeat 0 times
then sound alert at 500 and repeat every minute.

This gives the user the ability to set a "marker" so to speak but then a separate repeating interval.

With your way I could only have one non repeating alert or a repeating one.
So the user couldn't alert when 10 minutes are left and then every minute for the last 3. With the options above they could.
and a user could enter a value for x1 or nothing else or x1, x2. or x1 y1. or x1, y1 y2.

obijohn

09-22-2006 04:38 PM

Hmmm, this sort of sounds like a cascading alert. I realize it's not what you meant exactly, but it is another nice idea (I think). For example, a cascading alert would sound whenever the remaining time is 50% of the elapsed time since the previous alert. So if you set the timer for 20 minutes, it would go off with 10 minutes remaining, then 5 more remaining, then 2.5 minutes remaining... etc. Of course there would have to be a cutoff at, for example, the 30 second mark.

Anyway, that's not exactly what you mean, but I like the idea so I may incorporate it as well.

obijohn

09-24-2006 08:33 AM

I've incorporated some of the suggested changes. See the first post in this thread for the updated readme.txt file which explains all the changes.

Enjoy!

patrickh

09-24-2006 11:27 AM

You need a reset timer menu item / button..

I also suggest a quick double-ESC to minimize (move to background)..

obijohn

09-24-2006 12:50 PM

Quote:

Originally Posted by patrickh

You need a reset timer menu item / button..

Will do. Can't believe I didn't catch that one myself!

Quote:

I also suggest a quick double-ESC to minimize (move to background)..

Good idea. With the shortcut minimize keys and double-ESC, I can probably remove the Minimize button altogether. Should I leave it, or no?

obijohn

09-24-2006 05:36 PM

Ok, suggestions again incorporated into new version. See first post in thread.

cooperpwc

09-24-2006 08:53 PM

Quote:

Originally Posted by obijohn

Unfortunately, RIM has not exposed an API that allows apps to play the tones and alerts already stored on the phone; the app has to create it's own, and the options are limited.

The interesting thing is that the folks at RexWireless have found a way to tap into the Blackberry tunes and alerts system. ToDoMatrix adds itself as setting that can be fully adjusted in each profile. I'm not suggesting that you would want to go that far for your Timer app (which I'm about to test) but I thought that it would interest you to know.

cooperpwc

09-24-2006 09:09 PM

Perfect simple app. Thanks! It's a keeper.

PaCharger

09-24-2006 09:30 PM

pretty cool utility. I never carry a watch, or a stopwatch...now this will come in handy for a ton of stuff.

Added this and the NFL tracker, both pretty awesome tools.

Thanks!

JSanders

09-24-2006 10:54 PM

Great App, I've used it as timekeeper for my child's soccer games.

obijohn

09-25-2006 06:00 AM

Quote:

Originally Posted by cooperpwc

The interesting thing is that the folks at RexWireless have found a way to tap into the Blackberry tunes and alerts system. ToDoMatrix adds itself as setting that can be fully adjusted in each profile. I'm not suggesting that you would want to go that far for your Timer app (which I'm about to test) but I thought that it would interest you to know.

There are a couple of problems with this.
1) Implementing the feature you describe requires code signing keys issued by RIM (and paid for by the developer). Since I'm releasing this free, I can't afford to pay for the keys. I guess if I was going to charge $59 for an app like ToDoMatrix, then maybe I would consider it as an option.
2) Even if I paid for the keys, this type of alert can only be set by the user outside the app by editing the device profiles. There is no way to select and play a device ringtone/tune directly within an app.

Basically, the app itself cannot access the tunes on the device at all. For some reason, RIM just doesn't allow this. The way the above method works is the app issues a "play notification alert" command and whatever alert tune has been assigned in the user profile will play. And to do this requires the developer paying for code signing keys to get access to the necessary commands to create and access settings in the profiles.

To me, this whole thing is idiotic. Let's say I wrote a countdown timer for Windows. Can you imagine having to open the Windows Control Panel and edit the system Sound Properties to assign a particular tune for the timer to play, instead of simply being able to assign it in the application itself? And on top of this, Microsoft charging the developer a fee for the privilege of using such a wonderful setup? That's just crazy!