3. Enough Software
! Enough Software offers a highly popular open
source suite for mobile software development
– Incorporation: end of 2004 in Bremen, Germany
– Open Source dual licensing model
– Over 300,000 downloads of open source version of
J2ME Polish developer tool
– “Pro J2ME Polish” book published by Apress (New
York)
– Strong know-how base in Mobile Applications, J2ME
and UI Development
4. Business Units
! Mobile Development Tools
– J2ME Polish: Java development framework
– Charon: Textmessaging application framework
! Mobile Services
– Support, Consulting & Training
– Application Development
– Porting of Applications
– Designing Applications
– J2ME Polish Extensions
! Mobile Solutions
– OTA Server & Hosting
5. J2ME Polish
! Enough Software provides mobile developers
with software development tools that...
– overcome mobile device fragmentation,
– “polish” the look and feel of mobile applications
! J2ME Polish contains a flexible and powerful
library for adapting and designing mobile
applications
! Multiple Platforms
– J2ME / JavaME
– BlackBerry
– DoJa
– WIPI
– .NET Compact Framework (forthcoming)
6. Customers
! More than 100 commercial licensees from
around the world including:
8. Motivation: Fragmentation
! Mobile device fragmentation limits mobile
application adoption and thereby Carriers’ ARPU
growth
– Different hardware
– Different API Support
– Different interpretations of standards
– Device bugs
9. Motivation: Design
! The mobile Java standard only allows limited
design of application, unless every detail is
drawn by the application itself
– Standard implementations do not allow to
influence the CI and look and feel of the
application
– Adapting designs to different environments or
customers difficult
– Design changes require changing the source code of
applications
public void paint( Graphics g ) {
Font font = Font.getDefaultFont();
g.setFont( font );
g.setColor( 0x000000 );
g.drawText( “Hello World”, x, y, Graphics.LEFT | Graphics.TOP );
g.setStroke( Graphics.SOLID );
g.setColor( 0xFF0000 );
g.drawLine( x, y + font.getHeight(), x + 200, y + font.getFontHeight() );
}
11. Structure of J2ME Polish
! Device Database
! Build Framework Build Framework Client API
! Client API
Device Database
! Further Components:
– Tools
– IDE Integration
12. Device Database
! Device definitions as
the foundation Build Framework Client API
! Detailed information
about J2ME capable Device Database
devices - APIs,
certificates, screen resolutions, known issues, ...
! Used by the Build Framework and the Client API
! XML based: easy extensible
! From J2ME Polish 2.1 onwards:
– interactive Web 2.0 database
– using SysInfo for collecting device information
13. Build Framework
! Automates necessary steps
for creating J2ME apps Build Framework Client API
! Ant based Device Database
! Can be integrated into
any IDE For every
target device: Preprocess
! Extensible
Compile
Package
Finalize
Emulate
14. Client API
! GUI
– compatible to MIDP 2.0 Build Framework Client API
– Design outside of the Device Database
application using CSS
– Non standard screens and items
– Uses Device Database and Build Framework for
adapting and customizing
! IO
– Serialization & Storage
! Utilities
– ArrayList, HashMap, IntHashMap, Locale, RgbImage,
ImageUtil, TextUtil, ...
! Text to Speech converter
16. Designing Applications
! Design is specified outside of the application’s
source code
! Customize the application just by modifying CSS
! Example: title { font-color: green; }
17. Standard Components
! ChoiceGroup
– Specify the look and feel of each
ChoiceGroup
! Gauge
– Depending on the mode many different
visualizations are possible for Gauges
! TextFields
– Input modes: Native vs. Direct
– Support for predictive text input
18. GUI Effects
! Text Effects
– bitmap (TTF), gradient, outline, rotate, shadow, ...
! Screen Transition Effects
– cube, minimize, maximize, move, ...
! Further Animations
– animated backgrounds, animation of elements
19. Advanced GUI Elements
! Screens
– TabbedForm, FramedForm, SplashCanvas, TabbedList,
FilteredList
! Items
– ListItem, TreeItem, SpriteItem, BrowserItem, ChartItem,
PictureBrowser, FilteredChoiceGroup, ContainerViews
like Carousels, Tables and animated arrangements.
Unlimited flexibility by using ItemViews which are
responsible for rendering and animation of items.
! Menu
– Subcommands
21. GUI: BrowserItem (1/2)
! The BrowserItem combines the advantages of
server side contents and client side interactive
applications
! Server side contents can be changed
dynamically and administered centrally
! Client side application allow to interact with the
user as well as device services such a bluetooth,
the storage system or messaging
! The J2ME Polish BrowserItem allows you embed
and interact with HTML or XML based contents
in any application
22. GUI: BrowserItem (2/2)
! Extend the BrowserItem by implementing your
own protocol handlers (like navigate://
search=Bondstreet&city=London), tag handlers or
micro format parsers
! Integrate complex components such as charts
within the shown data
23. Serialization Framework
! The serialization framework of J2ME Polish
allows you to easily store and read data
! Just implement Serializable:
import de.enough.polish.io.Serializable;
public class Contact implements Serializable {
String name;
Vector friends;
Image picture;
}
! For full control you can implement Externalizable
as well - just like on JavaSE and JavaEE.
! Use de.enough.polish.io.Serializer for reading and
writing serializable classes to input/output
streams, e.g. streams from HTTP connections
24. RmsStorage
! Use RmsStorage for saving and loading data
from the Recordstore Management System:
import de.enough.polish.io.RmsStorage;
public class AddressBook {
Vector contacts;
RmsStorage storage;
public AddressBook {
this.storage = new RmsStorage();
try {
this.contacts =
(Vector) this.storage.read( quot;AddressBookquot; );
} catch (IOException e) { // no contacts stored
this.contacts = new Vector();
}
}
public void save throws IOException {
this.storage.save( this.contacts, quot;AddressBookquot; );
}
}
25. Java 5 Syntax Support
! Java 5 SE introduced syntax improvements to
ensure the type safety of applications during the
compilation phase:
– Generics: Vector<Integer> numbers;
– Enum constants: enum Weekday { MONDAY, TUESDAY,
WEDNESDAY, ... };
– Autoboxing: numbers.add( 12 );
! J2ME Polish allows you to use these
improvements for J2ME applications as well, just
by adding a postcompiler tag to the build.xml
script:
<postcompiler name=quot;java5quot; />
26. Floating Point Support for CLDC 1.0
! The “floater” extension allows you to use normal
floating points operations as well as
java.lang.Math functions on CLDC 1.0 devices
! Activate the extension in the build.xml:
<postcompiler name=quot;floaterquot; />
27. Migration
! Migration of existing J2ME projects is easy:
– J2ME Polish is compatible to the MIDP 2.0 standard,
therefore no changes are required on the source code
level
– Create or adapt a sample build.xml script
– Use #style preprocessing directives for applying
individual styles to screens or GUI elements
– Create a polish.css textfile for designing the UI of the
application
– Run J2ME Polish
28. Eclipse Integration
! The J2ME Polish plugin for Eclipse (Mepose)
eases the development of mobile applications
– select target device from drop down
– debugging
– emulating
– preprocessing syntax highlighting
– preprocessing code completion
– the J2ME Polish build and
emulator framework is used
for building applications and
launch of emulators
– Mepose runs like J2ME Polish on
any OS: Windows, OS X, Linux