Written by Chet Haase, one of the earliest team members of Android, Androids: The Team That Built the Android Operating System is such a great book to learn the inside story of how Android OS was developed. I am halfway through the book and I absolutely loved it. Here is an excerpt:
In the run up to 1.0, in 2008, launcher (the home screen app responsible for viewing and launching applications) was just another implementation detail of the UI toolkit. Mike Cleron, the original developer on the UI toolkit team, worked on launcher before passing it on to Romain Guy. Romain continued to own and improve the app for several releases, in addition to the rest of the UI toolkit work he was responsible for.
One of the ongoing projects that Romain worked on for launcher (and for the rest of the system) was performance. Romain remembered the constraint that Steve Horowitz gave him: “Launcher needed to cold-start in half a second. Launcher has to go peek at every apk and load the icons and strings, so there was a lot of multi-threaded code and batching and deferring updates on the UI thread.”
Romain was also constantly adding features to launcher, like folders for organizing application icons, and application widgets, and shortcuts (icons on the home screen), and a parallax effect between the wallpaper background and the pages of the home screen.
Later on, for the launch of the Nexus One, Andy Rubin wanted something visually exciting. Joe Onorato explained: “For Eclair, Rubin wanted something flashy.” Andy was light on specifics; Joe remembered him saying, “Just do something cool.” In the two months that they had, they wrote a new launcher using the 3D capabilities of the new device. “GL was just starting to work well enough, so we did that 3D launcher.”
The 3D launcher was a special effect in the all apps screen that lasted for several releases. The user saw a normal 2D grid of applications, but as they scrolled the list up and down, the top and bottom edges faded away into the distance like a Star Wars intro-text effect. It was subtle but powerful, hinting at the 3D power behind the system (and the potentially large number of apps on the system), but without being too ostentatious or difficult to navigate.
1.0 shipped with a feature called Wallpapers which allowed users to choose a picture to serve as the background of the home screen in the launcher. Wallpapers were a great way to show off, and personalize, a smartphone’s large display.
But Andy wanted something new and special for the Nexus One, which was launching with the Eclair 2.1 release in January of 2010. He asked for a feature called Live Wallpapers. Since smartphones offered not just a large screen, but also a powerful computer behind that screen, wouldn’t it be nice to use the computer to enable rich graphical experiences that moved and entertained?
So Andy asked the framework team to make it happen. Dianne Hackborn and Joe Onorato worked on the underlying system and Romain and others worked on the actual wallpapers, coming up with the designs, the overall look, and the actual functionality for the first set of them.
They had five weeks to make it happen.
Andy had originally asked that the wallpapers be implemented in Processing, a graphics rendering system. This was a great idea in terms of functionality, but when Romain got it working on Android, he saw that it wasn’t going to be fast enough for mobile phones. With an animation rate of only one frame per second, the wallpapers were more Dead than Live. So Romain found a different way to make them work.
Jason Sams (a graphics engineer on the team who had also worked at Be and PalmSource with Mathias, Dianne, Joe, and others) had been working on a low-level graphics system at the time called RenderScript, which allowed applications to take advantage of both the CPU and the GPU for drawing graphics quickly. Romain used RenderScript to achieve fluid animation for the wallpapers that needed it, and ended up writing these four wallpapers for the release:
- Grass, which showed blades of grass gently swaying against a backdrop of sky, whose color changed according to the time of day where the phone was located.
- Leaves, which showed leaves falling on water, creating ripples on the surface. This was a team effort, with Mike Cleron wrapping a ripple effect (originally written by Mathias Agopian… or it might have been Jason Sams) into a wallpaper, adding pictures he took234 of leaves from a Japanese maple in his yard.
- Galaxy, which showed a “3D” view of the universe, with a massive star field rotating around the center.
- Polar Clock, which showed the time in a more visually interesting way.
At the end of the five week period, the team had a fully functional Live Wallpaper system, including an API that external developers could use to write their own. Sadly, Romain was only able to invent, design, prototype, and implement four wallpapers in that five-week period, and the team launched the device with fewer than the ten wallpapers that Andy had requested.