Friday, November 4, 2011

An Alarm Clock Update(v1.5) went out to the Market tonight

I finally got around to a few fixes that this app had been waiting for. I did some layout clean up and fixed a significant feature oversight.

I am not the best UI designer and the xml layouts for android are a little strange for me to wrap my head around sometimes. I am still working out the kinks for how best to display my layouts. This iteration is a slight improvement on the last build. The snooze screen is the best improvement. The radio buttons are spread out and dynamically centered. This should resolve the complaints over the buttons being too close or too hard to hit.

The feature oversight I had was regarding the alarm after a reboot of the device. The widget and app would present as if the alarm was active and set for the time it was before the reboot. If you disabled and re-enabled the alarm you were fine, but it took me a few missed alarms until I figured out the pattern. Now there is a boot up receiver that sets the alarm accordingly on boot up. Now the only way to miss an alarm should be to have the device powered off over the alarm time.

Hope those with this app installed enjoy the improvements

Tuesday, June 28, 2011

Quick Update Before Vacation

Well, technically, vacation started today, but since most of the day was spent taking care of other necessary items and a lot of home searching, I figured why not throw a little coding in as well. I updated my most recent app, MyCallReminder, today. I added a couple new items as well as did some clean up and re-labeling.

As my last post said, this app is for a buddy of mine. Once I had the initial build put together, I quickly got some feedback on some tweaks that would be beneficial. There weren't many and each idea seemed like a good idea so I immediately got to work stubbing out the placeholders for the additional code.

After reviewing the ideas a few times, I was able to work off a very short list. Initially, my list was only to add 2 additional reminders as well as possibly throw the word "Sales" into the mix somewhere. The reminders were very straight forward, in terms of the request. Working "Sales" in though was only a side comment and not really one specifically requested for this update. However, after more testing and playing around with the app myself, I came up with a short bug list and a couple places where readability improvements could be made. Finally, my list was comprised of only a few items:
1. Re-Label everything to include the word "Sales" (Except the App name on the Android Market).
2. Add leading 0's to all date/time text strings where necessary(Days and Minutes)
3. Manage the data entry keyboard when entering a phone number (Should show the numeric keyboard)
4. Add 2 additional reminders with static offsets.

Items 1,2 and 3 were relatively quick fixes. I pretty much found every place where I was using "MyCallReminder" or "My Call Reminder" and added the word "Sales" before "Call" to resolve the labeling issue. For the leading 0's, a little extra code was added to check for Day and Minute values that were less than 10 and added a preceding '0' to the text displays of the alarms. (This only affected the user's readability of the date/time values). Finally, I located the property on the TextView object to force the value to be a Phone Number. This causes the Android OS to appropriately display the numeric keyboard when the user clicks on the Phone Number TextView for data entry.

The fourth item, adding 2 additional reminders, turned out to be a little harder than I originally anticipated. I should have known better; Things are always problematic when working with Dates/Times. In the initial release, there wasn't much code around the date/time of the reminder. Any conversion from text<=>date was done at a single spot in the code and was only for retrieving reminders from the app's local database. This change brought the requirement of managing the date/time to the main activity and was no longer as relevant as part of the data helper class. I needed to convert my date/time values into a type that allowed me to add either days (in 1,2 or 3 week increments) or months (in 1,2,3,6 or 12 month increments). Thanks to the Simple Date Format I was able to get there and without much issue. At first, I attempted to use a straight "Date" object, but found it to be very limiting in Java. I then used the Simple Date Format to get a Calendar Object, assuming the format string I previously decided to work with, and then used the Date Object to populate the Calendar Object. The Calendar object was then used to add either days/months to the date for the other reminders.

I was able to do some testing and between screwing with my phone's date/time settings as well as using the logcat output, I was able to verify the functionality enough. I am suspect there are still a couple bugs, but am waiting for more feedback before moving forward anymore. As I stated originally, I am on vacation so I am not sure if I will get my code cleaned/posted this/next week or not. I am trying to stay off the computer as much as possible. My mind continues to identify other areas of improvements so I may end up adding some new features/tweaks before I get anything posted, but we will have to see. I have a lot of family time planned and am really looking forward to disconnecting from the digital world for a couple weeks.

Sunday, June 19, 2011

My Call Reminder

I have put together a quick proof of concept app for a buddy of mine. He was looking for a simple reminder application that would include some minimal information and a phone number. When the reminder occurs, the user can then call the person directly from the application.

I have attached screen shots below of the application with some test information entered. The link to download the app is at https://market.android.com/details?id=DonnOSystems.Sales&feature=search_result

Basically, I expanded on my existing alarm clock application (the reminder) and stored each reminder in a database by ID. When a reminder is cleared, it is deleted from the database. I also start up a small activity that runs when the OS is booted so that the alarms in the database are created again as they don't persist between boots.

There isn't much to the application at this point. There are a couple improvements that could be done. I left this one ad free for the time being. I will probably get ads put in very soon though. Beyond ads, I figure there could be a list of configured reminders for editing them or deleting one as opposed to just removing all if a mistake is made. I think it would be valuable to build a data export/import as well since that will almost definitely  be necessary at some point in the future if this app lasts.



