Wednesday, July 28, 2010

How to Display the Android Status Bar in Full Screen Apps

Uninstall them. It's the only way they'll learn.

Of course to be constructive, you should also leave a comment that explains how much you dislike it when an app presumes to be the most important thing on your phone.

Let's talk about user experience best practices

If my talk on Best Practices at Google I/O and Roman's OSCON session on Android UI design tips weren't enough of a hint, let me spell it out - improving the user experience of Android Apps is a big priority for many of us in Android Developer Relations.

I've already talked about the use of exit buttons, and the next time the fires of hate are stoked to a white heat I'll harness the power of my fury to tell you how I feel about modal loading dialogs and splash screens.

Do not presume to know how I use my phone

One of the deadly sins from my I/O session was hostility. A hostile app is one that tries to force me to change how I use my device.  I use the status bar a lot, so hiding it instantly gets my hackles up. I use the status bar to:
  • Switch between apps. If I had to choose between the app launcher and the status bar, I'd choose the status bar. It's how I switch to most apps.
  • Determine connectivity. I live in London, commute on the underground, and most apps are Internet connected. This is a tricky combination. Knowing if (and how) I'm connected to the Internet affects what apps I use and how I use them.
  • Tell the time. Ok, so I also wear a watch - but if I'm already looking at my phone why make we look away to my wrist?
  • Be event driven. I treat incoming messages (email, SMS, Twitter) as hardware interrupts. Any app that hides that from me is going to have a short lifespan on my phone.
  • Listen to music. Good music apps have an ongoing notification that can be used to control playback.
Every pixels of screen real-estate on a 3.5" display is valuable, so I understand the temptation to reclaim each and every one for your user interface. Doing so, however, can be incredibly hostile.

Some excellent exceptions

Now before you start flaming me in the comments, I'd like to point out that there's a good reason the ability to hide the status bar exists. Hiding the status bar is vital if you want to allow your users to be fully immersed in your app.

But what's immersive enough? Consider going fullscreen to be equivalent to disabling incoming calls.

In the following examples going full screen is not only acceptable - it's preferable (if not necessary):
  • Immersive games. Games into which you place yourself (particular 1st person racers or shooters) are a great example.
  • eLearning. The brain is a machine with limited short term memory. Studies have shown that successful learning requires focus, so notifications and alerts will actively prevent you from learning effectively.
  • Watching Video. A full audio / visual experience. 
The following examples fail this test:
  • Casual games. Casual games are designed to require minimal concentration and are often used while waiting for something else to happen. Interruptions, while not welcome, are inevitable.
  • Just about every other app. I've seen List View apps that go full screen, apps that switch to full screen view only for the settings screens, and full screen splash screens. Please. Just. Stop.
In most cases it seems the developers figured "why not?"

If you're changing default behavour, the question should always be "why?".

A good app has as little friction as possible - it quickly becomes a part of your phone that you'd miss if it were gone. The easiest way to reduce that friction is to behave in a manner consistent with other apps, and complimentary to existing user habits.

