Wednesday, May 12, 2010

Twitter for Android: A closer look at Android’s evolving UI patterns

<x>

[This post is by Chris Nesladek, Interaction Designer, Richard Fulcher, Interaction Designer, and Virgil Dobjanschi, Software Engineer — Tim Bray]

Along with our regular updates of the Android platform, we like to build example applications that showcase best practices for UI features and behavior patterns, to help our 3rd party developers create even richer applications.

For example, the Twitter for Android application that we worked with Twitter to design gives you, the 3rd party developer, a working example of how you can customize and build an application that’s both fun and highly functional. This blog post is meant to showcase these patterns along with some recommended implementations as you start to develop your applications around them.

Let’s get started and explore these patterns in more detail now.

Pattern 1: Contacts Sync with Address book at Sign in


Media_http3bpblogspot_ijjbe

One of the most important intents we added to Twitter for Android was the ability to sync your Twitter contacts into the phone. This integration also allowed us to give Twitter users with an Android phone the use of the QuickContact widget, which gives users a choice of ways to contact their followers.

We recommend:


  • Using this activity upon first signing into an application.


  • If your app has no sign-in, showing this screen at first launch to improve discoverability of contact sync.


Pattern 2: Twitter account integration with QuickContact for Android


Media_http1bpblogspot_kfdom

The good news for developers is you get this highly functional contacts feature for free if users choose to sync contact information into your app. QuickContact for Android provides instant access to a contact's information and communication modes. For example, a user can tap a contact photo and with one more tap launch a call, SMS, or email to that person. Other applications such as Email, Messaging, and Calendar can also reveal the QuickContact widget when you touch a contact photo or status icon.

Pattern 3: Dashboard


Media_http3bpblogspot_gfbgr

The dashboard pattern serves as a home orientation activity for your users. It is meant to include the categories or features of your application. We recommend including an Action bar on this screen as well.

The dashboard can be static or dynamic. For example, in the case of our dashboard for Twitter, we used the goodness of Live Wallpapers introduced in 2.1 to create an animated dashboard complete with real-time trend bubbles and the Twitter bird silhouette.

We recommend:


  • Using this pattern to showcase the most prominent features of your app.


  • Adding some unexpected delight to this screen, making it engaging without overwhelming the user.


  • Exercising caution - for some apps, the user will want to jump directly into the meat of the application. For others, this sort of welcoming dashboard will be the right starting place.


Pattern 4: Action Bar


Media_http2bpblogspot_ndybs

The Action bar gives your users onscreen access to the most frequently used actions in your application. We recommend you use this pattern if you want to dedicate screen real estate for common actions. Using this pattern replaces the title bar. It works with the Dashboard, as the upper left portion of the Action bar is where we recommend you place a quick link back to the dashboard or other app home screen.

We recommend:


  • Placing an Action bar at the top of the screen to house the most common actions for your application that work across all activities.


  • Using no more than 3 onscreen actions for the Action bar. Use the main menu as overflow for actions that are less important. The balance between Action bar and main menu will ensure the richness of interaction that is Android.


  • Making the left-hand region actionable, offering one-touch return to your dashboard or other app home.


Pattern 5: Search Bar


Media_http2bpblogspot_cdrnp

The Search bar pattern gives you a fast way to switch between resources that are searchable by your application. For example, with Twitter for Android, we used the pattern to support searching within Tweets as well as People. When triggered, this pattern sits on top of the Action bar.

We recommend:


  • You support suggestions.


  • You keep a search history so users upon returning to the search activity can have quick one-button access to previous searches.


Additionally, you can feel free to use the Search bar selection mechanism as a replacement for tabs since it’s really just a fast pivot on a data set. If you have more than 3 data sets, tabs become problematic since no more than 3 can be onscreen at once. For example, look at how we implemented the Profile switching mechanism below:


Media_http3bpblogspot_kmoec

Pattern 6: QuickActions


Media_http4bpblogspot_xwzrd

QuickActions is our newest UI pattern. Currently, it has been implemented as a fast, engaging, popup triggered by an onscreen UI element that identifies it in as minimally disruptive way as possible. We recommend you use this pattern for list views that are data intensive where items inside the list have contextual actions associated with them. QuickActions can be used as a replacement for our traditional dialog invoked by long press.

By choosing to use this pattern as part of a list, we made it easier for Twitter users to take action on the information in the list view by keeping the item and associated actions in context. We also took the extra step of making it easier to target links in list views by turning off the list view button element as a secondary component to making this pattern even more usable. This way users of Twitter for Android can view links with one tap and/or see the posted tweet on a map by tapping the tweet meta data directly.

