We were in London last week for the Droidcon 2010, a conference around Android and mobile development. It was a two-day event with a barcamp the first day and a more traditional conference the second day. Main topics were User Experience, Android development in general and a little about marketing. There were many topics during these two days but we decided to cover the ones that appeared more relevant to us.
Pay attention on User Interface and User Experience
What stroke us most was how Google insisted on making good user interfaces (UI) and good user experience (UX) in applications. Two presentations made by two Google Android Developer Advocate (Roman Nurik and Reto Meier) dealt on this.
Roman Nurik first gave us many advices in UI to create great applications:
First impression is essential and not only concerns the application itself! On the market, the application must have a nice icon, a great description, a simple name and representative screenshots. Don’t think only about the app usage, promote it on a website or a blog with a consistent user interface (same colors, icons and style as the application).
Regarding the application, the first launch could be the opportunity to greet the user, eventually educate him with simple visual help or pictorial tutorial like Winamp or Goggles applications do:
Design for ease use. Avoid complicated registration process and ensure the user can use the application right away. Having a simple, graceful home screen showing the main features of the application is a must, the user knows at first sight what he can do:
Hierarchy the information in the interface and use primary UI navigation patterns (more important information at the top, main navigation at top).
He gave us some UI tips:
- Prefer 3 or 4 tabs at the top of the screen rather than 5+ at the bottom.
- Avoid navigation in the menu, navigation should be available on the screen.
- Avoid back button visible on the screen (contrary to iPhone): there’s a hardware button for that.
- Do not alter back stack and avoid a long back stack. It is awful to tap 50 times on back to return to the previous screen.
He concluded his presentation by talking about prototyping. Do not open your eclipse and code. First think about information you want to show and organize it. Use a pencil and some paper or use more sophisticated tools like Pencil (as Firefox plugin or standalone) and Adobe Fireworks (some stuff to help).
As for the new tools (http://code.google.com/p/android-ui-utils/). It provides some stencils for the Pencil tool. Very useful to create a realistic prototype very fast:
To ensure to create consistent icons with Android, he presented the Android Asset Studio and the Photoshop icon template and icon guidelines, useful to have great icons in your application and keep a UI consistent between applications. We often criticize Android applications look and feel but everything is provided to create good UI.
Then we saw Reto Meier, another Android Developer Advocate of Google who talked about user experience.
He gave many advices to give a great experience to users:
- Always inform the user of what’s happening: When loading information, use progress bars and progress dialog. Render view and fill data as it arrives (lists…).
- Avoid blocking and non-responsive UI: Use Thread and particularly AsyncTask! Your UI should respond in 100-200ms.
- But the most important: don’t fight against user (intuitive navigation flow) and don’t fight against system (Android native experience, back stack…)
You can find all these advices in his presentation available on YouTube (from Google I/O 2010). We strongly recommend every Android developer should watch and apply it… very instructive! User experience should be the first top priority of developers.
Think beyond the phone
Android devices are not only phones: tablets, TV, embedded hardware (cars…) with different resolutions, screen sizes (from 3” to more than 40”) and capabilities (no photo on some tablets, no accelerometer in TV!).
Al Sutton said that developers must think about that when developing applications. For example, tablets and TV are designed for landscape mode. Imagine turning your TV in your living room! Think large (use -large for your layouts), landscape (do not block in portrait mode) and adapt your UI to the device. Do not reproduce Twitter or Facebook apps which have bad UX (portrait only, a lot of unused space, small icons) on tablets as you can see below:
Another mistake is to confuse density and resolution. Developers must not assume that low density is for QVGA resolution, medium density is for HVGA resolution and high density is for WVGA resolution. These facts are generally true for phone device but not for tablets or TV. For example, Dell Streak (5″) is a WVGA MDPI tablet device and Samsung Galaxy Tab (7″) is a WSVGA HDPI device. Many details on how to manage different screens are available here.
Concerning other capabilities, use the PackageManager (getSystemAvailableFeature) to check the availability of a third party hardware (GPS, Accelerometer, compass, photo…) to avoid problems on runtime and avoid displaying non-available features on screen.
You are not alone!
When you develop an application, don’t think about your app only, think about the platform, others applications, others devices around you. That was clearly the message of Sean Owen, Mark Murphy and Friedger Müffke.
Use Intents, provide Intents,… Intents are wonderful
Sean Owen is a Google Developer who co-developed Barcode Scanner (in the top 5 of the Market) and its ZXing API on his 20% free time at Google. Sean explained that open sources of the core library of his application was a priority from the beginning for reusing by other developers. So he transformed his application in a dependency, an API : ZXing API based on the Intent mechanism of Android.
For those who don’t know what is Intent, it ensures that you are able to communicate inside or outside your application. Inside your application, you move from one screen to another using it. You can also use an external application able to do what you want to do. Typically, when clicking an url, the browser is launched with an Intent. When you want to share information, all applications available in your device capable of sharing info (Twitter, Facebook, email…) are proposed by the system with this mechanism. You can have details here.
Concerning Barcode Scanner, any application can use it by launching the good Intent in its application. So anyone can develop an new application which scans QR code whitout developing the scanner itself. The problem with this is when the user of the application does not have Barcode Scanner installed on his device. He must have an ActivityNotFoundException…
And that was the main topic of Sean Owen: you can drive downloads (of your application) with that! What he means is creating a wonderful application that can be launched via Intents, create an API to launch this Intent and catch the exception, launch Android Market to checkout the application missing. And that’s it, a new user got your app downloaded!
He concluded his session with a good sentence: “Think platform, not just app”, think about every application you can use, think about all the applications that could use yours… Android is open and provides mechanisms to see larger than just a small app.
Mark Murphy then talked about reusing code or features. Why should we reuse? Mainly to improve application capabilities and quality and go faster on the market. According to him, three models of reuse are possible:
- Use APK and Intents, as we seen before with Barcode Scanner. It’s a simple way to integrate new features in your application. As we saw, there can be errors if the dependency is not installed…
- Use JAR as we have done so with Java since the mists of time. It is a very simple and well-known mechanism to provide some features. The trouble with that is you cannot provide Android resources (pictures and so on), not available in the static R class…
- Use Android Library Project, a feature recently added in the SDK. It ensures to share code and resources. The main trouble with this mechanism is that you cannot generate an APK or a JAR because source code and resources need to be “added” to your project and compiled at the same time. So if you want to share a library, you’ll need to share the source too.
He concluded by talking on how to share all these libraries and mention OpenIntents (see next part)…
His presentation is available on slideshare.
Friedger Müffke is one of the lead developers of OpenIntents which provide a lot of Android applications. He also took part in organization of Droidcon 2010 in Berlin and Brussels.
As Sean Owen and Mark Murphy, Friedger spoke about the powerfulness of Intents and the necessity to share your Intents. It is important not to think monolith but interconnected components to reuse API and applications made by other developers. With Intents all applications are equal, if some applications can manage an Intent the choice is proposed to the user to select his favorite application. For example, if your application allows the user to share his content on Twitter, it is important that your application does not publish itself on Twitter but leaves the choice to the user to choose the application.
On the first screenshot below, the user has the choice to share his video especially with Peep and Twitter which are both Twitter application. On the second one, user can choose his favorite application to select a music track:
The problem is that you need some information to use Intents which is problematic when you want to reuse Intents of other applications. No information about Intents are available on the Android Market, the only possibility is that the developer documents it on its website. To avoid this problem, an Intent registry is necessary. All developers can promote theirs application Intents and see the possibility to reuse some applications in one place.
When no application is able to manage an Intent call through your application, Sean Owen suggests to catch exception to redirect user on Android Market to an application that you know it can manage it. This method requires to specify a specific application and in that case the user has no choice. Friedger Müffke suggests to have a dependency manager to resolve this problem. When an Intent is not managed by any installed application, the dependency manager suggests some applications to be installed. However, this dependency manager should be part of Android OS to be easy to use by all users without no required preinstallation.
Qualcomm presented his ambitious project AllJoyn, connect mobile device with a proximity-based peer-to-peer technology. It uses WiFi or Bluetooth to connect devices. A mobile device can discover other devices around it to exchange data, provide services to other devices, consume services of other devices, advertise your services to all devices around you, etc. Possibilities with this project are enormous:
- Social applications, interact with people around you
- Multiplayer games, play on games with people around you
- Information exchange
- Proximity services, buy or validate ticket near a terminal
SDK is already available for who are interested. It consists in setting up some annotations to put on your services to share it with other.
Android, a large and rising community
During theses two days, we realized how dynamic was the Android community. Developers, IT consulting, telecommunications companies and manufacturers are very highly interested by this OS, thus participated actively in this event. People came from a lot of countries to share their knowledge and best practices. Having a great User Interface and User Experience are primary to take up the challenges of the diversification of Android not only used by phones. All developers realized Intents is one of the most powerful functionality of Android to make interconnected and not isolated applications.
We want to give a special thanks to the organizers and participants for these two rewarding days.