Sunday, April 3, 2011

Minor update

Well I didn't get anything done last night. I pretty much spent the whole night fighting eclipse. I updated a few things and had a heck of a time getting the IDE to open my project and build it. Eventually, I got it functional again, but just in time to call it a night and go to bed.

Tonight, I did get a little bit done and resolved my layout issues I was having with my app since I've switched to my EVO. Things were not scrolling correctly as they did on my Moment.

I have a picture below that shows the screen scrolled and you can even see the scroll bar on the right. It's a quick screenshot from my phone, but I wanted to get some kind of update posted.

Now I just have too find the time to implement the other functionality I want to.
Until then.....

Saturday, April 2, 2011

Itching to get time for MyMeasurements

Since I've gotten my Evo, I have little time to play with my own apps, not to mention any time to write any code. I have been keeping track of some new ideas and have been making sure to get some notes on paper. Without any code though, I am anxious to get programming and a real update posted.

I am looking to implement custom lists that the user can define as opposed to the hard coded one that currently exists. I am also looking for better integration of my XML notes so my different apps can coexist better. I am interested in implementing a finger drawing aspect as a feature test. It will be a pilot in this app but it's a proof of concept for another app I have been brainstorming and hope well be in development soon.

I have about 5 different I am chomping at the bit to make. I just have to find the time. With spring here, my apps will have to share my personal time with my motorcycle which will just make out a bit harder. The bike is put back together and has already been out for a couple quick spins around the block, but it's still waiting for the first real ride of the season.

I am going to try to get a little programing in tonight after the kids go to bed. I am getting this post blasted out from my phone while I wait for Delilah to finish her dinner. I think we are going to make a family trip to the store as soon as dinner is done and when we return it should be bed time for the little ones.

If I make any real headway tonight, I will follow up in the next couple days with an actual code posting.


Saturday, March 19, 2011

It's Spring Already!

I wish this was a project update, but just a post to prove I haven't abandoned these projects, I just haven't had the time.

It's Spring Already....The O'Malley's have been busy.

Saturday, February 12, 2011

MyMeasurements v1.5 Update Posted to the Market

Well this marks the end of a milestone that feels like it was long coming. I put together MyMeasurements in a couple hours one night after Jen mentioned the idea. The app didn't do much, but it did allow you to enter values and then email them automatically filling in the "To", "Subject" and "Message" text. The email address is hard coded to fill in StitchesByJeni@gmail.com since the app was built for her. The next day we brainstormed a bunch of new features that we wanted to implement. All of the ideas seemed pretty basic in theory and the quick web searching I did also implied it wouldn't be that difficult. I had a late night that night reworking the UI as desired, but didn't get much further.

Over the past couple of weeks, work has gotten very busy, even more so than usual. The little time I was still squeezing in late at night was proving to be spent mostly on trial and error within the Emulator. I made good progress, there were just a lot of test cases to run through and wiping the Emulator data every so often and rebuilding it to prevent corruption was very time consuming.

The version 1.5 update I finally posted today took as long as it did because of the time constraints and learning exercises. With most of the issues, I was able to find something that would get me 80% of the way quickly. The remaining 20% just seemed to drag on every time. However, I just kept pushing through and did end up with a really good understanding of the SQLlite and the 2.0+ contacts API interface.

In this update, The measurements can now be saved to a contact's notes field. When the app opens, it scans the phone's contacts looking for saved measurements and builds a short list for reference within the app. In addition to saving, the measurements can also be edited and deleted. Deleting is a bit of a misnomer as the measurements themselves are not actually deleted. Only the flag to indicate there are measurements to display is reset. This allows any saved measurements to persist with the contact until either new measurements are saved over the top again, or the user manually deletes the note from their contact. I also modified how I manage the advertisement display hiding the rectangle where the ads appear if there are no ads to be shown.

I am thinking about a paid version where the email could be configurable, the measurements could be stored in Metric and of course, free of advertisements. I am not sure when I will get around to that version, but it is somewhere out on the horizon.

The next steps with this application will be extending the features a little further. I want to change the way the measurements are stored within the notes field. Currently the way it is implemented, the notes field will be overwritten with the measurements. I want to change it so I can append the measurements to the existing note if one exists. I will also then need to be able to read the notes to parse out only the measurements and ignore any other text. I will also expose this as a configuration later that will allow the user to select if the measurements should be saved to notes. If not, they will be saved to a custom hidden field. I may even go as far as allowing them to select the option for using notes, as well as if it should overwrite, append and possibly which note field (1-14? that should be used)

I also want to implement a service or background task for loading the contact list and doing the more data intensive pieces. I am querying the contact database at the lowest levels possible so I am already optimized there, I just don't want any "Force Close" popups because somebody is using the application so much their contact list is huge.

Once those changes are in place, I am hoping I can then turn my focus to producing a paid version of the application. Just converting to a paid model and incorporating the Licensing API will be an experience. The first paid version may be simply the version without ads, we will just have to see.

I am going to try and follow up with a few minor tutorials exhibiting the different pieces I learned in case there are others out there looking for the same solutions I have been over the past few weeks. Hopefully it will save somebody else the time and effort I had to go through.