We recommend:


  • Creating a UI element that is minimal and recognizable as an action popup; either a frame around an image or an icon in a list item.


  • Only using this pattern in applications where the data is intensive.


  • Placing the action popup below or above the information you wish to allow users to take relevant contextual actions on. This will make it easier to associate the actions with the content in view.


  • Turning off the entire list view button element so that regions can be easily targeted for the user.


Pattern 7: Companion Widget


Media_http1bpblogspot_lpnnj

The companion widget pattern is something we recommend all developers think about deeply. The widget you create should be more than a big button link into your app. Used correctly, it can provide a place on a home screen that personalizes, albeit in a small window, your application.

In the case of Twitter for Android, we designed and built small and large-sized widgets to support different types of functionality. Both widgets let a user view his/her tweetstream. However, the smaller widget hands off to the application to create a reply to a tweet from the stream, whereas the larger one gives direct access to the Tweet compose activity.

We recommend:


  • Identify your application in the widget with a brand icon


  • Make this more than a button into your app. Give your user an action or view into the app itself.


  • Keep the activity stateful so that on exiting the application and re-entering a user is returned to the same context in the activity, minimizing the impact of using the dashboard if it is used.


Don’t think we quite got something right? As many of you know, we’ll soon be open sourcing this application code under the Android Open Source Project. We look forward to seeing what you can build starting from this code these UI patterns. In the meantime, Happy Tweeting!

Twitter for Android is available in Android Market for immediate download. It is compatible with Android 2.1/2.0 devices, with support coming soon for more.

Come check out the Android UI patterns session at Google I/O next week to learn more about how this applies across our framework and not just in the Twitter app.

</x>

Suster Keramas

Sebelum 'Menculik Miyabi', telah beredar film Indonesia yang dibintangi artis porno Jepang. Film itu berjudul 'Suster Keramas' dan sukses menggaet penonton. 'Menculik Miyabi' diprediksi akan mengalahkan kesuksesan film horor komedi tersebut. ( hkm / iy )

Komentar terkini (14 Komentar)

empusna, yach..gtu aja kox rep0t..mkanya sblum sibuk ngurusin orang,,uruslah diri sendri dulu..jd kn g sling menyalahi..biarlah itu jd urusan pihak maxima..
Balas Tanggapan
simargoceng, film ngerusak!!!!!gw sumpahin anaknya produser dan semua y terlibat ni die film jadi penggantinya miyabi dan ozawa...biar tau rase t produser! oia ibu kandungnya jg... rusak!
1 Tanggapan | Balas Tanggapan
gila lo ngapah lo tong????koment kok ga jelas, filmnya aja belum tayang udh bilang ngerusak???nonton dulu filmnya baru kasih komentar...goblok banget sich...wkwkwkwk
astaga!!!, astaghfirullah.......semoga orang2 maxima yang membuat film ini kekal abadi didalam neraka jahanam.....anak gw yang baru kelas 5 sd akhirnya kepergok ama gw lagi googling nyari informasi tentang miyabi dan maria ozawa......setelah gw interogasi katanya dapat informasi dari teman2 sekelasnya dan malah katanya temen2 sekelasnya sudah ada yang punya beberapa cd porno-nya dan mereka nonton bareng dirumah salahsatu temannya yang punya komputer dan orang tuanya sedang pergi.....go to hell orang2 maxima.....akhlak anda justru lebih rendah daripada binatang bahkan lebih rendah daripada iblis laknatullah
1 Tanggapan | Balas Tanggapan
ahaha wah..buruk muka cermin dibelah...yg salah situ malah nyalahin org lain.. coba anaknya diajar yg baik, dikontrol yg baik..pasti ga sampe gitu.. atau itu ngintip bapaknya lagi buka situs kyak gituan...hayoo...hohoho
kajol, jangan bilang yg punya maxima org indiahe spupunya akarpunjadi bikin rusak

Thursday, May 6, 2010

Be Careful With Content Providers

The notion of a Content Provider is central to getting things done in an Android application. This is the mechanism used to expose many of a device's data resources for retrieval and update: Contacts, media store, bookmarks, phone-call log, and so on. It’s hard to find an interesting Android app that doesn’t either use or implement (or both) a Content Provider.

There’s nothing magical or terribly surprising about Content Providers - you address them by Url, query them with SQL, and iterate them with a Cursor. They do what they say they do and get out of the way and they’re easy to create and use. But there’s a common anti-pattern, a way to misuse them that can potentially get your app into trouble, and maybe we’ve made it a little too easy.

