Monday, November 9, 2009

Droid

A solid smartphone on Verizon running Android? I couldn't resist, so I was one of the first in line on release day, and so far I love it. It's quite an upgrade and I've been impressed with how solidly it was put together, both in terms of hardware and software. But there are plenty of glowing reviews on the web, and so rather than rehashing what everyone else is saying, I thought I'd lay out my nitpicks and feature requests, both in terms of the user-experience and SDK features.

User Experience

Okay, so we'll start off with a common complaint from reviews. The camera blows, and it seems to be a software problem. Fix it. The flash is actually impressive for the size, but what's the point if the camera can't hold a focus.

Voice search is excellent. So is voice dial. But why are they not better integrated? I should be able to search for "dial 4085559210" to call that number. Right now, it picks up the text very accurately, but then searches google for the result. Bummer. Also, voice search should search over the nicknames I've entered. I don't want to say "Call Barbara", I want to say "Call Mom".

Easy access to more power modes. I love airplane mode. It's easy to enable and puts my phone in a more-silent-than-silent state, which I prefer during meetings and sleep. It would be great to support other profiles, specifically a "power saving" mode that enables only basic voice features, shuts down most background services, and keeps the screen dim. Good for long weekend outings.

Lost phones: Let me specify a list of contacts that can be called without entering the unlock code. This can help people return my phone if they feel so inclined. It's probably good enough to just let them call my favorites.

Long pressing the home screen brings up the list of recent apps. Why can't I long press one of those to kill it? Or restart it? The GUI should be updated to provide these options for the focused activity with one click.

Panning between home screens: make it faster. It should be powerful enough, and we see other plenty smooth animations. The pixels between screens are almost totally static, save for the widgets, so they should be cacheable in a framebuffer and the animation should be silky smooth. Of course this is probably a complicated issue, but it's the first thing people notice when they play with the phone.

SDK

Named intents. Intents are really great, but I have some issues. The information I should need to know to call an explicit intent are: (1) the name of an action and (2) the name of a package. I don't care which class within that package handles my request- that's for them to figure out.

Furthermore, intents should be manageable in the Manifest:

<namedIntent label="ScanQR">
   <action>com.google.zxing.client.android.SCAN</action>
   <package>com.google.zxing.client.android</package>
</namedIntent>
Later, in code:
Intent intent = new NamedIntent("ScanQR");

Additionally, we can use this (optional) package information to determine dependencies of our application, which the user can be requested to install. We can add a <mandate>optional/required</mandate> field as well.

Which brings up the next point... Improved dependencies in the manifest. We should be able to depend on other activities, services, as well as shared libraries (I'm sure there are much deeper issues that may make this very difficult..) For example, I've written several small apps, all of which require the SMACK XMPP library. This library is large, and it would be great to only require it once.

As a bonus, the system can integrate with Maven and other build systems in the future. This isn't work the android team should have to do, but it should be a consideration and left as a possibility for 3rd party work.

The Media Player sucks. Not just the interface, but the API as well. Why can't I send it an m3u to play? I want to take advantage of its widget and playlist GUI. Consistent view for the user, less work for me. And if the API were properly specified, they could drop in another player.

Timeline Layers: the map layers are cool, although I haven't seen whether or not they are customizable. Either way, I want to be able to add data to a timeline, and have a collective view. My note-taking apps should attach updates. My music player a play history. GPS tracks my steps. Put them all together in one timeline GUI.

ADT

The "sample" apps are great, and could be the start of something much bigger. But when I select one, I am set up with a project that edits the sample directly. This is just wrong- it should make a copy of the code and put it in my workspace so I don't ruin the original example.