Web Developer's Library 1.7
Legal notice
Change history
Guide to Web Developer's Library
Library contents
Introduction to S60 Web development
What you need to know
Browsing
Introduction to the Web Browser for S60
Web Browser for S60 versions and device support
Browser 7.1 features
S60 Browser 7.0 features
OSS Browser (3.1) features
Getting started
Before you start
Mobile website naming conventions
Adapting full screen web pages for use on mobile device
Designing websites for S60 Browser
Designing simple pages
Mobile web page design examples
Best Practices
Developing websites for S60 Browser
Creating web content
Laying out pages
Media content
Flash content
Supported image formats
IFrames
S60 Browser URI scheme support
WRT support for AJAX
Customizing style sheets for S60
S60 Browser default CSS
Using style sheets for dynamic content
Inline styles vs. external style sheets
Font style recommendations for the S60 Browser
Using multiple CSS
Managing user interaction
Navigating in the S60 Browser
Navigational aid
Navigational aid example code
Linking to a widget
Device resource considerations
Using scripting effectively
Using graphics effectively
Using cache effectively
Dealing with network issues
Server-side solutions
Joomla! plug-in for S60 Browser
phpBB add-on for S60 Browser
Web Runtime widgets
Introduction to widgets
Widget features
Web Runtime standards
Web Runtime versions and device support
Widget security
Runtime Security Manager
Runtime Security Manager access policy
Designing widgets
Laying out pages
Designing for a specific audience
Designing simple pages
Performing one task in a view
Presenting content on screens
Working with images
Supported image formats
Using images in the HTML
Setting the widget background
Incorporating Flash content
Designing for mobile devices
Designing for small screens
Designing for dynamic screen orientation
Customizing style sheets for S60 devices
Creating styles for dynamic content
Using multiple CSS
Porting widgets
Managing user interaction
Using softkeys
Using screen controls
Creating HTML controls
Handling text input
Handling selection lists
Using JavaScript controls
Creating touch controls
Customizing screen controls
Checking for touch support
Providing tactile feedback for user actions
Moving within widgets
Navigating on screens
Key event codes supported by WRT
Moving between views
Using focus
Designing for limited resources
Using graphics and scripting effectively
Keeping response times short
Saving battery power
Dealing with network issues
Coping with the processing limits of the device
Retrieving data
Developing widgets
Getting started with widgets
Before you start
Widget development process
Widget component files
Creating the info.plist file
Creating the widget HTML file
Creating a CSS file
Creating a JavaScript file
Creating the info.plist file
Creating the widget HTML file
Creating a CSS file
Creating a JavaScript file
Using platform services
Accessing and launching installed applications
Accessing and managing calendar information
Accessing and managing information about contacts
Accessing and managing information about landmarks
Accessing device location information
Accessing device logs
Accessing information about media files stored on a device
Accessing messages and using messaging services
Accessing data from the physical sensors of a device
Accessing and modifying system information
Accessing system information and controlling device features
Defining the callback handler for an asynchronous method
Supporting multiple languages
Language project directory
Localizing widget display name
Localizing widget display text
Localizing widget resources
Localizing widget layout
Testing your widget
JavaScript console
Example widgets
Introduction to STEW
STEW design principles and views
Designing STEW user interface
STEW: defining the HTML and CSS structure
STEW: adding JavaScript to drive the widget logic
STEW: managing user interaction
STEW: loading the widget at startup
STEW: supporting screen rotation
STEW: supporting different screen sizes
STEW: adding menu options
Retrieving STEW data
STEW: implementing a Twitter service
STEW: presenting content on screens
STEW: indicating progress
Localizing STEW
Launching a website widget
Integrating widgets with devices
Deploying widgets
Managing widgets on mobile devices
Web Runtime API reference
JavaScript widget object
openURL()
setPreferenceForKey()
preferenceForKey()
prepareForTransition()
performTransition()
setNavigationEnabled()
setNavigationType()
openApplication()
setDisplayLandscape()
setDisplayPortrait()
identifier
onshow
onhide
isrotationsupported
JavaScript menu object
append()
remove()
getMenuItemById()
getMenuItemByName()
setLeftSoftkeyLabel()
setRightSoftkeyLabel()
showSoftkeys()
hideSoftkeys()
clear()
onShow
JavaScript MenuItem object
Constructor
append()
remove()
setDimmed()
onSelect
JavaScript device object
getServiceObject()
JavaScript Service API reference
JavaScript AppManager Service API
IAppManager.GetList()
Criteria for retrieving information about applications
Returned application information
IAppManager.LaunchApp()
Criteria for launching an application
IAppManager.LaunchDoc()
Criteria for launching an application
IAppManager.Cancel()
AppManager Service API error messages
AppManager Service API example
JavaScript Calendar Service API
IDataSource.GetList()
Criteria for retrieving calendar information
Returned calendar information
IDataSource.Add()
Criteria for adding and updating calendar information
IDataSource.Delete()
Criteria for deleting calendar information
IDataSource.Import()
Criteria for importing calendar entries
IDataSource.Export()
Criteria for exporting calendar entries
IDataSource.RequestNotification()
Criteria for change notifications
Returned notification information
IDataSource.Cancel()
Calendar entries
Calendar entry properties
Properties and calendar entry types
Calendar Service API error messages
Calendar Service API example
JavaScript Contacts Service API
IDataSource.GetList()
Criteria for retrieving contact information
Returned contact information
IDataSource.Add()
Criteria for adding and editing contact information
IDataSource.Delete()
Criteria for deleting contact information
IDataSource.Import()
Criteria for importing a contact
IDataSource.Export()
Criteria for exporting a contact
IDataSource.Organise()
Criteria for organizing contacts in a contact group
IDataSource.Cancel()
Supported contact keys
Contacts Service API error messages
Contacts Service API example
JavaScript Landmarks Service API
IDataSource.New()
IDataSource.GetList()
Criteria for retrieving landmark information
Filter criteria for landmarks
Filter criteria for landmark categories
Filter criteria for landmark databases
Returned landmark information
IDataSource.Add()
Criteria for adding and editing landmark information
IDataSource.Delete()
Criteria for deleting landmark information
IDataSource.Import()
Criteria for importing landmarks
IDataSource.Export()
Criteria for exporting landmarks
IDataSource.Organise()
Criteria for organizing landmarks in a landmark category
IDataSource.Cancel()
Landmarks, categories, and databases
Landmark
Landmark category
Landmark database
Landmarks Service API error messages
Landmarks Service API example
JavaScript Location Service API
ILocation.GetLocation()
Criteria for retrieving location information
Returned location information
ILocation.Trace()
ILocation.Calculate()
Calculation criteria
Calculation results
ILocation.CancelNotification()
Location Service API error messages
Location Service API example
JavaScript Logging Service API
IDataSource.Add()
Criteria for adding a log entry
IDataSource.GetList()
Criteria for retrieving log events
Returned log event information
IDataSource.Delete()
Criteria for deleting an event
IDataSource.RequestNotification()
Criteria for requesting notification
IDataSource.Cancel()
Logging Service API error messages
Logging Service API example
JavaScript Media Management Service API
IDataSource.GetList()
Criteria for retrieving media information
Returned media information
IDataSource.Cancel()
Media Management Service API error messages
Media Management Service API example
JavaScript Messaging Service API
IMessaging.GetList()
Criteria for retrieving messaging information
Returned messaging information
IMessaging.Send()
Criteria for sending a message
IMessaging.RegisterNotification()
Returned notification information
IMessaging.CancelNotification()
IMessaging.ChangeStatus()
IMessaging.Delete()
IMessaging.Cancel()
Messaging Service API error messages
Messaging Service API example
JavaScript Sensor Service API
ISensor.FindSensorChannel()
Criteria for searching sensor channels
ISensor.RegisterForNotification()
Criteria for receiving sensor data
Returned sensor data
ISensor.Cancel()
ISensor.GetChannelProperty()
Criteria for retrieving channel property information
Returned channel property information
Sensor channel information
Sensor Service API error messages
Sensor Service API example
JavaScript SystemInfo Service API (WRT 1.1)
ISysInfo.GetInfo()
Criteria for retrieving system attribute information
ISysInfo.SetInfo()
Criteria for modifying a system attribute value
ISysInfo.GetNotification()
Criteria for change notifications
ISysInfo.Cancel()
System attributes
Supported system attributes (entities and keys)
System data types
SystemInfo Service API error messages
SystemInfo Service API example
JavaScript SystemInfo Service API (WRT 1.0)
Power information services
chargelevel
onchargelevel
chargerconnected
onchargerconnected
Network information services
signalbars
networkname
registrationstatus
Display and keypad illumination information and control services
lighton()
lightoff()
lightblink()
lightminintensity
lightmaxintensity
lightdefaultintensity
lightinfiniteduration
lightmaxduration
lightdefaultcycletime
lighttargetprimarydisplayandkeyboard
lighttargetsystem
Vibration information and control services
startvibra()
stopvibra()
vibraminintensity
vibramaxintensity
vibramaxduration
vibrasettings
Beep tone control services
beep()
Memory and file system information services
drivesize()
drivefree()
totalram
freeram
drivelist
System language information services
language
Service API error codes
Home screen widgets
Introduction to home screen widgets
Life cycle of a home screen widget
User interaction with home screen widgets
Home screen widget appearance
Home screen widget content
Communication between the home screen and WRT
Developing home screen widgets
Determining whether to display home screen or full screen
Creating content specific to home screen widgets
Enabling STEW for the home screen
Developer resources
Terms and abbreviations
Discussion about this resource
Legal notice
Change history
Guide to Web Developer's Library
Library contents
Introduction to S60 Web development
What you need to know
Browsing
Introduction to the Web Browser for S60
Web Browser for S60 versions and device support
Browser 7.1 features
S60 Browser 7.0 features
OSS Browser (3.1) features
Getting started
Before you start
Mobile website naming conventions
Adapting full screen web pages for use on mobile device
Designing websites for S60 Browser
Designing simple pages
Mobile web page design examples
Best Practices
Developing websites for S60 Browser
Creating web content
Laying out pages
Media content
Flash content
Supported image formats
IFrames
S60 Browser URI scheme support
WRT support for AJAX
Customizing style sheets for S60
S60 Browser default CSS
Using style sheets for dynamic content
Inline styles vs. external style sheets
Font style recommendations for the S60 Browser
Using multiple CSS
Managing user interaction
Navigating in the S60 Browser
Navigational aid
Navigational aid example code
Linking to a widget
Device resource considerations
Using scripting effectively
Using graphics effectively
Using cache effectively
Dealing with network issues
Server-side solutions
Joomla! plug-in for S60 Browser
phpBB add-on for S60 Browser
Web Runtime widgets
Introduction to widgets
Widget features
Web Runtime standards
Web Runtime versions and device support
Widget security
Runtime Security Manager
Runtime Security Manager access policy
Designing widgets
Laying out pages
Designing for a specific audience
Designing simple pages
Performing one task in a view
Presenting content on screens
Working with images
Supported image formats
Using images in the HTML
Setting the widget background
Incorporating Flash content
Designing for mobile devices
Designing for small screens
Designing for dynamic screen orientation
Customizing style sheets for S60 devices
Creating styles for dynamic content
Using multiple CSS
Porting widgets
Managing user interaction
Using softkeys
Using screen controls
Creating HTML controls
Handling text input
Handling selection lists
Using JavaScript controls
Creating touch controls
Customizing screen controls
Checking for touch support
Providing tactile feedback for user actions
Moving within widgets
Navigating on screens
Key event codes supported by WRT
Moving between views
Using focus
Designing for limited resources
Using graphics and scripting effectively
Keeping response times short
Saving battery power
Dealing with network issues
Coping with the processing limits of the device
Retrieving data
Developing widgets
Getting started with widgets
Before you start
Widget development process
Widget component files
Creating the info.plist file
Creating the widget HTML file
Creating a CSS file
Creating a JavaScript file
Creating the info.plist file
Creating the widget HTML file
Creating a CSS file
Creating a JavaScript file
Using platform services
Accessing and launching installed applications
Accessing and managing calendar information
Accessing and managing information about contacts
Accessing and managing information about landmarks
Accessing device location information
Accessing device logs
Accessing information about media files stored on a device
Accessing messages and using messaging services
Accessing data from the physical sensors of a device
Accessing and modifying system information
Accessing system information and controlling device features
Defining the callback handler for an asynchronous method
Supporting multiple languages
Language project directory
Localizing widget display name
Localizing widget display text
Localizing widget resources
Localizing widget layout
Testing your widget
JavaScript console
Example widgets
Introduction to STEW
STEW design principles and views
Designing STEW user interface
STEW: defining the HTML and CSS structure
STEW: adding JavaScript to drive the widget logic
STEW: managing user interaction
STEW: loading the widget at startup
STEW: supporting screen rotation
STEW: supporting different screen sizes
STEW: adding menu options
Retrieving STEW data
STEW: implementing a Twitter service
STEW: presenting content on screens
STEW: indicating progress
Localizing STEW
Launching a website widget
Integrating widgets with devices
Deploying widgets
Managing widgets on mobile devices
Web Runtime API reference
JavaScript widget object
openURL()
setPreferenceForKey()
preferenceForKey()
prepareForTransition()
performTransition()
setNavigationEnabled()
setNavigationType()
openApplication()
setDisplayLandscape()
setDisplayPortrait()
identifier
onshow
onhide
isrotationsupported
JavaScript menu object
append()
remove()
getMenuItemById()
getMenuItemByName()
setLeftSoftkeyLabel()
setRightSoftkeyLabel()
showSoftkeys()
hideSoftkeys()
clear()
onShow
JavaScript MenuItem object
Constructor
append()
remove()
setDimmed()
onSelect
JavaScript device object
getServiceObject()
JavaScript Service API reference
JavaScript AppManager Service API
IAppManager.GetList()
Criteria for retrieving information about applications
Returned application information
IAppManager.LaunchApp()
Criteria for launching an application
IAppManager.LaunchDoc()
Criteria for launching an application
IAppManager.Cancel()
AppManager Service API error messages
AppManager Service API example
JavaScript Calendar Service API
IDataSource.GetList()
Criteria for retrieving calendar information
Returned calendar information
IDataSource.Add()
Criteria for adding and updating calendar information
IDataSource.Delete()
Criteria for deleting calendar information
IDataSource.Import()
Criteria for importing calendar entries
IDataSource.Export()
Criteria for exporting calendar entries
IDataSource.RequestNotification()
Criteria for change notifications
Returned notification information
IDataSource.Cancel()
Calendar entries
Calendar entry properties
Properties and calendar entry types
Calendar Service API error messages
Calendar Service API example
JavaScript Contacts Service API
IDataSource.GetList()
Criteria for retrieving contact information
Returned contact information
IDataSource.Add()
Criteria for adding and editing contact information
IDataSource.Delete()
Criteria for deleting contact information
IDataSource.Import()
Criteria for importing a contact
IDataSource.Export()
Criteria for exporting a contact
IDataSource.Organise()
Criteria for organizing contacts in a contact group
IDataSource.Cancel()
Supported contact keys
Contacts Service API error messages
Contacts Service API example
JavaScript Landmarks Service API
IDataSource.New()
IDataSource.GetList()
Criteria for retrieving landmark information
Filter criteria for landmarks
Filter criteria for landmark categories
Filter criteria for landmark databases
Returned landmark information
IDataSource.Add()
Criteria for adding and editing landmark information
IDataSource.Delete()
Criteria for deleting landmark information
IDataSource.Import()
Criteria for importing landmarks
IDataSource.Export()
Criteria for exporting landmarks
IDataSource.Organise()
Criteria for organizing landmarks in a landmark category
IDataSource.Cancel()
Landmarks, categories, and databases
Landmark
Landmark category
Landmark database
Landmarks Service API error messages
Landmarks Service API example
JavaScript Location Service API
ILocation.GetLocation()
Criteria for retrieving location information
Returned location information
ILocation.Trace()
ILocation.Calculate()
Calculation criteria
Calculation results
ILocation.CancelNotification()
Location Service API error messages
Location Service API example
JavaScript Logging Service API
IDataSource.Add()
Criteria for adding a log entry
IDataSource.GetList()
Criteria for retrieving log events
Returned log event information
IDataSource.Delete()
Criteria for deleting an event
IDataSource.RequestNotification()
Criteria for requesting notification
IDataSource.Cancel()
Logging Service API error messages
Logging Service API example
JavaScript Media Management Service API
IDataSource.GetList()
Criteria for retrieving media information
Returned media information
IDataSource.Cancel()
Media Management Service API error messages
Media Management Service API example
JavaScript Messaging Service API
IMessaging.GetList()
Criteria for retrieving messaging information
Returned messaging information
IMessaging.Send()
Criteria for sending a message
IMessaging.RegisterNotification()
Returned notification information
IMessaging.CancelNotification()
IMessaging.ChangeStatus()
IMessaging.Delete()
IMessaging.Cancel()
Messaging Service API error messages
Messaging Service API example
JavaScript Sensor Service API
ISensor.FindSensorChannel()
Criteria for searching sensor channels
ISensor.RegisterForNotification()
Criteria for receiving sensor data
Returned sensor data
ISensor.Cancel()
ISensor.GetChannelProperty()
Criteria for retrieving channel property information
Returned channel property information
Sensor channel information
Sensor Service API error messages
Sensor Service API example
JavaScript SystemInfo Service API (WRT 1.1)
ISysInfo.GetInfo()
Criteria for retrieving system attribute information
ISysInfo.SetInfo()
Criteria for modifying a system attribute value
ISysInfo.GetNotification()
Criteria for change notifications
ISysInfo.Cancel()
System attributes
Supported system attributes (entities and keys)
System data types
SystemInfo Service API error messages
SystemInfo Service API example
JavaScript SystemInfo Service API (WRT 1.0)
Power information services
chargelevel
onchargelevel
chargerconnected
onchargerconnected
Network information services
signalbars
networkname
registrationstatus
Display and keypad illumination information and control services
lighton()
lightoff()
lightblink()
lightminintensity
lightmaxintensity
lightdefaultintensity
lightinfiniteduration
lightmaxduration
lightdefaultcycletime
lighttargetprimarydisplayandkeyboard
lighttargetsystem
Vibration information and control services
startvibra()
stopvibra()
vibraminintensity
vibramaxintensity
vibramaxduration
vibrasettings
Beep tone control services
beep()
Memory and file system information services
drivesize()
drivefree()
totalram
freeram
drivelist
System language information services
language
Service API error codes
Home screen widgets
Introduction to home screen widgets
Life cycle of a home screen widget
User interaction with home screen widgets
Home screen widget appearance
Home screen widget content
Communication between the home screen and WRT
Developing home screen widgets
Determining whether to display home screen or full screen
Creating content specific to home screen widgets
Enabling STEW for the home screen
Developer resources
Terms and abbreviations
Discussion about this resource
Design and User Experience Library v1.6
Legal notice
Guide to Design and User Experience Library v1.6
User experience overview
About usability
Context of use
Users
Tasks and goals
Environment
Usability measures
Benefits of usability
Usability in a mobile application development project
Know the users
Consider cultural differences
Culture-dependent issues in application user interfaces
Usability methods
Selecting the best usability research method
Usability requirements
How to set the requirements
When to set the requirements
Integrating usability to the development process
Five steps of the iterative development process for mobile applications
Optimise the User Experience
Porting the User Experience
Making security usable
Design patterns
Work order list
Wizard
Map view
Settings
Main menu in S60
Using no focus
Using focus
Using tabs in the first level
Using tabs or folders in the second level
Creating the entire menu system from scratch
Search
Cost justification
The user's experience
Make it right
Guidelines and checklists
Usability guidelines
Navigation
Basic interaction style
Main view
Softkeys
View design
Options menu
Shortcuts
Actions and feedback
Multitasking
Interruptions
Tabs and folders
Entering information
Consider cultural differences
Make information entry easy
Respect the user's work
Information presentation
Text presentation
Long text
Graphics
Icons
Full-screen mode
Colours
Sounds
Errors
Help
Connectivity
Handling connections
Refreshing information
Terminology and connections
Usability for administrators
Some administrative features
Usability and security
Mobile security threats
Access security
Password
Information security
Security tips for the user
Security tips for the developer
Top 10 usability guidelines for S60 applications
User experience checklists
Quick checklist
Installation and startup checklist
Navigation checklist
Series 40 UI style checklist
S60 UI style checklist
Accessibility and clarity checklist
Mobility checklist
Security checklist
Connectivity checklist
Games checklist
Help and documentation checklist
Exiting and uninstallation checklist
Visual design
A guide for newcomers
The importance of visual design
Understanding the device
Platforms
Screen size
Mobile Web sites
Native applications
Physical screen size
Colour
Font support
Graphics
Graphics within the browser
Graphics within native applications
Scalable Vector Graphics Tiny (SVGT)
Animation
Flash Lite
Getting to know the device landscape
Using design principles
The Gestalt principles of perceptual organisation
Similarity
Proximity
Repetition
Figure-to-ground relationship
Closure
Continuation
Achieving unity in design
Space
Visual flow
Dominance
Hierarchy
Colour
Images and graphical elements
Animation and transitions
Putting it all together
Design update: China
From crowds to crowded UIs
Vivid visual design
User trends
Personalisation rules
Widespread mobile Internet
Applications and services
Local interpretation of style
Inspiration from duplication
Widgets
Conclusions
Interaction design
Interaction design for mobile applications in brief
Essence of interaction design
Interaction design for mobile
Adherence to a consistent UI style
Hardware limitations
Mobile use context
Interaction design in the user-centric design process
Deliverables of interaction design
Navigation maps
Wireframe models
UI Prototypes
UI Specifications
Best practices for interaction design
Design for the user and recognise constraints
Learn by doing and participating
Benchmark the alternatives and utilise good design solutions
Utilise proven design patterns
10 point checklist to evaluate mobile interaction design
Tools for interaction design
Tools for interaction design and prototyping
Web Runtime for designers
What is a widget?
Why make widgets?
Development tools
Widget deployment and installation
Designing a widget
A single canvas
Many views
Loading content into a widget
Using Platform Services
Widget interaction models
Direct manipulation (touch) devices
Scrolling
Using softkeys
Screen orientation
Visual design
Font support
Graphical and media file format support
HTML and CSS support
Using animations and transitions
Interaction and user-experience design checklist
Packaging, installation, and distribution
Designing the icon
Widget visibility
Deployment
Widget design tutorial
Getting started
What you will need
A quick look at the widget structure
Creating the visual concept
Get friendly with the data source
Styling views and controls
Styling default elements and previewing the changes
Styling hyperlinks
Previewing design changes
Creating the logo header
Styling the navigation buttons
Launching the 'About' page
Creating the icon
Choosing the widget's name
Styling dynamic content
Creating the colour swatches
Styling the email prompt
Debugging the design and testing the widget
Full-screen usage
Be conscious of your motives to use full screen
If you got mostly A answers
If you got mostly B answers
If you got mostly C answers
Creating a unique design
Maintaining consistency
Scalable UI
Introduction to the S60 scalable UI
Benefits of scalable UI
A process perspective to scalable UI development
S60 UI panes and changes introduced in S60 3rd Edition, Feature Pack 2
S60 display modes and resolutions
S60 display orientation modes
Portrait mode
Landscape modes
Full-screen mode
Changing between orientation modes
S60 display resolutions
Design issues
Using common or custom components
Using custom UI components
Using different display modes
Designing for custom screen sizes
Optimisation for landscape
Working with two separate displays
Selecting the right orientation for the application
Implementation issues
Changing display orientation
System-level orientation change
Application-level orientation change
Positioning UI elements
Graphics
Localization
Testing scalable UIs
Game design
Mobile game usability
Usability return on investment
Game user experience guidelines
S60: Top 10 usability guidelines for games
Main menu design
Game main menu - S60, Symbian C++
Game main menu - S60 Java ME
Navigation diagram - S60
Pre-game guidelines
Loading
Intro
Intro sounds
Main menu
Navigation keys
Pause menu
Login menu
Bluetooth connection menu
List design
Handling payments
Help
Use pictures in the help
Help for multiplayer games
Save the user's time
Text entry
Game experience guidelines
Make the user comfortable
Do not annoy the user
Do not force the player to restart from scratch
Keys and game controls
Simultaneous key presses
Diagonal movement
Key functions
Graphics
S60 screen orientation
Harmonious colours
Match functionality with appearance
Use each screen fully
Backlight
Sounds
Use unique sounds
Relay information
Do not rely solely on sounds
Profiles
Alternative uses of mobile game audio
Match with the real world
Realism
No invisible barriers
Bonus and special features
Getting killed
Feedback
Display status clearly
Give control to the user
Game design
Challenge
End key
Pause
Disable sounds and music
To pause or not to pause?
Pause in multiplayer games
Actions in pause menu and resuming the game
In-game help
Latency in multiplayer games
Text
No foul language or offensive terms
Make text easy to read
Post-game guidelines
Restart
High-score list
Select appropriate, interesting scoring units
High-score list in single-player games
High-score list in multiplayer games
Only good scorers may enter their name
Case: Mobile action games
Mobile considerations
Keeping the player motivated and interested
Speed and movement
Case: One button games
Turn input limitations into strengths
Simplifying controls
One button games
Game design
Case: Mixed reality games
Combine technologies to create innovation
Alternative input methods
Location-based possibilities
Mobile game graphics
Graphics appeal
Device restrictions
Overcoming the display challenge
Contrast
Use clear and meaningful graphics
Limited display space
Landscape mode
Selling the game experience
Developers' dilemma
Distributing in style
Quality in possession
Mobile game playability heuristics
Using the heuristics in expert evaluations
Expert evaluations and heuristics in practice
Expert evaluations support playability testing
Mobile gameplay heuristics
Game usability
GU1. Audio-visual representation supports the gameplay
GU2. Screen layouts are efficient and visually pleasing
GU3. Device UI and the game UI are used for their own purposes
GU4. Indicators are visible
GU5. The player understands the terminology
GU6. Navigation is consistent, logical, and minimalist
GU7. Control keys are consistent and follow standard conventions
GU8. Game controls are flexible and convenient
GU9. The game gives feedback on the player's actions
GU10. The player cannot make irreversible errors
GU11. The player does not have to memorize things unnecessarily
GU12. The game contains help
Mobility
MO1. The game and play sessions can be started quickly
MO2. The game accommodates with surroundings
MO3. Interruptions are handled reasonably
Gameplay
GP1. The game provides clear goals or supports player-created goals
GP2. The player sees progress in the game and can compare the results
GP3. The player is rewarded and the rewards are meaningful
GP4. The player is in control
GP5. The challenge, strategy, and pace are in balance
GP6. First-time experience is encouraging
GP7. The game story supports the gameplay and is meaningful
GP8. There are no repetitive or boring tasks
GP9. The players can express themselves
GP10. The game supports different playing styles
GP11. The game does not stagnate
GP12. The game is consistent
GP13. The game design uses orthogonal unit differentiation
GP14. The player does not lose any hard-won possessions
Adding new modules: Multiplayer game heuristics
Mobile multiplayer game heuristics
MP1. The game supports communication
MP2. There are reasons to communicate
MP3. The game helps the player to find other players and game instances
MP4. The game supports groups and communities
MP5. The design minimises deviant behaviour
MP6. The game design hides the effects of the network
Supplements to core heuristics with multiplayer games
GU5. The player understands the terminology
GP6. First-time experience is encouraging
GP9. The players can express themselves in the game
GP2. The player sees the progress in the game and can compare the results
GP10. The game supports different playing styles
Terms and abbreviations
Mobile game playability heuristics reference sheets
Theme design
General theme information
Themes and creativity
Themes and usability
Creating theme components with high usability
Idle background
Active background
Background for different applications, pop-ups, and fields
Active standby
Scalable UI
Keep consistency and contrast in mind
Clear focus indication is a must
Icons and metaphors
Usable clocks, signals, and status bars
Guidelines for creating a user-friendly theme
Themes and sounds
Carbide.ui Theme Edition tutorial
Getting started
Designing the theme
Using the Adobe Illustrator template
Creating reusable colour swatches (optional)
Constructing the theme
Creating a new theme file
A brief introduction to Carbide.ui
Replacing the Background element
Setting colours
Creating Referenced Colours
Applying a Referenced Colour
Working with areas
Replacing single- and multi-piece components
Styling a nine-piece highlight
Styling a single-piece element
Completing the theme
Styling icons
Adding animation
Designing for backwards compatibility
Packaging and testing the theme
Packaging and installing the theme
Activating the theme
Testing
Distributing your theme
Theme templates
Multimedia
Mobile video and streaming
Video capabilities in Nokia devices
Device categories and supported video formats
Differences in video capabilities between Nokia platforms
Video encoding guidelines
Video coding
Audio Coding
Video file formats
Video distribution channels
Progressive download
Streaming video
Mass distribution channels
Nokia Web Browser as a video platform
Example conversion workflow with Adobe Premiere Elements
Streaming video creation
Streaming video creation – Basic steps
3GPP-compatible content authoring tools
3GPP video creation tips and tricks
Content creation with 3GPP codecs
Suggested video encoder configurations
Network and bit rate options for streaming
Video client application development
Video and streaming specifications
S60 touch
Touch strategies
Touch-enabled vs. touch-optimised
Usability considerations
Scale and positioning of controls
Finger vs. stylus
Sensor interaction
Feedback
Tactile feedback
Feedback quality and quantity
Feedback delay
Touch components
Adaptive search
Touch down and hold-event and the stylus pop-up menu
Slider pop-up
Touch-specific functionality in Preview pop-up
Text input methods
Scroll bars
Toolbar and toolbar extension
Touch-specific issues in lists
Application-specific use for Touch down and drag-event
Designing for S60 touch
Finger use: Case universal remote controller
Universal remote controller: Key features
Universal remote controller: Advanced features
Universal remote controller: Design summary
Stylus use: Case sudoku game
Sudoku game: Key features
Sudoku game: Design summary
Custom input methods
Utilising strokes
Utilising gestures
Designing custom buttons
S60 design summary
Standard S60 UI components
Lists
Forms
Setting lists
Grids
Notifications and queries
Viewers and editors
Discussion about this resource
Legal notice
Guide to Design and User Experience Library v1.6
User experience overview
About usability
Context of use
Users
Tasks and goals
Environment
Usability measures
Benefits of usability
Usability in a mobile application development project
Know the users
Consider cultural differences
Culture-dependent issues in application user interfaces
Usability methods
Selecting the best usability research method
Usability requirements
How to set the requirements
When to set the requirements
Integrating usability to the development process
Five steps of the iterative development process for mobile applications
Optimise the User Experience
Porting the User Experience
Making security usable
Design patterns
Work order list
Wizard
Map view
Settings
Main menu in S60
Using no focus
Using focus
Using tabs in the first level
Using tabs or folders in the second level
Creating the entire menu system from scratch
Search
Cost justification
The user's experience
Make it right
Guidelines and checklists
Usability guidelines
Navigation
Basic interaction style
Main view
Softkeys
View design
Options menu
Shortcuts
Actions and feedback
Multitasking
Interruptions
Tabs and folders
Entering information
Consider cultural differences
Make information entry easy
Respect the user's work
Information presentation
Text presentation
Long text
Graphics
Icons
Full-screen mode
Colours
Sounds
Errors
Help
Connectivity
Handling connections
Refreshing information
Terminology and connections
Usability for administrators
Some administrative features
Usability and security
Mobile security threats
Access security
Password
Information security
Security tips for the user
Security tips for the developer
Top 10 usability guidelines for S60 applications
User experience checklists
Quick checklist
Installation and startup checklist
Navigation checklist
Series 40 UI style checklist
S60 UI style checklist
Accessibility and clarity checklist
Mobility checklist
Security checklist
Connectivity checklist
Games checklist
Help and documentation checklist
Exiting and uninstallation checklist
Visual design
A guide for newcomers
The importance of visual design
Understanding the device
Platforms
Screen size
Mobile Web sites
Native applications
Physical screen size
Colour
Font support
Graphics
Graphics within the browser
Graphics within native applications
Scalable Vector Graphics Tiny (SVGT)
Animation
Flash Lite
Getting to know the device landscape
Using design principles
The Gestalt principles of perceptual organisation
Similarity
Proximity
Repetition
Figure-to-ground relationship
Closure
Continuation
Achieving unity in design
Space
Visual flow
Dominance
Hierarchy
Colour
Images and graphical elements
Animation and transitions
Putting it all together
Design update: China
From crowds to crowded UIs
Vivid visual design
User trends
Personalisation rules
Widespread mobile Internet
Applications and services
Local interpretation of style
Inspiration from duplication
Widgets
Conclusions
Interaction design
Interaction design for mobile applications in brief
Essence of interaction design
Interaction design for mobile
Adherence to a consistent UI style
Hardware limitations
Mobile use context
Interaction design in the user-centric design process
Deliverables of interaction design
Navigation maps
Wireframe models
UI Prototypes
UI Specifications
Best practices for interaction design
Design for the user and recognise constraints
Learn by doing and participating
Benchmark the alternatives and utilise good design solutions
Utilise proven design patterns
10 point checklist to evaluate mobile interaction design
Tools for interaction design
Tools for interaction design and prototyping
Web Runtime for designers
What is a widget?
Why make widgets?
Development tools
Widget deployment and installation
Designing a widget
A single canvas
Many views
Loading content into a widget
Using Platform Services
Widget interaction models
Direct manipulation (touch) devices
Scrolling
Using softkeys
Screen orientation
Visual design
Font support
Graphical and media file format support
HTML and CSS support
Using animations and transitions
Interaction and user-experience design checklist
Packaging, installation, and distribution
Designing the icon
Widget visibility
Deployment
Widget design tutorial
Getting started
What you will need
A quick look at the widget structure
Creating the visual concept
Get friendly with the data source
Styling views and controls
Styling default elements and previewing the changes
Styling hyperlinks
Previewing design changes
Creating the logo header
Styling the navigation buttons
Launching the 'About' page
Creating the icon
Choosing the widget's name
Styling dynamic content
Creating the colour swatches
Styling the email prompt
Debugging the design and testing the widget
Full-screen usage
Be conscious of your motives to use full screen
If you got mostly A answers
If you got mostly B answers
If you got mostly C answers
Creating a unique design
Maintaining consistency
Scalable UI
Introduction to the S60 scalable UI
Benefits of scalable UI
A process perspective to scalable UI development
S60 UI panes and changes introduced in S60 3rd Edition, Feature Pack 2
S60 display modes and resolutions
S60 display orientation modes
Portrait mode
Landscape modes
Full-screen mode
Changing between orientation modes
S60 display resolutions
Design issues
Using common or custom components
Using custom UI components
Using different display modes
Designing for custom screen sizes
Optimisation for landscape
Working with two separate displays
Selecting the right orientation for the application
Implementation issues
Changing display orientation
System-level orientation change
Application-level orientation change
Positioning UI elements
Graphics
Localization
Testing scalable UIs
Game design
Mobile game usability
Usability return on investment
Game user experience guidelines
S60: Top 10 usability guidelines for games
Main menu design
Game main menu - S60, Symbian C++
Game main menu - S60 Java ME
Navigation diagram - S60
Pre-game guidelines
Loading
Intro
Intro sounds
Main menu
Navigation keys
Pause menu
Login menu
Bluetooth connection menu
List design
Handling payments
Help
Use pictures in the help
Help for multiplayer games
Save the user's time
Text entry
Game experience guidelines
Make the user comfortable
Do not annoy the user
Do not force the player to restart from scratch
Keys and game controls
Simultaneous key presses
Diagonal movement
Key functions
Graphics
S60 screen orientation
Harmonious colours
Match functionality with appearance
Use each screen fully
Backlight
Sounds
Use unique sounds
Relay information
Do not rely solely on sounds
Profiles
Alternative uses of mobile game audio
Match with the real world
Realism
No invisible barriers
Bonus and special features
Getting killed
Feedback
Display status clearly
Give control to the user
Game design
Challenge
End key
Pause
Disable sounds and music
To pause or not to pause?
Pause in multiplayer games
Actions in pause menu and resuming the game
In-game help
Latency in multiplayer games
Text
No foul language or offensive terms
Make text easy to read
Post-game guidelines
Restart
High-score list
Select appropriate, interesting scoring units
High-score list in single-player games
High-score list in multiplayer games
Only good scorers may enter their name
Case: Mobile action games
Mobile considerations
Keeping the player motivated and interested
Speed and movement
Case: One button games
Turn input limitations into strengths
Simplifying controls
One button games
Game design
Case: Mixed reality games
Combine technologies to create innovation
Alternative input methods
Location-based possibilities
Mobile game graphics
Graphics appeal
Device restrictions
Overcoming the display challenge
Contrast
Use clear and meaningful graphics
Limited display space
Landscape mode
Selling the game experience
Developers' dilemma
Distributing in style
Quality in possession
Mobile game playability heuristics
Using the heuristics in expert evaluations
Expert evaluations and heuristics in practice
Expert evaluations support playability testing
Mobile gameplay heuristics
Game usability
GU1. Audio-visual representation supports the gameplay
GU2. Screen layouts are efficient and visually pleasing
GU3. Device UI and the game UI are used for their own purposes
GU4. Indicators are visible
GU5. The player understands the terminology
GU6. Navigation is consistent, logical, and minimalist
GU7. Control keys are consistent and follow standard conventions
GU8. Game controls are flexible and convenient
GU9. The game gives feedback on the player's actions
GU10. The player cannot make irreversible errors
GU11. The player does not have to memorize things unnecessarily
GU12. The game contains help
Mobility
MO1. The game and play sessions can be started quickly
MO2. The game accommodates with surroundings
MO3. Interruptions are handled reasonably
Gameplay
GP1. The game provides clear goals or supports player-created goals
GP2. The player sees progress in the game and can compare the results
GP3. The player is rewarded and the rewards are meaningful
GP4. The player is in control
GP5. The challenge, strategy, and pace are in balance
GP6. First-time experience is encouraging
GP7. The game story supports the gameplay and is meaningful
GP8. There are no repetitive or boring tasks
GP9. The players can express themselves
GP10. The game supports different playing styles
GP11. The game does not stagnate
GP12. The game is consistent
GP13. The game design uses orthogonal unit differentiation
GP14. The player does not lose any hard-won possessions
Adding new modules: Multiplayer game heuristics
Mobile multiplayer game heuristics
MP1. The game supports communication
MP2. There are reasons to communicate
MP3. The game helps the player to find other players and game instances
MP4. The game supports groups and communities
MP5. The design minimises deviant behaviour
MP6. The game design hides the effects of the network
Supplements to core heuristics with multiplayer games
GU5. The player understands the terminology
GP6. First-time experience is encouraging
GP9. The players can express themselves in the game
GP2. The player sees the progress in the game and can compare the results
GP10. The game supports different playing styles
Terms and abbreviations
Mobile game playability heuristics reference sheets
Theme design
General theme information
Themes and creativity
Themes and usability
Creating theme components with high usability
Idle background
Active background
Background for different applications, pop-ups, and fields
Active standby
Scalable UI
Keep consistency and contrast in mind
Clear focus indication is a must
Icons and metaphors
Usable clocks, signals, and status bars
Guidelines for creating a user-friendly theme
Themes and sounds
Carbide.ui Theme Edition tutorial
Getting started
Designing the theme
Using the Adobe Illustrator template
Creating reusable colour swatches (optional)
Constructing the theme
Creating a new theme file
A brief introduction to Carbide.ui
Replacing the Background element
Setting colours
Creating Referenced Colours
Applying a Referenced Colour
Working with areas
Replacing single- and multi-piece components
Styling a nine-piece highlight
Styling a single-piece element
Completing the theme
Styling icons
Adding animation
Designing for backwards compatibility
Packaging and testing the theme
Packaging and installing the theme
Activating the theme
Testing
Distributing your theme
Theme templates
Multimedia
Mobile video and streaming
Video capabilities in Nokia devices
Device categories and supported video formats
Differences in video capabilities between Nokia platforms
Video encoding guidelines
Video coding
Audio Coding
Video file formats
Video distribution channels
Progressive download
Streaming video
Mass distribution channels
Nokia Web Browser as a video platform
Example conversion workflow with Adobe Premiere Elements
Streaming video creation
Streaming video creation – Basic steps
3GPP-compatible content authoring tools
3GPP video creation tips and tricks
Content creation with 3GPP codecs
Suggested video encoder configurations
Network and bit rate options for streaming
Video client application development
Video and streaming specifications
S60 touch
Touch strategies
Touch-enabled vs. touch-optimised
Usability considerations
Scale and positioning of controls
Finger vs. stylus
Sensor interaction
Feedback
Tactile feedback
Feedback quality and quantity
Feedback delay
Touch components
Adaptive search
Touch down and hold-event and the stylus pop-up menu
Slider pop-up
Touch-specific functionality in Preview pop-up
Text input methods
Scroll bars
Toolbar and toolbar extension
Touch-specific issues in lists
Application-specific use for Touch down and drag-event
Designing for S60 touch
Finger use: Case universal remote controller
Universal remote controller: Key features
Universal remote controller: Advanced features
Universal remote controller: Design summary
Stylus use: Case sudoku game
Sudoku game: Key features
Sudoku game: Design summary
Custom input methods
Utilising strokes
Utilising gestures
Designing custom buttons
S60 design summary
Standard S60 UI components
Lists
Forms
Setting lists
Grids
Notifications and queries
Viewers and editors
Discussion about this resource
Qt for S60 Developer's Library v 0.8
Legal notice
Change history and release notes
Getting started
Introduction to Qt
Introduction to the S60 platform
Installation guide
PC requirements
Choosing an SDK
Installing the S60 platform SDK
Using Qt for S60 and S60 3rd Edition Feature Pack 1
Installing the Carbide.c++ IDE
Installing Qt for S60
Configure Carbide.c++ 2.0 for Qt
Known issues with Carbide.c++ and Qt for S60 integration
Simple Qt example with Carbide.c++
Setup the Carbide.c++ workspace
Create a Qt Project
Choosing the Qt project type
Naming the Qt project
Choosing the build configurations
Choosing Qt modules
Create a Qt widget
Example widget header file
Example widget source file
Building the example widget
Running the widget on the emulator
Build the widget for the phone
S60 Platform considerations
Supported Qt modules in Qt for S60 Tower release
Extensions to the project file
DEFINES in symbian scope
DEPLOYMENT in symbian scope
INCLUDEPATH in symbian scope
LIB extensions in symbian scope
QT variable in symbian scope
TARGET in symbian scope
TARGET.CAPABILITY in symbian scope
TARGET.EPOCALLOWDLLDATA in symbian scope
TARGET.EPOCHEAPSIZE and TARGET.EPOCSTACKSIZE in symbian scope
TARGET.UIDs in symbian scope
TEMPLATE in symbian scope
Platform security
Platform security - UIDs
Platform security - capabilities
Platform security - signed installation files
Platform security - data caging
Managing different screen sizes
Creating a DLL
Localisation process with Qt
Using Qt translation
Localisation phrases
Getting the application onto a phone
Package files
Creating an installation file
Signing an application
Deploying an application onto a phone
Distributing your application to a wider audience
Porting from S60 to Qt
Qt in the S60 environment
Integration of Qt and S60 build systems
Separating Qt and S60 implementations
Using error codes
Memory management
Visibility in the application shell
UI building blocks
Lists and grids
Menus
Softkey API
Notification dialogs
Queries
Views in Qt applications
Managing different screen sizes
S60 to Qt conversion
Active Objects
Active object example
Exception handling
Converting descriptors
Converting lists
Converting geometry
Converting images
Qt and S60 SVG usage comparison
Qt and S60 mouse/touch/pen events comparison
Qt and S60 key event handling comparison
Qt and S60 Idle timer usage comparison
Qt and S60 HTTP connection usage comparison
Qt and S60 Socket usage comparison
Qt and S60 SAX parsing usage comparison
Managing sub-project build order
Other issues
Examples
Messaging
Internet Access Points
Retrieving contacts
Active Object to signal-slot connection
Porting from Desktop Qt
Porting Qt desktop application to S60 environment
Porting considerations
Software development in the S60 environment
User interface
Memory
Porting steps
Setting up the Qt for S60 development environment
Choosing the porting strategy and redesigning application
Analyzing memory usage
Taking care of platform security
Modifying the project file
Building the project and making modifications to the code according to the selected porting approach
Creating installation file
Qt reference documentation
All namespaces
All classes
Main classes
Grouped classes
Modules
Functions
Developer resources
Qt-related books and URLs
Example code for Qt for S60
Terms and abbreviations
Legal notice
Change history and release notes
Getting started
Introduction to Qt
Introduction to the S60 platform
Installation guide
PC requirements
Choosing an SDK
Installing the S60 platform SDK
Using Qt for S60 and S60 3rd Edition Feature Pack 1
Installing the Carbide.c++ IDE
Installing Qt for S60
Configure Carbide.c++ 2.0 for Qt
Known issues with Carbide.c++ and Qt for S60 integration
Simple Qt example with Carbide.c++
Setup the Carbide.c++ workspace
Create a Qt Project
Choosing the Qt project type
Naming the Qt project
Choosing the build configurations
Choosing Qt modules
Create a Qt widget
Example widget header file
Example widget source file
Building the example widget
Running the widget on the emulator
Build the widget for the phone
S60 Platform considerations
Supported Qt modules in Qt for S60 Tower release
Extensions to the project file
DEFINES in symbian scope
DEPLOYMENT in symbian scope
INCLUDEPATH in symbian scope
LIB extensions in symbian scope
QT variable in symbian scope
TARGET in symbian scope
TARGET.CAPABILITY in symbian scope
TARGET.EPOCALLOWDLLDATA in symbian scope
TARGET.EPOCHEAPSIZE and TARGET.EPOCSTACKSIZE in symbian scope
TARGET.UIDs in symbian scope
TEMPLATE in symbian scope
Platform security
Platform security - UIDs
Platform security - capabilities
Platform security - signed installation files
Platform security - data caging
Managing different screen sizes
Creating a DLL
Localisation process with Qt
Using Qt translation
Localisation phrases
Getting the application onto a phone
Package files
Creating an installation file
Signing an application
Deploying an application onto a phone
Distributing your application to a wider audience
Porting from S60 to Qt
Qt in the S60 environment
Integration of Qt and S60 build systems
Separating Qt and S60 implementations
Using error codes
Memory management
Visibility in the application shell
UI building blocks
Lists and grids
Menus
Softkey API
Notification dialogs
Queries
Views in Qt applications
Managing different screen sizes
S60 to Qt conversion
Active Objects
Active object example
Exception handling
Converting descriptors
Converting lists
Converting geometry
Converting images
Qt and S60 SVG usage comparison
Qt and S60 mouse/touch/pen events comparison
Qt and S60 key event handling comparison
Qt and S60 Idle timer usage comparison
Qt and S60 HTTP connection usage comparison
Qt and S60 Socket usage comparison
Qt and S60 SAX parsing usage comparison
Managing sub-project build order
Other issues
Examples
Messaging
Internet Access Points
Retrieving contacts
Active Object to signal-slot connection
Porting from Desktop Qt
Porting Qt desktop application to S60 environment
Porting considerations
Software development in the S60 environment
User interface
Memory
Porting steps
Setting up the Qt for S60 development environment
Choosing the porting strategy and redesigning application
Analyzing memory usage
Taking care of platform security
Modifying the project file
Building the project and making modifications to the code according to the selected porting approach
Creating installation file
Qt reference documentation
All namespaces
All classes
Main classes
Grouped classes
Modules
Functions
Developer resources
Qt-related books and URLs
Example code for Qt for S60
Terms and abbreviations
Flash Lite Developer's Library 1.5
Legal notice
Change history
Guide to Flash Lite Developer's Library
Library contents
Introduction to Flash Lite
What you need to know
Flash Lite application types
Flash Lite versions
Flash Lite in the Web Browser for S60
Software Update for S60
Flash Lite security
OMA DRM
Getting started
Before you start
Flash Lite development process
Creating your first Flash Lite application
Designing Flash Lite applications
Basic Flash Lite design considerations
Designing user interaction
Key input
Touch input
Touch interaction
Basic touch UI design considerations
Touch toolbar
Touch keypad
Text fields
Feedback
Focus and visual guidance
Designing graphical user interfaces
Planning usability and functionality
Selecting the Flash Lite version and target devices
Designing the layout
Element dimensions
Dynamic element layouts
Screen resolution and scaling
Fonts
Bitmap graphics
Screen orientation
Laying out the softkeys
Example: Designing the Sudokumaster UI
Defining the Sudokumaster UI and functionality
Use cases
UI main view and states
UI elements
Feedback
Defining the Sudokumaster target platform
Designing the Sudokumaster layout
Categorizing the layouts
Selecting the default layout
Defining the layout logic
Designing UI element scaling
Manual scaling
Element proportions
Designing the final layouts
Designing the Sudokumaster UI elements
User input listeners
Game board
Number input using keys
Number input using touch
Game title
Game information
Softkeys
Options menu
Final screen
Implementing the Sudokumaster layout
Conclusion
Developing Flash Lite applications
Flash Lite authoring and optimization tips
General authoring tips
Working with numeric text entries
Using the [] operator in Flash Lite 1.1
Detecting the Flash Lite version on a device
Detecting the device platform
Loading data with Flash Lite 2.0
Validating shared objects with Flash Lite 2.0
Adding metadata to SWF
Distributing SWF over the air
Playing screen savers on Series 40 Nokia devices
Performance optimization tips
Optimizing content
Optimizing ActionScript
Handling user input
Detecting the input method
Handling key input
Key input in Flash Lite 1.1
Key input in Flash Lite 2.0 and newer
Handling touch input
Button event handlers
Mouse event handlers
Drag and drop
Disabling the touch keypad
Accessing mobile device functions
Using platform services
Accessing and launching installed applications
Accessing and managing calendar information
Accessing and managing information about contacts
Accessing and managing information about landmarks
Accessing device location information
Accessing device logs
Accessing information about media files stored on a device
Accessing messages and using messaging services
Accessing data from the physical sensors of a device
Accessing and modifying system information
Defining the callback handler for an asynchronous method
Callback status codes
Media playback
Video playback
Audio playback
Playing a video file in Flash Lite
Encoding the video into mobile-compliant format
Creating the video player application
Saving persistent data
Setting up XML socket connectivity
Deploying Flash Lite applications
Packaging and signing a Flash Lite application
Certificates
Creating and signing a SIS package
Creating an NFL package
Creating a stub application
Software requirements
Creating the project files
Files you do not need to edit
Files you need to edit
Creating an icon for the stub application
Building the project
Packaging and signing the stub application
Creating a PKG file
Creating a SIS package
Creating a certificate and private key
Signing the SIS package
Flash Lite API reference
ActionScript Device object
DisableAutoRotation()
ExpediteConnection()
ActionScript Service object
Calling Service API methods
Resuming applications in the background
Canceling asynchronous methods
Unloading services
ActionScript Service API reference
ActionScript AppManager Service API
GetList()
Parameters for retrieving information about applications
Returned application information
LaunchApp()
Parameters for launching an application
LaunchDoc()
Parameters for launching an application
ActionScript Calendar Service API
GetList()
Parameters for retrieving calendar information
Returned calendar information
Add()
Parameters for adding and updating calendar information
Delete()
Parameters for deleting calendar information
Import()
Parameters for importing calendar entries
Export()
Parameters for exporting calendar entries
RequestNotification()
Parameters for change notifications
Returned notification information
Calendar entries
Calendar entry properties
Properties and calendar entry types
ActionScript Contacts Service API
GetList()
Parameters for retrieving contact information
Returned contact information
Add()
Parameters for adding and editing contact information
Delete()
Parameters for deleting contact information
Import()
Parameters for importing a contact
Export()
Parameters for exporting a contact
Organise()
Parameters for organizing contacts in a contact group
Supported contact keys
ActionScript Landmarks Service API
New()
GetList()
Parameters for retrieving landmark information
Filter criteria for landmarks
Filter criteria for landmark categories
Filter criteria for landmark databases
Returned landmark information
Add()
Parameters for adding and editing landmark information
Delete()
Parameters for deleting landmark information
Import()
Parameters for importing landmarks
Export()
Parameters for exporting landmarks
Organise()
Parameters for organizing landmarks in a landmark category
Landmarks, categories, and databases
Landmark
Landmark category
Landmark database
ActionScript Location Service API
GetLocation()
Parameters for retrieving location information
Returned location information
Trace()
Calculate()
Calculation parameters
Calculation results
CancelNotification()
ActionScript Logging Service API
Add()
Parameters for adding a log entry
GetList()
Parameters for retrieving log events
Returned log event information
Delete()
Parameters for deleting an event
RequestNotification()
Parameters for requesting notification
ActionScript Media Management Service API
GetList()
Parameters for retrieving media information
Returned media information
ActionScript Messaging Service API
GetList()
Parameters for retrieving messaging information
Returned messaging information
Send()
Parameters for sending a message
RegisterNotification()
Returned notification information
CancelNotification()
ChangeStatus()
Delete()
ActionScript Sensor Service API
FindSensorChannel()
Parameters for searching sensor channels
RegisterForNotification()
Parameters for receiving sensor data
Returned sensor data
GetChannelProperty()
Parameters for retrieving channel property information
Returned channel property information
Sensor channel information
ActionScript SystemInfo Service API
GetInfo()
Parameters for retrieving system attribute information
SetInfo()
Parameters for modifying a system attribute value
GetNotification()
Parameters for change notifications
System attributes
Supported system attributes (entities and keys)
System data types
Service API error codes
Developer resources
Discussion about this resource
Flash Lite examples
Flash Lite applications
Flash Lite components and code snippets
Legal notice
Change history
Guide to Flash Lite Developer's Library
Library contents
Introduction to Flash Lite
What you need to know
Flash Lite application types
Flash Lite versions
Flash Lite in the Web Browser for S60
Software Update for S60
Flash Lite security
OMA DRM
Getting started
Before you start
Flash Lite development process
Creating your first Flash Lite application
Designing Flash Lite applications
Basic Flash Lite design considerations
Designing user interaction
Key input
Touch input
Touch interaction
Basic touch UI design considerations
Touch toolbar
Touch keypad
Text fields
Feedback
Focus and visual guidance
Designing graphical user interfaces
Planning usability and functionality
Selecting the Flash Lite version and target devices
Designing the layout
Element dimensions
Dynamic element layouts
Screen resolution and scaling
Fonts
Bitmap graphics
Screen orientation
Laying out the softkeys
Example: Designing the Sudokumaster UI
Defining the Sudokumaster UI and functionality
Use cases
UI main view and states
UI elements
Feedback
Defining the Sudokumaster target platform
Designing the Sudokumaster layout
Categorizing the layouts
Selecting the default layout
Defining the layout logic
Designing UI element scaling
Manual scaling
Element proportions
Designing the final layouts
Designing the Sudokumaster UI elements
User input listeners
Game board
Number input using keys
Number input using touch
Game title
Game information
Softkeys
Options menu
Final screen
Implementing the Sudokumaster layout
Conclusion
Developing Flash Lite applications
Flash Lite authoring and optimization tips
General authoring tips
Working with numeric text entries
Using the [] operator in Flash Lite 1.1
Detecting the Flash Lite version on a device
Detecting the device platform
Loading data with Flash Lite 2.0
Validating shared objects with Flash Lite 2.0
Adding metadata to SWF
Distributing SWF over the air
Playing screen savers on Series 40 Nokia devices
Performance optimization tips
Optimizing content
Optimizing ActionScript
Handling user input
Detecting the input method
Handling key input
Key input in Flash Lite 1.1
Key input in Flash Lite 2.0 and newer
Handling touch input
Button event handlers
Mouse event handlers
Drag and drop
Disabling the touch keypad
Accessing mobile device functions
Using platform services
Accessing and launching installed applications
Accessing and managing calendar information
Accessing and managing information about contacts
Accessing and managing information about landmarks
Accessing device location information
Accessing device logs
Accessing information about media files stored on a device
Accessing messages and using messaging services
Accessing data from the physical sensors of a device
Accessing and modifying system information
Defining the callback handler for an asynchronous method
Callback status codes
Media playback
Video playback
Audio playback
Playing a video file in Flash Lite
Encoding the video into mobile-compliant format
Creating the video player application
Saving persistent data
Setting up XML socket connectivity
Deploying Flash Lite applications
Packaging and signing a Flash Lite application
Certificates
Creating and signing a SIS package
Creating an NFL package
Creating a stub application
Software requirements
Creating the project files
Files you do not need to edit
Files you need to edit
Creating an icon for the stub application
Building the project
Packaging and signing the stub application
Creating a PKG file
Creating a SIS package
Creating a certificate and private key
Signing the SIS package
Flash Lite API reference
ActionScript Device object
DisableAutoRotation()
ExpediteConnection()
ActionScript Service object
Calling Service API methods
Resuming applications in the background
Canceling asynchronous methods
Unloading services
ActionScript Service API reference
ActionScript AppManager Service API
GetList()
Parameters for retrieving information about applications
Returned application information
LaunchApp()
Parameters for launching an application
LaunchDoc()
Parameters for launching an application
ActionScript Calendar Service API
GetList()
Parameters for retrieving calendar information
Returned calendar information
Add()
Parameters for adding and updating calendar information
Delete()
Parameters for deleting calendar information
Import()
Parameters for importing calendar entries
Export()
Parameters for exporting calendar entries
RequestNotification()
Parameters for change notifications
Returned notification information
Calendar entries
Calendar entry properties
Properties and calendar entry types
ActionScript Contacts Service API
GetList()
Parameters for retrieving contact information
Returned contact information
Add()
Parameters for adding and editing contact information
Delete()
Parameters for deleting contact information
Import()
Parameters for importing a contact
Export()
Parameters for exporting a contact
Organise()
Parameters for organizing contacts in a contact group
Supported contact keys
ActionScript Landmarks Service API
New()
GetList()
Parameters for retrieving landmark information
Filter criteria for landmarks
Filter criteria for landmark categories
Filter criteria for landmark databases
Returned landmark information
Add()
Parameters for adding and editing landmark information
Delete()
Parameters for deleting landmark information
Import()
Parameters for importing landmarks
Export()
Parameters for exporting landmarks
Organise()
Parameters for organizing landmarks in a landmark category
Landmarks, categories, and databases
Landmark
Landmark category
Landmark database
ActionScript Location Service API
GetLocation()
Parameters for retrieving location information
Returned location information
Trace()
Calculate()
Calculation parameters
Calculation results
CancelNotification()
ActionScript Logging Service API
Add()
Parameters for adding a log entry
GetList()
Parameters for retrieving log events
Returned log event information
Delete()
Parameters for deleting an event
RequestNotification()
Parameters for requesting notification
ActionScript Media Management Service API
GetList()
Parameters for retrieving media information
Returned media information
ActionScript Messaging Service API
GetList()
Parameters for retrieving messaging information
Returned messaging information
Send()
Parameters for sending a message
RegisterNotification()
Returned notification information
CancelNotification()
ChangeStatus()
Delete()
ActionScript Sensor Service API
FindSensorChannel()
Parameters for searching sensor channels
RegisterForNotification()
Parameters for receiving sensor data
Returned sensor data
GetChannelProperty()
Parameters for retrieving channel property information
Returned channel property information
Sensor channel information
ActionScript SystemInfo Service API
GetInfo()
Parameters for retrieving system attribute information
SetInfo()
Parameters for modifying a system attribute value
GetNotification()
Parameters for change notifications
System attributes
Supported system attributes (entities and keys)
System data types
Service API error codes
Developer resources
Discussion about this resource
Flash Lite examples
Flash Lite applications
Flash Lite components and code snippets
Java Developer's Library 3.3
Legal notice
Change history
Guide to Java ME Developer's Library
Introduction
S60 and Series 40 platform
New features in S60 5th Edition
New features in Series 40 6th Edition
S60 device characteristics
Series 40 device characteristics
Java Platform Micro Edition (Java ME)
Java ME on Series 40 and S60 platform
Supported Java™ APIs
Java Runtime for S60
Software Update for S60
Getting started with Mobile Java
MIDP applications (MIDlets)
Development environment requirements
Configuring NetBeans
Configuring Eclipse
Development process overview
MIDP project structure
Creating, building and running MIDlets
Packaging MIDlets
JAR files
JAD files
Creating, building and running your first MIDlet
Creating and building the example MIDlet
Creating MIDlets in NetBeans
Source code for the example
Implementing MIDlets
Application Management Software
Implementing MIDlet lifecycle requirements
Push applications
Persistent storage
System properties
Designing MIDlets
Basic considerations
Designing for multiple devices
Testing MIDlets
Mobile device emulator
Simulating events
Diagnostics window
Debug settings in Eclipse and NetBeans
Diagnostics and tracing
EcmtAgent
Device Connectivity Tool
Output streams
Other diagnostics options
On-device debugging
Deploying MIDlets to a device
Over-the-Air (OTA)
Direct PC connection
E-mail and MMS
MIDlet pre-deployment
MIDP FAQ
Tools
MIDlets
Devices
Where to go next
Developer's Guides
UI and graphics
Introduction to User Interface
UI elements and controls
Touch UI
Themes
Scalability
LCDUI
LCDUI overview
High-level APIs
Low-level APIs
Command handling
Interplay with Application Management Software
Using the LCDUI
Alert
List
TextBox
Form
ChoiceGroup
CustomItem
DateField
Gauge
ImageItem
Spacer
StringItem
TextField
Canvas
Graphics
Command
Media keys
Example: Creating a simple test MIDlet
Prerequisites
Designing the SimpleTest MIDlet
Developing the SimpleTest MIDlet
Creating the project environment
Implementing the MIDlet lifecycle and screen elements
Creating the interaction with Canvas
Building and running in an emulator
Deploying to a device
LCDUI - Setting softkey label location
eSWT
eSWT overview
Using eSWT
eSWT considerations for experienced LCDUI developers
Example: HelloWorld in eSWT
Basic components
Browser
Button
CaptionedControl
Combo box
Command
DateEditor
Dialog
HyperLink
Label
Layout
List and SortedList
ListBox
MessageBox
Slider
Table
Text, TextExtension, ConstrainedText
Tree
Example: Movie booking MIDlet
Prerequisites
Designing MovieBooking
Developing MovieBooking
Implementing the main MIDlet
Implementing splash screen
Implementing the database connections
Implementing the UI elements
Implementing the seat selection screen
Building and running
Deploying to a device
Nokia UI API
Introduction
Using Nokia UI API
Full-Screen Canvas
Other UI extensions
Audio extensions
Other extensions
MIDP 2.0 games
MIDP 2.0 Game API overview
Using the MIDP 2.0 Game API
GameCanvas
MIDP 2.0 Media API
Example: Using basic Game elements
Prerequisites
Implementation of the Sheepdog MIDlet
Developing the Sheepdog MIDlet
Creating the project environment
Implementing the main MIDlet
Implementing the splash screen
Implementing the UI elements
Implementing the game environment
Creating the game characters
Implementing the game sound
Implementing the game functionality
Building and running in an emulator
Deploying to a device
Mobile 3D graphics
Mobile 3-D Graphics API overview
Using the M3G API
Graphics3D
Scene graph
Example: Using 3D graphics in application development
Prerequisites
Implementation of the Maze3DMIDlet
Implementation of the Scene Graph
Maze Construction and Geometry
Camera / Player Movement
Game Setup
Developing the Maze3DMIDlet
Creating the project environment
Implementing the main MIDlet
Implementing the environment
Implementing the UI elements
Implementing the Graphics3DProperties class
Building and running in an emulator
Deploying to a device
Scalable 2D vector graphics
Scalable 2D Vector Graphics API overview
Scalability
Main use cases
Example: Creating SVG graphics
Prerequisites
Implementation of the HelloWorldMIDlet
Developing the HelloWorldMIDlet
Creating the project environment
Implementing the HelloWorldMIDlet
Creating the SvgCanvas1 class
Building and running in an emulator
Deploying to a device
Example: Loading and manipulating pre-generated SVG graphics
Prerequisites
Implementation of the LoadStaticMIDlet
Developing the LoadStaticMIDlet
Creating the project environment
Implementing the LoadStaticMIDlet
Creating the SvgCanvas2 class
Building and running in an emulator
Deploying to a device
Example: Playing animated SVG content
Prerequisites
Implementation of the LoadStaticMidlet
Developing the SvgAnimatorMidlet
Creating the project environment
Implementing the SvgAnimatorMidlet
Building and running in an emulator
Deploying to a device
Multimedia
Multimedia in mobile application development
Multimedia applications
Mobile Media API overview
Using the Mobile Media API
Architecture
Player State Model
Player Content Types
Checking API availability
Playing Tones and Tone Sequences
Playing sampled sound and MIDI
Playing Video
Saving resources when playing video multiple times
Recording sound and video
Time Bases
Taking photos
StopTimeControl
VolumeControl
Security issues
SDK versus devices
Recommended practices
Content Type selection
Application resource management
Player pooling
Remote resources
Minimizing media playback delay
Restarting the Player after being unavailable
Stopping playback when a MIDlet is switched to the background
Playing DRM-protected media
MMAPI Example: Creating a multimedia player
Media Sampler MIDlet
AudioCanvas
Video source selector
VideoCanvas
DRM MIDI
MMAPI support
Prerequisites
Implementation of the Media Sampler MIDlet
Developing the Media Sampler MIDlet
Creating the project environment
Creating the main MIDlet
Creating the media handling classes
Creating the UI elements
Building and running in an emulator
Deploying to a device
Advanced multimedia supplements
Advanced Multimedia Supplements API overview
Using the AMMS API
EffectModule
GlobalManager
Module
SoundSource3D
Spectator
Controls in AMMS
EffectControl
PanControl
PriorityControl
CommitControl
DistanceAttenuationControl
DopplerControl
LocationControl
OrientationControl
AudioVirtualizerControl
EqualizerControl
ReverbControl
ReverbSourceControl
System property usage
Example: 3D audio in application development
Prerequisites
Implementation of the AMMSMIDlet
Developing the AMMSMIDlet
Creating the project environment
Creating the main MIDlet
Creating the environment
Creating the trigonometric functions
Creating the interactive elements
Building and running in an emulator
Deploying to a device
Security
Introduction to MIDP security
Security risks in the MIDP environment
Permissions
Security prompts
Protection domains
Function groups
Security policies
S60 security policy
MSA security policy
AT&T security policy
Trusted MIDlets
Untrusted MIDlets
APIs and security
Developer's guides
Signed MIDlets
Example: Signing MIDlets
Prerequisites
Creating the project environment
Creating SignedMIDlet
Adding permissions
Signing the MIDlet
Signing procedure using command line utilities
Running the MIDlet either as untrusted or trusted
Untrusted MIDlet
Trusted MIDlet
Deploying to a device
Troubleshooting the signing procedure
Recommended practices
Certificate acquisition
Certificates' trust settings
Certificate chains
Certificate expiration
Certificate revocation
MIDlet updates
Appendix A Summary of Protected Methods
MIDP 2.0
Bluetooth API (JSR-82)
Wireless Messaging API (JSR-120)
Wireless Messaging API 2.0 (JSR-205)
Mobile Media API 1.1 (JSR-135)
Advanced Multimedia Supplements API (JSR-234):
Location API (JSR-179)
PDA Optional Packages (JSR-75)
File Connection API
PIM API
J2ME™ Web Services (JSR-172)
Security and Trust Services API (JSR-177)
SIP API (JSR-180)
Mobile Sensor API (JSR-256)
Encrypted messages
SATSA-CRYPTO overview
Using SATSA-CRYPTO
Encryption/Decryption
Message Digests
Signatures
Example: Creating encrypted messages
Prerequisites
Implementation of SATSA MIDlet
Creating the project environment
Developing SATSA MIDlet
Implementing the SATSAMIDlet
Implementing the Codec class
Implementing the MessageStore class
Implementing the ListScreen class
Implementing the NewScreen class
Implementing the EncryptScreen class
Implementing the PasswordScreen class
Implementing the DecryptScreen class
Implementing the InfoScreen class
Building and running in an emulator
Deploying to a device
Digital signatures
SATSA-PKI overview
Using SATSA-PKI
Creating signing requests and managing user credentials
Using signature services
Example: Creating digital signatures
Prerequisites
Implementation of the PKI MIDlet
Developing the PKI MIDlet
Building and running in an emulator
Deploying to a device
APDU messages
SATSA-APDU overview
Using SATSA-APDU
Example: Creating an APDU connection
Prerequisites
Implementation of the APDU MIDlet
Developing the APDU MIDlet
Building an running in an emulator
Deploying to a device
Wireless messaging
Wireless messaging in Java™ ME
MMS messages
Wireless Messaging API 2.0 overview
Using the Wireless Messaging API 2.0
Example: Creating and sending MMS messages
User Interface
Prerequisites
Implementing the MMS MIDlet
Developing the MMS MIDlet
Creating the project environment
Implementing the main MIDlet
Implementing the UI elements
Building and running in an emulator
Deploying to a device
Data handling
Data Handling in Java™ ME
File access
FileConnection API overview
Using FC API
FileConnection interface considerations
Security considerations
Nokia-Specific Directories
Example: Creating a file access system
Prerequisites
Implementation of ImageViewer
Creating the project environment
Developing ImageViewer
Implementing the main MIDlet
Implementing MIDlet functionality
Implementing UI classes
Building and running in an emulator
Deploying to a device
PIM event handling
PIM API overview
Using the PIM API
Security considerations
PIMList databases
Contact list database
Event list database
ToDo database
Example: Creating and sending an event
Prerequisites
Implementation of Event-Sharing MIDlet
Creating the project environment
Developing Event-Sharing MIDlet
Implementing the main MIDlet
Implementing the UI classes
Implementing the back end functions
Building and running in an emulator