Cross Platform Mobile Applications

Archive for June, 2008

Mobile Design Showcases

Mobile Design Showcases

Nokia has just published a document with 10 examples of what they consider good mobile design. It is a mix of applications and mobile web sites. Many of the usual suspects, but also a couple of lesser knowns.

I do not necessarily agree with everything. (Surprise, right? :-)) One of the criteria is “Visual WOW” and Jaiku Mobile is considered “stylish”. To me Jaiku Mobile looks like its designed by a MySpace user high on banana peel and bad Klingon poetry. The application runs on top of whatever Theme the user has chosen for their phone, so maybe its unfair to criticize it. Anyway, “lively” was probably a design objective. Jaiku was acquired by Google last year and they closed new sign-up. So unless you know an existing Jaiku user, you won’t be able to check it out.

Fring is another of the examples. I tried it quite a while ago, but I just couldn’t figure it out. Setup required me to configure my “IP telephony signaling protocol”, so I backed out, thinking “maybe next version”. Fring makes calls and messaging over WiFi and is a way cool concept. Maybe it’s time to give Fring another try.

Good examples and interesting evaluations. Definitely worth having a look, as the examples are some of the most used 3rd party mobile applications out there today. You can find the document here.

The anatomy of a text input field

There are two interface interface elements of typical mobile user interfaces that does the heavy lifting. That is the Text Input Field and the List. I thought I’d share with you some of the usability considerations that is going into Text Input Fields here at mBricks.

The keypad is well suited to number entry, but ill suited to text entry. Entering text on a mobile phone is hard, and people tend to avoid it if they can. The less text input you have, the better. But you can’t avoid it all together.

Text input fields are suitable for plain text, numbers and passwords. For entering specific data types like date, time, number ranges etc. you should not use a text input field. Instead use Multi-field Input or a selection widget like a Calendar.

Elements of the Text Input Field

Full screen editing

Input_fullscreen

Full screen edit

Edit-in-place is preferable in most cases. A person can see the context, and the visuals is consistent. Full screen editing is preferable when the user is likely to enter a large amount of text. Predictive text (T9, etc) may only be available in full screen edit.

All phone OS’es offers a full screen editor. Use a visual clue like the one above (to the left) to indicate that the full screen editor will open.

Vertical and horizontal layout

Most input fields consists of the control itself and its label. Screen layout may be horizontal or vertical.

verticalhorizontal

In a vertical layout the label is positioned above the field, and both the label and the input field are left aligned. In a horizontal layout the label is right justified and the input field is left justified.

Input prompt

Prompt

Instead of a label, you can use a prompt displayed inside the field itself. The prompt takes less screen real estate, but is only visible when no text is entered.

Error prevention: constraining input

When the input is to be consumed by a human being, the only limitation to input is what the system is capable of storing and transmitting. If you send your birthday to another person the format does not matter as long as the system is able to deliver it and the person in the other end is able to understand it. “I was born on Christmas eve 1980″ is completely understandable by a human.

However, people are smart and computers are dumb. For most applications, input has to be understood by a computer and the computer needs the information in some predefined format. The application has to tell the person entering data what it expects and can understand.

There are several ways to help this: Bound Input, Active/passive validation and Formatting.

Bound input

A Text Input Field can alternate input type between alphanumeric and numeric (if allowed). There is an indicator of the current input type.

BoundInputExample

When input is constrained, for example to numbers only, the widget must indicate what the constraints are. When the input is bound, it is not possible to enter invalid data.

People are ok with this arrangement, as long as it is easily to see and understand what the limitations are.

Active Validation and Passive Validation

Active validation is done character by character as the user types.

Passive validation is performed after the entire input is complete. Either because the data has no meaning until the entire input is entered, or because validation has to be performed at the server.

A field that will be validated should visually indicate this.

Feedback should highlight the error and provide information about what the problem is.

CreditCardExample1a

A different approach. The user don’t have to select the credit card type. As they type in their credit card number, the right card type is chosen (based on the card number). Looks cool, but I don’t know if this has actual merit. Example from Masabi.

Formatting

Sometimes data is commonly displayed in one format, but stored inside the database in a different format.

clip_image016

An example could be a credit card number or a phone number. To make it easier for human beings to read a 16 digit credit card number, it is displayed in blocks of four digits. The human readable form of a date or phone number is probably not identical to the way it is stored in your internal database. Do not allow lazy developers to mess with this, make sure that the application displays data in the appropriate format.

It is worth stressing this issue because the problem is common. Companies print serial numbers or registration keys with spaces and hyphens but do not accept them when a user enters them into a form as they are printed.

The application can strip out any spaces or hyphens as the user types, or before validating.

Overwrite mode

clip_image002

Wherever appropriate, prefill form fields with your best guesses at the values the user wants. Overwrite mode selects all text, so it is easy to type in something else, without having to erase the suggested text.

For more about good defaults, visit Jenifer Tidwells pattern collection. Even better, buy the book.

Autocomplete

This is a large topic, it needs its own post, but the general idea is to guess what a person is about to enter and offer to complete the text. Combine a text input field, a popup list and some logic. Typically seen in URL address fields. Most decent mobile browsers offers autocomplete. This example is from Yahoo! Go:

InputExample3

Handling overflow

Text lines that are too long to display in full can be truncated. This is done by removing characters until the remaining text plus an ellipsis (three dots) fits the screen space. The ellipsis signals that data extends beyond the field boundary.

  • Text should be right-truncated, i.e. characters are removed from the end of the string.
  • Numbers should be left-truncated, i.e. removed from the beginning.

Truncate

Text that is too long can also be displayed as marquee text or auto-scrolling text.

The text moves toward left (opposite direction of reading) and is clipped at both ends. The text starts with a (1 second) pause and then moves smoothly to the left (about 7.5 characters per second). When the text is back to its starting point, it pauses again for 1 second before continuing.

Only the text field that has focus is scrolled, when the text looses focus, the text is immediately reverts to its truncated and static form.

Interface texts like labels or alerts should not be scrolled. And don’t scroll very long texts.

States

A general purpose text input field needs five editable states and five non-editable states.

Anything that can ease the pain

Text input is not straightforward on a mobile and anything that eases the pain of entering text is likely to make your application more successful.

There is many additional aspects not covered here. Especially if you work with touch-screen keyboards where you might be able to provide context specific shortcuts.

Updated icon support in Nokia Series 40 and Series 60

The Nokia Java ME Developer’s Library has been updated to reflect changes in S60 3rd Edition Feature Pack 2 and Series 40 5th Edition Feature Pack 1:

Image and icon support

S60 implementation supports all image formats that are supported in the underlying platform. In general, all common formats (JPG, GIF, PNG) are supported in all platforms. For a full list of supported formats, see Device specifications at Forum Nokia.

Images are supported in the following classes:

  • List
  • Alert
  • ChoiceGroup
  • ImageItem

Image transparency is supported.

Icon support

Note: It is not necessary to use an icon for a MIDlet or its UI elements. If the MIDlet icon is not set, the default icon is used. If UI element icons are set as null, no icons are displayed.

  • The following image formats are supported for MIDlet icons:
    • BMP
    • EXIF
    • GIF
    • JPEG
    • MBM
    • MNG
    • PNG
    • TIFF
    • WBMP
    • ICO
    • WMF
    • SVG (S60 3rd Edition FP 2 and newer)
  • Transparency (both simple and alpha transparency) is supported.
  • No animation supported for MIDlet icons.
  • For SVG support, see section Scalable icon support.

In S60 devices, the icon defined in the MIDlet-Icon attribute is used only if the MIDlet-<n> icon is not defined. Note that the MIDlet suite icon or MIDlet icon is shown in Canvas or Screen (Form, List, and TextBox) status pane in S60 3rd Edition FP 1 devices, but not in Series 40 devices or S60 3rd Edition FP2 and newer devices.

The following tables describe the size of MIDlet icons in S60 and Series 40 devices with different display resolutions:

Table 66: MIDlet icon sizes for S60 devices
Device display resolution MIDlet icon in Applications menu (S60 3rd Edition and newer) MIDlet icon in Applications menu (S60 releases before 3rd Edition) MIDlet icon in the Screen status pane MIDlet icon in the Active standby application list (S60 2nd Edition FP 2 and newer)
176×208 31×31 42×29 44×44 26×26
208×176 37×37 n/a 44×44 26×26
208×208 53×53 n/a 53×53 26×26
240×320 & 320×240 48×48 n/a 60×60 36×36
352×416 64×64 76×76 88×88 53×52
416×352 76×76 n/a 88×88 53×52

Table 67: Icon sizes in Series 40 screen resolutions
Resolution MIDlet icon List icon ChoiceGroup icon Alert icon
128×128 16×16 16×16 12×12 21×36
128×160 24×24 16×16 12×12 21×36
208×208 46×46 26×26 22×22 40×50
240×320 46×48 28×28 22×22 58×76

Note: It is recommended to have transparent background in icon images. When icon images use transparency, theme graphics are shown through the transparent parts of an icon. Additionally, icons do not need to be rectangular. In List icons, the highlighted icon will also show through these transparent parts. Transparency is available generally for PNG and GIF images.

LCDUI UI element icon support

The icon sizes for List, ChoiceGroup and Alert in different device resolutions are listed in the following table. These are default values and should be considered for informative purposes only as these may differ even between devices with the same resolution.

You can get the device-specific maximum width and height for LIST_ELEMENT, CHOICE_GROUP_ELEMENT and ALERT image types by using the getBestImageWidth and getBestImageHeight methods.

Table 68: UI element sizes in S60 devices
Device display resolution List icon ChoiceGroup icon Alert icon
176×208 42×29 16×16 30×40
208×176 42×29 16×16 30×40
QVGA (240×320 & 320×240) 57×41 21×21 40×53
QVGA2 (240×320 & 320×240) 49×35 18×18 35×46
352×416 84×58 32×32 60×80
416×352 84×58 32×32 60×80

Series 40 devices include the following screen sizes:

Table 69: UI element sizes in Series 40 devices
Device display resolution List icon ChoiceGroup icon Alert icon
128×128 16×16 12×12 21×36
128×160 16×16 12×12 21×36
208×208 26×26 22×22 40×50
240×320 28×28 22×22 58×76

In S60 devices the screen layouts used with Lists are determined by the following parameters:

  • Whether there is a selection graphic (EXCLUSIVE, MULTIPLE) or not (IMPLICIT);
  • Whether the text needs one or two lines (List.TEXT_WRAP_OFF / List.TEXT_WRAP_ON).

Depending on these three parameters, List items might use a smaller or larger space. If a smaller space is required, the LIST_ELEMENT icon is replaced by the corresponding CHOICE_GROUP_ELEMENT icon.

Scalable icon support

From S60 3rd edition FP2 onwards, the platform supports Scalable Vector Graphics (SVG-T version 1.1) icons as Java MIDlet icons whereas earlier platform versions supported only PNG icons and other bitmap graphics formats. Since there is a multitude of devices with different resolutions that show the MIDlet icons in different sizes, providing also SVG icons in the MIDlet makes the application icons generally look better in S60 devices.

It is recommended that for backwards compatibility you should also provide alternative PNG icons which can then be used if the device does not support SVG files or is otherwise unable to render them.

Nokia specific attributes Nokia-Scalable-Icon and Nokia-Scalable-Icon-MIDlet-<n> are used to provide scalable MIDlet icons. These Nokia specific attributes have priority over the standard MIDP attributes in the icon lookup order. The icon file names and paths may contain spaces (U+0020). The icon file name is encoded as UTF-8 .

The S60 SDK is bundled with a tool to convert normal SVG icons to SVG Tiny format that optimizes the SVG icon for the S60 SVG Engine.

On S60 3rd edition FP 2 also the standard MIDlet suite and MIDlet icon attributes can contain SVG icon names. However, it is recommended that for backwards compatibility you should provide only PNG icons in these standard attributes and use the Nokia-Scalable-Icon attributes for providing the scalable icons. Doing this allows PNG icons to be presented in devices without SVG support and devices having SVG support will use the scalable icons for the same MIDlet.

To assign an SVG icon to a midlet, see the following code:

MIDlet-1: HelloWorldMIDlet, /bitmap_icon.png ,
example.hello.HelloWorldMIDlet

Nokia-Scalable-Icon-MIDlet-1: /scalable_icon.svg

If SVG-T icons are not supported by the platform, the SVG file is not used. It is possible to provide the link to the SVG file in the MIDlet-Icon attribute.

If none of the MIDlet icons are supported by the implementation, the MIDlet suite icon is used. If none of the MIDlet suite icons are supported, the implementation uses a system default icon. If at any step the specified image file is in unsupported format or is corrupted, or the specified image cannot be found, then the lookup proceeds to the next step.

Update to Sony Ericsson’s Java Platform 8 (JP-8)

The recently revised Java ME Developers’ Guidelines present Sony Ericsson’s Java Platform 8 (JP-8) phones in two sub-categories – JP-8 (8.0-8.2) and JP-8 (8.3). There are currently 14 JP-8 phone series and JP-8.3 represents a sub-group of six phones with some additional functionality supported by the Content Handler API (JSR 211) and Mobile Sensor API (JSR 256).

In addition to a useful evolutionary outline of the JSRs included in JP-6, JP-7 and JP-8, here is an overview of the two JP-8 sub-categories and more information about the additional JP-8.3 functionality.

Read more here…

Muscle memory

This is the main entrance of the building I work in. Eh, to be precise it’s the user interface to the door lock. (There are actually 2 user interfaces there. The door bell for the first-timers, and the panel below for “experienced users”). It’s standard issue: Swipe your ID card, type in your code and the lock opens with a bzzzzz.

As you can see the numbers are worn off. They can’t be read. How do people get in through the door? No they don’t ring the door bell. But if they can’t see the numbers, how can they enter their code? When I get to work each morning, there isn’t a queue of 150 people outside failing to get the door to open. So they must be able to get the door to open somehow.

Muscle memory

We don’t enter numbers, we leave it to our hand to type in the code. If we do it often enough, the hand learns the code, an effect called Muscle Memory. The hand does not remember the numbers, it remembers a movement pattern. Many people, when asked what their PIN code is, have to type it on a real or simulated keypad and look what numbers their hand type. In fact, when I asked my colleagues about the panel at the main entrance, none of them had even noticed that the numbers were missing!

The brain-to-hand connection is very well developed in humans. Manipulating something with our hand does not take much mental effort. As a result, direct manipulation feels effortless. The flip side of this is of course that if your software is inconsistent with learned behavior, your users will be frustrated.

Mobile menus

It’s worth repeating that you should not design your software to be consistent across devices. You should design your software to be consistent with the device it runs on. Your users are unlikely to use your software on many different handsets. When your software runs on an old Sony Ericsson phone, it should use the hardware Back key down to the left. When it runs on a Nokia Series 40 it should use the softkey back to the right. Here are some common key layouts:

VariousMenus

(Click to enlarge)

Common ground

Thankfully the handsets are converging towards this common behavior:

menuLayout

mBricks © 2010. All rights reserved