The Content Providers that the Android framework gives you are described in the SDK’s android.provider package summary. For many of them, the framework provides helper classes of one sort or another, to help automate common chores and provide symbolic names for useful constants.

The problem is, there are more Content Providers in the system than are documented in that package, and while you can use them, you probably shouldn’t. They’re there because some of the Google-provided apps use them internally to access their own data resources. Because Android is an open-source project, it’s easy enough to find them just by running shell commands like find and grep over the source tree.

(By the way, searching the source tree like this is an excellent idea, something that probably every serious developer does regularly. Not 100% sure of the best way to write code to display a record from the Contacts database? Go ahead, have a look at how the built-in app does it; even better, steal some code; it’s perfectly legal.)

Back to Content Providers. For example, there’s one inside the built-in Messaging (A.K.A. texting or SMS) app that it uses to display and search your history. Just because it’s there doesn’t mean you should use it. The Android team isn’t promising that it’ll be the same in the next release or even that it’ll be there in the next release.

It’s worse than that; someone could ship an Android device based on the current SDK that follows all the rules but has its own enhanced messaging application that doesn’t happen to have such a Content Provider. Your app will break on such a device and it’ll be your fault.

So, go ahead and look at the undocumented Content Providers; the code is full of good ideas to learn from. But don’t use them. And if you do, when bad things happen you’re pretty well on your own.

Wednesday, May 5, 2010

Things That Can Make You Feel Like an Idiot Almost Instantly

There are certain things that can bring even the most confident people to their knees with crushing self-doubt and insecurity. These are some of those things.

Holding other people's babies


At some point in your life, you are going to have to hold a baby. When that time comes, you will discover that babies are terrifying and they hate you.

Maybe the baby belongs to your college roommate or your sister. You might even want to hold it at first. But as soon as the baby is in your arms, you will realize that holding it was a mistake. What if you break it? What if you drop it? Your hands suddenly feel like giant pieces of useless meat. Why won't its head stay up on its own? What is it doing with its face? Sensing your anxiety, the baby will begin screaming and then everyone will look at you like you are ruining the baby's life but no one will take it away from you. They just stand there and stare at you like you are the worst person in the world.


Media_httpimg91images_bzatv



Not having pockets to put your hands in while listening to someone else talk


If you find yourself listening to someone else talk for a long period of time, you are going to need something to do with your hands so that you can maintain the appearance of being attentive yet relaxed. Usually, putting your hands in your pockets works beautifully in this situation. But what happens when you are wearing something that doesn't have pockets?

First, you grope anxiously at your sides where your pockets should be. They aren't there, but you look for them anyway. Once you realize that there are no pockets and there never will be any pockets no matter how much you wish for them, you begin futilely cycling through a series of increasingly awkward hand positions; hands on your hips like a superhero, arms folded lightly over your chest like an insecure preteen, arms folded purposefully over your chest like an angry farmer, hands dangling limply at your sides - they all make you feel insecure and unnatural.


Media_httpimg263image_jbjdr



You become so focused on choosing the least awkward position for your hands that you lose track of the conversation entirely. This only adds to the problem because now you also have to worry about whether the stance you choose is appropriate for the conversation. You don't want to be standing there with your hands squarely on your hips like Superman if your friend was just talking about his dead grandmother.

People of indeterminate gender




Media_httpimg46images_zpfze



You are standing there, minding your own business when you spot someone in your general vicinity whose gender is not immediately apparent. You try not to notice. You try not to let it bother you because you are a good person and your identity is heavily dependent on perceiving yourself as nonjudgmental and understanding of others. But somewhere in the back of your mind, you begin to feel panic. It starts out small and escalates until you feel completely paranoid that somehow you are going to NEED to know the person's gender; like someone is going to run up to you at any moment and quiz you and if you don't answer correctly, you are an asshole for life.

Biking up a steep hill in your work clothes




Media_httpimg191image_pohgg



There are not many instances where you feel as stupid as when you are wobbling up a steep hill on your bike, sweating profusely through your work clothes, legs akimbo with your khakis all scrunched up awkwardly around your groin. You can feel the eyes of passing motorists burn into the back of your giant, helmet-clad head as you pedal furiously in an effort to stay upright. Your legs start to burn and you are breathing so hard that little flecks of saliva come shooting out of your mouth with each exhalation, but you press on out of sheer willpower to get to the top of the hill where you can reclaim at least some of your dignity.

Having your space invaded by your friend's cat


