Revision: v2.2.15
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 04 Oct 2010 00:10:53 +0300
changeset 79 2f468c1958d0
parent 76 4ad59aaee882
Revision: v2.2.15 Kit: 201039
build/buildutils/checkemptydirectories.py
build/buildutils/extractJavaLocFiles_qt.py
build/loc/resources_qt.jar
build/makefile.javaversion
build/sis/java_3_1.pkg
build/symbian_uids.pri
inc/build_defines.hrh
inc/build_defines.pri
inc/java.txt
java_stubs/javaregistry/clientserver/client/build/javaregclient.mmp
java_stubs/javaregistry/clientserver/client/bwins/javaregistryclientu.def
java_stubs/javaregistry/clientserver/client/eabi/javaregistryclientu.def
java_stubs/javaregistry/clientserver/client/inc/writeablejavaregistrypackageentry.h
java_stubs/javaregistry/clientserver/client/src/javaattribute.cpp
java_stubs/javaregistry/clientserver/client/src/javaregistrypackageentry.cpp
java_stubs/javaregistry/clientserver/client/src/writeablejavaregistrypackageentry.cpp
javacommons/connectionmanager/src.s60/connectionmanager.cpp
javacommons/security/javasrc.cdc/com/nokia/mj/impl/security/midp/authorization/PermissionGranter.java
javacommons/security/javasrc/com/nokia/mj/impl/security/midp/storage/SecurityStorage.java
javacommons/security/javasrc/com/nokia/mj/impl/security/utils/SecurityPermissionTexts.java
javacommons/security/javasrc/com/nokia/mj/impl/security/utils/SecurityPromptMessage.java
javacommons/security/src/midpauthenticationmoduleimpl.cpp
javacommons/security/src/utils/securityutils.cpp
javacommons/security/src/utils/securityutils.h
javacommons/utils/javasrc/com/nokia/mj/impl/utils/DebugUtils.java
javacommons/utils/javasrc/com/nokia/mj/impl/utils/ErrorMessageBase.java
javacommons/utils/javasrc/com/nokia/mj/impl/utils/Formatter.java
javacommons/utils/javasrc/com/nokia/mj/impl/utils/Id.java
javacommons/utils/javasrc/com/nokia/mj/impl/utils/InstallerDetailedErrorMessage.java
javacommons/utils/javasrc/com/nokia/mj/impl/utils/InstallerErrorMessage.java
javacommons/utils/javasrc/com/nokia/mj/impl/utils/Logger.java
javacommons/utils/javasrc/com/nokia/mj/impl/utils/ResourceLoader.java
javacommons/utils/src.s60/properties.cpp
javacommons/utils/src/logger.cpp
javacommons/utils/tsrc/build/java/build.xml
javacommons/utils/tsrc/build/native/exports.inf
javacommons/utils/tsrc/javasrc/com/nokia/mj/impl/utils/DebugUtilsTests.java
javacommons/utils/tsrc/javasrc/com/nokia/mj/impl/utils/LoggerTests.java
javacommons/utils/tsrc/tst.bat
javaextensions/bluetooth/bluetoothcommons/bluetoothplatformcontrol/src.s60/s60bluetoothplatformcontrol.cpp
javaextensions/bluetooth/bluetoothcommons/bluetoothplatformcontrol/src/btplatformcontrolnative.cpp
javaextensions/bluetooth/bluetoothcommons/src.s60/bluetoothclientconnection.cpp
javaextensions/bluetooth/bluetoothcommons/src.s60/bturlparams.cpp
javaextensions/bluetooth/bluetoothcommons/src.s60/servicerecord.cpp
javaextensions/bluetooth/bluetoothplugins/btl2cappushplugin/src.s60/btl2capserverconnection.cpp
javaextensions/bluetooth/bluetoothplugins/btl2cappushplugin/src/btl2cappushserverconnection.cpp
javaextensions/bluetooth/bluetoothplugins/btspppushplugin/src.s60/btrfcommserverconnection.cpp
javaextensions/bluetooth/bluetoothplugins/btspppushplugin/src/rfcommpushserverconnection.cpp
javaextensions/bluetooth/omjbluetooth/src.s60/bluetoothstacks60native.cpp
javaextensions/bluetooth/omjbluetooth/src.s60/discoveryagent.cpp
javaextensions/bluetooth/omjbluetooth/src.s60/discoveryagent.h
javaextensions/midppush/build/build.xml
javaextensions/midppush/javasrc/com/nokia/mj/impl/push/PushUtil.java
javaextensions/midprms_db/tsrc/build/build.xml
javaextensions/pim/javasrc.s60/com/nokia/mj/impl/pim/utils/NativeError.java
javaextensions/pim/javasrc/com/nokia/mj/impl/pim/PIMManager.java
javamanager/javaappscheme/src.s60/serviceapp.cpp
javamanager/javaappscheme/src.s60/serviceapp.h
javamanager/javacaptain/extensionplugins/javacertstore/inc/javacertstore.h
javamanager/javacaptain/extensionplugins/javacertstore/src/javacertstore.cpp
javamanager/javacaptain/systemams/build/systemams.mmp
javamanager/javainstaller/installer/build/javainstaller.pro
javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/jsrpluginnotifier/JsrPluginNotifierBase.java
javamanager/javainstaller/installer/src.s60/applicationregistrator/sifregistrator.cpp
javamanager/javainstaller/installer/tsrc/javasrc/com/nokia/mj/impl/installer/jsrpluginnotifier/JsrPluginNotifierTest.java
javamanager/javainstaller/installer/tsrc/javasrc/com/nokia/mj/impl/installer/jsrpluginnotifier/TestPlugin2.java
javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt/InstallerUiEswt.java
javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/CertificateDetailsView.java
javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/ErrorView.java
javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/InstallConfirmationView.java
javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/InstallerUiEswt.java
javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/InstallerUiTexts.java
javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/LaunchAppQueryView.java
javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/PermissionConfirmationView.java
javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/PermissionDetailsView.java
javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/ProgressView.java
javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/RuntimeConfirmationView.java
javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/ViewBase.java
javamanager/javasettings_qt/src/applicationsettingsview.h
javamanager/javasettings_qt/src/javaapplicationsettingsview.cpp
javamanager/javasettings_qt/src/javaapplicationsettingsview.h
javamanager/javasettings_qt/src/javaapplicationsettingsview_p.cpp
javamanager/javasettings_qt/src/javaapplicationsettingsview_p.h
javaruntimes/midp/runtime/build/javamidpruntime.pro
javaruntimes/midp/runtime/javasrc/com/nokia/mj/impl/rt/midp/SchemeHandler.java
javaruntimes/midp/runtime/javasrc/com/nokia/mj/impl/rt/midp/SchemeHandlerBase.java
javaruntimes/midp/runtime/javasrc/com/nokia/mj/impl/rt/midp/StorageAccessor.java
javaruntimes/midp/runtime/javasrc/com/nokia/mj/impl/rt/taskmanager/SchemeHandler.java
javaruntimes/midp/runtime/javasrc/com/nokia/mj/impl/rt/taskmanager/SchemeHandlerImpl.java
javaruntimes/midp/runtime/javasrc/javax/microedition/midlet/MIDlet.java
javauis/coreui/tsrc/testcoreui/javasrc/com/nokia/mj/impl/coreuitest/CoreUiTests.java
javauis/coreui_qt/build/build.xml
javauis/coreui_qt/build/bwins/javacoreuiu.def
javauis/coreui_qt/build/eabi/javacoreuiu.def
javauis/coreui_qt/build/javacoreui.pro
javauis/coreui_qt/javasrc/com/nokia/mj/impl/coreuiqt/CoreUiImpl.java
javauis/coreui_qt/src/coreuijni.cpp
javauis/coreui_qt/src/coreuiqtimpl.cpp
javauis/coreui_qt/src/coreuiqtimpl.h
javauis/eswt_qt/com.nokia.swt.extensions/extensions/org/eclipse/swt/internal/extension/GraphicsUtil.java
javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/GC.java
javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Image.java
javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Composite.java
javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Control.java
javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Shell.java
javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/library/graphics/qt/windowsurfaceimpl_symbian.cpp
javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/org/eclipse/swt/graphics/Internal_GfxPackageSupport.java
javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/org/eclipse/swt/internal/qt/OS.java
javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/org/eclipse/swt/widgets/Internal_PackageSupport.java
javauis/javauis.pro
javauis/lcdui_qt/src/javax/microedition/lcdui/Alert.java
javauis/lcdui_qt/src/javax/microedition/lcdui/Canvas.java
javauis/lcdui_qt/src/javax/microedition/lcdui/CustomItem.java
javauis/lcdui_qt/src/javax/microedition/lcdui/Display.java
javauis/lcdui_qt/src/javax/microedition/lcdui/Displayable.java
javauis/lcdui_qt/src/javax/microedition/lcdui/Gauge.java
javauis/lcdui_qt/src/javax/microedition/lcdui/Item.java
javauis/lcdui_qt/src/javax/microedition/lcdui/KeyTable.java
javauis/lcdui_qt/src/javax/microedition/lcdui/ScrolledTextComposite.java
javauis/lcdui_qt/src/javax/microedition/lcdui/TextBox.java
javauis/lcdui_qt/tsrc/src/com/nokia/openlcdui/mt/alert/AlertTest.java
javauis/lcdui_qt/tsrc/src/com/nokia/openlcdui/mt/gauge/GaugeTest.java
javauis/mmapi_qt/baseline/javasrc.emc/com/nokia/microedition/media/BufferDataSource.java
javauis/mmapi_qt/baseline/javasrc.emc/com/nokia/microedition/media/ManagerImpl.java
javauis/mmapi_qt/baseline/javasrc.mmf/com/nokia/microedition/media/BufferDataSource.java
javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/ConnectorDataSource.java
javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/HttpDataSource.java
javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/InputStreamDataSource.java
javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/InputStreamSeekControl.java
javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/PlayerImpl.java
javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/SourcePlayer.java
javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/animation/AnimationPlayer.java
javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/animation/AnimationPlayerFactory.java
javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/protocol/SeekThread.java
javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/protocol/SourceStreamReader.java
javauis/mmapi_qt/baseline/javasrc/javax/microedition/media/protocol/DataSource.java
javauis/mmapi_qt/baseline/src.nga/cmmasurfacewindow.cpp
javauis/mmapi_qt/baseline/src/cmmaaudioplayer.cpp
javauis/mmapi_qt/baseline/src/cmmavideocontrol.cpp
javauis/nokiauiapi_qt/.classpath
javauis/nokiauiapi_qt/.project
javauis/nokiauiapi_qt/build/build.pro
javauis/nokiauiapi_qt/build/build.xml
javauis/nokiauiapi_qt/build/bwins/javanokiauiu.def
javauis/nokiauiapi_qt/build/eabi/javanokiauiu.def
javauis/nokiauiapi_qt/build/javanokiaui.pro
javauis/nokiauiapi_qt/build/nokiauiapiqt/build.xml
javauis/nokiauiapi_qt/build/nokiauiapiqt/bwins/javanokiauiu.def
javauis/nokiauiapi_qt/build/nokiauiapiqt/eabi/javanokiauiu.def
javauis/nokiauiapi_qt/build/nokiauiapiqt/javanokiaui.pro
javauis/nokiauiapi_qt/build/softindicatorplugin/javasoftindicatorplugin.pro
javauis/nokiauiapi_qt/build/subsystem.mk
javauis/nokiauiapi_qt/inc/CSoftNotification.h
javauis/nokiauiapi_qt/inc/autorelease.h
javauis/nokiauiapi_qt/javasrc/.classpath
javauis/nokiauiapi_qt/javasrc/.project
javauis/nokiauiapi_qt/javasrc/com/nokia/mid/ui/DeviceControl.java
javauis/nokiauiapi_qt/javasrc/com/nokia/mid/ui/SoftNotification.java
javauis/nokiauiapi_qt/javasrc/com/nokia/mid/ui/SoftNotificationException.java
javauis/nokiauiapi_qt/javasrc/com/nokia/mid/ui/SoftNotificationImpl.java
javauis/nokiauiapi_qt/javasrc/com/nokia/mid/ui/SoftNotificationListener.java
javauis/nokiauiapi_qt/javasrc_j2me/com/nokia/mid/ui/TactileFeedback.java
javauis/nokiauiapi_qt/javasrc_j2se/com/nokia/mid/ui/TactileFeedback.java
javauis/nokiauiapi_qt/library/nokiauiapi.pri
javauis/nokiauiapi_qt/library/os.cpp
javauis/nokiauiapi_qt/softindicatorplugin/inc/javasoftindicator.h
javauis/nokiauiapi_qt/softindicatorplugin/inc/javasoftindicatorplugin.h
javauis/nokiauiapi_qt/softindicatorplugin/src/javasoftindicator.cpp
javauis/nokiauiapi_qt/softindicatorplugin/src/javasoftindicatorplugin.cpp
javauis/nokiauiapi_qt/src/CSoftNotification.cpp
javauis/nokiauiapi_qt/src/com/nokia/mid/ui/DeviceControl.java
javauis/nokiauiapi_qt/src/os.cpp
javauis/nokiauiapi_qt/src_j2me/com/nokia/mid/ui/TactileFeedback.java
javauis/nokiauiapi_qt/src_j2se/com/nokia/mid/ui/TactileFeedback.java
javauis/subsystem_qt.mk
rom/java_3_1.iby
rom/javalocalization_3_1.iby
rom/midpodclist30
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/build/buildutils/checkemptydirectories.py	Mon Oct 04 00:10:53 2010 +0300
@@ -0,0 +1,39 @@
+#!/usr/bin/python
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#   Checks for empty directories (ignoring .svn directories) recursively 
+#   starting from the given path. This check is done because Mercurial does 
+#   not support empty directories.
+
+import sys, os, re
+
+def main():
+
+    def visitFun(arg, dirname, names):
+
+        # Skip SVN directories
+        if dirname.find("\\.svn") != -1:
+            return
+        
+        # Check if the directory is empty (except for the .svn subdirectory)
+        if len(names) == 0 or (len(names) == 1 and names[0] == ".svn"):
+            print dirname
+
+    root = sys.argv[1]
+    os.path.walk(root, visitFun, None)
+
+    
+if __name__ == "__main__":
+    main()
--- a/build/buildutils/extractJavaLocFiles_qt.py	Fri Sep 17 08:28:21 2010 +0300
+++ b/build/buildutils/extractJavaLocFiles_qt.py	Mon Oct 04 00:10:53 2010 +0300
@@ -11,7 +11,7 @@
 #
 # Contributors:
 #
-# Description: 
+# Description:
 #
 #!/usr/bin/python
 #
@@ -42,7 +42,9 @@
     'javausermessages',
     'javaapplicationsettings',
     # loc files for qt
+    'common_errors',
     'javaapplicationinstaller',
+    'javaapplicationinstallererrors',
     'javaapplicationsecuritymessages',
     'javaruntimeapplicationsettings',
     'javaruntimecertificatemanagement'
@@ -106,11 +108,14 @@
 
         # Sanity check - we have no good plurality support for qt-localisation
         if translation.find("numerusform") != None:
-            raise Exception("Conversion error at %s / %s: numerus form (qt plurality) is not supported" % (filename, id))
+            print "WARNING at %s / %s: numerus form (qt plurality) is not supported" % (filename, id)
 
+        numerusforms = translation.findall("numerusform")
         lengthvariant = translation.find("lengthvariant")
         if lengthvariant != None:
             text = lengthvariant.text
+        elif len(numerusforms) > 0:
+            text = numerusforms[0].text
         else:
             text = translation.text
 
@@ -118,10 +123,13 @@
         if text == None:
             text = message.find("source").text
 
-        # Sanity check - no newlines in text allowed
-        if "\n" in text:
-            raise Exception("Conversion error in %s / %s: newline found" % (filename, id))
-        
+        # Escape characters
+        text = text.replace("\\", "\\\\")
+        text = text.replace("\n", "\\n")
+        text = text.replace("\t", "\\t")
+        text = text.replace("\"", "\\\"")
+        text = text.replace("'", "\\'")
+
         messages.append((id, text))
 
     return messages
Binary file build/loc/resources_qt.jar has changed
--- a/build/makefile.javaversion	Fri Sep 17 08:28:21 2010 +0300
+++ b/build/makefile.javaversion	Mon Oct 04 00:10:53 2010 +0300
@@ -1,2 +1,2 @@
 # Set Java version (must be dot separated, without spaces)
-JAVA_VERSION = 2.2.13
+JAVA_VERSION = 2.2.15
--- a/build/sis/java_3_1.pkg	Fri Sep 17 08:28:21 2010 +0300
+++ b/build/sis/java_3_1.pkg	Mon Oct 04 00:10:53 2010 +0300
@@ -314,12 +314,10 @@
 "\epoc32\release\armv5\urel\z\resource\java\security\policies\all.ser"-"c:\resource\java\security\policies\all.ser"
 
 
-; NOTE: Avkon versions are commented. Please replace with QT versions when porting is ready.
 ; UI binaries
 ; Dlls containing java byte code and their odc files
-;"\epoc32\release\armv5\urel\z\resource\java\jvm\lib\jrt\javacoreui.odc"-"c:\resource\java\jvm\lib\jrt\javacoreui.odc"
-;"\epoc32\release\armv5\urel\javacoreui.dll"-"c:\sys\bin\javacoreui.dll"
-;"\epoc32\data\z\resource\apps\javastartscreen.mif"-"c:\resource\apps\javastartscreen.mif"
+"\epoc32\release\armv5\urel\z\resource\java\jvm\lib\jrt\javacoreui.odc"-"c:\resource\java\jvm\lib\jrt\javacoreui.odc"
+"\epoc32\release\armv5\urel\javacoreui.dll"-"c:\sys\bin\javacoreui.dll"
 
 "\epoc32\release\armv5\urel\javaamms.dll"-"c:\sys\bin\javaamms.dll"
 "\epoc32\release\armv5\urel\z\resource\java\jvm\lib\jrt\javaamms.odc"-"c:\resource\java\jvm\lib\jrt\javaamms.odc"
@@ -352,3 +350,6 @@
 
 "\epoc32\release\armv5\urel\javaapplicationsettingsview.dll"-"c:\sys\bin\javaapplicationsettingsview.dll"
 "\epoc32\data\z\resource\qt\plugins\appsettings\javaapplicationsettingsview.qtplugin"-"c:\resource\qt\plugins\appsettings\javaapplicationsettingsview.qtplugin"
+
+"\epoc32\release\armv5\urel\javasoftindicatorplugin.dll"-"c:\sys\bin\javasoftindicatorplugin.dll"
+"\epoc32\data\z\resource\plugins\indicators\javasoftindicatorplugin.qtplugin"-"c:\resource\plugins\indicators\javasoftindicatorplugin.qtplugin"
--- a/build/symbian_uids.pri	Fri Sep 17 08:28:21 2010 +0300
+++ b/build/symbian_uids.pri	Mon Oct 04 00:10:53 2010 +0300
@@ -126,6 +126,7 @@
 contains(TARGET, javaopengles): TARGET.UID3 = 0x20031DD1
 contains(TARGET, javacentrep): TARGET.UID3 = 0x2002DCE1
 contains(TARGET, javachapi): TARGET.UID3 = 0x2002DCE4
+contains(TARGET, javasoftindicatorplugin): TARGET.UID3 = 0x20031E8E
 
 isEmpty(TARGET.UID3): error($${TEMPLATE} $${TARGET} : UID3 not defined. Please allocate UID3 and configure it either on $${TARGET}.pro file or in command symbian_uids.pri)
 
--- a/inc/build_defines.hrh	Fri Sep 17 08:28:21 2010 +0300
+++ b/inc/build_defines.hrh	Mon Oct 04 00:10:53 2010 +0300
@@ -15,8 +15,8 @@
 *
 */
 
-#define RD_JAVA_VERSION 2,2,13
-#define RD_JAVA_BIN_VERSION_NONQT 10.525
+#define RD_JAVA_VERSION 2,2,15
+#define RD_JAVA_BIN_VERSION_NONQT 10.527
 #define RD_JAVA_SYMBIAN_TARGET 
 #define RD_JAVA_S60_RELEASE_10_1 
 #define RD_JAVA_S60_RELEASE_10_1_ONWARDS 
--- a/inc/build_defines.pri	Fri Sep 17 08:28:21 2010 +0300
+++ b/inc/build_defines.pri	Mon Oct 04 00:10:53 2010 +0300
@@ -13,5 +13,5 @@
 #
 # Description: Generated file - do not edit manually
 #
-RD_JAVA_BIN_VERSION = 10.2.13
+RD_JAVA_BIN_VERSION = 10.2.15
 PROJECT_DEFINES *= RD_JAVA_SYMBIAN_TARGET RD_JAVA_S60_RELEASE_10_1 RD_JAVA_S60_RELEASE_10_1_ONWARDS RD_JAVA_S60_RELEASE_9_2_ONWARDS RD_JAVA_S60_RELEASE_5_0_ONWARDS RD_JAVA_UI_QT RD_JAVA_STDCPPV5 RD_JAVA_EPOCALLOWDLLDATA_FIX RD_JAVA_HTTP_EMC_ENABLED RD_JAVA_NGA_ENABLED SYMBIAN_UNIVERSAL_INSTALL_FRAMEWORK RD_JAVA_PROXIMITY_LISTENER_ENABLED RD_JAVA_OPENC_BETA_PATCH OPENLCDUI_ENABLED RD_JAVA_OPENLCDUI_ENABLED RD_JAVA_INSTALLERUI_ENABLED RD_JAVA_PREWARM RD_JAVA_ADVANCED_TACTILE_FEEDBACK RD_JAVA_APPLICATION_SETTINGS_QT RD_JAVA_MIDPRMS_DB 
--- a/inc/java.txt	Fri Sep 17 08:28:21 2010 +0300
+++ b/inc/java.txt	Mon Oct 04 00:10:53 2010 +0300
@@ -1,1 +1,1 @@
-2.2.13
+2.2.15
--- a/java_stubs/javaregistry/clientserver/client/build/javaregclient.mmp	Fri Sep 17 08:28:21 2010 +0300
+++ b/java_stubs/javaregistry/clientserver/client/build/javaregclient.mmp	Mon Oct 04 00:10:53 2010 +0300
@@ -41,6 +41,7 @@
 SOURCE          writeablejavaregistry.cpp 
 SOURCE          javaregistrybackupsupport.cpp
 SOURCE          javaregconverter.cpp
+SOURCE          javaattribute.cpp
 
 SOURCEPATH      ../../common/src
 SOURCE          javaregproperty.cpp
--- a/java_stubs/javaregistry/clientserver/client/bwins/javaregistryclientu.def	Fri Sep 17 08:28:21 2010 +0300
+++ b/java_stubs/javaregistry/clientserver/client/bwins/javaregistryclientu.def	Mon Oct 04 00:10:53 2010 +0300
@@ -1,57 +1,57 @@
 EXPORTS
 	??0CWriteableJavaRegistry@Registry@Manager@Java@@IAE@XZ @ 1 NONAME ; Java::Manager::Registry::CWriteableJavaRegistry::CWriteableJavaRegistry(void)
-	??0CWriteableJavaRegistryApplicationEntry@Registry@Manager@Java@@IAE@ABVTUid@@@Z @ 2 NONAME ; Java::Manager::Registry::CWriteableJavaRegistryApplicationEntry::CWriteableJavaRegistryApplicationEntry(class TUid const &)
-	??0CWriteableJavaRegistryEntry@Registry@Manager@Java@@IAE@ABVTUid@@@Z @ 3 NONAME ; Java::Manager::Registry::CWriteableJavaRegistryEntry::CWriteableJavaRegistryEntry(class TUid const &)
-	??0CWriteableJavaRegistryPackageEntry@Registry@Manager@Java@@IAE@ABVTUid@@@Z @ 4 NONAME ; Java::Manager::Registry::CWriteableJavaRegistryPackageEntry::CWriteableJavaRegistryPackageEntry(class TUid const &)
-	??1CJavaProperty@Registry@Manager@Java@@UAE@XZ @ 5 NONAME ; Java::Manager::Registry::CJavaProperty::~CJavaProperty(void)
-	??1CJavaRegistryBackupSupport@Registry@Manager@Java@@UAE@XZ @ 6 NONAME ; Java::Manager::Registry::CJavaRegistryBackupSupport::~CJavaRegistryBackupSupport(void)
+	??0CWriteableJavaRegistryApplicationEntry@Registry@Manager@Java@@IAE@ABVTUid@@@Z @ 2 NONAME ABSENT ; Java::Manager::Registry::CWriteableJavaRegistryApplicationEntry::CWriteableJavaRegistryApplicationEntry(class TUid const &)
+	??0CWriteableJavaRegistryEntry@Registry@Manager@Java@@IAE@ABVTUid@@@Z @ 3 NONAME ABSENT ; Java::Manager::Registry::CWriteableJavaRegistryEntry::CWriteableJavaRegistryEntry(class TUid const &)
+	??0CWriteableJavaRegistryPackageEntry@Registry@Manager@Java@@IAE@ABVTUid@@@Z @ 4 NONAME ABSENT ; Java::Manager::Registry::CWriteableJavaRegistryPackageEntry::CWriteableJavaRegistryPackageEntry(class TUid const &)
+	??1CJavaProperty@Registry@Manager@Java@@UAE@XZ @ 5 NONAME ABSENT ; Java::Manager::Registry::CJavaProperty::~CJavaProperty(void)
+	??1CJavaRegistryBackupSupport@Registry@Manager@Java@@UAE@XZ @ 6 NONAME ABSENT ; Java::Manager::Registry::CJavaRegistryBackupSupport::~CJavaRegistryBackupSupport(void)
 	??1CJavaRegistryEntry@Java@@UAE@XZ @ 7 NONAME ; Java::CJavaRegistryEntry::~CJavaRegistryEntry(void)
 	??1CWriteableJavaRegistry@Registry@Manager@Java@@UAE@XZ @ 8 NONAME ; Java::Manager::Registry::CWriteableJavaRegistry::~CWriteableJavaRegistry(void)
 	??1CWriteableJavaRegistryEntry@Registry@Manager@Java@@UAE@XZ @ 9 NONAME ; Java::Manager::Registry::CWriteableJavaRegistryEntry::~CWriteableJavaRegistryEntry(void)
 	??1CWriteableJavaRegistryPackageEntry@Registry@Manager@Java@@UAE@XZ @ 10 NONAME ; Java::Manager::Registry::CWriteableJavaRegistryPackageEntry::~CWriteableJavaRegistryPackageEntry(void)
-	??8CJavaProperty@Registry@Manager@Java@@QAEHABV0123@@Z @ 11 NONAME ; int Java::Manager::Registry::CJavaProperty::operator==(class Java::Manager::Registry::CJavaProperty const &)
-	?AddCertificateChainL@CWriteableJavaRegistryEntry@Registry@Manager@Java@@QAEXABVTDesC8@@@Z @ 12 NONAME ; void Java::Manager::Registry::CWriteableJavaRegistryEntry::AddCertificateChainL(class TDesC8 const &)
-	?AddEmbeddedEntryL@CWriteableJavaRegistryPackageEntry@Registry@Manager@Java@@QAEXABVTUid@@@Z @ 13 NONAME ; void Java::Manager::Registry::CWriteableJavaRegistryPackageEntry::AddEmbeddedEntryL(class TUid const &)
-	?BooleanProperty@CWriteableJavaRegistryEntry@Registry@Manager@Java@@IBEHJH@Z @ 14 NONAME ; int Java::Manager::Registry::CWriteableJavaRegistryEntry::BooleanProperty(long, int) const
+	??8CJavaProperty@Registry@Manager@Java@@QAEHABV0123@@Z @ 11 NONAME ABSENT ; int Java::Manager::Registry::CJavaProperty::operator==(class Java::Manager::Registry::CJavaProperty const &)
+	?AddCertificateChainL@CWriteableJavaRegistryEntry@Registry@Manager@Java@@QAEXABVTDesC8@@@Z @ 12 NONAME ABSENT ; void Java::Manager::Registry::CWriteableJavaRegistryEntry::AddCertificateChainL(class TDesC8 const &)
+	?AddEmbeddedEntryL@CWriteableJavaRegistryPackageEntry@Registry@Manager@Java@@QAEXABVTUid@@@Z @ 13 NONAME ABSENT ; void Java::Manager::Registry::CWriteableJavaRegistryPackageEntry::AddEmbeddedEntryL(class TUid const &)
+	?BooleanProperty@CWriteableJavaRegistryEntry@Registry@Manager@Java@@IBEHJH@Z @ 14 NONAME ABSENT ; int Java::Manager::Registry::CWriteableJavaRegistryEntry::BooleanProperty(long, int) const
 	?CertificateChain@CJavaRegistryEntry@Java@@QBEABVTDesC8@@H@Z @ 15 NONAME ; class TDesC8 const & Java::CJavaRegistryEntry::CertificateChain(int) const
 	?CertificateChain@CWriteableJavaRegistryEntry@Registry@Manager@Java@@QBEABVTDesC8@@H@Z @ 16 NONAME ; class TDesC8 const & Java::Manager::Registry::CWriteableJavaRegistryEntry::CertificateChain(int) const
-	?ChangeBURState@CJavaRegistryBackupSupport@Registry@Manager@Java@@QBEHABW4TBackupState@234@@Z @ 17 NONAME ; int Java::Manager::Registry::CJavaRegistryBackupSupport::ChangeBURState(enum Java::Manager::Registry::TBackupState const &) const
+	?ChangeBURState@CJavaRegistryBackupSupport@Registry@Manager@Java@@QBEHABW4TBackupState@234@@Z @ 17 NONAME ABSENT ; int Java::Manager::Registry::CJavaRegistryBackupSupport::ChangeBURState(enum Java::Manager::Registry::TBackupState const &) const
 	?ConstructL@CWriteableJavaRegistry@Registry@Manager@Java@@IAEXHH@Z @ 18 NONAME ; void Java::Manager::Registry::CWriteableJavaRegistry::ConstructL(int, int)
-	?ConstructL@CWriteableJavaRegistry@Registry@Manager@Java@@IAEX_J@Z @ 19 NONAME ; void Java::Manager::Registry::CWriteableJavaRegistry::ConstructL(long long)
+	?ConstructL@CWriteableJavaRegistry@Registry@Manager@Java@@IAEX_J@Z @ 19 NONAME ABSENT ; void Java::Manager::Registry::CWriteableJavaRegistry::ConstructL(long long)
 	?ConstructL@CWriteableJavaRegistryEntry@Registry@Manager@Java@@IAEXW4TJavaRegistryEntryType@4@@Z @ 20 NONAME ; void Java::Manager::Registry::CWriteableJavaRegistryEntry::ConstructL(enum Java::TJavaRegistryEntryType)
-	?DecideEntryTypeAndCreateL@CWriteableJavaRegistry@Registry@Manager@Java@@MBEPAVCWriteableJavaRegistryEntry@234@ABVTUid@@PAVCJavaPropertyArray@234@@Z @ 21 NONAME ; class Java::Manager::Registry::CWriteableJavaRegistryEntry * Java::Manager::Registry::CWriteableJavaRegistry::DecideEntryTypeAndCreateL(class TUid const &, class Java::Manager::Registry::CJavaPropertyArray *) const
-	?DeleteProperty@CWriteableJavaRegistryEntry@Registry@Manager@Java@@IAEXH@Z @ 22 NONAME ; void Java::Manager::Registry::CWriteableJavaRegistryEntry::DeleteProperty(int)
-	?DownloadPlugin@CWriteableJavaRegistryPackageEntry@Registry@Manager@Java@@QBEABVTDesC8@@XZ @ 23 NONAME ; class TDesC8 const & Java::Manager::Registry::CWriteableJavaRegistryPackageEntry::DownloadPlugin(void) const
+	?DecideEntryTypeAndCreateL@CWriteableJavaRegistry@Registry@Manager@Java@@MBEPAVCWriteableJavaRegistryEntry@234@ABVTUid@@PAVCJavaPropertyArray@234@@Z @ 21 NONAME ABSENT ; class Java::Manager::Registry::CWriteableJavaRegistryEntry * Java::Manager::Registry::CWriteableJavaRegistry::DecideEntryTypeAndCreateL(class TUid const &, class Java::Manager::Registry::CJavaPropertyArray *) const
+	?DeleteProperty@CWriteableJavaRegistryEntry@Registry@Manager@Java@@IAEXH@Z @ 22 NONAME ABSENT ; void Java::Manager::Registry::CWriteableJavaRegistryEntry::DeleteProperty(int)
+	?DownloadPlugin@CWriteableJavaRegistryPackageEntry@Registry@Manager@Java@@QBEABVTDesC8@@XZ @ 23 NONAME ABSENT ; class TDesC8 const & Java::Manager::Registry::CWriteableJavaRegistryPackageEntry::DownloadPlugin(void) const
 	?Drive@CJavaRegistryEntry@Java@@QBE?AW4TDriveNumber@@XZ @ 24 NONAME ; enum TDriveNumber Java::CJavaRegistryEntry::Drive(void) const
 	?Drive@CWriteableJavaRegistryEntry@Registry@Manager@Java@@QBE?AW4TDriveNumber@@XZ @ 25 NONAME ; enum TDriveNumber Java::Manager::Registry::CWriteableJavaRegistryEntry::Drive(void) const
 	?EmbeddedEntryByNumberL@CJavaRegistryPackageEntry@Java@@QBEPAVCJavaRegistryEntry@2@H@Z @ 26 NONAME ; class Java::CJavaRegistryEntry * Java::CJavaRegistryPackageEntry::EmbeddedEntryByNumberL(int) const
 	?EmbeddedEntryByNumberL@CWriteableJavaRegistryPackageEntry@Registry@Manager@Java@@QBEPAVCWriteableJavaRegistryEntry@234@H@Z @ 27 NONAME ; class Java::Manager::Registry::CWriteableJavaRegistryEntry * Java::Manager::Registry::CWriteableJavaRegistryPackageEntry::EmbeddedEntryByNumberL(int) const
 	?EmbeddedEntryByUidL@CJavaRegistryPackageEntry@Java@@QBEPAVCJavaRegistryEntry@2@ABVTUid@@@Z @ 28 NONAME ; class Java::CJavaRegistryEntry * Java::CJavaRegistryPackageEntry::EmbeddedEntryByUidL(class TUid const &) const
 	?EmbeddedEntryByUidL@CWriteableJavaRegistryPackageEntry@Registry@Manager@Java@@QBEPAVCWriteableJavaRegistryEntry@234@ABVTUid@@@Z @ 29 NONAME ; class Java::Manager::Registry::CWriteableJavaRegistryEntry * Java::Manager::Registry::CWriteableJavaRegistryPackageEntry::EmbeddedEntryByUidL(class TUid const &) const
-	?EntriesExistForDriveL@CJavaRegistryBackupSupport@Registry@Manager@Java@@QBEHABW4TDriveNumber@@@Z @ 30 NONAME ; int Java::Manager::Registry::CJavaRegistryBackupSupport::EntriesExistForDriveL(enum TDriveNumber const &) const
-	?GenerateUidsL@CWriteableJavaRegistry@Registry@Manager@Java@@QBEXAAV?$RArray@VTUid@@@@H@Z @ 31 NONAME ; void Java::Manager::Registry::CWriteableJavaRegistry::GenerateUidsL(class RArray<class TUid> &, int) const
-	?GetCertificateChainsL@JavaRegConverter@Registry@Manager@Java@@SAXABVTDesC16@@AAV?$RPointerArray@VHBufC8@@@@@Z @ 32 NONAME ; void Java::Manager::Registry::JavaRegConverter::GetCertificateChainsL(class TDesC16 const &, class RPointerArray<class HBufC8> &)
+	?EntriesExistForDriveL@CJavaRegistryBackupSupport@Registry@Manager@Java@@QBEHABW4TDriveNumber@@@Z @ 30 NONAME ABSENT ; int Java::Manager::Registry::CJavaRegistryBackupSupport::EntriesExistForDriveL(enum TDriveNumber const &) const
+	?GenerateUidsL@CWriteableJavaRegistry@Registry@Manager@Java@@QBEXAAV?$RArray@VTUid@@@@H@Z @ 31 NONAME ABSENT ; void Java::Manager::Registry::CWriteableJavaRegistry::GenerateUidsL(class RArray<class TUid> &, int) const
+	?GetCertificateChainsL@JavaRegConverter@Registry@Manager@Java@@SAXABVTDesC16@@AAV?$RPointerArray@VHBufC8@@@@@Z @ 32 NONAME ABSENT ; void Java::Manager::Registry::JavaRegConverter::GetCertificateChainsL(class TDesC16 const &, class RPointerArray<class HBufC8> &)
 	?GetEmbeddedEntries@CJavaRegistryPackageEntry@Java@@QBEXAAV?$RArray@VTUid@@@@@Z @ 33 NONAME ; void Java::CJavaRegistryPackageEntry::GetEmbeddedEntries(class RArray<class TUid> &) const
 	?GetEmbeddedEntries@CWriteableJavaRegistryPackageEntry@Registry@Manager@Java@@QBEXAAV?$RArray@VTUid@@@@@Z @ 34 NONAME ; void Java::Manager::Registry::CWriteableJavaRegistryPackageEntry::GetEmbeddedEntries(class RArray<class TUid> &) const
-	?GetPropertyIndex@CWriteableJavaRegistryEntry@Registry@Manager@Java@@IBEHJ@Z @ 35 NONAME ; int Java::Manager::Registry::CWriteableJavaRegistryEntry::GetPropertyIndex(long) const
+	?GetPropertyIndex@CWriteableJavaRegistryEntry@Registry@Manager@Java@@IBEHJ@Z @ 35 NONAME ABSENT ; int Java::Manager::Registry::CWriteableJavaRegistryEntry::GetPropertyIndex(long) const
 	?GetRegistryEntryUidsL@CJavaRegistry@Java@@QBEXAAV?$RArray@VTUid@@@@@Z @ 36 NONAME ; void Java::CJavaRegistry::GetRegistryEntryUidsL(class RArray<class TUid> &) const
 	?GetRegistryEntryUidsL@CJavaRegistry@Java@@QBEXW4TJavaRegistryEntryType@2@AAV?$RArray@VTUid@@@@@Z @ 37 NONAME ; void Java::CJavaRegistry::GetRegistryEntryUidsL(enum Java::TJavaRegistryEntryType, class RArray<class TUid> &) const
 	?GetRegistryEntryUidsL@CWriteableJavaRegistry@Registry@Manager@Java@@QBEXAAV?$RArray@VTUid@@@@@Z @ 38 NONAME ; void Java::Manager::Registry::CWriteableJavaRegistry::GetRegistryEntryUidsL(class RArray<class TUid> &) const
 	?GetRegistryEntryUidsL@CWriteableJavaRegistry@Registry@Manager@Java@@QBEXABV?$RPointerArray@VCJavaProperty@Registry@Manager@Java@@@@AAV?$RArray@VTUid@@@@@Z @ 39 NONAME ABSENT ; void Java::Manager::Registry::CWriteableJavaRegistry::GetRegistryEntryUidsL(class RPointerArray<class Java::Manager::Registry::CJavaProperty> const &, class RArray<class TUid> &) const
 	?GetRegistryEntryUidsL@CWriteableJavaRegistry@Registry@Manager@Java@@QBEXW4TJavaRegistryEntryType@4@AAV?$RArray@VTUid@@@@@Z @ 40 NONAME ABSENT ; void Java::Manager::Registry::CWriteableJavaRegistry::GetRegistryEntryUidsL(enum Java::TJavaRegistryEntryType, class RArray<class TUid> &) const
-	?GetTAppVersion@JavaRegConverter@Registry@Manager@Java@@SA?AVTAppVersion@@ABVTDesC16@@V5@@Z @ 41 NONAME ; class TAppVersion Java::Manager::Registry::JavaRegConverter::GetTAppVersion(class TDesC16 const &, class TAppVersion)
-	?GetTAppVersionL@JavaRegConverter@Registry@Manager@Java@@SA?AVTAppVersion@@ABVTDesC16@@@Z @ 42 NONAME ; class TAppVersion Java::Manager::Registry::JavaRegConverter::GetTAppVersionL(class TDesC16 const &)
-	?GetTBool@JavaRegConverter@Registry@Manager@Java@@SAHABVTDesC16@@H@Z @ 43 NONAME ; int Java::Manager::Registry::JavaRegConverter::GetTBool(class TDesC16 const &, int)
-	?GetTBoolL@JavaRegConverter@Registry@Manager@Java@@SAHABVTDesC16@@@Z @ 44 NONAME ; int Java::Manager::Registry::JavaRegConverter::GetTBoolL(class TDesC16 const &)
-	?GetTInt@JavaRegConverter@Registry@Manager@Java@@SAJABVTDesC16@@J@Z @ 45 NONAME ; long Java::Manager::Registry::JavaRegConverter::GetTInt(class TDesC16 const &, long)
-	?GetTIntL@JavaRegConverter@Registry@Manager@Java@@SAJABVTDesC16@@@Z @ 46 NONAME ; long Java::Manager::Registry::JavaRegConverter::GetTIntL(class TDesC16 const &)
-	?GetUnicodeDescriptorsL@JavaRegConverter@Registry@Manager@Java@@SAXABVTDesC16@@AAV?$RPointerArray@VHBufC16@@@@@Z @ 47 NONAME ; void Java::Manager::Registry::JavaRegConverter::GetUnicodeDescriptorsL(class TDesC16 const &, class RPointerArray<class HBufC16> &)
+	?GetTAppVersion@JavaRegConverter@Registry@Manager@Java@@SA?AVTAppVersion@@ABVTDesC16@@V5@@Z @ 41 NONAME ABSENT ; class TAppVersion Java::Manager::Registry::JavaRegConverter::GetTAppVersion(class TDesC16 const &, class TAppVersion)
+	?GetTAppVersionL@JavaRegConverter@Registry@Manager@Java@@SA?AVTAppVersion@@ABVTDesC16@@@Z @ 42 NONAME ABSENT ; class TAppVersion Java::Manager::Registry::JavaRegConverter::GetTAppVersionL(class TDesC16 const &)
+	?GetTBool@JavaRegConverter@Registry@Manager@Java@@SAHABVTDesC16@@H@Z @ 43 NONAME ABSENT ; int Java::Manager::Registry::JavaRegConverter::GetTBool(class TDesC16 const &, int)
+	?GetTBoolL@JavaRegConverter@Registry@Manager@Java@@SAHABVTDesC16@@@Z @ 44 NONAME ABSENT ; int Java::Manager::Registry::JavaRegConverter::GetTBoolL(class TDesC16 const &)
+	?GetTInt@JavaRegConverter@Registry@Manager@Java@@SAJABVTDesC16@@J@Z @ 45 NONAME ABSENT ; long Java::Manager::Registry::JavaRegConverter::GetTInt(class TDesC16 const &, long)
+	?GetTIntL@JavaRegConverter@Registry@Manager@Java@@SAJABVTDesC16@@@Z @ 46 NONAME ABSENT ; long Java::Manager::Registry::JavaRegConverter::GetTIntL(class TDesC16 const &)
+	?GetUnicodeDescriptorsL@JavaRegConverter@Registry@Manager@Java@@SAXABVTDesC16@@AAV?$RPointerArray@VHBufC16@@@@@Z @ 47 NONAME ABSENT ; void Java::Manager::Registry::JavaRegConverter::GetUnicodeDescriptorsL(class TDesC16 const &, class RPointerArray<class HBufC16> &)
 	?GroupName@CJavaRegistryApplicationEntry@Java@@QBEABVTDesC16@@XZ @ 48 NONAME ; class TDesC16 const & Java::CJavaRegistryApplicationEntry::GroupName(void) const
-	?GroupName@CWriteableJavaRegistryApplicationEntry@Registry@Manager@Java@@QBEABVTDesC16@@XZ @ 49 NONAME ; class TDesC16 const & Java::Manager::Registry::CWriteableJavaRegistryApplicationEntry::GroupName(void) const
-	?Id@CJavaProperty@Registry@Manager@Java@@QBEJXZ @ 50 NONAME ; long Java::Manager::Registry::CJavaProperty::Id(void) const
-	?InstallPackageUid@CWriteableJavaRegistryApplicationEntry@Registry@Manager@Java@@QBE?AVTUid@@XZ @ 51 NONAME ; class TUid Java::Manager::Registry::CWriteableJavaRegistryApplicationEntry::InstallPackageUid(void) const
-	?InstallPlugin@CWriteableJavaRegistryPackageEntry@Registry@Manager@Java@@QBEABVTDesC8@@XZ @ 52 NONAME ; class TDesC8 const & Java::Manager::Registry::CWriteableJavaRegistryPackageEntry::InstallPlugin(void) const
-	?IntegerProperty@CWriteableJavaRegistryEntry@Registry@Manager@Java@@IBEJJJ@Z @ 53 NONAME ; long Java::Manager::Registry::CWriteableJavaRegistryEntry::IntegerProperty(long, long) const
+	?GroupName@CWriteableJavaRegistryApplicationEntry@Registry@Manager@Java@@QBEABVTDesC16@@XZ @ 49 NONAME ABSENT ; class TDesC16 const & Java::Manager::Registry::CWriteableJavaRegistryApplicationEntry::GroupName(void) const
+	?Id@CJavaProperty@Registry@Manager@Java@@QBEJXZ @ 50 NONAME ABSENT ; long Java::Manager::Registry::CJavaProperty::Id(void) const
+	?InstallPackageUid@CWriteableJavaRegistryApplicationEntry@Registry@Manager@Java@@QBE?AVTUid@@XZ @ 51 NONAME ABSENT ; class TUid Java::Manager::Registry::CWriteableJavaRegistryApplicationEntry::InstallPackageUid(void) const
+	?InstallPlugin@CWriteableJavaRegistryPackageEntry@Registry@Manager@Java@@QBEABVTDesC8@@XZ @ 52 NONAME ABSENT ; class TDesC8 const & Java::Manager::Registry::CWriteableJavaRegistryPackageEntry::InstallPlugin(void) const
+	?IntegerProperty@CWriteableJavaRegistryEntry@Registry@Manager@Java@@IBEJJJ@Z @ 53 NONAME ABSENT ; long Java::Manager::Registry::CWriteableJavaRegistryEntry::IntegerProperty(long, long) const
 	?IsResident@CJavaRegistryApplicationEntry@Java@@QBEHXZ @ 54 NONAME ; int Java::CJavaRegistryApplicationEntry::IsResident(void) const
 	?IsResident@CWriteableJavaRegistryApplicationEntry@Registry@Manager@Java@@QBEHXZ @ 55 NONAME ; int Java::Manager::Registry::CWriteableJavaRegistryApplicationEntry::IsResident(void) const
 	?IsStartable@CJavaRegistryApplicationEntry@Java@@QBEHXZ @ 56 NONAME ; int Java::CJavaRegistryApplicationEntry::IsStartable(void) const
@@ -62,73 +62,73 @@
 	?IsVisible@CWriteableJavaRegistryApplicationEntry@Registry@Manager@Java@@QBEHXZ @ 61 NONAME ; int Java::Manager::Registry::CWriteableJavaRegistryApplicationEntry::IsVisible(void) const
 	?Name@CJavaRegistryEntry@Java@@QBEABVTDesC16@@XZ @ 62 NONAME ; class TDesC16 const & Java::CJavaRegistryEntry::Name(void) const
 	?Name@CWriteableJavaRegistryEntry@Registry@Manager@Java@@QBEABVTDesC16@@XZ @ 63 NONAME ; class TDesC16 const & Java::Manager::Registry::CWriteableJavaRegistryEntry::Name(void) const
-	?NewL@CJavaProperty@Registry@Manager@Java@@SAPAV1234@JABVTDesC16@@@Z @ 64 NONAME ; class Java::Manager::Registry::CJavaProperty * Java::Manager::Registry::CJavaProperty::NewL(long, class TDesC16 const &)
+	?NewL@CJavaProperty@Registry@Manager@Java@@SAPAV1234@JABVTDesC16@@@Z @ 64 NONAME ABSENT ; class Java::Manager::Registry::CJavaProperty * Java::Manager::Registry::CJavaProperty::NewL(long, class TDesC16 const &)
 	?NewL@CJavaRegistry@Java@@SAPAV12@XZ @ 65 NONAME ; class Java::CJavaRegistry * Java::CJavaRegistry::NewL(void)
-	?NewL@CJavaRegistryBackupSupport@Registry@Manager@Java@@SAPAV1234@XZ @ 66 NONAME ; class Java::Manager::Registry::CJavaRegistryBackupSupport * Java::Manager::Registry::CJavaRegistryBackupSupport::NewL(void)
+	?NewL@CJavaRegistryBackupSupport@Registry@Manager@Java@@SAPAV1234@XZ @ 66 NONAME ABSENT ; class Java::Manager::Registry::CJavaRegistryBackupSupport * Java::Manager::Registry::CJavaRegistryBackupSupport::NewL(void)
 	?NewL@CWriteableJavaRegistry@Registry@Manager@Java@@SAPAV1234@H@Z @ 67 NONAME ; class Java::Manager::Registry::CWriteableJavaRegistry * Java::Manager::Registry::CWriteableJavaRegistry::NewL(int)
-	?NewL@CWriteableJavaRegistry@Registry@Manager@Java@@SAPAV1234@_J@Z @ 68 NONAME ; class Java::Manager::Registry::CWriteableJavaRegistry * Java::Manager::Registry::CWriteableJavaRegistry::NewL(long long)
-	?NewL@CWriteableJavaRegistryApplicationEntry@Registry@Manager@Java@@SAPAV1234@ABVTUid@@@Z @ 69 NONAME ; class Java::Manager::Registry::CWriteableJavaRegistryApplicationEntry * Java::Manager::Registry::CWriteableJavaRegistryApplicationEntry::NewL(class TUid const &)
-	?NewL@CWriteableJavaRegistryPackageEntry@Registry@Manager@Java@@SAPAV1234@ABVTUid@@@Z @ 70 NONAME ; class Java::Manager::Registry::CWriteableJavaRegistryPackageEntry * Java::Manager::Registry::CWriteableJavaRegistryPackageEntry::NewL(class TUid const &)
-	?NewLC@CJavaProperty@Registry@Manager@Java@@SAPAV1234@JABVTDesC16@@@Z @ 71 NONAME ; class Java::Manager::Registry::CJavaProperty * Java::Manager::Registry::CJavaProperty::NewLC(long, class TDesC16 const &)
+	?NewL@CWriteableJavaRegistry@Registry@Manager@Java@@SAPAV1234@_J@Z @ 68 NONAME ABSENT ; class Java::Manager::Registry::CWriteableJavaRegistry * Java::Manager::Registry::CWriteableJavaRegistry::NewL(long long)
+	?NewL@CWriteableJavaRegistryApplicationEntry@Registry@Manager@Java@@SAPAV1234@ABVTUid@@@Z @ 69 NONAME ABSENT ; class Java::Manager::Registry::CWriteableJavaRegistryApplicationEntry * Java::Manager::Registry::CWriteableJavaRegistryApplicationEntry::NewL(class TUid const &)
+	?NewL@CWriteableJavaRegistryPackageEntry@Registry@Manager@Java@@SAPAV1234@ABVTUid@@@Z @ 70 NONAME ABSENT ; class Java::Manager::Registry::CWriteableJavaRegistryPackageEntry * Java::Manager::Registry::CWriteableJavaRegistryPackageEntry::NewL(class TUid const &)
+	?NewLC@CJavaProperty@Registry@Manager@Java@@SAPAV1234@JABVTDesC16@@@Z @ 71 NONAME ABSENT ; class Java::Manager::Registry::CJavaProperty * Java::Manager::Registry::CJavaProperty::NewLC(long, class TDesC16 const &)
 	?NewLC@CJavaRegistry@Java@@SAPAV12@XZ @ 72 NONAME ; class Java::CJavaRegistry * Java::CJavaRegistry::NewLC(void)
-	?NewLC@CJavaRegistryBackupSupport@Registry@Manager@Java@@SAPAV1234@XZ @ 73 NONAME ; class Java::Manager::Registry::CJavaRegistryBackupSupport * Java::Manager::Registry::CJavaRegistryBackupSupport::NewLC(void)
+	?NewLC@CJavaRegistryBackupSupport@Registry@Manager@Java@@SAPAV1234@XZ @ 73 NONAME ABSENT ; class Java::Manager::Registry::CJavaRegistryBackupSupport * Java::Manager::Registry::CJavaRegistryBackupSupport::NewLC(void)
 	?NewLC@CWriteableJavaRegistry@Registry@Manager@Java@@SAPAV1234@H@Z @ 74 NONAME ; class Java::Manager::Registry::CWriteableJavaRegistry * Java::Manager::Registry::CWriteableJavaRegistry::NewLC(int)
-	?NewLC@CWriteableJavaRegistry@Registry@Manager@Java@@SAPAV1234@_J@Z @ 75 NONAME ; class Java::Manager::Registry::CWriteableJavaRegistry * Java::Manager::Registry::CWriteableJavaRegistry::NewLC(long long)
-	?NewLC@CWriteableJavaRegistryApplicationEntry@Registry@Manager@Java@@SAPAV1234@ABVTUid@@@Z @ 76 NONAME ; class Java::Manager::Registry::CWriteableJavaRegistryApplicationEntry * Java::Manager::Registry::CWriteableJavaRegistryApplicationEntry::NewLC(class TUid const &)
-	?NewLC@CWriteableJavaRegistryPackageEntry@Registry@Manager@Java@@SAPAV1234@ABVTUid@@@Z @ 77 NONAME ; class Java::Manager::Registry::CWriteableJavaRegistryPackageEntry * Java::Manager::Registry::CWriteableJavaRegistryPackageEntry::NewLC(class TUid const &)
+	?NewLC@CWriteableJavaRegistry@Registry@Manager@Java@@SAPAV1234@_J@Z @ 75 NONAME ABSENT ; class Java::Manager::Registry::CWriteableJavaRegistry * Java::Manager::Registry::CWriteableJavaRegistry::NewLC(long long)
+	?NewLC@CWriteableJavaRegistryApplicationEntry@Registry@Manager@Java@@SAPAV1234@ABVTUid@@@Z @ 76 NONAME ABSENT ; class Java::Manager::Registry::CWriteableJavaRegistryApplicationEntry * Java::Manager::Registry::CWriteableJavaRegistryApplicationEntry::NewLC(class TUid const &)
+	?NewLC@CWriteableJavaRegistryPackageEntry@Registry@Manager@Java@@SAPAV1234@ABVTUid@@@Z @ 77 NONAME ABSENT ; class Java::Manager::Registry::CWriteableJavaRegistryPackageEntry * Java::Manager::Registry::CWriteableJavaRegistryPackageEntry::NewLC(class TUid const &)
 	?NumberOfCertificateChains@CJavaRegistryEntry@Java@@QBEHXZ @ 78 NONAME ; int Java::CJavaRegistryEntry::NumberOfCertificateChains(void) const
 	?NumberOfCertificateChains@CWriteableJavaRegistryEntry@Registry@Manager@Java@@QBEHXZ @ 79 NONAME ; int Java::Manager::Registry::CWriteableJavaRegistryEntry::NumberOfCertificateChains(void) const
 	?NumberOfEmbeddedEntries@CJavaRegistryPackageEntry@Java@@QBEHXZ @ 80 NONAME ; int Java::CJavaRegistryPackageEntry::NumberOfEmbeddedEntries(void) const
 	?NumberOfEmbeddedEntries@CWriteableJavaRegistryPackageEntry@Registry@Manager@Java@@QBEHXZ @ 81 NONAME ; int Java::Manager::Registry::CWriteableJavaRegistryPackageEntry::NumberOfEmbeddedEntries(void) const
 	?PackageEntryL@CJavaRegistryApplicationEntry@Java@@QBEPAVCJavaRegistryPackageEntry@2@XZ @ 82 NONAME ; class Java::CJavaRegistryPackageEntry * Java::CJavaRegistryApplicationEntry::PackageEntryL(void) const
 	?PackageEntryL@CWriteableJavaRegistryApplicationEntry@Registry@Manager@Java@@QBEPAVCWriteableJavaRegistryPackageEntry@234@XZ @ 83 NONAME ; class Java::Manager::Registry::CWriteableJavaRegistryPackageEntry * Java::Manager::Registry::CWriteableJavaRegistryApplicationEntry::PackageEntryL(void) const
-	?Property@CWriteableJavaRegistryEntry@Registry@Manager@Java@@QBEPBVCJavaProperty@234@J@Z @ 84 NONAME ; class Java::Manager::Registry::CJavaProperty const * Java::Manager::Registry::CWriteableJavaRegistryEntry::Property(long) const
+	?Property@CWriteableJavaRegistryEntry@Registry@Manager@Java@@QBEPBVCJavaProperty@234@J@Z @ 84 NONAME ABSENT ; class Java::Manager::Registry::CJavaProperty const * Java::Manager::Registry::CWriteableJavaRegistryEntry::Property(long) const
 	?RegistryEntryExistsL@CJavaRegistry@Java@@QBEHABVTUid@@@Z @ 85 NONAME ; int Java::CJavaRegistry::RegistryEntryExistsL(class TUid const &) const
 	?RegistryEntryExistsL@CWriteableJavaRegistry@Registry@Manager@Java@@QBEHABVTUid@@@Z @ 86 NONAME ; int Java::Manager::Registry::CWriteableJavaRegistry::RegistryEntryExistsL(class TUid const &) const
 	?RegistryEntryL@CJavaRegistry@Java@@QBEPAVCJavaRegistryEntry@2@ABVTUid@@@Z @ 87 NONAME ; class Java::CJavaRegistryEntry * Java::CJavaRegistry::RegistryEntryL(class TUid const &) const
 	?RegistryEntryL@CWriteableJavaRegistry@Registry@Manager@Java@@QBEPAVCWriteableJavaRegistryEntry@234@ABVTUid@@@Z @ 88 NONAME ABSENT ; class Java::Manager::Registry::CWriteableJavaRegistryEntry * Java::Manager::Registry::CWriteableJavaRegistry::RegistryEntryL(class TUid const &) const
-	?RemoveEmbeddedEntryL@CWriteableJavaRegistryPackageEntry@Registry@Manager@Java@@QAEXABVTUid@@@Z @ 89 NONAME ; void Java::Manager::Registry::CWriteableJavaRegistryPackageEntry::RemoveEmbeddedEntryL(class TUid const &)
+	?RemoveEmbeddedEntryL@CWriteableJavaRegistryPackageEntry@Registry@Manager@Java@@QAEXABVTUid@@@Z @ 89 NONAME ABSENT ; void Java::Manager::Registry::CWriteableJavaRegistryPackageEntry::RemoveEmbeddedEntryL(class TUid const &)
 	?RemoveRegistryEntryL@CWriteableJavaRegistry@Registry@Manager@Java@@QBEXABVTUid@@H@Z @ 90 NONAME ABSENT ; void Java::Manager::Registry::CWriteableJavaRegistry::RemoveRegistryEntryL(class TUid const &, int) const
-	?SetBooleanPropertyL@CWriteableJavaRegistryEntry@Registry@Manager@Java@@IAEXJH@Z @ 91 NONAME ; void Java::Manager::Registry::CWriteableJavaRegistryEntry::SetBooleanPropertyL(long, int)
-	?SetDescriptorPropertyL@CWriteableJavaRegistryEntry@Registry@Manager@Java@@IAEXJABVTDesC16@@@Z @ 92 NONAME ; void Java::Manager::Registry::CWriteableJavaRegistryEntry::SetDescriptorPropertyL(long, class TDesC16 const &)
-	?SetDownloadPluginL@CWriteableJavaRegistryPackageEntry@Registry@Manager@Java@@QAEXABVTDesC8@@@Z @ 93 NONAME ; void Java::Manager::Registry::CWriteableJavaRegistryPackageEntry::SetDownloadPluginL(class TDesC8 const &)
-	?SetDriveL@CWriteableJavaRegistryEntry@Registry@Manager@Java@@QAEXABW4TDriveNumber@@@Z @ 94 NONAME ; void Java::Manager::Registry::CWriteableJavaRegistryEntry::SetDriveL(enum TDriveNumber const &)
-	?SetGroupNameL@CWriteableJavaRegistryApplicationEntry@Registry@Manager@Java@@QAEXABVTDesC16@@@Z @ 95 NONAME ; void Java::Manager::Registry::CWriteableJavaRegistryApplicationEntry::SetGroupNameL(class TDesC16 const &)
-	?SetInstallPackageUidL@CWriteableJavaRegistryApplicationEntry@Registry@Manager@Java@@QAEXABVTUid@@@Z @ 96 NONAME ; void Java::Manager::Registry::CWriteableJavaRegistryApplicationEntry::SetInstallPackageUidL(class TUid const &)
-	?SetInstallPluginL@CWriteableJavaRegistryPackageEntry@Registry@Manager@Java@@QAEXABVTDesC8@@@Z @ 97 NONAME ; void Java::Manager::Registry::CWriteableJavaRegistryPackageEntry::SetInstallPluginL(class TDesC8 const &)
-	?SetIntegerPropertyL@CWriteableJavaRegistryEntry@Registry@Manager@Java@@IAEXJJ@Z @ 98 NONAME ; void Java::Manager::Registry::CWriteableJavaRegistryEntry::SetIntegerPropertyL(long, long)
-	?SetNameL@CWriteableJavaRegistryEntry@Registry@Manager@Java@@QAEXABVTDesC16@@@Z @ 99 NONAME ; void Java::Manager::Registry::CWriteableJavaRegistryEntry::SetNameL(class TDesC16 const &)
-	?SetPropertyL@CWriteableJavaRegistryEntry@Registry@Manager@Java@@QAEXJABVTDesC16@@@Z @ 100 NONAME ; void Java::Manager::Registry::CWriteableJavaRegistryEntry::SetPropertyL(long, class TDesC16 const &)
-	?SetPropertyL@CWriteableJavaRegistryEntry@Registry@Manager@Java@@UAEXPAVCJavaProperty@234@@Z @ 101 NONAME ; void Java::Manager::Registry::CWriteableJavaRegistryEntry::SetPropertyL(class Java::Manager::Registry::CJavaProperty *)
+	?SetBooleanPropertyL@CWriteableJavaRegistryEntry@Registry@Manager@Java@@IAEXJH@Z @ 91 NONAME ABSENT ; void Java::Manager::Registry::CWriteableJavaRegistryEntry::SetBooleanPropertyL(long, int)
+	?SetDescriptorPropertyL@CWriteableJavaRegistryEntry@Registry@Manager@Java@@IAEXJABVTDesC16@@@Z @ 92 NONAME ABSENT ; void Java::Manager::Registry::CWriteableJavaRegistryEntry::SetDescriptorPropertyL(long, class TDesC16 const &)
+	?SetDownloadPluginL@CWriteableJavaRegistryPackageEntry@Registry@Manager@Java@@QAEXABVTDesC8@@@Z @ 93 NONAME ABSENT ; void Java::Manager::Registry::CWriteableJavaRegistryPackageEntry::SetDownloadPluginL(class TDesC8 const &)
+	?SetDriveL@CWriteableJavaRegistryEntry@Registry@Manager@Java@@QAEXABW4TDriveNumber@@@Z @ 94 NONAME ABSENT ; void Java::Manager::Registry::CWriteableJavaRegistryEntry::SetDriveL(enum TDriveNumber const &)
+	?SetGroupNameL@CWriteableJavaRegistryApplicationEntry@Registry@Manager@Java@@QAEXABVTDesC16@@@Z @ 95 NONAME ABSENT ; void Java::Manager::Registry::CWriteableJavaRegistryApplicationEntry::SetGroupNameL(class TDesC16 const &)
+	?SetInstallPackageUidL@CWriteableJavaRegistryApplicationEntry@Registry@Manager@Java@@QAEXABVTUid@@@Z @ 96 NONAME ABSENT ; void Java::Manager::Registry::CWriteableJavaRegistryApplicationEntry::SetInstallPackageUidL(class TUid const &)
+	?SetInstallPluginL@CWriteableJavaRegistryPackageEntry@Registry@Manager@Java@@QAEXABVTDesC8@@@Z @ 97 NONAME ABSENT ; void Java::Manager::Registry::CWriteableJavaRegistryPackageEntry::SetInstallPluginL(class TDesC8 const &)
+	?SetIntegerPropertyL@CWriteableJavaRegistryEntry@Registry@Manager@Java@@IAEXJJ@Z @ 98 NONAME ABSENT ; void Java::Manager::Registry::CWriteableJavaRegistryEntry::SetIntegerPropertyL(long, long)
+	?SetNameL@CWriteableJavaRegistryEntry@Registry@Manager@Java@@QAEXABVTDesC16@@@Z @ 99 NONAME ABSENT ; void Java::Manager::Registry::CWriteableJavaRegistryEntry::SetNameL(class TDesC16 const &)
+	?SetPropertyL@CWriteableJavaRegistryEntry@Registry@Manager@Java@@QAEXJABVTDesC16@@@Z @ 100 NONAME ABSENT ; void Java::Manager::Registry::CWriteableJavaRegistryEntry::SetPropertyL(long, class TDesC16 const &)
+	?SetPropertyL@CWriteableJavaRegistryEntry@Registry@Manager@Java@@UAEXPAVCJavaProperty@234@@Z @ 101 NONAME ABSENT ; void Java::Manager::Registry::CWriteableJavaRegistryEntry::SetPropertyL(class Java::Manager::Registry::CJavaProperty *)
 	?SetPropertyL@CWriteableJavaRegistryPackageEntry@Registry@Manager@Java@@UAEXPAVCJavaProperty@234@@Z @ 102 NONAME ABSENT ; void Java::Manager::Registry::CWriteableJavaRegistryPackageEntry::SetPropertyL(class Java::Manager::Registry::CJavaProperty *)
 	?SetRegistryEntryL@CWriteableJavaRegistry@Registry@Manager@Java@@QBEXABVCWriteableJavaRegistryEntry@234@@Z @ 103 NONAME ABSENT ; void Java::Manager::Registry::CWriteableJavaRegistry::SetRegistryEntryL(class Java::Manager::Registry::CWriteableJavaRegistryEntry const &) const
-	?SetResidentL@CWriteableJavaRegistryApplicationEntry@Registry@Manager@Java@@QAEXH@Z @ 104 NONAME ; void Java::Manager::Registry::CWriteableJavaRegistryApplicationEntry::SetResidentL(int)
-	?SetSizeL@CWriteableJavaRegistryPackageEntry@Registry@Manager@Java@@QAEXH@Z @ 105 NONAME ; void Java::Manager::Registry::CWriteableJavaRegistryPackageEntry::SetSizeL(int)
-	?SetStartableL@CWriteableJavaRegistryApplicationEntry@Registry@Manager@Java@@QAEXH@Z @ 106 NONAME ; void Java::Manager::Registry::CWriteableJavaRegistryApplicationEntry::SetStartableL(int)
-	?SetTypeL@CWriteableJavaRegistryEntry@Registry@Manager@Java@@QAEXW4TJavaRegistryEntryType@4@@Z @ 107 NONAME ; void Java::Manager::Registry::CWriteableJavaRegistryEntry::SetTypeL(enum Java::TJavaRegistryEntryType)
-	?SetUninstallableL@CWriteableJavaRegistryPackageEntry@Registry@Manager@Java@@QAEXH@Z @ 108 NONAME ; void Java::Manager::Registry::CWriteableJavaRegistryPackageEntry::SetUninstallableL(int)
-	?SetVendorL@CWriteableJavaRegistryPackageEntry@Registry@Manager@Java@@QAEXABVTDesC16@@@Z @ 109 NONAME ; void Java::Manager::Registry::CWriteableJavaRegistryPackageEntry::SetVendorL(class TDesC16 const &)
-	?SetVersionL@CWriteableJavaRegistryPackageEntry@Registry@Manager@Java@@QAEXABVTAppVersion@@@Z @ 110 NONAME ; void Java::Manager::Registry::CWriteableJavaRegistryPackageEntry::SetVersionL(class TAppVersion const &)
-	?SetVisibleL@CWriteableJavaRegistryApplicationEntry@Registry@Manager@Java@@QAEXH@Z @ 111 NONAME ; void Java::Manager::Registry::CWriteableJavaRegistryApplicationEntry::SetVisibleL(int)
-	?Size@CWriteableJavaRegistryPackageEntry@Registry@Manager@Java@@QBEHXZ @ 112 NONAME ; int Java::Manager::Registry::CWriteableJavaRegistryPackageEntry::Size(void) const
-	?StoreCertificateChainsL@JavaRegConverter@Registry@Manager@Java@@SAXABV?$RPointerArray@VHBufC8@@@@AAPAVHBufC16@@@Z @ 113 NONAME ; void Java::Manager::Registry::JavaRegConverter::StoreCertificateChainsL(class RPointerArray<class HBufC8> const &, class HBufC16 * &)
-	?StoreTAppVersionL@JavaRegConverter@Registry@Manager@Java@@SAXABVTAppVersion@@AAPAVHBufC16@@@Z @ 114 NONAME ; void Java::Manager::Registry::JavaRegConverter::StoreTAppVersionL(class TAppVersion const &, class HBufC16 * &)
-	?StoreTBoolL@JavaRegConverter@Registry@Manager@Java@@SAXHAAPAVHBufC16@@@Z @ 115 NONAME ; void Java::Manager::Registry::JavaRegConverter::StoreTBoolL(int, class HBufC16 * &)
-	?StoreTIntL@JavaRegConverter@Registry@Manager@Java@@SAXJAAPAVHBufC16@@@Z @ 116 NONAME ; void Java::Manager::Registry::JavaRegConverter::StoreTIntL(long, class HBufC16 * &)
-	?StoreUnicodeDescriptorsL@JavaRegConverter@Registry@Manager@Java@@SAXABV?$RPointerArray@VHBufC16@@@@AAPAVHBufC16@@@Z @ 117 NONAME ; void Java::Manager::Registry::JavaRegConverter::StoreUnicodeDescriptorsL(class RPointerArray<class HBufC16> const &, class HBufC16 * &)
+	?SetResidentL@CWriteableJavaRegistryApplicationEntry@Registry@Manager@Java@@QAEXH@Z @ 104 NONAME ABSENT ; void Java::Manager::Registry::CWriteableJavaRegistryApplicationEntry::SetResidentL(int)
+	?SetSizeL@CWriteableJavaRegistryPackageEntry@Registry@Manager@Java@@QAEXH@Z @ 105 NONAME ABSENT ; void Java::Manager::Registry::CWriteableJavaRegistryPackageEntry::SetSizeL(int)
+	?SetStartableL@CWriteableJavaRegistryApplicationEntry@Registry@Manager@Java@@QAEXH@Z @ 106 NONAME ABSENT ; void Java::Manager::Registry::CWriteableJavaRegistryApplicationEntry::SetStartableL(int)
+	?SetTypeL@CWriteableJavaRegistryEntry@Registry@Manager@Java@@QAEXW4TJavaRegistryEntryType@4@@Z @ 107 NONAME ABSENT ; void Java::Manager::Registry::CWriteableJavaRegistryEntry::SetTypeL(enum Java::TJavaRegistryEntryType)
+	?SetUninstallableL@CWriteableJavaRegistryPackageEntry@Registry@Manager@Java@@QAEXH@Z @ 108 NONAME ABSENT ; void Java::Manager::Registry::CWriteableJavaRegistryPackageEntry::SetUninstallableL(int)
+	?SetVendorL@CWriteableJavaRegistryPackageEntry@Registry@Manager@Java@@QAEXABVTDesC16@@@Z @ 109 NONAME ABSENT ; void Java::Manager::Registry::CWriteableJavaRegistryPackageEntry::SetVendorL(class TDesC16 const &)
+	?SetVersionL@CWriteableJavaRegistryPackageEntry@Registry@Manager@Java@@QAEXABVTAppVersion@@@Z @ 110 NONAME ABSENT ; void Java::Manager::Registry::CWriteableJavaRegistryPackageEntry::SetVersionL(class TAppVersion const &)
+	?SetVisibleL@CWriteableJavaRegistryApplicationEntry@Registry@Manager@Java@@QAEXH@Z @ 111 NONAME ABSENT ; void Java::Manager::Registry::CWriteableJavaRegistryApplicationEntry::SetVisibleL(int)
+	?Size@CWriteableJavaRegistryPackageEntry@Registry@Manager@Java@@QBEHXZ @ 112 NONAME ABSENT ; int Java::Manager::Registry::CWriteableJavaRegistryPackageEntry::Size(void) const
+	?StoreCertificateChainsL@JavaRegConverter@Registry@Manager@Java@@SAXABV?$RPointerArray@VHBufC8@@@@AAPAVHBufC16@@@Z @ 113 NONAME ABSENT ; void Java::Manager::Registry::JavaRegConverter::StoreCertificateChainsL(class RPointerArray<class HBufC8> const &, class HBufC16 * &)
+	?StoreTAppVersionL@JavaRegConverter@Registry@Manager@Java@@SAXABVTAppVersion@@AAPAVHBufC16@@@Z @ 114 NONAME ABSENT ; void Java::Manager::Registry::JavaRegConverter::StoreTAppVersionL(class TAppVersion const &, class HBufC16 * &)
+	?StoreTBoolL@JavaRegConverter@Registry@Manager@Java@@SAXHAAPAVHBufC16@@@Z @ 115 NONAME ABSENT ; void Java::Manager::Registry::JavaRegConverter::StoreTBoolL(int, class HBufC16 * &)
+	?StoreTIntL@JavaRegConverter@Registry@Manager@Java@@SAXJAAPAVHBufC16@@@Z @ 116 NONAME ABSENT ; void Java::Manager::Registry::JavaRegConverter::StoreTIntL(long, class HBufC16 * &)
+	?StoreUnicodeDescriptorsL@JavaRegConverter@Registry@Manager@Java@@SAXABV?$RPointerArray@VHBufC16@@@@AAPAVHBufC16@@@Z @ 117 NONAME ABSENT ; void Java::Manager::Registry::JavaRegConverter::StoreUnicodeDescriptorsL(class RPointerArray<class HBufC16> const &, class HBufC16 * &)
 	?Type@CJavaRegistryEntry@Java@@QBE?AW4TJavaRegistryEntryType@2@XZ @ 118 NONAME ; enum Java::TJavaRegistryEntryType Java::CJavaRegistryEntry::Type(void) const
 	?Type@CWriteableJavaRegistryEntry@Registry@Manager@Java@@QBE?AW4TJavaRegistryEntryType@4@XZ @ 119 NONAME ; enum Java::TJavaRegistryEntryType Java::Manager::Registry::CWriteableJavaRegistryEntry::Type(void) const
 	?Uid@CJavaRegistryEntry@Java@@QBE?AVTUid@@XZ @ 120 NONAME ; class TUid Java::CJavaRegistryEntry::Uid(void) const
 	?Uid@CWriteableJavaRegistryEntry@Registry@Manager@Java@@QBE?AVTUid@@XZ @ 121 NONAME ; class TUid Java::Manager::Registry::CWriteableJavaRegistryEntry::Uid(void) const
-	?Value@CJavaProperty@Registry@Manager@Java@@QBEABVTDesC16@@XZ @ 122 NONAME ; class TDesC16 const & Java::Manager::Registry::CJavaProperty::Value(void) const
+	?Value@CJavaProperty@Registry@Manager@Java@@QBEABVTDesC16@@XZ @ 122 NONAME ABSENT ; class TDesC16 const & Java::Manager::Registry::CJavaProperty::Value(void) const
 	?Vendor@CJavaRegistryPackageEntry@Java@@QBEABVTDesC16@@XZ @ 123 NONAME ; class TDesC16 const & Java::CJavaRegistryPackageEntry::Vendor(void) const
 	?Vendor@CWriteableJavaRegistryPackageEntry@Registry@Manager@Java@@QBEABVTDesC16@@XZ @ 124 NONAME ; class TDesC16 const & Java::Manager::Registry::CWriteableJavaRegistryPackageEntry::Vendor(void) const
 	?Version@CJavaRegistryPackageEntry@Java@@QBE?AVTAppVersion@@XZ @ 125 NONAME ; class TAppVersion Java::CJavaRegistryPackageEntry::Version(void) const
 	?Version@CWriteableJavaRegistryPackageEntry@Registry@Manager@Java@@QBE?AVTAppVersion@@XZ @ 126 NONAME ; class TAppVersion Java::Manager::Registry::CWriteableJavaRegistryPackageEntry::Version(void) const
-	?SetPropertyL@CWriteableJavaRegistryApplicationEntry@Registry@Manager@Java@@UAEXPAVCJavaProperty@234@@Z @ 127 NONAME ; void Java::Manager::Registry::CWriteableJavaRegistryApplicationEntry::SetPropertyL(class Java::Manager::Registry::CJavaProperty *)
+	?SetPropertyL@CWriteableJavaRegistryApplicationEntry@Registry@Manager@Java@@UAEXPAVCJavaProperty@234@@Z @ 127 NONAME ABSENT ; void Java::Manager::Registry::CWriteableJavaRegistryApplicationEntry::SetPropertyL(class Java::Manager::Registry::CJavaProperty *)
 	?DrmContentId@CJavaRegistryEntry@Java@@QBEABVTDesC16@@XZ @ 128 NONAME ; class TDesC16 const & Java::CJavaRegistryEntry::DrmContentId(void) const
 	?DrmContentId@CWriteableJavaRegistryEntry@Registry@Manager@Java@@QBEABVTDesC16@@XZ @ 129 NONAME ; class TDesC16 const & Java::Manager::Registry::CWriteableJavaRegistryEntry::DrmContentId(void) const
-	?SetDrmContentIdL@CWriteableJavaRegistryEntry@Registry@Manager@Java@@QAEXABVTDesC16@@@Z @ 130 NONAME ; void Java::Manager::Registry::CWriteableJavaRegistryEntry::SetDrmContentIdL(class TDesC16 const &)
+	?SetDrmContentIdL@CWriteableJavaRegistryEntry@Registry@Manager@Java@@QAEXABVTDesC16@@@Z @ 130 NONAME ABSENT ; void Java::Manager::Registry::CWriteableJavaRegistryEntry::SetDrmContentIdL(class TDesC16 const &)
 	??1CJavaAttribute@Registry@Manager@Java@@UAE@XZ @ 131 NONAME ABSENT ; Java::Manager::Registry::CJavaAttribute::~CJavaAttribute(void)
 	??1CJavaAttributes@Registry@Manager@Java@@UAE@XZ @ 132 NONAME ABSENT ; Java::Manager::Registry::CJavaAttributes::~CJavaAttributes(void)
 	??1CWriteableJavaRegistryApplicationEntry@Registry@Manager@Java@@UAE@XZ @ 133 NONAME ; Java::Manager::Registry::CWriteableJavaRegistryApplicationEntry::~CWriteableJavaRegistryApplicationEntry(void)
@@ -152,10 +152,10 @@
 	?NewLC@CJavaAttribute@Registry@Manager@Java@@SAPAV1234@ABVTDesC16@@0H@Z @ 151 NONAME ABSENT ; class Java::Manager::Registry::CJavaAttribute * Java::Manager::Registry::CJavaAttribute::NewLC(class TDesC16 const &, class TDesC16 const &, int)
 	?NewLC@CJavaAttributes@Registry@Manager@Java@@SAPAV1234@PAVTDesC8@@@Z @ 152 NONAME ABSENT ; class Java::Manager::Registry::CJavaAttributes * Java::Manager::Registry::CJavaAttributes::NewLC(class TDesC8 *)
 	?NewLC@CJavaAttributes@Registry@Manager@Java@@SAPAV1234@XZ @ 153 NONAME ABSENT ; class Java::Manager::Registry::CJavaAttributes * Java::Manager::Registry::CJavaAttributes::NewLC(void)
-	?SerializeAttributesL@CWriteableJavaRegistryEntry@Registry@Manager@Java@@UAEXXZ @ 154 NONAME ; void Java::Manager::Registry::CWriteableJavaRegistryEntry::SerializeAttributesL(void)
+	?SerializeAttributesL@CWriteableJavaRegistryEntry@Registry@Manager@Java@@UAEXXZ @ 154 NONAME ABSENT ; void Java::Manager::Registry::CWriteableJavaRegistryEntry::SerializeAttributesL(void)
 	?SerializeAttributesL@CWriteableJavaRegistryPackageEntry@Registry@Manager@Java@@UAEXXZ @ 155 NONAME ABSENT ; void Java::Manager::Registry::CWriteableJavaRegistryPackageEntry::SerializeAttributesL(void)
 	?SerializedAttributesL@CJavaAttributes@Registry@Manager@Java@@QBEPAVHBufC8@@XZ @ 156 NONAME ABSENT ; class HBufC8 * Java::Manager::Registry::CJavaAttributes::SerializedAttributesL(void) const
-	?SetAttributeL@CWriteableJavaRegistryPackageEntry@Registry@Manager@Java@@QAEXABVTDesC16@@0H@Z @ 157 NONAME ; void Java::Manager::Registry::CWriteableJavaRegistryPackageEntry::SetAttributeL(class TDesC16 const &, class TDesC16 const &, int)
+	?SetAttributeL@CWriteableJavaRegistryPackageEntry@Registry@Manager@Java@@QAEXABVTDesC16@@0H@Z @ 157 NONAME ABSENT ; void Java::Manager::Registry::CWriteableJavaRegistryPackageEntry::SetAttributeL(class TDesC16 const &, class TDesC16 const &, int)
 	?SetRegistryEntryL@CWriteableJavaRegistry@Registry@Manager@Java@@QBEXAAVCWriteableJavaRegistryEntry@234@@Z @ 158 NONAME ABSENT ; void Java::Manager::Registry::CWriteableJavaRegistry::SetRegistryEntryL(class Java::Manager::Registry::CWriteableJavaRegistryEntry &) const
 	?Size@CJavaAttributes@Registry@Manager@Java@@QBEHXZ @ 159 NONAME ABSENT ; int Java::Manager::Registry::CJavaAttributes::Size(void) const
 	??1CJavaAttribute@Java@@UAE@XZ @ 160 NONAME ABSENT ; Java::CJavaAttribute::~CJavaAttribute(void)
@@ -170,11 +170,14 @@
 	?AttributesL@CWriteableJavaRegistryApplicationEntry@Registry@Manager@Java@@UBEABV?$RPointerArray@VMJavaAttribute@Java@@@@XZ @ 169 NONAME ; class RPointerArray<class Java::MJavaAttribute> const & Java::Manager::Registry::CWriteableJavaRegistryApplicationEntry::AttributesL(void) const
 	?AttributesL@CWriteableJavaRegistryEntry@Registry@Manager@Java@@UBEABV?$RPointerArray@VMJavaAttribute@Java@@@@XZ @ 170 NONAME ; class RPointerArray<class Java::MJavaAttribute> const & Java::Manager::Registry::CWriteableJavaRegistryEntry::AttributesL(void) const
 	?AttributesL@CWriteableJavaRegistryPackageEntry@Registry@Manager@Java@@UBEABV?$RPointerArray@VMJavaAttribute@Java@@@@XZ @ 171 NONAME ; class RPointerArray<class Java::MJavaAttribute> const & Java::Manager::Registry::CWriteableJavaRegistryPackageEntry::AttributesL(void) const
-	?NewL@CJavaAttribute@Java@@SAPAV12@ABVTDesC16@@0H@Z @ 172 NONAME ABSENT ; class Java::CJavaAttribute * Java::CJavaAttribute::NewL(class TDesC16 const &, class TDesC16 const &, int)
-	?NewLC@CJavaAttribute@Java@@SAPAV12@ABVTDesC16@@0H@Z @ 173 NONAME ABSENT ; class Java::CJavaAttribute * Java::CJavaAttribute::NewLC(class TDesC16 const &, class TDesC16 const &, int)
-	?GetRegistryEntryUidsL@CWriteableJavaRegistry@Registry@Manager@Java@@QBEXABV?$RPointerArray@VCJavaProperty@Registry@Manager@Java@@@@AAV?$RArray@VTUid@@@@H@Z @ 174 NONAME ; void Java::Manager::Registry::CWriteableJavaRegistry::GetRegistryEntryUidsL(class RPointerArray<class Java::Manager::Registry::CJavaProperty> const &, class RArray<class TUid> &, int) const
+	?NewL@CJavaAttribute@Java@@SAPAV12@ABVTDesC16@@0H@Z @ 172 NONAME ; class Java::CJavaAttribute * Java::CJavaAttribute::NewL(class TDesC16 const &, class TDesC16 const &, int)
+	?NewLC@CJavaAttribute@Java@@SAPAV12@ABVTDesC16@@0H@Z @ 173 NONAME ; class Java::CJavaAttribute * Java::CJavaAttribute::NewLC(class TDesC16 const &, class TDesC16 const &, int)
+	?GetRegistryEntryUidsL@CWriteableJavaRegistry@Registry@Manager@Java@@QBEXABV?$RPointerArray@VCJavaProperty@Registry@Manager@Java@@@@AAV?$RArray@VTUid@@@@H@Z @ 174 NONAME ABSENT ; void Java::Manager::Registry::CWriteableJavaRegistry::GetRegistryEntryUidsL(class RPointerArray<class Java::Manager::Registry::CJavaProperty> const &, class RArray<class TUid> &, int) const
 	?GetRegistryEntryUidsL@CWriteableJavaRegistry@Registry@Manager@Java@@QBEXW4TJavaRegistryEntryType@4@AAV?$RArray@VTUid@@@@H@Z @ 175 NONAME ; void Java::Manager::Registry::CWriteableJavaRegistry::GetRegistryEntryUidsL(enum Java::TJavaRegistryEntryType, class RArray<class TUid> &, int) const
 	?RegistryEntryL@CWriteableJavaRegistry@Registry@Manager@Java@@QBEPAVCWriteableJavaRegistryEntry@234@ABVTUid@@H@Z @ 176 NONAME ; class Java::Manager::Registry::CWriteableJavaRegistryEntry * Java::Manager::Registry::CWriteableJavaRegistry::RegistryEntryL(class TUid const &, int) const
 	?RemoveRegistryEntryL@CWriteableJavaRegistry@Registry@Manager@Java@@QBEXABVTUid@@HH@Z @ 177 NONAME ABSENT ; void Java::Manager::Registry::CWriteableJavaRegistry::RemoveRegistryEntryL(class TUid const &, int, int) const
 	?UsedUserDiskSpace@CJavaRegistryPackageEntry@Java@@QBE_JXZ @ 178 NONAME ; long long Java::CJavaRegistryPackageEntry::UsedUserDiskSpace(void) const
+	?UsedUserDiskSpace@CWriteableJavaRegistryPackageEntry@Registry@Manager@Java@@QBE_JXZ @ 179 NONAME ; long long Java::Manager::Registry::CWriteableJavaRegistryPackageEntry::UsedUserDiskSpace(void) const
+	?IsPreinstalled@CWriteableJavaRegistryPackageEntry@Registry@Manager@Java@@QBEHXZ @ 180 NONAME ; int Java::Manager::Registry::CWriteableJavaRegistryPackageEntry::IsPreinstalled(void) const
+	?IsPreinstalled@CJavaRegistryPackageEntry@Java@@QBEHXZ @ 181 NONAME ; int Java::CJavaRegistryPackageEntry::IsPreinstalled(void) const
 
--- a/java_stubs/javaregistry/clientserver/client/eabi/javaregistryclientu.def	Fri Sep 17 08:28:21 2010 +0300
+++ b/java_stubs/javaregistry/clientserver/client/eabi/javaregistryclientu.def	Mon Oct 04 00:10:53 2010 +0300
@@ -1,82 +1,82 @@
 EXPORTS
 	_ZN4Java13CJavaRegistry4NewLEv @ 1 NONAME
 	_ZN4Java13CJavaRegistry5NewLCEv @ 2 NONAME
-	_ZN4Java7Manager8Registry13CJavaProperty4NewLElRK7TDesC16 @ 3 NONAME
-	_ZN4Java7Manager8Registry13CJavaProperty5NewLCElRK7TDesC16 @ 4 NONAME
-	_ZN4Java7Manager8Registry13CJavaPropertyD0Ev @ 5 NONAME
-	_ZN4Java7Manager8Registry13CJavaPropertyD1Ev @ 6 NONAME
-	_ZN4Java7Manager8Registry13CJavaPropertyD2Ev @ 7 NONAME
-	_ZN4Java7Manager8Registry13CJavaPropertyeqERKS2_ @ 8 NONAME
-	_ZN4Java7Manager8Registry16JavaRegConverter10StoreTIntLElRP7HBufC16 @ 9 NONAME
-	_ZN4Java7Manager8Registry16JavaRegConverter11StoreTBoolLEiRP7HBufC16 @ 10 NONAME
-	_ZN4Java7Manager8Registry16JavaRegConverter14GetTAppVersionERK7TDesC1611TAppVersion @ 11 NONAME
-	_ZN4Java7Manager8Registry16JavaRegConverter15GetTAppVersionLERK7TDesC16 @ 12 NONAME
-	_ZN4Java7Manager8Registry16JavaRegConverter17StoreTAppVersionLERK11TAppVersionRP7HBufC16 @ 13 NONAME
-	_ZN4Java7Manager8Registry16JavaRegConverter21GetCertificateChainsLERK7TDesC16R13RPointerArrayI6HBufC8E @ 14 NONAME
-	_ZN4Java7Manager8Registry16JavaRegConverter22GetUnicodeDescriptorsLERK7TDesC16R13RPointerArrayI7HBufC16E @ 15 NONAME
-	_ZN4Java7Manager8Registry16JavaRegConverter23StoreCertificateChainsLERK13RPointerArrayI6HBufC8ERP7HBufC16 @ 16 NONAME
-	_ZN4Java7Manager8Registry16JavaRegConverter24StoreUnicodeDescriptorsLERK13RPointerArrayI7HBufC16ERPS4_ @ 17 NONAME
-	_ZN4Java7Manager8Registry16JavaRegConverter7GetTIntERK7TDesC16l @ 18 NONAME
-	_ZN4Java7Manager8Registry16JavaRegConverter8GetTBoolERK7TDesC16i @ 19 NONAME
-	_ZN4Java7Manager8Registry16JavaRegConverter8GetTIntLERK7TDesC16 @ 20 NONAME
-	_ZN4Java7Manager8Registry16JavaRegConverter9GetTBoolLERK7TDesC16 @ 21 NONAME
+	_ZN4Java7Manager8Registry13CJavaProperty4NewLElRK7TDesC16 @ 3 NONAME ABSENT
+	_ZN4Java7Manager8Registry13CJavaProperty5NewLCElRK7TDesC16 @ 4 NONAME ABSENT
+	_ZN4Java7Manager8Registry13CJavaPropertyD0Ev @ 5 NONAME ABSENT
+	_ZN4Java7Manager8Registry13CJavaPropertyD1Ev @ 6 NONAME ABSENT
+	_ZN4Java7Manager8Registry13CJavaPropertyD2Ev @ 7 NONAME ABSENT
+	_ZN4Java7Manager8Registry13CJavaPropertyeqERKS2_ @ 8 NONAME ABSENT
+	_ZN4Java7Manager8Registry16JavaRegConverter10StoreTIntLElRP7HBufC16 @ 9 NONAME ABSENT
+	_ZN4Java7Manager8Registry16JavaRegConverter11StoreTBoolLEiRP7HBufC16 @ 10 NONAME ABSENT
+	_ZN4Java7Manager8Registry16JavaRegConverter14GetTAppVersionERK7TDesC1611TAppVersion @ 11 NONAME ABSENT
+	_ZN4Java7Manager8Registry16JavaRegConverter15GetTAppVersionLERK7TDesC16 @ 12 NONAME ABSENT
+	_ZN4Java7Manager8Registry16JavaRegConverter17StoreTAppVersionLERK11TAppVersionRP7HBufC16 @ 13 NONAME ABSENT
+	_ZN4Java7Manager8Registry16JavaRegConverter21GetCertificateChainsLERK7TDesC16R13RPointerArrayI6HBufC8E @ 14 NONAME ABSENT
+	_ZN4Java7Manager8Registry16JavaRegConverter22GetUnicodeDescriptorsLERK7TDesC16R13RPointerArrayI7HBufC16E @ 15 NONAME ABSENT
+	_ZN4Java7Manager8Registry16JavaRegConverter23StoreCertificateChainsLERK13RPointerArrayI6HBufC8ERP7HBufC16 @ 16 NONAME ABSENT
+	_ZN4Java7Manager8Registry16JavaRegConverter24StoreUnicodeDescriptorsLERK13RPointerArrayI7HBufC16ERPS4_ @ 17 NONAME ABSENT
+	_ZN4Java7Manager8Registry16JavaRegConverter7GetTIntERK7TDesC16l @ 18 NONAME ABSENT
+	_ZN4Java7Manager8Registry16JavaRegConverter8GetTBoolERK7TDesC16i @ 19 NONAME ABSENT
+	_ZN4Java7Manager8Registry16JavaRegConverter8GetTIntLERK7TDesC16 @ 20 NONAME ABSENT
+	_ZN4Java7Manager8Registry16JavaRegConverter9GetTBoolLERK7TDesC16 @ 21 NONAME ABSENT
 	_ZN4Java7Manager8Registry22CWriteableJavaRegistry10ConstructLEii @ 22 NONAME
-	_ZN4Java7Manager8Registry22CWriteableJavaRegistry10ConstructLEx @ 23 NONAME
+	_ZN4Java7Manager8Registry22CWriteableJavaRegistry10ConstructLEx @ 23 NONAME ABSENT
 	_ZN4Java7Manager8Registry22CWriteableJavaRegistry4NewLEi @ 24 NONAME
-	_ZN4Java7Manager8Registry22CWriteableJavaRegistry4NewLEx @ 25 NONAME
+	_ZN4Java7Manager8Registry22CWriteableJavaRegistry4NewLEx @ 25 NONAME ABSENT
 	_ZN4Java7Manager8Registry22CWriteableJavaRegistry5NewLCEi @ 26 NONAME
-	_ZN4Java7Manager8Registry22CWriteableJavaRegistry5NewLCEx @ 27 NONAME
+	_ZN4Java7Manager8Registry22CWriteableJavaRegistry5NewLCEx @ 27 NONAME ABSENT
 	_ZN4Java7Manager8Registry22CWriteableJavaRegistryC1Ev @ 28 NONAME
 	_ZN4Java7Manager8Registry22CWriteableJavaRegistryC2Ev @ 29 NONAME
 	_ZN4Java7Manager8Registry22CWriteableJavaRegistryD0Ev @ 30 NONAME
 	_ZN4Java7Manager8Registry22CWriteableJavaRegistryD1Ev @ 31 NONAME
 	_ZN4Java7Manager8Registry22CWriteableJavaRegistryD2Ev @ 32 NONAME
-	_ZN4Java7Manager8Registry26CJavaRegistryBackupSupport4NewLEv @ 33 NONAME
-	_ZN4Java7Manager8Registry26CJavaRegistryBackupSupport5NewLCEv @ 34 NONAME
-	_ZN4Java7Manager8Registry26CJavaRegistryBackupSupportD0Ev @ 35 NONAME
-	_ZN4Java7Manager8Registry26CJavaRegistryBackupSupportD1Ev @ 36 NONAME
-	_ZN4Java7Manager8Registry26CJavaRegistryBackupSupportD2Ev @ 37 NONAME
+	_ZN4Java7Manager8Registry26CJavaRegistryBackupSupport4NewLEv @ 33 NONAME ABSENT
+	_ZN4Java7Manager8Registry26CJavaRegistryBackupSupport5NewLCEv @ 34 NONAME ABSENT
+	_ZN4Java7Manager8Registry26CJavaRegistryBackupSupportD0Ev @ 35 NONAME ABSENT
+	_ZN4Java7Manager8Registry26CJavaRegistryBackupSupportD1Ev @ 36 NONAME ABSENT
+	_ZN4Java7Manager8Registry26CJavaRegistryBackupSupportD2Ev @ 37 NONAME ABSENT
 	_ZN4Java7Manager8Registry27CWriteableJavaRegistryEntry10ConstructLENS_22TJavaRegistryEntryTypeE @ 38 NONAME
-	_ZN4Java7Manager8Registry27CWriteableJavaRegistryEntry12SetPropertyLEPNS1_13CJavaPropertyE @ 39 NONAME
-	_ZN4Java7Manager8Registry27CWriteableJavaRegistryEntry12SetPropertyLElRK7TDesC16 @ 40 NONAME
-	_ZN4Java7Manager8Registry27CWriteableJavaRegistryEntry14DeletePropertyEi @ 41 NONAME
-	_ZN4Java7Manager8Registry27CWriteableJavaRegistryEntry19SetBooleanPropertyLEli @ 42 NONAME
-	_ZN4Java7Manager8Registry27CWriteableJavaRegistryEntry19SetIntegerPropertyLEll @ 43 NONAME
-	_ZN4Java7Manager8Registry27CWriteableJavaRegistryEntry20AddCertificateChainLERK6TDesC8 @ 44 NONAME
-	_ZN4Java7Manager8Registry27CWriteableJavaRegistryEntry22SetDescriptorPropertyLElRK7TDesC16 @ 45 NONAME
-	_ZN4Java7Manager8Registry27CWriteableJavaRegistryEntry8SetNameLERK7TDesC16 @ 46 NONAME
-	_ZN4Java7Manager8Registry27CWriteableJavaRegistryEntry8SetTypeLENS_22TJavaRegistryEntryTypeE @ 47 NONAME
-	_ZN4Java7Manager8Registry27CWriteableJavaRegistryEntry9SetDriveLERK12TDriveNumber @ 48 NONAME
-	_ZN4Java7Manager8Registry27CWriteableJavaRegistryEntryC1ERK4TUid @ 49 NONAME
-	_ZN4Java7Manager8Registry27CWriteableJavaRegistryEntryC2ERK4TUid @ 50 NONAME
+	_ZN4Java7Manager8Registry27CWriteableJavaRegistryEntry12SetPropertyLEPNS1_13CJavaPropertyE @ 39 NONAME ABSENT
+	_ZN4Java7Manager8Registry27CWriteableJavaRegistryEntry12SetPropertyLElRK7TDesC16 @ 40 NONAME ABSENT
+	_ZN4Java7Manager8Registry27CWriteableJavaRegistryEntry14DeletePropertyEi @ 41 NONAME ABSENT
+	_ZN4Java7Manager8Registry27CWriteableJavaRegistryEntry19SetBooleanPropertyLEli @ 42 NONAME ABSENT
+	_ZN4Java7Manager8Registry27CWriteableJavaRegistryEntry19SetIntegerPropertyLEll @ 43 NONAME ABSENT
+	_ZN4Java7Manager8Registry27CWriteableJavaRegistryEntry20AddCertificateChainLERK6TDesC8 @ 44 NONAME ABSENT
+	_ZN4Java7Manager8Registry27CWriteableJavaRegistryEntry22SetDescriptorPropertyLElRK7TDesC16 @ 45 NONAME ABSENT
+	_ZN4Java7Manager8Registry27CWriteableJavaRegistryEntry8SetNameLERK7TDesC16 @ 46 NONAME ABSENT
+	_ZN4Java7Manager8Registry27CWriteableJavaRegistryEntry8SetTypeLENS_22TJavaRegistryEntryTypeE @ 47 NONAME ABSENT
+	_ZN4Java7Manager8Registry27CWriteableJavaRegistryEntry9SetDriveLERK12TDriveNumber @ 48 NONAME ABSENT
+	_ZN4Java7Manager8Registry27CWriteableJavaRegistryEntryC1ERK4TUid @ 49 NONAME ABSENT
+	_ZN4Java7Manager8Registry27CWriteableJavaRegistryEntryC2ERK4TUid @ 50 NONAME ABSENT
 	_ZN4Java7Manager8Registry27CWriteableJavaRegistryEntryD0Ev @ 51 NONAME
 	_ZN4Java7Manager8Registry27CWriteableJavaRegistryEntryD1Ev @ 52 NONAME
 	_ZN4Java7Manager8Registry27CWriteableJavaRegistryEntryD2Ev @ 53 NONAME
-	_ZN4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry10SetVendorLERK7TDesC16 @ 54 NONAME
-	_ZN4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry11SetVersionLERK11TAppVersion @ 55 NONAME
-	_ZN4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry12SetPropertyLEPNS1_13CJavaPropertyE @ 56 NONAME
-	_ZN4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry17AddEmbeddedEntryLERK4TUid @ 57 NONAME
-	_ZN4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry17SetInstallPluginLERK6TDesC8 @ 58 NONAME
-	_ZN4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry17SetUninstallableLEi @ 59 NONAME
-	_ZN4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry18SetDownloadPluginLERK6TDesC8 @ 60 NONAME
-	_ZN4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry20RemoveEmbeddedEntryLERK4TUid @ 61 NONAME
-	_ZN4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry4NewLERK4TUid @ 62 NONAME
-	_ZN4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry5NewLCERK4TUid @ 63 NONAME
-	_ZN4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry8SetSizeLEi @ 64 NONAME
-	_ZN4Java7Manager8Registry34CWriteableJavaRegistryPackageEntryC1ERK4TUid @ 65 NONAME
-	_ZN4Java7Manager8Registry34CWriteableJavaRegistryPackageEntryC2ERK4TUid @ 66 NONAME
+	_ZN4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry10SetVendorLERK7TDesC16 @ 54 NONAME ABSENT
+	_ZN4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry11SetVersionLERK11TAppVersion @ 55 NONAME ABSENT
+	_ZN4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry12SetPropertyLEPNS1_13CJavaPropertyE @ 56 NONAME ABSENT
+	_ZN4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry17AddEmbeddedEntryLERK4TUid @ 57 NONAME ABSENT
+	_ZN4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry17SetInstallPluginLERK6TDesC8 @ 58 NONAME ABSENT
+	_ZN4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry17SetUninstallableLEi @ 59 NONAME ABSENT
+	_ZN4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry18SetDownloadPluginLERK6TDesC8 @ 60 NONAME ABSENT
+	_ZN4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry20RemoveEmbeddedEntryLERK4TUid @ 61 NONAME ABSENT
+	_ZN4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry4NewLERK4TUid @ 62 NONAME ABSENT
+	_ZN4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry5NewLCERK4TUid @ 63 NONAME ABSENT
+	_ZN4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry8SetSizeLEi @ 64 NONAME ABSENT
+	_ZN4Java7Manager8Registry34CWriteableJavaRegistryPackageEntryC1ERK4TUid @ 65 NONAME ABSENT
+	_ZN4Java7Manager8Registry34CWriteableJavaRegistryPackageEntryC2ERK4TUid @ 66 NONAME ABSENT
 	_ZN4Java7Manager8Registry34CWriteableJavaRegistryPackageEntryD0Ev @ 67 NONAME
 	_ZN4Java7Manager8Registry34CWriteableJavaRegistryPackageEntryD1Ev @ 68 NONAME
 	_ZN4Java7Manager8Registry34CWriteableJavaRegistryPackageEntryD2Ev @ 69 NONAME
-	_ZN4Java7Manager8Registry38CWriteableJavaRegistryApplicationEntry11SetVisibleLEi @ 70 NONAME
-	_ZN4Java7Manager8Registry38CWriteableJavaRegistryApplicationEntry12SetResidentLEi @ 71 NONAME
-	_ZN4Java7Manager8Registry38CWriteableJavaRegistryApplicationEntry13SetGroupNameLERK7TDesC16 @ 72 NONAME
-	_ZN4Java7Manager8Registry38CWriteableJavaRegistryApplicationEntry13SetStartableLEi @ 73 NONAME
-	_ZN4Java7Manager8Registry38CWriteableJavaRegistryApplicationEntry21SetInstallPackageUidLERK4TUid @ 74 NONAME
-	_ZN4Java7Manager8Registry38CWriteableJavaRegistryApplicationEntry4NewLERK4TUid @ 75 NONAME
-	_ZN4Java7Manager8Registry38CWriteableJavaRegistryApplicationEntry5NewLCERK4TUid @ 76 NONAME
-	_ZN4Java7Manager8Registry38CWriteableJavaRegistryApplicationEntryC1ERK4TUid @ 77 NONAME
-	_ZN4Java7Manager8Registry38CWriteableJavaRegistryApplicationEntryC2ERK4TUid @ 78 NONAME
+	_ZN4Java7Manager8Registry38CWriteableJavaRegistryApplicationEntry11SetVisibleLEi @ 70 NONAME ABSENT
+	_ZN4Java7Manager8Registry38CWriteableJavaRegistryApplicationEntry12SetResidentLEi @ 71 NONAME ABSENT
+	_ZN4Java7Manager8Registry38CWriteableJavaRegistryApplicationEntry13SetGroupNameLERK7TDesC16 @ 72 NONAME ABSENT
+	_ZN4Java7Manager8Registry38CWriteableJavaRegistryApplicationEntry13SetStartableLEi @ 73 NONAME ABSENT
+	_ZN4Java7Manager8Registry38CWriteableJavaRegistryApplicationEntry21SetInstallPackageUidLERK4TUid @ 74 NONAME ABSENT
+	_ZN4Java7Manager8Registry38CWriteableJavaRegistryApplicationEntry4NewLERK4TUid @ 75 NONAME ABSENT
+	_ZN4Java7Manager8Registry38CWriteableJavaRegistryApplicationEntry5NewLCERK4TUid @ 76 NONAME ABSENT
+	_ZN4Java7Manager8Registry38CWriteableJavaRegistryApplicationEntryC1ERK4TUid @ 77 NONAME ABSENT
+	_ZN4Java7Manager8Registry38CWriteableJavaRegistryApplicationEntryC2ERK4TUid @ 78 NONAME ABSENT
 	_ZNK4Java13CJavaRegistry14RegistryEntryLERK4TUid @ 79 NONAME
 	_ZNK4Java13CJavaRegistry20RegistryEntryExistsLERK4TUid @ 80 NONAME
 	_ZNK4Java13CJavaRegistry21GetRegistryEntryUidsLENS_22TJavaRegistryEntryTypeER6RArrayI4TUidE @ 81 NONAME
@@ -99,9 +99,9 @@
 	_ZNK4Java29CJavaRegistryApplicationEntry13PackageEntryLEv @ 98 NONAME
 	_ZNK4Java29CJavaRegistryApplicationEntry9GroupNameEv @ 99 NONAME
 	_ZNK4Java29CJavaRegistryApplicationEntry9IsVisibleEv @ 100 NONAME
-	_ZNK4Java7Manager8Registry13CJavaProperty2IdEv @ 101 NONAME
-	_ZNK4Java7Manager8Registry13CJavaProperty5ValueEv @ 102 NONAME
-	_ZNK4Java7Manager8Registry22CWriteableJavaRegistry13GenerateUidsLER6RArrayI4TUidEi @ 103 NONAME
+	_ZNK4Java7Manager8Registry13CJavaProperty2IdEv @ 101 NONAME ABSENT
+	_ZNK4Java7Manager8Registry13CJavaProperty5ValueEv @ 102 NONAME ABSENT
+	_ZNK4Java7Manager8Registry22CWriteableJavaRegistry13GenerateUidsLER6RArrayI4TUidEi @ 103 NONAME ABSENT
 	_ZNK4Java7Manager8Registry22CWriteableJavaRegistry14RegistryEntryLERK4TUid @ 104 NONAME ABSENT
 	_ZNK4Java7Manager8Registry22CWriteableJavaRegistry17SetRegistryEntryLERKNS1_27CWriteableJavaRegistryEntryE @ 105 NONAME ABSENT
 	_ZNK4Java7Manager8Registry22CWriteableJavaRegistry20RegistryEntryExistsLERK4TUid @ 106 NONAME
@@ -109,55 +109,55 @@
 	_ZNK4Java7Manager8Registry22CWriteableJavaRegistry21GetRegistryEntryUidsLENS_22TJavaRegistryEntryTypeER6RArrayI4TUidE @ 108 NONAME ABSENT
 	_ZNK4Java7Manager8Registry22CWriteableJavaRegistry21GetRegistryEntryUidsLER6RArrayI4TUidE @ 109 NONAME
 	_ZNK4Java7Manager8Registry22CWriteableJavaRegistry21GetRegistryEntryUidsLERK13RPointerArrayINS1_13CJavaPropertyEER6RArrayI4TUidE @ 110 NONAME ABSENT
-	_ZNK4Java7Manager8Registry22CWriteableJavaRegistry25DecideEntryTypeAndCreateLERK4TUidPNS1_18CJavaPropertyArrayE @ 111 NONAME
-	_ZNK4Java7Manager8Registry26CJavaRegistryBackupSupport14ChangeBURStateERKNS1_12TBackupStateE @ 112 NONAME
-	_ZNK4Java7Manager8Registry26CJavaRegistryBackupSupport21EntriesExistForDriveLERK12TDriveNumber @ 113 NONAME
-	_ZNK4Java7Manager8Registry27CWriteableJavaRegistryEntry15BooleanPropertyEli @ 114 NONAME
-	_ZNK4Java7Manager8Registry27CWriteableJavaRegistryEntry15IntegerPropertyEll @ 115 NONAME
+	_ZNK4Java7Manager8Registry22CWriteableJavaRegistry25DecideEntryTypeAndCreateLERK4TUidPNS1_18CJavaPropertyArrayE @ 111 NONAME ABSENT
+	_ZNK4Java7Manager8Registry26CJavaRegistryBackupSupport14ChangeBURStateERKNS1_12TBackupStateE @ 112 NONAME ABSENT
+	_ZNK4Java7Manager8Registry26CJavaRegistryBackupSupport21EntriesExistForDriveLERK12TDriveNumber @ 113 NONAME ABSENT
+	_ZNK4Java7Manager8Registry27CWriteableJavaRegistryEntry15BooleanPropertyEli @ 114 NONAME ABSENT
+	_ZNK4Java7Manager8Registry27CWriteableJavaRegistryEntry15IntegerPropertyEll @ 115 NONAME ABSENT
 	_ZNK4Java7Manager8Registry27CWriteableJavaRegistryEntry16CertificateChainEi @ 116 NONAME
-	_ZNK4Java7Manager8Registry27CWriteableJavaRegistryEntry16GetPropertyIndexEl @ 117 NONAME
+	_ZNK4Java7Manager8Registry27CWriteableJavaRegistryEntry16GetPropertyIndexEl @ 117 NONAME ABSENT
 	_ZNK4Java7Manager8Registry27CWriteableJavaRegistryEntry25NumberOfCertificateChainsEv @ 118 NONAME
 	_ZNK4Java7Manager8Registry27CWriteableJavaRegistryEntry3UidEv @ 119 NONAME
 	_ZNK4Java7Manager8Registry27CWriteableJavaRegistryEntry4NameEv @ 120 NONAME
 	_ZNK4Java7Manager8Registry27CWriteableJavaRegistryEntry4TypeEv @ 121 NONAME
 	_ZNK4Java7Manager8Registry27CWriteableJavaRegistryEntry5DriveEv @ 122 NONAME
-	_ZNK4Java7Manager8Registry27CWriteableJavaRegistryEntry8PropertyEl @ 123 NONAME
-	_ZNK4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry13InstallPluginEv @ 124 NONAME
-	_ZNK4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry14DownloadPluginEv @ 125 NONAME
+	_ZNK4Java7Manager8Registry27CWriteableJavaRegistryEntry8PropertyEl @ 123 NONAME ABSENT
+	_ZNK4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry13InstallPluginEv @ 124 NONAME ABSENT
+	_ZNK4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry14DownloadPluginEv @ 125 NONAME ABSENT
 	_ZNK4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry15IsUninstallableEv @ 126 NONAME
 	_ZNK4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry18GetEmbeddedEntriesER6RArrayI4TUidE @ 127 NONAME
 	_ZNK4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry19EmbeddedEntryByUidLERK4TUid @ 128 NONAME
 	_ZNK4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry22EmbeddedEntryByNumberLEi @ 129 NONAME
 	_ZNK4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry23NumberOfEmbeddedEntriesEv @ 130 NONAME
-	_ZNK4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry4SizeEv @ 131 NONAME
+	_ZNK4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry4SizeEv @ 131 NONAME ABSENT
 	_ZNK4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry6VendorEv @ 132 NONAME
 	_ZNK4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry7VersionEv @ 133 NONAME
 	_ZNK4Java7Manager8Registry38CWriteableJavaRegistryApplicationEntry10IsResidentEv @ 134 NONAME
 	_ZNK4Java7Manager8Registry38CWriteableJavaRegistryApplicationEntry11IsStartableEv @ 135 NONAME
 	_ZNK4Java7Manager8Registry38CWriteableJavaRegistryApplicationEntry13PackageEntryLEv @ 136 NONAME
-	_ZNK4Java7Manager8Registry38CWriteableJavaRegistryApplicationEntry17InstallPackageUidEv @ 137 NONAME
-	_ZNK4Java7Manager8Registry38CWriteableJavaRegistryApplicationEntry9GroupNameEv @ 138 NONAME
+	_ZNK4Java7Manager8Registry38CWriteableJavaRegistryApplicationEntry17InstallPackageUidEv @ 137 NONAME ABSENT
+	_ZNK4Java7Manager8Registry38CWriteableJavaRegistryApplicationEntry9GroupNameEv @ 138 NONAME ABSENT
 	_ZNK4Java7Manager8Registry38CWriteableJavaRegistryApplicationEntry9IsVisibleEv @ 139 NONAME
 	_ZTIN4Java13CJavaRegistryE @ 140 NONAME ; #<TI>#
 	_ZTIN4Java18CJavaRegistryEntryE @ 141 NONAME ; #<TI>#
-	_ZTIN4Java7Manager8Registry13CJavaPropertyE @ 142 NONAME ; #<TI>#
-	_ZTIN4Java7Manager8Registry18CJavaPropertyArrayE @ 143 NONAME ; #<TI>#
+	_ZTIN4Java7Manager8Registry13CJavaPropertyE @ 142 NONAME ABSENT ; #<TI>#
+	_ZTIN4Java7Manager8Registry18CJavaPropertyArrayE @ 143 NONAME ABSENT ; #<TI>#
 	_ZTIN4Java7Manager8Registry22CWriteableJavaRegistryE @ 144 NONAME ; #<TI>#
-	_ZTIN4Java7Manager8Registry26CJavaRegistryBackupSupportE @ 145 NONAME ; #<TI>#
+	_ZTIN4Java7Manager8Registry26CJavaRegistryBackupSupportE @ 145 NONAME ABSENT ; #<TI>#
 	_ZTIN4Java7Manager8Registry27CWriteableJavaRegistryEntryE @ 146 NONAME ; #<TI>#
 	_ZTIN4Java7Manager8Registry34CWriteableJavaRegistryPackageEntryE @ 147 NONAME ; #<TI>#
 	_ZTVN4Java13CJavaRegistryE @ 148 NONAME ; #<VT>#
 	_ZTVN4Java18CJavaRegistryEntryE @ 149 NONAME ; #<VT>#
-	_ZTVN4Java7Manager8Registry13CJavaPropertyE @ 150 NONAME ; #<VT>#
-	_ZTVN4Java7Manager8Registry18CJavaPropertyArrayE @ 151 NONAME ; #<VT>#
+	_ZTVN4Java7Manager8Registry13CJavaPropertyE @ 150 NONAME ABSENT ; #<VT>#
+	_ZTVN4Java7Manager8Registry18CJavaPropertyArrayE @ 151 NONAME ABSENT ; #<VT>#
 	_ZTVN4Java7Manager8Registry22CWriteableJavaRegistryE @ 152 NONAME ; #<VT>#
-	_ZTVN4Java7Manager8Registry26CJavaRegistryBackupSupportE @ 153 NONAME ; #<VT>#
+	_ZTVN4Java7Manager8Registry26CJavaRegistryBackupSupportE @ 153 NONAME ABSENT ; #<VT>#
 	_ZTVN4Java7Manager8Registry27CWriteableJavaRegistryEntryE @ 154 NONAME ; #<VT>#
 	_ZTVN4Java7Manager8Registry34CWriteableJavaRegistryPackageEntryE @ 155 NONAME ; #<VT>#
-	_ZN4Java7Manager8Registry38CWriteableJavaRegistryApplicationEntry12SetPropertyLEPNS1_13CJavaPropertyE @ 156 NONAME
+	_ZN4Java7Manager8Registry38CWriteableJavaRegistryApplicationEntry12SetPropertyLEPNS1_13CJavaPropertyE @ 156 NONAME ABSENT
 	_ZTIN4Java7Manager8Registry38CWriteableJavaRegistryApplicationEntryE @ 157 NONAME ; #<TI>#
 	_ZTVN4Java7Manager8Registry38CWriteableJavaRegistryApplicationEntryE @ 158 NONAME ; #<VT>#
-	_ZN4Java7Manager8Registry27CWriteableJavaRegistryEntry16SetDrmContentIdLERK7TDesC16 @ 159 NONAME
+	_ZN4Java7Manager8Registry27CWriteableJavaRegistryEntry16SetDrmContentIdLERK7TDesC16 @ 159 NONAME ABSENT
 	_ZNK4Java18CJavaRegistryEntry12DrmContentIdEv @ 160 NONAME
 	_ZNK4Java7Manager8Registry27CWriteableJavaRegistryEntry12DrmContentIdEv @ 161 NONAME
 	_ZN4Java7Manager8Registry14CJavaAttribute4NewLERK7TDesC16S5_i @ 162 NONAME ABSENT
@@ -174,11 +174,11 @@
 	_ZN4Java7Manager8Registry15CJavaAttributesD2Ev @ 173 NONAME ABSENT
 	_ZNK4Java7Manager8Registry27CWriteableJavaRegistryEntry10AttributeLERK7TDesC16 @ 174 NONAME
 	_ZNK4Java7Manager8Registry27CWriteableJavaRegistryEntry11AttributesLEv @ 175 NONAME
-	_ZN4Java7Manager8Registry27CWriteableJavaRegistryEntry20SerializeAttributesLEv @ 176 NONAME
+	_ZN4Java7Manager8Registry27CWriteableJavaRegistryEntry20SerializeAttributesLEv @ 176 NONAME ABSENT
 	_ZNK4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry10AttributeLERK7TDesC16 @ 177 NONAME
 	_ZNK4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry11AttributesLEv @ 178 NONAME
-	_ZN4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry13SetAttributeLERK7TDesC16S5_i @ 179 NONAME
-	_ZN4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry20SerializeAttributesLEv @ 180 NONAME
+	_ZN4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry13SetAttributeLERK7TDesC16S5_i @ 179 NONAME ABSENT
+	_ZN4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry20SerializeAttributesLEv @ 180 NONAME ABSENT
 	_ZNK4Java7Manager8Registry38CWriteableJavaRegistryApplicationEntry10AttributeLERK7TDesC16 @ 181 NONAME
 	_ZNK4Java7Manager8Registry38CWriteableJavaRegistryApplicationEntry11AttributesLEv @ 182 NONAME
 	_ZN4Java7Manager8Registry38CWriteableJavaRegistryApplicationEntryD0Ev @ 183 NONAME
@@ -191,19 +191,30 @@
 	_ZNK4Java7Manager8Registry15CJavaAttributes4SizeEv @ 190 NONAME ABSENT
 	_ZNK4Java7Manager8Registry15CJavaAttributes5CountEv @ 191 NONAME ABSENT
 	_ZNK4Java7Manager8Registry15CJavaAttributes9AttributeERK7TDesC16 @ 192 NONAME ABSENT
-	_ZNK4Java7Manager8Registry22CWriteableJavaRegistry17SetRegistryEntryLERNS1_27CWriteableJavaRegistryEntryE @ 193 NONAME
+	_ZNK4Java7Manager8Registry22CWriteableJavaRegistry17SetRegistryEntryLERNS1_27CWriteableJavaRegistryEntryE @ 193 NONAME ABSENT
 	_ZTIN4Java7Manager8Registry14CJavaAttributeE @ 194 NONAME ABSENT ; #<TI>#
 	_ZTIN4Java7Manager8Registry15CJavaAttributesE @ 195 NONAME ABSENT ; #<TI>#
 	_ZTVN4Java7Manager8Registry14CJavaAttributeE @ 196 NONAME ABSENT ; #<VT>#
 	_ZTVN4Java7Manager8Registry15CJavaAttributesE @ 197 NONAME ABSENT ; #<VT>#
-	_ZN4Java14CJavaAttribute4NewLERK7TDesC16S3_i @ 198 NONAME ABSENT
-	_ZN4Java14CJavaAttribute5NewLCERK7TDesC16S3_i @ 199 NONAME ABSENT
+	_ZN4Java14CJavaAttribute4NewLERK7TDesC16S3_i @ 198 NONAME
+	_ZN4Java14CJavaAttribute5NewLCERK7TDesC16S3_i @ 199 NONAME
 	_ZN4Java7Manager8Registry15CJavaAttributes13AddAttributeLEPNS_14MJavaAttributeE @ 200 NONAME ABSENT
-	_ZTIN4Java14CJavaAttributeE @ 201 NONAME ABSENT ; #<TI>#
-	_ZTVN4Java14CJavaAttributeE @ 202 NONAME ABSENT ; #<VT>#
+	_ZTIN4Java14CJavaAttributeE @ 201 NONAME ; #<TI>#
+	_ZTVN4Java14CJavaAttributeE @ 202 NONAME ; #<VT>#
 	_ZNK4Java7Manager8Registry22CWriteableJavaRegistry14RegistryEntryLERK4TUidi @ 203 NONAME
-	_ZNK4Java7Manager8Registry22CWriteableJavaRegistry20RemoveRegistryEntryLERK4TUidii @ 204 NONAME
+	_ZNK4Java7Manager8Registry22CWriteableJavaRegistry20RemoveRegistryEntryLERK4TUidii @ 204 NONAME ABSENT
 	_ZNK4Java7Manager8Registry22CWriteableJavaRegistry21GetRegistryEntryUidsLENS_22TJavaRegistryEntryTypeER6RArrayI4TUidEi @ 205 NONAME
-	_ZNK4Java7Manager8Registry22CWriteableJavaRegistry21GetRegistryEntryUidsLERK13RPointerArrayINS1_13CJavaPropertyEER6RArrayI4TUidEi @ 206 NONAME
+	_ZNK4Java7Manager8Registry22CWriteableJavaRegistry21GetRegistryEntryUidsLERK13RPointerArrayINS1_13CJavaPropertyEER6RArrayI4TUidEi @ 206 NONAME ABSENT
 	_ZNK4Java25CJavaRegistryPackageEntry17UsedUserDiskSpaceEv @ 207 NONAME
+	_ZNK4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry17UsedUserDiskSpaceEv @ 208 NONAME
+	_ZNK4Java7Manager8Registry34CWriteableJavaRegistryPackageEntry14IsPreinstalledEv @ 209 NONAME
+	_ZNK4Java25CJavaRegistryPackageEntry14IsPreinstalledEv @ 210 NONAME
+	_ZN4Java14CJavaAttributeD0Ev @ 211 NONAME
+	_ZN4Java14CJavaAttributeD1Ev @ 212 NONAME
+	_ZN4Java14CJavaAttributeD2Ev @ 213 NONAME
+	_ZN4Java18CJavaRegistryEntryD0Ev @ 214 NONAME ABSENT
+	_ZN4Java18CJavaRegistryEntryD1Ev @ 215 NONAME ABSENT
+	_ZN4Java18CJavaRegistryEntryD2Ev @ 216 NONAME ABSENT
+	_ZThn4_N4Java14CJavaAttributeD0Ev @ 217 NONAME
+	_ZThn4_N4Java14CJavaAttributeD1Ev @ 218 NONAME
 
--- a/java_stubs/javaregistry/clientserver/client/inc/writeablejavaregistrypackageentry.h	Fri Sep 17 08:28:21 2010 +0300
+++ b/java_stubs/javaregistry/clientserver/client/inc/writeablejavaregistrypackageentry.h	Mon Oct 04 00:10:53 2010 +0300
@@ -364,6 +364,30 @@
      */
     IMPORT_C virtual void SerializeAttributesL();
 
+    /**
+     * CWriteableJavaRegistryPackageEntry::UsedUserDiskSpace gets the
+     * amount of disk space taken by the installed application.
+     *
+     * @since S60 v5.1
+     * @return Returns the size of used disk space in bytes.
+     */
+    IMPORT_C TInt64 UsedUserDiskSpace() const;
+
+    /**
+     * Tells if the application package is pre-installed.
+     *
+     * If a pre-installed application package is upgraded,
+     * it remains marked as pre-installed.
+     *
+     * If a pre-installed application package is uninstalled
+     * and later installed again, it is no more marked as
+     * pre-installed.
+     *
+     * @since S60 v5.1
+     * @return ETrue if the application suite is pre-installed,
+     *         EFalse otherwise.
+     */
+    IMPORT_C TBool IsPreinstalled() const;
 
 
 protected:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/java_stubs/javaregistry/clientserver/client/src/javaattribute.cpp	Mon Oct 04 00:10:53 2010 +0300
@@ -0,0 +1,82 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CJavaAttribute stub.
+*
+*/
+
+
+#include "javaattribute.h"
+
+using namespace Java;
+
+// ============================ MEMBER FUNCTIONS ==============================
+
+// ---------------------------------------------------------------------------
+// CJavaAttribute::NewL
+// Constructs a CJavaAttribute object.
+// ---------------------------------------------------------------------------
+EXPORT_C CJavaAttribute* CJavaAttribute::
+NewL(const TDesC& /*aName*/, const TDesC& /*aValue*/, TBool /*aTrusted*/)
+{
+    User::Leave(KErrNotSupported);
+    return NULL;
+}
+
+// ---------------------------------------------------------------------------
+// CJavaAttribute::NewLC
+// Constructs a CJavaAttribute object.
+// ---------------------------------------------------------------------------
+EXPORT_C CJavaAttribute* CJavaAttribute::
+NewLC(const TDesC& /*aName*/, const TDesC& /*aValue*/, TBool /*aTrusted*/)
+{
+    User::Leave(KErrNotSupported);
+    return NULL;
+}
+
+// ---------------------------------------------------------------------------
+// CJavaAttribute::~MJavaAttribute
+// ---------------------------------------------------------------------------
+EXPORT_C CJavaAttribute::~CJavaAttribute()
+{
+}
+
+// ---------------------------------------------------------------------------
+// CJavaAttribute::Name
+// Returns name of attribute
+// ---------------------------------------------------------------------------
+const TDesC& CJavaAttribute::Name() const
+{
+    return KNullDesC;
+}
+
+// ---------------------------------------------------------------------------
+// CJavaAttribute::Value
+// Returns attribute's value
+// ---------------------------------------------------------------------------
+const TDesC& CJavaAttribute::Value() const
+{
+    return KNullDesC;
+}
+
+// ---------------------------------------------------------------------------
+// CJavaAttribute::Trusted
+// Returns if attribute is trusted
+// ---------------------------------------------------------------------------
+TBool CJavaAttribute::Trusted() const
+{
+    return false;
+}
+
+
+// End of File
--- a/java_stubs/javaregistry/clientserver/client/src/javaregistrypackageentry.cpp	Fri Sep 17 08:28:21 2010 +0300
+++ b/java_stubs/javaregistry/clientserver/client/src/javaregistrypackageentry.cpp	Mon Oct 04 00:10:53 2010 +0300
@@ -119,3 +119,11 @@
 {
     return 0;
 }
+
+// ---------------------------------------------------------------------------
+// CJavaRegistryPackageEntry::IsPreinstalled
+// ---------------------------------------------------------------------------
+EXPORT_C TBool CJavaRegistryPackageEntry::IsPreinstalled() const
+{
+    return EFalse;
+}
--- a/java_stubs/javaregistry/clientserver/client/src/writeablejavaregistrypackageentry.cpp	Fri Sep 17 08:28:21 2010 +0300
+++ b/java_stubs/javaregistry/clientserver/client/src/writeablejavaregistrypackageentry.cpp	Mon Oct 04 00:10:53 2010 +0300
@@ -301,3 +301,20 @@
 {
 
 }
+
+// ---------------------------------------------------------------------------
+// CWriteableJavaRegistryPackageEntry::UsedUserDiskSpace
+// ---------------------------------------------------------------------------
+EXPORT_C TInt64 CWriteableJavaRegistryPackageEntry::UsedUserDiskSpace() const
+{
+    return 0;
+}
+
+// ---------------------------------------------------------------------------
+// CWriteableJavaRegistryPackageEntry::IsPreinstalled
+// ---------------------------------------------------------------------------
+EXPORT_C TBool CWriteableJavaRegistryPackageEntry::IsPreinstalled() const
+{
+    return EFalse;
+}
+
--- a/javacommons/connectionmanager/src.s60/connectionmanager.cpp	Fri Sep 17 08:28:21 2010 +0300
+++ b/javacommons/connectionmanager/src.s60/connectionmanager.cpp	Mon Oct 04 00:10:53 2010 +0300
@@ -65,8 +65,8 @@
 
 EXPORT_C bool ConnectionManager::isIapDefault(TUint32 aMatchIapId, TUint32 aDestId, bool aDefault)
 {
-	  LOG(ESOCKET,EInfo,"+ConnectionManager::isIapDefault");
-	  bool retVal = false;
+    LOG(ESOCKET,EInfo,"+ConnectionManager::isIapDefault");
+    bool retVal = false;
     TRAPD(err,retVal = checkIapDefaultL(aMatchIapId,aDestId,aDefault));
     if(err!=KErrNone)
     {
@@ -78,7 +78,7 @@
 
 bool ConnectionManager::checkIapDefaultL(TUint32 aMatchIapId, TUint32 aDestId, bool aDefault)
 {
-	
+
     LOG(ESOCKET,EInfo,"+ConnectionManager::checkIapDefaultL");
     TUint32 id = aDestId;
     TUint32 tmpapId;
@@ -118,9 +118,9 @@
             return true;
         }
     }
-    return false;	
-	
-	
+    return false;
+
+
 }
 
 // ---------------------------------------------------------------------------
@@ -304,7 +304,7 @@
     {
         JavaStorageApplicationEntry_t::const_iterator findIterator = entries.find(attribute);
 
-        if (findIterator != entries.end())
+        if (findIterator != entries.end() && findIterator->entryValue().length()>0 )
         {
             JavaStorageEntry sourceEntry = (*findIterator);
             temp.append(sourceEntry.entryValue().c_str());
--- a/javacommons/security/javasrc.cdc/com/nokia/mj/impl/security/midp/authorization/PermissionGranter.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javacommons/security/javasrc.cdc/com/nokia/mj/impl/security/midp/authorization/PermissionGranter.java	Mon Oct 04 00:10:53 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -483,8 +483,8 @@
                     || (net_access == true && read_user_data == true)
                     || (messaging == true && multimedia == true)
                     || (messaging == true && read_user_data == true)) ?
-                    new Id("settings_inst_query_perm_net", "N/A") :
-                    new Id("settings_inst_query_perm_sec", "N/A"));
+                    new Id("settings_inst_query_perm_net", "info_inst_query_perm_net") :
+                    new Id("settings_inst_query_perm_sec", "info_inst_query_perm_sec"));
 
                 iBlanketPermissionsDetails.put(msUidKey,
                                                UserSecuritySettingsImpl.getLocalizedString(
--- a/javacommons/security/javasrc/com/nokia/mj/impl/security/midp/storage/SecurityStorage.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javacommons/security/javasrc/com/nokia/mj/impl/security/midp/storage/SecurityStorage.java	Mon Oct 04 00:10:53 2010 +0300
@@ -740,9 +740,12 @@
         if (data.getRootHashValue() != null
                 && data.getRootHashValue().length() > 0)
         {
+            int rootHashLength = (data.getRootHashValue().length() > 8
+                ? 8 : data.getRootHashValue().length());
             entry.addAttribute(new StorageAttribute(
                                    StorageNames.CERT_HASH,
-                                   data.getRootHashValue()));
+                                   data.getRootHashValue().substring(0, 
+                                   rootHashLength)));
         }
         String validCerts = encodeValidatedChainIndexes(
                                 data.getValidatedChainIndexes());
--- a/javacommons/security/javasrc/com/nokia/mj/impl/security/utils/SecurityPermissionTexts.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javacommons/security/javasrc/com/nokia/mj/impl/security/utils/SecurityPermissionTexts.java	Mon Oct 04 00:10:53 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -29,25 +29,25 @@
     private static ResourceLoader iRes = null;
 
     // identifiers for the security permission texts
-    public static final Id CALL_CONTROL = new Id("call_control", "N/A");
-    public static final Id NET_ACCESS = new Id("net_access", "N/A");
-    public static final Id LOW_LEVEL_NET_ACCESS = new Id("low_level_net_access", "N/A");
-    public static final Id MESSAGING = new Id("messaging", "qt_kalle_test_d");
-    public static final Id RESTRICTED_MESSAGING = new Id("restricted_messaging", "N/A");
-    public static final Id APP_AUTO_INVOCAT = new Id("app_auto_invocat", "N/A");
-    public static final Id LOCAL_CONN = new Id("local_conn", "N/A");
-    public static final Id MM_RECORD = new Id("mm_record", "N/A");
-    public static final Id READ_DATA = new Id("read_data", "N/A");
-    public static final Id WRITE_DATA = new Id("write_data", "N/A");
-    public static final Id LOCATION = new Id("location", "N/A");
-    public static final Id LANDMARKS = new Id("landmarks", "N/A");
-    public static final Id AUTH = new Id("auth", "N/A");
-    public static final Id BROADCAST = new Id("broadcast", "N/A");
+    public static final Id CALL_CONTROL = new Id("call_control", "setlabel_call_control");
+    public static final Id NET_ACCESS = new Id("net_access", "setlabel_net_access");
+    public static final Id LOW_LEVEL_NET_ACCESS = new Id("low_level_net_access", "setlabel_low_level_net_access");
+    public static final Id MESSAGING = new Id("messaging", "setlabel_messaging");
+    public static final Id RESTRICTED_MESSAGING = new Id("restricted_messaging", "setlabel_restricted_messaging");
+    public static final Id APP_AUTO_INVOCAT = new Id("app_auto_invocat", "setlabel_app_auto_invoc");
+    public static final Id LOCAL_CONN = new Id("local_conn", "setlabel_local_conn");
+    public static final Id MM_RECORD = new Id("mm_record", "setlabel_mm_record");
+    public static final Id READ_DATA = new Id("read_data", "setlabel_read_data");
+    public static final Id WRITE_DATA = new Id("write_data", "setlabel_write_data");
+    public static final Id LOCATION = new Id("location", "setlabel_location");
+    public static final Id LANDMARKS = new Id("landmarks", "setlabel_landmarks");
+    public static final Id AUTH = new Id("auth", "setlabel_auth");
+    public static final Id BROADCAST = new Id("broadcast", "setlabel_broadcast");
 
     private static final String AVKON_LOC_FILE = "javainstallation";
     private static final String AVKON_PREFIX = "qtn_java_inst_perm_";
-    private static final String QT_LOC_FILE = "N/A";
-    private static final String QT_PREFIX = "N/A";
+    private static final String QT_LOC_FILE = "javaruntimeapplicationsettings";
+    private static final String QT_PREFIX = "txt_java_sett_";
 
     /**
      * Creates an instance of the SecurityPermissionTexts
--- a/javacommons/security/javasrc/com/nokia/mj/impl/security/utils/SecurityPromptMessage.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javacommons/security/javasrc/com/nokia/mj/impl/security/utils/SecurityPromptMessage.java	Mon Oct 04 00:10:53 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -29,74 +29,73 @@
     private static ResourceLoader iRes = null;
 
     // identifiers for the security prompt questions
-    public static final Id QUESTION_ID_NETWORK_USAGE = new Id("network_usage", "N/A");
-    public static final Id QUESTION_ID_SMS_OPENING_CONN = new Id("sms_opening_conn", "N/A");
-    public static final Id QUESTION_ID_MMS_OPENING_CONN = new Id("mms_opening_conn", "N/A");
-    public static final Id QUESTION_ID_CBS_OPENING_CONN = new Id("cbs_opening_conn", "N/A");
-    public static final Id QUESTION_ID_SMS_RECEIVING = new Id("sms_receiving", "N/A");
-    public static final Id QUESTION_ID_MMS_RECEIVING = new Id("mms_receiving", "N/A");
-    public static final Id QUESTION_ID_CBS_RECEIVING = new Id("cbs_receiving", "N/A");
-    public static final Id QUESTION_ID_SMS_SENDING = new Id("sms_sending", "N/A");
-    public static final Id QUESTION_ID_SMS_SINGLE_SENDING = new Id("sms_single_sending", "N/A");
-    public static final Id QUESTION_ID_MMS_SENDING = new Id("mms_sending", "N/A");
-    public static final Id QUESTION_ID_MMS_SINGLE_SENDING = new Id("mms_single_sending", "N/A");
-    public static final Id QUESTION_ID_MMS_SINGLE_SENDING_MULTIPLE_DESTINATIONS = new Id("mms_single_sending_multiple_destinations", "N/A");
-    public static final Id QUESTION_ID_SEND_RECEIVE_MESSAGES = new Id("receive_send_messages", "N/A");
-    public static final Id QUESTION_ID_LOCAL_CONNECTIVITY = new Id("local_connectivity", "N/A");
-    public static final Id QUESTION_ID_AUDIO_VIDEO_RECORDING = new Id("audio_video_recording", "N/A");
-    public static final Id QUESTION_ID_READING_USER_DATA = new Id("reading_user_data", "N/A");
-    public static final Id QUESTION_ID_WRITING_USER_DATA = new Id("writing_user_data", "N/A");
-    public static final Id QUESTION_ID_READING_FILE = new Id("reading_file", "N/A");
-    public static final Id QUESTION_ID_MANAGE_USER_DATA = new Id("manage_user_data", "N/A");
-    public static final Id QUESTION_ID_MODIFYING_FILE = new Id("modifying_file", "N/A");
-    public static final Id QUESTION_ID_READING_LOCATION_DATA = new Id("reading_location_data", "N/A");
-    public static final Id QUESTION_ID_READING_LANDMARK_DATA = new Id("reading_landmark_data", "N/A");
-    public static final Id QUESTION_ID_READING_SMARTCARD = new Id("reading_smartcard", "N/A");
-    public static final Id QUESTION_ID_AUTH_SERVICES_USAGE = new Id("auth_services_usage", "N/A");
-    public static final Id QUESTION_ID_BLUETOOTH_USAGE = new Id("bluetooth_usage", "N/A");
-    public static final Id QUESTION_ID_READING_CONTACTS = new Id("reading_contacts", "N/A");
-    public static final Id QUESTION_ID_MODIFYING_CONTACTS = new Id("modifying_contacts", "N/A");
-    public static final Id QUESTION_ID_READING_EVENTS = new Id("reading_events", "N/A");
-    public static final Id QUESTION_ID_MODIFYING_EVENTS = new Id("modifying_events", "N/A");
-    public static final Id QUESTION_ID_READING_TODOS = new Id("reading_todos", "N/A");
-    public static final Id QUESTION_ID_MODIFYING_TODOS = new Id("modifying_todos", "N/A");
-    public static final Id QUESTION_ID_DELETING_ITEM = new Id("deleting_item", "N/A");
-    public static final Id QUESTION_ID_UPDATING_ITEM = new Id("updating_item", "N/A");
-    public static final Id QUESTION_ID_DELETING_CATEGORY = new Id("deleting_category", "N/A");
-    public static final Id QUESTION_ID_UPDATING_CATEGORY = new Id("updating_category", "N/A");
-    public static final Id QUESTION_ID_DELETING_UNNAMED_ITEM = new Id("deleting_unnamed_item", "N/A");
-    public static final Id QUESTION_ID_UPDATING_UNNAMED_ITEM = new Id("updating_unnamed_item", "N/A");
-    public static final Id QUESTION_ID_ADDING_CALENDAR = new Id("adding_calendar", "N/A");
-    public static final Id QUESTION_ID_DELETING_CALENDAR = new Id("deleting_calendar", "N/A");
-    public static final Id QUESTION_ID_LISTING_CALENDARS = new Id("listing_calendars", "N/A");
-    public static final Id QUESTION_ID_ORIENTATION_DATA_USAGE = new Id("orientation_data_usage", "N/A");
-    public static final Id QUESTION_ID_POSITIONING_DATA_USAGE = new Id("positioning_data_usage", "N/A");
-    public static final Id QUESTION_ID_LANDMARK_DATA_USAGE = new Id("landmark_data_usage", "N/A");
-    public static final Id QUESTION_ID_PROXIMITY_LISTENER_REGISTRATION = new Id("proximity_listener_registration", "N/A");
-    public static final Id QUESTION_ID_MOBITV_DATA_USAGE = new Id("tv_broadcast_user_data_access", "N/A");
-    public static final Id QUESTION_ID_NETWORK_USAGE_VIA_PLAT_REQ = new Id("network_usage_via_plat_req", "N/A");
-    public static final Id QUESTION_ID_APP_LAUNCH_VIA_PLAT_REQ = new Id("app_launch_via_plat_req", "N/A");
-    public static final Id QUESTION_ID_PUSH_STATIC_REGISTRATION = new Id("push_registration_static", "N/A");
-    public static final Id QUESTION_ID_PUSH_DYNAMIC_REGISTRATION = new Id("push_registration_dynamic", "N/A");
-    public static final Id QUESTION_ID_AUTO_INVOCATION = new Id("auto_invocation", "N/A");
-    public static final Id QUESTION_ID_NDEF_TAG_WRITE = new Id("nfc_ndef_tag_write", "N/A");
-    public static final Id QUESTION_ID_APP_AUTO_LAUNCH = new Id("url_start", "N/A");
+    public static final Id QUESTION_ID_NETWORK_USAGE = new Id("network_usage", "info_network_usage");
+    public static final Id QUESTION_ID_SMS_OPENING_CONN = new Id("sms_opening_conn", "info_sms_opening");
+    public static final Id QUESTION_ID_MMS_OPENING_CONN = new Id("mms_opening_conn", "info_mms_opening");
+    public static final Id QUESTION_ID_CBS_OPENING_CONN = new Id("cbs_opening_conn", "info_cbs_opening");
+    public static final Id QUESTION_ID_SMS_RECEIVING = new Id("sms_receiving", "info_sms_receiving");
+    public static final Id QUESTION_ID_MMS_RECEIVING = new Id("mms_receiving", "info_mms_receiving");
+    public static final Id QUESTION_ID_CBS_RECEIVING = new Id("cbs_receiving", "info_cbs_receiving");
+    public static final Id QUESTION_ID_SMS_SENDING = new Id("sms_sending", "info_sms_sending");
+    public static final Id QUESTION_ID_SMS_SINGLE_SENDING = new Id("sms_single_sending", "info_sms_single_sending");
+    public static final Id QUESTION_ID_MMS_SINGLE_SENDING = new Id("mms_single_sending", "info_mms_single_sending");
+    public static final Id QUESTION_ID_MMS_SINGLE_SENDING_MULTIPLE_DESTINATIONS = new Id("mms_single_sending_multiple_destinations", "info_mms_single_send_multiple_dest");
+    public static final Id QUESTION_ID_SEND_RECEIVE_MESSAGES = new Id("receive_send_messages", "info_receive_send_messages");
+    public static final Id QUESTION_ID_LOCAL_CONNECTIVITY = new Id("local_connectivity", "info_local_connectivity");
+    public static final Id QUESTION_ID_AUDIO_VIDEO_RECORDING = new Id("audio_video_recording", "info_audio_video_recording");
+    public static final Id QUESTION_ID_READING_USER_DATA = new Id("reading_user_data", "info_reading_user_data");
+    public static final Id QUESTION_ID_WRITING_USER_DATA = new Id("writing_user_data", "info_writing_user_data");
+    public static final Id QUESTION_ID_READING_FILE = new Id("reading_file", "info_reading_file");
+    public static final Id QUESTION_ID_MANAGE_USER_DATA = new Id("manage_user_data", "info_manage_user_data");
+    public static final Id QUESTION_ID_MODIFYING_FILE = new Id("modifying_file", "info_modifying_file");
+    public static final Id QUESTION_ID_READING_LOCATION_DATA = new Id("reading_location_data", "info_reading_location_data");
+    public static final Id QUESTION_ID_READING_LANDMARK_DATA = new Id("reading_landmark_data", "info_reading_landmark_data");
+    public static final Id QUESTION_ID_READING_SMARTCARD = new Id("reading_smartcard", "info_reading_smartcard");
+    public static final Id QUESTION_ID_AUTH_SERVICES_USAGE = new Id("auth_services_usage", "info_auth_services_usage");
+    public static final Id QUESTION_ID_BLUETOOTH_USAGE = new Id("bluetooth_usage", "info_bluetooth_usage");
+    public static final Id QUESTION_ID_READING_CONTACTS = new Id("reading_contacts", "info_reading_contacts");
+    public static final Id QUESTION_ID_MODIFYING_CONTACTS = new Id("modifying_contacts", "info_modifying_contacts");
+    public static final Id QUESTION_ID_READING_EVENTS = new Id("reading_events", "info_reading_events");
+    public static final Id QUESTION_ID_MODIFYING_EVENTS = new Id("modifying_events", "info_modifying_events");
+    public static final Id QUESTION_ID_READING_TODOS = new Id("reading_todos", "info_reading_todos");
+    public static final Id QUESTION_ID_MODIFYING_TODOS = new Id("modifying_todos", "info_modifying_todos");
+    public static final Id QUESTION_ID_DELETING_ITEM = new Id("deleting_item", "info_deleting_item");
+    public static final Id QUESTION_ID_UPDATING_ITEM = new Id("updating_item", "info_updating_item");
+    public static final Id QUESTION_ID_DELETING_CATEGORY = new Id("deleting_category", "info_deleting_category");
+    public static final Id QUESTION_ID_UPDATING_CATEGORY = new Id("updating_category", "info_updating_category");
+    public static final Id QUESTION_ID_DELETING_UNNAMED_ITEM = new Id("deleting_unnamed_item", "info_deleting_unnamed_item");
+    public static final Id QUESTION_ID_UPDATING_UNNAMED_ITEM = new Id("updating_unnamed_item", "info_updating_unnamed_item");
+    public static final Id QUESTION_ID_ADDING_CALENDAR = new Id("adding_calendar", "info_adding_calendar");
+    public static final Id QUESTION_ID_DELETING_CALENDAR = new Id("deleting_calendar", "info_deleting_calendar");
+    public static final Id QUESTION_ID_LISTING_CALENDARS = new Id("listing_calendars", "listing_calendars");
+    public static final Id QUESTION_ID_ORIENTATION_DATA_USAGE = new Id("orientation_data_usage", "info_orientation_data_usage");
+    public static final Id QUESTION_ID_POSITIONING_DATA_USAGE = new Id("positioning_data_usage", "info_positioning_data_usage");
+    public static final Id QUESTION_ID_LANDMARK_DATA_USAGE = new Id("landmark_data_usage", "info_landmarks_data_usage");
+    public static final Id QUESTION_ID_PROXIMITY_LISTENER_REGISTRATION = new Id("proximity_listener_registration", "info_proximity_listener_reg");
+    public static final Id QUESTION_ID_MOBITV_DATA_USAGE = new Id("tv_broadcast_user_data_access", "info_tv_broadcast_user_data_access");
+    public static final Id QUESTION_ID_NETWORK_USAGE_VIA_PLAT_REQ = new Id("network_usage_via_plat_req", "info_network_usage_via_plat_req");
+    public static final Id QUESTION_ID_APP_LAUNCH_VIA_PLAT_REQ = new Id("app_launch_via_plat_req", "info_app_launch_via_plat_req");
+    public static final Id QUESTION_ID_PUSH_STATIC_REGISTRATION = new Id("push_registration_static", "info_push_registration_dynamic"); // should be "info_push_registration_static"
+    public static final Id QUESTION_ID_PUSH_DYNAMIC_REGISTRATION = new Id("push_registration_dynamic", "info_push_registration_dynamic");
+    public static final Id QUESTION_ID_AUTO_INVOCATION = new Id("auto_invocation", "info_auto_invocation");
+    public static final Id QUESTION_ID_NDEF_TAG_WRITE = new Id("nfc_ndef_tag_write", "info_nfc_ndef_tag_write");
+    public static final Id QUESTION_ID_APP_AUTO_LAUNCH = new Id("url_start", "info_url_start");
 
     // identifiers for the security prompt answer options
-    public static final Id ANSWER_ID_ALLOW = new Id("prompt_allow", "N/A");
-    public static final Id ANSWER_ID_DENY = new Id("prompt_deny", "N/A");
-    public static final Id ANSWER_ID_YES = new Id("prompt_yes", "N/A");
-    public static final Id ANSWER_ID_NO = new Id("prompt_no", "N/A");
+    public static final Id ANSWER_ID_ALLOW = new Id("prompt_allow", "button_prompt_allow");
+    public static final Id ANSWER_ID_DENY = new Id("prompt_deny", "button_prompt_deny");
+    public static final Id ANSWER_ID_YES = new Id("prompt_yes", "N/A"); // not used in 10.1TB
+    public static final Id ANSWER_ID_NO = new Id("prompt_no", "N/A"); // not used in 10.1TB
 
     // general purpose identifiers
-    public static final Id SECURITY_WARNING_ID = new Id("general_warning", "N/A");
-    public static final Id OCSP_WARNING_ID = new Id("ocsp_warning", "N/A");
+    public static final Id SECURITY_WARNING_ID = new Id("general_warning", "N/A"); // not used in 10.1TB
+    public static final Id OCSP_WARNING_ID = new Id("ocsp_warning", "info_ocsp_warning");
 
     // Localised resources
     private static final String AVKON_LOC_FILE = "javausermessages";
     private static final String AVKON_PREFIX = "qtn_java_secur_";
-    private static final String QT_LOC_FILE = "N/A";
-    private static final String QT_PREFIX = "";
+    private static final String QT_LOC_FILE = "javaapplicationsecuritymessages";
+    private static final String QT_PREFIX = "txt_java_secur_";
 
     /**
      * Creates an instance of the SecurityPromptMessage
--- a/javacommons/security/src/midpauthenticationmoduleimpl.cpp	Fri Sep 17 08:28:21 2010 +0300
+++ b/javacommons/security/src/midpauthenticationmoduleimpl.cpp	Mon Oct 04 00:10:53 2010 +0300
@@ -54,7 +54,7 @@
 /* forward declarations of local/private methods */
 static int verify_callback(int, X509_STORE_CTX *);
 int getErrCode(int);
-int verifyCertChain(char **, int, const unsigned char *, int, vector<string> CAs, char *, char *, CERT_DETAILS*);
+int verifyCertChain(char **, int, const unsigned char *, int, vector<string> CAs, char *, char *, char *, CERT_DETAILS*);
 
 JNIEXPORT jobjectArray JNICALL Java_com_nokia_mj_impl_security_midp_authentication_AuthenticationModule__1validateChainsAndSignatures
 (JNIEnv * env, jobject, jobjectArray authInfos)
@@ -77,6 +77,7 @@
     AUTH_INFO* authInfo = NULL;
     char * jar_hash = NULL;
     char * root_hash = NULL;
+    char * root_id = NULL;
     int validation_result = KDefault;
     for (int i=0; i<len; i++)
     {
@@ -87,20 +88,24 @@
         jar_hash[0] = '\0';
         root_hash = new char[MD5_DIGEST_LEN + 1];
         root_hash[0] = '\0';
+        root_id = new char[2*SHA_1_DIGEST_LEN + 1];
+        root_id[0] = '\0';
         details = new CERT_DETAILS();
         int chain_verification_result = verifyCertChain(
                                             authInfo->cert_chain, authInfo->cert_chain_len,
                                             (const unsigned char *)authInfo->signature,
                                             authInfo->signature_len, CAs, jar_hash,
-                                            root_hash, details);
+                                            root_hash, root_id, details);
         if (chain_verification_result == KCertAndSignatureOk)
         {
             validation_result = KCertAndSignatureOk;
             auth_credentials = new AUTH_CREDENTIALS();
             auth_credentials->jar_hash = new char[2*SHA_1_DIGEST_LEN + 1];
             auth_credentials->root_hash = new char[MD5_DIGEST_LEN + 1];
+            auth_credentials->root_id = new char[2*SHA_1_DIGEST_LEN + 1];
             memmove(auth_credentials->jar_hash, jar_hash, 2*SHA_1_DIGEST_LEN + 1);
             memmove(auth_credentials->root_hash, root_hash, MD5_DIGEST_LEN + 1);
+            memmove(auth_credentials->root_id, root_id, 2*SHA_1_DIGEST_LEN + 1);
             auth_credentials->chain_index = i+1;
             auth_credentials->signing_cert = details;
             all_auth_credentials.push_back(auth_credentials);
@@ -115,6 +120,8 @@
             jar_hash = NULL;
             delete[] root_hash;
             root_hash = NULL;
+            delete[] root_id;
+            root_id = NULL;
             // just record the failure of the chain validation
             if (chain_verification_result > validation_result)
             {
@@ -179,9 +186,19 @@
         std::string protection_domain_name;
         std::string protection_domain_category;
         JavaCertStoreHandler::retrieveRootProtDomainInfo(
-            all_auth_credentials[i]->root_hash,
+            all_auth_credentials[i]->root_id,
             protection_domain_name,
             protection_domain_category);
+        if (strcmp(protection_domain_name.c_str(),"") == 0)
+        {
+            // clean up the root_id
+            delete[] all_auth_credentials[i]->root_id;
+            all_auth_credentials[i]->root_id = NULL;
+            JavaCertStoreHandler::retrieveRootProtDomainInfo(
+                all_auth_credentials[i]->root_hash,
+                protection_domain_name,
+                protection_domain_category);
+        }
         if (strcmp(protection_domain_name.c_str(),""))
         {
             // DeveloperCertificates: if domain_category is manufacturer and we have predefined_domain_category use the predefined one
@@ -401,7 +418,7 @@
 int verifyCertChain(char **cert_chain, int no_certs,
                     const unsigned char * sig, int sig_len,
                     vector<string> CAs, char * jar_hash,
-                    char * root_hash, CERT_DETAILS* details)
+                    char * root_hash, char * root_id, CERT_DETAILS* details)
 {
     X509 *end_entity_cert;
     X509_STORE_CTX *x509_ctx = NULL;
@@ -494,6 +511,7 @@
                     if (user_cert != NULL)
                     {
                         sprintf(root_hash,"%08lX",X509_issuer_name_hash(user_cert));
+                        SecurityUtils::computePublicKeyHash(user_cert, root_id);
                         X509_free(user_cert);
                         ret_code = KCertAndSignatureOk;
                     }
@@ -544,10 +562,12 @@
                 // no need to free the root explicitly since it will be 
                 // freed when freeing all the roots from roots_certs_st 
                 // stack
+                SecurityUtils::computePublicKeyHash(root, root_id);
             }
         }
         // add the '\0'
         root_hash[MD5_DIGEST_LEN] = '\0';
+        root_id[SHA_1_DIGEST_LEN] = '\0';
 
         // 1. get the public key of the signing cert
         // 2. decode the provided signature using the signing cert's public key
--- a/javacommons/security/src/utils/securityutils.cpp	Fri Sep 17 08:28:21 2010 +0300
+++ b/javacommons/security/src/utils/securityutils.cpp	Mon Oct 04 00:10:53 2010 +0300
@@ -423,8 +423,17 @@
             all_auth_credentials[i]->signing_cert = NULL;
             jstring j_jar_hash_value =
                 env->NewStringUTF(all_auth_credentials[i]->jar_hash);
-            jstring j_root_hash_value =
-                env->NewStringUTF(all_auth_credentials[i]->root_hash);
+            jstring j_root_hash_value;
+            if (all_auth_credentials[i]->root_id != NULL)
+            {
+                j_root_hash_value =
+                    env->NewStringUTF(all_auth_credentials[i]->root_id);
+            }
+            else
+            {
+                j_root_hash_value =
+                    env->NewStringUTF(all_auth_credentials[i]->root_hash);
+            }
             jstring j_protection_domain_name = NULL;
             if (all_auth_credentials[i]->domain_name != NULL)
             {
@@ -455,6 +464,11 @@
             all_auth_credentials[i]->jar_hash = NULL;
             delete[] all_auth_credentials[i]->root_hash;
             all_auth_credentials[i]->root_hash = NULL;
+            if (all_auth_credentials[i]->root_id != NULL)
+            {
+                delete[] all_auth_credentials[i]->root_id;
+                all_auth_credentials[i]->root_id = NULL;
+            }
             delete all_auth_credentials[i];
             all_auth_credentials[i] = NULL;
             env->SetObjectArrayElement(result, i, auth_credentials);
@@ -464,6 +478,22 @@
     return result;
 }
 
+void SecurityUtils::computePublicKeyHash(X509 * x, char * pkey_hash)
+{
+    unsigned char tmp[SHA_1_DIGEST_LEN];
+    EVP_Digest(x->cert_info->key->public_key->data,
+        x->cert_info->key->public_key->length, tmp, NULL, EVP_sha1(), NULL);
+    char * tmp_pkey_hash = NULL;
+    tmp_pkey_hash = pkey_hash;
+    for (int i=0; i<SHA_1_DIGEST_LEN; i++)
+    {
+        sprintf(tmp_pkey_hash, "%02X", tmp[i]);
+        tmp_pkey_hash = tmp_pkey_hash + 2;
+    }
+    pkey_hash[2*SHA_1_DIGEST_LEN] = '\0';
+    tmp_pkey_hash = NULL;
+}
+
 void SecurityUtils::getAuthInfo(JNIEnv* env, jobjectArray authInfos, int authInfoIndex, AUTH_INFO * authInfo)
 {
     jboolean isCopy;
--- a/javacommons/security/src/utils/securityutils.h	Fri Sep 17 08:28:21 2010 +0300
+++ b/javacommons/security/src/utils/securityutils.h	Mon Oct 04 00:10:53 2010 +0300
@@ -95,6 +95,7 @@
     char * domain_category;
     char * jar_hash;
     char * root_hash;
+    char * root_id;
     int chain_index;
     int predefined_domain_category;
     CERT_DETAILS* signing_cert;
@@ -120,6 +121,7 @@
     static void getAuthInfo(JNIEnv*, jobjectArray, int, AUTH_INFO *);
     static jobject getJNICertDetails(JNIEnv *, const CERT_DETAILS);
     static jobjectArray getJNIAuthCredentials(JNIEnv *, std::vector<AUTH_CREDENTIALS*>);
+    static void computePublicKeyHash(X509 *, char *);
 private:
     static bool checkIMEI(const X509_EXTENSION *, const char *);
     static char * computeDigest1(const char*);
--- a/javacommons/utils/javasrc/com/nokia/mj/impl/utils/DebugUtils.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javacommons/utils/javasrc/com/nokia/mj/impl/utils/DebugUtils.java	Mon Oct 04 00:10:53 2010 +0300
@@ -59,13 +59,22 @@
 
     public static String getStackTrace(Throwable t)
     {
-        if (t == null)
+        String res = null;
+        if (t != null)
         {
-            throw new NullPointerException("Null when getting stack trace");
+            try 
+            {
+                ByteArrayOutputStream baos = new ByteArrayOutputStream();
+                _getStackTrace(t, new PrintStream(baos));
+                res = baos.toString();
+            }
+            catch (Throwable t2)
+            {
+                System.err.println("Failure in getting stack trace.");
+                t2.printStackTrace();
+            }
         }
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        _getStackTrace(t, new PrintStream(baos));
-        return baos.toString();
+        return res;
     }
 
     private static native void _getStackTrace(Throwable t, PrintStream printStream);
--- a/javacommons/utils/javasrc/com/nokia/mj/impl/utils/ErrorMessageBase.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javacommons/utils/javasrc/com/nokia/mj/impl/utils/ErrorMessageBase.java	Mon Oct 04 00:10:53 2010 +0300
@@ -121,7 +121,14 @@
         ResourceLoader rl = (ResourceLoader)iResourceLoaderTable.get(key);
         if (rl == null)
         {
-            rl = ResourceLoader.getInstance(textFilename, textPrefix);
+            if (getLocaleIdQt() == null)
+            {
+                rl = ResourceLoader.getInstance(textFilename, textPrefix);
+            }
+            else
+            {
+                rl = ResourceLoader.getInstance(null, null, textFilename, textPrefix);
+            }
             iResourceLoaderTable.put(key, rl);
         }
         return rl;
@@ -134,9 +141,7 @@
      */
     protected static String getLocaleIdQt()
     {
-        // Change this after Qt localisation files are taken into use.
-        //return ResourceLoader.getLocaleIdQt();
-        return null;
+        return ResourceLoader.getLocaleIdQt();
     }
 
     /*** ----------------------------- PACKAGE ---------------------------- */
--- a/javacommons/utils/javasrc/com/nokia/mj/impl/utils/Formatter.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javacommons/utils/javasrc/com/nokia/mj/impl/utils/Formatter.java	Mon Oct 04 00:10:53 2010 +0300
@@ -111,8 +111,10 @@
      */
     public Formatter arg(String string)
     {
-        // Try to replace with patterns %nU,%n, %U
-        if (replace("%" + nextIndex + "U", string) ||
+        // Try to replace with patterns %[N...N]n, %nU, %n, %U
+        String maxPattern = findMaxPattern();
+        if ((maxPattern != null && replace(maxPattern, string)) ||
+                replace("%" + nextIndex + "U", string) ||
                 replace("%" + nextIndex, string) ||
                 replace("%U", string))
         {
@@ -138,8 +140,10 @@
     {
         String localisedNumber = _formatInteger(number);
 
-        // Try to replace with patterns %Ln, %nN, %n, %N
-        if (replace("%" + "L" + nextIndex, localisedNumber) ||
+        // Try to replace with patterns %[N...N]n, %Ln, %nN, %n, %N
+        String maxPattern = findMaxPattern();
+        if ((maxPattern != null && replace(maxPattern, localisedNumber)) ||
+                replace("%" + "L" + nextIndex, localisedNumber) ||
                 replace("%" + nextIndex + "N", localisedNumber) ||
                 replace("%" + nextIndex, localisedNumber) ||
                 replace("%N", localisedNumber))
@@ -167,7 +171,7 @@
     {
         String chString = new String(new char[] { ch });
 
-        // Try to replace with patterns %nC,%n, %C
+        // Try to replace with patterns %nC, %n, %C
         if (replace("%" + nextIndex + "C", chString) ||
                 replace("%" + nextIndex, chString) ||
                 replace("%C", chString))
@@ -372,6 +376,28 @@
         return result;
     }
 
+    /**
+     * Finds next %[N...N]n pattern from the replaced field.
+     * Returns found pattern, or null if no pattern was found.
+     */
+    private String findMaxPattern()
+    {
+        String result = null;
+        String startPattern = "%[";
+        String endPattern = "]" + nextIndex;
+        int startIndex = replaced.indexOf(startPattern);
+        if (startIndex >= 0)
+        {
+            int endIndex = replaced.indexOf(endPattern, startIndex);
+            if (endIndex >= 0)
+            {
+                result = replaced.substring(
+                    startIndex, endIndex + endPattern.length());
+            }
+        }
+        return result;
+    }
+
     /*** ----------------------------- NATIVE ----------------------------- */
 
     /**
--- a/javacommons/utils/javasrc/com/nokia/mj/impl/utils/Id.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javacommons/utils/javasrc/com/nokia/mj/impl/utils/Id.java	Mon Oct 04 00:10:53 2010 +0300
@@ -40,7 +40,7 @@
         this.iQtLocString = aQtLocString;
     }
 
-    public String getString(int aPlatform)
+    String getString(int aPlatform)
     {
         if (aPlatform == ResourceLoader.QT)
         {
--- a/javacommons/utils/javasrc/com/nokia/mj/impl/utils/InstallerDetailedErrorMessage.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javacommons/utils/javasrc/com/nokia/mj/impl/utils/InstallerDetailedErrorMessage.java	Mon Oct 04 00:10:53 2010 +0300
@@ -112,7 +112,7 @@
             }
             else
             {
-                iRes = ResourceLoader.getInstance("javaapplicationinstaller", "txt_java_inst_info_");
+                iRes = ResourceLoader.getInstance(null, null, "javaapplicationinstallererrors", "txt_java_inst_info_");
             }
         }
         return iRes;
--- a/javacommons/utils/javasrc/com/nokia/mj/impl/utils/InstallerErrorMessage.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javacommons/utils/javasrc/com/nokia/mj/impl/utils/InstallerErrorMessage.java	Mon Oct 04 00:10:53 2010 +0300
@@ -81,19 +81,19 @@
         }
         else
         {
-            messageTable.put(new Integer(INST_NO_MEM), "info_there_is_not_enough_space_currently");
-            messageTable.put(new Integer(INST_NO_NET), "info_network_is_unavailable_currently");
-            messageTable.put(new Integer(INST_CORRUPT_PKG), "info_installation_package_is_invalid");
-            messageTable.put(new Integer(INST_COMPAT_ERR), "info_application_is_not_compatible_with");
-            messageTable.put(new Integer(INST_AUTHORIZATION_ERR), "info_there_is_a_security_issue_with_this");
-            messageTable.put(new Integer(INST_AUTHENTICATION_ERR), "info_there_is_a_security_issue_with_this");
-            messageTable.put(new Integer(INST_PUSH_REG_ERR), "info_an_unexpected_error_occurred");
-            messageTable.put(new Integer(INST_UNEXPECTED_ERR), "info_an_unexpected_error_occurred");
-            messageTable.put(new Integer(INST_CANCEL), "info_application_not_installed");
-            messageTable.put(new Integer(UNINST_NOT_ALLOWED), "info_application_cannot_be_deleted");
+            messageTable.put(new Integer(INST_NO_MEM), "error_info_there_is_not_enough_space_currently");
+            messageTable.put(new Integer(INST_NO_NET), "error_info_network_is_unavailable_currently");
+            messageTable.put(new Integer(INST_CORRUPT_PKG), "error_info_installation_package_is_invalid");
+            messageTable.put(new Integer(INST_COMPAT_ERR), "error_info_application_is_not_compatible_with");
+            messageTable.put(new Integer(INST_AUTHORIZATION_ERR), "error_info_there_is_a_security_issue_with_this");
+            messageTable.put(new Integer(INST_AUTHENTICATION_ERR), "error_info_there_is_a_security_issue_with_this");
+            messageTable.put(new Integer(INST_PUSH_REG_ERR), "error_info_an_unexpected_error_occurred");
+            messageTable.put(new Integer(INST_UNEXPECTED_ERR), "error_info_an_unexpected_error_occurred");
+            messageTable.put(new Integer(INST_CANCEL), "error_info_application_not_installed");
+            messageTable.put(new Integer(UNINST_NOT_ALLOWED), "error_info_application_cannot_be_deleted");
             messageTable.put(new Integer(UNINST_UNEXPECTED_ERR), "installer_info_uninstallation_failed");
-            messageTable.put(new Integer(UNINST_CANCEL), "info_application_not_deleted");
-            messageTable.put(new Integer(OTHER_UNEXPECTED_ERR), "info_an_unexpected_error_occurred");
+            messageTable.put(new Integer(UNINST_CANCEL), "error_info_application_not_deleted");
+            messageTable.put(new Integer(OTHER_UNEXPECTED_ERR), "error_info_an_unexpected_error_occurred");
         }
         iMessageTable = messageTable;
         return iMessageTable;
@@ -114,7 +114,7 @@
             }
             else
             {
-                iRes = ResourceLoader.getInstance("common_errors", "txt_error_");
+                iRes = ResourceLoader.getInstance(null, null, "common_errors", "txt_");
             }
         }
         return iRes;
--- a/javacommons/utils/javasrc/com/nokia/mj/impl/utils/Logger.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javacommons/utils/javasrc/com/nokia/mj/impl/utils/Logger.java	Mon Oct 04 00:10:53 2010 +0300
@@ -172,7 +172,7 @@
         catch (Exception e)
         {
 
-            System.out.println(e.toString());
+            System.err.println(e.toString());
         }
     }
 
@@ -183,7 +183,7 @@
      */
     public static void ELOG(int component, String str)
     {
-        _logging(component, EError, str);
+        logImpl(component, EError, str);
     }
 
     /**
@@ -194,12 +194,7 @@
      */
     public static void ELOG(int component, String str, Throwable thrown)
     {
-
-        ByteArrayOutputStream byte_stream = new ByteArrayOutputStream();
-        PrintStream print_stream = new PrintStream(byte_stream);
-
-        _loggingException(component, EError, str, thrown, byte_stream, print_stream);
-
+        logImpl(component, EError, str, thrown);
     }
 
     /**
@@ -209,7 +204,7 @@
      */
     public static void WLOG(int component, String str)
     {
-        _logging(component, EWarning, str);
+        logImpl(component, EWarning, str);
     }
 
     /**
@@ -220,10 +215,7 @@
      */
     public static void WLOG(int component, String str, Throwable thrown)
     {
-        ByteArrayOutputStream byte_stream = new ByteArrayOutputStream();
-        PrintStream print_stream = new PrintStream(byte_stream);
-
-        _loggingException(component, EWarning, str, thrown, byte_stream, print_stream);
+        logImpl(component, EWarning, str, thrown);
     }
 
     /**
@@ -233,7 +225,7 @@
      */
     public static void PLOG(int component, String str)
     {
-        _logging(component, EInfoPrd, str);
+        logImpl(component, EInfoPrd, str);
     }
 
     /**
@@ -245,9 +237,7 @@
      */
     public static void PLOG(int component, String str, Throwable thrown)
     {
-        ByteArrayOutputStream byte_stream = new ByteArrayOutputStream();
-        PrintStream print_stream = new PrintStream(byte_stream);
-        _loggingException(component, EInfoPrd, str, thrown, byte_stream, print_stream);
+        logImpl(component, EInfoPrd, str, thrown);
     }
 
     /**
@@ -257,7 +247,7 @@
      */
     public static void ILOG(int component, String str)
     {
-        _logging(component, EInfo, str);
+        logImpl(component, EInfo, str);
     }
 
     /**
@@ -269,9 +259,7 @@
      */
     public static void ILOG(int component, String str, Throwable thrown)
     {
-        ByteArrayOutputStream byte_stream = new ByteArrayOutputStream();
-        PrintStream print_stream = new PrintStream(byte_stream);
-        _loggingException(component, EInfoPrd, str, thrown, byte_stream, print_stream);
+        logImpl(component, EInfo, str, thrown);
     }
 
     /**
@@ -284,7 +272,7 @@
     {
         if (Activated[component])
         {
-            _logging(component, EEntry, str);
+            logImpl(component, EEntry, str);
         }
     }
 
@@ -297,7 +285,7 @@
     {
         if (Activated[component])
         {
-            _logging(component, EInfoHeavyLoad, str);
+            logImpl(component, EInfoHeavyLoad, str);
         }
     }
 
@@ -311,7 +299,9 @@
     public static void LOG(int component, int level, String str)
     {
         if (Activated[component])
-            _logging(component, level, str);
+        {
+            logImpl(component, level, str);
+        }
     }
 
     /**
@@ -326,19 +316,47 @@
     {
         if (Activated[component])
         {
-            ByteArrayOutputStream byte_stream = new ByteArrayOutputStream();
-            PrintStream print_stream = new PrintStream(byte_stream);
+            logImpl(component, level, str, thrown);
+        }
+    }
+    /**
+     * Function for printing a log without an exception.
+     * @param component a unique id of component
+     * @param level id level of tracing information
+     * @param str emiting information
+     */
+    private static void logImpl(int component, int level, String str)
+    {
+        logImpl(component, level, str, null);
+    }
 
-            _loggingException(component, level, str, thrown, byte_stream, print_stream);
+    /**
+     * Function for printing a log with optional exception.
+     * @param component a unique id of component
+     * @param level id level of tracing information
+     * @param str emiting information
+     * @param thrown exception object. If null then ignored
+     */
+    private static void logImpl(int component, int level, String str, Throwable thrown)
+    {
+        if (str == null)
+        {
+            ELOG(component, "str argument was null!", new NullPointerException());
+        }
+        else
+        {
+            _logging(component, level, str, DebugUtils.getStackTrace(thrown));
         }
     }
 
-
-    /** Native function prototype. */
-    private static native void _logging(int component, int level, String str);
-
-    /** Native function for logging stack trace when exception happend */
-    private static native void _loggingException(int component, int level, String str, Throwable thrown,
-            ByteArrayOutputStream byte_stream, PrintStream print_stream);
-
+    /**
+     * Native function for printing a log with optional stack trace.
+     * @param component a unique id of component
+     * @param level id level of tracing information
+     * @param str emiting information. Must not be null.
+     * @param stackTrace of the exception object. Can be null and will then
+     *                   be ignored.
+     */
+    private static native void _logging(int component, int level, String str,
+                                        String stackTrace);
 }
--- a/javacommons/utils/javasrc/com/nokia/mj/impl/utils/ResourceLoader.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javacommons/utils/javasrc/com/nokia/mj/impl/utils/ResourceLoader.java	Mon Oct 04 00:10:53 2010 +0300
@@ -30,9 +30,6 @@
  *   Label subjectLabel = createLabel(
  *       res.format("subject").arg(certificate.getSubject()).toString(),
  *       horizontalSpan, labelStyle);
- *
- *   Label noteLabel = createLabel(
- *       res.string("note"), horizontalSpan, labelStyle);
  * </pre>
  */
 public class ResourceLoader
@@ -144,7 +141,7 @@
      * @param resourceName name of the resource
      * @param aPrefix prefix added before each id when retrieving
      */
-    public ResourceLoader(String resourceName, String aPrefix)
+    ResourceLoader(String resourceName, String aPrefix)
     {
         locType = AVKON;
         prefix = aPrefix;
@@ -166,54 +163,13 @@
     /**
      * Get a string formatter of a given resource id.
      *
-     * @param avkonId Avkon resource id.
-     * @param qtId Qt resource id.
-     * @return formatter instance
-     * @see Formatter
-     */
-    public Formatter format(String avkonId, String qtId)
-    {
-        if (locType == AVKON)
-        {
-            return new Formatter(string(avkonId), locType);
-        }
-        else
-        {
-            return new Formatter(string(qtId), locType);
-        }
-    }
-
-    /**
-     * Formats localised text with specified parameters from an array.
-     *
-     * @param avkonId Avkon resource id.
-     * @param qtId Qt resource id.
-     * @param textParameters parameters to be filled into the text.
-     * @return localised text formatted with the provided parameters.
-     * @see Formatter
-     */
-    public String format(String avkonId, String qtId, Object[] textParameters)
-    {
-        if (locType == AVKON)
-        {
-            return new Formatter(string(avkonId), locType).format(textParameters);
-        }
-        else
-        {
-            return new Formatter(string(qtId), locType).format(textParameters);
-        }
-    }
-
-    /**
-     * Get a string formatter of a given resource id.
-     *
      * @param id resource id
      * @return formatter instance
      * @see Formatter
      */
     public Formatter format(Id id)
     {
-        return new Formatter(id.getString(locType), locType);
+        return new Formatter(string(id.getString(locType)), locType);
     }
 
     /**
@@ -244,44 +200,6 @@
 
 
     /**
-     * Get a plain string resource with a given resource id.
-     *
-     * @param id resource id, either with prefix or without
-     * @return resource string, or the id if does not exist
-     */
-    public String string(String id)
-    {
-        String str = (String)resourceMap.get(id);
-        if (str == null)
-        {
-            // Try with prefix
-            str = (String)resourceMap.get(prefix + id);
-            if (str == null)
-            {
-                // Not found even with prefix. Use the id itself
-                if (!id.startsWith(prefix))
-                {
-                    str = prefix + id;
-                }
-                else
-                {
-                    str = id;
-                }
-
-                Logger.WLOG(Logger.EUtils, "Cannot find resource: " + id);
-            }
-
-            // Put back to hash with original key for quick retrieval
-            resourceMap.put(id, str);
-        }
-
-        str = decode(str);
-        str = replaceCharacterCodes(str);
-
-        return str;
-    }
-
-    /**
      * Gets the locale ID currently being used on the phone. This can be used
      * e.g. to load a localized icon file, by adding the locale id as suffix.
      *
@@ -319,6 +237,44 @@
     /*** ----------------------------- PRIVATE ---------------------------- */
 
     /**
+     * Get a plain string resource with a given resource id.
+     *
+     * @param id resource id, either with prefix or without
+     * @return resource string, or the id if does not exist
+     */
+    private String string(String id)
+    {
+        String str = (String)resourceMap.get(id);
+        if (str == null)
+        {
+            // Try with prefix
+            str = (String)resourceMap.get(prefix + id);
+            if (str == null)
+            {
+                // Not found even with prefix. Use the id itself
+                if (!id.startsWith(prefix))
+                {
+                    str = prefix + id;
+                }
+                else
+                {
+                    str = id;
+                }
+
+                Logger.WLOG(Logger.EUtils, "Cannot find resource: " + id);
+            }
+
+            // Put back to hash with original key for quick retrieval
+            resourceMap.put(id, str);
+        }
+
+        str = decode(str);
+        str = replaceCharacterCodes(str);
+
+        return str;
+    }
+
+    /**
      * Loads the resources from .loc type file.
      *
      * @param resourceName name of the resource file.
--- a/javacommons/utils/src.s60/properties.cpp	Fri Sep 17 08:28:21 2010 +0300
+++ b/javacommons/utils/src.s60/properties.cpp	Mon Oct 04 00:10:53 2010 +0300
@@ -103,7 +103,7 @@
     JELOG2(EUtils);
 
     // microedition.locale
-    ILOG1(EUtils, "User::Language: %d", User::Language()); 
+    ILOG1(EUtils, "User::Language: %d", User::Language());
     // KDialectMask enables support for operator specific language variants
     switch (User::Language() & KDialectMask) {
         case ELangAfrikaans:
@@ -368,9 +368,13 @@
     TBuf<KSysUtilVersionTextLength> swVersion;
     if (SysUtil::GetSWVersion(swVersion) == KErrNone && swVersion.Length()>0)
     {
-        // Assume syntax V xx.xx\ndd-mm-yy\nNHL-vvv\n(c)Vendor
+        // Assume syntax xx.xx\ndd-mm-yy\nNHL-vvv\n(c)Vendor
         TInt NLloc = swVersion.Locate('\n');
-        TPtrC verPtr = swVersion.Mid(2, NLloc-2); // skip "V " in the beginning
+        if (KErrNotFound == NLloc)
+        {
+            NLloc = swVersion.Length();  // no '\n' -> use whole string
+        }
+        TPtrC verPtr = swVersion.Left(NLloc);
 
         // Get platform minor and major version numbers
         HBufC* platformVersionValue = GetPlatformVersionL();
--- a/javacommons/utils/src/logger.cpp	Fri Sep 17 08:28:21 2010 +0300
+++ b/javacommons/utils/src/logger.cpp	Mon Oct 04 00:10:53 2010 +0300
@@ -426,88 +426,75 @@
 
 #endif //J_LOG_USE_RLOGGER_ENABLED
 
-
-/**
- * Class:     com_nokia_mj_impl_utils_Logger
- * Method:    _logging
- * Signature: (IILjava/lang/String;)V
- *
- * Native static Logger._logging() method write log message to file and
- * accepting three input parameters:
- * component id, severity level id of emiting information and tracing information
- */
-
-JNIEXPORT void JNICALL Java_com_nokia_mj_impl_utils_Logger__1logging
-(JNIEnv *aEnv, jclass, jint aComponent, jint aLevel, jstring aLogString)
-{
-    const char* log = aEnv->GetStringUTFChars(aLogString, 0);
-
-    if (aLevel == com_nokia_mj_impl_utils_Logger_EError)
-    {
-        ELOG1((TComponents)aComponent, "%s", log);
-    }
-    else if (aLevel == com_nokia_mj_impl_utils_Logger_EWarning)
-    {
-        WLOG1((TComponents)aComponent, "%s", log);
-    }
-    else if (aLevel == com_nokia_mj_impl_utils_Logger_EInfoPrd)
-    {
-        PLOG1((TComponents)aComponent, "%s", log);
-    }
-    else
-    {
-        LOG1((TComponents)aComponent, EInfo, "%s", log);
-    }
-
-    aEnv->ReleaseStringUTFChars(aLogString, log);
-}
-
-
 /*
  * Class:     com_nokia_mj_impl_utils_Logger
- * Method:    _loggingException
- * Signature: (IILjava/lang/String;Ljava/lang/Throwable;Ljava/io/ByteArrayOutputStream;Ljava/io/PrintStream;)V
+ * Method:    _logging
+ * Signature: (IILjava/lang/String;java/lang/String;)V
  *
- * Method prints stack trace and Throwable info to log file
+ * Method for logging the log string. If the optional stack trace is provided
+ * that will be logged as well.
  */
-JNIEXPORT void JNICALL Java_com_nokia_mj_impl_utils_Logger__1loggingException
+JNIEXPORT void JNICALL Java_com_nokia_mj_impl_utils_Logger__1logging
 (JNIEnv *aEnv, jclass /*aClassH*/, jint aComponent, jint aLevel, jstring aLogString,
- jthrowable aThrowable, jobject aByteStream, jobject aPrintStream)
+ jstring aStackTrace)
 {
-    /* get logging string */
+    // It is excpected that Java peer checks that aLogString is not null.
+
+    // Get logging string.
     const char* log = aEnv->GetStringUTFChars(aLogString, 0);
 
-    /*
-     * call Throwable.printStackTrace(java.io.PrintStream)
-     * this method is not part of CLDC spec, but it's supported by VM vendors
-     */
-    jclass class_Throwable = aEnv->GetObjectClass(aThrowable);
-    jmethodID methodId = aEnv->GetMethodID(class_Throwable, "printStackTrace", "(Ljava/io/PrintStream;)V");
-    aEnv->CallVoidMethod(aThrowable, methodId, aPrintStream);
-
-    /* call ByteArrayOutputStream.toString() */
-    jclass class_ByteArrayOutputStream = aEnv->GetObjectClass(aByteStream);
-    methodId = aEnv->GetMethodID(class_ByteArrayOutputStream, "toString", "()Ljava/lang/String;");
-    jstring stacktrace_jstr = (jstring) aEnv->CallObjectMethod(aByteStream, methodId);
-    const char *stacktrace = aEnv->GetStringUTFChars(stacktrace_jstr, 0);
-
-    if (aLevel == com_nokia_mj_impl_utils_Logger_EError)
+    if (log)
     {
-        ELOG2((TComponents)aComponent, "%s: %s", log, stacktrace);
-    }
-    else if (aLevel == com_nokia_mj_impl_utils_Logger_EWarning)
-    {
-        WLOG2((TComponents)aComponent, "%s: %s", log, stacktrace);
+        const char* stack; // Content of optional stack trace. Default is empty
+        const char* delim; // Delimiter between log and stack trace. Default is empty
+        const char* stacktrace = 0;
+        if (aStackTrace)
+        {
+            // By default this write error string if GetStringUTFChars fails.
+            stack = "Stack trace not available";
+            delim = ": ";
+
+            // Get stack trace string.
+            stacktrace = aEnv->GetStringUTFChars(aStackTrace, 0);
+        }
+        else
+        {
+            // aStackTrace was null which means that there is no stack trace
+            // available.
+            stack = "";
+            delim = "";
+        }
+
+        // If it succeeded overwrite the default one.
+        if (stacktrace)
+        {
+            stack = stacktrace;
+        }
+
+        if (aLevel == com_nokia_mj_impl_utils_Logger_EError)
+        {
+            ELOG3((TComponents)aComponent, "%s%s%s", log, delim, stack);
+        }
+        else if (aLevel == com_nokia_mj_impl_utils_Logger_EWarning)
+        {
+            WLOG3((TComponents)aComponent, "%s%s%s", log, delim, stack);
+        }
+        else if (aLevel == com_nokia_mj_impl_utils_Logger_EInfoPrd)
+        {
+            PLOG3((TComponents)aComponent, "%s%s%s", log, delim, stack);
+        }
+        else
+        {
+            LOG3((TComponents)aComponent, EInfo, "%s%s%s", log, delim, stack);
+        }
+
+        // Free the stack trace string if it was available
+        if (stacktrace)
+        {
+            aEnv->ReleaseStringUTFChars(aStackTrace, stacktrace);
+        }
+
+        // Free the log string.
+        aEnv->ReleaseStringUTFChars(aLogString, log);
     }
-    else if (aLevel == com_nokia_mj_impl_utils_Logger_EInfoPrd)
-    {
-        PLOG2((TComponents)aComponent, "%s: %s", log, stacktrace);
-    }
-    else
-    {
-        LOG2((TComponents)aComponent, EInfo, "%s: %s", log, stacktrace);
-    }
-
-    aEnv->ReleaseStringUTFChars(aLogString, log);
-    aEnv->ReleaseStringUTFChars(stacktrace_jstr, stacktrace);
 }
--- a/javacommons/utils/tsrc/build/java/build.xml	Fri Sep 17 08:28:21 2010 +0300
+++ b/javacommons/utils/tsrc/build/java/build.xml	Mon Oct 04 00:10:53 2010 +0300
@@ -44,6 +44,11 @@
       <exec executable="${java.bin.root}/bin/javaunittester">
           <arg line="-mainclass=com.nokia.mj.impl.utils.DebugUtilsTests"/>
       </exec>
+
+      <echo>Running LoggerTests tests</echo>
+      <exec executable="${java.bin.root}/bin/javaunittester">
+          <arg line="-mainclass=com.nokia.mj.impl.utils.LoggerTests"/>
+      </exec>
   </target>
 
   <target name="main" depends="clean,run"/>
--- a/javacommons/utils/tsrc/build/native/exports.inf	Fri Sep 17 08:28:21 2010 +0300
+++ b/javacommons/utils/tsrc/build/native/exports.inf	Mon Oct 04 00:10:53 2010 +0300
@@ -17,7 +17,7 @@
 
 PRJ_EXPORTS
 
-#include "../../../../inc/build_defines.hrh"
+#include "../../../inc/build_defines.hrh"
 #ifdef RD_JAVA_SYMBIAN_TARGET
 ../../tst.bat        /epoc32/winscw/c/tst.bat
 #endif // RD_JAVA_SYMBIAN_TARGET
--- a/javacommons/utils/tsrc/javasrc/com/nokia/mj/impl/utils/DebugUtilsTests.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javacommons/utils/tsrc/javasrc/com/nokia/mj/impl/utils/DebugUtilsTests.java	Mon Oct 04 00:10:53 2010 +0300
@@ -70,25 +70,19 @@
     {
         try
         {
-            try
-            {
-                DebugUtils.getStackTrace(null);
-                assertTrue("No exception.", false);
-            }
-            catch (NullPointerException ne)
-            {
-            }
+            String res = DebugUtils.getStackTrace(null);
+            assertTrue("Not null: " + res, res == null);
 
             Exception e1 = new Exception("Test 42");
-            String res = DebugUtils.getStackTrace(e1);
+            res = DebugUtils.getStackTrace(e1);
             boolean ok = res.indexOf("at com.nokia.mj.impl.utils.DebugUtilsTests.testStackTrace") >= 0;
             assertTrue("Exception didn't contain: " + res, ok);
 
         }
         catch (Throwable t)
         {
+            t.printStackTrace();
             assertTrue(t.toString(), false);
-            t.printStackTrace();
         }
     }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javacommons/utils/tsrc/javasrc/com/nokia/mj/impl/utils/LoggerTests.java	Mon Oct 04 00:10:53 2010 +0300
@@ -0,0 +1,119 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+package com.nokia.mj.impl.utils;
+
+import com.nokia.mj.impl.utils.Logger;
+
+import com.nokia.mj.impl.rt.test.UnitTestSuiteCreator;
+import j2meunit.framework.Test;
+import j2meunit.framework.TestCase;
+import j2meunit.framework.TestMethod;
+import j2meunit.framework.TestSuite;
+
+/**
+ * DebugUtils unit tests.
+ */
+public class LoggerTests extends TestCase implements UnitTestSuiteCreator
+{
+    // Create the test suite.
+    public TestSuite createTestSuite(String[] args)
+    {
+        TestSuite suite = new TestSuite(this.getClass().getName());
+
+        suite.addTest(new LoggerTests("Test Log writings", new TestMethod()
+        {
+            public void run(TestCase tc)
+            {
+                ((LoggerTests)tc).testLogWritings();
+            }
+        }));
+
+        return suite;
+    }
+
+    public LoggerTests()
+    {
+    }
+
+    public LoggerTests(String aTestName, TestMethod aTestMethod)
+    {
+        super(aTestName, aTestMethod);
+    }
+
+    // End j2meunit test framework setup
+
+    protected void setUp()
+    {
+    }
+
+    protected void tearDown()
+    {
+    }
+
+    public void testLogWritings()
+    {
+        // Check the log writings manually from JavaLocation.log file.
+        try
+        {
+            Logger.ELOG(Logger.EJavaLocation, "This is Logger.ELOG without exception");
+            Logger.ELOG(Logger.EJavaLocation, "This is Logger.ELOG with exception", new Exception("Logger.ELOG"));
+            Logger.ELOG(Logger.EJavaLocation, "This is Logger.ELOG with null exception", null);
+            Logger.ELOG(Logger.EJavaLocation, null);
+
+            Logger.WLOG(Logger.EJavaLocation, "This is Logger.WLOG without exception");
+            Logger.WLOG(Logger.EJavaLocation, "This is Logger.WLOG with exception", new Exception("Logger.WLOG"));
+            Logger.WLOG(Logger.EJavaLocation, "This is Logger.WLOG with null exception", null);
+            Logger.WLOG(Logger.EJavaLocation, null);
+
+            Logger.PLOG(Logger.EJavaLocation, "This is Logger.PLOG without exception");
+            Logger.PLOG(Logger.EJavaLocation, "This is Logger.PLOG with exception", new Exception("Logger.PLOG"));
+            Logger.PLOG(Logger.EJavaLocation, "This is Logger.PLOG with null exception", null);
+            Logger.PLOG(Logger.EJavaLocation, null);
+
+            Logger.ILOG(Logger.EJavaLocation, "This is Logger.ILOG without exception");
+            Logger.ILOG(Logger.EJavaLocation, "This is Logger.ILOG with exception", new Exception("Logger.PLOG"));
+            Logger.ILOG(Logger.EJavaLocation, "This is Logger.ILOG with null exception", null);
+            Logger.ILOG(Logger.EJavaLocation, null);
+
+            Logger.JELOG(Logger.EJavaLocation, "This is Logger.JELOG");
+            Logger.JELOG(Logger.EJavaLocation, null);
+
+            Logger.HLOG(Logger.EJavaLocation, "This is Logger.HLOG");
+            Logger.HLOG(Logger.EJavaLocation, null);
+
+            testLOG(Logger.EError, "Logger.EError");
+            testLOG(Logger.EWarning, "Logger.EWarning");
+            testLOG(Logger.EInfoPrd, "Logger.EInfoPrd");
+            testLOG(Logger.EInfo, "Logger.EInfo");
+        }
+        catch (Throwable t)
+        {
+            t.printStackTrace();
+            assertTrue(t.toString(), false);
+        }
+    }
+
+    private void testLOG(int level, String str)
+    {
+            Logger.LOG(Logger.EJavaLocation, level, "This is Logger.LOG (" + str + ") without exception");
+            Logger.LOG(Logger.EJavaLocation, level, "This is Logger.LOG (" + str + ") with exception", new Exception(str));
+            Logger.LOG(Logger.EJavaLocation, level, "This is Logger.LOG (" + str + ") with null exception", null);
+            Logger.LOG(Logger.EJavaLocation, level, null);
+    }
+}
--- a/javacommons/utils/tsrc/tst.bat	Fri Sep 17 08:28:21 2010 +0300
+++ b/javacommons/utils/tsrc/tst.bat	Mon Oct 04 00:10:53 2010 +0300
@@ -14,6 +14,7 @@
 @rem Description:
 @rem
 rem Script for running JavaCommonUtils unit tests from S60 eshell
+javaunittester -mainclass=com.nokia.mj.impl.utils.LoggerTests
 javaunittester -mainclass=com.nokia.mj.impl.utils.BufferedReaderTests
 javaunittester -mainclass=com.nokia.mj.impl.utils.concurrent.ConcurrentTests
 javaunittester -mainclass=com.nokia.mj.impl.rt.SystemPropertyTests
--- a/javaextensions/bluetooth/bluetoothcommons/bluetoothplatformcontrol/src.s60/s60bluetoothplatformcontrol.cpp	Fri Sep 17 08:28:21 2010 +0300
+++ b/javaextensions/bluetooth/bluetoothcommons/bluetoothplatformcontrol/src.s60/s60bluetoothplatformcontrol.cpp	Mon Oct 04 00:10:53 2010 +0300
@@ -364,11 +364,11 @@
     TInt error = RProperty::Get(KPropertyUidBluetoothCategory,
                                 KPropertyKeyBluetoothGetDeviceName, bluetoothName);
 
-    if (error != KErrNone)
+    if (error != KErrNone || (0 == bluetoothName.Length()))
     {
+        ELOG(EJavaBluetooth, "Bluetooth friendly name was not set");
         return NULL;
     }
-
     std::wstring *deviceName =
         new std::wstring((wchar_t*) bluetoothName.Ptr());
 
--- a/javaextensions/bluetooth/bluetoothcommons/bluetoothplatformcontrol/src/btplatformcontrolnative.cpp	Fri Sep 17 08:28:21 2010 +0300
+++ b/javaextensions/bluetooth/bluetoothcommons/bluetoothplatformcontrol/src/btplatformcontrolnative.cpp	Mon Oct 04 00:10:53 2010 +0300
@@ -51,7 +51,7 @@
     {
         result = java::util::JniUtils::wstringToJstring(aJni, *devAddress);
     }
-    catch (ExceptionBase ex)
+    catch (ExceptionBase &ex)
     {
         result = NULL;
     }
@@ -82,20 +82,22 @@
     }
 
     std::wstring *devName = control->getBluetoothName();
-    jstring result;
+
+    jstring result = NULL;
     try
     {
-        result = java::util::JniUtils::wstringToJstring(aJni, *devName);
+        if (NULL != devName)
+        {
+            result = java::util::JniUtils::wstringToJstring(aJni, *devName);
+        }
     }
-    catch (ExceptionBase ex)
+    catch (ExceptionBase &ex)
     {
         result = NULL;
     }
 
-
     delete devName;
     delete control;
-
     return result;
 }
 
@@ -224,7 +226,7 @@
     {
         name = java::util::JniUtils::jstringToWstring(aJni, appName);
     }
-    catch (ExceptionBase ex)
+    catch (ExceptionBase &ex)
     {
         name=L"Unknown Application";
     }
@@ -270,7 +272,7 @@
     {
         name = java::util::JniUtils::jstringToWstring(aJni, appName);
     }
-    catch (ExceptionBase ex)
+    catch (ExceptionBase &ex)
     {
         name=L"Unknown Application";
     }
@@ -327,7 +329,7 @@
         result =  java::util::JniUtils::wstringToJstring(aJni,
                   control->getSystemProperty(aPropertyId));
     }
-    catch (ExceptionBase ex)
+    catch (ExceptionBase &ex)
     {
         result = NULL;
     }
--- a/javaextensions/bluetooth/bluetoothcommons/src.s60/bluetoothclientconnection.cpp	Fri Sep 17 08:28:21 2010 +0300
+++ b/javaextensions/bluetooth/bluetoothcommons/src.s60/bluetoothclientconnection.cpp	Mon Oct 04 00:10:53 2010 +0300
@@ -36,15 +36,19 @@
 
 OS_EXPORT BluetoothClientConnection::BluetoothClientConnection
 (BluetoothFunctionServer* server):
-        mServer(server),
+        mServer(server), mSocket(0),
         mShutdownNotifyMonitor(NULL),
         mReadNotifyMonitor(NULL),
+        mReadStatus(0),
         mBuffer(NULL, 0),
         mSendNotifyMonitor(NULL),
+        mRequestedRMtu(0), mRequestedTMtu(0),
+        mWriteStatus(0), mProtocol(0),
         mNegotiatedReceiveMtu(0),
         mNegotiatedTransmitMtu(0),
         mRemoteBTAddr(0),
         mConnectNotifyMonitor(NULL),
+        mConnectError(0),
         mMakeJavaCallbackOnRead(EFalse),
         mReadPending(EFalse),
         mBufferInitialized(EFalse)
@@ -58,11 +62,15 @@
         mSocket(aSocket),
         mShutdownNotifyMonitor(NULL),
         mReadNotifyMonitor(NULL),
+        mReadStatus(0),
         mBuffer(NULL, 0),
         mSendNotifyMonitor(NULL),
+        mRequestedRMtu(0), mRequestedTMtu(0),
+        mWriteStatus(0), mProtocol(0),
         mNegotiatedReceiveMtu(0),
         mNegotiatedTransmitMtu(0),
         mRemoteBTAddr(0),
+        mConnectError(0),
         mMakeJavaCallbackOnRead(EFalse),
         mReadPending(EFalse),
         mBufferInitialized(EFalse)
--- a/javaextensions/bluetooth/bluetoothcommons/src.s60/bturlparams.cpp	Fri Sep 17 08:28:21 2010 +0300
+++ b/javaextensions/bluetooth/bluetoothcommons/src.s60/bturlparams.cpp	Mon Oct 04 00:10:53 2010 +0300
@@ -270,7 +270,7 @@
                  aParam.c_str(), aVal.c_str());
             mReceiveMtu = JavaCommonUtils::wstringToInt(aVal);
         }
-        catch (ExceptionBase ex)
+        catch (ExceptionBase &ex)
         {
             ELOG1(EJavaBluetooth,
                   "- ServiceRecord::setUrlParamsValue URL_PARAM_RECEIVE_MTU exception Caught: %S",
@@ -286,7 +286,7 @@
                  aParam.c_str(), aVal.c_str());
             mTransmitMtu = JavaCommonUtils::wstringToInt(aVal);
         }
-        catch (ExceptionBase ex)
+        catch (ExceptionBase &ex)
         {
             ELOG1(EJavaBluetooth,
                   "- ServiceRecord::setUrlParamsValue URL_PARAM_TRANSMIT_MTU exception Caught: %S",
@@ -404,7 +404,7 @@
             mBlockedSenders.push_back(blackPattern);
             index = aBlackList.find(SEMICOLON);
         }
-        catch (ExceptionBase ex)
+        catch (ExceptionBase &ex)
         {
             // Nothing to handle here.
         }
@@ -422,7 +422,7 @@
                                       aBlackList.c_str());
             mBlockedSenders.push_back(blackPattern);
         }
-        catch (ExceptionBase ex)
+        catch (ExceptionBase &ex)
         {
             // Nothing to handle here.
         }
@@ -471,7 +471,7 @@
     {
         pattern = S60CommonUtils::wstringToDes(aPattern.c_str());
     }
-    catch (ExceptionBase ex)
+    catch (ExceptionBase &ex)
     {
         return true;
     }
--- a/javaextensions/bluetooth/bluetoothcommons/src.s60/servicerecord.cpp	Fri Sep 17 08:28:21 2010 +0300
+++ b/javaextensions/bluetooth/bluetoothcommons/src.s60/servicerecord.cpp	Mon Oct 04 00:10:53 2010 +0300
@@ -207,7 +207,7 @@
             persistentRecFd = open(fileName, O_RDONLY);
             delete[] fileName;
         }
-        catch (ExceptionBase ex)
+        catch (ExceptionBase &ex)
         {
             ELOG1(
                 EJavaBluetooth,
@@ -285,10 +285,10 @@
         {
             int len = 0;
             ret = read(persistentRecFd, &len, sizeof(len));
-            if (ret <= 0)
+            if (ret <= 0 || (len <= 0 || len >4))
                 break;
 
-            TUint8 buf[20] = { 0 };
+            TUint8 buf[4] = { 0 };
             ret = read(persistentRecFd, buf, len);
             if (ret <= 0)
                 break;
@@ -301,10 +301,10 @@
         {
             int len = 0;
             ret = read(persistentRecFd, &len, sizeof(len));
-            if (ret <= 0)
+            if (ret <= 0 || (len <= 0 || len >16))
                 break;
 
-            TUint8 buf[20] = { 0 };
+            TUint8 buf[16] = { 0 };
             ret = read(persistentRecFd, buf, len);
             if (ret <= 0)
                 break;
@@ -318,10 +318,10 @@
         {
             int len = 0;
             ret = read(persistentRecFd, &len, sizeof(len));
-            if (ret <= 0)
+            if (ret <= 0 || (len <= 0 || len >4))
                 break;
 
-            TUint8 buf[20] = { 0 };
+            TUint8 buf[4] = { 0 };
             ret = read(persistentRecFd, buf, len);
             if (ret <= 0)
                 break;
@@ -338,10 +338,10 @@
         {
             int len = 0;
             ret = read(persistentRecFd, &len, sizeof(len));
-            if (ret <= 0)
+            if (ret <= 0 || (len <= 0 || len >16))
                 break;
 
-            TUint8 buf[20] = { 0 };
+            TUint8 buf[16] = { 0 };
             ret = read(persistentRecFd, buf, len);
             if (ret <= 0)
                 break;
@@ -357,7 +357,7 @@
         {
             int len = 0;
             ret = read(persistentRecFd, &len, sizeof(len));
-            if (ret <= 0)
+            if (ret <= 0 || (len <= 0 || len >256))
                 break;
 
             TUint8 buf[256] = { 0 };
@@ -383,7 +383,7 @@
         {
             int len = 0;
             ret = read(persistentRecFd, &len, sizeof(len));
-            if (ret <= 0)
+            if (ret <= 0 || (len <= 0 || len >1024))
                 break;
 
             TUint8 buf[1024] = {0};
@@ -402,7 +402,7 @@
         {
             int len = 0;
             ret = read(persistentRecFd, &len, sizeof(len));
-            if (ret <= 0)
+            if (ret <= 0 || (len <= 0 || len >1024))
                 break;
 
             TUint8 buf[1024] = {0};
@@ -620,7 +620,7 @@
 
             delete[] fileName;
         }
-        catch (ExceptionBase ex)
+        catch (ExceptionBase &ex)
         {
             ELOG1(
                 EJavaBluetooth,
@@ -688,7 +688,7 @@
             }
             delete[] dirName;
         }
-        catch (ExceptionBase ex)
+        catch (ExceptionBase &ex)
         {
             ELOG1(EJavaBluetooth,
                   "- ServiceRecord::getPersistentFileName exception Caught: %S",
@@ -1288,7 +1288,7 @@
             persistentRecFd = open(fileName, O_RDONLY);
             delete[] fileName;
         }
-        catch (ExceptionBase ex)
+        catch (ExceptionBase &ex)
         {
             ELOG1(EJavaBluetooth,
                   "- ServiceRecord::restoreJavaServiceRecord exception caught: %S",
@@ -1383,10 +1383,10 @@
         {
             int len = 0;
             ret = read(persistentRecFd, &len, sizeof(len));
-            if (ret <= 0)
+            if (ret <= 0 || (len <= 0 || len >4))
                 break;
 
-            TUint8 bytes[20] = {0};
+            TUint8 bytes[4] = {0};
             ret = read(persistentRecFd, bytes, len);
             if (ret <= 0)
                 break;
@@ -1402,10 +1402,10 @@
         {
             int len = 0;
             ret = read(persistentRecFd, &len, sizeof(len));
-            if (ret <= 0)
+            if (ret <= 0 || (len <= 0 || len > 16))
                 break;
 
-            TUint8 buf[20] = {0};
+            TUint8 buf[16] = {0};
             ret = read(persistentRecFd, buf, len);
             if (ret <= 0)
                 break;
@@ -1422,10 +1422,10 @@
         {
             int len = 0;
             ret = read(persistentRecFd, &len, sizeof(len));
-            if (ret <= 0)
+            if (ret <= 0 || (len <= 0 || len >4))
                 break;
 
-            TUint8 bytes[20] = {0};
+            TUint8 bytes[4] = {0};
             ret = read(persistentRecFd, bytes, len);
             if (ret <= 0)
                 break;
@@ -1441,10 +1441,10 @@
         {
             int len = 0;
             ret = read(persistentRecFd, &len, sizeof(len));
-            if (ret <= 0)
+            if (ret <= 0 || (len <= 0 || len >16))
                 break;
 
-            TUint8 buf[20] = {0};
+            TUint8 buf[16] = {0};
             ret = read(persistentRecFd, buf, len);
             if (ret <= 0)
                 break;
@@ -1459,7 +1459,7 @@
         {
             int len = 0;
             ret = read(persistentRecFd, &len, sizeof(len));
-            if (ret <= 0)
+            if (ret <= 0 || (len <= 0 || len >256))
                 break;
 
             TUint8 buf[256] = {0};
@@ -1481,7 +1481,7 @@
         {
             int len = 0;
             ret = read(persistentRecFd, &len, sizeof(len));
-            if (ret <= 0)
+            if (ret <= 0 || (len <= 0 || len >1024))
                 break;
 
             TUint8 buf[1024] = {0};
@@ -1502,7 +1502,7 @@
         {
             int len = 0;
             ret = read(persistentRecFd, &len, sizeof(len));
-            if (ret <= 0)
+            if (ret <= 0 || (len <= 0 || len >1024))
                 break;
 
             TUint8 buf[1024] = {0};
--- a/javaextensions/bluetooth/bluetoothplugins/btl2cappushplugin/src.s60/btl2capserverconnection.cpp	Fri Sep 17 08:28:21 2010 +0300
+++ b/javaextensions/bluetooth/bluetoothplugins/btl2cappushplugin/src.s60/btl2capserverconnection.cpp	Mon Oct 04 00:10:53 2010 +0300
@@ -40,11 +40,16 @@
 OS_EXPORT L2CAPServerConnection::L2CAPServerConnection(
     java::bluetooth::BluetoothFunctionServer* server):
         mAcceptMonitor(NULL),
+        mAcceptStatus(0),
+        mAcceptedSocket(0),
+        mMasterRoleRequested(EFalse),
         mAsyncAccept(false),
         mAvoidFilter(false),
+        mPushEventListener(0),
         mBtUrlParams(NULL),
         mBtClientConn(NULL),
         mServer(server),
+        mListenSock(0),
         mIsConnected(EFalse),
         mServRec(NULL),
         mState(ENone)
--- a/javaextensions/bluetooth/bluetoothplugins/btl2cappushplugin/src/btl2cappushserverconnection.cpp	Fri Sep 17 08:28:21 2010 +0300
+++ b/javaextensions/bluetooth/bluetoothplugins/btl2cappushplugin/src/btl2cappushserverconnection.cpp	Mon Oct 04 00:10:53 2010 +0300
@@ -37,9 +37,11 @@
 OS_EXPORT L2CapPushServerConnection::L2CapPushServerConnection(
     const wstring aUri, const wstring aFilter):
         mAcceptMonitor(NULL),
+        mConnectionListener(0),
         mConnectionUri(aUri),
         mConnectionFilter(aFilter),
         mL2CAPServer(NULL),
+        mClientConnection(0),
         mPendingConnection(false),
         mListening(false),
         mCreatedByPush(false),
--- a/javaextensions/bluetooth/bluetoothplugins/btspppushplugin/src.s60/btrfcommserverconnection.cpp	Fri Sep 17 08:28:21 2010 +0300
+++ b/javaextensions/bluetooth/bluetoothplugins/btspppushplugin/src.s60/btrfcommserverconnection.cpp	Mon Oct 04 00:10:53 2010 +0300
@@ -42,10 +42,15 @@
 OS_EXPORT RFCOMMServerConnection::RFCOMMServerConnection(
     java::bluetooth::BluetoothFunctionServer* server):
         mAcceptMonitor(NULL),
+        mAcceptStatus(0),
+        mAcceptedSocket(0),
         mAsyncAccept(false),
+        mAvoidFilter(false),
+        mPushEventListener(0),
         mBtUrlParams(NULL),
         mBtClientConn(NULL),
         mServer(server),
+        mListenSock(0),
         mIsConnected(EFalse),
         mServRec(NULL),
         mState(ENone)
--- a/javaextensions/bluetooth/bluetoothplugins/btspppushplugin/src/rfcommpushserverconnection.cpp	Fri Sep 17 08:28:21 2010 +0300
+++ b/javaextensions/bluetooth/bluetoothplugins/btspppushplugin/src/rfcommpushserverconnection.cpp	Mon Oct 04 00:10:53 2010 +0300
@@ -38,10 +38,12 @@
 OS_EXPORT RFCOMMPushServerConnection::RFCOMMPushServerConnection(
     const wstring aUri, const wstring aFilter,ServerConnectionFactoryBase* aFactory):
         mAcceptMonitor(NULL),
+        mConnectionListener(0),
         mConnectionUri(aUri),
         mConnectionFilter(aFilter),
         mRFCOMMServer(NULL),
         mConnectionFactory(aFactory),
+        mClientConnection(0),
         mIsGOEP(false),
         mPendingConnection(false),
         mListening(false),
--- a/javaextensions/bluetooth/omjbluetooth/src.s60/bluetoothstacks60native.cpp	Fri Sep 17 08:28:21 2010 +0300
+++ b/javaextensions/bluetooth/omjbluetooth/src.s60/bluetoothstacks60native.cpp	Mon Oct 04 00:10:53 2010 +0300
@@ -206,7 +206,7 @@
             ret = java::util::JniUtils::wstringToJstring(aJni, str);
         }
     }
-    catch (ExceptionBase ex)
+    catch (ExceptionBase &ex)
     {
         ELOG1(EJavaBluetooth,
               "- JNI::getRemoteDeviceFriendlyName Exception:%S", ex.what());
@@ -305,7 +305,7 @@
 
 JNIEXPORT jint JNICALL
 Java_com_nokia_mj_impl_bluetooth_BluetoothStackS60__1populateServiceRecordAttributeValues
-(JNIEnv *aEnv, jobject aPeer, jlong aRemoteDevice, jlong aHandle,
+(JNIEnv *aEnv, jobject /*aPeer*/, jlong aRemoteDevice, jlong aHandle,
  jintArray aAttrSet, jobject aServiceRecordImpl, jlong aDiscAgent)
 {
     JELOG2(EJavaBluetooth);
@@ -327,7 +327,7 @@
         "   JNI::populateServiceRecordAttributeValues calling PopulateServiceRecord");
     int result = KErrNone;
     result = agent->PopulateServiceRecordAttrValue(
-                 aEnv, aPeer, aRemoteDevice, aHandle, attrIdsDes, serviceRecGlobalRef,
+                 aEnv, aRemoteDevice, aHandle, attrIdsDes, serviceRecGlobalRef,
                  serviceSearchMonitor);
 
     if (KErrNone != result)
@@ -707,7 +707,7 @@
     {
         connectionUrl = JniUtils::jstringToWstring(aJni, aUrl);
     }
-    catch (ExceptionBase ex)
+    catch (ExceptionBase &ex)
     {
         ELOG1(EJavaBluetooth,
               "- JNI::l2ServerOpen Exception:%S", ex.what());
@@ -1077,7 +1077,7 @@
     {
         connectionUrl = JniUtils::jstringToWstring(aJni, aUrl);
     }
-    catch (ExceptionBase ex)
+    catch (ExceptionBase &ex)
     {
         ELOG1(EJavaBluetooth,
               "- JNI::rfServerOpen Exception:%S", ex.what());
@@ -1401,7 +1401,7 @@
     {
         protocol = java::util::JniUtils::jstringToWstring(aJni, aProtocol);
     }
-    catch (ExceptionBase ex)
+    catch (ExceptionBase &ex)
     {
         ELOG1(EJavaBluetooth,
               "- JNI::initializeUpdateRecord Exception:%S", ex.what());
@@ -1450,7 +1450,7 @@
     {
         protocol = java::util::JniUtils::jstringToWstring(aJni, aProtocol);
     }
-    catch (ExceptionBase ex)
+    catch (ExceptionBase &ex)
     {
         ELOG1(EJavaBluetooth,
               "- JNI::completesUpdateRecord Exception:%S", ex.what());
@@ -1502,7 +1502,7 @@
     {
         protocol = java::util::JniUtils::jstringToWstring(aJni, aProtocol);
     }
-    catch (ExceptionBase ex)
+    catch (ExceptionBase &ex)
     {
         ELOG1(EJavaBluetooth,
               "- JNI::sdpAddAttribute Exception:%S", ex.what());
@@ -1655,7 +1655,7 @@
     {
         protocol = java::util::JniUtils::jstringToWstring(aJni, aProtocol);
     }
-    catch (ExceptionBase ex)
+    catch (ExceptionBase &ex)
     {
         ELOG1(EJavaBluetooth,
               "- JNI::sdpAttributeListStart Exception:%S", ex.what());
@@ -1717,7 +1717,7 @@
     {
         protocol = java::util::JniUtils::jstringToWstring(aJni, aProtocol);
     }
-    catch (ExceptionBase ex)
+    catch (ExceptionBase &ex)
     {
         ELOG1(EJavaBluetooth,
               "- JNI::sdpAttributeListEnd Exception:%S", ex.what());
--- a/javaextensions/bluetooth/omjbluetooth/src.s60/discoveryagent.cpp	Fri Sep 17 08:28:21 2010 +0300
+++ b/javaextensions/bluetooth/omjbluetooth/src.s60/discoveryagent.cpp	Mon Oct 04 00:10:53 2010 +0300
@@ -178,7 +178,7 @@
                 devAddr = java::util::JniUtils::wstringToJstring(aJni,
                           *(aDiscoveredDevice.mDeviceAddr));
             }
-            catch (ExceptionBase ex)
+            catch (ExceptionBase &ex)
             {
                 // Nothing to handle
             }
@@ -196,7 +196,7 @@
                 devName = java::util::JniUtils::wstringToJstring(aJni,
                           *(aDiscoveredDevice.mDeviceName));
             }
-            catch (ExceptionBase ex)
+            catch (ExceptionBase &ex)
             {
                 // Nothing to handle
             }
@@ -372,7 +372,7 @@
 }
 
 int DiscoveryAgent::PopulateServiceRecordAttrValue(JNIEnv* aJni,
-        jobject& aPeer, TInt64 aRemoteAddress, long aHandle,
+        TInt64 aRemoteAddress, long aHandle,
         TPtrC16 aAttrIdsDes, jobject aServiceRecordImpl,
         java::util::Monitor* aMonitor)
 {
@@ -380,19 +380,17 @@
 
     mServiceSearchMonitor = aMonitor;
 
-    jclass peerClass = (*aJni).GetObjectClass(aPeer);
-
     LOG(EJavaBluetooth, EInfo,
         "  DiscoveryAgent::PopulateServiceRecord: Starting populating service records ");
     TRAPD(err, CallMethodL(this,
-                           &java::bluetooth::DiscoveryAgent::populateServiceRecordAttrValueFs,
+                           &java::bluetooth::DiscoveryAgent::populateServiceRecordAttrValueFsL,
                            aRemoteAddress, aHandle, aAttrIdsDes, aServiceRecordImpl,
                            mFunctionServer));
 
     return err;
 }
 
-void DiscoveryAgent::populateServiceRecordAttrValueFs(TInt64 aRemoteAddress,
+void DiscoveryAgent::populateServiceRecordAttrValueFsL(TInt64 aRemoteAddress,
         long aHandle, TPtrC16 aAttrIdsDes, jobject aServiceRecordImpl)
 {
     mServiceSearcher = BluetoothServiceSearcher::New(this, mFunctionServer);
--- a/javaextensions/bluetooth/omjbluetooth/src.s60/discoveryagent.h	Fri Sep 17 08:28:21 2010 +0300
+++ b/javaextensions/bluetooth/omjbluetooth/src.s60/discoveryagent.h	Mon Oct 04 00:10:53 2010 +0300
@@ -84,7 +84,7 @@
 
     int getStatusOfCompletion();
 
-    int PopulateServiceRecordAttrValue(JNIEnv* aJni, jobject& aPeer,
+    int PopulateServiceRecordAttrValue(JNIEnv* aJni,
                                        TInt64 aRemoteAddress, long aHandle, TPtrC16 aAttrIdsDes,
                                        jobject aServiceRecordImpl, java::util::Monitor* aMonitor);
 
@@ -120,7 +120,7 @@
 
     void StartedServiceSearch(JNIEnv* aJni, jobject& aPeer);
 
-    void populateServiceRecordAttrValueFs(TInt64 aRemoteAddress, long aHandle,
+    void populateServiceRecordAttrValueFsL(TInt64 aRemoteAddress, long aHandle,
                                           TPtrC16 aAttrIdsDes, jobject aServiceRecordImpl);
 
 private:
--- a/javaextensions/midppush/build/build.xml	Fri Sep 17 08:28:21 2010 +0300
+++ b/javaextensions/midppush/build/build.xml	Mon Oct 04 00:10:53 2010 +0300
@@ -1,6 +1,6 @@
 <!--
 #
-# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 # All rights reserved.
 # This component and the accompanying materials are made available
 # under the terms of "Eclipse Public License v1.0"
@@ -12,7 +12,7 @@
 #
 # Contributors:
 #
-# Description: 
+# Description:
 #
 -->
 
@@ -27,7 +27,7 @@
   <!-- Needed by the utilities.xml. See the description form the utilities.xml
        file -->
 
-  <property name="javah.classnames" 
+  <property name="javah.classnames"
             value="com.nokia.mj.impl.push.PushRegistryImpl,
                    com.nokia.mj.impl.push.PushValidatorLoader"/>
 
@@ -35,5 +35,9 @@
       <omj.public.apis includes="javax/microedition/io/PushRegistry.class"/>
   </target>
 
+  <target name="create.internal.api.jar">
+    <omj.internal.apis includes="com/nokia/mj/impl/push/PushUtil*.class"/>
+  </target>
+
 </project>
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javaextensions/midppush/javasrc/com/nokia/mj/impl/push/PushUtil.java	Mon Oct 04 00:10:53 2010 +0300
@@ -0,0 +1,194 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+package com.nokia.mj.impl.push;
+
+import com.nokia.mj.impl.storage.StorageAttribute;
+import com.nokia.mj.impl.storage.StorageEntry;
+import com.nokia.mj.impl.storage.StorageNames;
+import com.nokia.mj.impl.storage.StorageSession;
+import com.nokia.mj.impl.utils.Uid;
+
+/**
+ * Utility methods for handling push registrations.
+ */
+public final class PushUtil
+{
+    /**
+     * Returns push registrations for specified application or
+     * application suite.
+     *
+     * @param aSession StorageSesion to be used for fetching
+     * the push registrations
+     * @param aUid either application or application suite Uid
+     * @return array of push registrations
+     */
+    public static PushRegInfo[] getPushRegs(StorageSession aSession, Uid aUid)
+    {
+        // Find push registrations using application uid.
+        PushRegInfo[] pushRegs = getPushRegsForAppUid(aSession, aUid);
+        if (pushRegs.length > 0)
+        {
+            return pushRegs;
+        }
+
+        // Push registrations not found, so find application uids using
+        // suite uid and then push registrations using application uids.
+        Uid[] appUids = getAppUids(aSession, aUid);
+        PushRegInfo[][] pushRegArray = new PushRegInfo[appUids.length][];
+        int pushRegCount = 0;
+        for (int i = 0; i < appUids.length; i++)
+        {
+            pushRegArray[i] = getPushRegs(aSession, appUids[i]);
+            pushRegCount += pushRegArray[i].length;
+        }
+        pushRegs = new PushRegInfo[pushRegCount];
+        int pushRegsIndex = 0;
+        for (int i = 0; i < pushRegArray.length; i++)
+        {
+            for (int j = 0; j < pushRegArray[i].length; j++)
+            {
+                pushRegs[pushRegsIndex++] = pushRegArray[i][j];
+            }
+        }
+        return pushRegs;
+    }
+
+    /**
+     * Returns push registrations for specified application.
+     *
+     * @param aSession StorageSesion to be used for fetching
+     * the push registrations
+     * @param aUid application Uid
+     * @return array of push registrations
+     */
+    private static PushRegInfo[] getPushRegsForAppUid(StorageSession aSession, Uid aUid)
+    {
+        PushRegInfo[] pushRegs = new PushRegInfo[0];
+        StorageEntry query = new StorageEntry();
+        query.addAttribute(
+            new StorageAttribute(StorageNames.ID, aUid.getStringValue()));
+        StorageEntry[] entries = aSession.search(
+            StorageNames.PUSH_REGISTRATIONS_TABLE, query);
+        if (entries != null && entries.length > 0)
+        {
+            pushRegs = new PushRegInfo[entries.length];
+            for (int i = 0; i < entries.length; i++)
+            {
+                Uid uid = Uid.createUid(
+                    entries[i].getAttribute(StorageNames.ID).getValue());
+                String name = entries[i].getAttribute(StorageNames.NAME).getValue();
+                String url = entries[i].getAttribute(StorageNames.URL).getValue();
+                String filter = entries[i].getAttribute(StorageNames.FILTER).getValue();
+                int regType = Integer.parseInt(
+                    entries[i].getAttribute(StorageNames.REGISTRATION_TYPE).getValue());
+                pushRegs[i] = new PushRegInfo(uid, name, url, filter, regType);
+            }
+        }
+        return pushRegs;
+    }
+
+    /**
+     * Returns application Uids for specified application suite.
+     *
+     * @param aSession StorageSesion to be used for fetching the Uids
+     * @param aSuiteUid application suite Uid
+     * @return array of application Uids
+     */
+    private static Uid[] getAppUids(StorageSession aSession, Uid aUid)
+    {
+        Uid[] uids = new Uid[0];
+        StorageEntry query = new StorageEntry();
+        query.addAttribute(new StorageAttribute(
+                               StorageNames.PACKAGE_ID, aUid.getStringValue()));
+        query.addAttribute(new StorageAttribute(StorageNames.ID, ""));
+        StorageEntry[] entries =
+            aSession.search(StorageNames.APPLICATION_TABLE, query);
+        if (entries != null && entries.length > 0)
+        {
+            uids = new Uid[entries.length];
+            for (int i = 0; i < entries.length; i++)
+            {
+                uids[i] = Uid.createUid(
+                    entries[i].getAttribute(StorageNames.ID).getValue());
+            }
+        }
+        return uids;
+    }
+
+    /**
+     * PushRegInfo contains information of one push registration.
+     */
+    public static final class PushRegInfo
+    {
+        /** Dynamic push registration. */
+        public static final int DYNAMIC = 0;
+        /** Static push registration. */
+        public static final int STATIC = 1;
+
+        /** Application Uid. */
+        private Uid iUid = null;
+        /** Application name. */
+        private String iName = null;
+        /** Push registration URL */
+        private String iUrl = null;
+        /** Filter for incoming messages/connections. */
+        private String iFilter = null;
+        /** Registration type. Either DYNAMIC or STATIC. */
+        private int iRegType = DYNAMIC;
+
+        PushRegInfo(
+            Uid aUid, String aName, String aUrl, String aFilter, int aRegType)
+        {
+            iUid = aUid;
+            iName =  aName;
+            iUrl = aUrl;
+            iFilter = aFilter;
+            iRegType = aRegType;
+        }
+
+        /** Returns application Uid. */
+        public Uid getUid()
+        {
+            return iUid;
+        }
+
+        /** Returns application name. */
+        public String getName()
+        {
+            return iName;
+        }
+
+        /** Returns push registration URL */
+        public String getUrl()
+        {
+            return iUrl;
+        }
+
+        /** Returns filter for incoming messages/connections. */
+        public String getFilter()
+        {
+            return iFilter;
+        }
+
+        /** Returns registration type. Either DYNAMIC or STATIC. */
+        public int getRegType()
+        {
+            return iRegType;
+        }
+    }
+}
--- a/javaextensions/midprms_db/tsrc/build/build.xml	Fri Sep 17 08:28:21 2010 +0300
+++ b/javaextensions/midprms_db/tsrc/build/build.xml	Mon Oct 04 00:10:53 2010 +0300
@@ -85,7 +85,7 @@
     <echo message = "junit source: ${junitdir}/${junitjarfilename}"/>
     <echo message = "junit target: ${vm.extension.directory}/${junitjarfilename}"/>
     <copy file="${junitdir}/${junitjarfilename}" tofile="${vm.extension.directory}/${junitjarfilename}"/>
-    <copy file="${junitdir}/${junit.omj.jar.filename}" tofile="${vm.extension.direcory}/${junit.omj.jar.filename}"/>
+    <copy file="${junitdir}/${junit.omj.jar.filename}" tofile="${vm.extension.directory}/${junit.omj.jar.filename}"/>
     <copy file="${jarfilename}" tofile="${vm.extension.directory}/${jarfilename}"/>
     <copy file="${jarfilename2}" tofile="${vm.extension.directory}/${jarfilename2}"/>
     <copy file="${jarfilename3}" tofile="${vm.extension.directory}/${jarfilename3}"/>    
--- a/javaextensions/pim/javasrc.s60/com/nokia/mj/impl/pim/utils/NativeError.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javaextensions/pim/javasrc.s60/com/nokia/mj/impl/pim/utils/NativeError.java	Mon Oct 04 00:10:53 2010 +0300
@@ -644,7 +644,8 @@
         }
         }
     }
-    public static void handleCreateCalendarError(int aNativeErrorCode, String aCalName)
+    public static void handleCreateCalendarError(int aNativeErrorCode, String aCalName) 
+    throws PIMException
     {
 
 
@@ -669,7 +670,7 @@
         }
         case OsErrorMessage.KERR_ALREADY_EXISTS:
         {
-            throw new RuntimeException(ErrorString.CALENDAR_ALREADY_EXISTS);
+             throw new PIMException(ErrorString.CALENDAR_ALREADY_EXISTS, PIMException.GENERAL_ERROR);
         }
         default:
         {
--- a/javaextensions/pim/javasrc/com/nokia/mj/impl/pim/PIMManager.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javaextensions/pim/javasrc/com/nokia/mj/impl/pim/PIMManager.java	Mon Oct 04 00:10:53 2010 +0300
@@ -217,15 +217,15 @@
             {
                 if (operation == null)
                 {
-                    if (calendarName != null)
+                    if (!calendarName.trim().equals(""))
                     {
                         //This is the case of opening an existing calendar
                         return doOpenPIMList(aPimListType, aMode, listName, "C:" + calendarName);
                     }
                     else
                     {
-                        //This is the case with IllegalArgumentException
-                        throw new IllegalArgumentException("Calendar Name is NULL");
+                        //This is the case with PIMException
+                        throw new PIMException("Can not" + operation + "Default Calendar", PIMException.GENERAL_ERROR);                        
                     }
                 }
                 else if (operation.equals("create"))
@@ -241,6 +241,8 @@
                     deleteCalendar(calendarName);
                     int listHandle = 0;
                     PIMListImpl pimList = new EventListImpl(listHandle, aMode);
+                    // Close the dummy list
+                    pimList.close();
                     return pimList;
                 }
                 else
@@ -415,7 +417,7 @@
     }
 
 
-    private synchronized void createCalendar(String aCalName)
+    private synchronized void createCalendar(String aCalName) throws PIMException
     {
 
         String displayName = aCalName;
--- a/javamanager/javaappscheme/src.s60/serviceapp.cpp	Fri Sep 17 08:28:21 2010 +0300
+++ b/javamanager/javaappscheme/src.s60/serviceapp.cpp	Mon Oct 04 00:10:53 2010 +0300
@@ -66,8 +66,7 @@
 // the name of the name of the service and then the name of the interface
 // (from service_conf.xml)
 UriService::UriService(ServiceApp* parent)
-: XQServiceProvider(QLatin1String("javaappscheme.com.nokia.symbian.IUriView"),parent),
-    mServiceApp(parent)
+: XQServiceProvider(QLatin1String("javaappscheme.com.nokia.symbian.IUriView"),parent)
 {
     LOG(EJavaQtServiceApp, EInfo, "UriService::UriService called");
     publishAll();
--- a/javamanager/javaappscheme/src.s60/serviceapp.h	Fri Sep 17 08:28:21 2010 +0300
+++ b/javamanager/javaappscheme/src.s60/serviceapp.h	Mon Oct 04 00:10:53 2010 +0300
@@ -35,8 +35,7 @@
     ServiceApp(int &argc, char **argv);
     ~ServiceApp();
 
-// TEMP TEST
-public slots:    
+public slots:
     static void quit();
 
 private:
@@ -54,9 +53,6 @@
     public slots:
         bool view(const QString& uri);
         bool view(const QString& uri, bool returnValue);
-
-    private:
-        ServiceApp* mServiceApp;
 };
 
 
--- a/javamanager/javacaptain/extensionplugins/javacertstore/inc/javacertstore.h	Fri Sep 17 08:28:21 2010 +0300
+++ b/javamanager/javacaptain/extensionplugins/javacertstore/inc/javacertstore.h	Mon Oct 04 00:10:53 2010 +0300
@@ -69,6 +69,7 @@
 {
     std::string full_path;
     std::string hash;
+    std::string pkey;
     int state;
     bool disposable;
     bool disablable;
--- a/javamanager/javacaptain/extensionplugins/javacertstore/src/javacertstore.cpp	Fri Sep 17 08:28:21 2010 +0300
+++ b/javamanager/javacaptain/extensionplugins/javacertstore/src/javacertstore.cpp	Mon Oct 04 00:10:53 2010 +0300
@@ -120,7 +120,7 @@
             }
             std::string id;
             aMessage >> id;
-            int state;
+            int state = STATE_UNDEFINED;
             switch (operation)
             {
             case JAVA_CERT_STORE_OPERATION_DELETE_CERT:
@@ -196,7 +196,8 @@
                 || (queryDisabled && iCertsMetadata[i]->state == STATE_DISABLED)
                 || (queryDeleted && iCertsMetadata[i]->state == STATE_DELETED))
                 && (hash.compare("") == 0
-                    || iCertsMetadata[i]->hash.compare(hash) == 0))
+                    || iCertsMetadata[i]->hash.compare(hash) == 0 
+                    || iCertsMetadata[i]->pkey.find(hash) == 0))
         {
             // what we return back depends on what was queried
             switch (query)
@@ -211,7 +212,14 @@
                 if (replyWithContent(replyMsg, *iCertsMetadata[i]))
                 {
                     // add also the ID and the state
-                    replyMsg << iCertsMetadata[i]->hash;
+                    if (iCertsMetadata[i]->pkey.size() > 0)
+                    {
+                        replyMsg << iCertsMetadata[i]->pkey;
+                    }
+                    else
+                    {
+                        replyMsg << iCertsMetadata[i]->hash;
+                    }
                     replyMsg << encodeState(iCertsMetadata[i]->disposable,
                                             iCertsMetadata[i]->disablable,
                                             iCertsMetadata[i]->state);
@@ -366,6 +374,7 @@
             const int READ_HASH = 4;
             const int READ_REMOVABLE = 5;
             const int READ_DISABLABLE = 6;
+            const int READ_PKEY = 7;
 
             // domain_name_info
             int domain_name_index = 0;
@@ -383,6 +392,10 @@
             bool removable = false;
             bool disablable = false;
 
+            // pkey info
+            int pkey_index = 0;
+            char pkey[50];
+
             // start&end separators for the metadata's keys
             bool key_ss = true;
             bool key_es = false;
@@ -417,6 +430,10 @@
                         op = READ_DISABLABLE;
                         key_ss = false;
                         break;
+                    case 'p':
+                        op = READ_PKEY;
+                        key_ss = false;
+                        break;
                     }
                 }
                 else
@@ -462,6 +479,11 @@
                                 disablable = true;
                             }
                             break;
+                        case READ_PKEY:
+                            pkey[pkey_index] = (char)retval;
+                            pkey_index++;
+                            pkey[pkey_index] = '\0';
+                            break;
                         }
                     }
                 }
@@ -470,6 +492,11 @@
                     && domain_category_index > 0
                     && hash_index > 0)
             {
+                if (pkey_index > 0)
+                {
+                    metadata->pkey = string(pkey, pkey_index);
+                    transform(metadata->pkey.begin(), metadata->pkey.end(), metadata->pkey.begin(), (int(*)(int)) tolower);
+                }
                 metadata->prot_domain_name = string(domain_name, domain_name_index);
                 metadata->prot_domain_category = string(domain_category, domain_category_index);
                 metadata->hash = string(hash, hash_index);
@@ -552,7 +579,8 @@
     // go through the certidicates and find the right one
     for (int i=0; i<no_certs; i++)
     {
-        if (cert_id.compare(iCertsMetadata[i]->hash) == 0)
+        if (cert_id.compare(iCertsMetadata[i]->hash) == 0 || 
+            iCertsMetadata[i]->pkey.find(cert_id) == 0)
         {
             switch (state)
             {
@@ -784,7 +812,8 @@
     bool found = false;
     for (int i=0; i<no_certs; i++)
     {
-        if (iCertsMetadata[i]->hash.compare(metadata->hash) == 0)
+        if (iCertsMetadata[i]->hash.compare(metadata->hash) == 0 
+            && iCertsMetadata[i]->pkey.find(metadata->pkey) == 0)
         {
             if (overwrite)
             {
--- a/javamanager/javacaptain/systemams/build/systemams.mmp	Fri Sep 17 08:28:21 2010 +0300
+++ b/javamanager/javacaptain/systemams/build/systemams.mmp	Mon Oct 04 00:10:53 2010 +0300
@@ -21,9 +21,6 @@
 #include <../../../../inc/project_defines.hrh>
 #include <../../../../inc/java_stdcpp_support_for_exe.hrh>
 
-epocheapsize 0x00001000 0x02000000
-epocstacksize 16384
-
 target          SystemAMS.exe
 TARGETTYPE EXE
 
--- a/javamanager/javainstaller/installer/build/javainstaller.pro	Fri Sep 17 08:28:21 2010 +0300
+++ b/javamanager/javainstaller/installer/build/javainstaller.pro	Mon Oct 04 00:10:53 2010 +0300
@@ -65,6 +65,7 @@
     contains(PROJECT_DEFINES,RD_JAVA_S60_RELEASE_10_1_ONWARDS) {
         CONFIG += hb
         LIBS += -lsifnotification -lxqservice
+        TRANSLATIONS = javaapplicationinstaller.ts
     }
 
     MMP_RULES += \
--- a/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/jsrpluginnotifier/JsrPluginNotifierBase.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javamanager/javainstaller/installer/javasrc/com/nokia/mj/impl/installer/jsrpluginnotifier/JsrPluginNotifierBase.java	Mon Oct 04 00:10:53 2010 +0300
@@ -82,25 +82,31 @@
     public void notifyInstallation(InstallerExtensionInfo aInfo)
     {
         Log.log("JsrPluginNotifierBase.NotifyInstallation called");
-
-        // Are there any plugins to be notified
-        if (iJsrPlugins.size() > 0)
+        boolean continueInstallation = true;
+        InstallerExtension plugin = null;
+        for (int i = 0; i < iJsrPlugins.size(); i++)
         {
-            boolean continueInstallation = true;
-            Iterator iter = iJsrPlugins.iterator();
-            InstallerExtension plugin;
-            while (iter.hasNext())
+            try
+            {
+                plugin = (InstallerExtension)iJsrPlugins.elementAt(i);
+                Log.log("Jsr plugin install " + plugin.getClass().getName());
+                continueInstallation = plugin.install(aInfo);
+            }
+            catch (Throwable t)
             {
-                plugin = (InstallerExtension)iter.next();
-                continueInstallation = plugin.install(aInfo);
-
-                // Check whether JSR plugin cancels installation
-                if (!continueInstallation)
-                {
-                    InstallerException.internalError(
-                        "Jsr plugin " + plugin.getClass().getName() +
-                        " cancelled installation.");
-                }
+                Log.logError("Installer Jsr plugin " +
+                             plugin.getClass().getName() +
+                             " install exception " + t, t);
+                continueInstallation = false;
+            }
+            // Check if JSR plugin cancelled installation.
+            if (!continueInstallation)
+            {
+                // Rollback those plugins which already got notified.
+                notifyRollbackInstall(aInfo, i);
+                InstallerException.internalError(
+                    "Jsr plugin " + plugin.getClass().getName() +
+                    " cancelled installation.");
             }
         }
     }
@@ -116,25 +122,31 @@
     public void notifyUninstallation(InstallerExtensionInfo aInfo)
     {
         Log.log("JsrPluginNotifierBase.notifyUninstallation called");
-
-        // Are there any plugins to be notified
-        if (iJsrPlugins.size() > 0)
+        boolean continueUninstallation = true;
+        InstallerExtension plugin = null;
+        for (int i = 0; i < iJsrPlugins.size(); i++)
         {
-            boolean continueUninstallation = true;
-            Iterator iter = iJsrPlugins.iterator();
-            InstallerExtension plugin;
-            while (iter.hasNext())
+            try
+            {
+                plugin = (InstallerExtension)iJsrPlugins.elementAt(i);
+                Log.log("Jsr plugin uninstall " + plugin.getClass().getName());
+                continueUninstallation = plugin.uninstall(aInfo);
+            }
+            catch (Throwable t)
             {
-                plugin = (InstallerExtension)iter.next();
-                continueUninstallation = plugin.uninstall(aInfo);
-
-                // Check whether JSR plugin cancels uninstallation
-                if (!continueUninstallation)
-                {
-                    InstallerException.internalError(
-                        "Jsr plugin " + plugin.getClass().getName() +
-                        " cancelled uninstallation.");
-                }
+                Log.logError("Installer Jsr plugin " +
+                             plugin.getClass().getName() +
+                             " uninstall exception " + t, t);
+                continueUninstallation = false;
+            }
+            // Check if JSR plugin cancelled uninstallation.
+            if (!continueUninstallation)
+            {
+                // Rollback those plugins which already got notified.
+                notifyRollbackUninstall(aInfo, i);
+                InstallerException.internalError(
+                    "Jsr plugin " + plugin.getClass().getName() +
+                    " cancelled uninstallation.");
             }
         }
     }
@@ -150,18 +162,7 @@
     public void notifyRollbackInstall(InstallerExtensionInfo aInfo)
     {
         Log.log("JsrPluginNotifierBase.notifyRollbackInstall called");
-
-        // Are there any plugins to be notified
-        if (iJsrPlugins.size() > 0)
-        {
-            Iterator iter = iJsrPlugins.iterator();
-            InstallerExtension plugin;
-            while (iter.hasNext())
-            {
-                plugin = (InstallerExtension)iter.next();
-                plugin.rollbackInstall(aInfo);
-            }
-        }
+        notifyRollbackInstall(aInfo, iJsrPlugins.size());
     }
 
     /**
@@ -175,18 +176,7 @@
     public void notifyRollbackUninstall(InstallerExtensionInfo aInfo)
     {
         Log.log("JsrPluginNotifierBase.notifyRollbackUninstall called");
-
-        // Are there any plugins to be notified
-        if (iJsrPlugins.size() > 0)
-        {
-            Iterator iter = iJsrPlugins.iterator();
-            InstallerExtension plugin;
-            while (iter.hasNext())
-            {
-                plugin = (InstallerExtension)iter.next();
-                plugin.rollbackUninstall(aInfo);
-            }
-        }
+        notifyRollbackUninstall(aInfo, iJsrPlugins.size());
     }
 
     /**
@@ -240,19 +230,19 @@
             }
             catch (ClassNotFoundException e2)
             {
-                Log.logError("Jsr plugin class" + className + " is not found.");
+                Log.logError("Installer Jsr plugin class" + className + " not found.");
             }
             catch (InstantiationException e3)
             {
-                Log.logError("Cannot instantiate Jsr plugin " + className);
+                Log.logError("Installer cannot instantiate Jsr plugin " + className);
             }
             catch (IllegalAccessException e4)
             {
-                Log.logError("Cannot access Jsr plugin " + className);
+                Log.logError("Installer cannot access Jsr plugin " + className);
             }
             catch (ClassCastException e5)
             {
-                Log.logError("Jsr plugin " + className +
+                Log.logError("Installer Jsr plugin " + className +
                              " does not implement interface InstallerExtension.");
             }
         }
@@ -300,7 +290,7 @@
         }
         catch (IOException e)
         {
-            Log.logError("JsrPluginNotifier cannot read plugin " +
+            Log.logError("Installer JsrPluginNotifier cannot read plugin " +
                          "config file " + aFileName, e);
             return;
         }
@@ -316,11 +306,70 @@
                 catch (IOException ioe)
                 {
                     Log.logError(
-                        "JsrPluginNotifier: exception while closing reader",
+                        "Installer JsrPluginNotifier: exception while closing reader",
                         ioe);
                 }
             }
         }
     }
 
+    /**
+     * Notifies Jsr plugins in iJsrPlugins vector that the installation of
+     * a MIDlet suite has been cancelled by calling the rollbackInstall()
+     * method of the plugins.
+     *
+     * @param aInfo notification information object
+     * @param aCount number of plugins to notify
+     * @see InstallerExtension#rollbackInstall
+     */
+    private void notifyRollbackInstall(InstallerExtensionInfo aInfo, int aCount)
+    {
+        InstallerExtension plugin = null;
+        for (int i = aCount - 1; i >= 0; i--)
+        {
+            try
+            {
+                plugin = (InstallerExtension)iJsrPlugins.elementAt(i);
+                Log.log("Jsr plugin rollbackInstall " +
+                        plugin.getClass().getName());
+                plugin.rollbackInstall(aInfo);
+            }
+            catch (Throwable t)
+            {
+                Log.logError("Installer Jsr plugin " +
+                             plugin.getClass().getName() +
+                             " rollbackInstall exception " + t, t);
+            }
+        }
+    }
+
+    /**
+     * Notifies Jsr plugins in iJsrPlugins vector that the uninstallation of
+     * a MIDlet suite has been cancelled by calling the rollbackUninstall()
+     * method of the plugins.
+     *
+     * @param aInfo notification information object
+     * @param aCount number of plugins to notify
+     * @see InstallerExtension#rollbackUninstall
+     */
+    private void notifyRollbackUninstall(InstallerExtensionInfo aInfo, int aCount)
+    {
+        InstallerExtension plugin = null;
+        for (int i = aCount - 1; i >= 0; i--)
+        {
+            try
+            {
+                plugin = (InstallerExtension)iJsrPlugins.elementAt(i);
+                Log.log("Jsr plugin rollbackUninstall " +
+                        plugin.getClass().getName());
+                plugin.rollbackUninstall(aInfo);
+            }
+            catch (Throwable t)
+            {
+                Log.logError("Installer Jsr plugin " +
+                             plugin.getClass().getName() +
+                             " rollbackUninstall exception " + t, t);
+            }
+        }
+    }
 }
--- a/javamanager/javainstaller/installer/src.s60/applicationregistrator/sifregistrator.cpp	Fri Sep 17 08:28:21 2010 +0300
+++ b/javamanager/javainstaller/installer/src.s60/applicationregistrator/sifregistrator.cpp	Mon Oct 04 00:10:53 2010 +0300
@@ -583,8 +583,8 @@
         CCaptionAndIconInfo *tmpCaptionAndIconInfo =
             CCaptionAndIconInfo::NewLC(
                 /*aCaption=*/ *tmpCaption,
-                /*aIconFileName=*/ KNullDesC,
-                /*aNumOfAppIcons=*/ 0);
+                /*aIconFileName=*/ (NULL != aIconFilename? *iconFilename: KNullDesC()),
+                /*aNumOfAppIcons=*/ numberOfAppIcons);
         CLocalizableAppInfo *tmpLocAppInfo =
             CLocalizableAppInfo::NewLC(
                 /*aShortCaption=*/ KNullDesC,
@@ -701,12 +701,16 @@
         HBufC *value = CreateHBufCFromJavaStringLC(aEnv, aValue);
         if (KUnspecifiedLocale == aLanguage)
         {
+            __UHEAP_MARK;
             aScr->SetComponentPropertyL(aComponentId, *name, *value);
+            __UHEAP_MARKEND;
         }
         else
         {
+            __UHEAP_MARK;
             aScr->SetComponentPropertyL(
                 aComponentId, *name, *value, (TLanguage)aLanguage);
+            __UHEAP_MARKEND;
         }
         CleanupStack::PopAndDestroy(value);
         CleanupStack::PopAndDestroy(name);
--- a/javamanager/javainstaller/installer/tsrc/javasrc/com/nokia/mj/impl/installer/jsrpluginnotifier/JsrPluginNotifierTest.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javamanager/javainstaller/installer/tsrc/javasrc/com/nokia/mj/impl/installer/jsrpluginnotifier/JsrPluginNotifierTest.java	Mon Oct 04 00:10:53 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -72,6 +72,14 @@
             }
         }));
 
+        suite.addTest(new JsrPluginNotifierTest("testNotifyPluginInstallException", new TestMethod()
+        {
+            public void run(TestCase tc)
+            {
+                ((JsrPluginNotifierTest)tc).testNotifyPluginInstallException();
+            }
+        }));
+
         suite.addTest(new JsrPluginNotifierTest("testNotifyPluginsUninstall", new TestMethod()
         {
             public void run(TestCase tc)
@@ -80,6 +88,14 @@
             }
         }));
 
+        suite.addTest(new JsrPluginNotifierTest("testNotifyPluginUninstallException", new TestMethod()
+        {
+            public void run(TestCase tc)
+            {
+                ((JsrPluginNotifierTest)tc).testNotifyPluginUninstallException();
+            }
+        }));
+
         suite.addTest(new JsrPluginNotifierTest("testPluginCancelsUninstallation", new TestMethod()
         {
             public void run(TestCase tc)
@@ -104,6 +120,14 @@
             }
         }));
 
+        suite.addTest(new JsrPluginNotifierTest("testRollbackInstallNotificationException", new TestMethod()
+        {
+            public void run(TestCase tc)
+            {
+                ((JsrPluginNotifierTest)tc).testRollbackInstallNotificationException();
+            }
+        }));
+
         suite.addTest(new JsrPluginNotifierTest("testRollbackUninstallNotification", new TestMethod()
         {
             public void run(TestCase tc)
@@ -112,6 +136,14 @@
             }
         }));
 
+        suite.addTest(new JsrPluginNotifierTest("testRollbackUninstallNotificationException", new TestMethod()
+        {
+            public void run(TestCase tc)
+            {
+                ((JsrPluginNotifierTest)tc).testRollbackUninstallNotificationException();
+            }
+        }));
+
         com.nokia.mj.impl.utils.OmjTestRunner.run(suite);
     }
 
@@ -222,6 +254,39 @@
         assertTrue("TestPlugin2 correct method was not called", plugin2.equals("install"));
     }
 
+    public void testNotifyPluginInstallException()
+    {
+        JsrPluginNotifier notif = new JsrPluginNotifier(iIntegrityService);
+
+        assertTrue("Number of plugin class names was not 5, it is " +
+                   String.valueOf(notif.iClassNames.size()), (notif.iClassNames.size() == 5));
+        assertTrue("Number of initialized plugins was not 2, it is " +
+                   String.valueOf(notif.iJsrPlugins.size()), (notif.iJsrPlugins.size() == 2));
+
+        // Initialize necessary values in ball for notification call
+        Uid uid = Uid.createUid("[A0032000]");
+        iInstallerExtensionInfo.iUid = uid;
+        iInstallerExtensionInfo.iAttributes = new Hashtable();
+        Attribute att = new Attribute("MIDlet-1", "3DSpaceShooter, /icon.png, Space3D");
+        iInstallerExtensionInfo.iAttributes.put("MIDlet-1", att);
+        att = new Attribute("JSR-Plugin-Test-Exception", "true");
+        iInstallerExtensionInfo.iAttributes.put("JSR-Plugin-Test-Exception", att);
+        att = new Attribute("MIDlet-Jar-Size", "240229");
+        iInstallerExtensionInfo.iAttributes.put("MIDlet-Jar-Size", att);
+
+        try
+        {
+            notif.notifyInstallation(iInstallerExtensionInfo);
+            // Test plugin TestPlugin2 throws exception if JAD/JAR attribute
+            // JSR-Plugin-Test-Exception exists.
+            assertTrue("Test plugin did not throw exception like should have.", false);
+        }
+        catch (InstallerException e)
+        {
+            // OK, installation is cancelled ok
+        }
+    }
+
     public void testNoPluginsToNotify()
     {
         JsrPluginNotifier notif = new JsrPluginNotifier(iIntegrityService);
@@ -282,6 +347,34 @@
         assertTrue("TestPlugin2 correct method was not called", plugin2.equals("uninstall"));
     }
 
+    public void testNotifyPluginUninstallException()
+    {
+        JsrPluginNotifier notif = new JsrPluginNotifier(iIntegrityService);
+
+        // Initialize necessary values in ball for notification call
+        Uid uid = Uid.createUid("[A0032003]");
+        iInstallerExtensionInfo.iUid = uid;
+        iInstallerExtensionInfo.iAttributes = new Hashtable();
+        Attribute att = new Attribute("MIDlet-1", "3DSpaceShooter, /icon.png, Space3D");
+        iInstallerExtensionInfo.iAttributes.put("MIDlet-1", att);
+        att = new Attribute("JSR-Plugin-Test-Exception", "true");
+        iInstallerExtensionInfo.iAttributes.put("JSR-Plugin-Test-Exception", att);
+        att = new Attribute("MIDlet-Jar-Size", "240229");
+        iInstallerExtensionInfo.iAttributes.put("MIDlet-Jar-Size", att);
+
+        try
+        {
+            notif.notifyUninstallation(iInstallerExtensionInfo);
+            // Test plugin TestPlugin2 throws exception if JAD/JAR attribute
+            // JSR-Plugin-Test-Exception exists.
+            assertTrue("Test plugin did not throw exception like it should have.", false);
+        }
+        catch (InstallerException e)
+        {
+            // OK, uninstallation is cancelled ok
+        }
+    }
+
     public void testPluginCancelsUninstallation()
     {
         JsrPluginNotifier notif = new JsrPluginNotifier(iIntegrityService);
@@ -332,6 +425,30 @@
         assertTrue("TestPlugin2 correct method was not called", plugin2.equals("rollbackInstall"));
     }
 
+    public void testRollbackInstallNotificationException()
+    {
+        JsrPluginNotifier notif = new JsrPluginNotifier(iIntegrityService);
+
+        // Initialize necessary values in ball for notification call
+        Uid uid = Uid.createUid("[A0032001]");
+        iInstallerExtensionInfo.iUid = uid;
+        iInstallerExtensionInfo.iAttributes = new Hashtable();
+        Attribute att = new Attribute("MIDlet-1", "3DSpaceShooter, /icon.png, Space3D");
+        iInstallerExtensionInfo.iAttributes.put("MIDlet-1", att);
+        att = new Attribute("Nokia-MIDlet-On-Screen-Keypad", "navigationkeys");
+        iInstallerExtensionInfo.iAttributes.put("Nokia-MIDlet-On-Screen-Keypad", att);
+        att = new Attribute("JSR-Plugin-Test-Exception", "true");
+        iInstallerExtensionInfo.iAttributes.put("JSR-Plugin-Test-Exception", att);
+        att = new Attribute("MIDlet-Jar-Size", "240229");
+        iInstallerExtensionInfo.iAttributes.put("MIDlet-Jar-Size", att);
+
+        notif.notifyRollbackInstall(iInstallerExtensionInfo);
+
+        String plugin2 = System.getProperty("TestPlugin2");
+        assertTrue("TestPlugin2 was not called", plugin2 != null);
+        assertTrue("TestPlugin2 correct method was not called", plugin2.equals("rollbackInstall"));
+    }
+
     public void testRollbackUninstallNotification()
     {
         JsrPluginNotifier notif = new JsrPluginNotifier(iIntegrityService);
@@ -354,5 +471,27 @@
         assertTrue("TestPlugin2 correct method was not called. Method was " + plugin2, plugin2.equals("rollbackUninstall"));
     }
 
+    public void testRollbackUninstallNotificationException()
+    {
+        JsrPluginNotifier notif = new JsrPluginNotifier(iIntegrityService);
 
+        // Initialize necessary values in ball for notification call
+        Uid uid = Uid.createUid("[A0032002]");
+        iInstallerExtensionInfo.iUid = uid;
+        iInstallerExtensionInfo.iAttributes = new Hashtable();
+        Attribute att = new Attribute("MIDlet-1", "3DSpaceShooter, /icon.png, Space3D");
+        iInstallerExtensionInfo.iAttributes.put("MIDlet-1", att);
+        att = new Attribute("Nokia-MIDlet-On-Screen-Keypad", "navigationkeys");
+        iInstallerExtensionInfo.iAttributes.put("Nokia-MIDlet-On-Screen-Keypad", att);
+        att = new Attribute("JSR-Plugin-Test-Exception", "true");
+        iInstallerExtensionInfo.iAttributes.put("JSR-Plugin-Test-Exception", att);
+        att = new Attribute("MIDlet-Jar-Size", "240229");
+        iInstallerExtensionInfo.iAttributes.put("MIDlet-Jar-Size", att);
+
+        notif.notifyRollbackUninstall(iInstallerExtensionInfo);
+
+        String plugin2 = System.getProperty("TestPlugin2");
+        assertTrue("TestPlugin2 was not called", plugin2 != null);
+        assertTrue("TestPlugin2 correct method was not called. Method was " + plugin2, plugin2.equals("rollbackUninstall"));
+    }
 }
--- a/javamanager/javainstaller/installer/tsrc/javasrc/com/nokia/mj/impl/installer/jsrpluginnotifier/TestPlugin2.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javamanager/javainstaller/installer/tsrc/javasrc/com/nokia/mj/impl/installer/jsrpluginnotifier/TestPlugin2.java	Mon Oct 04 00:10:53 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -47,6 +47,14 @@
             return false;
         }
 
+        // If the MIDlet to be installed has JAD/JAR attribute
+        // "JSR-Plugin-Test-Exception" with any value, throw Exception
+        if ((aInstallerExtensionInfo.iAttributes != null) &&
+                (aInstallerExtensionInfo.iAttributes.get("JSR-Plugin-Test-Exception") != null))
+        {
+            throw new RuntimeException("TestPlugin2.install Exception");
+        }
+
         return true;
     }
 
@@ -64,7 +72,7 @@
         // tell that this plugin has been called
         System.setProperty("TestPlugin2", "uninstall");
 
-        // If the MIDlet to be installed has JAD/JAR attribute
+        // If the MIDlet to be uninstalled has JAD/JAR attribute
         // "JSR-Plugin-Test-Cancel" with any value, cancel install
         if ((aInstallerExtensionInfo.iAttributes != null) &&
                 (aInstallerExtensionInfo.iAttributes.get("JSR-Plugin-Test-Cancel") != null))
@@ -72,6 +80,14 @@
             return false;
         }
 
+        // If the MIDlet to be uninstalled has JAD/JAR attribute
+        // "JSR-Plugin-Test-Exception" with any value, throw Exception
+        if ((aInstallerExtensionInfo.iAttributes != null) &&
+                (aInstallerExtensionInfo.iAttributes.get("JSR-Plugin-Test-Exception") != null))
+        {
+            throw new RuntimeException("TestPlugin2.uninstall Exception");
+        }
+
         return true;
     }
 
@@ -88,6 +104,14 @@
 
         // tell that this plugin has been called
         System.setProperty("TestPlugin2", "rollbackInstall");
+
+        // If the MIDlet to be installed has JAD/JAR attribute
+        // "JSR-Plugin-Test-Exception" with any value, throw Exception
+        if ((aInstallerExtensionInfo.iAttributes != null) &&
+                (aInstallerExtensionInfo.iAttributes.get("JSR-Plugin-Test-Exception") != null))
+        {
+            throw new RuntimeException("TestPlugin2.rollbackInstall Exception");
+        }
     }
 
     /**
@@ -102,5 +126,13 @@
 
         // tell that this plugin has been called
         System.setProperty("TestPlugin2", "rollbackUninstall");
+
+        // If the MIDlet to be uninstalled has JAD/JAR attribute
+        // "JSR-Plugin-Test-Exception" with any value, throw Exception
+        if ((aInstallerExtensionInfo.iAttributes != null) &&
+                (aInstallerExtensionInfo.iAttributes.get("JSR-Plugin-Test-Exception") != null))
+        {
+            throw new RuntimeException("TestPlugin2.rollbackUninstall Exception");
+        }
     }
 }
--- a/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt/InstallerUiEswt.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt/InstallerUiEswt.java	Mon Oct 04 00:10:53 2010 +0300
@@ -1152,11 +1152,14 @@
         {
             long startTime = System.currentTimeMillis();
             
+            int maxWidth = DisplayExtension.getBestImageWidth(DisplayExtension.LIST_ELEMENT);
+            int maxHeight = DisplayExtension.getBestImageHeight(DisplayExtension.LIST_ELEMENT);
+            
+            aDisplay.setData("org.eclipse.swt.internal.image.loadSize", new Point(maxWidth, maxHeight));
             Image image = new Image(aDisplay, aInputStream);
+            
             if (aScaleImage)
             {
-                int maxWidth = DisplayExtension.getBestImageWidth(DisplayExtension.LIST_ELEMENT);
-                int maxHeight = DisplayExtension.getBestImageHeight(DisplayExtension.LIST_ELEMENT);
                 Rectangle rect = image.getBounds();
                 if (maxWidth != rect.width || maxHeight != rect.height)
                 {
--- a/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/CertificateDetailsView.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/CertificateDetailsView.java	Mon Oct 04 00:10:53 2010 +0300
@@ -48,7 +48,7 @@
         iCerts = aCerts;
         iCertIndex = aCertIndex;
         setTitle(aTitle);
-        setCommands(null, InstallerUiTexts.get(InstallerUiTexts.OK));
+        setCommands(null, InstallerUiTexts.get(InstallerUiTexts.CLOSE));
     }
 
     /**
--- a/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/ErrorView.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/ErrorView.java	Mon Oct 04 00:10:53 2010 +0300
@@ -42,7 +42,7 @@
     {
         super(aInstallerUi, aParent, 8);
         setTitle(InstallerUiTexts.get(InstallerUiTexts.INSTALL_FAILED));
-        setCommands(InstallerUiTexts.get(InstallerUiTexts.SHOW),
+        setCommands(InstallerUiTexts.get(InstallerUiTexts.DETAILS),
                     InstallerUiTexts.get(InstallerUiTexts.CLOSE));
     }
 
@@ -94,7 +94,7 @@
         {
             // After other widgets have been added, add content to
             // application info Composite.
-            addAppInfo(iInstallerUi.getInstallInfo(), true);
+            addAppInfo(iInstallerUi.getInstallInfo(), true, false);
         }
     }
 
--- a/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/InstallConfirmationView.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/InstallConfirmationView.java	Mon Oct 04 00:10:53 2010 +0300
@@ -162,7 +162,7 @@
 
         // After other widgets have been added, add content to
         // application info Composite.
-        addAppInfo(iInstallInfo, true);
+        addAppInfo(iInstallInfo, true, true);
     }
 
     /**
@@ -241,10 +241,6 @@
         case InstallInfo.DRIVE_TYPE_UNKNOWN:
             switch (prefix)
             {
-            case 0:
-                textId = InstallerUiTexts.DRIVE_TYPE_UNKNOWN;
-                textParams = new String[] { driveLetter };
-                break;
             case 1:
                 textId = InstallerUiTexts.DRIVE_TYPE_UNKNOWN_KB;
                 break;
@@ -259,10 +255,6 @@
         case InstallInfo.DRIVE_TYPE_PHONE_MEMORY:
             switch (prefix)
             {
-            case 0:
-                textId = InstallerUiTexts.DRIVE_TYPE_PHONE_MEMORY;
-                textParams = new String[] { driveLetter };
-                break;
             case 1:
                 textId = InstallerUiTexts.DRIVE_TYPE_PHONE_MEMORY_KB;
                 break;
@@ -277,10 +269,6 @@
         case InstallInfo.DRIVE_TYPE_MEMORY_CARD:
             switch (prefix)
             {
-            case 0:
-                textId = InstallerUiTexts.DRIVE_TYPE_MEMORY_CARD;
-                textParams = new String[] { driveLetter };
-                break;
             case 1:
                 textId = InstallerUiTexts.DRIVE_TYPE_MEMORY_CARD_KB;
                 break;
@@ -295,10 +283,6 @@
         case InstallInfo.DRIVE_TYPE_INTERNAL_MASS_STORAGE:
             switch (prefix)
             {
-            case 0:
-                textId = InstallerUiTexts.DRIVE_TYPE_INTERNAL_MASS_STORAGE;
-                textParams = new String[] { driveLetter };
-                break;
             case 1:
                 textId = InstallerUiTexts.DRIVE_TYPE_INTERNAL_MASS_STORAGE_KB;
                 break;
--- a/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/InstallerUiEswt.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/InstallerUiEswt.java	Mon Oct 04 00:10:53 2010 +0300
@@ -74,6 +74,7 @@
     private Shell iParent = null;
     private Shell iDialog = null;
     private ProgressView iProgressView = null;
+    private ProgressView iPreparingInstallationView = null;
     private ProgressView iDlProgressView = null;
     private ProgressView iOcspProgressView = null;
     private InstallConfirmationView iInstallConfirmationView = null;
@@ -110,7 +111,7 @@
     /** Hashtable for storing the loaded icons. */
     private static Hashtable iImageTable = null;
     /** Best size for application icon. */
-    private static Point iBestIconSize = null;
+    private static Point iBestImageSize = null;
 
     /** Default shell bounds. */
     private Rectangle iDefaultShellBounds = null;
@@ -173,7 +174,8 @@
             iDefaultShellClientBounds = iDialog.getClientArea();
             iBoldFont = getBoldFont();
             StartUpTrace.doTrace("InstallerUiEswt shell created");
-            iProgressView = new ProgressView(this, iDialog, getTitle());
+            iProgressView = new ProgressView(this, iDialog, getTitle(), false, true);
+            //createPreparingInstallationView();
 
             iParent.addControlListener(new CListener(this));
             log("InstallerUiEswt CListener added");
@@ -188,11 +190,11 @@
                 }
             });
 
-            // Initialize best icon size.
-            //iBestIconSize = new Point(
-            //    display.getBestImageWidth(DisplayExtension.ALERT),
-            //    display.getBestImageHeight(DisplayExtension.ALERT));
-            //log("Best icon size: " + iBestIconSize);
+            // Initialize best image size.
+            iBestImageSize = new Point(
+                DisplayExtension.getBestImageWidth(DisplayExtension.LIST_ELEMENT),
+                DisplayExtension.getBestImageHeight(DisplayExtension.LIST_ELEMENT));
+            log("Best image size: " + iBestImageSize);
 
             synchronized (iInitWaitObject)
             {
@@ -256,6 +258,12 @@
     public void cancelConfirmations()
     {
         super.cancelConfirmations();
+        if (iPreparingInstallationView != null &&
+            !iPreparingInstallationView.isDisposed())
+        {
+            iPreparingInstallationView.dispose();
+            iPreparingInstallationView = null;
+        }
         if (iCertificateDetailsView != null)
         {
             iCertificateDetailsView.confirmCancel();
@@ -317,6 +325,14 @@
             throw new RuntimeException("JavaInstallerUi not ready");
         }
 
+        if (iPreparingInstallationView != null &&
+            !iPreparingInstallationView.isDisposed())
+        {
+            iPreparingInstallationView.setVisible(false);
+            iPreparingInstallationView.dispose();
+            iPreparingInstallationView = null;
+        }
+
         boolean result = true;
         if (result)
         {
@@ -493,7 +509,7 @@
                     public void run()
                     {
                         iProgressView = new ProgressView(
-                            self, iDialog, getTitle());
+                            self, iDialog, getTitle(), false, true);
                     }
                 });
                 iProgressView.setVisible(true);
@@ -608,10 +624,9 @@
                     iDlProgressView = new ProgressView(
                         self, iDialog,
                         InstallerUiTexts.get(InstallerUiTexts.DOWNLOADING),
-                        indeterminate);
+                        indeterminate, true);
                 }
             });
-            iDlProgressView.addCancelCommand();
         }
 
         synchronized (iProgressSyncObject)
@@ -688,10 +703,9 @@
                         iOcspProgressView = new ProgressView(
                             self, iDialog,
                             InstallerUiTexts.get(InstallerUiTexts.OCSP_CHECK_PROGRESS),
-                            true);
+                            true, true);
                     }
                 });
-                iOcspProgressView.addCancelCommand();
             }
             if (iOcspProgressView != null)
             {
@@ -1208,24 +1222,25 @@
         try
         {
             long startTime = System.currentTimeMillis();
+            aDisplay.setData("org.eclipse.swt.internal.image.loadSize",
+                             iBestImageSize);
             Image image = new Image(aDisplay, aInputStream);
-            ImageData imageData = image.getImageData();
             if (aScaleImage)
             {
-                Point bestSize = getBestImageSize(
-                    imageData.width, imageData.height);
-                if (bestSize.x != imageData.width ||
-                        bestSize.y != imageData.height)
+                ImageData imageData = image.getImageData();
+                if (iBestImageSize.x != imageData.width ||
+                        iBestImageSize.y != imageData.height)
                 {
                     Point oldSize =
                         new Point(imageData.width, imageData.height);
-                    imageData = imageData.scaledTo(bestSize.x, bestSize.y);
+                    imageData = imageData.scaledTo(iBestImageSize.x, iBestImageSize.y);
                     log("Image " + aImageName + " scaled from " +
                         oldSize.x + "x" + oldSize.y + " to " +
-                        bestSize.x + "x" + bestSize.y);
+                        iBestImageSize.x + "x" + iBestImageSize.y);
+                    image = new Image(aDisplay, imageData);
                 }
             }
-            result = new Image(aDisplay, imageData);
+            result = image;
             long endTime = System.currentTimeMillis();
             log("Loaded image " + aImageName + " (load time " +
                 (endTime - startTime) + " ms)");
@@ -1239,30 +1254,6 @@
         return result;
     }
 
-    /**
-     * Determines the best image size for the image of given size.
-     */
-    private static Point getBestImageSize(int aWidth, int aHeight)
-    {
-        final int MAX_WIDTH = (iBestIconSize == null? 50: iBestIconSize.x);
-        final int MAX_HEIGHT = (iBestIconSize == null? 50: iBestIconSize.y);
-        Point result = new Point(aWidth, aHeight);
-        if (result.x > MAX_WIDTH || result.y > MAX_HEIGHT)
-        {
-            if (result.x >= MAX_WIDTH)
-            {
-                result.x = MAX_WIDTH;
-                result.y = MAX_WIDTH * aHeight / aWidth;
-            }
-            if (result.y >= MAX_HEIGHT)
-            {
-                result.x = MAX_HEIGHT * aWidth / aHeight;
-                result.y = MAX_HEIGHT;
-            }
-        }
-        return result;
-    }
-
     /** Returns true if UI has been created and can be used. */
     protected boolean isUiReady()
     {
@@ -1332,6 +1323,26 @@
         }
     }
 
+    /**
+     * Creates preparing installation view.
+     */
+    private void createPreparingInstallationView()
+    {
+        if (iPreparingInstallationView == null)
+        {
+            final InstallerUiEswt self = this;
+            iParent.getDisplay().syncExec(new Runnable()
+            {
+                public void run()
+                {
+                    iPreparingInstallationView = new ProgressView(
+                        self, iDialog, "Preparing installation", true, false);
+                    iPreparingInstallationView.setVisible(true);
+                }
+            });
+        }
+    }
+
     Rectangle getDefaultShellBounds()
     {
         return iDefaultShellBounds;
--- a/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/InstallerUiTexts.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/InstallerUiTexts.java	Mon Oct 04 00:10:53 2010 +0300
@@ -32,13 +32,13 @@
     // Define constants for localised text ids.
     public static final String OK = "button_ok";
     public static final String CANCEL = "button_cancel";
-    public static final String BACK = "button_back_ok";
     public static final String HIDE = "button_hide";
     public static final String SHOW = "button_show";
+    public static final String DETAILS = "button_details";
     public static final String CLOSE = "button_close";
     public static final String INSTALL_QUERY = "title_install";
     public static final String UPDATE_QUERY = "title_update_query";
-    public static final String OCSP_CHECK_PROGRESS = "ocsp_check_progress";
+    public static final String OCSP_CHECK_PROGRESS = "title_ocsp_check_progress";
     public static final String INSTALLING = "title_installing";
     public static final String INSTALL_FAILED = "title_inst_failed";
     public static final String INSTALLATION_COMPLETE = "title_installation_complete";
@@ -48,6 +48,7 @@
     public static final String USERNAME = "dialog_username";
     public static final String PASSWORD = "dialog_password";
     public static final String SUITE_NAME_VERSION = "info_app_suite_name_version";
+    public static final String SUITE_NAME_VERSION_UPDATE = "info_update_query";
     public static final String SUITE_VENDOR = "info_vendor";
     public static final String APP_NAME = "info_app_name";
     public static final String SIZE_KB = "info_size_kb";
@@ -70,19 +71,15 @@
     public static final String SERIAL_NUMBER = "setlabel_serial_number";
     public static final String FINGERPRINT = "setlabel_fingerprint";
     // Texts for installation drive selection.
-    public static final String DRIVE_TYPE_UNKNOWN = "list_unknown";
     public static final String DRIVE_TYPE_UNKNOWN_KB = "list_unknown_kb";
     public static final String DRIVE_TYPE_UNKNOWN_MB = "list_unknown_mb";
     public static final String DRIVE_TYPE_UNKNOWN_GB = "list_unknown_gb";
-    public static final String DRIVE_TYPE_PHONE_MEMORY = "list_phone_mem";
     public static final String DRIVE_TYPE_PHONE_MEMORY_KB = "list_phone_mem_kb";
     public static final String DRIVE_TYPE_PHONE_MEMORY_MB = "list_phone_mem_mb";
     public static final String DRIVE_TYPE_PHONE_MEMORY_GB = "list_phone_mem_gb";
-    public static final String DRIVE_TYPE_MEMORY_CARD = "list_mem_card";
     public static final String DRIVE_TYPE_MEMORY_CARD_KB = "list_mem_card_kb";
     public static final String DRIVE_TYPE_MEMORY_CARD_MB = "list_mem_card_mb";
     public static final String DRIVE_TYPE_MEMORY_CARD_GB = "list_mem_card_gb";
-    public static final String DRIVE_TYPE_INTERNAL_MASS_STORAGE = "list_mass_mem";
     public static final String DRIVE_TYPE_INTERNAL_MASS_STORAGE_KB = "list_mass_mem_kb";
     public static final String DRIVE_TYPE_INTERNAL_MASS_STORAGE_MB = "list_mass_mem_mb";
     public static final String DRIVE_TYPE_INTERNAL_MASS_STORAGE_GB = "list_mass_mem_gb";
--- a/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/LaunchAppQueryView.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/LaunchAppQueryView.java	Mon Oct 04 00:10:53 2010 +0300
@@ -64,7 +64,7 @@
         addHeader(InstallerUiTexts.get(InstallerUiTexts.INSTALLATION_COMPLETE),
                   iInstallerUi.getInstallInfo(), null);
         // Add content to the application info Composite.
-        addAppInfo(iInstallerUi.getInstallInfo(), true);
+        addAppInfo(iInstallerUi.getInstallInfo(), true, false);
     }
 
     /**
--- a/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/PermissionConfirmationView.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/PermissionConfirmationView.java	Mon Oct 04 00:10:53 2010 +0300
@@ -227,7 +227,7 @@
 
         // After other widgets have been added, add content to
         // application info Composite.
-        addAppInfo(iInstallInfo, false);
+        addAppInfo(iInstallInfo, false, false);
     }
 
     /**
--- a/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/PermissionDetailsView.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/PermissionDetailsView.java	Mon Oct 04 00:10:53 2010 +0300
@@ -46,7 +46,7 @@
         super(aInstallerUi, aParent, 1, true);
         iPermissionInfo = aPermissionInfo;
         setTitle(aTitle);
-        setCommands(null, InstallerUiTexts.get(InstallerUiTexts.OK));
+        setCommands(null, InstallerUiTexts.get(InstallerUiTexts.CLOSE));
     }
 
     /**
--- a/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/ProgressView.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/ProgressView.java	Mon Oct 04 00:10:53 2010 +0300
@@ -66,12 +66,12 @@
     /** Constructor */
     protected ProgressView(InstallerUiEswt aInstallerUi, Composite aParent, String aMsg)
     {
-        this(aInstallerUi, aParent, aMsg, false);
+        this(aInstallerUi, aParent, aMsg, false, true);
     }
 
     /** Constructor */
     protected ProgressView(InstallerUiEswt aInstallerUi, Composite aParent, String aMsg,
-                           boolean aIndeterminate)
+                           boolean aIndeterminate, boolean aHideCommand)
     {
         super(aInstallerUi, aParent, 8);
         iMsg = aMsg;
@@ -112,11 +112,11 @@
         // application info Composite.
         if (iInstallerUi != null)
         {
-            addAppInfo(iInstallerUi.getInstallInfo(), false);
+            addAppInfo(iInstallerUi.getInstallInfo(), false, false);
         }
 
         // By default add cancel command to all progress bars.
-        addCancelCommand();
+        addCancelCommand(aHideCommand);
 
         iInstallerUi.loadCss();
     }
@@ -159,9 +159,11 @@
     }
 
     /**
-     * Adds a cancel command for this progress view.
+     * Adds Cancel command for this progress view.
+     *
+     * @param aHideCommand if true, also Hide command is added.
      */
-    protected void addCancelCommand()
+    protected void addCancelCommand(final boolean aHideCommand)
     {
         if (iCancelCommand != null || isDisposed())
         {
@@ -173,32 +175,43 @@
         {
             public void run()
             {
+                GridData gridData = null;
                 // Set horizontalSpan to 2 for one button,
                 // and to 1 for two buttons.
-                int horizontalSpan = 1;
-                GridData gridData = null;
-                iHideCommand = new Button(getCommandComposite(), SWT.PUSH);
-                setCssId(iHideCommand, "softKeyButton");
-                gridData = new GridData(GridData.FILL_HORIZONTAL);
-                gridData.horizontalSpan = horizontalSpan;
-                iHideCommand.setLayoutData(gridData);
-                iHideCommand.setText(InstallerUiTexts.get(InstallerUiTexts.HIDE));
-                iHideCommand.addSelectionListener(new SelectionListener()
+                int horizontalSpan = 2;
+                if (aHideCommand)
                 {
-                    public void widgetDefaultSelected(SelectionEvent aEvent)
+                    horizontalSpan = 1;
+                    iHideCommand = new Button(getCommandComposite(), SWT.PUSH);
+                    setCssId(iHideCommand, "softKeyButton");
+                    gridData = new GridData(GridData.FILL_HORIZONTAL);
+                    gridData.horizontalSpan = horizontalSpan;
+                    iHideCommand.setLayoutData(gridData);
+                    iHideCommand.setText(
+                        InstallerUiTexts.get(InstallerUiTexts.HIDE));
+                    iHideCommand.addSelectionListener(new SelectionListener()
                     {
-                        widgetSelected(aEvent);
-                    }
-                    public void widgetSelected(SelectionEvent aEvent)
-                    {
-                        confirmHide();
-                    }
-                });
-                addSoftKeyListenerFor(iHideCommand);
+                        public void widgetDefaultSelected(SelectionEvent aEvent)
+                        {
+                            widgetSelected(aEvent);
+                        }
+                        public void widgetSelected(SelectionEvent aEvent)
+                        {
+                            confirmHide();
+                        }
+                    });
+                    addSoftKeyListenerFor(iHideCommand);
+                }
 
                 iCancelCommand = new Button(getCommandComposite(), SWT.PUSH);
-                setCssId(iCancelCommand, "softKeyButton");
-                //setCssId(iCancelCommand, "softKeyButtonWide");
+                if (aHideCommand)
+                {
+                    setCssId(iCancelCommand, "softKeyButton");
+                }
+                else
+                {
+                    setCssId(iCancelCommand, "softKeyButtonWide");
+                }
                 gridData = new GridData(GridData.FILL_HORIZONTAL);
                 gridData.horizontalSpan = horizontalSpan;
                 iCancelCommand.setLayoutData(gridData);
--- a/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/RuntimeConfirmationView.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/RuntimeConfirmationView.java	Mon Oct 04 00:10:53 2010 +0300
@@ -128,7 +128,7 @@
 
         // After other widgets have been added, add content to
         // application info Composite.
-        addAppInfo(iInstallerUi.getInstallInfo(), false);
+        addAppInfo(iInstallerUi.getInstallInfo(), false, false);
     }
 
     /**
--- a/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/ViewBase.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/ViewBase.java	Mon Oct 04 00:10:53 2010 +0300
@@ -538,7 +538,7 @@
     /**
      * Adds application information to the header.
      */
-    protected void addAppInfo(InstallInfo aInstallInfo, boolean aFull)
+    protected void addAppInfo(InstallInfo aInstallInfo, boolean aFullInfo, boolean aUpdateInfo)
     {
         if (aInstallInfo == null)
         {
@@ -547,12 +547,26 @@
         }
 
         // Add suite name and version.
-        createAppInfoLabel(
-            InstallerUiTexts.get(
-                InstallerUiTexts.SUITE_NAME_VERSION,
-                new String[] { aInstallInfo.getName(),
-                               aInstallInfo.getVersion() }));
-        if (aFull)
+        if (aUpdateInfo && aInstallInfo != null &&
+            aInstallInfo.getOldVersion() != null)
+        {
+            createAppInfoLabel(
+                InstallerUiTexts.get(
+                    InstallerUiTexts.SUITE_NAME_VERSION_UPDATE,
+                    new String[] { aInstallInfo.getName(),
+                                   aInstallInfo.getOldVersion(),
+                                   aInstallInfo.getVersion()}));
+        }
+        else
+        {
+            createAppInfoLabel(
+                InstallerUiTexts.get(
+                    InstallerUiTexts.SUITE_NAME_VERSION,
+                    new String[] { aInstallInfo.getName(),
+                                   aInstallInfo.getVersion() }));
+        }
+
+        if (aFullInfo)
         {
             // Add vendor.
             createAppInfoLabel(
@@ -587,7 +601,7 @@
                         new Object[] { new Integer((int)(1 + size/1024)) }));
             }
         }
-        if (aFull)
+        if (aFullInfo)
         {
             // Add application names.
             ApplicationInfo[] apps = aInstallInfo.getApplications();
--- a/javamanager/javasettings_qt/src/applicationsettingsview.h	Fri Sep 17 08:28:21 2010 +0300
+++ b/javamanager/javasettings_qt/src/applicationsettingsview.h	Mon Oct 04 00:10:53 2010 +0300
@@ -36,12 +36,12 @@
 
 public slots:
     /*
-     * Initializas the view with application specific info
+     * Initializes the view with application specific info
      *
      * @param aAppUid Identifier for the application
-     *
+     * @param aAppName Name for the application
      */
-    void initialize(const QString& aAppUid);
+    void initialize(const QString& aAppUid, const QString& aAppName = QString());
 
 };
 
--- a/javamanager/javasettings_qt/src/javaapplicationsettingsview.cpp	Fri Sep 17 08:28:21 2010 +0300
+++ b/javamanager/javasettings_qt/src/javaapplicationsettingsview.cpp	Mon Oct 04 00:10:53 2010 +0300
@@ -24,9 +24,9 @@
 {
 }
 
-void JavaApplicationSettingsView::initialize(const QString& aApplication)
+void JavaApplicationSettingsView::initialize(const QString& aApplication, const QString& aApplicationName)
 {
-    d_ptr = new JavaApplicationSettingsViewPrivate(aApplication);
+    d_ptr = new JavaApplicationSettingsViewPrivate(aApplication, aApplicationName);
     d_ptr->init(this);
 }
 
--- a/javamanager/javasettings_qt/src/javaapplicationsettingsview.h	Fri Sep 17 08:28:21 2010 +0300
+++ b/javamanager/javasettings_qt/src/javaapplicationsettingsview.h	Mon Oct 04 00:10:53 2010 +0300
@@ -43,7 +43,7 @@
     virtual ~JavaApplicationSettingsView();
 
 public slots:
-    void initialize(const QString&);
+    void initialize(const QString&, const QString& = QString());
 
 signals:
     void aboutToClose();
--- a/javamanager/javasettings_qt/src/javaapplicationsettingsview_p.cpp	Fri Sep 17 08:28:21 2010 +0300
+++ b/javamanager/javasettings_qt/src/javaapplicationsettingsview_p.cpp	Mon Oct 04 00:10:53 2010 +0300
@@ -50,7 +50,7 @@
 const wchar_t ON_SCREEN_KEYPAD_VALUE_GAMEACTIONS[] = L"1";
 const wchar_t ON_SCREEN_KEYPAD_VALUE_NAVIGATION[] = L"2";
 
-JavaApplicationSettingsViewPrivate::JavaApplicationSettingsViewPrivate(const QString& aJavaAppUid):
+JavaApplicationSettingsViewPrivate::JavaApplicationSettingsViewPrivate(const QString& aJavaAppUid, const QString& aJavaAppName):
         mMainForm(0), mModel(0), mGeneralSettingsGroup(0), mSecuritySettingsGroup(0), mNetConnSettingsUi(0), mAsyncToSyncCallEventLoop(0), mSecWarningAccepted(false), mDefaultConnId(0)
 {
     // init common values
@@ -64,7 +64,7 @@
         return;
     }
     ELOG1(EJavaSettings, "Initializing settings for suite %S", mSuiteUid.c_str());
-    
+
     // init access point settings ui
     mNetConnSettingsUi = new CmApplSettingsUi(this);
     mAsyncToSyncCallEventLoop = new QEventLoop();
@@ -74,7 +74,14 @@
 
     // init form
     mMainForm = new HbDataForm();
-    mMainForm->setHeading(QString::fromStdWString(readFromStorage(PACKAGE_NAME, L"", L"", APPLICATION_PACKAGE_TABLE)));
+    if (aJavaAppName.isEmpty())
+    {
+        mMainForm->setHeading(QString::fromStdWString(readFromStorage(PACKAGE_NAME, L"", L"", APPLICATION_PACKAGE_TABLE)));
+    }
+    else
+    {
+        mMainForm->setHeading(aJavaAppName);
+    }
     mModel = new HbDataFormModel();
 
     // init settings
--- a/javamanager/javasettings_qt/src/javaapplicationsettingsview_p.h	Fri Sep 17 08:28:21 2010 +0300
+++ b/javamanager/javasettings_qt/src/javaapplicationsettingsview_p.h	Mon Oct 04 00:10:53 2010 +0300
@@ -138,7 +138,7 @@
     Q_OBJECT
 
 public:
-    JavaApplicationSettingsViewPrivate(const QString& aJavaAppUid);
+    JavaApplicationSettingsViewPrivate(const QString& aJavaAppUid, const QString& aJavaAppName = QString());
     virtual ~JavaApplicationSettingsViewPrivate();
     void init(JavaApplicationSettingsView* aPublicView);
 
--- a/javaruntimes/midp/runtime/build/javamidpruntime.pro	Fri Sep 17 08:28:21 2010 +0300
+++ b/javaruntimes/midp/runtime/build/javamidpruntime.pro	Mon Oct 04 00:10:53 2010 +0300
@@ -24,7 +24,7 @@
 
 symbian {
     INCLUDEPATH += /epoc32/include/ecom     # Due to schemehandler.inl in S60 5.0 2009w18 and SPB 10.1
-    LIBS += -lecom -lflogger -lDrmRightsInfo -lcaf -lDrmHelper -lapgrfx -lapparc -ljavautils
+    LIBS += -lecom -lflogger -lDrmRightsInfo -lcaf -lDRMHelper -lapgrfx -lapparc -ljavautils
 }
 
 include(../../../../build/omj.pri)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javaruntimes/midp/runtime/javasrc/com/nokia/mj/impl/rt/midp/SchemeHandler.java	Mon Oct 04 00:10:53 2010 +0300
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+package com.nokia.mj.impl.rt.midp;
+
+import javax.microedition.io.ConnectionNotFoundException;
+
+/**
+ * JRT based platform request scheme handler interface.
+ */
+public interface SchemeHandler
+{
+
+    /*** ----------------------------- PUBLIC ------------------------------ */
+
+    /**
+     * Execute scheme.
+     *
+     * @param url to be invoked.
+     * @return  true if MIDlet must be closed prior content fetch.
+     * @throws ConnectionNotFoundException if URL execution fails.
+     */
+    public boolean execute(String url) throws ConnectionNotFoundException;
+}
+
--- a/javaruntimes/midp/runtime/javasrc/com/nokia/mj/impl/rt/midp/SchemeHandlerBase.java	Fri Sep 17 08:28:21 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-/*
-* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-
-package com.nokia.mj.impl.rt.midp;
-
-import javax.microedition.io.ConnectionNotFoundException;
-
-/**
- * Java based platform request scheme handler base class.
- */
-public abstract class SchemeHandlerBase
-{
-
-    /*** ----------------------------- PUBLIC ------------------------------ */
-
-    /**
-     * Execute scheme.
-     *
-     * @param url to be invoked.
-     * @return  true if MIDlet must be closed prior content fetch.
-     * @throws ConnectionNotFoundException if URL execution fails.
-     */
-    public abstract boolean execute(String url) throws ConnectionNotFoundException;
-}
-
--- a/javaruntimes/midp/runtime/javasrc/com/nokia/mj/impl/rt/midp/StorageAccessor.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javaruntimes/midp/runtime/javasrc/com/nokia/mj/impl/rt/midp/StorageAccessor.java	Mon Oct 04 00:10:53 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -196,20 +196,14 @@
                             // into an int.
                             midletN = Integer.parseInt(nameStr.substring(7));
                         }
-                        catch (NumberFormatException ne) 
+                        catch (NumberFormatException ne)
                         {
                         }
                     }
                 }
 
                 // Set the localized name of the MIDlet.
-                String localizedName = midletInfo.getAttribute("Nokia-MIDlet-Localized-" + midletN);
-                if (localizedName == null)
-                {
-                    localizedName = midletInfo.getName();
-                }
-
-                midletInfo.setLocalizedName(localizedName);
+                setLocalizedName(midletInfo, midletN);
             }
         }
         finally
@@ -223,4 +217,51 @@
             }
         }
     }
+
+    /**
+     * Sets localized name for the midlet basing on current
+     * microedition.locale system property value and midlet's
+     * JAD/Manifest attributes.
+     *
+     * @param midletInfo midlet info.
+     * @param midletIndex index of the midlet in the suite.
+     */
+    private static void setLocalizedName(MidletInfo midletInfo, int midletIndex)
+    {
+        // Values for locales are of form
+        // <language_code>[-<country_code>[-<variant>]]
+        // for example 'es-MX' or 'en-US-Iron'.
+        String currentLocale = System.getProperty("microedition.locale");
+        String localizedName = null;
+        if (currentLocale != null)
+        {
+            int idxMinus = -1;
+            do
+            {
+                localizedName = midletInfo.getAttribute(
+                    "Nokia-MIDlet-" + midletIndex + "-" + currentLocale);
+                if (localizedName != null)
+                {
+                    // Localized name found.
+                    break;
+                }
+                // Localized name not found, now strip the most specific part,
+                // for example <-variant>, from the locale and do this again
+                // until there are no more parts or MIDlet name has been
+                // localized.
+                idxMinus = currentLocale.lastIndexOf('-');
+                if (idxMinus != -1)
+                {
+                    currentLocale = currentLocale.substring(0, idxMinus);
+                }
+            }
+            while (localizedName == null && idxMinus != -1);
+        }
+
+        if (localizedName == null)
+        {
+            localizedName = midletInfo.getName();
+        }
+        midletInfo.setLocalizedName(localizedName);
+    }
 }
--- a/javaruntimes/midp/runtime/javasrc/com/nokia/mj/impl/rt/taskmanager/SchemeHandler.java	Fri Sep 17 08:28:21 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-/*
-* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: java://taskmanager scheme handler.
-*
-*/
-package com.nokia.mj.impl.rt.taskmanager;
-
-import javax.microedition.io.ConnectionNotFoundException;
-
-import com.nokia.mj.impl.coreui.CoreUi;
-import com.nokia.mj.impl.rt.midp.SchemeHandlerBase;
-
-/**
- * TaskManager platform request scheme handler. These are java: taskmanager?hide
- * java: taskmanager?show. Using hide URL query application is hided
- * from the TaskManager and brought visible using show query.
- */
-public class SchemeHandler extends SchemeHandlerBase
-{
-
-    /*** ----------------------------- PUBLIC ------------------------------ */
-
-    /**
-     * Execute scheme. If url contains query ?hide application is removed
-     * from the TaskManager and if it contains ?show application is shown on
-     * TaskManager.
-     *
-     * @return false. Since MIDlet needs never be closed before content fetch.
-     * @throws ConnectionNotFoundException if URL was invalid.
-     */
-    public boolean execute(String url) throws ConnectionNotFoundException
-    {
-        if (url.indexOf("?hide") != -1)
-        {
-            CoreUi.hideApplication(true);
-        }
-        else if (url.indexOf("?show") != -1)
-        {
-            CoreUi.hideApplication(false);
-        }
-        else
-        {
-            throw new ConnectionNotFoundException("Invalid URL");
-        }
-
-        return false;
-    }
-}
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javaruntimes/midp/runtime/javasrc/com/nokia/mj/impl/rt/taskmanager/SchemeHandlerImpl.java	Mon Oct 04 00:10:53 2010 +0300
@@ -0,0 +1,60 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: java://taskmanager scheme handler.
+*
+*/
+package com.nokia.mj.impl.rt.taskmanager;
+
+import javax.microedition.io.ConnectionNotFoundException;
+
+import com.nokia.mj.impl.coreui.CoreUi;
+import com.nokia.mj.impl.rt.midp.SchemeHandler;
+
+/**
+ * TaskManager platform request scheme handler. These are jrt:taskmanager?hide_app
+ * jrt:taskmanager?show_app. Using hide URL query application is hided
+ * from the TaskManager and brought visible using show query.
+ */
+public class SchemeHandlerImpl implements SchemeHandler
+{
+
+    /*** ----------------------------- PUBLIC ------------------------------ */
+
+    /**
+     * Execute scheme. If url contains query ?hide_app application is removed
+     * from the TaskManager and if it contains ?show_app application is shown on
+     * TaskManager.
+     *
+     * @return false. Since MIDlet needs never be closed before content fetch.
+     * @throws ConnectionNotFoundException if URL was invalid.
+     */
+    public boolean execute(String url) throws ConnectionNotFoundException
+    {
+        if (url.indexOf("?hide_app") != -1)
+        {
+            CoreUi.hideApplication(true);
+        }
+        else if (url.indexOf("?show_app") != -1)
+        {
+            CoreUi.hideApplication(false);
+        }
+        else
+        {
+            throw new ConnectionNotFoundException("Invalid URL: " + url);
+        }
+
+        return false;
+    }
+}
+
--- a/javaruntimes/midp/runtime/javasrc/javax/microedition/midlet/MIDlet.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javaruntimes/midp/runtime/javasrc/javax/microedition/midlet/MIDlet.java	Mon Oct 04 00:10:53 2010 +0300
@@ -25,7 +25,7 @@
 import com.nokia.mj.impl.rt.ui.RuntimeUi;
 import com.nokia.mj.impl.rt.ui.RuntimeUiFactory;
 
-import com.nokia.mj.impl.rt.midp.SchemeHandlerBase;
+import com.nokia.mj.impl.rt.midp.SchemeHandler;
 
 import com.nokia.mj.impl.rt.support.ApplicationInfo;
 
@@ -61,6 +61,8 @@
 
     private static final int DOMAIN_MANUFACTURER_OR_OPERATOR = 1;
 
+    private static final String JRT_SCHEME = "jrt:";
+
     /*** ----------------------------- PUBLIC ------------------------------ */
 
     /**
@@ -163,7 +165,7 @@
         String domain = appInfo.getProtectionDomain();
 
         // Handling for java scheme.
-        /*if (url.startsWith("java://"))
+        if (url.startsWith(JRT_SCHEME))
         {
             String handlerName = parseHandlerName(url);
 
@@ -174,7 +176,7 @@
             }
 
             return invokeSchemeHandler(handlerName, url);
-        }*/
+        }
 
         // If the platform request is used to start arbitrary native application,
         // check that MIDlet is in manufacturer or operator domain
@@ -376,21 +378,17 @@
 
     private String parseHandlerName(String url) throws ConnectionNotFoundException
     {
-        // Parse handler name from URL. Remove java:// prefix.
-        String handlerName = url.substring(7).trim();
+        // Parse handler name from URL. Remove JRT_SCHEME prefix.
+        String handlerName = url.substring(JRT_SCHEME.length()).trim();
 
         // name format: handlername?query
         int nameEndIndex = handlerName.indexOf('?');
 
         if (nameEndIndex != -1)
         {
-            handlerName = handlerName.substring(0, nameEndIndex);
-            return handlerName;
+            return handlerName.substring(0, nameEndIndex);
         }
-        else
-        {
-            throw new ConnectionNotFoundException("Handler not found for URL");
-        }
+        throw new ConnectionNotFoundException("Handler not found for URL: " + url);
     }
 
     private boolean invokeSchemeHandler(String handlerName, String url)
@@ -400,18 +398,19 @@
         {
             // Avoid loading whatever class from the system using handler
             // as package name.
-            Class clazz = Class.forName("com.nokia.mj.impl.rt." + handlerName + ".SchemeHandler");
+            Class clazz = Class.forName("com.nokia.mj.impl.rt." + handlerName + ".SchemeHandlerImpl");
 
-            SchemeHandlerBase handler = (SchemeHandlerBase)clazz.newInstance();
+            SchemeHandler handler = (SchemeHandler)clazz.newInstance();
 
             handler.execute(url);
             return false;  // No need to close MIDlet.
         }
         catch (Throwable t)
         {
-            Logger.ELOG(Logger.EJavaRuntime, "Cannot invoke scheme handler: " + t.toString());
+            Logger.ELOG(Logger.EJavaRuntime, "Cannot invoke scheme handler for url: "
+                + url + " : " + t.toString());
             // ClassNotFoundException, IllegalAccessException or InstantionException.
-            throw new ConnectionNotFoundException("Handler not found for URL");
+            throw new ConnectionNotFoundException("Handler not found for URL: " + url);
         }
     }
 
--- a/javauis/coreui/tsrc/testcoreui/javasrc/com/nokia/mj/impl/coreuitest/CoreUiTests.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/coreui/tsrc/testcoreui/javasrc/com/nokia/mj/impl/coreuitest/CoreUiTests.java	Mon Oct 04 00:10:53 2010 +0300
@@ -153,7 +153,6 @@
         }
         catch (Throwable t2)
         {
-            System.out.println("JOU2 "+ t2);
             t2.printStackTrace();
             assertTrue(t2.toString(), false);
         }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/coreui_qt/build/build.xml	Mon Oct 04 00:10:53 2010 +0300
@@ -0,0 +1,34 @@
+<!--
+ Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+
+ Contributors:
+
+ Description: Java build file of the CoreUI
+-->
+
+<project name="javacoreui" default="deploy" basedir=".">
+
+  <import file="../../../build/utilities.xml"/>
+
+  <!-- Needed by the utilities.xml. See the description form the utilities.xml
+       file -->
+
+  <property name="javah.classnames" 
+            value="com.nokia.mj.impl.coreuiqt.CoreUiImpl"/>
+
+  <target name="system.properties">
+    <properties>
+        com.nokia.coreui=coreuiqt
+    </properties>
+  </target>
+            
+</project>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/coreui_qt/build/bwins/javacoreuiu.def	Mon Oct 04 00:10:53 2010 +0300
@@ -0,0 +1,4 @@
+EXPORTS
+	?jni_lookup@@YAP6AXXZPBD@Z @ 1 NONAME ; void (*)(void) jni_lookup(char const *)
+	?findDllMethod@@YAP6APAXXZPBD@Z @ 2 NONAME ; void * (*)(void) findDllMethod(char const *)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/coreui_qt/build/eabi/javacoreuiu.def	Mon Oct 04 00:10:53 2010 +0300
@@ -0,0 +1,4 @@
+EXPORTS
+	_Z10jni_lookupPKc @ 1 NONAME
+	_Z13findDllMethodPKc @ 2 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/coreui_qt/build/javacoreui.pro	Mon Oct 04 00:10:53 2010 +0300
@@ -0,0 +1,30 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: The build file of the Core UI
+#
+
+TEMPLATE=lib
+TARGET=javacoreui
+CONFIG += omj staticdata java stl
+
+symbian {
+    CONFIG += hb
+    LIBS += -ltstaskmonitorclient
+}
+
+!symbian {
+    CONFIG -= qt
+}
+
+include(../../../build/omj.pri)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/coreui_qt/javasrc/com/nokia/mj/impl/coreuiqt/CoreUiImpl.java	Mon Oct 04 00:10:53 2010 +0300
@@ -0,0 +1,96 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Java side Core UI accessor.
+*
+*/
+package com.nokia.mj.impl.coreuiqt;
+
+import com.nokia.mj.impl.utils.Uid;
+import com.nokia.mj.impl.rt.support.Jvm;
+import com.nokia.mj.impl.rt.support.ApplicationUtils;
+import com.nokia.mj.impl.rt.support.ApplicationInfo;
+import com.nokia.mj.impl.coreui.CoreUi;
+
+
+/**
+ * A gate to CoreUi Qt implementation.
+ */
+public class CoreUiImpl extends CoreUi
+{
+
+    public CoreUiImpl()
+    {
+        // Load the native.
+        Jvm.loadSystemLibrary("javacoreui");
+    }
+
+    /**
+     * Connects to the already created CoreUi.
+     * @return permission to start the application. There is a small time
+     *         window where user is able to cancel the application
+     *         start. In this case the CoreUi stores the request and
+     *         informs the caller of this method that the application
+     *         should not be started.
+     */
+    protected boolean connectToUiImpl()
+    {
+        return true;
+    }
+
+    /**
+     * For creating the UI from Java side. This is meant for the pre-warmed
+     * VM use case. Calling this method will lead creation of the CoreUI.
+     * @param uid The UID of the application.
+     * @param backGroundStart Should the UI be put into background.
+     */
+    protected void createUiImpl(Uid uid, boolean backGroundStart)
+    {
+        // CoreUiStartScreen.showStartScreen(backGroundStart);
+    }
+
+    /**
+     * For asking the runtime to do the shutdown of the application.
+     */
+    protected void shutdownRequestImpl()
+    {
+        ApplicationUtils.getInstance().notifyExitCmd();
+    }
+
+    /**
+     * For asking the runtime to bring the application to foreground.
+     */
+    protected void foregroundRequestImpl()
+    {
+    }
+
+    /**
+     * For asking if the UI is in foreground.
+     */
+    protected boolean isUiInForegroundImpl()
+    {
+        return true;
+    }
+
+    /**
+     * For asking if the UI to remove the icon from the task manager.
+     */
+    protected void hideApplicationImpl(boolean hide)
+    {
+        // Native logic is reversed between Symbian^3 and Symbian^4.
+        // platform specific part.
+        _hideApplication(!hide);
+    }
+
+    private native void _hideApplication(boolean hide);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/coreui_qt/src/coreuijni.cpp	Mon Oct 04 00:10:53 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Avkon CoreUI JNI methods.
+*
+*/
+
+#include "com_nokia_mj_impl_coreuiqt_CoreUiImpl.h"
+
+#ifdef __SYMBIAN32__
+#include <tstasksettings.h>
+#endif // __SYMBIAN32__
+
+#include "logger.h"
+
+/**
+ * Hide or show application at TaskManager.
+ */
+JNIEXPORT void JNICALL Java_com_nokia_mj_impl_coreuiqt_CoreUiImpl__1hideApplication
+(JNIEnv* /*env*/, jobject /*peer*/, jboolean hide)
+{
+    JELOG2(EJavaUI);
+#ifdef __SYMBIAN32__
+    TsTaskSettings taskSettings;
+    (void)taskSettings.setVisibility(hide);
+#endif // __SYMBIAN32__
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/coreui_qt/src/coreuiqtimpl.cpp	Mon Oct 04 00:10:53 2010 +0300
@@ -0,0 +1,107 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: A CoreUi QT implementation.
+*
+*/
+
+#include <string.h>
+// #include <hbsplashscreen.h>
+
+#include "logger.h"
+#include "coreuiqtimpl.h"
+#include "runtimeexception.h"
+#include "javacommonutils.h"
+
+using namespace java::ui;
+using namespace java::util;
+
+// ======== STATIC VARIABLES ========
+
+/**
+* Singleton
+*/
+static CoreUiQtImpl* sCoreUiQtImpl = 0;
+
+CoreUiQtImpl* getCoreUi()
+{
+    if (sCoreUiQtImpl == 0)
+    {
+        sCoreUiQtImpl = new CoreUiQtImpl(); // codescanner::nonleavenew
+    }
+    return sCoreUiQtImpl;
+}
+
+#ifndef __SYMBIAN32__
+extern_c
+#endif // __SYMBIAN32__
+CoreUi& getUiInstance()
+{
+    JELOG2(EJavaUI);
+    return *getCoreUi();
+}
+
+#ifndef __SYMBIAN32__
+extern_c
+#endif // __SYMBIAN32__
+void releaseUi()
+{
+    JELOG2(EJavaUI);
+    ELOG(EJavaUI, "CoreUiQtImpl::releaseUi -->");
+}
+
+#ifdef __SYMBIAN32__
+EXPORT_C FuncPtr findDllMethod(const char* funcName)
+{
+    JELOG2(EJavaUI);
+    FuncPtr ptr = 0;
+    if (strcmp(funcName, "getUiInstance") == 0)
+    {
+        ptr = (FuncPtr)getUiInstance;
+    }
+    else if (strcmp(funcName, "releaseUi") == 0)
+    {
+        ptr = (FuncPtr)releaseUi;
+    }
+    return ptr;
+}
+#endif // __SYMBIAN32__
+
+CoreUiQtImpl::CoreUiQtImpl()
+{
+    JELOG2(EJavaUI);
+}
+
+
+CoreUiQtImpl::~CoreUiQtImpl()
+{
+    JELOG2(EJavaUI);
+}
+
+
+void CoreUiQtImpl::start(const java::util::Uid& /*midletUid*/,
+                            CoreUiParams* /*uiParams*/)
+{
+    JELOG2(EJavaUI);
+    ELOG(EJavaUI, "CoreUiQtImpl::start -->");
+
+/*
+    ELOG(EJavaUI, "HbSplashScreen::start() -->");
+    QString uid = "10104305";
+    __BREAKPOINT();
+    HbSplashScreen::setAppId(uid);
+    HbSplashScreen::start();
+    User::After(5 * 1000 * 1000); // UID = 10104305
+    ELOG(EJavaUI, "HbSplashScreen::start() <--");
+*/
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/coreui_qt/src/coreuiqtimpl.h	Mon Oct 04 00:10:53 2010 +0300
@@ -0,0 +1,86 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: A CoreUi avkon implementation.
+*
+*/
+
+#ifndef COREUIQTIMPL_H
+#define COREUIQTIMPL_H
+
+
+#include "javacoreui.h"
+#include "javasymbianoslayer.h"
+
+#ifdef __SYMBIAN32__
+
+/**
+ * For accessing the static methods using dynamic dll loading.
+ * @param funcName The name of the method to be searched.
+ * @return a pointer to found function, 0 if not found.
+ */
+IMPORT_C FuncPtr findDllMethod(const char* funcName);
+
+#endif //__SYMBIAN32__
+
+/**
+ * For getting a sinqleton instance of the CoreUi.
+ */
+java::ui::CoreUi& getUiInstance();
+
+/**
+ * Releases the UI. This means that the UI will be closed (if not done yet)
+ * and freese all the resources.
+ */
+void releaseUi();
+
+namespace java // codescanner::namespace
+{
+namespace ui // codescanner::namespace
+{
+
+/**
+ * The implementation of the CoreUiAvkon. This class provides CoreUi services
+ * to CoreUi users.
+ */
+NONSHARABLE_CLASS(CoreUiQtImpl) : public CoreUi
+{
+public:
+    /**
+     * CoreUiQtImpl default constructor.
+     */
+    CoreUiQtImpl();
+
+    /**
+     * CoreUiQtImpl destructor.
+     */
+    virtual ~CoreUiQtImpl();
+
+public: // From CoreUi
+    /**
+    * This method will ask the UI to start the splash screen.
+    * @param appUid The Uid of the application.
+    * @param uiParams Ui configuration parameters. If it
+    *        is null, the default arguments will be used.
+    * @throws java::util::ExceptionBase or std::exception in error cases.
+    */
+    virtual void start(const java::util::Uid& midletUid,
+                       CoreUiParams* uiParams);
+};
+
+
+} // end namespace ui
+} // end namespace java
+
+
+#endif // COREUIQTIMPL_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/eswt_qt/com.nokia.swt.extensions/extensions/org/eclipse/swt/internal/extension/GraphicsUtil.java	Mon Oct 04 00:10:53 2010 +0300
@@ -0,0 +1,69 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Nokia Corporation - initial implementation 
+ *******************************************************************************/
+
+package org.eclipse.swt.internal.extension;
+
+import org.eclipse.swt.graphics.Internal_GfxPackageSupport;
+import org.eclipse.swt.widgets.Internal_PackageSupport;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.internal.qt.graphics.WindowSurface;
+
+public final class GraphicsUtil {
+
+    /**
+     * Ends window surface session started with startExternalRendering() -call.
+     * Must be called after the rendering of external renderer has finished.
+     *
+     * @param gc The gc instance where the rendering is targeted
+     */
+    public static void endExternalRendering(GC gc) {
+        Internal_GfxPackageSupport.endExternalRendering(gc);          
+    }	
+
+    /**
+     * Returns the WindowSurface instance that is the ultimate target of the
+     * rendering for the given gc instance.
+     *
+     * @param gc The gc instance asossiated with the WindowSurface
+     * @return The WindowSurface instance that is the target of given gc instance
+     */
+    public static WindowSurface getWindowSurface(GC gc) {
+        return Internal_GfxPackageSupport.getWindowSurface(gc);
+    }
+
+    /**
+     * Start a window surface rendering session on the surface that is the 
+     * target of the given gc instance. This method must be called before 
+     * rendering to the window surface from external rendering APIs like m3g and m2g. 
+     * The caller must not render outside the area defined by the returned rectangle, 
+     * as it may result in rendering on top of other controls.
+     *
+     * @param gc The gc instance where the rendering is targeted
+     * @return The current clip of the gc in window surface coordinates or
+     *         null if the target of given gc is not a Control
+     */
+    public static Rectangle startExternalRendering(GC gc) {
+        return Internal_GfxPackageSupport.startExternalRendering(gc);          
+    }	
+    
+    /**
+     * Converts the given rectangle to window surface coordinates. 
+     *
+     * @param c The Control instance on which coordinates the conversion is done 
+     * @param rect The rectangle to be converted
+     * @return Rectangcular area in window surface coordinates
+     */
+    public static Rectangle toWindowSurface(Control c, Rectangle rect) {
+        return Internal_PackageSupport.toWindowSurface(c, rect);
+    }
+}
\ No newline at end of file
--- a/javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/GC.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/GC.java	Mon Oct 04 00:10:53 2010 +0300
@@ -16,8 +16,10 @@
 import org.eclipse.swt.internal.qt.GCData;
 import org.eclipse.swt.internal.qt.OS;
 import org.eclipse.swt.internal.qt.graphics.GraphicsContext;
+import org.eclipse.swt.internal.qt.graphics.WindowSurface;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Internal_PackageSupport;
 
 /**
  * Class <code>GC</code> is where all of the drawing capabilities that are
@@ -1035,6 +1037,16 @@
                     translatedFlags, isTransparent);
 }
 
+/*
+ * Ends external rendering session.
+ */
+void endExternalRendering() {
+	if (drawable instanceof Control) {
+		Internal_PackageSupport.endWindowSurfaceSession((Control)drawable);
+	}
+}
+
+
 /**
  * Compares the argument to the receiver, and returns true if they represent the
  * <em>same</em> object using a class specific comparison.
@@ -1657,6 +1669,21 @@
     return (data.xorMode == GCData.XOR_MODE_ON);
 }
 
+/*
+ * Getter for the window surface which is target of this 
+ * GC instance.
+ * @return related WindowSurface instance if the target is widget, 
+ *         otherwise null, if e.g. the target is instance of Image.
+ */
+WindowSurface getWindowSurface() {
+	if (drawable instanceof Control) {
+		return Internal_PackageSupport.getWindowsurface(((Control)drawable).getShell());
+	} else {
+		return null;
+	}
+}
+
+
 /**
  * Returns an integer hash code for the receiver. Any two objects that return
  * <code>true</code> when passed to <code>equals</code> must return the same
@@ -2055,6 +2082,24 @@
     return textExtent(string, 0);
 }
 
+/*
+ * Starts external rendering session.
+ * The sessions must be opened before starting to render to the target outside GC.
+ * This is needed in order to open the rendering session to Qt window surface.
+ * Once rendering has completed the session must be closed with 
+ * endExternalRendering() -call, which closes the window surface session.
+ * 
+ * If the target of this GC is not Control, this call has no effect.
+ * 
+ * @return the clip area of the GC in window coordinates
+ */
+Rectangle startExternalRendering() {
+	if (drawable instanceof Control) {
+		return Internal_PackageSupport.startWindowSurfaceSession((Control)drawable, getClipping());
+	}
+	return null;
+}
+
 /**
  * Returns the extent of the given string. Tab expansion and carriage return
  * processing are performed.
--- a/javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Image.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/graphics/Image.java	Mon Oct 04 00:10:53 2010 +0300
@@ -123,6 +123,7 @@
      * @param device Device
      */
     Image(Device device) {
+        if (device == null) device = Internal_PackageSupport.getDisplayInstance();
         if (device == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
         this.device = device;
     }
--- a/javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Composite.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Composite.java	Mon Oct 04 00:10:53 2010 +0300
@@ -114,6 +114,9 @@
         if(handle != 0) {
             OS.QWidget_setAttribute(handle, OS.QT_WA_NOSYSTEMBACKGROUND, true);
         }
+        if(topHandle != 0) {
+            OS.QWidget_setAttribute(topHandle, OS.QT_WA_NOSYSTEMBACKGROUND, true);
+        }
     }
 }
 
@@ -193,6 +196,8 @@
     // Composite by itself must not by default accept focus by clicking.
     int policy = OS.QWidget_focusPolicy(topHandle) & ~OS.QT_FOCUSPOLICY_CLICKFOCUS;
     OS.QWidget_setFocusPolicy(topHandle, policy);
+    policy = OS.QWidget_focusPolicy(handle) & ~OS.QT_FOCUSPOLICY_CLICKFOCUS;
+    OS.QWidget_setFocusPolicy(handle, policy);
     
     // Stand-alone Composites, Shells, Canvases set the CANVAS flag
     state |= (WidgetState.HANDLE | WidgetState.CANVAS);
--- a/javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Control.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Control.java	Mon Oct 04 00:10:53 2010 +0300
@@ -41,6 +41,7 @@
 import org.eclipse.swt.internal.qt.WidgetState;
 import org.eclipse.swt.internal.qt.graphics.NativeCommandBuffer;
 import org.eclipse.swt.internal.qt.graphics.GraphicsContext;
+import org.eclipse.swt.internal.qt.graphics.WindowSurface;
 
 /**
  * Control is the abstract superclass of all windowed user interface classes.
@@ -81,6 +82,7 @@
 
     private byte isPainting;
     boolean bufferFlush;
+    WindowSurface windowSurface;
 
 Control() {
 }
@@ -753,6 +755,14 @@
     OS.QWidget_setEnabled(topHandle, enabled);
 }
 
+/*
+ * Closes window surface session
+ */
+void endWindowSurfaceSession() {
+	checkWidget();
+	windowSurface.endPaint();
+}
+
 Control findBackgroundControl () {
     if (background != null || backgroundImage != null) return this;
     return (state & WidgetState.PARENT_BACKGROUND) != 0 ? parent.findBackgroundControl () : null;
@@ -819,13 +829,17 @@
     }
 }
 
-void flushBuffers() {
+void flushBuffers(Object target) {
     if (bufferedGcs != null) {
         for (int i = 0; i < bufferedGcs.size(); i++) {
             GraphicsContext igc = (GraphicsContext)bufferedGcs.elementAt(i);
             NativeCommandBuffer buf = (NativeCommandBuffer)gcBuffers.elementAt(i);
             igc.releaseTarget();
-            igc.bindTarget(this);
+            if(target instanceof WindowSurface) {
+            	igc.bindTarget((WindowSurface)target);
+            } else {
+            	igc.bindTarget(this);
+            }
             igc.render(buf);
             igc.releaseTarget();
             igc.bindTarget(buf, this);
@@ -2053,7 +2067,7 @@
     }
 
     // Render the buffers created outside the paint event, if any
-    flushBuffers();
+    flushBuffers(this);
 
     // If this is only a buffer flush event then stop here
     if(bufferFlush) {
@@ -3257,6 +3271,39 @@
     if (fixFocus) fixFocus (control);
 }
 
+/*
+ * Starts external access to the window behind this control, 
+ * by opening surface session and flushing any pending GC originated
+ * rendering to the window.
+ * 
+ * @param clip The invalid area to be converted to window coordinates
+ * @return the area to be painted in window coordinates
+ */
+Rectangle startWindowSurfaceSession(Rectangle clip) {
+	checkWidget();
+	if (clip == null)
+        error(SWT.ERROR_NULL_ARGUMENT);
+
+	Shell s = getShell();
+    if(windowSurface == null) {
+        windowSurface = s.getWindowSurface();
+        if(windowSurface == null) {
+        	error(SWT.ERROR_NULL_ARGUMENT);
+        }
+    }
+    // this is supported only with children of Scrollable, 
+    // i.e. Canvas, Shell
+    if(this instanceof Scrollable) {
+        Rectangle caInWinCoords = toWindowSurface(((Scrollable)this).getClientArea());
+        windowSurface.beginPaint(caInWinCoords.x, caInWinCoords.y, caInWinCoords.width, caInWinCoords.height);
+        flushBuffers(windowSurface);
+        return toWindowSurface(clip);
+    } else {
+    	error(SWT.ERROR_NOT_IMPLEMENTED);
+    }
+    return null;
+}
+
 /**
  * Returns a point which is the result of converting the argument, which is
  * specified in display relative coordinates, to coordinates relative to the
@@ -3372,6 +3419,27 @@
     return toDisplay(point.x, point.y);
 }
 
+/*
+ * Converts given rectangle form the (this) Control coordinates 
+ * to window surface coordinates.
+ * 
+ * @param rect The rectangle to be converted, given in the coordinates of this Control 
+ */
+Rectangle toWindowSurface(Rectangle rect) {
+	// The window surface is the size of the client area of a shell.
+	Shell s = getShell();
+	Point wTopLeft = s.toControl(toDisplay(rect.x, rect.y));
+	Point wBottomRight = s.toControl(toDisplay(rect.x+rect.width, rect.y+rect.height));
+	
+    // trim for possible shell border
+    if ((getStyle() & SWT.BORDER) != 0){
+    	final int frameOffset = getBorderWidth();
+    	wTopLeft.x = wTopLeft.x + frameOffset; 
+        wTopLeft.y = wTopLeft.y + frameOffset; 
+    }
+    return new Rectangle(wTopLeft.x, wTopLeft.y, wBottomRight.x-wTopLeft.x, wBottomRight.y-wTopLeft.y);
+}
+
 /**
  * Based on the argument, perform one of the expected platform traversal action.
  * The argument should be one of the constants: <code>SWT.TRAVERSE_ESCAPE</code>
--- a/javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Shell.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/eswt_qt/org.eclipse.swt/Eclipse SWT/qt/org/eclipse/swt/widgets/Shell.java	Mon Oct 04 00:10:53 2010 +0300
@@ -422,6 +422,20 @@
     addListener (SWT.Deactivate, typedListener);
 }
 
+void checkNoBackground() {
+    if((style & SWT.NO_BACKGROUND) != 0) {
+        if(handle != 0) {
+            OS.QWidget_setAttribute(handle, OS.QT_WA_NOSYSTEMBACKGROUND, true);
+        }
+        if(scrollAreaHandle != 0) {
+            OS.QWidget_setAttribute(scrollAreaHandle, OS.QT_WA_NOSYSTEMBACKGROUND, true);
+        }
+        if(topHandle != 0) {
+            OS.QWidget_setAttribute(topHandle, OS.QT_WA_NOSYSTEMBACKGROUND, true);
+        }
+    }
+}
+
 /**
  * Requests that the window manager close the receiver in
  * the same way it would be closed when the user clicks on
@@ -593,6 +607,13 @@
     // Shell must not by default accept focus by clicking. 
     int policy = OS.QWidget_focusPolicy(topHandle) & ~OS.QT_FOCUSPOLICY_CLICKFOCUS;
     OS.QWidget_setFocusPolicy(topHandle, policy);
+    policy = OS.QWidget_focusPolicy(scrollAreaHandle) & ~OS.QT_FOCUSPOLICY_CLICKFOCUS;
+    OS.QWidget_setFocusPolicy(scrollAreaHandle, policy);
+    policy = OS.QWidget_focusPolicy(handle) & ~OS.QT_FOCUSPOLICY_CLICKFOCUS;
+    OS.QWidget_setFocusPolicy(handle, policy);
+    
+    // The Shell should not become active when Shell.setVisible(true) is called.
+    OS.QWidget_setAttribute(topHandle, OS.QT_WA_SHOWWITHOUTACTIVATING, true);
 
     // Stand-alone Composites, Shells, Canvases set the CANVAS flag
     state |= WidgetState.HANDLE | WidgetState.CANVAS;
--- a/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/library/graphics/qt/windowsurfaceimpl_symbian.cpp	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/library/graphics/qt/windowsurfaceimpl_symbian.cpp	Mon Oct 04 00:10:53 2010 +0300
@@ -318,8 +318,7 @@
         return false;
     }
     
-    if((mMainSurface.localSurfaceInUse) && 
-       (mMainSurface.localSurface->width() == mMainSurface.widget->width()) && 
+    if((mMainSurface.localSurface->width() == mMainSurface.widget->width()) && 
        (mMainSurface.localSurface->height() == mMainSurface.widget->height()))
     {
         return true;
@@ -362,7 +361,8 @@
         }
         else 
         {
-            // We have valid local surface so just return
+            // We have valid local surface so make sure its active and return
+            mMainSurface.localSurfaceInUse = true;
             return;
         }
     }
@@ -386,15 +386,19 @@
     
     // We got window surface so extract information
     QPaintDevice* device = surface->paintDevice();
+    QPaintEngine* engine = NULL;
+    
+    // If the device is active it means that some painter is attached to the widget,
+    // if not then we attach our own painter to do the job
     if(device->paintingActive())
     {
-        throw GfxException(EGfxErrorIllegalState, "Internal error: Device active when refreshing data");  
+        engine = device->paintEngine();
     }
-    
-    // Attach painter to device in oder to see which type 
-    // of device it is working on
-    mPainter.begin(device);
-    QPaintEngine* engine = mPainter.paintEngine();
+    else
+    {
+        mPainter.begin(device);
+        engine = mPainter.paintEngine();
+    }
     
     // determine the surface type based on the engine used
     // as Qt does not provide exact info of the surface type
@@ -420,8 +424,11 @@
             throw GfxException(EGfxErrorIllegalArgument, "Unsupported widget window surface type");
     }
     
-    // release painter
-    mPainter.end();
+    // release painter if its active
+    if(mPainter.isActive())
+    {
+        mPainter.end();
+    }
     mMainSurface.qSurface = surface;
     mMainSurface.device = device;
     mMainSurface.localSurfaceInUse = false;
--- a/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/org/eclipse/swt/graphics/Internal_GfxPackageSupport.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/org/eclipse/swt/graphics/Internal_GfxPackageSupport.java	Mon Oct 04 00:10:53 2010 +0300
@@ -13,6 +13,8 @@
 
 import java.io.InputStream;
 
+import org.eclipse.swt.internal.qt.graphics.WindowSurface;
+
 /**
  * <p>
  * <b>IMPORTANT:</b> This class is <em>not</em> part of the SWT public API. It
@@ -80,4 +82,20 @@
     return Font.qt_new(device, handle);
 }
 
+/* 
+ * From class GC
+ */
+
+public static Rectangle startExternalRendering(GC gc) {
+	return gc.startExternalRendering();
 }
+
+public static void endExternalRendering(GC gc) {
+	gc.endExternalRendering();
+}
+
+public static WindowSurface getWindowSurface(GC gc) {
+	return gc.getWindowSurface();
+}
+
+}
--- a/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/org/eclipse/swt/internal/qt/OS.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/org/eclipse/swt/internal/qt/OS.java	Mon Oct 04 00:10:53 2010 +0300
@@ -551,6 +551,7 @@
     public static final int QT_WA_PAINTUNCLIPPED = 52;
     public static final int QT_WA_INPUTMETHODENABLED = 14;
     public static final int QT_WA_NOMOUSEPROPAGATION = 73;
+    public static final int QT_WA_SHOWWITHOUTACTIVATING = 98;
 
     // QStyle::StandardPixmap
     public static final int QSTYLE_SP_MESSAGEBOXINFORMATION = 9;
--- a/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/org/eclipse/swt/widgets/Internal_PackageSupport.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/org/eclipse/swt/widgets/Internal_PackageSupport.java	Mon Oct 04 00:10:53 2010 +0300
@@ -13,8 +13,10 @@
 
 import org.eclipse.ercp.swt.mobile.Command;
 import org.eclipse.ercp.swt.mobile.MobileDevice;
+import org.eclipse.swt.graphics.GC;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
 import org.eclipse.swt.internal.qt.CommandArranger;
 import org.eclipse.swt.internal.qt.SymbianWindowVisibilityListener;
 import org.eclipse.swt.internal.qt.graphics.WindowSurface;
@@ -204,6 +206,9 @@
 /*
  * From the class Control
  */
+public static void endWindowSurfaceSession(Control c) {
+	c.endWindowSurfaceSession();
+}
 public static int extraStyle(Control c) {
     return c.extraStyle;
 }
@@ -250,6 +255,13 @@
 public static void setTraversalFlags(Control c, int type, int key, int modifier, int character) {
     c.setTraversalFlags_pp(type, key, modifier, character);
 }
+public static Rectangle startWindowSurfaceSession(Control c, Rectangle clip) {
+	return c.startWindowSurfaceSession(clip);
+}
+public static Rectangle toWindowSurface(Control c, Rectangle rect) {
+	return c.toWindowSurface(rect);
+}
+
 /*
  * From the class Scrollable
  */
--- a/javauis/javauis.pro	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/javauis.pro	Mon Oct 04 00:10:53 2010 +0300
@@ -16,11 +16,12 @@
 TEMPLATE = subdirs
 SUBDIRS += nokiasound/build/javanokiasound.pro 
 SUBDIRS += eswt_qt/build 
+SUBDIRS += coreui_qt/build/javacoreui.pro 
 SUBDIRS += lcdui_qt/build/openlcdui.pro 
 SUBDIRS += runtimeui_qt/build/javaruntimeui.pro 
-SUBDIRS += nokiauiapi_qt/build/javanokiaui.pro 
 SUBDIRS += mmapi_qt/build/javamobilemedia.pro 
 SUBDIRS += amms_qt/build/javaamms.pro 
 SUBDIRS += m3g_qt/build/javam3g.pro 
+SUBDIRS += nokiauiapi_qt/build 
 BLD_INF_RULES.prj_extensions += "$${LITERAL_HASH}include \"coreui/build/bld.inf\""  
 BLD_INF_RULES.prj_extensions += "prj_extensions" 
--- a/javauis/lcdui_qt/src/javax/microedition/lcdui/Alert.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/lcdui_qt/src/javax/microedition/lcdui/Alert.java	Mon Oct 04 00:10:53 2010 +0300
@@ -253,6 +253,12 @@
      */
     void eswtHandleShowCurrentEvent()
     {
+        // If it alert is first displayable, default 
+        // displayable should be shown behind alert
+        if(topShell.isVisible() == false && nextDisplayable == null)
+        {
+            topShell.setVisible(true);
+        }
         super.eswtHandleShowCurrentEvent();
         topShell.addListener(SWT.Resize, resizeListener);
 
--- a/javauis/lcdui_qt/src/javax/microedition/lcdui/Canvas.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/lcdui_qt/src/javax/microedition/lcdui/Canvas.java	Mon Oct 04 00:10:53 2010 +0300
@@ -159,7 +159,6 @@
     private static final int DISABLE_TAPDETECTION = 1 << 3;
     private static final int SUPPRESS_GAMEKEYS = 1 << 4;
     private static final int SUPPRESS_DRAGEVENT = 1 << 5;
-    private static final int CLEANUP_NEEDED = 1 << 6;
     private static final int REPAINT_PENDING = 1 << 7;
     private static final int SELECTIONKEY_COMPATIBILITY = 1 << 8;
 
@@ -205,7 +204,6 @@
 
     private int mode;
     private Object modeLock;
-    private Object cleanupLock;
     private Object repaintLock;
     private Object flushLock;
 
@@ -239,7 +237,6 @@
 
         modeLock = new Object();
         repaintLock = new Object();
-        cleanupLock = new Object();
         flushLock = new Object();
         setMode(GAME_CANVAS, this instanceof GameCanvas);
         construct();
@@ -299,13 +296,13 @@
     {
         if(isMode(GAME_CANVAS))
         {
-            mShell = super.eswtConstructShell(style);
+            mShell = super.eswtConstructShell(style|SWT.NO_BACKGROUND);
         }
         else
         {
             if(sharedShell == null)
             {
-                sharedShell = super.eswtConstructShell(style);
+                sharedShell = super.eswtConstructShell(style|SWT.NO_BACKGROUND);
             }
             mShell = sharedShell;
         }
@@ -581,7 +578,7 @@
     /**
      * Issues the request to repaint the whole Canvas.
      */
-    public void repaint()
+     public final void repaint()
     {
         repaint(0, 0, getWidth(), getHeight());
     }
@@ -595,7 +592,7 @@
      * @param width - width of the rectangle to redraw.
      * @param height - height of the rectangle to redraw.
      */
-    public void repaint(int x, int y, int width, int height)
+    public final void repaint(int x, int y, int width, int height)
     {
         // Paint callback event is posted without any invalid area info.
         // Invalid area info is kept in the member variables. Only one event
@@ -719,15 +716,20 @@
     }
 
     /**
-     * Returns game action for a specified key code.
+     * Returns game action associated with key code.
      *
      * @param keyCode Key code to map to game action.
-     * @return Game action for a a specified key code or
-     *         IllegalArgumentException.
+     * @return game action corresponding to key, or 0 if none
+     * @throws IllegalArgumentException if keyCode is not a valid
      */
-    public int getGameAction(int keyCode)
+    public int getGameAction(int aKeyCode)
     {
-        return KeyTable.getGameAction(keyCode);
+        if (aKeyCode == 0)
+        {
+            throw new IllegalArgumentException(
+                MsgRepository.CANVAS_EXCEPTION_INVALID_KEY_CODE);
+        }
+        return KeyTable.getGameAction(aKeyCode);
     }
 
     /**
@@ -735,10 +737,18 @@
      *
      * @param gameAction - game action to be mapped to the key code.
      * @return Key code that is mapped to the specified game action.
+     * @throws IllegalArgumentException for not valid gameAction
      */
-    public int getKeyCode(int gameAction)
+    public int getKeyCode(int aGameAction)
     {
-        return KeyTable.getKeyCode(gameAction);
+        int keyCode = KeyTable.getKeyCode(aGameAction);
+
+        if (keyCode == 0)
+        {
+            throw new IllegalArgumentException(
+                MsgRepository.CANVAS_EXCEPTION_INVALID_GAME_ACTION);
+        }
+        return keyCode;
     }
 
     /**
@@ -748,9 +758,9 @@
      * @return String that contains textual name of the key specified by the key
      *         code.
      */
-    public String getKeyName(int keyCode)
+    public String getKeyName(int aKeyCode)
     {
-        return KeyTable.getKeyName(keyCode);
+        return KeyTable.getKeyName(aKeyCode);
     }
 
     /**
@@ -963,11 +973,6 @@
         // reset the game key state
         gameKeyState = 0;
 
-        synchronized(cleanupLock)
-        {
-            setMode(CLEANUP_NEEDED, true);
-        }
-
         LCDUIEvent event = EventDispatcher.instance().newEvent(LCDUIEvent.CANVAS_SHOWNOTIFY, this);
         EventDispatcher.instance().postEvent(event);
     }
@@ -992,10 +997,6 @@
         // this call must not be synchronized as we
         // cannot use locking in UI thread
         graphicsBuffer.setControlBounds(getContentComp());
-        synchronized(cleanupLock)
-        {
-            setMode(CLEANUP_NEEDED, true);
-        }
     }
 
     /*
@@ -1174,20 +1175,10 @@
             }
 
             // Clean the background if dirty, buffer the operations.
-            synchronized(cleanupLock)
+            if(isMode(NO_BACKGROUND) && event.type == LCDUIEvent.CANVAS_PAINT_NATIVE_REQUEST)
             {
-                if(isMode(CLEANUP_NEEDED) && isMode(NO_BACKGROUND))
-                {
-                    // UI thread can change the contentArea object reference at
-                    // any time. Store the object reference locally to ensure it
-                    // points to the same rectangle all the time.
-                    Rectangle contentArea = getContentArea();
-
-                    canvasGraphics.setClip(contentArea.x, contentArea.y,
-                                           contentArea.width, contentArea.height);
-                    canvasGraphics.cleanBackground(contentArea);
-                    setMode(CLEANUP_NEEDED, false);
-                }
+                canvasGraphics.setClip(event.x, event.y, event.width, event.height);
+                canvasGraphics.cleanBackground(new Rectangle(event.x, event.y, event.width, event.height));
             }
 
             // Clip must define the invalid area
@@ -1338,7 +1329,7 @@
     /**
      * Updates game key states and returns if the key was a game key.
      */
-    private boolean updateGameKeyState(int keyCode, boolean addKeyState)
+    private boolean updateGameKeyState(int aKeyCode, boolean aAddKeyState)
     {
         // Ignore key repeat events
         if(ESWTUIThreadRunner.getKeyRepeatCount() > 1)
@@ -1347,13 +1338,21 @@
         }
         try
         {
-            int gameAction = KeyTable.getGameAction(keyCode);
-            if(addKeyState)
+            int gameAction = getGameAction(aKeyCode);
+            boolean result = false;
+
+            // Key state should be updated only if game action 
+            // is associated with keyCode
+            if(gameAction != 0)
             {
-                // set bitfield
-                gameKeyState |= (1 << gameAction);
+                if(aAddKeyState)
+                {
+                    // set bitfield
+                    gameKeyState |= (1 << gameAction);
+                }
+                result = true;
             }
-            return true;
+            return result;
         }
         catch(IllegalArgumentException iae)
         {
--- a/javauis/lcdui_qt/src/javax/microedition/lcdui/CustomItem.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/lcdui_qt/src/javax/microedition/lcdui/CustomItem.java	Mon Oct 04 00:10:53 2010 +0300
@@ -42,10 +42,9 @@
     /**
      * If CustomItem is changed, reasons for Re-layouting.
      */
-	static final int UPDATE_REASON_REPAINT = UPDATE_ITEM_MAX << 1;
+    static final int UPDATE_REASON_REPAINT = UPDATE_ITEM_MAX << 1;
 
 
-    private boolean cleanupNeeded;
     private int contentWidth;
     private int contentHeight;
 
@@ -55,7 +54,6 @@
     private int repaintX2;
     private int repaintY2;
     private Object repaintLock;
-    private Object cleanupLock;
     private Object resizeLock;
 
     // Flag for passing info between UI thread
@@ -95,20 +93,25 @@
             }
         });
         repaintLock = new Object();
-        cleanupLock = new Object();
         resizeLock = new Object();
         setLabel(label);
     }
 
     /**
-     * Get the game action associated with the key code.
+     * Returns game action associated with key code.
      *
-     * @param keyCode key code
-     * @return game action bound to the key
+     * @param keyCode Key code to map to game action.
+     * @return game action corresponding to key, or 0 if none
+     * @throws IllegalArgumentException if keyCode is not a valid key code
      */
-    public int getGameAction(int keyCode)
+    public int getGameAction(int aKeyCode)
     {
-        return KeyTable.getGameAction(keyCode);
+        if (aKeyCode == 0)
+        {
+            throw new IllegalArgumentException(
+                MsgRepository.CANVAS_EXCEPTION_INVALID_KEY_CODE);
+        }
+        return KeyTable.getGameAction(aKeyCode);
     }
 
     /**
@@ -309,10 +312,6 @@
             LCDUIEvent event = eventDispatcher.newEvent(LCDUIEvent.CUSTOMITEM_SIZECHANGED, layouter.formLayouter.getForm());
             event.item = this;
             eventDispatcher.postEvent(event);
-            synchronized(cleanupLock)
-            {
-                cleanupNeeded = true;
-            }
             repaint();
         }
     }
@@ -568,23 +567,10 @@
         }
 
         // Clean the background if dirty, buffer the operations.
-        synchronized(cleanupLock)
+        if(layouter.noBackground && event.type == LCDUIEvent.CUSTOMITEM_PAINT_NATIVE_REQUEST)
         {
-            if(cleanupNeeded && layouter.noBackground)
-            {
-                // Must be made sure that size doesn't change between reading
-                // the width and the height.
-                int contentWidth, contentHeight;
-                synchronized(resizeLock)
-                {
-                    contentWidth = this.contentWidth;
-                    contentHeight = this.contentHeight;
-                }
-
-                customItemGraphics.setClip(0, 0, contentWidth, contentHeight);
-                customItemGraphics.cleanBackground(new Rectangle(0, 0, contentWidth, contentHeight));
-                cleanupNeeded = false;
-            }
+            customItemGraphics.setClip(event.x, event.y, event.width, event.height);
+            customItemGraphics.cleanBackground(new Rectangle(event.x, event.y, event.width, event.height));
         }
 
         // Clip must define the invalid area
--- a/javauis/lcdui_qt/src/javax/microedition/lcdui/Display.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/lcdui_qt/src/javax/microedition/lcdui/Display.java	Mon Oct 04 00:10:53 2010 +0300
@@ -290,6 +290,15 @@
             }
             else
             {
+                if(displayable.isPopup())
+                {
+                    TextBox textbox = (TextBox) displayable;
+                    if(currentDisplayable == null)
+                    {
+                        // if PopupTextBox is first Displayable
+                        textbox.setFirstDisplayable(true);
+                    }
+                }
                 doSetCurrent(displayable);
             }
         }
--- a/javauis/lcdui_qt/src/javax/microedition/lcdui/Displayable.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/lcdui_qt/src/javax/microedition/lcdui/Displayable.java	Mon Oct 04 00:10:53 2010 +0300
@@ -125,7 +125,7 @@
         {
             public void run()
             {
-                shell = eswtConstructShell(SWT.SHELL_TRIM | SWT.PRIMARY_MODAL);
+                shell = eswtConstructShell(SWT.SHELL_TRIM);
                 eswtSetTitle();
                 contentComp = eswtConstructContent(SWT.NONE);
                 contentArea = eswtLayoutShellContent();
@@ -198,7 +198,9 @@
         if(!shell.isDisposed())
         {
             eswtUpdateSizes();
-            if(ticker != null)
+
+            // If it is popup textbox ticker should not be visible
+            if (ticker != null && !isPopup())
             {
                 ticker.start();
             }
@@ -327,7 +329,7 @@
     {
         if(isDialogShell())
         {
-            // aHeight += Config.DISPLAYABLE_DIALOGSHELL_HEIGHT_DISPLACEMENT;
+            //aHeight += Config.DISPLAYABLE_DIALOGSHELL_HEIGHT_DISPLACEMENT;
 
             Logger.method(this, "eswtSetPreferredContentSize",
                           String.valueOf(aWidth), String.valueOf(aHeight));
@@ -344,16 +346,29 @@
             Rectangle shellBounds = shell.getBounds();
             // compute the trimmed shell size
             Rectangle newSize = shell.computeTrim(0, 0, newWidth, newHeight);
+
             // set the new size
             shell.setSize(newSize.width, newSize.height);
-            // set the location - attached to the bottom growing upwards
-            shell.setLocation(shellBounds.x, (shellBounds.y + shellBounds.height) - newSize.height);
+
+            if(!(this instanceof Alert))
+            {
+                // set the location - attached to the bottom growing upwards
+                shell.setLocation(shellBounds.x, 
+                    (shellBounds.y + shellBounds.height) - newSize.height);
+            }
+            else
+            {
+                // Temporary solution, it should be changed after qt integration
+                shell.setLocation(shellBounds.x, ESWTUIThreadRunner.
+                    getInstance().getDisplay().getBounds().height/2);
+            }
         }
     }
 
     Rectangle eswtLayoutShellContent()
     {
         Rectangle shellArea = shell.getClientArea();
+
         if(tickerLabel != null)
         {
             int tickerHeight = tickerLabel.getBounds().height;
@@ -699,6 +714,8 @@
         }
 
         final Ticker finalTicker = ticker;
+        final Displayable currentDisplayable = this;
+
         ESWTUIThreadRunner.syncExec(new Runnable()
         {
             public void run()
@@ -707,18 +724,31 @@
                 {
                     // Setting ticker:
                     tickerLabel.setText(finalTicker.getFormattedString());
-                    tickerLabel.pack();
-                    // Avoid ticker flashing by setting it out of the
-                    // screen first:
-                    tickerLabel.setBounds(Integer.MIN_VALUE, 0,
+
+                    // If it is popup textbox ticker should not be visible
+                    if (!currentDisplayable.isPopup())
+                    {
+
+                        // Setting ticker:
+                        tickerLabel.pack();
+                        // Avoid ticker flashing by setting it out of the
+                        // screen first:
+                        tickerLabel.setBounds(Integer.MIN_VALUE, 0,
                                           tickerLabel.getBounds().width,
                                           tickerLabel.getBounds().height);
+                    }
                 }
                 else
                 {
                     // Removing ticker:
                     tickerLabel.setText("");
-                    tickerLabel.setBounds(Integer.MIN_VALUE, 0, 0, 0);
+
+                    // If it is popup textbox ticker should not be visible
+                    if (!currentDisplayable.isPopup())
+                    {
+                        // Removing ticker:
+                        tickerLabel.setBounds(Integer.MIN_VALUE, 0, 0, 0);
+                    }
                 }
                 eswtUpdateSizes();
             }
@@ -727,10 +757,14 @@
         {
             if(isLcduiVisible)
             {
-                // Start to scroll the ticker. Ticker may be already running
-                // if it exists in some other displayable already, but
-                // calling this again wont do any harm:
-                ticker.start();
+                // If it is popup textbox ticker should not be visible
+                if (!isPopup())
+                {
+                    // Start to scroll the ticker. Ticker may be already running
+                    // if it exists in some other displayable already, but
+                    // calling this again wont do any harm:
+                    ticker.start();
+                }
             }
         }
     }
@@ -788,12 +822,23 @@
     {
         if(tickerLabel == null)
         {
+            final Displayable currentDisplayable = this;
             ESWTUIThreadRunner.syncExec(new Runnable()
             {
                 public void run()
                 {
-                    tickerLabel = new Label(shell,
-                                            SWT.SHADOW_NONE | SWT.HORIZONTAL | SWT.CENTER);
+                    // Alert's ticker should be added to top part of the screen
+                    Composite parent = shell;
+                    if (currentDisplayable instanceof Alert)
+                    {
+                        parent = shell.getParent();
+                        if(parent == null)
+                        {
+                            parent = shell;
+                        }
+                    }
+                    tickerLabel = new Label(parent,
+                        SWT.SHADOW_NONE | SWT.HORIZONTAL | SWT.CENTER);
                 }
             });
         }
@@ -854,6 +899,23 @@
         }
     }
 
+    /* (non-Javadoc)
+     * Checks if instance of Displayable is popup component
+     */
+    protected boolean isPopup()
+    {
+        boolean isPopup = false;
+
+        if(this instanceof TextBox && 
+                    !JadAttributeUtil.isValue(
+                        JadAttributeUtil.ATTRIB_NOKIA_UI_ENHANCEMENT, 
+                        JadAttributeUtil.VALUE_FULLSCREEN_TEXTBOX))
+        {
+            isPopup = true;
+        }
+        return isPopup;
+    }
+
     /**
      * Inner class which receives SelectionEvents from eSWT and convert and
      * forwards those events to LCDUI's CommandListener.
--- a/javauis/lcdui_qt/src/javax/microedition/lcdui/Gauge.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/lcdui_qt/src/javax/microedition/lcdui/Gauge.java	Mon Oct 04 00:10:53 2010 +0300
@@ -108,9 +108,15 @@
      */
     public void setMaxValue(int aMaxValue)
     {
-        int oldMaxValue = maxValue;
-		maxValue = validateMaxValue(aMaxValue, interactive);
-        value = validateValue(getValue(), maxValue, oldMaxValue);
+        if (maxValue == aMaxValue)
+        {
+            return;
+        }
+        int tempMaxValue = validateMaxValue(aMaxValue, interactive);
+        int tempValue    = validateValue(getValue(), tempMaxValue, maxValue);
+        
+        maxValue = tempMaxValue;
+        value = tempValue;
         updateParent(UPDATE_MAXVALUE);
     }
 
--- a/javauis/lcdui_qt/src/javax/microedition/lcdui/Item.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/lcdui_qt/src/javax/microedition/lcdui/Item.java	Mon Oct 04 00:10:53 2010 +0300
@@ -170,7 +170,7 @@
     private ItemControlStateChangeListener controlListener;
 
     private Command defaultCommand;
-	private WeakReference wParent;
+    private Screen iParent = null;
 
     private int layout;
     private int lockedPrefWidth = -1;
@@ -188,14 +188,14 @@
      */
     void setParent(Screen parent)
     {
-    	if(parent != null)
-    	{
-    		wParent = new WeakReference(parent);
-    	}
-		else
-		{
-			clearParent();
-		}
+        if(parent != null)
+        {
+            iParent = parent;
+        }
+        else
+        {
+            clearParent();
+        }
     }
 
     /**
@@ -205,14 +205,14 @@
      */
     Screen getParent()
     {
-    	if(wParent != null)
-    	{
-    		return (Screen)wParent.get();
-    	}
-		else
-		{
-			return null;
-		}
+        if(iParent != null)
+        {
+            return iParent;
+        }
+        else
+        {
+            return null;
+        }
     }
 
     /**
@@ -221,11 +221,10 @@
      */
     void clearParent()
     {
-    	if(wParent != null)
-    	{
-    		wParent.clear();
-			wParent = null;
-    	}
+        if(iParent != null)
+        {
+            iParent = null;
+        }
     }
 
     /**
@@ -241,10 +240,10 @@
             throw new IllegalStateException(
                 MsgRepository.ITEM_EXCEPTION_OWNED_BY_ALERT);
         }
-    	if((newLabel == null) && (label == null))
-		{
-			return;
-		}
+        if((newLabel == null) && (label == null))
+        {
+            return;
+        }
         label = newLabel;
         updateParent(UPDATE_LABEL | UPDATE_SIZE_CHANGED);
     }
@@ -570,7 +569,7 @@
                 MsgRepository.ITEM_EXCEPTION_NOT_OWNED_BY_FORM);
         }
         // Notify item state listener
-        ((Form) getParent()).notifyItemStateChanged(this);
+        ((Form) iParent).notifyItemStateChanged(this);
     }
 
     /**
@@ -630,7 +629,7 @@
      */
     boolean isContainedInAlert()
     {
-        return ((wParent != null) && (getParent() instanceof Alert));
+        return ((iParent != null) && (iParent instanceof Alert));
     }
 
     /**
@@ -638,7 +637,7 @@
      */
     boolean isContainedInForm()
     {
-        return ((wParent != null) && (getParent() instanceof Form));
+        return ((iParent != null) && (iParent instanceof Form));
     }
 
     /**
@@ -672,7 +671,7 @@
         }
         if(isContainedInForm())
         {
-        	((Form) getParent()).updateItemState(this, updateReason, param);
+        	((Form) iParent).updateItemState(this, updateReason, param);
         }
     }
 
--- a/javauis/lcdui_qt/src/javax/microedition/lcdui/KeyTable.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/lcdui_qt/src/javax/microedition/lcdui/KeyTable.java	Mon Oct 04 00:10:53 2010 +0300
@@ -49,11 +49,7 @@
         {Canvas.KEY_NUM7,  Canvas.GAME_A},
         {Canvas.KEY_NUM9,  Canvas.GAME_B},
         {Canvas.KEY_STAR,  Canvas.GAME_C},
-        {Canvas.KEY_POUND,  Canvas.GAME_D},
-        
-        {Canvas.KEY_NUM0, 0},
-        {Canvas.KEY_NUM1, 0},
-        {Canvas.KEY_NUM3, 0}
+        {Canvas.KEY_POUND,  Canvas.GAME_D}
     };
 
     /**
@@ -63,37 +59,38 @@
     {
     }
 
-    static int getGameAction(int keyCode)
+    static int getGameAction(int aKeyCode)
     {
         for(int i = 0; i < KEY_TO_GAME_TABLE.length; i++)
         {
-            if(KEY_TO_GAME_TABLE[i][0] == keyCode)
+            if(KEY_TO_GAME_TABLE[i][0] == aKeyCode)
             {
                 return KEY_TO_GAME_TABLE[i][1];
             }
         }
-        throw new IllegalArgumentException(
-            MsgRepository.CANVAS_EXCEPTION_INVALID_KEY_CODE);
+
+        //No game action corresponding to this key
+        return 0;
     }
 
-    static int getKeyCode(int gameAction)
+    static int getKeyCode(int aGameAction)
     {
         for(int i = 0; i < KEY_TO_GAME_TABLE.length; i++)
         {
-            if(KEY_TO_GAME_TABLE[i][1] == gameAction)
+            if(KEY_TO_GAME_TABLE[i][1] == aGameAction)
             {
                 return KEY_TO_GAME_TABLE[i][0];
             }
         }
-        throw new IllegalArgumentException(
-            MsgRepository.CANVAS_EXCEPTION_INVALID_GAME_ACTION);
+
+        //No key code corresponding to this game action
+        return 0;
     }
 
 
-    static String getKeyName(int keyCode)
+    static String getKeyName(int aKeyCode)
     {
-
-        switch(keyCode)
+        switch(aKeyCode)
         {
         case Canvas.KEY_NUM0:
             return "0";
--- a/javauis/lcdui_qt/src/javax/microedition/lcdui/ScrolledTextComposite.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/lcdui_qt/src/javax/microedition/lcdui/ScrolledTextComposite.java	Mon Oct 04 00:10:53 2010 +0300
@@ -91,9 +91,9 @@
     {
         iTextScrolling = false;
         vBar.setVisible(false);
-        Point nextSize = iESWTTextLabel.computeSize(getClientArea().width,
+        Point nextSize = iESWTTextLabel.computeSize(getParent().getClientArea().width,
                          SWT.DEFAULT);
-        if(nextSize.y > getClientArea().height)
+        if(nextSize.y > getParent().getClientArea().height)
         {
             iTextScrolling = true;
             vBar.setVisible(true);
@@ -122,7 +122,7 @@
         iESWTTextLabel.setSize(calculateTextSize());
 
         Rectangle contentRect = iESWTTextLabel.getBounds();
-        Rectangle hostRect = getClientArea();
+        Rectangle hostRect = getParent().getClientArea();
         vBar.setMaximum(contentRect.height);
         vBar.setThumb(Math.min(contentRect.height, hostRect.height));
         int vPage = contentRect.height - hostRect.height;
@@ -173,6 +173,11 @@
             resizing = true;
             layout();
             resizing = false;
+            if((Display.getDisplay().getCurrent() instanceof Alert) &&
+                 (isTextScrolling() == true))
+            {
+                Display.getDisplay().getCurrent().setCommandsVisibility(true);
+            }
         }
     }
 
--- a/javauis/lcdui_qt/src/javax/microedition/lcdui/TextBox.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/lcdui_qt/src/javax/microedition/lcdui/TextBox.java	Mon Oct 04 00:10:53 2010 +0300
@@ -36,6 +36,8 @@
     private TextWrapper textWrapper;
 
     private int numLines;
+    private Shell topShell;
+    private boolean firstDisplayable = false;
 
     /**
      * Constructor.
@@ -59,24 +61,13 @@
      */
     Shell eswtConstructShell(int style)
     {
-        Shell topShell = super.eswtConstructShell(style);
-        // TextBox with null title and ANY constraint, should be Full-Screen
-        if(getTitle() == null && TextWrapper.getTypeConstraint(
-                    textWrapper.getConstraints()) == TextField.ANY)
-        {
-            return topShell;
-        }
-        else
+        topShell = super.eswtConstructShell(style);
+        Shell currentShell = topShell;
+        if(super.isPopup())
         {
-            if(JadAttributeUtil.isValue(JadAttributeUtil.ATTRIB_NOKIA_UI_ENHANCEMENT, JadAttributeUtil.VALUE_FULLSCREEN_TEXTBOX))
-            {
-                return topShell;
-            }
-            else
-            {
-                return new Shell(topShell, style | SWT.DIALOG_TRIM | SWT.RESIZE);
-            }
+            currentShell = new Shell(topShell, style | SWT.DIALOG_TRIM | SWT.RESIZE);
         }
+        return currentShell;
     }
 
     /* (non-Javadoc)
@@ -94,6 +85,13 @@
      */
     void eswtHandleShowCurrentEvent()
     {
+        // If it is popuptextbox and there is no active displayable 
+        // behind textbox default displayable should be shown
+        if(super.isPopup() && topShell != null && 
+            topShell.isVisible() == false && firstDisplayable == true)
+        {
+            topShell.setVisible(true);
+        }
         super.eswtHandleShowCurrentEvent();
         textWrapper.setModifyListener(modListener);
         eswtSetPreferredContentSize(-1, textWrapper
@@ -118,6 +116,13 @@
         textWrapper.setBounds(getContentComp().getClientArea());
     }
 
+    /* (non-Javadoc)
+     */
+    void setFirstDisplayable(boolean first)
+    {
+        firstDisplayable = first;
+    }
+
     /**
      * Get current caret position.
      *
--- a/javauis/lcdui_qt/tsrc/src/com/nokia/openlcdui/mt/alert/AlertTest.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/lcdui_qt/tsrc/src/com/nokia/openlcdui/mt/alert/AlertTest.java	Mon Oct 04 00:10:53 2010 +0300
@@ -329,6 +329,64 @@
         }
 
         alert.setIndicator(null);
+        
+        setIndicatorAdditionalTests();
+    }
+
+    private void setIndicatorAdditionalTests()
+    {
+        boolean failed = false;
+        String s = "";
+        
+        Gauge[] g = 
+        {
+          new Gauge(null, true, 10, 1),      // interactive
+          new Gauge("", false, 10, 1),        // has a label
+          new Gauge("Label", false, 10, 1),   // has a label
+
+          new Gauge(null, false, 10, 1),  // preferred width will be locked
+          new Gauge(null, false, 10, 1),  // preferred height will be locked
+          new Gauge(null, false, 10, 1),  // preferred width and height will be locked
+
+          new Gauge(null, false, 10, 1), // layout will be changed
+          new Gauge(null, false, 10, 1),  // to be added into another Alert
+          new Gauge(null, false, 10, 1),  // to be added into Form
+          new Gauge(null, false, 10, 1), // some Command(s) will be added using addCommand method
+          new Gauge(null, false, 10, 1), // some Command(s) will be added using setDefaultCommand method
+
+          new Gauge(null, false, 10, 1), // ItemCommandListener will be added to
+      };
+
+      g[3].setPreferredSize(5, -1);
+      g[4].setPreferredSize(-1, 5);
+      g[5].setPreferredSize(5, 5);
+      g[6].setLayout(Item.LAYOUT_CENTER);
+      new Alert("Another Alert").setIndicator(g[7]);
+      new Form("Another Form", new Item[]{g[8]});
+      g[9].addCommand(new Command("Command", Command.OK, 0));
+      g[10].setDefaultCommand(new Command("Command", Command.OK, 0));
+      g[11].setItemCommandListener(new ItemCommandListener() 
+      { 
+          public void commandAction(Command c, Item item)
+          {}
+      });
+
+      for(int i=0; i != g.length; ++i) 
+      {
+          try 
+          {
+            new Alert("Test Alert").setIndicator(g[i]);
+            s = "IllegalStateException expected: index = "+i;
+            failed = true;
+          } catch(IllegalArgumentException ise) {
+          }
+      }
+
+      if (failed)
+      {
+          fail("8. " + s);
+      }
+      return; 
     }
 
     /**
--- a/javauis/lcdui_qt/tsrc/src/com/nokia/openlcdui/mt/gauge/GaugeTest.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/lcdui_qt/tsrc/src/com/nokia/openlcdui/mt/gauge/GaugeTest.java	Mon Oct 04 00:10:53 2010 +0300
@@ -89,12 +89,14 @@
     {
         java.util.Vector methodNames = new java.util.Vector();
         methodNames.addElement("testAccessors");
+        methodNames.addElement("gaugeCurrentValuesTest");
         return methodNames;
     }
 
     protected void runTest() throws Throwable
     {
         if(getName().equals("testAccessors")) testAccessors();
+        else if(getName().equals("gaugeCurrentValuesTest")) gaugeCurrentValuesTest();
         else super.runTest();
     }
     /**
@@ -204,4 +206,40 @@
         //print("labeled interactive minimum width: "
         //        + gauge4.getMinimumWidth());
     }
+
+    /**
+     * Tests Non-interactive INDEFINITE Gauge with different current values.
+     * <p>
+    * Test passes if current values of the Gauge will not be changed.
+     * <p>
+    * Test fails if current values of the Gauge will be changed.
+    * <p>
+     */
+    public void gaugeCurrentValuesTest()
+    {
+        Gauge  gaugeObj;
+        int[]  values = {Gauge.CONTINUOUS_IDLE, Gauge.CONTINUOUS_RUNNING,
+                         Gauge.INCREMENTAL_IDLE, Gauge.INCREMENTAL_UPDATING};
+
+        for (int i=0; i != values.length; ++i) 
+        {
+            gaugeObj = new Gauge("MT Gauge", false, Gauge.INDEFINITE, values[i]);
+
+            gaugeObj.setMaxValue(Gauge.INDEFINITE);
+
+            if (gaugeObj.getMaxValue() != Gauge.INDEFINITE) 
+            {
+                String s = "Test FAILED\n Passed: Gauge.INDEFINITE ("+
+                Gauge.INDEFINITE+"), got:" + gaugeObj.getMaxValue();
+                fail("1. "+s);
+            }
+
+            if (gaugeObj.getValue() != values[i]) 
+            {
+                String s = "Test FAILED\n Current value was changed. Was: " +
+                values[i] + ", became: "+gaugeObj.getValue();
+                fail("2. "+s);
+            }
+        }
+    }
 }
--- a/javauis/mmapi_qt/baseline/javasrc.emc/com/nokia/microedition/media/BufferDataSource.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/mmapi_qt/baseline/javasrc.emc/com/nokia/microedition/media/BufferDataSource.java	Mon Oct 04 00:10:53 2010 +0300
@@ -22,6 +22,8 @@
 import javax.microedition.media.protocol.DataSource;
 import javax.microedition.media.protocol.SourceStream;
 import java.io.IOException;
+import javax.microedition.io.Connection;
+import com.nokia.mj.impl.utils.Logger;
 
 /**
  * BufferDataSource is used to read header from DataSource's SourceStream.
@@ -160,6 +162,12 @@
         return iDataSource;
     }
 
+    public Connection getConnection()
+    {
+        Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"BufferDataSource getConnection +");
+        return iDataSource.getConnection();
+    }
+
 }
 // End of File
 
--- a/javauis/mmapi_qt/baseline/javasrc.emc/com/nokia/microedition/media/ManagerImpl.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/mmapi_qt/baseline/javasrc.emc/com/nokia/microedition/media/ManagerImpl.java	Mon Oct 04 00:10:53 2010 +0300
@@ -515,6 +515,7 @@
             throw new IllegalArgumentException("DataSource is null.");
         }
         aSource.connect(); // Ensure that external source is connected.
+        Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"ManagerImpl createInternalPlayer after connect ");
         if (aSource.getStreams() == null ||
                 aSource.getStreams().length == 0)
         {
@@ -536,10 +537,12 @@
         InternalPlayer player = null;
         Enumeration plugins = iPlugIns.elements();
         // Loop through all plugins, stop if player was created
+        Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"ManagerImpl - createinternalplayer - plugins has"+iPlugIns.size());
         while (plugins.hasMoreElements() &&
                 (player == null))
         {
             PlugIn tmp = (PlugIn)plugins.nextElement();
+
             player = tmp.createPlayer(bdc);
         }
 
--- a/javauis/mmapi_qt/baseline/javasrc.mmf/com/nokia/microedition/media/BufferDataSource.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/mmapi_qt/baseline/javasrc.mmf/com/nokia/microedition/media/BufferDataSource.java	Mon Oct 04 00:10:53 2010 +0300
@@ -22,6 +22,8 @@
 import javax.microedition.media.protocol.DataSource;
 import javax.microedition.media.protocol.SourceStream;
 import java.io.IOException;
+import javax.microedition.io.Connection;
+import com.nokia.mj.impl.utils.Logger;
 
 /**
  * BufferDataSource is used to read header from DataSource's SourceStream.
@@ -75,7 +77,9 @@
      */
     public void connect() throws IOException
     {
+        Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"BufferDataSource connect +");
         iDataSource.connect();
+        Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"BufferDataSource connect -");
     }
 
     /**
@@ -150,6 +154,11 @@
         return iDataSource.getControl(aControlType);
     }
 
+    public Connection getConnection()
+    {
+        return iDataSource.getConnection();
+    }
+
 }
 // End of File
 
--- a/javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/ConnectorDataSource.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/ConnectorDataSource.java	Mon Oct 04 00:10:53 2010 +0300
@@ -32,20 +32,20 @@
  */
 public class ConnectorDataSource extends InputStreamDataSource
 {
-    // Connection object.
-    StreamConnection iConnection;
-
     /**
-     * Constructor.
-     * @param aLocator Locator to connect.
-     */
+    * Constructor.
+    * @param aLocator Locator to connect.
+    */
     public ConnectorDataSource(Locator aLocator)
     throws IOException, MediaException
     {
+
         super(aLocator.getLocatorString());
         open(); // open iConnection
+        Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"ConnectorDataSource constructor after open()");
         iSourceStream = new InputStreamSourceStream(
             iConnection.openInputStream());
+        Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"ConnectorDataSource constructor -");
     }
 
     /**
@@ -63,6 +63,7 @@
 
             // Only StreamConnection is supported
             iConnection = (StreamConnection)connection;
+            Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"ConnectorDataSource open()");
         }
         catch (ConnectionNotFoundException cnfe)
         {
@@ -84,6 +85,7 @@
             // or connection was not supported in checkConnection method.
             throw new MediaException(cce.getMessage());
         }
+        Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"ConnectorDataSource open() -");
     }
 
     /**
@@ -100,6 +102,7 @@
             try
             {
                 open();
+                Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"ConnectorDataSource connect() after open()");
                 iSourceStream.setStream(iConnection.openInputStream());
             }
             catch (MediaException me)
@@ -109,6 +112,7 @@
                     "failed to connect to stream, " + me.getMessage());
             }
         }
+        Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"ConnectorDataSource connect() -");
     }
 
     /**
@@ -157,6 +161,7 @@
     {
         // This class does not do additional checks.
     }
+
 }
 // End of File
 
--- a/javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/HttpDataSource.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/HttpDataSource.java	Mon Oct 04 00:10:53 2010 +0300
@@ -23,6 +23,7 @@
 import javax.microedition.io.Connection;
 import javax.microedition.io.HttpConnection;
 import javax.microedition.media.Control;
+import com.nokia.mj.impl.utils.Logger;
 
 /**
  * This class extends ConnectorDataSource and adds http connection
@@ -73,6 +74,7 @@
             if (!iClosed)
             {
                 connect();
+                Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"HttpDataSource seek() after open");
             }
 
             if (iClosed)
--- a/javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/InputStreamDataSource.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/InputStreamDataSource.java	Mon Oct 04 00:10:53 2010 +0300
@@ -22,19 +22,31 @@
 import javax.microedition.media.protocol.DataSource;
 import javax.microedition.media.protocol.SourceStream;
 import java.io.IOException;
+import javax.microedition.io.StreamConnection;
+import com.nokia.mj.impl.utils.Logger;
+import javax.microedition.io.Connection;
+
 
 /**
  * DataSource which has InputStreamSourceStream.
  */
 public class InputStreamDataSource extends DataSource
 {
+    // Connection object.
+    protected StreamConnection iConnection;
+
     // DataSource's stream
     protected InputStreamSourceStream iSourceStream;
 
+
+
     // string that describes the content-type of the media that the source
     // is providing.
     protected String iContentType;
 
+
+
+
     /**
      * Constructor.
      * @param aSourceStream SourceSteam
@@ -158,6 +170,19 @@
         return iSourceStream.getControl("SeekControl");
     }
 
+    /**
+    * public method to connection object in derived classes.
+    * @returns aConnection object
+    */
+    public Connection getConnection()
+    {
+        Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"InputStreamDataSource getConnection +");
+        return iConnection;
+    }
+
+
+
+
 }
 // End of File
 
--- a/javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/InputStreamSeekControl.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/InputStreamSeekControl.java	Mon Oct 04 00:10:53 2010 +0300
@@ -22,6 +22,7 @@
 
 import java.io.IOException;
 import java.io.InputStream;
+import com.nokia.mj.impl.utils.Logger;
 
 /**
  * Class InputStreamSeekControl used to mark and seek the inputstream
@@ -64,12 +65,13 @@
      */
     public void seek(int aWhere) throws IOException
     {
-
+        Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"MMA::InputStreamSeekControl - seek +");
 
         if (iInputStream.markSupported() == true)
         {
             iInputStream.reset();
         }
+        Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"MMA::InputStreamSeekControl - seek -");
     }
 
     public void close()
--- a/javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/PlayerImpl.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/PlayerImpl.java	Mon Oct 04 00:10:53 2010 +0300
@@ -234,7 +234,9 @@
                     try
                     {
                         // wait until actionCompleted( int aError ) is called
+                        Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"PlayerImpl.java : doPrefetch ibefore iLockObject");
                         iLockObject.wait();
+                        Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"PlayerImpl.java : doPrefetch after iLockObject");
                     }
                     catch (InterruptedException ie)
                     {
--- a/javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/SourcePlayer.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/SourcePlayer.java	Mon Oct 04 00:10:53 2010 +0300
@@ -80,6 +80,7 @@
         try
         {
             iDataSource.connect();
+            Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"Sourceplayer doprefetch() after connect ");
         }
         catch (IOException ioe)
         {
@@ -87,6 +88,7 @@
         }
 
         super.doPrefetch();
+        Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"Sourceplayer doprefetch() after connect -");
     }
 
     /**
--- a/javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/animation/AnimationPlayer.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/animation/AnimationPlayer.java	Mon Oct 04 00:10:53 2010 +0300
@@ -43,6 +43,7 @@
 import com.nokia.microedition.media.InputStreamSourceStream;
 import com.nokia.microedition.media.PlayerBase;
 import com.nokia.microedition.media.PlayerListenerImpl;
+import com.nokia.mj.impl.utils.Logger;
 
 public class AnimationPlayer extends PlayerBase implements ESWTinitializeListener
 {
@@ -118,6 +119,7 @@
      */
     public AnimationPlayer(DataSource ds) throws MediaException
     {
+        Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"AnimationPlayer(DataSource ds) +");
         iPlayerListenerImpl= new PlayerListenerImpl(this);
         //TODO check if we can do it in better way
         // this is temporary solution
@@ -150,6 +152,7 @@
             iBackgroundPixel= imageLoader.backgroundPixel;
         }
         populateControl();
+        Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"AnimationPlayer(DataSource ds) -");
 
     }
 
--- a/javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/animation/AnimationPlayerFactory.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/animation/AnimationPlayerFactory.java	Mon Oct 04 00:10:53 2010 +0300
@@ -20,6 +20,8 @@
 package com.nokia.microedition.media.animation;
 
 import java.io.IOException;
+import javax.microedition.io.Connection;
+import javax.microedition.io.HttpConnection;
 
 import javax.microedition.media.MediaException;
 import javax.microedition.media.protocol.DataSource;
@@ -46,6 +48,7 @@
     private static final String ANIMATION_HTTP_PROTOCOL = "http";
     private static final String ANIMATION_HTTPS_PROTOCOL = "https";
     private static final String ANIMATION_FILE_PROTOCOL = "file";
+    private static final String CONTENT_TYPE_HEADER = "Content-Type";
 
     /**
      * From PlugIn
@@ -71,15 +74,26 @@
         } //Since it was not possible to identify the player from content type, identify it from it's header
         else
         {
-            // We need only 6 bytes to identify whether it's GIF image data or not.
-            // But the problem here is that if we will read even a single byte from stream
-            // that stream won't be useful for loading the image data through ImageLoader class
-            // So better solution is to let the ImageLoader.load(InputStream ) get called
-            // if it successfully load the image, then it means that stream is intended for this player only
-            // otherwise it will throw the SWTException, catch it and return properly
+            // This case is for locator for "http://" protocol
+            // get the httpconnection object, and get the content-type header
+            // if the content-type header matches to "image/gif" then invoke animation player.
             try
             {
-                player = new AnimationPlayer(aDataSource);
+                Connection con = aDataSource.getConnection();
+                HttpConnection httpcon = (HttpConnection) con;
+
+                if (con != null)
+                {
+                    String type = httpcon.getHeaderField(CONTENT_TYPE_HEADER);
+                    if (type != null)
+                    {
+                        if (type.equalsIgnoreCase(ANIMATION_CONTENT_TYPE))
+                        {
+                            Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"AnimationPlayerplayerfactory::createPlayer() content type is mage/gif");
+                            player = new AnimationPlayer(aDataSource);
+                        }
+                    }
+                }
             }
             catch (SWTException e)
             {
--- a/javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/protocol/SeekThread.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/protocol/SeekThread.java	Mon Oct 04 00:10:53 2010 +0300
@@ -48,9 +48,13 @@
      */
     public void run()
     {
+        Logger.ELOG(Logger.EJavaMMAPI,
+                    "MMA::seekThread run +");
         try
         {
             iSeekControl.seek(0);
+            Logger.ELOG(Logger.EJavaMMAPI,
+                        "MMA::seekThread run after iSeekControl.seek");
         }
         catch (Exception e)
         {
@@ -63,7 +67,11 @@
         // notify that seek is ready
         synchronized (iWaitObject)
         {
+            Logger.ELOG(Logger.EJavaMMAPI,
+                        "MMA::seekThread run before iWaitObject.notify()");
             iWaitObject.notify();
+            Logger.ELOG(Logger.EJavaMMAPI,
+                        "MMA::seekThread run -");
         }
     }
 }
--- a/javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/protocol/SourceStreamReader.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/protocol/SourceStreamReader.java	Mon Oct 04 00:10:53 2010 +0300
@@ -236,12 +236,37 @@
             {
                 // start new seak thread, thread will notify iWaitObject
                 // when completed
-                (new SeekThread(iWaitObject,
-                                (SeekControl)control)).start();
+                // seek thread will open a new connection in case of http,
+                // and notify here so that read thread is started
+
+                try
+                {
+                    synchronized (iWaitObject)
+                    {
+                        Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"SourceStreamReader::  read() before creating seekthread thread id =  "+Thread.currentThread().getName());
+                        (new SeekThread(iWaitObject,
+                                        (SeekControl)control)).start();
+                        Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"SourceStreamReader::read() - after seekthread before wait");
+
+                        iWaitObject.wait();
+                        Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"SourceStreamReader::read() - after seekthread after wait");
+                    }
+                }
+                catch (InterruptedException ex)
+                {
+                    Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"SourceStreamReader::read() - InterruptedException exception");
+                }
+
+                t1 = new Thread(this);
+                t1.start();
+
+
+
             }
             else
             {
                 // stream is not seekable, so informing native object
+                Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"SourceStreamReader::  read() before  _write ");
                 _write(iHandle, iEventSourceHandle, new byte[ 0 ], 0,
                        ERR_EOF, iPlayerHandle);
             }
--- a/javauis/mmapi_qt/baseline/javasrc/javax/microedition/media/protocol/DataSource.java	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/mmapi_qt/baseline/javasrc/javax/microedition/media/protocol/DataSource.java	Mon Oct 04 00:10:53 2010 +0300
@@ -20,6 +20,7 @@
 
 import javax.microedition.media.Controllable;
 import java.io.IOException;
+import javax.microedition.io.Connection;
 
 abstract public class DataSource implements Controllable
 {
@@ -42,6 +43,8 @@
 
     public abstract SourceStream[] getStreams();
 
+    public abstract Connection getConnection();
+
     public String getLocator()
     {
         return iSourceLocator;
--- a/javauis/mmapi_qt/baseline/src.nga/cmmasurfacewindow.cpp	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/mmapi_qt/baseline/src.nga/cmmasurfacewindow.cpp	Mon Oct 04 00:10:53 2010 +0300
@@ -184,7 +184,6 @@
          aRect.iBr.iX, aRect.iBr.iY);
 
     iContentRect = aRect;
-    LOG1(EJavaMMAPI,EInfo,"CMMASurfaceWindow::SetDrawRect aRect %d",iContentRect);
     if (iDisplay)
     {
         // iDisplay->UIGetCallback( *this,
--- a/javauis/mmapi_qt/baseline/src/cmmaaudioplayer.cpp	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/mmapi_qt/baseline/src/cmmaaudioplayer.cpp	Mon Oct 04 00:10:53 2010 +0300
@@ -221,6 +221,7 @@
         iSourceStreams[ 0 ]->ReadAllL();
     }
     // CMMASourceStream will notify with ReadCompleted
+    LOG(EJavaMMAPI, EInfo, "CMMAAudioPlayer::PrefetchL -");
 }
 
 const TDesC& CMMAAudioPlayer::Type()
--- a/javauis/mmapi_qt/baseline/src/cmmavideocontrol.cpp	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/mmapi_qt/baseline/src/cmmavideocontrol.cpp	Mon Oct 04 00:10:53 2010 +0300
@@ -332,7 +332,7 @@
     case com_nokia_microedition_media_control_VideoControl_SET_DISPLAY_SIZE:
     {
         TSize displaySize(aPropertyA, aPropertyB);
-        LOG1(EJavaMMAPI, EInfo, "CMMAVideoControl::statepropertyl %d",displaySize);
+        LOG2(EJavaMMAPI, EInfo, "CMMAVideoControl::statepropertyl %d,%d",displaySize.iWidth,displaySize.iHeight);
         display->SetDisplaySizeL(displaySize);
         LOG(EJavaMMAPI, EInfo, "CMMAVideoControl::SetDisplayProperty:: setDisplaySizeL Completed");
         // inform java side
--- a/javauis/nokiauiapi_qt/.classpath	Fri Sep 17 08:28:21 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry excluding="**/.svn/" kind="src" path="src"/>
-	<classpathentry kind="src" path="src_j2me"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="var" path="CLDC_JAR"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
--- a/javauis/nokiauiapi_qt/.project	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/nokiauiapi_qt/.project	Mon Oct 04 00:10:53 2010 +0300
@@ -6,12 +6,15 @@
 	</projects>
 	<buildSpec>
 		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
+			<name>com.nokia.carbide.cdt.builder.carbideCPPBuilder</name>
 			<arguments>
 			</arguments>
 		</buildCommand>
 	</buildSpec>
 	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.cdt.core.cnature</nature>
+		<nature>org.eclipse.cdt.core.ccnature</nature>
+		<nature>com.nokia.carbide.cdt.builder.carbideCPPBuilderNature</nature>
+		<nature>com.nokia.carbide.cdt.builder.carbideSBSv2BuilderNature</nature>
 	</natures>
 </projectDescription>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/nokiauiapi_qt/build/build.pro	Mon Oct 04 00:10:53 2010 +0300
@@ -0,0 +1,19 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: Generated file - do not edit manually
+#
+TEMPLATE = subdirs
+SUBDIRS += nokiauiapiqt/javanokiaui.pro 
+SUBDIRS += softindicatorplugin/javasoftindicatorplugin.pro 
+BLD_INF_RULES.prj_extensions += "prj_extensions" 
--- a/javauis/nokiauiapi_qt/build/build.xml	Fri Sep 17 08:28:21 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-<!--
-#
-# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-#
--->
-
-<project name="javanokiaui" default="deploy" basedir=".">
-
-    <description>
-        Builds Nokiauiapi
-    </description>
-
-    <import file="../../../build/utilities.xml"/>
-
-    <!-- Needed by the utilities.xml. See the description form the utilities.xml
-         file -->
-
-    <property name="java.src.paths" value="../src:../src_j2me"/>
-
-
-
-    <property name="javah.classnames" value="com.nokia.mid.ui.internal.OS"/>
-
-    <target name="create.public.api.jar">
-         <omj.public.apis includes="com/nokia/mid/ui/TactileFeedback.class, 
-                                    com/nokia/mid/ui/DeviceControl.class"/>
-    </target>
-
-
-</project>
--- a/javauis/nokiauiapi_qt/build/bwins/javanokiauiu.def	Fri Sep 17 08:28:21 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-EXPORTS
-	?jni_lookup@@YAP6AXXZPBD@Z @ 1 NONAME ; void (*)(void) jni_lookup(char const *)
-
--- a/javauis/nokiauiapi_qt/build/eabi/javanokiauiu.def	Fri Sep 17 08:28:21 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-EXPORTS
-	_Z10jni_lookupPKc @ 1 NONAME
-
--- a/javauis/nokiauiapi_qt/build/javanokiaui.pro	Fri Sep 17 08:28:21 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,44 +0,0 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-#
-
-TEMPLATE=lib
-TARGET=javanokiaui
-CONFIG += omj java
-
-
-QT += core
-
-
-symbian {
-    
-
-    include(../library/nokiauiapi.pri)
-    
-    LIBS += -lcone
-    LIBS += -ltouchfeedback
-
-    
-}
-
-include(../../../build/omj.pri)
-
-
-
-
-
-
-
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/nokiauiapi_qt/build/nokiauiapiqt/build.xml	Mon Oct 04 00:10:53 2010 +0300
@@ -0,0 +1,44 @@
+<!--
+#
+# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+-->
+
+<project name="javanokiaui" default="deploy" basedir=".">
+
+    <description>
+        Builds Nokiauiapi
+    </description>
+
+    <import file="../../../../build/utilities.xml"/>
+
+    <!-- Needed by the utilities.xml. See the description form the utilities.xml
+         file -->
+
+    <property name="java.src.paths" value="../../javasrc:../../javasrc_j2me"/>
+
+    <property name="javah.classnames" value="com.nokia.mid.ui.internal.OS"/>
+
+    <target name="create.public.api.jar">
+         <omj.public.apis includes="com/nokia/mid/ui/TactileFeedback.class, 
+                                    com/nokia/mid/ui/DeviceControl.class,
+                                    com/nokia/mid/ui/SoftNotificationException.class, 
+                                    com/nokia/mid/ui/SoftNotification.class, 
+                                    com/nokia/mid/ui/SoftNotificationListener.class"/>
+    
+    </target>
+
+
+</project>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/nokiauiapi_qt/build/nokiauiapiqt/bwins/javanokiauiu.def	Mon Oct 04 00:10:53 2010 +0300
@@ -0,0 +1,3 @@
+EXPORTS
+	?jni_lookup@@YAP6AXXZPBD@Z @ 1 NONAME ; void (*)(void) jni_lookup(char const *)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/nokiauiapi_qt/build/nokiauiapiqt/eabi/javanokiauiu.def	Mon Oct 04 00:10:53 2010 +0300
@@ -0,0 +1,3 @@
+EXPORTS
+	_Z10jni_lookupPKc @ 1 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/nokiauiapi_qt/build/nokiauiapiqt/javanokiaui.pro	Mon Oct 04 00:10:53 2010 +0300
@@ -0,0 +1,41 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+TEMPLATE=lib
+TARGET=javanokiaui
+CONFIG += omj java
+
+QT += core
+
+symbian {
+    
+    CONFIG +=hb
+   
+    INCLUDEPATH += ../../inc ../../../../inc
+
+    HEADERS += ../../inc/CSoftNotification.h ../../inc/autorelease.h
+    SOURCES += ../../src/os.cpp ../../src/CSoftNotification.cpp
+   
+    LIBS += -lcone
+    LIBS += -ltouchfeedback
+    LIBS += -lHbCore
+    LIBS += -lbafl
+    LIBS += -lws32
+    LIBS += -lapparc
+    LIBS += -lapgrfx  
+}
+
+include(../../../../build/omj.pri)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/nokiauiapi_qt/build/softindicatorplugin/javasoftindicatorplugin.pro	Mon Oct 04 00:10:53 2010 +0300
@@ -0,0 +1,54 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+TEMPLATE=lib
+TARGET=javasoftindicatorplugin
+CONFIG += plugin 
+QT += core
+symbian : plugin {
+    
+        CONFIG +=hb
+                
+        INCLUDEPATH += ../../softindicatorplugin/inc ../../../../inc
+                
+        HEADERS += ../../softindicatorplugin/inc/javasoftindicator.h ../../softindicatorplugin/inc/javasoftindicatorplugin.h
+        SOURCES += ../../softindicatorplugin/src/javasoftindicator.cpp ../../softindicatorplugin/src/javasoftindicatorplugin.cpp
+                
+        TARGET.EPOCALLOWDLLDATA = 1
+        TARGET.CAPABILITY = ALL -TCB
+
+        PLUGIN_STUB_PATH = /resource/plugins/indicators
+        pluginstub.sources = $${TARGET}.dll
+        pluginstub.path = $$PLUGIN_STUB_PATH
+    
+        DEPLOYMENT += pluginstub
+    
+        qtplugins.path = $$PLUGIN_STUB_PATH
+        qtplugins.sources += qmakepluginstubs/$${TARGET}.qtplugin
+                
+        for(qtplugin, qtplugins.sources):BLD_INF_RULES.prj_exports += "./$$qtplugin  z:$$qtplugins.path/$$basename(qtplugin)"    
+                
+        LIBS += -lHbCore
+        LIBS += -lxqservice
+        LIBS += -lws32
+        LIBS += -lapparc
+        LIBS += -lapgrfx
+        LIBS += -lefsrv
+                
+    
+    include(../../../../build/symbian_uids.pri)
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/nokiauiapi_qt/build/subsystem.mk	Mon Oct 04 00:10:53 2010 +0300
@@ -0,0 +1,23 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+include $(JAVA_SRC_ROOT)/build/Makefile.defs
+
+COMPONENTS = \
+        nokiauiapiqt \
+        softindicatorplugin
+
+include ${JAVA_SRC_ROOT}/build/Makefile.subsystem
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/nokiauiapi_qt/inc/CSoftNotification.h	Mon Oct 04 00:10:53 2010 +0300
@@ -0,0 +1,128 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Nokia Corporation - initial implementation
+ *******************************************************************************/
+
+#ifndef CSOFTNOTIFICATION_H
+#define CSOFTNOTIFICATION_H
+
+#include <e32base.h>
+#include <jni.h>
+#include <HbIndicatorsymbian.h>
+
+NONSHARABLE_CLASS(CSoftNotification) : public CBase,
+        MHbIndicatorSymbianObserver
+    {
+public:
+  
+    /**
+     * Static constructor
+     */
+    static CSoftNotification* NewL(TInt aAppId, TInt aNotificationId);
+
+    /**
+     * Destructor.
+     */
+    virtual ~CSoftNotification();
+
+public:
+    // From MHbIndicatorSymbianObserver
+
+    /**
+     * Dynamic soft notification was activated by user.
+     */
+    void IndicatorUserActivated(const TDesC &aType,
+            CHbSymbianVariantMap &aData);
+
+public:
+    // New functions
+
+    /**
+     * Add a custom soft notification. 
+     */
+    bool ShowSoftNotificationL();
+
+    /**
+     * Cancels custom soft notification.
+     */
+    void RemoveSoftNotificationL();
+
+    /**
+     * Set a text for a soft notification.
+     *
+     * @param aSingularText singular text for soft notification
+     * @param aPluralText plural text for soft notification
+     */
+    void SetTextL(const TDesC& aPrimaryText, const TDesC& aSecondaryText);
+    
+    /**
+     * Set an image path for a soft notification.
+     *
+     * @param aImagePath image path for soft notification
+     */
+    void SetImagePathL(const TDesC& aImagePath);
+
+    /**
+     * Returns the notification id.
+     *
+     * @return notification id
+     */
+    TInt Id();
+
+    /**
+     * Set Java peer observer instance for event callbacks.
+     * Note: the observer has to be a global weak reference.
+     *
+     * @param aPeer Java peer observer
+     * @param aMethodId Callback method identifier.
+     * @param aJniEnv JNI environment
+     */
+    void SetPeerObserver(jobject aPeer, jmethodID aMethodId, JNIEnv* aJniEnv);
+
+private:
+    // Constructors
+    /**
+     * C++ constructor.
+     *
+     * @param aAppId View activation application id.
+     * @param aNotificationId Notification id.
+     */
+    CSoftNotification(TInt aAppId, TInt aNotificationId);
+
+    /**
+     * 2nd phase constructor.
+     */
+    void ConstructL();
+
+private:
+    // New methods
+
+    /**
+     * Set assigned member data to custom notification parameters
+     *
+     * @param aParam custom soft notification params to fill
+     */
+    CHbSymbianVariant* NotificationParamsL();
+
+private:
+    // Data
+
+    CHbIndicatorSymbian* iIndicator;
+    TUid iMidletId;
+    TInt iNotificationId;
+    HBufC* iPrimaryText;
+    HBufC* iSecondaryText;
+    HBufC* iImagePath;
+    jobject iPeer;
+    jmethodID iMethodId;
+    JNIEnv* iJniEnv;
+    };
+
+#endif // CSOFTNOTIFICATION_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/nokiauiapi_qt/inc/autorelease.h	Mon Oct 04 00:10:53 2010 +0300
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Nokia Corporation - initial implementation
+ *******************************************************************************/
+
+#ifndef NOKIAUIAUTORELEASE_H
+#define NOKIAUIAUTORELEASE_H
+
+/**
+ * Helper class to automatically call ReleaseStringChars for a Java
+ * string chars object obtained from a call to GetStringChars.
+ */
+class AutoReleaseStringChars
+{
+public:
+    AutoReleaseStringChars( JNIEnv* aJniEnv, jstring aString, const jchar* aPointer )
+        : mJniEnv( aJniEnv ), mString( aString ), mPointer( aPointer )
+        {}
+    virtual ~AutoReleaseStringChars()
+        {
+        mJniEnv->ReleaseStringChars( mString, mPointer );
+        }
+protected:
+    JNIEnv*      mJniEnv;
+    jstring      mString;
+    const jchar* mPointer;
+};
+
+#endif // NOKIAUIAUTORELEASE_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/nokiauiapi_qt/javasrc/.classpath	Mon Oct 04 00:10:53 2010 +0300
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry excluding="javasrc_j2me/" kind="src" path=""/>
+	<classpathentry kind="src" path="javasrc_j2me"/>
+	<classpathentry kind="var" path="CLDC_JAR" sourcepath="/eswt_source"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/nokiauiapi_qt/javasrc/.project	Mon Oct 04 00:10:53 2010 +0300
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>nokiauiapiqt</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.team.cvs.core.cvsnature</nature>
+	</natures>
+	<linkedResources>
+		<link>
+			<name>javasrc_j2me</name>
+			<type>2</type>
+			<location>R:/sf/app/java/javauis/nokiauiapi_qt/javasrc_j2me</location>
+		</link>
+	</linkedResources>
+</projectDescription>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/nokiauiapi_qt/javasrc/com/nokia/mid/ui/DeviceControl.java	Mon Oct 04 00:10:53 2010 +0300
@@ -0,0 +1,338 @@
+/*
+* Copyright (c) 2006-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Provides methods for controlling vibrator and screen backlight.
+*
+*/
+
+
+package com.nokia.mid.ui;
+
+import org.eclipse.swt.internal.qt.OS;
+import org.eclipse.swt.widgets.Internal_PackageSupport;
+import org.eclipse.swt.internal.extension.DisplayExtension;
+
+/**
+ * <p>
+ * DeviceControl provides a collection of methods to control some of the special
+ * features available in mobile devices, e.g., vibrator, screen (LCD)
+ * backlight, and screen saver appearance.
+ * <p>
+ * This class is thread safe.
+ * @version 1.0
+ * @since 1.0
+ */
+
+public class DeviceControl
+{
+    // error string for negative duration
+    private static final String ERR_NEGATIVE_DURATION_STRING =
+        "Negative duration";
+    private static int inactivityTime;
+    private static int vibraDuration;
+    private static boolean vibraSupported;
+
+    /**
+     * Private constructor. This class can't be instantiated.
+     */
+    private DeviceControl()
+    {
+    }
+    /**
+     * Function return the time since the last user activity in seconds.
+     * @since 1.4
+     */
+    public static int getUserInactivityTime()
+    {
+        synchronized (DeviceControl.class)
+        {
+            if (DisplayExtension.getDisplayInstance() != null)
+            {
+                Internal_PackageSupport.getDisplayInstance().syncExec(new Runnable()
+                {
+                    public void run()
+                    {
+                        inactivityTime = OS.MobileDevice_getUserInactivityTime(
+                                             Internal_PackageSupport.initializeMobileDevice(
+                                                 Internal_PackageSupport.getDisplayInstance()));
+                    }
+                });
+            }
+        }
+        return inactivityTime;
+    }
+    /**
+     *  Function reset user inactivity time. Thus, if the screen saver should be
+     *  wholly disabled, it is needed to call the function repeatedly for example in a
+     *  separate thread. The delay between two calls should be smaller than
+     *  the time-out of the screensaver (the time-out may be for example 15 seconds
+     *  or more depending on the used device).
+     *  @since 1.4
+     */
+    public static void resetUserInactivityTime()
+    {
+        synchronized (DeviceControl.class)
+        {
+            if (DisplayExtension.getDisplayInstance() != null)
+            {
+                Internal_PackageSupport.getDisplayInstance().syncExec(new Runnable()
+                {
+                    public void run()
+                    {
+                        OS.MobileDevice_resetUserInactivityTime(
+                            Internal_PackageSupport.initializeMobileDevice(
+                                Internal_PackageSupport.getDisplayInstance()));
+                    }
+                });
+            }
+        }
+    }
+
+    /**
+     *  Activates and deactivates lights on the device; the function
+     *  can also be used for preventing screen saver appearance. Parameter
+     *  num indicates the number of the device light to control.
+     *  Currently only one num parameter is specified:
+     *  num value 0 is used for controlling the screen backlight.
+     *  Parameter level is a value between 0-100
+     *  indicating the light brightness. In many implementations
+     *  there in only two levels: lights on and off. Value 0 indicates
+     *  a setting for lights off (monochrome displays) or other
+     *  minimum brightness setting (color displays), all other level
+     *  values (1-100) are used for setting the lights on, possibly
+     *  with different brightness levels depending on the value. A more
+     *  higher level value always results either the same brightness setting
+     *  as a lower one, or a more brighter setting. For many products
+     *  passing values 1-100 will just turn the lights on.
+     *  <p>
+     *  Note: Since in some devices key presses may turn on some device lights,
+     *  the light settings may be changed also by the system.
+     *  <p>
+     *  This function may also be used to prevent screen saver appearance
+     *  (supported in S60 devices starting from S60 3rd Ed FP1,
+     *  except for some early FP1 devices). Calling this function once
+     *  will delay the screen saver appearance but does not disable it permanently.
+     *  Thus, if the screen saver should be wholly disabled,
+     *  it is needed to call the function repeatedly for example in a
+     *  separate thread. The delay between two calls should be smaller than
+     *  the time-out of the screensaver (the time-out may be for example 15 seconds
+     *  or more depending on the used device).
+     *
+     *  @param num is the number or id for light, 0 is used for display
+     *  backlight, other numbers are currently left unspecified
+     *  @param level the lighting level 0-100. 0 means "off" or other
+     *  minimum lighting setting. For many devices greater
+     *  than 0 value just means "light on".
+     *  @throws java.lang.IllegalArgumentException if light num is not
+     *  supported or level is not between 0-100.
+     *  @since 1.0
+     */
+    public static void setLights(int aNum, int aLevel)
+    {
+        synchronized (DeviceControl.class)
+        {
+            if (aNum != 0)
+            {
+                throw new IllegalArgumentException("Light num is not supported");
+            }
+            if (aLevel < 0 || aLevel > 100)
+            {
+                throw(new IllegalArgumentException("Level not between 0 and 100"));
+            }
+            final int level = aLevel;
+
+            if (DisplayExtension.getDisplayInstance() != null)
+            {
+                Internal_PackageSupport.getDisplayInstance().syncExec(new Runnable()
+                {
+                    public void run()
+                    {
+                        OS.MobileDevice_setLight(Internal_PackageSupport.initializeMobileDevice(
+                                                     Internal_PackageSupport.getDisplayInstance()), level);
+                    }
+                });
+            }
+        }
+    }
+
+    /**
+     *  Does flashing lights effect for specific duration.
+     *  This is a generic method for doing implementation specific light
+     *  flashing effect. This could be used as feedback e.g. in games.
+     *  If the device is not capable of doing the effect the method call
+     *  silently returns. In most devices there is at least screen backlight
+     *  and different LEDs that could be used for the effect. There might
+     *  be maximum limit in implementation for the duration: implementation
+     *  stops automatically the effect after maximum duration is reached.
+     *  When the flashing lights effect ends the implementation sets the
+     *  lights back to the light state the device was before the
+     *  method call.
+     *
+     *  @param duration duration in milliseconds the effect should be
+     *  active
+     *  @throws java.lang.IllegalArgumentException if duration < 0
+     *  @since 1.0
+     */
+    public static void flashLights(long aDuration)
+    {
+        synchronized (DeviceControl.class)
+        {
+            if (aDuration < 0)
+            {
+                throw new IllegalArgumentException(ERR_NEGATIVE_DURATION_STRING);
+            }
+
+            final int duration;
+            if (aDuration > java.lang.Integer.MAX_VALUE)
+            {
+                duration = java.lang.Integer.MAX_VALUE;
+            }
+            else
+            {
+                duration =(int)aDuration;
+            }
+            if (DisplayExtension.getDisplayInstance() != null)
+            {
+                Internal_PackageSupport.getDisplayInstance().syncExec(new Runnable()
+                {
+                    public void run()
+                    {
+                    	System.out.println("Java Nokia UI API flashLights duration = "+duration);
+                        OS.MobileDevice_flashLights(
+                            Internal_PackageSupport.initializeMobileDevice(
+                                Internal_PackageSupport.getDisplayInstance()),duration);
+                        System.out.println("Java Nokia UI API End flashLights ");
+                    }
+                });
+            }
+        }
+
+    }
+
+    /**
+     *  Activates the vibra device with given duration and frequency.
+     *  Device vibra feedback can be used, for example, as tactile feedback
+     *  effect e.g. in games. The frequency of the vibra device
+     *  can be controlled with freq parameter. The frequency is a logical
+     *  number between 0 to 100, value 100 being the maximum frequency,
+     *  value 0 always means no vibra, value 1 always needs to give some
+     *  effect. If a device doesn't support different frequencies then
+     *  the just frequency allowed by device is used.
+     *  <p>
+     *  Parameter duration is used to indicate duration of vibra
+     *  in milliseconds. Method won't block for the vibra operation.
+     *  There is some maximum limit in implementation for the
+     *  duration. Duration values that exceed this limit result a
+     *  maximum vibration effect.
+     *  <p>
+     *  If the method is called during a previous vibra operation activated
+     *  from this method, the previous vibra operation is stopped and the new
+     *  vibra device is activated with the new given parameters.
+     *  <p>
+     *  IllegalStateException will be thrown if the freq is not 0 and
+     *  if device doesn't allow vibra to be used, for example,
+     *  it is common that when the device is being charged in desk stand or
+     *  there is incoming call that vibra operation is not allowed.
+     *  IllegalStateException will be thrown if there
+     *  is no vibra capability in the device.
+     *  <p>
+     *  Note that if the frequency is 0, and the device doesn't have vibra
+     *  capability IllegalStateException is thrown. This means that method
+     *  call <code>DeviceControl.doVibra(0,0);</code> can be used to detect
+     *  whether vibra is supported (IllegalStateException not thrown)
+     *  or not (IllegalStateException thrown) without any vibra operation
+     *  being done even if it is supported.
+     *  @param freq the frequency of the vibra device. Value 0 can be used
+     *  for detection whether there is vibra device or not. 100 means
+     *  maximum frequency value of specific system. Value 1 must always
+     *  result a minimum non-zero vibra operation.
+     *  @param duration in milliseconds the duration the vibra device is
+     *  active
+     *  @throws java.lang.IllegalStateException For freq values 1-100:
+     *  the use of vibra device isn't allowed or the system doesn't have
+     *  vibra device. For frequency value 0: the device doesn't have vibra
+     *  device.
+     *  @throws java.lang.IllegalArgumentException if duration or freq is
+     *  < 0, or freq is > 100.
+     *  @since 1.0
+     */
+    public static void startVibra(int aFreq, long aDuration)
+    {
+        synchronized (DeviceControl.class)
+        {
+            if ((aFreq < 0) || (aFreq > 100) || (aDuration < 0))
+            {
+                throw new java.lang.IllegalArgumentException();
+
+            }
+            vibraDuration = (int)aDuration;
+            if (aDuration > java.lang.Integer.MAX_VALUE)
+            {
+                vibraDuration = java.lang.Integer.MAX_VALUE;
+            }
+            if (aFreq == 0)
+            {
+                // frequency 0 disables vibration
+                vibraDuration = 0;
+            }
+            if (DisplayExtension.getDisplayInstance() != null)
+            {
+                Internal_PackageSupport.getDisplayInstance().syncExec(new Runnable()
+                {
+                    public void run()
+                    {
+                    	System.out.println("Java Nokia UI API start vibra with duration = "+vibraDuration);
+                        vibraSupported = OS.MobileDevice_vibration(
+                                             Internal_PackageSupport.initializeMobileDevice(
+                                                 Internal_PackageSupport.getDisplayInstance()),vibraDuration);
+                        System.out.println("Java Nokia UI API End vibra ");
+                    }
+                });
+            }
+            if (!vibraSupported)
+            {
+                throw new java.lang.IllegalStateException();
+            }
+        }
+    }
+
+    /**
+     *  Stops the vibra device. This method is for manually stopping vibra
+     *  operation activated with
+     *  {@link DeviceControl#startVibra(int freq, long duration)}
+     *  method.
+     *  If the vibra device is not active the method silently returns.
+     *  @since 1.0
+     */
+    public static void stopVibra()
+    {
+        synchronized (DeviceControl.class)
+        {
+            if (DisplayExtension.getDisplayInstance() != null)
+            {
+                Internal_PackageSupport.getDisplayInstance().syncExec(new Runnable()
+                {
+                    public void run()
+                    {
+                        vibraSupported = OS.MobileDevice_vibration(
+                                             Internal_PackageSupport.initializeMobileDevice(
+                                                 Internal_PackageSupport.getDisplayInstance()),0);
+                    }
+                });
+            }
+        }
+    }
+
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/nokiauiapi_qt/javasrc/com/nokia/mid/ui/SoftNotification.java	Mon Oct 04 00:10:53 2010 +0300
@@ -0,0 +1,339 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+package com.nokia.mid.ui;
+
+
+/**
+ * <p>The <code>SoftNotification</code> is a class to manage soft
+ * notifications. Soft notifications are reminders that inform the user of events
+ * that have occurred in the user's absence, or while the user was busy with some
+ * application. Text, and also graphics, can be used to communicate the message
+ * to the user. Soft notifications are displayed as pop-ups in device home screen
+ * (idle view).
+ * Soft notifications are persistent and restarting the device does not delete
+ * created soft notifications from the home screen.</p>
+ *
+ * <p>The user can respond to the soft notification by using the softkeys. The
+ * softkey 1 is used for activating a function, for example opening a message
+ * that has arrived. Application that created the soft notification will be activated
+ * when the soft notification is accepted by the user. The softkey 2 is used to
+ * discard the notification without taking any further action.</p>
+ *
+ * <p>The application that launched a soft notification can control it and also
+ * discard it. It is possible to use the Applications key during a soft
+ * notification; in that case, the soft notification disappears, but reappears
+ * when the user returns to the device home screen, unless the application
+ * responsible for the notification has discarded it.</p>
+ *
+ * <h3>Grouping soft notifications</h3>
+ *
+ * <p>Soft notifications can be displayed for the user in two different appearances:
+ * <li> <b>Ungrouped</b> soft notification (left figure): These notifications
+ * contain one piece of information each. In ungrouped soft notification there can
+ * be one or two lines of text and an image visible.
+ * Ungrouped appearance is used when there's
+ * only one active soft notification or the topmost soft notification does not
+ * support grouping.
+ * <li> <b>Grouped</b> soft notification (right figure): If there are several
+ * soft notifications on the screen and they support grouping, the notifications
+ * are grouped and shown as a list of notifications.
+ * Only one line of text is shown per a notification and there are no images visible.
+ * The user can pick up one notification at a time and react
+ * to it. If user discards the notification group, then all the shown notifications
+ * are discarded and are not to be shown again.</p>
+ *
+ * <p><img src="images/ungrouped.jpg" alt="Image of ungrouped soft notification.">
+ * <img src="images/grouped.jpg" alt="Image of grouped soft notification."></p>
+ *
+ * <p>Soft notifications created through this API may be grouped with other
+ * platform notifications if all of them supports grouping. A soft notification
+ * supports grouping if <code>groupText</code> is given in
+ * {@link #setText(String text, String groupText)}</p>
+ *
+ * <h3>Persistent notifications</h3>
+ * <p>Soft notifications are persistent meaning that when an application
+ * has created a notification and set it to the home screen, the notification
+ * exists in the home screen until:
+ * <li>User accepts the notification,
+ * <li>User dismisses the notification, or
+ * <li>Application removes the notification</p>
+ *
+ * <p>A soft notification stays on the device home screen even if the application
+ * is closed or the device is restarted.</p>
+ *
+ * <p>Accepting (selecting) a soft notification created by an application causes
+ * this application to be activated in the following ways:
+ * <li>If the application was running on the background, it will be set to
+ * the foreground.
+ * <li>If the application was running and had registered a listener
+ * for the notification,
+ * {@link SoftNotificationListener#notificationSelected(SoftNotification)}
+ * is called.
+ * <li>If the application is not running, it will be started and set to the
+ * foreground.</p>
+ *
+ * <p><b>Notice</b> that accepting a notification belonging to a closed application
+ * causes only the application to be started but does not
+ * generate any listener events for the application. This is because there cannot
+ * be any listeners registered by the closed application.
+ * Thus, when an application is started by a notification, the application has
+ * to decide which view is shown for the user without having the information about
+ * the selected notification.</p>
+ *
+ * <p>Dismissing a soft notification does not bring the application to
+ * the foreground or start the application neither. However, if a
+ * listener has been set,
+ * {@link SoftNotificationListener#notificationDismissed(SoftNotification)}
+ * is called.</p>
+ *
+ * <p>Because soft notifications are persistent, they will remain on the home screen
+ * even if the application is closed. It is possible to get access to these
+ * notifications later when the application is restarted.
+ * For accessing notifications later, the application has to store the IDs of
+ * the notifications to a permanent memory (for example, RecordStore).
+ * When the application is
+ * restarted, the application may recreate those notifications by using the
+ * stored IDs.</p>
+ *
+ * <p><b>Notice</b> that since it is possible that the user has dismissed notifications
+ * when the application was closed, it is not possible to know whether the
+ * recreated notification still exist on the device home screen.
+ * In many cases it may be worthile to first remove all those notifications
+ * from the screen and then add only the needed ones back to the screen.</p>
+ *
+ *
+ * <h3>Example of usage</h3>
+ *
+ * <code style="white-space: pre">
+ *class SoftNoteExample implements SoftNotificationListener
+ *    {
+ *    private SoftNotification iSoftNotification;
+ *
+ *    public SoftNoteExample()
+ *        {
+ *        iSoftNotification = SoftNotification.newInstance();
+ *        iSoftNotification.setListener( this );
+ *        }
+ *
+ *    public void Show1NewMail() throws SoftNotificationException
+ *        {
+ *        // Read image e.g. from the MIDlet JAR package or filesystem
+ *        byte[] image = readImage( "mail.png" );
+ *
+ *        // Supports grouping since groupText is given here.
+ *        iSoftNotification.setText( "You have 1 new mail", "1 new mail" );
+ *        iSoftNotification.setSoftkeyLabels( "Show", "Exit" );
+ *        iSoftNotification.setImage( image );
+ *        iSoftNotification.post();
+ *        }
+ *
+ *    public void notificationSelected(SoftNotification notification)
+ *        {
+ *        // called when user selects the soft notification
+ *        }
+ *
+ *    public void notificationDismissed(SoftNotification notification)
+ *        {
+ *        // called when user dismisses the soft notification
+ *        }
+ *
+ *    private byte[] readImage( String aImageName )
+ *        {
+ *        // Read image e.g. from the MIDlet JAR package or filesystem.
+ *        byte[] imageData = ...
+ *        //...
+ *        return imageData;
+ *        }
+ *    }</code>
+ */
+public abstract class SoftNotification
+{
+
+    /**
+     * Hidden default constructor.
+     *
+     * @see #newInstance()
+     * @see #newInstance(int notificationId)
+     */
+    protected SoftNotification()
+    {
+    }
+
+    /**
+     * Returns a new instance of SoftNotification class with a reference to
+     * previous soft notification instance.
+     *
+     * <p>Identification is used to access a soft notification created by another
+     * instance of SoftNotification. If the provided identification is valid and
+     * such soft notification exists, it can be updated and removed through
+     * this instance. If the identification is not valid or does not exist,
+     * it will be ignored and a new soft notification is created as defined in
+     * {@link #newInstance()}.</p>
+     *
+     * @param notificationId Identification of previous soft notification.
+     * @return An instance of SoftNotification class.
+     * @see #getId()
+     */
+    public static SoftNotification newInstance(int notificationId)
+    {
+        return new SoftNotificationImpl(notificationId);
+    }
+
+    /**
+     * <p>Returns a new instance of SoftNotification class. This instance's
+     * identification will be a nonvalid negative value until
+     * {@link #post()} is called.</p>
+     *
+     * @return an instance of SoftNotification class.
+     */
+    public static SoftNotification newInstance()
+    {
+        return new SoftNotificationImpl();
+    }
+
+    /**
+     * <p>Get soft notification identification of this instance. Soft notifications are
+     * persistent, so client should store the identification, if it wants to access the
+     * soft notification from another instance e.g. after device is restarted.</p>
+     *
+     * <p><b>Notice</b> that identification might change during the lifetime of the
+     * instance if {@link #post()} is called.</p>
+     *
+     * @return Soft notification identification.
+     * @see #newInstance(int notificationId)
+     */
+    public abstract int getId();
+
+    /**
+     * <p>Shows a new soft notification or updates the content of previously posted
+     * notification. If the application did not specify a valid identification in
+     * the notification construction,
+     * then new identification will be generated on first call to post(). If
+     * previously posted soft notification does not exist, a new one is created
+     * and a new identification will be generated. Client needs to set the attributes
+     * shown in the soft notification before calling post or the default values
+     * will be used. This call does not reset assigned text, image or softkeys.</p>
+     *
+     * <p><b>Notice</b> that identification of the soft notification may change every
+     * time the function is called. So when needed, it is recommended to ask
+     * the latest id from the notification by using {@link #getId()} function.</p>
+     *
+     * @throws SoftNotificationException Thrown if posting operation fails.
+     */
+    public abstract void post() throws SoftNotificationException;
+
+    /**
+     * <p>Removes the posted soft notification from the device home screen. If the
+     * soft notification has not been posted or it has already been removed,
+     * this call does nothing. Remove is automatically called when
+     * the user accepts or dismisses the soft notification.</p>
+     *
+     * @throws SoftNotificationException Thrown if removing the note fails.
+     */
+    public abstract void remove() throws SoftNotificationException;
+
+    /**
+     * <p>Sets listener for the soft notification. Listener is notified when the
+     * user accepts or dismisses the soft notification. Setting a new listener will
+     * overwrite the previous listener. Listener can be removed by setting it to
+     * <code>null</code>.</p>
+     *
+     * @param listener Listener for the soft notification.
+     */
+    public abstract void setListener(SoftNotificationListener listener);
+
+    /**
+     * <p>Sets the text field to be displayed in the soft notification. The
+     * platform may truncate the text to a suitable size to fit into the soft
+     * notification. If the text is not set before calling {@link #post()}, the
+     * default value "" is used. An ungrouped soft notification has multiple lines
+     * for the text, but a grouped notification has only one line.
+     * Therefore the text assigned for a grouped notification should be
+     * shorter. Multiple lines can be created by adding a line break
+     * (character <code>'\n'</code>) inside the string.</p>
+     *
+     * <p>A notification supports grouping if <code>groupText</code> is
+     * other than <code>null</code> or an empty string (<code>""</code>).</p>
+     *
+     * <p><b>Notice</b> that the modified soft notification data is not visible for
+     * the user until {@link #post()} is called.</p>
+     *
+     * @param text A text to be displayed in the soft notification when ungrouped
+     *        soft notification is shown.
+     * @param groupText A text be to displayed in the soft notification when there are
+     *        also other notifications visible (grouped form). The notification
+     *        will not support grouping if <code>null</code> or an empty string
+     *        (<code>""</code>) is used.
+     *
+     * @throws SoftNotificationException Thrown if setting text fails.
+     */
+    public abstract void setText(String text, String groupText)
+    throws SoftNotificationException;
+
+    /**
+     * <p>Sets the textual labels for the softkeys. The platform may truncate the
+     * text to a suitable size to fit to the softkey labels, so a relatively
+     * short texts are preferred for the labels. If labels are not provided,
+     * then the default softkeys will be used (Show & Exit).</p>
+     *
+     * <p>The functionalities of these softkeys remain always the same even if
+     * their texts are changed. Softkey 1 (Show) opens
+     * up the application and dismisses the soft notification. Softkey 2 (Exit)
+     * dismisses the soft notification.</p>
+     *
+     * <p><b>Notice</b> that the modified soft notification data is not visible for
+     * the user until {@link #post()} is called.</p>
+     *
+     * @param softkey1Label Text for the softkey 1.
+     * @param softkey2Label Text for the softkey 2.
+     *
+     * @throws SoftNotificationException Thrown if setting softkeys fails.
+     */
+    public abstract void setSoftkeyLabels(String softkey1Label, String softkey2Label)
+    throws SoftNotificationException;
+
+    /**
+     * <p>Sets an image to be displayed in the soft notification. The image can be
+     * in any format that the platform's image decoder or SVG engine is able to
+     * decode (for example, JPG, GIF, PNG, and SVG (even SVGS and MBM) images may
+     * be supported in the platform). Image mask is used when available. </p>
+     *
+     * <p>The image is given as a byte array, for example the data may be read directly
+     * from the file system or MIDlet JAR package.</p>
+     *
+     * <p>Images will be scaled to fit in the soft notification pop-up as the image
+     * area of the notification is relatively small. For saving resources in scaling,
+     * the size of the image should be kept small (preferably no larger than
+     * 300x300 px).</p>
+     *
+     * <p>The function can also be used for removing an already set image from
+     * the soft notification. This can be done by setting <code>null</code> instead
+     * of any actual image.</p>
+     *
+     * <p><b>Notice</b> that the modified soft notification data is not visible for
+     * the user until {@link #post()} is called.</p>
+     *
+     * @param image image to be displayed in the soft notification or
+     *        <code>null</code> if any existing image should be removed
+     *        from the notification.
+     *
+     * @throws SoftNotificationException Thrown if setting image fails.
+     */
+    public abstract void setImage(byte[] image) throws SoftNotificationException;
+    
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/nokiauiapi_qt/javasrc/com/nokia/mid/ui/SoftNotificationException.java	Mon Oct 04 00:10:53 2010 +0300
@@ -0,0 +1,80 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+package com.nokia.mid.ui;
+
+public class SoftNotificationException extends Exception
+{
+
+
+    private int errorCode;
+
+    /**
+     * Default constructor is not allowed.
+     */
+    protected SoftNotificationException() {}
+
+    /**
+     * Constructs an exception instance with a textual information.
+     *
+     * @param info human readable information about the exception.
+     */
+    public SoftNotificationException(String info)
+    {
+        super(info);
+    }
+
+    /**
+     * Constructs an exception instance with a textual information and the
+     * error code of the native call.
+     *
+     * @param info human readable information about the exception.
+     * @param errorCode the error code received from native side.
+     */
+    public SoftNotificationException(String info, int errorCode)
+    {
+        super(info);
+        this.errorCode = errorCode;
+    }
+
+    /**
+     * Constructs human readable textual information.
+     *
+     * @return String the human readable textual information.
+     */
+    public String toString()
+    {
+        if (errorCode == 0)
+        {
+            return super.toString();
+        }
+        else
+        {
+            return super.toString() + " Native error: " + errorCode;
+        }
+    }
+
+    /**
+     * Returns with the native error code.
+     *
+     * @return Native error code.
+     */
+    public int getErrorCode()
+    {
+        return errorCode;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/nokiauiapi_qt/javasrc/com/nokia/mid/ui/SoftNotificationImpl.java	Mon Oct 04 00:10:53 2010 +0300
@@ -0,0 +1,353 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ *
+ */
+
+package com.nokia.mid.ui;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+
+import org.eclipse.swt.internal.extension.DisplayExtension;
+import org.eclipse.swt.widgets.Internal_PackageSupport;
+
+import com.nokia.mid.ui.internal.OS;
+import com.nokia.mid.ui.SoftNotificationException;
+import com.nokia.mid.ui.SoftNotificationListener;
+import com.nokia.mj.impl.fileutils.FileUtility;
+import com.nokia.mj.impl.rt.support.Finalizer;
+import com.nokia.mj.impl.rt.support.ApplicationInfo;
+
+/**
+ * SoftNotificationImpl implements the functionality specified in
+ * com.nokia.mid.ui.SoftNotification class.
+ */
+final class SoftNotificationImpl extends com.nokia.mid.ui.SoftNotification {
+
+	// Native CSoftNotification handle
+	private int iSoftNotificationHandle = 0;
+
+	// Observer of this class set by the API user. An array is used to allow
+	// listener synchronization.
+	private SoftNotificationListener[] iListener;
+
+	// Listener event when user accepted notification
+	private final static int EVENT_ACCEPT = 1;
+
+	// Listener event when user dismissed notification
+	private final static int EVENT_DISMISS = 2;
+
+	// Error message prefix for exceptions.
+	private final static String ERROR_MESSAGE_PREFIX = "Failed to ";
+
+	// The class will have native resources so register it for
+	// finalization.
+	private Finalizer mFinalizer;
+
+	private int err;
+
+	private int id;
+	
+	private int midletUid;
+
+	/**
+	 * Constructor. New instance with old identifier.
+	 * 
+	 * @param aNotificationId
+	 *            Identification of previous soft notification.
+	 */
+	public SoftNotificationImpl(int aNotificationId) {
+		initialize(aNotificationId);
+	}
+
+	/**
+	 * Constructor. New instance.
+	 */
+	public SoftNotificationImpl() {
+		initialize(0);
+	}
+
+	/**
+	 * Initializes the instance.
+	 * 
+	 * @param aNotificationId
+	 *            Id of the soft notification.
+	 */
+	protected void initialize(int aNotificationId) {
+		final int iNotificationId = aNotificationId;
+		iListener = new SoftNotificationListener[1];
+
+		Runnable r = new Runnable() {
+			public void run() {
+				String uidString = ApplicationInfo.getInstance().getUid().toString();
+				// removing "[" and "]" brackets
+				uidString = uidString.substring(1,uidString.length()-1);
+				// converting to decimal
+				midletUid =(int)Long.parseLong(uidString,16);
+				iSoftNotificationHandle = OS.createNativePeer(midletUid, iNotificationId,
+						SoftNotificationImpl.this);
+			}
+		};
+		// if display is created already, execute it in UI thread no matter
+		// what thread it is called from. Otherwise assume LCDUI application is
+		// called
+		// and create a display. eSWT is not allowed to call before display
+		// creation
+		if (DisplayExtension.getDisplayInstance() != null) {
+			DisplayExtension.getDisplayInstance().syncExec(r);
+		} else {
+			com.nokia.mj.impl.nokialcdui.LCDUIInvoker
+					.eSWTUIThreadRunnerSyncExec(r);
+		}
+
+		if (iSoftNotificationHandle <= 0) {
+			throw new OutOfMemoryError();
+		}
+
+		mFinalizer = ((mFinalizer != null) ? mFinalizer : new Finalizer() {
+			public void finalizeImpl() {
+				close();
+			}
+		});
+	}
+
+	/**
+	 * Called when the object is finalized by the garbage collector.
+	 */
+	public void close() {
+		if (DisplayExtension.getDisplayInstance() != null) {
+			Internal_PackageSupport.getDisplayInstance().syncExec(new Runnable() {
+				public void run() {
+					if (mFinalizer != null) {
+						OS.destroy(iSoftNotificationHandle);
+					}
+					mFinalizer = null;
+				}
+			});
+		}
+	}
+
+	/**
+	 * Notification callback, called from the native side.
+	 * 
+	 * @param aEventArg
+	 *            Occurred event.
+	 */
+	private void notificationCallback(int aEventArg) {
+		// Synchronize the listener usage since the user may want to set it
+		// to null during execution of this function.
+		synchronized (iListener) {
+			SoftNotificationListener listener = iListener[0];
+
+			if (listener != null) {
+				if (aEventArg == EVENT_ACCEPT) {
+					listener.notificationSelected(this);
+				} else if (aEventArg == EVENT_DISMISS) {
+					listener.notificationDismissed(this);
+				}
+			}
+		}
+	}
+
+	/**
+	 * Checks the given error value. Throws SoftNotificationException if the
+	 * given error value is other than NativeError.KErrNone.
+	 * 
+	 * @param aError
+	 *            Error value to be checked.
+	 * @param aErrorMessage
+	 *            Message to be included in the exception.
+	 */
+	private final void checkError(int aError, String aErrorMessage)
+			throws SoftNotificationException {
+		if (aError != 0) {
+			throw new SoftNotificationException(ERROR_MESSAGE_PREFIX
+					+ aErrorMessage, aError);
+		}
+	}
+
+	// Functions from the base class.
+
+	/**
+	 * See class SoftNotification for comments
+	 */
+	public int getId() {
+		if (DisplayExtension.getDisplayInstance() != null) {
+			Internal_PackageSupport.getDisplayInstance().syncExec(
+					new Runnable() {
+						public void run() {
+							id = 0;
+							id = OS.getId(iSoftNotificationHandle);
+						}
+					});
+		}
+		return id;
+	}
+
+	/**
+	 * See class SoftNotification for comments
+	 */
+	public void post() throws SoftNotificationException {
+		if (DisplayExtension.getDisplayInstance() != null) {
+			Internal_PackageSupport.getDisplayInstance().syncExec(
+					new Runnable() {
+						public void run() {
+							err = 0;
+							err = OS
+									.showSoftNotification(iSoftNotificationHandle);
+						}
+					});
+		}
+		checkError(err, "add soft notification");
+	}
+
+	/**
+	 * See class SoftNotification for comments
+	 */
+	public void remove() throws SoftNotificationException {
+		if (DisplayExtension.getDisplayInstance() != null) {
+			Internal_PackageSupport.getDisplayInstance().syncExec(
+					new Runnable() {
+						public void run() {
+							err = 0;
+							err = OS
+									.removeSoftNotification(iSoftNotificationHandle);
+						}
+					});
+		}
+		checkError(err, "remove notification");
+	}
+
+	/**
+	 * See class SoftNotification for comments
+	 */
+	public void setListener(SoftNotificationListener aListener) {
+		// Synchronize the listener setting since the user may set it
+		// to null during it is used elsewhere in this class.
+		synchronized (iListener) {
+			iListener[0] = aListener;
+		}
+	}
+
+	/**
+	 * See class SoftNotification for comments
+	 */
+	public void setText(String aPrimaryText, String aSecondaryText)
+			throws SoftNotificationException {
+		final String iPrimaryText = aPrimaryText;
+		final String iSecondaryText = aSecondaryText;
+
+		if (DisplayExtension.getDisplayInstance() != null) {
+			Internal_PackageSupport.getDisplayInstance().syncExec(
+					new Runnable() {
+						public void run() {
+							err = 0;
+							err = OS.setText(iSoftNotificationHandle,
+									iPrimaryText == null ? "" : iPrimaryText,
+									iSecondaryText == null ? ""
+											: iSecondaryText);
+						}
+					});
+		}
+		checkError(err, "set note text");
+	}
+
+	/**
+	 * See class SoftNotification for comments
+	 */
+	public void setSoftkeyLabels(String aSoftkey1Label, String aSoftkey2Label)
+			throws SoftNotificationException {
+		int err = 0;
+		checkError(err, "set softkeys");
+	}
+
+	private String stringReplace(String source, String searchStr,
+			String replacementStr) {
+		StringBuffer strBuffer = new StringBuffer();
+		int pos = source.indexOf(searchStr);
+
+		while (pos != -1) {
+			strBuffer.append(source.substring(0, pos)).append(replacementStr);
+			source = source.substring(pos + searchStr.length());
+			pos = source.indexOf(searchStr);
+		}
+		strBuffer.append(source);
+		return strBuffer.toString();
+	}
+
+	/**
+	 * See class SoftNotification for comments
+	 */
+	public void setImage(byte[] aImageData) throws SoftNotificationException {
+		if (aImageData != null) {
+			final byte[] iImageData = aImageData;
+			if (DisplayExtension.getDisplayInstance() != null) {
+				Internal_PackageSupport.getDisplayInstance().syncExec(
+						new Runnable() {
+							public void run() {
+								err = 0;
+								String imagePath = "";
+								try {
+									String directoryPath = ApplicationInfo
+											.getInstance().getRootPath();
+									// Replace "\private\102033e6\apps" with
+									// "resource\apps\java"
+									directoryPath = stringReplace(
+											directoryPath, "private", "public");
+									directoryPath = directoryPath
+											+ "softnotification\\"
+											+ midletUid + "_"
+											+ getId();
+									String imageName = midletUid
+											+ "_" + getId();
+									FileUtility target = new FileUtility(
+											directoryPath);
+									if (!target.exists()) {
+										target.mkdirs();
+									}
+									target = new FileUtility(directoryPath
+											+ "\\" + imageName);
+									if (!target.exists()) {
+										target.createNewFile();
+									}
+									OutputStream fos = target
+											.openOutputStream();
+									ByteArrayInputStream in = new ByteArrayInputStream(
+											iImageData);
+									byte[] buf = new byte[1024];
+									int len;
+									while ((len = in.read(buf)) > 0) {
+										fos.write(buf, 0, len);
+									}
+									in.close();
+									fos.close();
+									target = null;
+									imagePath = directoryPath + "\\"
+											+ imageName;
+								} catch (IOException ex) {
+									ex.printStackTrace();
+								} catch (Throwable t) {
+									t.printStackTrace();
+								}
+								err = OS.setImagePath(iSoftNotificationHandle,
+										imagePath);
+							}
+						});
+			}
+		}
+		checkError(err, "set image");
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/nokiauiapi_qt/javasrc/com/nokia/mid/ui/SoftNotificationListener.java	Mon Oct 04 00:10:53 2010 +0300
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+package com.nokia.mid.ui;
+
+/**
+ * <code>SoftNotificationListener</code> interface is used by applications which
+ * need callbacks from soft notifications. Listener will get a notification when the
+ * soft notification is either selected or dismissed by the user. Listener
+ * interface can be registered with
+ * {@link SoftNotification#setListener(SoftNotificationListener)} method.
+ *
+ * @see SoftNotification
+ */
+public interface SoftNotificationListener
+{
+
+    /**
+     * Indicates that a soft notification was selected by the user. The
+     * platform calls {@link SoftNotification#remove()} before
+     * notificationSelected() is called. Application that posted the soft
+     * notification is activated before the listener will get the notification.
+     *
+     * @param notification A notification object identifying the soft
+     *          notification being responded to by the user. The MIDlet must
+     *          implement the functionality to be performed when the
+     *          notification is selected.
+     */
+    public abstract void notificationSelected(SoftNotification notification);
+
+    /**
+     * Indicates that a soft notification was dismissed by the user. The
+     * platform calls {@link SoftNotification#remove()} before
+     * notificationDismissed() is called.
+     *
+     * @param notification A notification object identifying the soft
+     *          notification being responded to by the user. The application must
+     *          implement the functionality to be performed when the soft
+     *          notification is dismissed, it is not required to do anything.
+     */
+    public abstract void notificationDismissed(SoftNotification notification);
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/nokiauiapi_qt/javasrc_j2me/com/nokia/mid/ui/TactileFeedback.java	Mon Oct 04 00:10:53 2010 +0300
@@ -0,0 +1,461 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+package com.nokia.mid.ui;
+
+import org.eclipse.swt.widgets.Internal_PackageSupport;
+import com.nokia.mid.ui.internal.OS;
+
+
+/**
+ * This class is a Java extension to support tactile feedback (audio, vibra,
+ * piezo, etc.) on touch-enabled devices. Tactile feedback is meant to give user
+ * more clear feeling of touch events, like tapping and dragging. The actual
+ * physical tactile feedback depends on the device tactile feedback
+ * implementation, hardware and device settings. A device may implement the
+ * feedback with different hardware methods, for example, vibra, audio or piezo
+ * hardware.
+ * <p>
+ * The API supports both LCDUI and eSWT UI toolkits.
+ * <p>
+ * Using this class is safe when a device does not support tactile feedback. In
+ * this case methods of this class can be called but this has no effect.
+ * <p>
+ * Tactile feedback can be generated in two ways:
+ * <ul>
+ * <li>By producing direct feedback from the application.</li>
+ * <li>By adding feedback areas to area registry, in which case the feedback
+ * will be produced by the tactile feedback system automatically when the
+ * defined screen area (with defined feedback) is touched.</li>
+ * </ul>
+ * <p>
+ * Direct feedback is given instantly with {@link #directFeedback
+ * directFeedback} specifying the feedback type. Direct feedback can be used
+ * when the user action is not just a tap in a certain area. For example if the
+ * user drags from one menu item to the other the application may give direct
+ * feedback to emphasize focus traverse.
+ * <p>
+ * In case of area registry for eSWT Control, the registry needs to be updated
+ * every time when the size or position of a UI component changes, or when e.g.
+ * a state of a UI component changes in such way that feedback type also
+ * changes. Typically the area update may be implemented in
+ * <code>controlMoved</code> and <code>controlResized</code> methods of
+ * <code>ControlListener</code> interface.
+ * <p>
+ * In case of area registry for LCDUI Canvas or CustomItem no further actions
+ * are required to update tactile feedback areas when a CustomItem is moved in a
+ * Form or when a Canvas is changed due to e.g. orientation switch.
+ * <p>
+ * There are quite tight latency requirements for tactile feedback, and in most
+ * cases feedback should be triggered in less than 30ms from the time when user
+ * touched the screen. For the area registry the feedback system is responsible
+ * of fulfilling this requirement, but in case of direct feedback it is the
+ * responsibility of the user of this API.
+ * <p>
+ * The tactile feedback has 2 different styles: Basic and Sensitive. Each type
+ * is defined in the device settings, not by this API. Each style of feedback is
+ * used in different cases. Typically Basic style is used to emphasize the tap
+ * event, while Sensitive style is used mostly at dragging operations, to
+ * emphasize focus traverse, text selection, etc. Choosing a specific style for
+ * each use case in up to developer, however it is good to follow the behavior
+ * of native applications.
+ * <p>
+ * The goal of the API is to enable user-created UI components to have tactile
+ * feedback. The UI component types supported by the API are limited to
+ * user-defined components only: <code>javax.microedition.lcdui.Canvas</code>,
+ * <code>javax.microedition.lcdui.CustomItem</code>,
+ * <code>org.eclipse.swt.widgets.Control</code>. Other UI components (i.e. List,
+ * TextBox, etc.) get default tactile feedback automatically from the platform.
+ *
+ * @version 0.001
+ * @since 1.2
+ */
+
+public class TactileFeedback
+{
+
+    /**
+     * Constant for specifying basic tactile feedback style. Actual style
+     * behaviour is set through device settings.
+     */
+    public static final int FEEDBACK_STYLE_BASIC = 1;
+
+    /**
+     * Constant for specifying sensitive tactile feedback style. Actual style
+     * behaviour is set through device settings.
+     */
+    public static final int FEEDBACK_STYLE_SENSITIVE = 2;
+
+    private final String invalidFeedbackStyleMsg = "Invalid feedback style specified";
+    private final String invalidControlTypeMsg = "Invalid object provided for tactile feedback registration";
+
+    private static final int TYPE_INVALID = 0;
+    private static final int TYPE_ESWT = 1;
+    private static final int TYPE_LCDUI = 2;
+    private static boolean feedbackEnabled;
+
+    /**
+     * Constructs tactile feedback engine object. The object may be used in both
+     * LCDUI and eSWT java UI toolkits. TactileFeedback object must be
+     * constructed before using any tactile feedback methods.
+     */
+    public TactileFeedback()
+    {
+    }
+
+    /**
+     * Triggers direct tactile feedback of the specified style.
+     *
+     * @param style
+     *            The style of the direct feedback. Use predefined values
+     *            FEEDBACK_STYLE_BASIC, FEEDBACK_STYLE_SENSITIVE. Actual style
+     *            behavior is set through device settings.
+     * @throws IllegalArgumentException
+     *             if the style parameter has invalid type.
+     */
+    public void directFeedback(int style) throws IllegalArgumentException
+    {
+        if ((style != FEEDBACK_STYLE_BASIC)
+                && (style != FEEDBACK_STYLE_SENSITIVE))
+            throw new IllegalArgumentException(invalidFeedbackStyleMsg);
+        if (org.eclipse.swt.widgets.Display.getCurrent() == null)
+        {
+            final int fStyle = style;
+            com.nokia.mj.impl.nokialcdui.LCDUIInvoker
+            .eSWTUIThreadRunnerSyncExec(new Runnable()
+            {
+                public void run()
+                {
+                    OS.MTouchFeedback_InstantFeedback(fStyle);
+                }
+            });
+
+        }
+        else
+        {
+            OS.MTouchFeedback_InstantFeedback(style);
+        }
+    }
+
+    /**
+     * Queries the device if it supports tactile feedback. It is safe to use
+     * this class even if the device does not support tactile feedback. Methods
+     * of this class can be called but this has no effect.
+     *
+     * @return true if the device supports tactile feedback, false otherwise.
+     */
+    public boolean isTouchFeedbackSupported()
+    {
+        if (org.eclipse.swt.widgets.Display.getCurrent() == null)
+        {
+            com.nokia.mj.impl.nokialcdui.LCDUIInvoker
+            .eSWTUIThreadRunnerSyncExec(new Runnable()
+            {
+
+                public void run()
+                {
+                    feedbackEnabled = OS
+                                      .MTouchFeedback_TouchFeedbackSupported();
+                }
+            });
+        }
+        else
+        {
+            feedbackEnabled = OS.MTouchFeedback_TouchFeedbackSupported();
+        }
+        return feedbackEnabled;
+    }
+
+    /**
+     * Registers area within a UI component for tactile feedback. If areas
+     * overlap then the feedback is given from the last registered area.
+     * {@link #moveFeedbackAreaToFirstPriority moveFeedbackAreaToFirstPriority}
+     * can be used to bring a certain area covered by another area into action.
+     * If an area with specified <code>id</code> is already registered it is
+     * updated. When updating an existing area there is no need to unregister it
+     * before re-registering again with new coordinates and/or feedback style.
+     * The area specified by <code>x</code>, <code>y</code>, <code>width</code>
+     * and <code>height</code> parameters may be located on the screen just
+     * partially.
+     *
+     * <p>
+     * In case of area registry for eSWT Control, the registry needs to be
+     * updated every time when the size or position of a UI component changes,
+     * or when e.g. a state of a UI component changes in such way that feedback
+     * type also changes. Typically the area update may be implemented in
+     * <code>controlMoved</code> and <code>controlResized</code> methods of
+     * <code>ControlListener</code> interface. The update of an area may be
+     * implemented by calling registerFeedbackArea with the same area id but new
+     * coordinates and/or feedback style.
+     * <p>
+     * In case of area registry for LCDUI Canvas or CustomItem no further
+     * actions are required to update tactile feedback areas when a CustomItem
+     * is moved in a Form or when a Canvas is changed due to e.g. orientation
+     * switch.
+     *
+     * @param uiObject
+     *            The UI component for tactile feedback registration. Valid
+     *            object types are: <code>javax.microedition.lcdui.Canvas</code>
+     *            , <code>javax.microedition.lcdui.CustomItem</code>,
+     *            <code>org.eclipse.swt.widgets.Control</code>.
+     * @param id
+     *            Id of the new tactile feedback area to be registered. Id's are
+     *            used to identify particular tactile feedback area within one
+     *            UI component. Id's do not need to be consecutive numbers.
+     * @param x
+     *            x-coordinate of the top-left corner of tactile feedback
+     *            rectangle to register.
+     * @param y
+     *            y-coordinate of the top-left corner of tactile feedback
+     *            rectangle to register.
+     * @param width
+     *            Width of tactile feedback rectangle to register.
+     * @param height
+     *            Height of tactile feedback rectangle to register.
+     * @param style
+     *            The style of the feedback for specified area. Use predefined
+     *            values <code>FEEDBACK_STYLE_BASIC</code>,
+     *            <code>FEEDBACK_STYLE_SENSITIVE</code>. Actual style behaviour
+     *            is defined through device settings.
+     * @throws IllegalArgumentException
+     *             if the uiObject parameter has invalid type.
+     * @throws IllegalArgumentException
+     *             if the style parameter has invalid type.
+     */
+    public void registerFeedbackArea(Object uiObject, int id, int x, int y,
+                                     int width, int height, int style) throws IllegalArgumentException
+    {
+        int type = controlType(uiObject);
+        if (type == TYPE_INVALID)
+            throw new IllegalArgumentException(invalidControlTypeMsg);
+
+        if ((style != FEEDBACK_STYLE_BASIC)
+                && (style != FEEDBACK_STYLE_SENSITIVE))
+            throw new IllegalArgumentException(invalidFeedbackStyleMsg);
+
+        int controlHandle = getControlHandle(uiObject);
+        if (type == TYPE_LCDUI)
+        {
+            final int fControlHandle = controlHandle;
+            final int fId = id;
+            final int fX = x;
+            final int fY = y;
+            final int fWidth = width;
+            final int fHeight = height;
+            final int fStyle = style;
+            com.nokia.mj.impl.nokialcdui.LCDUIInvoker
+            .eSWTUIThreadRunnerSyncExec(new Runnable()
+            {
+
+                public void run()
+                {
+                    OS.MTouchFeedback_SetFeedbackArea(fControlHandle,
+                                                      fId, fX, fY, fWidth, fHeight, fStyle);
+                }
+            });
+        }
+        else
+        {
+            OS.MTouchFeedback_SetFeedbackArea(controlHandle, id, x, y, width,
+                                              height, style);
+        }
+    }
+
+    /**
+     * Unregisters tactile feedback area within a UI component.
+     *
+     * @param uiObject
+     *            The UI component for tactile feedback area de-registration.
+     *            Valid object types are:
+     *            <code>javax.microedition.lcdui.Canvas</code>,
+     *            <code>javax.microedition.lcdui.CustomItem</code>,
+     *            <code>org.eclipse.swt.widgets.Control</code>.
+     * @param id
+     *            Id of the tactile feedback area to be unregistered. Id's are
+     *            used to identify particular tactile feedback area within one
+     *            UI component. If given id was not registered by
+     *            {@link #registerFeedbackArea registerFeedbackArea} then the
+     *            call has no effect.
+     * @throws IllegalArgumentException
+     *             if the uiObject parameter has invalid type.
+     */
+    public void unregisterFeedbackArea(Object uiObject, int id)
+    throws IllegalArgumentException
+    {
+
+        int type = controlType(uiObject);
+        if (type == TYPE_INVALID)
+            throw new IllegalArgumentException(invalidControlTypeMsg);
+
+        int controlHandle = getControlHandle(uiObject);
+        if (type == TYPE_LCDUI)
+        {
+            final int fControlHandle = controlHandle;
+            final int fId = id;
+            com.nokia.mj.impl.nokialcdui.LCDUIInvoker
+            .eSWTUIThreadRunnerSyncExec(new Runnable()
+            {
+
+                public void run()
+                {
+                    OS.MTouchFeedback_RemoveFeedbackArea(
+                        fControlHandle, fId);
+                }
+            });
+        }
+        else
+        {
+            OS.MTouchFeedback_RemoveFeedbackArea(controlHandle, id);
+        }
+
+    }
+
+    /**
+     * Removes all tactile feedback for a UI component.
+     *
+     * @param uiObject
+     *            The UI component for tactile feedback area de-registration.
+     *            Valid object types are:
+     *            <code>javax.microedition.lcdui.Canvas</code>,
+     *            <code>javax.microedition.lcdui.CustomItem</code>,
+     *            <code>org.eclipse.swt.widgets.Control</code>.
+     * @throws IllegalArgumentException
+     *             if the uiObject parameter has invalid type.
+     */
+    public void removeFeedbackForComponent(Object uiObject)
+    {
+        if (isTouchFeedbackSupported() == false)
+            return;
+
+        int type = controlType(uiObject);
+        if (type == TYPE_INVALID)
+            throw new IllegalArgumentException(invalidControlTypeMsg);
+
+        int controlHandle = getControlHandle(uiObject);
+
+        if (type == TYPE_LCDUI)
+        {
+            final int fControlHandle = controlHandle;
+            com.nokia.mj.impl.nokialcdui.LCDUIInvoker
+            .eSWTUIThreadRunnerSyncExec(new Runnable()
+            {
+
+                public void run()
+                {
+                    OS.MTouchFeedback_RemoveFeedbackForControl(fControlHandle);
+                }
+            });
+        }
+        else
+        {
+            OS.MTouchFeedback_RemoveFeedbackForControl(controlHandle);
+        }
+
+    }
+
+    /**
+     * Moves the specified tactile feedback area to first priority. Priority is
+     * significant in case of overlapping tactile feedback areas. If the tactile
+     * feedback styles of registered areas are different, the feedback from
+     * first-priority area will be given.
+     *
+     * @param uiObject
+     *            The UI component for tactile feedback area de-registration.
+     *            Valid object types are:
+     *            <code>javax.microedition.lcdui.Canvas</code>,
+     *            <code>javax.microedition.lcdui.CustomItem</code>,
+     *            <code>org.eclipse.swt.widgets.Control</code>.
+     * @param id
+     *            Id of the tactile feedback area to be unregistered. Id's are
+     *            used to identify particular tactile feedback area within one
+     *            UI component. If given id was not registered by
+     *            {@link #registerFeedbackArea registerFeedbackArea} then the
+     *            call has no effect.
+     * @throws IllegalArgumentException
+     *             if the uiObject parameter has invalid type.
+     */
+    public void moveFeedbackAreaToFirstPriority(Object uiObject, int id)
+    {
+        if (isTouchFeedbackSupported() == false)
+            return;
+
+        int type = controlType(uiObject);
+        if (type == TYPE_INVALID)
+            throw new IllegalArgumentException(invalidControlTypeMsg);
+
+        int controlHandle = getControlHandle(uiObject);
+        if (type == TYPE_LCDUI)
+        {
+            final int fControlHandle = controlHandle;
+            final int fId = id;
+            com.nokia.mj.impl.nokialcdui.LCDUIInvoker
+            .eSWTUIThreadRunnerSyncExec(new Runnable()
+            {
+
+                public void run()
+                {
+                    OS.MTouchFeedback_MoveFeedbackAreaToFirstPriority(
+                        fControlHandle, fId);
+                }
+            });
+        }
+        else
+        {
+            OS.MTouchFeedback_MoveFeedbackAreaToFirstPriority(
+                controlHandle, id);
+        }
+
+    }
+
+
+    private int controlType(Object obj)
+    {
+        if ((obj instanceof javax.microedition.lcdui.Canvas)
+                || (obj instanceof javax.microedition.lcdui.CustomItem))
+        {
+            return TYPE_LCDUI;
+        }
+        else if ((obj instanceof org.eclipse.swt.widgets.Control))
+        {
+            return TYPE_ESWT;
+        }
+        return TYPE_INVALID;
+    }
+
+    private int getControlHandle(Object uiObject)
+    {
+        int controlHandle = 0;
+        org.eclipse.swt.widgets.Control eSwtControl = null;
+        if (uiObject instanceof javax.microedition.lcdui.Canvas
+                || uiObject instanceof javax.microedition.lcdui.CustomItem)
+        {
+            eSwtControl = com.nokia.mj.impl.nokialcdui.LCDUIInvoker
+                          .getEswtControl(uiObject);
+        }
+        else if (uiObject instanceof org.eclipse.swt.widgets.Control)
+        {
+            eSwtControl = (org.eclipse.swt.widgets.Control) uiObject;
+        }
+
+        if (eSwtControl != null)
+        {
+            controlHandle = Internal_PackageSupport.topHandle(eSwtControl);
+        }
+        return controlHandle;
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/nokiauiapi_qt/javasrc_j2se/com/nokia/mid/ui/TactileFeedback.java	Mon Oct 04 00:10:53 2010 +0300
@@ -0,0 +1,462 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+package com.nokia.mid.ui;
+
+import org.eclipse.swt.widgets.Internal_PackageSupport;
+import com.nokia.mid.ui.internal.OS;
+
+;
+
+/**
+ * This class is a Java extension to support tactile feedback (audio, vibra,
+ * piezo, etc.) on touch-enabled devices. Tactile feedback is meant to give user
+ * more clear feeling of touch events, like tapping and dragging. The actual
+ * physical tactile feedback depends on the device tactile feedback
+ * implementation, hardware and device settings. A device may implement the
+ * feedback with different hardware methods, for example, vibra, audio or piezo
+ * hardware.
+ * <p>
+ * The API supports both LCDUI and eSWT UI toolkits.
+ * <p>
+ * Using this class is safe when a device does not support tactile feedback. In
+ * this case methods of this class can be called but this has no effect.
+ * <p>
+ * Tactile feedback can be generated in two ways:
+ * <ul>
+ * <li>By producing direct feedback from the application.</li>
+ * <li>By adding feedback areas to area registry, in which case the feedback
+ * will be produced by the tactile feedback system automatically when the
+ * defined screen area (with defined feedback) is touched.</li>
+ * </ul>
+ * <p>
+ * Direct feedback is given instantly with {@link #directFeedback
+ * directFeedback} specifying the feedback type. Direct feedback can be used
+ * when the user action is not just a tap in a certain area. For example if the
+ * user drags from one menu item to the other the application may give direct
+ * feedback to emphasize focus traverse.
+ * <p>
+ * In case of area registry for eSWT Control, the registry needs to be updated
+ * every time when the size or position of a UI component changes, or when e.g.
+ * a state of a UI component changes in such way that feedback type also
+ * changes. Typically the area update may be implemented in
+ * <code>controlMoved</code> and <code>controlResized</code> methods of
+ * <code>ControlListener</code> interface.
+ * <p>
+ * In case of area registry for LCDUI Canvas or CustomItem no further actions
+ * are required to update tactile feedback areas when a CustomItem is moved in a
+ * Form or when a Canvas is changed due to e.g. orientation switch.
+ * <p>
+ * There are quite tight latency requirements for tactile feedback, and in most
+ * cases feedback should be triggered in less than 30ms from the time when user
+ * touched the screen. For the area registry the feedback system is responsible
+ * of fulfilling this requirement, but in case of direct feedback it is the
+ * responsibility of the user of this API.
+ * <p>
+ * The tactile feedback has 2 different styles: Basic and Sensitive. Each type
+ * is defined in the device settings, not by this API. Each style of feedback is
+ * used in different cases. Typically Basic style is used to emphasize the tap
+ * event, while Sensitive style is used mostly at dragging operations, to
+ * emphasize focus traverse, text selection, etc. Choosing a specific style for
+ * each use case in up to developer, however it is good to follow the behavior
+ * of native applications.
+ * <p>
+ * The goal of the API is to enable user-created UI components to have tactile
+ * feedback. The UI component types supported by the API are limited to
+ * user-defined components only: <code>javax.microedition.lcdui.Canvas</code>,
+ * <code>javax.microedition.lcdui.CustomItem</code>,
+ * <code>org.eclipse.swt.widgets.Control</code>. Other UI components (i.e. List,
+ * TextBox, etc.) get default tactile feedback automatically from the platform.
+ *
+ * @version 0.001
+ * @since 1.2
+ */
+
+public class TactileFeedback
+{
+
+    /**
+     * Constant for specifying basic tactile feedback style. Actual style
+     * behaviour is set through device settings.
+     */
+    public static final int FEEDBACK_STYLE_BASIC = 1;
+
+    /**
+     * Constant for specifying sensitive tactile feedback style. Actual style
+     * behaviour is set through device settings.
+     */
+    public static final int FEEDBACK_STYLE_SENSITIVE = 2;
+
+    private final String invalidFeedbackStyleMsg = "Invalid feedback style specified";
+    private final String invalidControlTypeMsg = "Invalid object provided for tactile feedback registration";
+
+    private static final int TYPE_INVALID = 0;
+    private static final int TYPE_ESWT = 1;
+    private static final int TYPE_LCDUI = 2;
+    private static boolean feedbackEnabled;
+
+    /**
+     * Constructs tactile feedback engine object. The object may be used in both
+     * LCDUI and eSWT java UI toolkits. TactileFeedback object must be
+     * constructed before using any tactile feedback methods.
+     */
+    public TactileFeedback()
+    {
+    }
+
+    /**
+     * Triggers direct tactile feedback of the specified style.
+     *
+     * @param style
+     *            The style of the direct feedback. Use predefined values
+     *            FEEDBACK_STYLE_BASIC, FEEDBACK_STYLE_SENSITIVE. Actual style
+     *            behavior is set through device settings.
+     * @throws IllegalArgumentException
+     *             if the style parameter has invalid type.
+     */
+    public void directFeedback(int style) throws IllegalArgumentException
+    {
+        if ((style != FEEDBACK_STYLE_BASIC)
+                && (style != FEEDBACK_STYLE_SENSITIVE))
+            throw new IllegalArgumentException(invalidFeedbackStyleMsg);
+        if (org.eclipse.swt.widgets.Display.getCurrent() == null)
+        {
+            final int fStyle = style;
+            com.nokia.mj.impl.nokialcdui.LCDUIInvoker
+            .eSWTUIThreadRunnerSyncExec(new Runnable()
+            {
+                public void run()
+                {
+                    //  OS.MTouchFeedback_InstantFeedback(fStyle);
+                }
+            });
+
+        }
+        else
+        {
+            //OS.MTouchFeedback_InstantFeedback(style);
+        }
+    }
+
+    /**
+     * Queries the device if it supports tactile feedback. It is safe to use
+     * this class even if the device does not support tactile feedback. Methods
+     * of this class can be called but this has no effect.
+     *
+     * @return true if the device supports tactile feedback, false otherwise.
+     */
+    public boolean isTouchFeedbackSupported()
+    {
+        if (org.eclipse.swt.widgets.Display.getCurrent() == null)
+        {
+            com.nokia.mj.impl.nokialcdui.LCDUIInvoker
+            .eSWTUIThreadRunnerSyncExec(new Runnable()
+            {
+
+                public void run()
+                {
+                    // feedbackEnabled = OS
+                    //       .MTouchFeedback_TouchFeedbackSupported();
+                }
+            });
+        }
+        else
+        {
+            //  feedbackEnabled = OS.MTouchFeedback_TouchFeedbackSupported();
+        }
+        return feedbackEnabled;
+    }
+
+    /**
+     * Registers area within a UI component for tactile feedback. If areas
+     * overlap then the feedback is given from the last registered area.
+     * {@link #moveFeedbackAreaToFirstPriority moveFeedbackAreaToFirstPriority}
+     * can be used to bring a certain area covered by another area into action.
+     * If an area with specified <code>id</code> is already registered it is
+     * updated. When updating an existing area there is no need to unregister it
+     * before re-registering again with new coordinates and/or feedback style.
+     * The area specified by <code>x</code>, <code>y</code>, <code>width</code>
+     * and <code>height</code> parameters may be located on the screen just
+     * partially.
+     *
+     * <p>
+     * In case of area registry for eSWT Control, the registry needs to be
+     * updated every time when the size or position of a UI component changes,
+     * or when e.g. a state of a UI component changes in such way that feedback
+     * type also changes. Typically the area update may be implemented in
+     * <code>controlMoved</code> and <code>controlResized</code> methods of
+     * <code>ControlListener</code> interface. The update of an area may be
+     * implemented by calling registerFeedbackArea with the same area id but new
+     * coordinates and/or feedback style.
+     * <p>
+     * In case of area registry for LCDUI Canvas or CustomItem no further
+     * actions are required to update tactile feedback areas when a CustomItem
+     * is moved in a Form or when a Canvas is changed due to e.g. orientation
+     * switch.
+     *
+     * @param uiObject
+     *            The UI component for tactile feedback registration. Valid
+     *            object types are: <code>javax.microedition.lcdui.Canvas</code>
+     *            , <code>javax.microedition.lcdui.CustomItem</code>,
+     *            <code>org.eclipse.swt.widgets.Control</code>.
+     * @param id
+     *            Id of the new tactile feedback area to be registered. Id's are
+     *            used to identify particular tactile feedback area within one
+     *            UI component. Id's do not need to be consecutive numbers.
+     * @param x
+     *            x-coordinate of the top-left corner of tactile feedback
+     *            rectangle to register.
+     * @param y
+     *            y-coordinate of the top-left corner of tactile feedback
+     *            rectangle to register.
+     * @param width
+     *            Width of tactile feedback rectangle to register.
+     * @param height
+     *            Height of tactile feedback rectangle to register.
+     * @param style
+     *            The style of the feedback for specified area. Use predefined
+     *            values <code>FEEDBACK_STYLE_BASIC</code>,
+     *            <code>FEEDBACK_STYLE_SENSITIVE</code>. Actual style behaviour
+     *            is defined through device settings.
+     * @throws IllegalArgumentException
+     *             if the uiObject parameter has invalid type.
+     * @throws IllegalArgumentException
+     *             if the style parameter has invalid type.
+     */
+    public void registerFeedbackArea(Object uiObject, int id, int x, int y,
+                                     int width, int height, int style) throws IllegalArgumentException
+    {
+        int type = controlType(uiObject);
+        if (type == TYPE_INVALID)
+            throw new IllegalArgumentException(invalidControlTypeMsg);
+
+        if ((style != FEEDBACK_STYLE_BASIC)
+                && (style != FEEDBACK_STYLE_SENSITIVE))
+            throw new IllegalArgumentException(invalidFeedbackStyleMsg);
+
+        int controlHandle = getControlHandle(uiObject);
+        if (type == TYPE_LCDUI)
+        {
+            final int fControlHandle = controlHandle;
+            final int fId = id;
+            final int fX = x;
+            final int fY = y;
+            final int fWidth = width;
+            final int fHeight = height;
+            final int fStyle = style;
+            com.nokia.mj.impl.nokialcdui.LCDUIInvoker
+            .eSWTUIThreadRunnerSyncExec(new Runnable()
+            {
+
+                public void run()
+                {
+                    //      OS.MTouchFeedback_SetFeedbackArea(fControlHandle,
+                    //            fId, fX, fY, fWidth, fHeight, fStyle);
+                }
+            });
+        }
+        else
+        {
+            //OS.MTouchFeedback_SetFeedbackArea(controlHandle, id, x, y, width,
+            //      height, style);
+        }
+    }
+
+    /**
+     * Unregisters tactile feedback area within a UI component.
+     *
+     * @param uiObject
+     *            The UI component for tactile feedback area de-registration.
+     *            Valid object types are:
+     *            <code>javax.microedition.lcdui.Canvas</code>,
+     *            <code>javax.microedition.lcdui.CustomItem</code>,
+     *            <code>org.eclipse.swt.widgets.Control</code>.
+     * @param id
+     *            Id of the tactile feedback area to be unregistered. Id's are
+     *            used to identify particular tactile feedback area within one
+     *            UI component. If given id was not registered by
+     *            {@link #registerFeedbackArea registerFeedbackArea} then the
+     *            call has no effect.
+     * @throws IllegalArgumentException
+     *             if the uiObject parameter has invalid type.
+     */
+    public void unregisterFeedbackArea(Object uiObject, int id)
+    throws IllegalArgumentException
+    {
+
+        int type = controlType(uiObject);
+        if (type == TYPE_INVALID)
+            throw new IllegalArgumentException(invalidControlTypeMsg);
+
+        int controlHandle = getControlHandle(uiObject);
+        if (type == TYPE_LCDUI)
+        {
+            final int fControlHandle = controlHandle;
+            final int fId = id;
+            com.nokia.mj.impl.nokialcdui.LCDUIInvoker
+            .eSWTUIThreadRunnerSyncExec(new Runnable()
+            {
+
+                public void run()
+                {
+                    //  OS.MTouchFeedback_RemoveFeedbackArea(
+                    //        fControlHandle, fId);
+                }
+            });
+        }
+        else
+        {
+            //OS.MTouchFeedback_RemoveFeedbackArea(controlHandle, id);
+        }
+
+    }
+
+    /**
+     * Removes all tactile feedback for a UI component.
+     *
+     * @param uiObject
+     *            The UI component for tactile feedback area de-registration.
+     *            Valid object types are:
+     *            <code>javax.microedition.lcdui.Canvas</code>,
+     *            <code>javax.microedition.lcdui.CustomItem</code>,
+     *            <code>org.eclipse.swt.widgets.Control</code>.
+     * @throws IllegalArgumentException
+     *             if the uiObject parameter has invalid type.
+     */
+    public void removeFeedbackForComponent(Object uiObject)
+    {
+        if (isTouchFeedbackSupported() == false)
+            return;
+
+        int type = controlType(uiObject);
+        if (type == TYPE_INVALID)
+            throw new IllegalArgumentException(invalidControlTypeMsg);
+
+        int controlHandle = getControlHandle(uiObject);
+
+        if (type == TYPE_LCDUI)
+        {
+            final int fControlHandle = controlHandle;
+            com.nokia.mj.impl.nokialcdui.LCDUIInvoker
+            .eSWTUIThreadRunnerSyncExec(new Runnable()
+            {
+
+                public void run()
+                {
+                    //    OS.MTouchFeedback_RemoveFeedbackForControl(fControlHandle);
+                }
+            });
+        }
+        else
+        {
+            //OS.MTouchFeedback_RemoveFeedbackForControl(controlHandle);
+        }
+
+    }
+
+    /**
+     * Moves the specified tactile feedback area to first priority. Priority is
+     * significant in case of overlapping tactile feedback areas. If the tactile
+     * feedback styles of registered areas are different, the feedback from
+     * first-priority area will be given.
+     *
+     * @param uiObject
+     *            The UI component for tactile feedback area de-registration.
+     *            Valid object types are:
+     *            <code>javax.microedition.lcdui.Canvas</code>,
+     *            <code>javax.microedition.lcdui.CustomItem</code>,
+     *            <code>org.eclipse.swt.widgets.Control</code>.
+     * @param id
+     *            Id of the tactile feedback area to be unregistered. Id's are
+     *            used to identify particular tactile feedback area within one
+     *            UI component. If given id was not registered by
+     *            {@link #registerFeedbackArea registerFeedbackArea} then the
+     *            call has no effect.
+     * @throws IllegalArgumentException
+     *             if the uiObject parameter has invalid type.
+     */
+    public void moveFeedbackAreaToFirstPriority(Object uiObject, int id)
+    {
+        if (isTouchFeedbackSupported() == false)
+            return;
+
+        int type = controlType(uiObject);
+        if (type == TYPE_INVALID)
+            throw new IllegalArgumentException(invalidControlTypeMsg);
+
+        int controlHandle = getControlHandle(uiObject);
+        if (type == TYPE_LCDUI)
+        {
+            final int fControlHandle = controlHandle;
+            final int fId = id;
+            com.nokia.mj.impl.nokialcdui.LCDUIInvoker
+            .eSWTUIThreadRunnerSyncExec(new Runnable()
+            {
+
+                public void run()
+                {
+                    //     OS.MTouchFeedback_MoveFeedbackAreaToFirstPriority(
+                    //           fControlHandle, fId);
+                }
+            });
+        }
+        else
+        {
+            //  OS.MTouchFeedback_MoveFeedbackAreaToFirstPriority(
+            //                controlHandle, id);
+        }
+
+    }
+
+
+    private int controlType(Object obj)
+    {
+        if ((obj instanceof javax.microedition.lcdui.Canvas)
+                || (obj instanceof javax.microedition.lcdui.CustomItem))
+        {
+            return TYPE_LCDUI;
+        }
+        else if ((obj instanceof org.eclipse.swt.widgets.Control))
+        {
+            return TYPE_ESWT;
+        }
+        return TYPE_INVALID;
+    }
+
+    private int getControlHandle(Object uiObject)
+    {
+        int controlHandle = 0;
+        org.eclipse.swt.widgets.Control eSwtControl = null;
+        if (uiObject instanceof javax.microedition.lcdui.Canvas
+                || uiObject instanceof javax.microedition.lcdui.CustomItem)
+        {
+            eSwtControl = com.nokia.mj.impl.nokialcdui.LCDUIInvoker
+                          .getEswtControl(uiObject);
+        }
+        else if (uiObject instanceof org.eclipse.swt.widgets.Control)
+        {
+            eSwtControl = (org.eclipse.swt.widgets.Control) uiObject;
+        }
+
+        if (eSwtControl != null)
+        {
+            controlHandle = Internal_PackageSupport.topHandle(eSwtControl);
+        }
+        return controlHandle;
+    }
+
+}
--- a/javauis/nokiauiapi_qt/library/nokiauiapi.pri	Fri Sep 17 08:28:21 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-#
-
-
-INCLUDEPATH += $$PWD
-DEPENDPATH += $$PWD
-
-SOURCES += os.cpp 
-
--- a/javauis/nokiauiapi_qt/library/os.cpp	Fri Sep 17 08:28:21 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,107 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  This main entry point of Java processes.
-*
-*/
-
-
-
-#include <QWidget>
-#include <coecntrl.h>
-#include <touchfeedback.h>
-#include <com_nokia_mid_ui_internal_OS.h>
-
-static CCoeControl* convertToSymbian(QWidget* window)
-{
-    CCoeControl* control = 0;
-    if (window && window->winId())
-    {
-        control = reinterpret_cast<CCoeControl*>(window->winId());
-    }
-    return control;
-}
-
-JNIEXPORT void JNICALL Java_com_nokia_mid_ui_internal_OS_MTouchFeedback_1InstantFeedback
-(JNIEnv *, jclass, jint aStyle)
-{
-    MTouchFeedback* feedback = MTouchFeedback::Instance();
-    if (feedback)
-    {
-        feedback->InstantFeedback(static_cast<TTouchLogicalFeedback>(aStyle));
-    }
-}
-
-JNIEXPORT jboolean JNICALL Java_com_nokia_mid_ui_internal_OS_MTouchFeedback_1TouchFeedbackSupported
-(JNIEnv *, jclass)
-{
-    jboolean enabled = JNI_FALSE;
-    MTouchFeedback* feedback = MTouchFeedback::Instance();
-    if (feedback)
-    {
-        enabled = feedback->TouchFeedbackSupported() ? JNI_TRUE : JNI_FALSE;
-    }
-    return enabled;
-}
-
-JNIEXPORT void JNICALL Java_com_nokia_mid_ui_internal_OS_MTouchFeedback_1SetFeedbackArea
-(JNIEnv *, jclass, jint aControl, jint aAreaIndex, jint aX, jint aY, jint aWidth, jint aHeight, jint aStyle)
-{
-    MTouchFeedback* feedback = MTouchFeedback::Instance();
-    if (feedback)
-    {
-        CCoeControl* control = convertToSymbian(reinterpret_cast<QWidget*>(aControl));
-        TRect feedbackRect(aX, aY, aX + aWidth, aY + aHeight);
-        feedback->SetFeedbackArea(control,
-                                  static_cast<TUint32>(aAreaIndex),
-                                  feedbackRect,
-                                  static_cast<TTouchLogicalFeedback>(aStyle),
-                                  ETouchEventStylusDown);
-    }
-}
-
-JNIEXPORT void JNICALL Java_com_nokia_mid_ui_internal_OS_MTouchFeedback_1RemoveFeedbackArea
-(JNIEnv *, jclass, jint aControl, jint aAreaIndex)
-{
-    MTouchFeedback* feedback = MTouchFeedback::Instance();
-    if (feedback)
-    {
-        CCoeControl* control = convertToSymbian(reinterpret_cast<QWidget*>(aControl));
-        feedback->RemoveFeedbackArea(control, aAreaIndex);
-    }
-}
-
-JNIEXPORT void JNICALL Java_com_nokia_mid_ui_internal_OS_MTouchFeedback_1RemoveFeedbackForControl
-(JNIEnv *, jclass, jint aControl)
-{
-    MTouchFeedback* feedback = MTouchFeedback::Instance();
-    if (feedback)
-    {
-        CCoeControl* control = convertToSymbian(reinterpret_cast<QWidget*>(aControl));
-        feedback->RemoveFeedbackForControl(control);
-    }
-}
-
-JNIEXPORT void JNICALL Java_com_nokia_mid_ui_internal_OS_MTouchFeedback_1MoveFeedbackAreaToFirstPriority
-(JNIEnv *, jclass, jint aControl, jint aAreaIndex)
-{
-    MTouchFeedback* feedback = MTouchFeedback::Instance();
-    if (feedback)
-    {
-        CCoeControl* control = convertToSymbian(reinterpret_cast<QWidget*>(aControl));
-        feedback->MoveFeedbackAreaToFirstPriority(control, static_cast<TUint32>(aAreaIndex));
-    }
-}
-
-
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/nokiauiapi_qt/softindicatorplugin/inc/javasoftindicator.h	Mon Oct 04 00:10:53 2010 +0300
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Nokia Corporation - initial implementation
+ *******************************************************************************/
+
+#ifndef JAVASOFTINDICATOR_H
+#define JAVASOFTINDICATOR_H
+
+#include <hbindicatorinterface.h>
+
+/**
+ * Handles client request and showing the indications. 
+ */
+class JavaSoftIndicator : public HbIndicatorInterface
+    {
+public:
+    /**
+     * Constructor
+     */
+    JavaSoftIndicator(const QString &indicatorType);
+
+    /**
+     * Destructor
+     */
+    virtual ~JavaSoftIndicator();
+
+    /**
+     * @see HbIndicatorInterface
+     */
+    bool handleInteraction(InteractionType type);
+
+    /**
+     * @see HbIndicatorInterface
+     */
+    QVariant indicatorData(int role) const;
+
+protected:
+    /**
+     * @see HbIndicatorInterface
+     */
+    bool handleClientRequest(RequestType type, const QVariant &parameter);
+
+private:
+
+    void StartJavaMidletL() const;
+
+private:
+
+    QVariant iParameter;
+    };
+
+#endif // JAVASOFTINDICATOR_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/nokiauiapi_qt/softindicatorplugin/inc/javasoftindicatorplugin.h	Mon Oct 04 00:10:53 2010 +0300
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Nokia Corporation - initial implementation
+ *******************************************************************************/
+
+#ifndef JAVASOFTINDICATORPLUGIN_H
+#define JAVASOFTINDICATORPLUGIN_H
+
+#include <QObject>
+#include <QStringList>
+#include <hbindicatorplugininterface.h>
+
+/**
+ * Main class of java indicator plugin. 
+ */
+class JavaSoftIndicatorPlugin : public QObject,
+        public HbIndicatorPluginInterface
+    {
+    Q_OBJECT
+    Q_INTERFACES(HbIndicatorPluginInterface)
+
+public:
+    /**
+     * Constructor
+     */
+    JavaSoftIndicatorPlugin();
+
+    /**
+     * Destructor
+     */
+    virtual ~JavaSoftIndicatorPlugin();
+
+    /**
+     * @see HbIndicatorPluginInterface
+     */
+    QStringList indicatorTypes() const;
+
+    /**
+     * @see HbIndicatorPluginInterface
+     */
+    bool accessAllowed(const QString &indicatorType,
+            const QVariantMap &securityInfo) const;
+    
+    /**
+     * @see HbIndicatorPluginInterface
+     */
+    HbIndicatorInterface* createIndicator(const QString &indicatorType);
+
+    /**
+     * @see HbIndicatorPluginInterface
+     */
+    int error() const;
+
+private:
+    Q_DISABLE_COPY( JavaSoftIndicatorPlugin)
+
+    /**
+     * Error value
+     */
+    int iError;
+
+    /**
+     * Indicator types 
+     * supported indicator types. 
+     */
+    //QStringList iIndicatorTypes;
+    };
+
+#endif // JAVASOFTINDICATORPLUGIN_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/nokiauiapi_qt/softindicatorplugin/src/javasoftindicator.cpp	Mon Oct 04 00:10:53 2010 +0300
@@ -0,0 +1,170 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Nokia Corporation - initial implementation
+ *******************************************************************************/
+
+#include <apgtask.h>
+#include <apgcli.h>
+
+#include "javasoftindicator.h" 
+
+// ----------------------------------------------------------------------------
+// JavaSoftIndicator::JavaSoftIndicator
+// @see javasoftindicator.h
+// ----------------------------------------------------------------------------
+JavaSoftIndicator::JavaSoftIndicator(const QString &indicatorType) :
+    HbIndicatorInterface(indicatorType,
+            HbIndicatorInterface::NotificationCategory, InteractionActivated)
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// JavaSoftIndicator::~JavaSoftIndicator
+// @see javasoftindicator.h
+// ----------------------------------------------------------------------------
+JavaSoftIndicator::~JavaSoftIndicator()
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// JavaSoftIndicator::handleInteraction
+// @see javasoftindicator.h
+// ----------------------------------------------------------------------------
+bool JavaSoftIndicator::handleInteraction(InteractionType type)
+    {
+    bool handled = false;
+    if (type == InteractionActivated)
+        {
+        TRAP_IGNORE(StartJavaMidletL());
+        QVariantMap variantMap;
+        if (iParameter.isValid() && iParameter.canConvert(QVariant::List))
+            {
+            variantMap.insert("MidletId",iParameter.toList()[0].toUInt());
+            variantMap.insert("NotificationId",iParameter.toList()[1]);
+            }
+        emit userActivated(variantMap);
+        handled = true;
+        emit deactivate();
+        }
+    return handled;
+    }
+
+// ----------------------------------------------------------------------------
+// JavaSoftIndicator::indicatorData
+// @see javasoftindicator.h
+// ----------------------------------------------------------------------------
+QVariant JavaSoftIndicator::indicatorData(int role) const
+    {
+    switch (role)
+        {
+        case PrimaryTextRole:
+            {
+            QString text("");
+            if (iParameter.isValid() && iParameter.canConvert(QVariant::List))
+                {
+                if (iParameter.toList()[2].isValid())
+                    {
+                    text = iParameter.toList()[2].toString();
+                    }
+                }
+            return text;
+            }
+        case SecondaryTextRole:
+            {
+            QString text("");
+            if (iParameter.isValid() && iParameter.canConvert(QVariant::List))
+                {
+                if (iParameter.toList()[3].isValid())
+                    {
+                    text = iParameter.toList()[3].toString();
+                    }
+                }
+            return text;
+            }
+        case DecorationNameRole:
+            {
+            QVariant img;
+            if (iParameter.isValid() && iParameter.canConvert(QVariant::List))
+                {
+                if (iParameter.toList()[4].isValid())
+                    {
+                    img = iParameter.toList()[4].toString(); 
+                    }
+                }
+            return img;
+            }
+        default:
+            return QVariant();
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// JavaSoftIndicator::handleClientRequest
+// ----------------------------------------------------------------------------
+bool JavaSoftIndicator::handleClientRequest(RequestType type,
+        const QVariant &parameter)
+    {
+    bool handled(false);
+    switch (type)
+        {
+        case RequestActivate:
+            {
+            if (iParameter != parameter)
+                {
+                iParameter = parameter;
+                }
+            emit dataChanged();
+            handled = true;
+            }
+            break;
+        case RequestDeactivate:
+            {
+            emit deactivate();
+            }
+            break;
+        default:
+            break;
+        }
+    return handled;
+    }
+
+// ----------------------------------------------------------
+// JavaSoftIndicator::StartJavaMidletL()
+// ----------------------------------------------------------
+void JavaSoftIndicator::StartJavaMidletL() const
+    {
+    if (iParameter.isValid() && iParameter.canConvert(QVariant::List))
+        {
+        if (iParameter.toList()[0].isValid())
+            {
+            TUint KJavaMidletUid = iParameter.toList()[0].toUInt();
+
+            RWsSession ws;
+            User::LeaveIfError(ws.Connect() == KErrNone);
+            TApaTaskList tasklist(ws);
+            TApaTask task = tasklist.FindApp(TUid::Uid(KJavaMidletUid));
+            if (task.Exists())
+                {
+                task.BringToForeground();
+                ws.Close();
+                }
+            else
+                {
+                ws.Close();
+                RApaLsSession appArcSession;
+                User::LeaveIfError(appArcSession.Connect());
+                TThreadId threadId;
+                appArcSession.StartDocument(_L(""),
+                TUid::Uid(KJavaMidletUid), threadId);
+                appArcSession.Close();
+                }
+            }
+        }
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/nokiauiapi_qt/softindicatorplugin/src/javasoftindicatorplugin.cpp	Mon Oct 04 00:10:53 2010 +0300
@@ -0,0 +1,87 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Nokia Corporation - initial implementation
+ *******************************************************************************/
+
+#include <QtPlugin>
+
+#include "javasoftindicatorplugin.h"
+#include "javasoftindicator.h"
+
+
+Q_EXPORT_PLUGIN( JavaSoftIndicatorPlugin)
+
+// ----------------------------------------------------------------------------
+// JavaSoftIndicatorPlugin::JavaSoftIndicatorPlugin
+// ----------------------------------------------------------------------------
+JavaSoftIndicatorPlugin::JavaSoftIndicatorPlugin() :
+    iError(0)
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// JavaSoftIndicatorPlugin::~JavaSoftIndicatorPlugin
+// ----------------------------------------------------------------------------
+JavaSoftIndicatorPlugin::~JavaSoftIndicatorPlugin()
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// JavaSoftIndicatorPlugin::indicatorTypes
+// Return notification types this plugin implements
+// ----------------------------------------------------------------------------
+QStringList JavaSoftIndicatorPlugin::indicatorTypes() const
+    {
+    QStringList iIndicatorTypes;
+    iIndicatorTypes
+            << "com.nokia.javasoftnotification.indicatorplugin/1.0_269487546_203";
+    iIndicatorTypes
+            << "com.nokia.javasoftnotification.indicatorplugin/1.0_269487546_202";
+    iIndicatorTypes
+                << "com.nokia.javasoftnotification.indicatorplugin/1.0_269487546_201";
+    iIndicatorTypes
+                << "com.nokia.javasoftnotification.indicatorplugin/1.0_270212593_203";
+        iIndicatorTypes
+                << "com.nokia.javasoftnotification.indicatorplugin/1.0_270212593_202";
+       
+    return iIndicatorTypes;
+    }
+
+// ----------------------------------------------------------------------------
+// JavaSoftIndicatorPlugin::accessAllowed
+// Check if client is allowed to use notification widget
+// ----------------------------------------------------------------------------
+bool JavaSoftIndicatorPlugin::accessAllowed(const QString &indicatorType,
+        const QVariantMap &securityInfo) const
+    {
+    Q_UNUSED(indicatorType)
+    Q_UNUSED(securityInfo)
+    // This plugin doesn't perform operations that may compromise security.
+    // All clients are allowed to use.
+    return true;
+    }
+
+// ----------------------------------------------------------------------------
+// JavaSoftIndicatorPlugin::createIndicator
+// ----------------------------------------------------------------------------
+HbIndicatorInterface* JavaSoftIndicatorPlugin::createIndicator(
+        const QString &indicatorType)
+    {
+    HbIndicatorInterface *indicator = new JavaSoftIndicator(indicatorType);
+    return indicator;
+    }
+
+// ----------------------------------------------------------------------------
+// JavaSoftIndicatorPlugin::error
+// ----------------------------------------------------------------------------
+int JavaSoftIndicatorPlugin::error() const
+    {
+    return iError;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/nokiauiapi_qt/src/CSoftNotification.cpp	Mon Oct 04 00:10:53 2010 +0300
@@ -0,0 +1,279 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Nokia Corporation - initial implementation
+ *******************************************************************************/
+
+
+#include <w32std.h>
+#include <apgtask.h>
+#include <hbdevicenotificationdialogsymbian.h>
+#include <hbsymbianvariant.h>
+#include "CSoftNotification.h"
+
+_LIT(KMidletId, "MidletId");
+_LIT(KNotificationId, "NotificationId");
+_LIT(KIndicatorTypeJavaSoftNote,"com.nokia.javasoftnotification.indicatorplugin/1.0_%u_%i");
+const TInt KIndicatorTypeStringLength = 250;
+const TInt KMidletUidLength = 50;
+
+// Event id when user accepted notification
+const TInt KEventNoteAccepted = 1;
+
+// ============================ MEMBER FUNCTIONS ===============================
+// -----------------------------------------------------------------------------
+// CSoftNotification::NewLC
+// Static constructor
+// -----------------------------------------------------------------------------
+//
+CSoftNotification* CSoftNotification::NewL(TInt aAppId, TInt aNotificationId)
+    {
+    CSoftNotification* self = new (ELeave) CSoftNotification(aAppId,
+            aNotificationId);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CSoftNotification::CSoftNotification
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CSoftNotification::CSoftNotification(TInt aAppId, TInt aNotificationId) :
+    iNotificationId(aNotificationId)
+    {
+    iMidletId = TUid::Uid(aAppId);
+    }
+
+// -----------------------------------------------------------------------------
+// CSoftNotification::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CSoftNotification::ConstructL()
+    {
+    iIndicator = CHbIndicatorSymbian::NewL();
+    iIndicator->SetObserver(this);
+    }
+
+// -----------------------------------------------------------------------------
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CSoftNotification::~CSoftNotification()
+    {
+    if (iPrimaryText)
+        {
+        delete iPrimaryText;
+        }
+    
+    if (iSecondaryText)
+        {
+        delete iSecondaryText;
+        }
+    
+    if (iImagePath)
+        {
+        delete iImagePath;
+        }
+    
+    if (iIndicator)
+        {
+        delete iIndicator;
+        }
+    
+    if (iPeer)
+        {
+        iJniEnv->DeleteWeakGlobalRef((jweak)iPeer);
+        }
+    
+    iPrimaryText = NULL;
+    iSecondaryText = NULL;
+    iImagePath = NULL;
+    iIndicator = NULL;
+    iPeer = NULL;
+    iMethodId = NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// CSoftNotification::ShowSoftNotificationL
+// Displays a soft notification
+// -----------------------------------------------------------------------------
+//
+bool CSoftNotification::ShowSoftNotificationL()
+    {
+    CHbDeviceNotificationDialogSymbian* dialog =
+            CHbDeviceNotificationDialogSymbian::NewL();
+    CleanupStack::PushL(dialog);
+    
+    if(iPrimaryText != NULL)
+        {
+        dialog->SetTitleL(iPrimaryText->Des());
+        }
+
+    if(iSecondaryText != NULL)
+        {
+        dialog->SetTextL(iSecondaryText->Des());
+        }
+    
+    if (iImagePath != NULL)
+        {
+        dialog->SetIconNameL(iImagePath->Des());
+        }
+
+    dialog->ShowL();
+  
+    CHbSymbianVariant* varValues = NotificationParamsL();
+    CleanupStack::PushL(varValues);
+    
+    TBuf<KIndicatorTypeStringLength> indicatorType;
+    indicatorType.Format(KIndicatorTypeJavaSoftNote, iMidletId, iNotificationId);
+    bool indStatus = iIndicator->Activate(indicatorType, varValues);
+    
+    CleanupStack::PopAndDestroy(varValues);
+    CleanupStack::PopAndDestroy(dialog);
+    return indStatus;
+    }
+
+// -----------------------------------------------------------------------------
+// CSoftNotification::RemoveSoftNotificationL
+// Cancels and removes the soft notification
+// -----------------------------------------------------------------------------
+//
+void CSoftNotification::RemoveSoftNotificationL()
+    {
+    TBuf<KIndicatorTypeStringLength> type;
+    type.Format(KIndicatorTypeJavaSoftNote, iMidletId, iNotificationId);
+    iIndicator->Deactivate(type);
+    }
+
+// -----------------------------------------------------------------------------
+// CSoftNotification::SetTextL
+// Sets a text for a soft notification
+// -----------------------------------------------------------------------------
+//
+void CSoftNotification::SetTextL(const TDesC& aPrimaryText, const TDesC& aSecondaryText)
+    {
+    HBufC* txt = aPrimaryText.AllocL();
+    delete iPrimaryText;
+    iPrimaryText = txt;
+
+    txt = aSecondaryText.AllocL();
+    delete iSecondaryText;
+    iSecondaryText = txt;
+    }
+
+// -----------------------------------------------------------------------------
+// CSoftNotification::SetImagePathL
+// Sets a text for a soft notification
+// -----------------------------------------------------------------------------
+//
+void CSoftNotification::SetImagePathL(const TDesC& aImagePath)
+    {
+    HBufC* txt = aImagePath.AllocL();
+    delete iImagePath;
+    iImagePath = txt;
+    }
+
+// -----------------------------------------------------------------------------
+// CSoftNotification::Id
+// Notification Id
+// -----------------------------------------------------------------------------
+//
+TInt CSoftNotification::Id()
+    {
+    return iNotificationId;
+    }
+
+// -----------------------------------------------------------------------------
+// CSoftNotification::SetPeerObserverL
+// -----------------------------------------------------------------------------
+//
+void CSoftNotification::SetPeerObserver(jobject aPeer, jmethodID aMethodId,
+        JNIEnv* aJniEnv)
+    {
+    iJniEnv = aJniEnv;
+    iPeer = aPeer;
+    iMethodId = aMethodId;
+    }
+
+// -----------------------------------------------------------------------------
+// CSoftNotification::IndicatorUserActivated
+// Dynamic soft notification was accepted by user.
+// -----------------------------------------------------------------------------
+//
+void CSoftNotification::IndicatorUserActivated(const TDesC& /*aType*/,
+        CHbSymbianVariantMap &aData)
+    {
+    TInt notificationId = *reinterpret_cast<const TInt*>(aData.Get(KNotificationId)->Data());
+    TUid midletId(TUid::Uid(*reinterpret_cast<const TUint*>(aData.Get(KMidletId)->Data())));
+    if (iPeer && iMidletId == midletId &&
+        iNotificationId == notificationId )
+        {
+        // Can't attempt callback if JVM is processing an exception. Event is
+        // possibly lost by Java listener.
+        if (iJniEnv->ExceptionCheck() == JNI_TRUE)
+            {
+            return;
+            }
+        if (iMethodId)
+            {
+            iJniEnv->CallVoidMethod(iPeer, iMethodId, KEventNoteAccepted);
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSoftNotification::FillNotificationParams
+// -----------------------------------------------------------------------------
+//
+CHbSymbianVariant* CSoftNotification::NotificationParamsL()
+    {
+    //only five parameter, so creat the array 
+    //for five parameters to fit and append them
+    CDesC16ArrayFlat* array = new CDesC16ArrayFlat(5);
+    CleanupStack::PushL(array);
+    TBuf<KMidletUidLength> midletId;
+    _LIT(MidletId,"%u");
+    midletId.Format(MidletId,iMidletId);
+    array->AppendL(midletId);
+    array->AppendL(reinterpret_cast<TDesC16&>(iNotificationId));
+    if(iPrimaryText != NULL)
+        {
+        array->AppendL(iPrimaryText->Des());
+        }
+    else
+        {
+        array->AppendL(KNullDesC);
+        }
+    
+    if(iSecondaryText != NULL)
+        {
+        array->AppendL(iSecondaryText->Des());
+        }
+    else
+        {
+        array->AppendL(KNullDesC);
+        }
+    
+    if (iImagePath != NULL)
+        {
+        array->AppendL(iImagePath->Des());
+        }
+    else
+        {
+        array->AppendL(KNullDesC);
+        }
+    MDesCArray* marray = static_cast<MDesCArray*>(array);
+    CHbSymbianVariant* varValues = CHbSymbianVariant::NewL( marray, CHbSymbianVariant::EDesArray);
+    CleanupStack::PopAndDestroy(array);
+    return varValues;
+    }
--- a/javauis/nokiauiapi_qt/src/com/nokia/mid/ui/DeviceControl.java	Fri Sep 17 08:28:21 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,334 +0,0 @@
-/*
-* Copyright (c) 2006-2007 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Provides methods for controlling vibrator and screen backlight.
-*
-*/
-
-
-package com.nokia.mid.ui;
-
-import org.eclipse.swt.internal.qt.OS;
-import org.eclipse.swt.widgets.Internal_PackageSupport;
-import org.eclipse.swt.internal.extension.DisplayExtension;
-
-/**
- * <p>
- * DeviceControl provides a collection of methods to control some of the special
- * features available in mobile devices, e.g., vibrator, screen (LCD)
- * backlight, and screen saver appearance.
- * <p>
- * This class is thread safe.
- * @version 1.0
- * @since 1.0
- */
-
-public class DeviceControl
-{
-    // error string for negative duration
-    private static final String ERR_NEGATIVE_DURATION_STRING =
-        "Negative duration";
-    private static int inactivityTime;
-    private static int vibraDuration;
-    private static boolean vibraSupported;
-
-    /**
-     * Private constructor. This class can't be instantiated.
-     */
-    private DeviceControl()
-    {
-    }
-    /**
-     * Function return the time since the last user activity in seconds.
-     * @since 1.4
-     */
-    public static int getUserInactivityTime()
-    {
-        synchronized (DeviceControl.class)
-        {
-            if (DisplayExtension.getDisplayInstance() != null)
-            {
-                Internal_PackageSupport.getDisplayInstance().syncExec(new Runnable()
-                {
-                    public void run()
-                    {
-                        inactivityTime = OS.MobileDevice_getUserInactivityTime(
-                                             Internal_PackageSupport.initializeMobileDevice(
-                                                 Internal_PackageSupport.getDisplayInstance()));
-                    }
-                });
-            }
-        }
-        return inactivityTime;
-    }
-    /**
-     *  Function reset user inactivity time. Thus, if the screen saver should be
-     *  wholly disabled, it is needed to call the function repeatedly for example in a
-     *  separate thread. The delay between two calls should be smaller than
-     *  the time-out of the screensaver (the time-out may be for example 15 seconds
-     *  or more depending on the used device).
-     *  @since 1.4
-     */
-    public static void resetUserInactivityTime()
-    {
-        synchronized (DeviceControl.class)
-        {
-            if (DisplayExtension.getDisplayInstance() != null)
-            {
-                Internal_PackageSupport.getDisplayInstance().syncExec(new Runnable()
-                {
-                    public void run()
-                    {
-                        OS.MobileDevice_resetUserInactivityTime(
-                            Internal_PackageSupport.initializeMobileDevice(
-                                Internal_PackageSupport.getDisplayInstance()));
-                    }
-                });
-            }
-        }
-    }
-
-    /**
-     *  Activates and deactivates lights on the device; the function
-     *  can also be used for preventing screen saver appearance. Parameter
-     *  num indicates the number of the device light to control.
-     *  Currently only one num parameter is specified:
-     *  num value 0 is used for controlling the screen backlight.
-     *  Parameter level is a value between 0-100
-     *  indicating the light brightness. In many implementations
-     *  there in only two levels: lights on and off. Value 0 indicates
-     *  a setting for lights off (monochrome displays) or other
-     *  minimum brightness setting (color displays), all other level
-     *  values (1-100) are used for setting the lights on, possibly
-     *  with different brightness levels depending on the value. A more
-     *  higher level value always results either the same brightness setting
-     *  as a lower one, or a more brighter setting. For many products
-     *  passing values 1-100 will just turn the lights on.
-     *  <p>
-     *  Note: Since in some devices key presses may turn on some device lights,
-     *  the light settings may be changed also by the system.
-     *  <p>
-     *  This function may also be used to prevent screen saver appearance
-     *  (supported in S60 devices starting from S60 3rd Ed FP1,
-     *  except for some early FP1 devices). Calling this function once
-     *  will delay the screen saver appearance but does not disable it permanently.
-     *  Thus, if the screen saver should be wholly disabled,
-     *  it is needed to call the function repeatedly for example in a
-     *  separate thread. The delay between two calls should be smaller than
-     *  the time-out of the screensaver (the time-out may be for example 15 seconds
-     *  or more depending on the used device).
-     *
-     *  @param num is the number or id for light, 0 is used for display
-     *  backlight, other numbers are currently left unspecified
-     *  @param level the lighting level 0-100. 0 means "off" or other
-     *  minimum lighting setting. For many devices greater
-     *  than 0 value just means "light on".
-     *  @throws java.lang.IllegalArgumentException if light num is not
-     *  supported or level is not between 0-100.
-     *  @since 1.0
-     */
-    public static void setLights(int aNum, int aLevel)
-    {
-        synchronized (DeviceControl.class)
-        {
-            if (aNum != 0)
-            {
-                throw new IllegalArgumentException("Light num is not supported");
-            }
-            if (aLevel < 0 || aLevel > 100)
-            {
-                throw(new IllegalArgumentException("Level not between 0 and 100"));
-            }
-            final int level = aLevel;
-
-            if (DisplayExtension.getDisplayInstance() != null)
-            {
-                Internal_PackageSupport.getDisplayInstance().syncExec(new Runnable()
-                {
-                    public void run()
-                    {
-                        OS.MobileDevice_setLight(Internal_PackageSupport.initializeMobileDevice(
-                                                     Internal_PackageSupport.getDisplayInstance()), level);
-                    }
-                });
-            }
-        }
-    }
-
-    /**
-     *  Does flashing lights effect for specific duration.
-     *  This is a generic method for doing implementation specific light
-     *  flashing effect. This could be used as feedback e.g. in games.
-     *  If the device is not capable of doing the effect the method call
-     *  silently returns. In most devices there is at least screen backlight
-     *  and different LEDs that could be used for the effect. There might
-     *  be maximum limit in implementation for the duration: implementation
-     *  stops automatically the effect after maximum duration is reached.
-     *  When the flashing lights effect ends the implementation sets the
-     *  lights back to the light state the device was before the
-     *  method call.
-     *
-     *  @param duration duration in milliseconds the effect should be
-     *  active
-     *  @throws java.lang.IllegalArgumentException if duration < 0
-     *  @since 1.0
-     */
-    public static void flashLights(long aDuration)
-    {
-        synchronized (DeviceControl.class)
-        {
-            if (aDuration < 0)
-            {
-                throw new IllegalArgumentException(ERR_NEGATIVE_DURATION_STRING);
-            }
-
-            final int duration;
-            if (aDuration > java.lang.Integer.MAX_VALUE)
-            {
-                duration = java.lang.Integer.MAX_VALUE;
-            }
-            else
-            {
-                duration =(int)aDuration;
-            }
-            if (DisplayExtension.getDisplayInstance() != null)
-            {
-                Internal_PackageSupport.getDisplayInstance().syncExec(new Runnable()
-                {
-                    public void run()
-                    {
-                        OS.MobileDevice_flashLights(
-                            Internal_PackageSupport.initializeMobileDevice(
-                                Internal_PackageSupport.getDisplayInstance()),duration);
-                    }
-                });
-            }
-        }
-
-    }
-
-    /**
-     *  Activates the vibra device with given duration and frequency.
-     *  Device vibra feedback can be used, for example, as tactile feedback
-     *  effect e.g. in games. The frequency of the vibra device
-     *  can be controlled with freq parameter. The frequency is a logical
-     *  number between 0 to 100, value 100 being the maximum frequency,
-     *  value 0 always means no vibra, value 1 always needs to give some
-     *  effect. If a device doesn't support different frequencies then
-     *  the just frequency allowed by device is used.
-     *  <p>
-     *  Parameter duration is used to indicate duration of vibra
-     *  in milliseconds. Method won't block for the vibra operation.
-     *  There is some maximum limit in implementation for the
-     *  duration. Duration values that exceed this limit result a
-     *  maximum vibration effect.
-     *  <p>
-     *  If the method is called during a previous vibra operation activated
-     *  from this method, the previous vibra operation is stopped and the new
-     *  vibra device is activated with the new given parameters.
-     *  <p>
-     *  IllegalStateException will be thrown if the freq is not 0 and
-     *  if device doesn't allow vibra to be used, for example,
-     *  it is common that when the device is being charged in desk stand or
-     *  there is incoming call that vibra operation is not allowed.
-     *  IllegalStateException will be thrown if there
-     *  is no vibra capability in the device.
-     *  <p>
-     *  Note that if the frequency is 0, and the device doesn't have vibra
-     *  capability IllegalStateException is thrown. This means that method
-     *  call <code>DeviceControl.doVibra(0,0);</code> can be used to detect
-     *  whether vibra is supported (IllegalStateException not thrown)
-     *  or not (IllegalStateException thrown) without any vibra operation
-     *  being done even if it is supported.
-     *  @param freq the frequency of the vibra device. Value 0 can be used
-     *  for detection whether there is vibra device or not. 100 means
-     *  maximum frequency value of specific system. Value 1 must always
-     *  result a minimum non-zero vibra operation.
-     *  @param duration in milliseconds the duration the vibra device is
-     *  active
-     *  @throws java.lang.IllegalStateException For freq values 1-100:
-     *  the use of vibra device isn't allowed or the system doesn't have
-     *  vibra device. For frequency value 0: the device doesn't have vibra
-     *  device.
-     *  @throws java.lang.IllegalArgumentException if duration or freq is
-     *  < 0, or freq is > 100.
-     *  @since 1.0
-     */
-    public static void startVibra(int aFreq, long aDuration)
-    {
-        synchronized (DeviceControl.class)
-        {
-            if ((aFreq < 0) || (aFreq > 100) || (aDuration < 0))
-            {
-                throw new java.lang.IllegalArgumentException();
-
-            }
-            vibraDuration = (int)aDuration;
-            if (aDuration > java.lang.Integer.MAX_VALUE)
-            {
-                vibraDuration = java.lang.Integer.MAX_VALUE;
-            }
-            if (aFreq == 0)
-            {
-                // frequency 0 disables vibration
-                vibraDuration = 0;
-            }
-            if (DisplayExtension.getDisplayInstance() != null)
-            {
-                Internal_PackageSupport.getDisplayInstance().syncExec(new Runnable()
-                {
-                    public void run()
-                    {
-                        vibraSupported = OS.MobileDevice_vibration(
-                                             Internal_PackageSupport.initializeMobileDevice(
-                                                 Internal_PackageSupport.getDisplayInstance()),vibraDuration);
-                    }
-                });
-            }
-            if (!vibraSupported)
-            {
-                throw new java.lang.IllegalStateException();
-            }
-        }
-    }
-
-    /**
-     *  Stops the vibra device. This method is for manually stopping vibra
-     *  operation activated with
-     *  {@link DeviceControl#startVibra(int freq, long duration)}
-     *  method.
-     *  If the vibra device is not active the method silently returns.
-     *  @since 1.0
-     */
-    public static void stopVibra()
-    {
-        synchronized (DeviceControl.class)
-        {
-            if (DisplayExtension.getDisplayInstance() != null)
-            {
-                Internal_PackageSupport.getDisplayInstance().syncExec(new Runnable()
-                {
-                    public void run()
-                    {
-                        vibraSupported = OS.MobileDevice_vibration(
-                                             Internal_PackageSupport.initializeMobileDevice(
-                                                 Internal_PackageSupport.getDisplayInstance()),0);
-                    }
-                });
-            }
-        }
-    }
-
-}
-
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/nokiauiapi_qt/src/os.cpp	Mon Oct 04 00:10:53 2010 +0300
@@ -0,0 +1,262 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Nokia Corporation - initial implementation
+ *******************************************************************************/
+
+#include <QWidget>
+#include <coecntrl.h>
+#include <touchfeedback.h>
+#include <com_nokia_mid_ui_internal_OS.h>
+#include "autorelease.h"
+#include "csoftnotification.h"
+
+static CCoeControl* convertToSymbian(QWidget* window)
+    {
+    CCoeControl* control = 0;
+    if (window && window->winId())
+        {
+        control = reinterpret_cast<CCoeControl*> (window->winId());
+        }
+    return control;
+    }
+
+JNIEXPORT void JNICALL Java_com_nokia_mid_ui_internal_OS_MTouchFeedback_1InstantFeedback(
+        JNIEnv *, jclass, jint aStyle)
+    {
+    MTouchFeedback* feedback = MTouchFeedback::Instance();
+    if (feedback)
+        {
+        feedback->InstantFeedback(static_cast<TTouchLogicalFeedback> (aStyle));
+        }
+    }
+
+JNIEXPORT jboolean JNICALL Java_com_nokia_mid_ui_internal_OS_MTouchFeedback_1TouchFeedbackSupported(
+        JNIEnv *, jclass)
+    {
+    jboolean enabled = JNI_FALSE;
+    MTouchFeedback* feedback = MTouchFeedback::Instance();
+    if (feedback)
+        {
+        enabled = feedback->TouchFeedbackSupported() ? JNI_TRUE : JNI_FALSE;
+        }
+    return enabled;
+    }
+
+JNIEXPORT void JNICALL Java_com_nokia_mid_ui_internal_OS_MTouchFeedback_1SetFeedbackArea(
+        JNIEnv *, jclass, jint aControl, jint aAreaIndex, jint aX, jint aY,
+        jint aWidth, jint aHeight, jint aStyle)
+    {
+    MTouchFeedback* feedback = MTouchFeedback::Instance();
+    if (feedback)
+        {
+        CCoeControl* control = convertToSymbian(
+                reinterpret_cast<QWidget*> (aControl));
+        TRect feedbackRect(aX, aY, aX + aWidth, aY + aHeight);
+        feedback->SetFeedbackArea(control, static_cast<TUint32> (aAreaIndex),
+                feedbackRect, static_cast<TTouchLogicalFeedback> (aStyle),
+                ETouchEventStylusDown);
+        }
+    }
+
+JNIEXPORT void JNICALL Java_com_nokia_mid_ui_internal_OS_MTouchFeedback_1RemoveFeedbackArea(
+        JNIEnv *, jclass, jint aControl, jint aAreaIndex)
+    {
+    MTouchFeedback* feedback = MTouchFeedback::Instance();
+    if (feedback)
+        {
+        CCoeControl* control = convertToSymbian(
+                reinterpret_cast<QWidget*> (aControl));
+        feedback->RemoveFeedbackArea(control, aAreaIndex);
+        }
+    }
+
+JNIEXPORT void JNICALL Java_com_nokia_mid_ui_internal_OS_MTouchFeedback_1RemoveFeedbackForControl(
+        JNIEnv *, jclass, jint aControl)
+    {
+    MTouchFeedback* feedback = MTouchFeedback::Instance();
+    if (feedback)
+        {
+        CCoeControl* control = convertToSymbian(
+                reinterpret_cast<QWidget*> (aControl));
+        feedback->RemoveFeedbackForControl(control);
+        }
+    }
+
+JNIEXPORT void JNICALL Java_com_nokia_mid_ui_internal_OS_MTouchFeedback_1MoveFeedbackAreaToFirstPriority(
+        JNIEnv *, jclass, jint aControl, jint aAreaIndex)
+    {
+    MTouchFeedback* feedback = MTouchFeedback::Instance();
+    if (feedback)
+        {
+        CCoeControl* control = convertToSymbian(
+                reinterpret_cast<QWidget*> (aControl));
+        feedback->MoveFeedbackAreaToFirstPriority(control,
+                static_cast<TUint32> (aAreaIndex));
+        }
+    }
+
+JNIEXPORT jint JNICALL Java_com_nokia_mid_ui_internal_OS_createNativePeer(
+        JNIEnv* aJniEnv, jclass /*aClazz*/, jint aMidletId,
+        jint aNotificationId, jobject aPeer)
+    {
+    jobject peer = aJniEnv->NewWeakGlobalRef(aPeer);
+    if (!peer)
+        return KErrNoMemory;
+
+    // creates soft notification instance
+    CSoftNotification* softNote = NULL;
+    TRAPD(err, softNote = CSoftNotification::NewL(aMidletId,
+            aNotificationId));
+    if(err!=KErrNone)
+        {
+        aJniEnv->DeleteWeakGlobalRef((jweak)peer);
+        return err;
+        }
+    
+    // callback object class
+    jclass clazz = aJniEnv->GetObjectClass(peer);
+    jmethodID methodId = aJniEnv->GetMethodID(clazz, "notificationCallback",
+               "(I)V");
+   
+    softNote->SetPeerObserver(peer, methodId, aJniEnv);
+    aJniEnv->DeleteLocalRef(clazz);
+    return reinterpret_cast<jint> (softNote);
+    }
+
+JNIEXPORT jint JNICALL
+Java_com_nokia_mid_ui_internal_OS_getId(JNIEnv* /*aJniEnv*/,
+        jclass /*aPeer*/, jint aSoftNotificationHandle)
+    {
+    CSoftNotification* softNotification =
+            reinterpret_cast<CSoftNotification*> (aSoftNotificationHandle);
+    return softNotification->Id();
+    }
+
+HBufC* JavaStringToSymbianString(JNIEnv* aJniEnv, jstring aText)
+    {
+    HBufC* bufferText = NULL;
+
+    jboolean isCopy;
+    const jchar* javaChars = aJniEnv->GetStringChars(aText, &isCopy);
+    if (javaChars)
+        {
+        AutoReleaseStringChars cleaner(aJniEnv, aText, javaChars);
+        jsize length = aJniEnv->GetStringLength(aText);
+        TRAPD(err, bufferText = HBufC::NewL(length));
+        if (err == KErrNone)
+            {
+            TText* ptr = const_cast<TText*> (bufferText->Des().Ptr());
+            memcpy(ptr, javaChars, length * sizeof(jchar));
+            bufferText->Des().SetLength(length);
+            }
+        else
+            {
+            return bufferText;
+            }
+        }
+    else
+        {
+        return bufferText;
+        }
+        
+    return bufferText;
+    }
+
+JNIEXPORT jint JNICALL
+Java_com_nokia_mid_ui_internal_OS_setText(JNIEnv* aJniEnv, jclass /*aPeer*/,
+        jint aSoftNotificationHandle, jstring aPrimaryText, jstring aSecondaryText)
+    {
+    CSoftNotification* softNotification =
+            reinterpret_cast<CSoftNotification*> (aSoftNotificationHandle);
+    // Convert from java string to Symbian descriptor
+    HBufC* bufferPrimaryText = NULL;
+    if (aPrimaryText != NULL)
+        {
+        bufferPrimaryText = JavaStringToSymbianString(aJniEnv, aPrimaryText);
+        if (bufferPrimaryText == NULL)
+            {
+            return KErrNoMemory;
+            }
+        }
+
+    HBufC* bufferSecondaryText = NULL;
+    if (aSecondaryText != NULL)
+        {
+        bufferSecondaryText = JavaStringToSymbianString(aJniEnv,
+                aSecondaryText);
+        if (bufferSecondaryText == NULL)
+            {
+            return KErrNoMemory;
+            }
+        }
+    TRAPD(err,softNotification->SetTextL(*bufferPrimaryText, *bufferSecondaryText));
+    return err;
+    }
+
+JNIEXPORT jint JNICALL
+Java_com_nokia_mid_ui_internal_OS_removeSoftNotification(JNIEnv* /*aJniEnv*/,
+        jclass /*aPeer*/, jint aSoftNotificationHandle)
+    {
+    CSoftNotification* softNotification =
+            reinterpret_cast<CSoftNotification*> (aSoftNotificationHandle);
+    TRAPD(err,softNotification->RemoveSoftNotificationL());
+    delete softNotification;
+    return err;
+    }
+
+JNIEXPORT jint JNICALL
+Java_com_nokia_mid_ui_internal_OS_showSoftNotification(JNIEnv* /*aJniEnv*/,
+        jclass /*aPeer*/, jint aSoftNotificationHandle)
+    {
+    CSoftNotification* softNotification =
+            reinterpret_cast<CSoftNotification*> (aSoftNotificationHandle);
+    jboolean status(false);
+    TRAPD(err,status = softNotification->ShowSoftNotificationL());
+    if(status)
+        {
+        return err;
+        }
+    else
+        {
+        return KErrNone;
+        }
+    }
+
+JNIEXPORT jint JNICALL
+Java_com_nokia_mid_ui_internal_OS_setImagePath(JNIEnv* aJniEnv,
+        jclass /*aPeer*/, jint aSoftNotificationHandle, jstring aImagePath )
+    {
+    CSoftNotification* softNotification =
+    reinterpret_cast<CSoftNotification*> (aSoftNotificationHandle);
+    // Convert from java string to Symbian descriptor
+    HBufC* bufferImagePath = NULL;
+    if (aImagePath != NULL)
+        {
+        bufferImagePath = JavaStringToSymbianString(aJniEnv, aImagePath);
+        if (bufferImagePath == NULL)
+            {
+            return KErrNoMemory;
+            }
+        }
+    TRAPD(err,softNotification->SetImagePathL(*bufferImagePath));
+    return err;
+    }
+
+JNIEXPORT void JNICALL
+Java_com_nokia_mid_ui_internal_OS_destroy(JNIEnv* /*aJniEnv*/,
+        jclass /*clazz*/, jint aSoftNotificationHandle)
+    {
+    if (aSoftNotificationHandle > KErrNone)
+        {
+        CSoftNotification
+                * softNotification =
+                        reinterpret_cast<CSoftNotification*> (aSoftNotificationHandle);
+        delete softNotification;
+        }
+    }
--- a/javauis/nokiauiapi_qt/src_j2me/com/nokia/mid/ui/TactileFeedback.java	Fri Sep 17 08:28:21 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,462 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-
-package com.nokia.mid.ui;
-
-import org.eclipse.swt.widgets.Internal_PackageSupport;
-import com.nokia.mid.ui.internal.OS;
-
-;
-
-/**
- * This class is a Java extension to support tactile feedback (audio, vibra,
- * piezo, etc.) on touch-enabled devices. Tactile feedback is meant to give user
- * more clear feeling of touch events, like tapping and dragging. The actual
- * physical tactile feedback depends on the device tactile feedback
- * implementation, hardware and device settings. A device may implement the
- * feedback with different hardware methods, for example, vibra, audio or piezo
- * hardware.
- * <p>
- * The API supports both LCDUI and eSWT UI toolkits.
- * <p>
- * Using this class is safe when a device does not support tactile feedback. In
- * this case methods of this class can be called but this has no effect.
- * <p>
- * Tactile feedback can be generated in two ways:
- * <ul>
- * <li>By producing direct feedback from the application.</li>
- * <li>By adding feedback areas to area registry, in which case the feedback
- * will be produced by the tactile feedback system automatically when the
- * defined screen area (with defined feedback) is touched.</li>
- * </ul>
- * <p>
- * Direct feedback is given instantly with {@link #directFeedback
- * directFeedback} specifying the feedback type. Direct feedback can be used
- * when the user action is not just a tap in a certain area. For example if the
- * user drags from one menu item to the other the application may give direct
- * feedback to emphasize focus traverse.
- * <p>
- * In case of area registry for eSWT Control, the registry needs to be updated
- * every time when the size or position of a UI component changes, or when e.g.
- * a state of a UI component changes in such way that feedback type also
- * changes. Typically the area update may be implemented in
- * <code>controlMoved</code> and <code>controlResized</code> methods of
- * <code>ControlListener</code> interface.
- * <p>
- * In case of area registry for LCDUI Canvas or CustomItem no further actions
- * are required to update tactile feedback areas when a CustomItem is moved in a
- * Form or when a Canvas is changed due to e.g. orientation switch.
- * <p>
- * There are quite tight latency requirements for tactile feedback, and in most
- * cases feedback should be triggered in less than 30ms from the time when user
- * touched the screen. For the area registry the feedback system is responsible
- * of fulfilling this requirement, but in case of direct feedback it is the
- * responsibility of the user of this API.
- * <p>
- * The tactile feedback has 2 different styles: Basic and Sensitive. Each type
- * is defined in the device settings, not by this API. Each style of feedback is
- * used in different cases. Typically Basic style is used to emphasize the tap
- * event, while Sensitive style is used mostly at dragging operations, to
- * emphasize focus traverse, text selection, etc. Choosing a specific style for
- * each use case in up to developer, however it is good to follow the behavior
- * of native applications.
- * <p>
- * The goal of the API is to enable user-created UI components to have tactile
- * feedback. The UI component types supported by the API are limited to
- * user-defined components only: <code>javax.microedition.lcdui.Canvas</code>,
- * <code>javax.microedition.lcdui.CustomItem</code>,
- * <code>org.eclipse.swt.widgets.Control</code>. Other UI components (i.e. List,
- * TextBox, etc.) get default tactile feedback automatically from the platform.
- *
- * @version 0.001
- * @since 1.2
- */
-
-public class TactileFeedback
-{
-
-    /**
-     * Constant for specifying basic tactile feedback style. Actual style
-     * behaviour is set through device settings.
-     */
-    public static final int FEEDBACK_STYLE_BASIC = 1;
-
-    /**
-     * Constant for specifying sensitive tactile feedback style. Actual style
-     * behaviour is set through device settings.
-     */
-    public static final int FEEDBACK_STYLE_SENSITIVE = 2;
-
-    private final String invalidFeedbackStyleMsg = "Invalid feedback style specified";
-    private final String invalidControlTypeMsg = "Invalid object provided for tactile feedback registration";
-
-    private static final int TYPE_INVALID = 0;
-    private static final int TYPE_ESWT = 1;
-    private static final int TYPE_LCDUI = 2;
-    private static boolean feedbackEnabled;
-
-    /**
-     * Constructs tactile feedback engine object. The object may be used in both
-     * LCDUI and eSWT java UI toolkits. TactileFeedback object must be
-     * constructed before using any tactile feedback methods.
-     */
-    public TactileFeedback()
-    {
-    }
-
-    /**
-     * Triggers direct tactile feedback of the specified style.
-     *
-     * @param style
-     *            The style of the direct feedback. Use predefined values
-     *            FEEDBACK_STYLE_BASIC, FEEDBACK_STYLE_SENSITIVE. Actual style
-     *            behavior is set through device settings.
-     * @throws IllegalArgumentException
-     *             if the style parameter has invalid type.
-     */
-    public void directFeedback(int style) throws IllegalArgumentException
-    {
-        if ((style != FEEDBACK_STYLE_BASIC)
-                && (style != FEEDBACK_STYLE_SENSITIVE))
-            throw new IllegalArgumentException(invalidFeedbackStyleMsg);
-        if (org.eclipse.swt.widgets.Display.getCurrent() == null)
-        {
-            final int fStyle = style;
-            com.nokia.mj.impl.nokialcdui.LCDUIInvoker
-            .eSWTUIThreadRunnerSyncExec(new Runnable()
-            {
-                public void run()
-                {
-                    OS.MTouchFeedback_InstantFeedback(fStyle);
-                }
-            });
-
-        }
-        else
-        {
-            OS.MTouchFeedback_InstantFeedback(style);
-        }
-    }
-
-    /**
-     * Queries the device if it supports tactile feedback. It is safe to use
-     * this class even if the device does not support tactile feedback. Methods
-     * of this class can be called but this has no effect.
-     *
-     * @return true if the device supports tactile feedback, false otherwise.
-     */
-    public boolean isTouchFeedbackSupported()
-    {
-        if (org.eclipse.swt.widgets.Display.getCurrent() == null)
-        {
-            com.nokia.mj.impl.nokialcdui.LCDUIInvoker
-            .eSWTUIThreadRunnerSyncExec(new Runnable()
-            {
-
-                public void run()
-                {
-                    feedbackEnabled = OS
-                                      .MTouchFeedback_TouchFeedbackSupported();
-                }
-            });
-        }
-        else
-        {
-            feedbackEnabled = OS.MTouchFeedback_TouchFeedbackSupported();
-        }
-        return feedbackEnabled;
-    }
-
-    /**
-     * Registers area within a UI component for tactile feedback. If areas
-     * overlap then the feedback is given from the last registered area.
-     * {@link #moveFeedbackAreaToFirstPriority moveFeedbackAreaToFirstPriority}
-     * can be used to bring a certain area covered by another area into action.
-     * If an area with specified <code>id</code> is already registered it is
-     * updated. When updating an existing area there is no need to unregister it
-     * before re-registering again with new coordinates and/or feedback style.
-     * The area specified by <code>x</code>, <code>y</code>, <code>width</code>
-     * and <code>height</code> parameters may be located on the screen just
-     * partially.
-     *
-     * <p>
-     * In case of area registry for eSWT Control, the registry needs to be
-     * updated every time when the size or position of a UI component changes,
-     * or when e.g. a state of a UI component changes in such way that feedback
-     * type also changes. Typically the area update may be implemented in
-     * <code>controlMoved</code> and <code>controlResized</code> methods of
-     * <code>ControlListener</code> interface. The update of an area may be
-     * implemented by calling registerFeedbackArea with the same area id but new
-     * coordinates and/or feedback style.
-     * <p>
-     * In case of area registry for LCDUI Canvas or CustomItem no further
-     * actions are required to update tactile feedback areas when a CustomItem
-     * is moved in a Form or when a Canvas is changed due to e.g. orientation
-     * switch.
-     *
-     * @param uiObject
-     *            The UI component for tactile feedback registration. Valid
-     *            object types are: <code>javax.microedition.lcdui.Canvas</code>
-     *            , <code>javax.microedition.lcdui.CustomItem</code>,
-     *            <code>org.eclipse.swt.widgets.Control</code>.
-     * @param id
-     *            Id of the new tactile feedback area to be registered. Id's are
-     *            used to identify particular tactile feedback area within one
-     *            UI component. Id's do not need to be consecutive numbers.
-     * @param x
-     *            x-coordinate of the top-left corner of tactile feedback
-     *            rectangle to register.
-     * @param y
-     *            y-coordinate of the top-left corner of tactile feedback
-     *            rectangle to register.
-     * @param width
-     *            Width of tactile feedback rectangle to register.
-     * @param height
-     *            Height of tactile feedback rectangle to register.
-     * @param style
-     *            The style of the feedback for specified area. Use predefined
-     *            values <code>FEEDBACK_STYLE_BASIC</code>,
-     *            <code>FEEDBACK_STYLE_SENSITIVE</code>. Actual style behaviour
-     *            is defined through device settings.
-     * @throws IllegalArgumentException
-     *             if the uiObject parameter has invalid type.
-     * @throws IllegalArgumentException
-     *             if the style parameter has invalid type.
-     */
-    public void registerFeedbackArea(Object uiObject, int id, int x, int y,
-                                     int width, int height, int style) throws IllegalArgumentException
-    {
-        int type = controlType(uiObject);
-        if (type == TYPE_INVALID)
-            throw new IllegalArgumentException(invalidControlTypeMsg);
-
-        if ((style != FEEDBACK_STYLE_BASIC)
-                && (style != FEEDBACK_STYLE_SENSITIVE))
-            throw new IllegalArgumentException(invalidFeedbackStyleMsg);
-
-        int controlHandle = getControlHandle(uiObject);
-        if (type == TYPE_LCDUI)
-        {
-            final int fControlHandle = controlHandle;
-            final int fId = id;
-            final int fX = x;
-            final int fY = y;
-            final int fWidth = width;
-            final int fHeight = height;
-            final int fStyle = style;
-            com.nokia.mj.impl.nokialcdui.LCDUIInvoker
-            .eSWTUIThreadRunnerSyncExec(new Runnable()
-            {
-
-                public void run()
-                {
-                    OS.MTouchFeedback_SetFeedbackArea(fControlHandle,
-                                                      fId, fX, fY, fWidth, fHeight, fStyle);
-                }
-            });
-        }
-        else
-        {
-            OS.MTouchFeedback_SetFeedbackArea(controlHandle, id, x, y, width,
-                                              height, style);
-        }
-    }
-
-    /**
-     * Unregisters tactile feedback area within a UI component.
-     *
-     * @param uiObject
-     *            The UI component for tactile feedback area de-registration.
-     *            Valid object types are:
-     *            <code>javax.microedition.lcdui.Canvas</code>,
-     *            <code>javax.microedition.lcdui.CustomItem</code>,
-     *            <code>org.eclipse.swt.widgets.Control</code>.
-     * @param id
-     *            Id of the tactile feedback area to be unregistered. Id's are
-     *            used to identify particular tactile feedback area within one
-     *            UI component. If given id was not registered by
-     *            {@link #registerFeedbackArea registerFeedbackArea} then the
-     *            call has no effect.
-     * @throws IllegalArgumentException
-     *             if the uiObject parameter has invalid type.
-     */
-    public void unregisterFeedbackArea(Object uiObject, int id)
-    throws IllegalArgumentException
-    {
-
-        int type = controlType(uiObject);
-        if (type == TYPE_INVALID)
-            throw new IllegalArgumentException(invalidControlTypeMsg);
-
-        int controlHandle = getControlHandle(uiObject);
-        if (type == TYPE_LCDUI)
-        {
-            final int fControlHandle = controlHandle;
-            final int fId = id;
-            com.nokia.mj.impl.nokialcdui.LCDUIInvoker
-            .eSWTUIThreadRunnerSyncExec(new Runnable()
-            {
-
-                public void run()
-                {
-                    OS.MTouchFeedback_RemoveFeedbackArea(
-                        fControlHandle, fId);
-                }
-            });
-        }
-        else
-        {
-            OS.MTouchFeedback_RemoveFeedbackArea(controlHandle, id);
-        }
-
-    }
-
-    /**
-     * Removes all tactile feedback for a UI component.
-     *
-     * @param uiObject
-     *            The UI component for tactile feedback area de-registration.
-     *            Valid object types are:
-     *            <code>javax.microedition.lcdui.Canvas</code>,
-     *            <code>javax.microedition.lcdui.CustomItem</code>,
-     *            <code>org.eclipse.swt.widgets.Control</code>.
-     * @throws IllegalArgumentException
-     *             if the uiObject parameter has invalid type.
-     */
-    public void removeFeedbackForComponent(Object uiObject)
-    {
-        if (isTouchFeedbackSupported() == false)
-            return;
-
-        int type = controlType(uiObject);
-        if (type == TYPE_INVALID)
-            throw new IllegalArgumentException(invalidControlTypeMsg);
-
-        int controlHandle = getControlHandle(uiObject);
-
-        if (type == TYPE_LCDUI)
-        {
-            final int fControlHandle = controlHandle;
-            com.nokia.mj.impl.nokialcdui.LCDUIInvoker
-            .eSWTUIThreadRunnerSyncExec(new Runnable()
-            {
-
-                public void run()
-                {
-                    OS.MTouchFeedback_RemoveFeedbackForControl(fControlHandle);
-                }
-            });
-        }
-        else
-        {
-            OS.MTouchFeedback_RemoveFeedbackForControl(controlHandle);
-        }
-
-    }
-
-    /**
-     * Moves the specified tactile feedback area to first priority. Priority is
-     * significant in case of overlapping tactile feedback areas. If the tactile
-     * feedback styles of registered areas are different, the feedback from
-     * first-priority area will be given.
-     *
-     * @param uiObject
-     *            The UI component for tactile feedback area de-registration.
-     *            Valid object types are:
-     *            <code>javax.microedition.lcdui.Canvas</code>,
-     *            <code>javax.microedition.lcdui.CustomItem</code>,
-     *            <code>org.eclipse.swt.widgets.Control</code>.
-     * @param id
-     *            Id of the tactile feedback area to be unregistered. Id's are
-     *            used to identify particular tactile feedback area within one
-     *            UI component. If given id was not registered by
-     *            {@link #registerFeedbackArea registerFeedbackArea} then the
-     *            call has no effect.
-     * @throws IllegalArgumentException
-     *             if the uiObject parameter has invalid type.
-     */
-    public void moveFeedbackAreaToFirstPriority(Object uiObject, int id)
-    {
-        if (isTouchFeedbackSupported() == false)
-            return;
-
-        int type = controlType(uiObject);
-        if (type == TYPE_INVALID)
-            throw new IllegalArgumentException(invalidControlTypeMsg);
-
-        int controlHandle = getControlHandle(uiObject);
-        if (type == TYPE_LCDUI)
-        {
-            final int fControlHandle = controlHandle;
-            final int fId = id;
-            com.nokia.mj.impl.nokialcdui.LCDUIInvoker
-            .eSWTUIThreadRunnerSyncExec(new Runnable()
-            {
-
-                public void run()
-                {
-                    OS.MTouchFeedback_MoveFeedbackAreaToFirstPriority(
-                        fControlHandle, fId);
-                }
-            });
-        }
-        else
-        {
-            OS.MTouchFeedback_MoveFeedbackAreaToFirstPriority(
-                controlHandle, id);
-        }
-
-    }
-
-
-    private int controlType(Object obj)
-    {
-        if ((obj instanceof javax.microedition.lcdui.Canvas)
-                || (obj instanceof javax.microedition.lcdui.CustomItem))
-        {
-            return TYPE_LCDUI;
-        }
-        else if ((obj instanceof org.eclipse.swt.widgets.Control))
-        {
-            return TYPE_ESWT;
-        }
-        return TYPE_INVALID;
-    }
-
-    private int getControlHandle(Object uiObject)
-    {
-        int controlHandle = 0;
-        org.eclipse.swt.widgets.Control eSwtControl = null;
-        if (uiObject instanceof javax.microedition.lcdui.Canvas
-                || uiObject instanceof javax.microedition.lcdui.CustomItem)
-        {
-            eSwtControl = com.nokia.mj.impl.nokialcdui.LCDUIInvoker
-                          .getEswtControl(uiObject);
-        }
-        else if (uiObject instanceof org.eclipse.swt.widgets.Control)
-        {
-            eSwtControl = (org.eclipse.swt.widgets.Control) uiObject;
-        }
-
-        if (eSwtControl != null)
-        {
-            controlHandle = Internal_PackageSupport.topHandle(eSwtControl);
-        }
-        return controlHandle;
-    }
-
-}
--- a/javauis/nokiauiapi_qt/src_j2se/com/nokia/mid/ui/TactileFeedback.java	Fri Sep 17 08:28:21 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,462 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-
-package com.nokia.mid.ui;
-
-import org.eclipse.swt.widgets.Internal_PackageSupport;
-import com.nokia.mid.ui.internal.OS;
-
-;
-
-/**
- * This class is a Java extension to support tactile feedback (audio, vibra,
- * piezo, etc.) on touch-enabled devices. Tactile feedback is meant to give user
- * more clear feeling of touch events, like tapping and dragging. The actual
- * physical tactile feedback depends on the device tactile feedback
- * implementation, hardware and device settings. A device may implement the
- * feedback with different hardware methods, for example, vibra, audio or piezo
- * hardware.
- * <p>
- * The API supports both LCDUI and eSWT UI toolkits.
- * <p>
- * Using this class is safe when a device does not support tactile feedback. In
- * this case methods of this class can be called but this has no effect.
- * <p>
- * Tactile feedback can be generated in two ways:
- * <ul>
- * <li>By producing direct feedback from the application.</li>
- * <li>By adding feedback areas to area registry, in which case the feedback
- * will be produced by the tactile feedback system automatically when the
- * defined screen area (with defined feedback) is touched.</li>
- * </ul>
- * <p>
- * Direct feedback is given instantly with {@link #directFeedback
- * directFeedback} specifying the feedback type. Direct feedback can be used
- * when the user action is not just a tap in a certain area. For example if the
- * user drags from one menu item to the other the application may give direct
- * feedback to emphasize focus traverse.
- * <p>
- * In case of area registry for eSWT Control, the registry needs to be updated
- * every time when the size or position of a UI component changes, or when e.g.
- * a state of a UI component changes in such way that feedback type also
- * changes. Typically the area update may be implemented in
- * <code>controlMoved</code> and <code>controlResized</code> methods of
- * <code>ControlListener</code> interface.
- * <p>
- * In case of area registry for LCDUI Canvas or CustomItem no further actions
- * are required to update tactile feedback areas when a CustomItem is moved in a
- * Form or when a Canvas is changed due to e.g. orientation switch.
- * <p>
- * There are quite tight latency requirements for tactile feedback, and in most
- * cases feedback should be triggered in less than 30ms from the time when user
- * touched the screen. For the area registry the feedback system is responsible
- * of fulfilling this requirement, but in case of direct feedback it is the
- * responsibility of the user of this API.
- * <p>
- * The tactile feedback has 2 different styles: Basic and Sensitive. Each type
- * is defined in the device settings, not by this API. Each style of feedback is
- * used in different cases. Typically Basic style is used to emphasize the tap
- * event, while Sensitive style is used mostly at dragging operations, to
- * emphasize focus traverse, text selection, etc. Choosing a specific style for
- * each use case in up to developer, however it is good to follow the behavior
- * of native applications.
- * <p>
- * The goal of the API is to enable user-created UI components to have tactile
- * feedback. The UI component types supported by the API are limited to
- * user-defined components only: <code>javax.microedition.lcdui.Canvas</code>,
- * <code>javax.microedition.lcdui.CustomItem</code>,
- * <code>org.eclipse.swt.widgets.Control</code>. Other UI components (i.e. List,
- * TextBox, etc.) get default tactile feedback automatically from the platform.
- *
- * @version 0.001
- * @since 1.2
- */
-
-public class TactileFeedback
-{
-
-    /**
-     * Constant for specifying basic tactile feedback style. Actual style
-     * behaviour is set through device settings.
-     */
-    public static final int FEEDBACK_STYLE_BASIC = 1;
-
-    /**
-     * Constant for specifying sensitive tactile feedback style. Actual style
-     * behaviour is set through device settings.
-     */
-    public static final int FEEDBACK_STYLE_SENSITIVE = 2;
-
-    private final String invalidFeedbackStyleMsg = "Invalid feedback style specified";
-    private final String invalidControlTypeMsg = "Invalid object provided for tactile feedback registration";
-
-    private static final int TYPE_INVALID = 0;
-    private static final int TYPE_ESWT = 1;
-    private static final int TYPE_LCDUI = 2;
-    private static boolean feedbackEnabled;
-
-    /**
-     * Constructs tactile feedback engine object. The object may be used in both
-     * LCDUI and eSWT java UI toolkits. TactileFeedback object must be
-     * constructed before using any tactile feedback methods.
-     */
-    public TactileFeedback()
-    {
-    }
-
-    /**
-     * Triggers direct tactile feedback of the specified style.
-     *
-     * @param style
-     *            The style of the direct feedback. Use predefined values
-     *            FEEDBACK_STYLE_BASIC, FEEDBACK_STYLE_SENSITIVE. Actual style
-     *            behavior is set through device settings.
-     * @throws IllegalArgumentException
-     *             if the style parameter has invalid type.
-     */
-    public void directFeedback(int style) throws IllegalArgumentException
-    {
-        if ((style != FEEDBACK_STYLE_BASIC)
-                && (style != FEEDBACK_STYLE_SENSITIVE))
-            throw new IllegalArgumentException(invalidFeedbackStyleMsg);
-        if (org.eclipse.swt.widgets.Display.getCurrent() == null)
-        {
-            final int fStyle = style;
-            com.nokia.mj.impl.nokialcdui.LCDUIInvoker
-            .eSWTUIThreadRunnerSyncExec(new Runnable()
-            {
-                public void run()
-                {
-                    //  OS.MTouchFeedback_InstantFeedback(fStyle);
-                }
-            });
-
-        }
-        else
-        {
-            //OS.MTouchFeedback_InstantFeedback(style);
-        }
-    }
-
-    /**
-     * Queries the device if it supports tactile feedback. It is safe to use
-     * this class even if the device does not support tactile feedback. Methods
-     * of this class can be called but this has no effect.
-     *
-     * @return true if the device supports tactile feedback, false otherwise.
-     */
-    public boolean isTouchFeedbackSupported()
-    {
-        if (org.eclipse.swt.widgets.Display.getCurrent() == null)
-        {
-            com.nokia.mj.impl.nokialcdui.LCDUIInvoker
-            .eSWTUIThreadRunnerSyncExec(new Runnable()
-            {
-
-                public void run()
-                {
-                    // feedbackEnabled = OS
-                    //       .MTouchFeedback_TouchFeedbackSupported();
-                }
-            });
-        }
-        else
-        {
-            //  feedbackEnabled = OS.MTouchFeedback_TouchFeedbackSupported();
-        }
-        return feedbackEnabled;
-    }
-
-    /**
-     * Registers area within a UI component for tactile feedback. If areas
-     * overlap then the feedback is given from the last registered area.
-     * {@link #moveFeedbackAreaToFirstPriority moveFeedbackAreaToFirstPriority}
-     * can be used to bring a certain area covered by another area into action.
-     * If an area with specified <code>id</code> is already registered it is
-     * updated. When updating an existing area there is no need to unregister it
-     * before re-registering again with new coordinates and/or feedback style.
-     * The area specified by <code>x</code>, <code>y</code>, <code>width</code>
-     * and <code>height</code> parameters may be located on the screen just
-     * partially.
-     *
-     * <p>
-     * In case of area registry for eSWT Control, the registry needs to be
-     * updated every time when the size or position of a UI component changes,
-     * or when e.g. a state of a UI component changes in such way that feedback
-     * type also changes. Typically the area update may be implemented in
-     * <code>controlMoved</code> and <code>controlResized</code> methods of
-     * <code>ControlListener</code> interface. The update of an area may be
-     * implemented by calling registerFeedbackArea with the same area id but new
-     * coordinates and/or feedback style.
-     * <p>
-     * In case of area registry for LCDUI Canvas or CustomItem no further
-     * actions are required to update tactile feedback areas when a CustomItem
-     * is moved in a Form or when a Canvas is changed due to e.g. orientation
-     * switch.
-     *
-     * @param uiObject
-     *            The UI component for tactile feedback registration. Valid
-     *            object types are: <code>javax.microedition.lcdui.Canvas</code>
-     *            , <code>javax.microedition.lcdui.CustomItem</code>,
-     *            <code>org.eclipse.swt.widgets.Control</code>.
-     * @param id
-     *            Id of the new tactile feedback area to be registered. Id's are
-     *            used to identify particular tactile feedback area within one
-     *            UI component. Id's do not need to be consecutive numbers.
-     * @param x
-     *            x-coordinate of the top-left corner of tactile feedback
-     *            rectangle to register.
-     * @param y
-     *            y-coordinate of the top-left corner of tactile feedback
-     *            rectangle to register.
-     * @param width
-     *            Width of tactile feedback rectangle to register.
-     * @param height
-     *            Height of tactile feedback rectangle to register.
-     * @param style
-     *            The style of the feedback for specified area. Use predefined
-     *            values <code>FEEDBACK_STYLE_BASIC</code>,
-     *            <code>FEEDBACK_STYLE_SENSITIVE</code>. Actual style behaviour
-     *            is defined through device settings.
-     * @throws IllegalArgumentException
-     *             if the uiObject parameter has invalid type.
-     * @throws IllegalArgumentException
-     *             if the style parameter has invalid type.
-     */
-    public void registerFeedbackArea(Object uiObject, int id, int x, int y,
-                                     int width, int height, int style) throws IllegalArgumentException
-    {
-        int type = controlType(uiObject);
-        if (type == TYPE_INVALID)
-            throw new IllegalArgumentException(invalidControlTypeMsg);
-
-        if ((style != FEEDBACK_STYLE_BASIC)
-                && (style != FEEDBACK_STYLE_SENSITIVE))
-            throw new IllegalArgumentException(invalidFeedbackStyleMsg);
-
-        int controlHandle = getControlHandle(uiObject);
-        if (type == TYPE_LCDUI)
-        {
-            final int fControlHandle = controlHandle;
-            final int fId = id;
-            final int fX = x;
-            final int fY = y;
-            final int fWidth = width;
-            final int fHeight = height;
-            final int fStyle = style;
-            com.nokia.mj.impl.nokialcdui.LCDUIInvoker
-            .eSWTUIThreadRunnerSyncExec(new Runnable()
-            {
-
-                public void run()
-                {
-                    //      OS.MTouchFeedback_SetFeedbackArea(fControlHandle,
-                    //            fId, fX, fY, fWidth, fHeight, fStyle);
-                }
-            });
-        }
-        else
-        {
-            //OS.MTouchFeedback_SetFeedbackArea(controlHandle, id, x, y, width,
-            //      height, style);
-        }
-    }
-
-    /**
-     * Unregisters tactile feedback area within a UI component.
-     *
-     * @param uiObject
-     *            The UI component for tactile feedback area de-registration.
-     *            Valid object types are:
-     *            <code>javax.microedition.lcdui.Canvas</code>,
-     *            <code>javax.microedition.lcdui.CustomItem</code>,
-     *            <code>org.eclipse.swt.widgets.Control</code>.
-     * @param id
-     *            Id of the tactile feedback area to be unregistered. Id's are
-     *            used to identify particular tactile feedback area within one
-     *            UI component. If given id was not registered by
-     *            {@link #registerFeedbackArea registerFeedbackArea} then the
-     *            call has no effect.
-     * @throws IllegalArgumentException
-     *             if the uiObject parameter has invalid type.
-     */
-    public void unregisterFeedbackArea(Object uiObject, int id)
-    throws IllegalArgumentException
-    {
-
-        int type = controlType(uiObject);
-        if (type == TYPE_INVALID)
-            throw new IllegalArgumentException(invalidControlTypeMsg);
-
-        int controlHandle = getControlHandle(uiObject);
-        if (type == TYPE_LCDUI)
-        {
-            final int fControlHandle = controlHandle;
-            final int fId = id;
-            com.nokia.mj.impl.nokialcdui.LCDUIInvoker
-            .eSWTUIThreadRunnerSyncExec(new Runnable()
-            {
-
-                public void run()
-                {
-                    //  OS.MTouchFeedback_RemoveFeedbackArea(
-                    //        fControlHandle, fId);
-                }
-            });
-        }
-        else
-        {
-            //OS.MTouchFeedback_RemoveFeedbackArea(controlHandle, id);
-        }
-
-    }
-
-    /**
-     * Removes all tactile feedback for a UI component.
-     *
-     * @param uiObject
-     *            The UI component for tactile feedback area de-registration.
-     *            Valid object types are:
-     *            <code>javax.microedition.lcdui.Canvas</code>,
-     *            <code>javax.microedition.lcdui.CustomItem</code>,
-     *            <code>org.eclipse.swt.widgets.Control</code>.
-     * @throws IllegalArgumentException
-     *             if the uiObject parameter has invalid type.
-     */
-    public void removeFeedbackForComponent(Object uiObject)
-    {
-        if (isTouchFeedbackSupported() == false)
-            return;
-
-        int type = controlType(uiObject);
-        if (type == TYPE_INVALID)
-            throw new IllegalArgumentException(invalidControlTypeMsg);
-
-        int controlHandle = getControlHandle(uiObject);
-
-        if (type == TYPE_LCDUI)
-        {
-            final int fControlHandle = controlHandle;
-            com.nokia.mj.impl.nokialcdui.LCDUIInvoker
-            .eSWTUIThreadRunnerSyncExec(new Runnable()
-            {
-
-                public void run()
-                {
-                    //    OS.MTouchFeedback_RemoveFeedbackForControl(fControlHandle);
-                }
-            });
-        }
-        else
-        {
-            //OS.MTouchFeedback_RemoveFeedbackForControl(controlHandle);
-        }
-
-    }
-
-    /**
-     * Moves the specified tactile feedback area to first priority. Priority is
-     * significant in case of overlapping tactile feedback areas. If the tactile
-     * feedback styles of registered areas are different, the feedback from
-     * first-priority area will be given.
-     *
-     * @param uiObject
-     *            The UI component for tactile feedback area de-registration.
-     *            Valid object types are:
-     *            <code>javax.microedition.lcdui.Canvas</code>,
-     *            <code>javax.microedition.lcdui.CustomItem</code>,
-     *            <code>org.eclipse.swt.widgets.Control</code>.
-     * @param id
-     *            Id of the tactile feedback area to be unregistered. Id's are
-     *            used to identify particular tactile feedback area within one
-     *            UI component. If given id was not registered by
-     *            {@link #registerFeedbackArea registerFeedbackArea} then the
-     *            call has no effect.
-     * @throws IllegalArgumentException
-     *             if the uiObject parameter has invalid type.
-     */
-    public void moveFeedbackAreaToFirstPriority(Object uiObject, int id)
-    {
-        if (isTouchFeedbackSupported() == false)
-            return;
-
-        int type = controlType(uiObject);
-        if (type == TYPE_INVALID)
-            throw new IllegalArgumentException(invalidControlTypeMsg);
-
-        int controlHandle = getControlHandle(uiObject);
-        if (type == TYPE_LCDUI)
-        {
-            final int fControlHandle = controlHandle;
-            final int fId = id;
-            com.nokia.mj.impl.nokialcdui.LCDUIInvoker
-            .eSWTUIThreadRunnerSyncExec(new Runnable()
-            {
-
-                public void run()
-                {
-                    //     OS.MTouchFeedback_MoveFeedbackAreaToFirstPriority(
-                    //           fControlHandle, fId);
-                }
-            });
-        }
-        else
-        {
-            //  OS.MTouchFeedback_MoveFeedbackAreaToFirstPriority(
-            //                controlHandle, id);
-        }
-
-    }
-
-
-    private int controlType(Object obj)
-    {
-        if ((obj instanceof javax.microedition.lcdui.Canvas)
-                || (obj instanceof javax.microedition.lcdui.CustomItem))
-        {
-            return TYPE_LCDUI;
-        }
-        else if ((obj instanceof org.eclipse.swt.widgets.Control))
-        {
-            return TYPE_ESWT;
-        }
-        return TYPE_INVALID;
-    }
-
-    private int getControlHandle(Object uiObject)
-    {
-        int controlHandle = 0;
-        org.eclipse.swt.widgets.Control eSwtControl = null;
-        if (uiObject instanceof javax.microedition.lcdui.Canvas
-                || uiObject instanceof javax.microedition.lcdui.CustomItem)
-        {
-            eSwtControl = com.nokia.mj.impl.nokialcdui.LCDUIInvoker
-                          .getEswtControl(uiObject);
-        }
-        else if (uiObject instanceof org.eclipse.swt.widgets.Control)
-        {
-            eSwtControl = (org.eclipse.swt.widgets.Control) uiObject;
-        }
-
-        if (eSwtControl != null)
-        {
-            controlHandle = Internal_PackageSupport.topHandle(eSwtControl);
-        }
-        return controlHandle;
-    }
-
-}
--- a/javauis/subsystem_qt.mk	Fri Sep 17 08:28:21 2010 +0300
+++ b/javauis/subsystem_qt.mk	Mon Oct 04 00:10:53 2010 +0300
@@ -14,10 +14,10 @@
 # Description: Makefile for Qt based components and subsystems
 #
 
-SUBSYSTEMS   += eswt_qt/build
-COMPONENTS   += lcdui_qt/build runtimeui_qt/build nokiauiapi_qt/build mmapi_qt/build amms_qt/build m3g_qt/build
+SUBSYSTEMS   += eswt_qt/build nokiauiapi_qt/build
+COMPONENTS   += coreui_qt/build lcdui_qt/build runtimeui_qt/build mmapi_qt/build amms_qt/build m3g_qt/build
 
-SYMBIAN_ONLY += mmapi_qt/build amms_qt/build m3g_qt/build
+SYMBIAN_ONLY += coreui_qt/build mmapi_qt/build amms_qt/build m3g_qt/build
 
 # Build order dependency
-lcdui_qt/build runtimeui_qt/build nokiauiapi_qt/build mmapi_qt/build amms_qt/build m3g_qt/build: eswt_qt/build
+coreui_qt/build lcdui_qt/build runtimeui_qt/build nokiauiapi_qt/build mmapi_qt/build amms_qt/build m3g_qt/build: eswt_qt/build
--- a/rom/java_3_1.iby	Fri Sep 17 08:28:21 2010 +0300
+++ b/rom/java_3_1.iby	Mon Oct 04 00:10:53 2010 +0300
@@ -105,11 +105,9 @@
 /////////////////////////
 
 // CoreUi
-/*
 file=ABI_DIR\BUILD_DIR\javacoreui.dll                                       SHARED_LIB_DIR\javacoreui.dll
 data=JAVA_VM_RES_BLD\javacoreui.odc                                         JAVA_VM_RES_IMG\javacoreui.odc
-SCALABLE_IMAGE(APP_BITMAP_DIR,APP_BITMAP_DIR,javastartscreen)
-*/
+
 // eSWT
 file=ABI_DIR\BUILD_DIR\eswtqt.dll                                             SHARED_LIB_DIR\eswtqt.dll
 data=JAVA_VM_RES_BLD\eswtqt.odc                                               JAVA_VM_RES_IMG\eswtqt.odc
@@ -144,6 +142,8 @@
 // Nokia UI API
 file=ABI_DIR\BUILD_DIR\javanokiaui.dll                                     SHARED_LIB_DIR\javanokiaui.dll
 data=JAVA_VM_RES_BLD\javanokiaui.odc                                       JAVA_VM_RES_IMG\javanokiaui.odc
+file=ABI_DIR\BUILD_DIR\javasoftindicatorplugin.dll                         SHARED_LIB_DIR\javasoftindicatorplugin.dll
+data=DATAZ_\resource\plugins\indicators\javasoftindicatorplugin.qtplugin   resource\plugins\indicators\javasoftindicatorplugin.qtplugin
 
 // Nokia Sound API
 file=ABI_DIR\BUILD_DIR\javanokiasound.dll                                   SHARED_LIB_DIR\javanokiasound.dll
--- a/rom/javalocalization_3_1.iby	Fri Sep 17 08:28:21 2010 +0300
+++ b/rom/javalocalization_3_1.iby	Mon Oct 04 00:10:53 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -19,6 +19,7 @@
 #define __JAVALOCALIZATION_IBY__
 
 data=DATAZ_\RESOURCE_FILES_DIR\java\javausermessages.rsc            RESOURCE_FILES_DIR\java\javausermessages.rsc
-data=DATAZ_\QT_TRANSLATIONS_DIR\javaruntimeapplicationsettings.qm   QT_TRANSLATIONS_DIR\javaruntimeapplicationsettings.qm 
+data=DATAZ_\QT_TRANSLATIONS_DIR\javaruntimeapplicationsettings.qm   QT_TRANSLATIONS_DIR\javaruntimeapplicationsettings.qm
+data=DATAZ_\QT_TRANSLATIONS_DIR\javaapplicationinstaller.qm         QT_TRANSLATIONS_DIR\javaapplicationinstaller.qm
 
 #endif // __JAVALOCALIZATION_IBY__
--- a/rom/midpodclist30	Fri Sep 17 08:28:21 2010 +0300
+++ b/rom/midpodclist30	Mon Oct 04 00:10:53 2010 +0300
@@ -6,6 +6,7 @@
 javacomm.odc
 javacomms.odc
 javaconnectionmanager.odc
+javacoreui.odc
 javadatagram.odc
 javafile.odc
 javafileutils.odc