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:
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.
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.
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.
")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:
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:
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.
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.