Here are some screenshots of the application. A couple are outdated but get the concept across:






Monday, January 31, 2011

Simple Alarm Clock has AdMob Integration

As of my last posting, I was having issues getting AdMob integrated into my applications. After a little android layout education, I learned my problem was entirely in my UI design. Also, through Google, I eventually found somebody that had something more than the SDK example and included a more complex layout with code.

The example code turned out to be relatively easy to modify after all the investigation I had done about layouts. I was able to simplify the code to just the basic pieces I was focusing on. Since I have been unable to find an equivalent example anywhere online, I will try to get to posting the code and explanation in the next couple of days. I have a decent base shell now that I will be using with all my free apps on the Market in the future.

I have posted my updated Alarm Clock to the Market which is now at version 1.2. In addition to the AdMob integration, I also added a widget. It displays the next alarm time or "Disabled" if there is no next alarm. There is also a button on the widget to open the alarm clock app. I will try to get some cleanup on the widget UI to make it cleaner/nicer but that will probably take back burner to other projects until I have enough free time to concentrate on that aspect.

Finally, to confirm I had the AdMob functionality down, I first created a test app, MyAdTest which is also posted to the Android Market. Download both, MyAdTest is useless, but leave it up for me for a bit and help generate a little coin for me; I will appreciate it. For now, the Alarm Clock and MyAdTest are the only two apps I have posted. I have a couple more that I will probably be putting up there soon. I have a little polishing to do on both but it should be manageable.

I forgot to get screenshots of the test ads before when I was still testing on the emulator. I will pull those up by the next posting as well.

Thursday, January 27, 2011

I'm On the Market - Simple Alarm Clock

I finally got back around to my Alarm Clock and made a few updates. It all started when I completed my Simple X10 Client and was thinking about releasing it as my "Free" client and then releasing the more feature-rich version for a fee.

Immediately I thought about the Android Market as well as integrating ads into my application. Since my alarm clock application was already completed and has served me well, I decided it would be the best candidate for looking to integrate ads and test it out.

I did a little bit of searching and advertisements seemed pretty simple. I picked a tutorial to follow and started downloading the necessary pieces. Eventually I had to go to AdMob.com set up an account. That process required information from the Android Market though and I had not taken that step yet.

I decided it was time and shelled out the $25 to become an official Android Market Developer. I reviewed the guidelines for publishing on the market and then set out putting icons together, screenshots and cleaned up my application. I renamed it from DonnsAlarm to SimpleAlarmClock and fixed a couple other minor things I didn't like about it. I tried to get the ads working, but kept running into issues. Eventually I just gave up and removed any of the code related to the advertisements. I typed up a little description, posted the icons and screenshots and then exported the signed apk file.

At this point, I was pretty excited to go online with my phone and download my application from the android market as opposed to from my home webserver. I easily found it by searching for "Simple Alarm Clock". Between my icon (left) and  my developer name 44D8 (appears under the app name), I was able to identify which was mine. I downloaded it, set an alarm for the morning and forgot about it.

The next morning though I had realized the mistake of not testing the app after the download. I screwed up the alarm function some how. What I found was, as I cleaned up the code, I deleted a little bit more than I should have and removed the entries for the alarm activity from the manifest.xml file.I just assumed that since I had been using the old DonnsAlarm version for months that it would just work. I realized it didn't work when my kids woke me up this morning, late, because they were calling for mom or dad from inside their room. The nice thing is they ensure I don't wake up too late no matter what. I was double pissed though when I realized I had overslept, I realized my first post was a defective app.

I got home tonight after work, downloaded the code from my original blog posting for the alarm app and filled in the missing pieces for my updated version. This time when I was all ready to post to the market, I downloaded it first to my phone and tested it.  When it worked, I posted to the market. I wanted to make sure I could get an update posted today so that anybody that had downloaded it could get an update and hopefully before the alarm fails them.

Currently the app is posted, for free and without any advertisement. I will probably continue to test the advertisement options with this until I get it. I am not sure if it will be kept on the alarm clock or not. Part of me wants to keep it off to keep it simple, but the other part wants to see what the advertisement model will do. We will just see. I think I want to figure out widgets next.

Here is the updated Simple Alarm Clock v1.1 project on box.net

Tuesday, January 25, 2011

Simple X10 Client 1.0 Released

I successfully screwed up my previous application I was developing and struggled with it for a couple days without any progress. Today though, the light bulb when on while driving home from work and I realized I could create a very simple application that does what I need at a very bare minimum. I knew my other application's issues were related to the extra functionality so I decided to cut it out for now. I do plan on returning to the more feature-rich version, but after I investigate the Android Advertisement model.

The final client is a very simple interface for issuing X10 commands over the internet. There is a Room Code Spinner which allows selection from A-P. There is a Unit Code Spinner which allows selection from 1-16. Finally there is a toggle button for picking which command to send.

I was able to build this app in just a couple hours tonight. I was able to steal a lot of code from my other application and that saved a lot of time.

Below is the project folder on Box.net. See the Arduino Server at arduino-donno.blogspot.com for the Web server interface.