Cats don't give a shit about your personal space. You're sitting on your friend's couch, trying to enjoy a nice conversation and your friend's cat leaps up onto your lap and gets all up in your grill. You don't like cats, but you pretend to like your friend's cat because that's what friends do. Then the cat gets all pushy and starts kneading your chest with its paws and backing its ass up in your face. But you can't do anything about it. You just have to sit there and take it because your friend is standing right there and if you throw her cat violently to the ground, she is going to notice. So you just try to carry on and pretend the cat's butthole isn't two inches from your face and everything is fine.


Media_httpimg718image_pbdwd



Talking with the guy who hates everything




Media_httpimg63images_izbhk



The guy who hates everything can turn any conversation into a one-sided rant. Were you talking about puppies? The guy hates people who give their dogs people names. Were you talking about Gatorade? The guy hates electrolytes. Sometimes he doesn't even bother with a logical transition and your nice chat about the migratory behavior of birds gets derailed by a diatribe on why no one should ever buy non-organic bananas because people who eat food that isn't organic shouldn't be allowed to be alive. This sends you into a tailspin of anxiety over whether this person can tell that you ate microwave fish sticks for lunch or if you've ever mentioned your weakness for Slim Jims around him.

Unintentionally suggestive grocery store purchases




Media_httpimg340image_iffgj



Media_httpimg340image_erbdu



Media_httpimg683image_gbwdt



Media_httpimg683image_rbhzj



Media_httpimg685image_cdwgb



Media_httpimg580image_alidk


You go to the grocery store to buy a couple things. Maybe you have a blister and need Vaseline, or maybe you are out of toilet paper. While you're there, you decide to stock up on unintentionally phallic vegetables or a case of extra spicy canned chili. You don't realize until you are placing your items on the counter that the specific combination of things you are buying says something to the outside observer about what you are planning to do with them. But by then, it's too late. You frantically try to reorganize your groceries so the offending items are as far apart as possible. Maybe you even grab some Tic Tacs or a magazine to throw the checker off your trail. But no matter how many decoy items you buy, you still feel positive that the checker is going to notice your conspicuous purchase and think you are some twisted freak with explosive diarrhea.

Getting in an argument while wearing a costume


Halloween is a happy time for most people You get to dress up like Spiderman, eat eight packets of Smarties and drink yourself into oblivion. But sometimes even this joyous occasion can go horribly wrong. One minute you are dancing to Bad Romance without a care in the world and the next you are standing there in a Wolverine costume fighting with your girlfriend the sexy bee about whether or not you were staring at the girl in the Playboy bunny costume.

There is nothing quite as degrading as trying to have a serious argument while you're half drunk and dressed up like a giant pumpkin or the tooth fairy.


Media_httpimg688image_bhfjg



Tuesday, May 4, 2010

Taking the Android Show on the Road

<style>p.billy { color: #800; } p.reto { color: #080; } p.caption {text-align: center; }</style>

[This spring, the Android Developer Relations team (where I work, too) went on the road round the world with boxes of phones, their laptops bulging with slide-ware. Here we’ve combined write-ups from Billy Rutledge (who leads the Android evangelism team at Google HQ) and Reto Meier, who has a desk in London and wrote the book on Android. Featuring Europe is a little unfair, there are a ton of stories from Asia and North America too, but we wanted to keep this reasonably short. - Tim Bray]

Introduction

Billy: The Android Developer Lab (ADL) events are sponsored by Google to help drive developer interest in the Android platform and increase the quality, as well as quantity of creative, innovative applications in Android Market. This Android Developer Relations tour covered 18 locations around the world; we met with over five thousand enthusiastic Android developers and were thrilled to see the energy and creativity behind your applications.

Reto: The European leg of the Android Developer Lab World Tour consisted of me, Billy, and intrepid local volunteers covering eight labs in eleven days across six countries.


Media_http1bpblogspot_cnise


Media_http3bpblogspot_zafjt

Some of the venues weren't like some of the others.

The goal of the tour was to meet and support local Android communities around the world, get developers excited about Android, and inspire them to create the next generation of innovative mobile applications.

Billy: In these sessions, we tried to help new and experienced developers move forward with their application plans. The core topics included:


  • Status of the Mobile Web


  • Android Opportunity for Developers


  • Android Market Overview


  • Android SDK Key Features


  • Code Labs ranging from HelloWorld to Threads to LiveWallpaper


Reto: The odyssey began in the London Google office, three labs over two days that played host to nearly 200 developers. Our surprise gifts arrived minutes after our first session started - a close enough call that our “there’s a package you need to sign for - any idea what it is?” charade was unscripted and only partially contrived. The heart palpitations were entirely real. London is home to some great Android developers including the teams behind ADC2 winners PlinkArt and BuzzDeck.

After London we battled ice and snow in Stockholm, where Anders Bond told us why Android is a good match for Spotify, and enjoyed the sound of 100 Swedes spontaneously erupting in applause.

In Paris 200 experienced community members joined us for two events at La Cantine. Speakers from FRAndroid, Sfeir, and Diotasoft covered everything from OpenGL development using the SDK to using AppEngine to create scalablends for your Android apps.


Media_http3bpblogspot_fwaii

The Berlin event was huge, with over 150 developers travelling in from all across Germany. We saw demos including multi-touch pong, a Live Wallpaper of the changing Berlin skyline, and an app that showed us where to find (and rate!) the nearest public toilets. The night ended (in the small hours) with a private tour of c-base, an experience not to be missed.

Universidad Rey Juan Carlos made us feel very welcome in Madrid. Over 200 developers from across Spain (and Portugal) were in attendance including more winners of ADC1 (Biowallet) and ADC2 (SweetDreams).


Media_http2bpblogspot_mdkkg


Media_http4bpblogspot_sbriv

Lessons Learned

Billy: Developers have matured to the point where they don't need to be convinced, they hunger for more technical details. While the intro level topics were well received, most developers have advanced beyond this point and seek guidance on more in-depth topics.

Reto:


  • It’s possible for one person to carry up to four boxes each containing ten Nexus Ones at a time.



  • You should not try to carry more than three boxes of Nexus Ones if the conditions are icy. Right Billy?


    Billy: Absolutely!!! :)



  • Announcing free smartphones to a room of developers always results in a spontaneous round of applause.


  • European mobile developers are smart, enthusiastic, and already building the next generation of epic apps for Android.