26 comments:

  1. Yes. When I'm using otherwise good programs, this irritates me hugely. I'll reliably get a 24 hour refund for something that arbitrarily decides that I don't need to have the main information conduit from my phone after all.

    ReplyDelete
  2. Anonymous6:49 pm BST

    Rightly said. Cant agree more on this.

    Have seen way too many apps jumping to full screen giving absolutely no chance to the user. Wish every developer takes note of all the best practices.

    ReplyDelete
  3. Anonymous6:55 pm BST

    I would like to add another, albeit rare, exception.
    If it app is designed to be used by someone that is not the primary user of the phone.
    I have an app designed to add parental controls to your phone so that a child can play with your phone.
    In that case I want to severely limit use of the phone outside my app. Full Screen makes sense in that case.

    ReplyDelete
  4. What about GPS apps? What's your take on those?

    ReplyDelete
  5. One of the many reasons I hate HTC Sense is that their browser is full screen, so annoying! Maybe Google can have some influence with them?

    ReplyDelete
  6. Great advice. I think for borderline cases the decision should always be to leave the bar visibile. If you want to go the extra mile you could implement a setting that hides the status bar.

    I would like that feature on e.g. video player apps...

    ReplyDelete
  7. Anonymous8:30 pm BST

    Its very easy to implement a checkbox in the apps preference activity so show or hide status bar. But most of the time the default should be to show it.

    PS Does Google prefer calling it the Status Bar or the Notification Bar? What should be label be for such a checkbox?

    ReplyDelete
  8. Because the white status bar is way too UGLY for apps with dark background.

    I know, many people don't care about such "minor things".

    That's where Apple is winning; they have taste, and they offer three different styles of status bar.

    ReplyDelete
  9. I've not come across too many apps that do this, but they do deserve hostility. Even CoPilot doesn't go full-screen, although you could argue it's sensible for a SatNav app to prevent driver distractions.

    ReplyDelete
  10. I developed the AG newspapers series and I personally need every pixel. So status bar is hidden by default. After a few complaints, though, I gave the option to restore it in the settings. I believe it is much better now, since I do not force anyone to use my app the way I think it's best (w/o). Still, default is to hide it, and I really do not see why on earth I SHOULD change that. :-p

    ReplyDelete
    Replies
    1. Following the advice of the author of this article I should uninstall it. Perhaps It's the only way they'll learn.

      Of course to be constructive, I am also leaving a comment that explains how much I dislike it when a usability expert presumes to be so important as to know more about users preferences than the users themselves.
      :-p

      I personally prefer without doubt to see the app I am using filling the entire screen. And I like your approach to leave the option to your users. By the way, are your app using some analytics and do you have data about how many users hide or show the status bar? It could be interesting to know.

      Delete
  11. Anonymous10:19 am BST

    @vico

    Well if that's how arrogant you are, you can be sure I'll never install your app.

    ReplyDelete
  12. @Vico -- It's your app, so it's your call to make. Keep in mind that your comments reads (to my eyes) as: "Personally, I'm not good enough at design to make my app work with 20 fewer pixels" ;)

    ReplyDelete
  13. @Webreaper: Indeed. SatNav is a great example where losing the status bar is a Good Thing.

    ReplyDelete
  14. Anonymous12:42 pm BST

    How do we uninstall the Gallery app? Surely seeing a list of videos and pictures doesn't meet your exceptions.

    ReplyDelete
  15. What about looking at the issue another way - open up the SDK an eeny weeny bit more and provide (via permissions of course), the ability to replace the statusbar and the lock screen.

    This way, the responsibility can be on the developer if for whatever reason they really want to replace/remove the status bar as-is, *and* the consumer can make an informed decision, too.

    The issue for me is that, yes, maybe Android does currently equal "with android status bar, with android lock screen" currently. But this is not strictly true when we start getting android book readers, or TVs, or Fridges etc.

    This is also an issue when you get into custom UIs, like HTC-land with SenseUI. What if I want to (as I do) do a full UI replacement app? - regardless of the quality, isn't this one of the gains Android should give us? (I believe it should be).

    At the moment this (replacement of 'core' bits) isn't possible from a pure App dev point of view unless I root my device and rebuild from my modified android source.

    While I agree that for the most part whipping out the status bar is a Bad Thing, that statement can't be true all of the time, and Android doesn't (easily) allow us to replace these currently mandatory parts very easily, so it gets bodged in by developers as fullscreen apps.

    If we have it (the ability to go fullscreen) in the API, at some point we're going to call it. So if we have the capability to do fullscreen, then you'd going to see fullscreen apps, good ones and bad. I say open up more, free the statusbar and the lock screen responsibilities and we'd likely see a higher value returned from the developers.

    ReplyDelete
  16. - the side effect of my proposal would be a slew of Bad Apps breaking phones with erroneous Lockscreens and nonexistant or buggy status bars appears in wonky areas, of course. So I can see why currently UI replacement involves some serious hoop-jumping.

    But I still counter (myself) with "that's what permissions and user-reading-the-install-screen is there for".

    Clearly my motivation here is affected by the requirement I have to provide fullscreen UI replacements for Android devices and the desire to do that as a standalone .apk if possible :)

    ReplyDelete
  17. @simonski: It's an interesting argument and one worth considering. I'd say the biggest concern would be around security. To begin with, to create your own status bar, your app would need to be able to have access to all notifications. That's pretty risky!

    ReplyDelete
  18. No disagreement there (re: security).

    Taking e.g. openmoko as an example - their openness started right at the very, very start of the UI and ended right at the very end. I think it's not unlike the c++/java conversation that arises - power, or ease of use. Then again, a mostly-open (android) seems to be considerably more successful than openmoko, so perhaps that is a Bad Example.

    I do accept the reality that e.g. my requirement is hardly the day-to-day problem trying to be solved by most all android applications. Just the idea that replacing e.g. statusbars == Bad is the bit where I say "yes, but whatabout us guys that have a legitimate reason".

    So, I'd say further work around surfacing e.g. statusbar UI as a service, lockscreen as a service, anything else really as-a-service could do with some thinking + discussion in androidland.

    Who knows? perhaps a separate developer key to enable really scary here-be-dragons capabilities of the device.

    Another way of putting it - is functionality X written using java? make it replaceable. Is it something in the linux userland or below? = don't.

    It is frustrating looking at the statusbar code in the source repo and not really being able to quickly play with it on-device. I suspect future releases could go some way by making it e.g. translucent/skinnable, but that's not really what some of us want.

    ReplyDelete
  19. Anonymous3:44 pm BST

    Dianne Hackborn from Google has mentioned that there are plans to enable replacing of the lock screen. But it is low priority.

    http://groups.google.com/group/android-developers/msg/c0dbb900b0db9514

    I don't know about replacing the status bar though.

    ReplyDelete
  20. The Engadget app was a fullscreen offender when it first hit the Market. That didn't last long. The status bar is the most unique and productive feature of Android, IMO.

    Shameless plug: If you love your status bar, check out "StatusNotes" in the market. Allows you to create custom notifications for quick reminders and notes, with unique icons.

    ReplyDelete
  21. As a dev and a user I completely agree with you.

    ReplyDelete
  22. @Anonymous: why would I be arrogant? Just because I give the choice but choose the default??? I'm just complaining about being told what is the "right" default, since in my opinion it depends on the app.

    @Reto: matter of fact, I am not a very good developer, I admit it. Still, I am a good observer, and I know there is a lot of competition in and around the kind of apps I make. And what changes, basically, is how many pixels are dedicated to the webview... Enlighten me on how to create a skinny progress bar and I will be a better dev with a few extra pixels to spare :-)

    Guys, don't get me wrong...I spend most of my time trying to create OPTIONS for people to choose: I like the idea not to modify the users' habits. Still, I have quite obviously played around with my app for quite a while, and for the BENEFIT of the average user I hid the bar. MENU and a couple of clicks and you have it back. Is it sooooo bad?

    ReplyDelete
  23. Anonymous5:09 pm BST

    @Do not presume to know how I use my phone

    True,
    So how do I know that tou are using the status bar ?
    So why will I let you this bar if I don't know that you are using it ?

    ReplyDelete
  24. @Reto: Doesn't the 2.0 gallery app need to be fixed? There's no real reason why the selector shouldn't display the status bar.

    ReplyDelete
  25. Yeah, some google apps like the gallery don't meet these best practices and it's kinda annoying :/

    ReplyDelete