The Android Call Location app was originally made for Android 2.2 (froyo). A lot has changed since then, so the code base was in dire need of an update. Over the course of the week I made the necessary changes to build against the latest API using the most recent build tools. When Google first made Android Studio available as a pre-release back in 2013, I started using it straight away. Using Gradle for the build process is much better than relying on an IDE and I’ve always preferred Intellij to Eclipse anyway. Now that Android Studio has a stable release I decided it was about time to change the project structure to the default that is used by the Gradle’s Android plugin: convention over configuration.
It’s not just project structure and build configurations that have changed. There were a number of changes that were required to get the app working again, most notably with the map view. I’m now making use of the newer Google Maps API which has changed significantly since version 1. There was some clean up work needed in the ListActivity that is used to display calls. In the main Activity there is a menu which used to be accessed via the handsets menu button. This has been deprecated since Android 3.0 in favour of having the menu button within the layout of the app itself, situated within the action bar. This was a problem for the Call Location app as the custom theme inherited from the base “android:Theme” which doesn’t include the action bar. This was easily fixed by setting the parent to “android:Theme.Holo“, not a big problem to fix but it would certainly be a problem to users if overlooked.
There are still some considerable changes that I’d like to make. Requests for results from the database should be using a CursorLoader and where a call is from a number that is stored within the phones contacts, the contact name should be displayed. The existing UI looks pretty old fashioned and is not in-line with Google’s Design Principles. If you’re interested in taking a more detailed look at the changes then please visit the repository.