Media_http2bpblogspot_bfbme

Billy: Post event series, we opened a volunteer survey to help us guide future efforts:


  • 78% of developers rated the event 4+ stars (of 5 stars)


  • 79% of developers say having Google engineers on hand is "extremely important"


  • 69% of developers say it is "extremely important" to see more test devices at future events


Looking Forward

[These are still at the planning stage, nothing here is a promise. - Tim]

Billy: The Android Developer Relations team plans to lead future Android Developer Lab events in 2010, building on the feedback from the February events. These future events will focus on deeper technical subjects, expecting the attendees to have a basic understanding of the Android platform. We will post the beginner material on-line as a prerequisite.

While it's impossible for us to reach all locations, we'll look to cover the key locations where Android devices are available.

Reto: I hadn’t even made it back to London when the requests started to roll in. Given the success of this tour I don’t imagine it will be too long.

It’s always a great experience meeting the Android developer community, we look forward to seeing you again soon!


Media_http3bpblogspot_pdghf

Film 'Si Bintang Porno Miyabi' Dirilis Kamis

Artis Jepang Maria Ozawa Miyabi, akhirnya tayang sebagai bintang di film Indonesia. Film Menculik Miyabi yang sempat ditolak, akan dirilis Kamis (6/5).

"Sudah lulus sensor. Sebelum saya melanjutkan, saya sudah mendatangi LSF. Pas disensor mereka puas," kata produser film Menculik Miyabi, Ody Mulya Hidayat via telepon di Jakarta, Selasa (4/5).

Hadirnya Miyabi sebagai bintang dalam film itu sempat menimbulkan kontroversi dan penolakan. Terutama oleh kalangan organisasi Islam. Sebab, Miyabi dinilai sangat lekat dengan pornografi.

Saat ramainya penolakan terhadap Miyabi, Ody memang sempat vakum untuk melanjutkan film tersebut. Ia pun harus meyakinkan Miyabi untuk mau melanjutkan film tersebut.

"Intinya kami sudah berhenti selama 10 bulan karena kontrroversi yang ada. Selama kurun waktu itu kami coba yakinkan Maria Ozawa. Kami bilang, nggak usah takut untuk film-film yang kami buat. Karena sebelumnya,

bintang-bintang mereka seperti Rin Sakuragi juga main untuk kami, dan tidak ada masalah. Dan itu yang membuat Miyabi yakin," kata Ody.

Monday, May 3, 2010

True/Slant Interview

I was interviewed by Michael Humphrey of True/Slant.  Michael is like a magical unicorn with the power to interview extremely effectively.  I had a lot of fun doing this and it made me feel like a rock star, so I thought I'd share with you guys.  It also might help to answer a few of your questions about why I am the way I am:

http://trueslant.com/michaelhumphrey/2010/05/03/the-life-and-lines-of-allie-brosh-hyperbole-and-a-half/