How to I install the widgets as shown in the screen shot?
On your home screen, press on an empty area for a few seconds until the context menu appears. Choose "Widget" for a selection of widgets installed on your phone. The widgets for the birthday app all start with the application name, followed by their size.
2x1 means the widget is two cells wide and has a height of one cell. Depending on the size, more or less information will be shown. The largest version shows up to three upcoming events.
How to add, change or delete a birthday?
The most direct way is on the first page, press on the contact for a few seconds until the context menu appears. Here you can choose between adding a new event, changing the existing one or delete the selected event.
Alternatively, click on an event to open the contact details page. Click on the event you want to edit to do so.
But the contact I have in mind does not show up in this list!
Probably because there is no event for the person yet. The main list shows contacts having events only.
To see all contacts, press the "Menu" button on the phone and select the "Contacts..." entry. A new page appears showing all contacts on your phone. Select one to add a new event to him / her.
I have so many friends that scrolling through the contact list takes too long...
A search box with smart filtering has been added the contact list. Enter a few letters and the name should show up.
The filter does not care about case, so "TO" gets you the same result as "to" or "tO".
What about calendar sync?
Being able to sync the birthdays with the calendar is one of the most requested features, so why is it not implemented yet?
I researched the problem thoroughly, went through the Android SDK documentation, several web pages and example code. Surprisingly, the calendar is not part of the Android framework. It is an add-on provided by Google or HTC or whoever else sells phones. Meaning here is no official documentation.
Some clever people reverse-engineered the access functions. But even though their code may work right now, there is no guarantee it will continue to work after the next update of the Android operating system.
From the point of view of a small developer, this is the perfect recipe for a support nightmare. Add a feature based on an undocumented API which may change without notice. It may or may not work and I have no way to ensure it does.
My goal is to procide a bug free and fully working application, this prohibits adding the calendar sync feature at the moment.
Since Android 2.2 you can enable calendar sync in the contact app. You can get there from the Birthday App from the contact details page -> Menu -> Edit Contact. Next to the event you see a check box labeled "Add to calendar". When you enable the check box, the event will be added to the calendar.
At the moment (v10.4) enabling the calendar sync breaks the edit functionality of the birthday app. You can change the date within the app, as soon as you disable the calendar integration your changes are overwritten. This bug is in process of being fixed. As the behavior of the Google calendar sync is not documented, it may take some time...
Android 4.0 Update
The Android 4.0 SDK documentation includes a documentation of the calendar API in the sense that the database fields are (finally) made public. It does not help much as the Birthday App supports Android 2.0 as well.
Which permissions do you need and what does it mean?
The Birthday App uses the permission READ_CONTACTS to access the contact database on your phone and read the names, phone numbers, email addresses and birthdays. WRITE_CONTACTS is used to be able to change birthdays, add new ones or delete existing ones.
ACCESS_NETWORK_STATE is used to determine if you have an active connection to the internet before trying to read the Facebook information. INTERNET access is used in the paid version only to query Facebook when you choose to do so. There is no other access to the internet implemented.
VIBRATE is needed for the notifications.
WRITE_EXTERNAL_STORAGE is needed for the Facebook cache data, the screen shots and the export functionality.
RECEIVE_BOOT_COMPLETED allows the app to restart timers for alarms and notifications.
CHECK_LICENSE does, of course, allow to check if the license is valid.
Why does the free version need more permissions?
To provide adds, the INTERNET has to be accessed. The COARSE_LOCATION is used to select the ads in accordance with your rough position, for instance the position provided by the wireless router you use to connect to the internet.