Revision: v2.1.32 RCL_3
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 15 Jul 2010 18:31:06 +0300
branchRCL_3
changeset 59 e5618cc85d74
parent 46 4376525cdefb
child 60 6c158198356e
Revision: v2.1.32 Kit: 2010127
build/buildutils/checkcopyrights.py
build/makefile.javaversion
inc/build_defines.hrh
inc/java.txt
javacommons/gcfprotocols/http/build/javahttp.pro
javacommons/gcfprotocols/http/build/javahttp_0x2002DCB1.mmp
javacommons/gcfprotocols/http/javasrc.s60/com/nokia/mj/impl/http/HttpConnectionNative.java
javacommons/gcfprotocols/http/src.s60/chttpsessionclient.cpp
javacommons/gcfprotocols/http/src.s60/chttptransactionclient.cpp
javacommons/gcfprotocols/http/src.s60/nativehttpsession.cpp
javacommons/gcfprotocols/http/src.s60/nativehttptraansaction.cpp
javacommons/gcfprotocols/http/src.s60/nativetransaction.cpp
javacommons/gcfprotocols/socket/socket/build/bld.inf
javacommons/gcfprotocols/socket/socket/build/bwins/javasocketu.def
javacommons/gcfprotocols/socket/socket/build/eabi/javasocketu.def
javacommons/gcfprotocols/socket/socket/build/exports.inf
javacommons/gcfprotocols/socket/socket/inc/socketlocalhostinfo.h
javacommons/gcfprotocols/socket/socket/javasrc/com/nokia/mj/impl/socket/ServerSocketConnectionImpl.java
javacommons/gcfprotocols/socket/socket/src.s60/socketlocalhostinfo.cpp
javacommons/security/javasrc/com/nokia/mj/impl/security/midp/common/SecurityExtensionsReader.java
javacommons/security/javasrc/com/nokia/mj/impl/security/midp/common/UserSecuritySettingsImpl.java
javaextensions/datagram/datagram/build/javadatagram.pro
javaextensions/datagram/datagram/build/javadatagram_0x2002DCA9.mmp
javaextensions/datagram/datagram/javasrc/com/nokia/mj/impl/datagram/UDPDatagramConnectionImpl.java
javaextensions/datagram/datagram/src/datagramconnectionjni.cpp
javaextensions/datagram/datagram/src/nativedatagramconnection.cpp
javaextensions/wma/sms_cbs/javasrc/com/nokia/mj/impl/sms/SMSPermissionImpl.java
javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt/InstallDetailsView.java
javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt/UninstallConfirmationView.java
javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/ViewBase.java
javamanager/javaregistry/client/src/writeablejavaregistryentry.cpp
javamanager/javasettings/appmngrplugin/src/appmngr2midletappinfo.cpp
javaruntimes/starter/build/javamidp_installer.pkg
javaruntimes/starter/build/javamidp_template.pkg
javauis/amms_akn/mmacontrol/src/cammsaudiooutputcontrol.cpp
javauis/eswt_akn/org.eclipse.ercp.swt.s60/native/inc/swtlabel.h
javauis/eswt_akn/org.eclipse.ercp.swt.s60/native/src/swtbutton.cpp
javauis/eswt_akn/org.eclipse.ercp.swt.s60/native/src/swtcontrolbase.cpp
javauis/eswt_akn/org.eclipse.ercp.swt.s60/native/src/swtlabel.cpp
javauis/lcdui_akn/javalcdui/build/build.xml
javauis/lcdui_akn/javalcdui/inc/MMIDCustomComponent.h
javauis/lcdui_akn/javalcdui/inc/lcdui.h
javauis/lcdui_akn/javalcdui/javasrc.nokialcdui/com/nokia/mid/ui/Clipboard.java
javauis/lcdui_akn/javalcdui/javasrc.nokialcdui/com/nokia/mid/ui/S40TextEditor.java
javauis/lcdui_akn/javalcdui/javasrc.nokialcdui/com/nokia/mid/ui/S60TextEditor.java
javauis/lcdui_akn/javalcdui/javasrc.nokialcdui/com/nokia/mid/ui/TextEditor.java
javauis/lcdui_akn/javalcdui/javasrc.nokialcdui/com/nokia/mid/ui/TextEditorExtensionAccess.java
javauis/lcdui_akn/javalcdui/javasrc.nokialcdui/com/nokia/mid/ui/TextEditorImpl.java
javauis/lcdui_akn/javalcdui/javasrc.nokialcdui/com/nokia/mid/ui/TextEditorTouchControl.java
javauis/lcdui_akn/javalcdui/javasrc/javax/microedition/lcdui/Toolkit.java
javauis/lcdui_akn/javalcdui/javasrc/javax/microedition/lcdui/ToolkitInvoker.java
javauis/lcdui_akn/javalcdui/src.nokialcdui/TextEditor.cpp
javauis/lcdui_akn/javalcdui/src.nokialcdui/TextEditorImpl.cpp
javauis/lcdui_akn/javalcdui/src/CMIDToolkit.cpp
javauis/lcdui_akn/lcdgd/src/lcdgdev.cpp
javauis/lcdui_akn/lcdui/inc/CMIDCanvas.h
javauis/lcdui_akn/lcdui/inc/CMIDCanvasGraphicsItem.h
javauis/lcdui_akn/lcdui/inc/CMIDControlItem.h
javauis/lcdui_akn/lcdui/inc/CMIDDateFieldItem.h
javauis/lcdui_akn/lcdui/inc/CMIDTextBoxQueryDialog.h
javauis/lcdui_akn/lcdui/inc/CMIDTextEditor.h
javauis/lcdui_akn/lcdui/inc/CMIDTextFieldItem.h
javauis/lcdui_akn/lcdui/src/CMIDCanvas.cpp
javauis/lcdui_akn/lcdui/src/CMIDCanvasGraphicsItem.cpp
javauis/lcdui_akn/lcdui/src/CMIDCanvasGraphicsItemPainter.cpp
javauis/lcdui_akn/lcdui/src/CMIDChoiceGroupControl.cpp
javauis/lcdui_akn/lcdui/src/CMIDControlItem.cpp
javauis/lcdui_akn/lcdui/src/CMIDDateFieldItem.cpp
javauis/lcdui_akn/lcdui/src/CMIDDisplayable.cpp
javauis/lcdui_akn/lcdui/src/CMIDEdwin.cpp
javauis/lcdui_akn/lcdui/src/CMIDEdwinUtils.cpp
javauis/lcdui_akn/lcdui/src/CMIDForm.cpp
javauis/lcdui_akn/lcdui/src/CMIDTextBoxQueryDialog.cpp
javauis/lcdui_akn/lcdui/src/CMIDTextEditor.cpp
javauis/lcdui_akn/lcdui/src/CMIDTextEditorEdwin.cpp
javauis/lcdui_akn/lcdui/src/CMIDTextEditorEdwinCustomDraw.cpp
javauis/lcdui_akn/lcdui/src/CMIDTextFieldEdwin.cpp
javauis/lcdui_akn/lcdui/src/CMIDTextFieldItem.cpp
--- a/build/buildutils/checkcopyrights.py	Mon Jun 21 15:32:50 2010 +0300
+++ b/build/buildutils/checkcopyrights.py	Thu Jul 15 18:31:06 2010 +0300
@@ -13,48 +13,54 @@
 # Contributors:
 #
 # Description:
-#   Checks that all the source files have a proper copyright header. 
+#   Checks that all the source files have a proper EPL copyright header.
 #   Ignores number of known 3rd party source files and directories.
 #
-#    Run this script on a clean workarea in order to avoid warnings
-#    about exported files and qmake generated files.
+#   Run this script on a clean workarea in order to avoid warnings
+#   about exported files and qmake generated files.
 #
-#    The excluded directories should be checked every now and then
-#    so that there won't be other problems (like files without any
-#    header).
+#   The excluded directories should be checked every now and then
+#   so that there won't be other problems (like files without any header).
 
 import sys, os, re
 
 # Specify here the file types to be checked
 checkedFileTypes = [".cpp", ".h", ".java", ".py", ".mk"]
 
-# Include here the directories to be ignored
-ignoredDirectories = [
-    "javaextensions\\bluetooth\\bluecove",  # Bluecove
-    "javacommons\\jvms\\j9\\s60\\inc",      # IBM J9
-    "javauis\\eswt_akn",                    # eSWT checked separately
-    "javauis\\eswt_qt",                     # eSWT checked separately
-    "javauis\\tsrc\\fute\\eswt\\",          # eSWT checked separately
-    "javaextensions\\webservices",          # Webservices not delivered
-    "jrt\\tools",                           # Tools not delivered
-    "\\internal"                            # Internal directories not delivered
-    ]
 
-# Include here any individual files to be ignored
-ignoredFiles = [
-    "javacommons\\jvms\\cldc_1.1.1\\javasrc\\java\\util\\Timer.java",       # Apache license
-    "javacommons\\jvms\\cldc_1.1.1\\javasrc\\java\\util\\TimerTask.java",   # Apache license
-    "javacommons\\jvms\\cldc_1.1.1\\tsrc\\javasrc\\com\\nokia\\mj\\test\\java\\util\\TimerTaskTest.java",   # Apache license
-    "javacommons\\jvms\\cldc_1.1.1\\tsrc\\javasrc\\com\\nokia\\mj\\test\\java\\util\\TimerTest.java",       # Apache license
-    "javacommons\\utils\\inc\\convertutf.h",                                # Unicode Inc.
-    "javacommons\\utils\\src\\convertutf.cpp"                               # Unicode Inc.
-]
-
-# The copyright text to be checked
-copyrightText = "Nokia Corporation and/or its subsidiary(-ies)"
+# The copyright texts to be searched for
+copyrightText1 = "Nokia Corporation and/or its subsidiary(-ies)"
+copyrightText2 = "Eclipse Public License v1.0"
 
 
 def main():
+
+    root = sys.argv[1]
+    if root[-1] != '\\':
+        root = root + '\\'
+
+    # Include here the directories to be ignored
+    ignoredDirectories = [
+        root + "javaextensions\\bluetooth\\bluecove",  # Bluecove
+        root + "javacommons\\jvms\\j9\\s60\\inc",      # IBM J9
+        root + "javauis\\eswt_akn",                    # eSWT checked separately
+        root + "javauis\\eswt_qt",                     # eSWT checked separately
+        root + "javauis\\tsrc\\fute\\eswt\\",          # eSWT checked separately
+        root + "javaextensions\\webservices",          # Webservices not delivered
+        root + "tools",                                # Tools not delivered
+        "\\internal"                                   # Internal directories not delivered
+        ]
+     
+    # Include here any individual files to be ignored
+    ignoredFiles = [
+        root + "javacommons\\jvms\\cldc_1.1.1\\javasrc\\java\\util\\Timer.java",       # Apache license
+        root + "javacommons\\jvms\\cldc_1.1.1\\javasrc\\java\\util\\TimerTask.java",   # Apache license
+        root + "javacommons\\jvms\\cldc_1.1.1\\tsrc\\javasrc\\com\\nokia\\mj\\test\\java\\util\\TimerTaskTest.java",   # Apache license
+        root + "javacommons\\jvms\\cldc_1.1.1\\tsrc\\javasrc\\com\\nokia\\mj\\test\\java\\util\\TimerTest.java",       # Apache license
+        root + "javacommons\\utils\\inc\\convertutf.h",                                # Unicode Inc.
+        root + "javacommons\\utils\\src\\convertutf.cpp"                               # Unicode Inc.
+    ]
+
     
     def visitFun(arg, dirname, names):
 
@@ -94,16 +100,29 @@
                 # print "Ignoring file", f
                 continue
 
-            # Check if the file contains the copyright text
+            # Check if the file contains the copyright texts
             try:                       
                 file = open(fname)
+                
+                # Search for the first text
                 found = False
                 line = file.readline()
                 while line != "":
-                    if copyrightText in line:
+                    if copyrightText1 in line:
                         found = True
                         break;
-                    line = file.readline()                
+                    line = file.readline()
+                
+                # Search the second copyright text as well
+                if found:
+                    found = False
+                    line = file.readline()
+                    while line != "":
+                        if copyrightText2 in line:
+                            found = True
+                            break;
+                        line = file.readline()
+
                 file.close()
                                     
             except IOError:
@@ -112,8 +131,8 @@
             if not found:
                 print fname
                 continue
-                
-    os.path.walk(sys.argv[1], visitFun, None)
+    
+    os.path.walk(root, visitFun, None)
 
 
 if __name__ == "__main__":
--- a/build/makefile.javaversion	Mon Jun 21 15:32:50 2010 +0300
+++ b/build/makefile.javaversion	Thu Jul 15 18:31:06 2010 +0300
@@ -1,6 +1,6 @@
 # Set Java version (must be dot separated, without spaces)
 ifdef RD_JAVA_S60_RELEASE_5_0_IAD
-  JAVA_VERSION = 2.1.30
+  JAVA_VERSION = 2.1.32
 else 
-  JAVA_VERSION = 2.1.30
+  JAVA_VERSION = 2.1.32
 endif
--- a/inc/build_defines.hrh	Mon Jun 21 15:32:50 2010 +0300
+++ b/inc/build_defines.hrh	Thu Jul 15 18:31:06 2010 +0300
@@ -15,7 +15,7 @@
 *
 */
 
-#define RD_JAVA_VERSION 2,1,30 
+#define RD_JAVA_VERSION 2,1,32 
 #define RD_JAVA_SYMBIAN_TARGET 
 #define RD_JAVA_S60_RELEASE_9_2 
 #define RD_JAVA_S60_RELEASE_9_2_ONWARDS 
--- a/inc/java.txt	Mon Jun 21 15:32:50 2010 +0300
+++ b/inc/java.txt	Thu Jul 15 18:31:06 2010 +0300
@@ -1,1 +1,1 @@
-2.1.30
+2.1.32
--- a/javacommons/gcfprotocols/http/build/javahttp.pro	Mon Jun 21 15:32:50 2010 +0300
+++ b/javacommons/gcfprotocols/http/build/javahttp.pro	Thu Jul 15 18:31:06 2010 +0300
@@ -13,6 +13,7 @@
 #
 # Description: 
 #
+include(../../../../inc/build_defines.pri)
 
 TARGET=javahttp
 TEMPLATE=lib
@@ -20,7 +21,13 @@
 CONFIG -= qt
 
 symbian {
-    LIBS += -leuser -lhttp -lecom -lbafl -linetprotutil -lhttpfiltercommon -lx509 -lx500 -lcrypto -lesock -lcommdb -lcentralrepository -lwebutils
+    LIBS += -leuser -lhttp -lecom -lbafl -linetprotutil -lhttpfiltercommon -lx509 -lx500 -lcrypto -lesock -lcentralrepository -lwebutils 
+    contains(PROJECT_DEFINES,RD_JAVA_S60_RELEASE_5_0) {
+        LIBS += -lcommdb
+    }
+    contains(PROJECT_DEFINES,RD_JAVA_S60_RELEASE_9_2_ONWARDS) {
+        LIBS += -lextendedconnpref -lnetmeta
+    }
 }
 
 
--- a/javacommons/gcfprotocols/http/build/javahttp_0x2002DCB1.mmp	Mon Jun 21 15:32:50 2010 +0300
+++ b/javacommons/gcfprotocols/http/build/javahttp_0x2002DCB1.mmp	Thu Jul 15 18:31:06 2010 +0300
@@ -83,9 +83,10 @@
 LIBRARY		x500.lib
 LIBRARY		crypto.lib
 LIBRARY		esock.lib
-LIBRARY		commdb.lib
 LIBRARY		centralrepository.lib
 LIBRARY		webutils.lib
+LIBRARY		extendedconnpref.lib
+LIBRARY		netmeta.lib
 LIBRARY		javautils.lib
 LIBRARY		libpthread.lib
 LIBRARY		libstdcppv5.lib
--- a/javacommons/gcfprotocols/http/javasrc.s60/com/nokia/mj/impl/http/HttpConnectionNative.java	Mon Jun 21 15:32:50 2010 +0300
+++ b/javacommons/gcfprotocols/http/javasrc.s60/com/nokia/mj/impl/http/HttpConnectionNative.java	Thu Jul 15 18:31:06 2010 +0300
@@ -194,7 +194,7 @@
         iTransactionBlock = new BlockingOperation();
         iNativeDataReadyForRead = new BlockingOperation();
         iNativeDataReadyForRead.setResult(BlockingOperation.BLOCKED);
-        iFinalizer = registerForFinalization();        
+        iFinalizer = registerForFinalization();
         Logger.LOG(Logger.ESOCKET, Logger.EInfo, "- HttpConnectionNative new ");
 
         ApplicationInfo appInfo = ApplicationInfo.getInstance();
@@ -253,9 +253,9 @@
         {
             close();
         }
-        catch(Exception e)
+        catch (Exception e)
         {
- 	
+
         }
         Logger.LOG(Logger.ESOCKET, Logger.EInfo,
                    "--HttpConnectionNative::doFinalize ");
--- a/javacommons/gcfprotocols/http/src.s60/chttpsessionclient.cpp	Mon Jun 21 15:32:50 2010 +0300
+++ b/javacommons/gcfprotocols/http/src.s60/chttpsessionclient.cpp	Thu Jul 15 18:31:06 2010 +0300
@@ -22,7 +22,13 @@
 #include <httpstringconstants.h>
 #include <e32svr.h>
 #include "logger.h"
+
+#ifdef RD_JAVA_S60_RELEASE_9_2_ONWARDS
+#include <extendedconnpref.h> // extended connection preference
+#include <connpref.h>
+#else
 #include <commdbconnpref.h>
+#endif
 
 #include <http/cecomfilter.h>
 #include <httpfilterproxyinterface.h>
@@ -146,10 +152,19 @@
                 *apnerr = ret;
                 return;
             }
-
+#ifdef RD_JAVA_S60_RELEASE_9_2_ONWARDS
+            TConnPrefList prefList;
+            TExtendedConnPref prefs;
+            prefs.SetSnapId(aAPNId);
+            prefList.AppendL(&prefs);
+            ret = iConnection.Start(prefList);
+#else
             TCommSnapPref connPref;
             connPref.SetSnap(aAPNId);
             ret = iConnection.Start(connPref);
+#endif
+
+            LOG(ESOCKET,EInfo,"+HttpSessionClient:: using extended connection prefernce in snap case");
             LOG1(ESOCKET,EInfo,"iConnection.Start returned %d",ret);
             if (ret < 0)
             {
@@ -172,6 +187,7 @@
     {
         if (aType == 3) // IAP Id
         {
+            LOG(ESOCKET,EInfo,"+HttpSessionClient:: in iap case");
             if (aAPNId != -1)
             {
                 // Creates connection with selected IAP ID
@@ -189,18 +205,35 @@
                     *apnerr = ret;
                     return;
                 }
+
+#ifdef RD_JAVA_S60_RELEASE_9_2_ONWARDS
+                // Create connection preferences
+                TConnPrefList prefList;
+                TExtendedConnPref prefs;
+                prefs.SetIapId(aAPNId);
+                prefList.AppendL(&prefs);
+                ret = iConnection.Start(prefList);
+                LOG(ESOCKET,EInfo,"+HttpSessionClient:: using extended connection prefernce in iap case");
+#else
                 TCommDbConnPref pref;
                 pref.SetIapId(aAPNId);
                 pref.SetDialogPreference(ECommDbDialogPrefDoNotPrompt);
                 ret = iConnection.Start(pref);
+#endif
+
                 if (ret < 0)
                 {
                     *apnerr = ret;
                     //return;
                 }
                 RHTTPConnectionInfo connInfo = iHttpSession.ConnectionInfo();
+                //connInfo.SetPropertyL(iHttpSession.StringPool().StringF(
+                //                          HttpFilterCommonStringsExt::EAccessPointID, HttpFilterCommonStringsExt::GetTable()), aAPNId);
                 connInfo.SetPropertyL(iHttpSession.StringPool().StringF(
-                                          HttpFilterCommonStringsExt::EAccessPointID, HttpFilterCommonStringsExt::GetTable()), aAPNId);
+                                          HTTP::EHttpSocketServ, RHTTPSession::GetTable()), THTTPHdrVal(iSocketServ.Handle()));
+                TInt connPtr = REINTERPRET_CAST(TInt, &iConnection);
+                connInfo.SetPropertyL(iHttpSession.StringPool().StringF(
+                                          HTTP::EHttpSocketConnection, RHTTPSession::GetTable()), THTTPHdrVal(connPtr));
             } // end of if ( aAPNId != -1)
         } // end of if(aType == 4)
         else
@@ -210,7 +243,7 @@
 
     } // end of else
 
-    LOG1(ESOCKET,EInfo,"apnerr = ",*apnerr);
+    LOG1(ESOCKET,EInfo,"apnerr = %d",*apnerr);
 
     // This is special case when that IAP/SNAP is not found
     // Override the http stack's feaute of using device default
@@ -219,9 +252,19 @@
         LOG(ESOCKET,EInfo,"ECommDbDialogPrefPrompt set for the http session");
         int ret = iSocketServ.Connect();
         ret = iConnection.Open(iSocketServ);
+#ifdef RD_JAVA_S60_RELEASE_9_2_ONWARDS
+        TConnPrefList prefList;
+        TExtendedConnPref prefs;
+        prefs.SetConnSelectionDialog(ETrue);
+        prefList.AppendL(&prefs);
+        ret = iConnection.Start(prefList);
+        LOG(ESOCKET,EInfo,"+HttpSessionClient:: using extended connection prefernce - error case ");
+#else
         TCommDbConnPref pref;
         pref.SetDialogPreference(ECommDbDialogPrefPrompt);
         ret = iConnection.Start(pref);
+        LOG(ESOCKET,EInfo,"+HttpSessionClient:: using commdb con pref - error case ");
+#endif
 
         RHTTPConnectionInfo connInfo = iHttpSession.ConnectionInfo();
         connInfo.SetPropertyL(iHttpSession.StringPool().StringF(
@@ -296,10 +339,25 @@
     iConnection.Close();
     TInt ret = iConnection.Open(iSocketServ);
 
+    //TCommSnapPref connPref;
+#ifdef RD_JAVA_S60_RELEASE_9_2_ONWARDS
+    TConnPrefList prefList;
+    TExtendedConnPref prefs;
+
+    if (iApnId!=-1)
+        prefs.SetSnapId(iApnId);
+    TRAPD(err,prefList.AppendL(&prefs));
+    if (err == KErrNone)
+        ret = iConnection.Start(prefList);
+    else
+        ret = iConnection.Start();
+#else
     TCommSnapPref connPref;
     if (iApnId!=-1)
         connPref.SetSnap(iApnId);
     ret = iConnection.Start(connPref);
+
+#endif
     LOG(ESOCKET,EInfo,"+HttpSessionClient::RestartConnection + ");
 
 }
--- a/javacommons/gcfprotocols/http/src.s60/chttptransactionclient.cpp	Mon Jun 21 15:32:50 2010 +0300
+++ b/javacommons/gcfprotocols/http/src.s60/chttptransactionclient.cpp	Thu Jul 15 18:31:06 2010 +0300
@@ -626,14 +626,14 @@
             iStatus = CHttpTransactionClient::ERequestNextBodayData;
             break;
         }
-        
+
         case THTTPEvent::EReceiveTimeOut:
         {
-        	  ELOG(ESOCKET,"MHFRunL EReceiveTimeOut");
-        	  NotifyErrorL(KErrTimedOut);  // send timeout error to java
-        	  break;
-        	
-        }        
+            ELOG(ESOCKET,"MHFRunL EReceiveTimeOut");
+            NotifyErrorL(KErrTimedOut);  // send timeout error to java
+            break;
+
+        }
         /*
         * -j2me expects the http stack to be able to post body data with no content type
         *   the native stack default validation filter does not allow this.
--- a/javacommons/gcfprotocols/http/src.s60/nativehttpsession.cpp	Mon Jun 21 15:32:50 2010 +0300
+++ b/javacommons/gcfprotocols/http/src.s60/nativehttpsession.cpp	Thu Jul 15 18:31:06 2010 +0300
@@ -49,10 +49,10 @@
 TInt NativeHttpSession::NewL(JNIEnv& aJni, jobject aPeer,/* TJavaEventServer aServer,*/ TInt aType, TInt aAPNId, TInt * aErr, TInt * apnerr)
 {
     NativeHttpSession* self =   new(ELeave) NativeHttpSession();
-    
+
     *aErr = self->ConstructL(aJni, aPeer  /* aServer*/, aType, aAPNId, apnerr);
     LOG1(ESOCKET,EInfo,"NativeHttpSession::NewL - aErr : %d",*aErr);
-   
+
     self->attachToVm(aJni,aPeer);
     // Pop the cleanup of the object and create a handle:
     return reinterpret_cast<TInt>(self); //selfCleanup.GetHandle();
@@ -119,17 +119,17 @@
 
 void NativeHttpSession::doSubmitCallback(TInt aStatus,jobject &aPeer)
 {
-    LOG(ESOCKET,EInfo,"+doSubmitCallback1");    
+    LOG(ESOCKET,EInfo,"+doSubmitCallback1");
     jobject localPeerObject = mJniEnv->NewLocalRef(aPeer);
-    if(localPeerObject)
+    if (localPeerObject)
     {
-    		// java side peer object may be GC'ed when this call is being made. 
-    		mJniEnv->CallVoidMethod(aPeer,iSubmitCallbackMethodID,aStatus);
+        // java side peer object may be GC'ed when this call is being made.
+        mJniEnv->CallVoidMethod(aPeer,iSubmitCallbackMethodID,aStatus);
     }
     else
     {
-    		ELOG(ESOCKET,"NativeHttpSession::doSubmitCallback: Error!! java peer object not found ");
-  	}	
+        ELOG(ESOCKET,"NativeHttpSession::doSubmitCallback: Error!! java peer object not found ");
+    }
     LOG(ESOCKET,EInfo,"-doSubmitCallback1");
 }
 
@@ -137,14 +137,14 @@
 {
     LOG(ESOCKET,EInfo,"+doReadCallback1");
     jobject localPeerObject = mJniEnv->NewLocalRef(aPeer);
-    if(localPeerObject)
+    if (localPeerObject)
     {
-    		mJniEnv->CallVoidMethod(aPeer,iReadCallbackMethodID,aStatus);
+        mJniEnv->CallVoidMethod(aPeer,iReadCallbackMethodID,aStatus);
     }
     else
     {
-    		ELOG(ESOCKET,"NativeHttpSession::doReadCallback: Error!! java peer object not found ");
-  	}    
+        ELOG(ESOCKET,"NativeHttpSession::doReadCallback: Error!! java peer object not found ");
+    }
     LOG(ESOCKET,EInfo,"-doReadCallback1");
 }
 
--- a/javacommons/gcfprotocols/http/src.s60/nativehttptraansaction.cpp	Mon Jun 21 15:32:50 2010 +0300
+++ b/javacommons/gcfprotocols/http/src.s60/nativehttptraansaction.cpp	Thu Jul 15 18:31:06 2010 +0300
@@ -57,7 +57,7 @@
 NativeHttpTransaction::NativeHttpTransaction(HttpSessionClient& aSession, FunctionServer* aFuncServer)
         :iSessionClient(aSession) //, java::util::FunctionServer("MyhttpServer2")
 {
-  
+
     iFuncServer = aFuncServer;
 }
 
@@ -72,7 +72,7 @@
 {
     NativeHttpTransaction* self =   new(ELeave) NativeHttpTransaction(aSession,aFuncServer);
 
-    
+
     self->ConstructL(aJni, aPeer, /*aServer, */ aUri, aRequestMethod);
 
 
@@ -93,9 +93,9 @@
     int urihandle = reinterpret_cast<int>(aUri);
     int methodhandle = reinterpret_cast<int>(aRequestMethod);
     //open the transaction
-    
+
     CallMethodL(this, &NativeHttpTransaction::ExecuteCreateTransactionL,handle,urihandle , methodhandle, iFuncServer);
-    
+
 }
 
 void NativeHttpTransaction::ExecuteCreateTransactionL(int aSelfhandle, int aUrihandle, int aMethodhandle)
@@ -115,7 +115,7 @@
     RPointerArray<HBufC8> rawHeaderArray;
     CleanupStack::PushL(TCleanupItem(CleanUpResetAndDestroy,&rawHeaderArray));
     iJniObject = aJni;
-    
+
 
     if (aHeaders!=NULL)
     {
@@ -173,7 +173,7 @@
 
 void NativeHttpTransaction::ExecuteSubmitL(int aSelfhandle , int aRawHeadershandle , int aPostBufhandle, int aResponseTimeout)
 {
-    
+
     NativeHttpTransaction *aSelf = reinterpret_cast<NativeHttpTransaction*>(aSelfhandle);
     RPointerArray<HBufC8>* aRawHeaders = reinterpret_cast<RPointerArray<HBufC8>*>(aRawHeadershandle);
     HBufC8* aPostBuf = reinterpret_cast<HBufC8*>(aPostBufhandle);
@@ -186,12 +186,12 @@
     jobjectArray objArray=NULL;
     RPointerArray<HBufC8> rawHeaders(KResponseGranularity);
     CleanupStack::PushL(TCleanupItem(CleanUpResetAndDestroy,&rawHeaders));
-    
+
     int handle = reinterpret_cast<int>(this);
 
     int arrayhandle = reinterpret_cast<int>(&rawHeaders);
     CallMethodL(this, &NativeHttpTransaction::ExecuteGetResponseL,handle,arrayhandle , iFuncServer);
-    
+
     const TInt headerCount = rawHeaders.Count();
     if (headerCount>KErrNone)
     {
@@ -232,7 +232,7 @@
 */
 TInt NativeHttpTransaction::ReadBytes(TUint8* aBytes, TInt aLength)
 {
-    
+
     int handle = reinterpret_cast<int>(this);
     int uinthandle = reinterpret_cast<int>(aBytes);
 
@@ -240,7 +240,7 @@
     CallMethod(ret,this, &NativeHttpTransaction::ExecuteReadBytes,handle,uinthandle,aLength,iFuncServer);
 
     return ret;
-    
+
 }
 
 TInt NativeHttpTransaction::ExecuteReadBytes(int aSelfhandle, int aByteshandle, TInt aLength)
--- a/javacommons/gcfprotocols/http/src.s60/nativetransaction.cpp	Mon Jun 21 15:32:50 2010 +0300
+++ b/javacommons/gcfprotocols/http/src.s60/nativetransaction.cpp	Thu Jul 15 18:31:06 2010 +0300
@@ -69,15 +69,15 @@
     NativeHttpTransaction* tran = reinterpret_cast<NativeHttpTransaction*>(aNativeHttpTransaction);
     tran->iJniPeer = aJni->NewWeakGlobalRef(aPeer);
     try
-		{
+    {
         tran->Dispose();
-   	}
-   	catch(...)
-   	{
-   		  // function server usage may throw an exception.   		
-   		  // ignore, called when transcation is closed
-   	    ELOG(ESOCKET,"Http JNI Error, exception caught!: _closeTransaction");    	
-   	}
+    }
+    catch (...)
+    {
+        // function server usage may throw an exception.
+        // ignore, called when transcation is closed
+        ELOG(ESOCKET,"Http JNI Error, exception caught!: _closeTransaction");
+    }
     delete tran;
 }
 
@@ -88,7 +88,7 @@
     jstring aUri,
     jstring aRequestMethod)
 {
-		LOG(ESOCKET,EInfo,"http jni _createNativeTransaction()");
+    LOG(ESOCKET,EInfo,"http jni _createNativeTransaction()");
     NativeHttpSession* session = reinterpret_cast<NativeHttpSession*>(aNativeHttpSession);
     //tran->iJniPeer = aJni->NewGlobalRef(aPeer);
     try
@@ -96,13 +96,13 @@
         TRAPD(handle,   handle = session->CreateTransactionL(aJni, aPeer , aUri, aRequestMethod););
         return handle;
     }
-    catch(...)
+    catch (...)
     {
-        // function server usage may throw an exception.   	
-        ELOG(ESOCKET,"Http JNI Error, exception caught!: _createTransaction");    	
-        return -1;    	
+        // function server usage may throw an exception.
+        ELOG(ESOCKET,"Http JNI Error, exception caught!: _createTransaction");
+        return -1;
     }
-    
+
 }
 
 JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_http_HttpConnectionNative__1submitTransaction(
@@ -114,7 +114,7 @@
     jint aPostDataLength,
     jint aResponseTimeout)
 {
-		LOG(ESOCKET,EInfo,"http jni _submitTransaction");
+    LOG(ESOCKET,EInfo,"http jni _submitTransaction");
     NativeHttpTransaction* tran = reinterpret_cast<NativeHttpTransaction*>(aNativeHttpTransaction);
     int respTimeOut = aResponseTimeout;
     tran->iJniPeer = aJni->NewWeakGlobalRef(aPeer);
@@ -123,11 +123,11 @@
         TRAPD(err,tran->SubmitL(aJni, &aPeer,aHeaders, aPostData, aPostDataLength, respTimeOut));
         return err;
     }
-    catch(...)
+    catch (...)
     {
-        ELOG(ESOCKET,"Http JNI Error, exception caught!: _submitTransaction");    	
-        return -1;	    	
-    }    
+        ELOG(ESOCKET,"Http JNI Error, exception caught!: _submitTransaction");
+        return -1;
+    }
 }
 
 JNIEXPORT jobjectArray JNICALL Java_com_nokia_mj_impl_http_HttpConnectionNative__1getResponse(
@@ -135,24 +135,24 @@
     jobject aPeer,
     jint aNativeHttpTransaction)
 {
-		LOG(ESOCKET,EInfo,"http jni _getResponse");
+    LOG(ESOCKET,EInfo,"http jni _getResponse");
     jobjectArray rawHeaders=NULL;
     NativeHttpTransaction* tran = reinterpret_cast<NativeHttpTransaction*>(aNativeHttpTransaction);
     tran->iJniPeer = aJni->NewWeakGlobalRef(aPeer);
     try
     {
-		    TRAPD(err, rawHeaders =  tran->GetResponseL(aJni));
-		    if (err!=KErrNone)
-		    {
-		        rawHeaders=NULL;
-		    }
-		}
-		catch(...)
-		{
-				rawHeaders=NULL;
-				ELOG(ESOCKET,"Http JNI Error, exception caught!: _getResponse");    	
-			
-		}
+        TRAPD(err, rawHeaders =  tran->GetResponseL(aJni));
+        if (err!=KErrNone)
+        {
+            rawHeaders=NULL;
+        }
+    }
+    catch (...)
+    {
+        rawHeaders=NULL;
+        ELOG(ESOCKET,"Http JNI Error, exception caught!: _getResponse");
+
+    }
     return rawHeaders;
 }
 
@@ -164,27 +164,27 @@
     jbyteArray  aBytes,
     jint        aLength)
 {
-		LOG(ESOCKET,EInfo,"http jni _getBytes");
+    LOG(ESOCKET,EInfo,"http jni _getBytes");
     jbyte* bytes = aEnv->GetByteArrayElements(aBytes, NULL);
 
     if (bytes == NULL)
     {
         return -1;
     }
-		try
-		{
-		    NativeHttpTransaction* tran = reinterpret_cast<NativeHttpTransaction*>(aNativeHttpTransaction);
-		    tran->iJniPeer = aEnv->NewWeakGlobalRef(aPeer);
-		    TInt length = tran->ReadBytes(reinterpret_cast<TUint8*>(bytes), aLength);
-		
-		    aEnv->ReleaseByteArrayElements(aBytes, bytes, NULL);
-		    return length;
-		}
-		catch(...)
-		{
-				ELOG(ESOCKET,"Http JNI Error, exception caught!: _getBytes");    	
-				return -1;					
-		}
+    try
+    {
+        NativeHttpTransaction* tran = reinterpret_cast<NativeHttpTransaction*>(aNativeHttpTransaction);
+        tran->iJniPeer = aEnv->NewWeakGlobalRef(aPeer);
+        TInt length = tran->ReadBytes(reinterpret_cast<TUint8*>(bytes), aLength);
+
+        aEnv->ReleaseByteArrayElements(aBytes, bytes, NULL);
+        return length;
+    }
+    catch (...)
+    {
+        ELOG(ESOCKET,"Http JNI Error, exception caught!: _getBytes");
+        return -1;
+    }
 }
 
 JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_http_HttpConnectionNative__1available(
@@ -196,12 +196,12 @@
     tran->iJniPeer = aJni->NewWeakGlobalRef(aPeer);
     try
     {
-    		return tran->Available();
+        return tran->Available();
     }
-    catch(...)
+    catch (...)
     {
-    		ELOG(ESOCKET,"Http JNI Error, exception caught!: _available");    	
-    		return -1;    	
+        ELOG(ESOCKET,"Http JNI Error, exception caught!: _available");
+        return -1;
     }
 }
 
--- a/javacommons/gcfprotocols/socket/socket/build/bld.inf	Mon Jun 21 15:32:50 2010 +0300
+++ b/javacommons/gcfprotocols/socket/socket/build/bld.inf	Thu Jul 15 18:31:06 2010 +0300
@@ -20,3 +20,4 @@
 
 PRJ_MMPFILES  
 javasocket_0x2002DCD4.mmp 
+#include "exports.inf" 
--- a/javacommons/gcfprotocols/socket/socket/build/bwins/javasocketu.def	Mon Jun 21 15:32:50 2010 +0300
+++ b/javacommons/gcfprotocols/socket/socket/build/bwins/javasocketu.def	Thu Jul 15 18:31:06 2010 +0300
@@ -1,5 +1,5 @@
 EXPORTS
-  ?jni_lookup@@YAP6AXXZPBD@Z @ 1 NONAME ; void (*)(void) jni_lookup(char const *)
+	?jni_lookup@@YAP6AXXZPBD@Z @ 1 NONAME ; void (*)(void) jni_lookup(char const *)
 	?readBytes@NativeSocketConnection@java@@UAEHAAUJNIEnv_@@PAV_jbyteArray@@@Z @ 2 NONAME ; int java::NativeSocketConnection::readBytes(struct JNIEnv_ &, class _jbyteArray *)
 	?setSocketOption@NativeSocketConnection@java@@QAEHHH@Z @ 3 NONAME ; int java::NativeSocketConnection::setSocketOption(int, int)
 	?socketClose@NativeSocketConnection@java@@QAEHXZ @ 4 NONAME ; int java::NativeSocketConnection::socketClose(void)
@@ -16,5 +16,5 @@
 	?getLocalPort@NativeSocketConnection@java@@QAEHXZ @ 15 NONAME ; int java::NativeSocketConnection::getLocalPort(void)
 	?getPort@NativeSocketConnection@java@@QAEHXZ @ 16 NONAME ; int java::NativeSocketConnection::getPort(void)
 	?getSocketOption@NativeSocketConnection@java@@QAEHH@Z @ 17 NONAME ; int java::NativeSocketConnection::getSocketOption(int)
-	
+	?getLocalAddress@SocketLocalHostInfo@@SAHHPADHH@Z @ 18 NONAME ; int SocketLocalHostInfo::getLocalAddress(int, char *, int, int)
 
--- a/javacommons/gcfprotocols/socket/socket/build/eabi/javasocketu.def	Mon Jun 21 15:32:50 2010 +0300
+++ b/javacommons/gcfprotocols/socket/socket/build/eabi/javasocketu.def	Thu Jul 15 18:31:06 2010 +0300
@@ -20,4 +20,5 @@
 	_ZN4java22NativeSocketConnectionD2Ev @ 19 NONAME
 	_ZTIN4java22NativeSocketConnectionE @ 20 NONAME ; #<TI>#
 	_ZTVN4java22NativeSocketConnectionE @ 21 NONAME ; #<VT>#
+	_ZN19SocketLocalHostInfo15getLocalAddressEiPcii @ 22 NONAME
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javacommons/gcfprotocols/socket/socket/build/exports.inf	Thu Jul 15 18:31:06 2010 +0300
@@ -0,0 +1,21 @@
+/*
+* 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: 
+*
+*/
+
+PRJ_EXPORTS
+
+../inc/socketlocalhostinfo.h                         |../../../../../inc/socketlocalhostinfo.h
+
--- a/javacommons/gcfprotocols/socket/socket/inc/socketlocalhostinfo.h	Mon Jun 21 15:32:50 2010 +0300
+++ b/javacommons/gcfprotocols/socket/socket/inc/socketlocalhostinfo.h	Thu Jul 15 18:31:06 2010 +0300
@@ -19,12 +19,14 @@
 #ifndef SOCKETLOCALHOSTINFO_H
 #define SOCKETLOCALHOSTINFO_H
 
+#include "javaosheaders.h"
+
 class SocketLocalHostInfo
 {
 
 public:
 
-    static int getLocalAddress(int aSd, char *aLocalAddr, int aMidletIapId, int aApType);
+    OS_IMPORT static int getLocalAddress(int aSd, char *aLocalAddr, int aMidletIapId, int aApType);
 
 
 };
--- a/javacommons/gcfprotocols/socket/socket/javasrc/com/nokia/mj/impl/socket/ServerSocketConnectionImpl.java	Mon Jun 21 15:32:50 2010 +0300
+++ b/javacommons/gcfprotocols/socket/socket/javasrc/com/nokia/mj/impl/socket/ServerSocketConnectionImpl.java	Thu Jul 15 18:31:06 2010 +0300
@@ -141,8 +141,7 @@
                     apId = -1;
                 }
                 Logger.LOG(Logger.ESOCKET, Logger.EInfo,
-                           "+SocketServerConnectionImpl:: getApplicationDefault returned,  \n"+apn.getNapId()+" type = "+apn.getType());
-                System.out.println(" type = "+apn.getType()+"  id = "+apId);
+                           "+SocketServerConnectionImpl:: getApplicationDefault returned,  \n"+apn.getNapId()+" type = "+apn.getType());                
             }
         }
         catch (Exception e)
--- a/javacommons/gcfprotocols/socket/socket/src.s60/socketlocalhostinfo.cpp	Mon Jun 21 15:32:50 2010 +0300
+++ b/javacommons/gcfprotocols/socket/socket/src.s60/socketlocalhostinfo.cpp	Thu Jul 15 18:31:06 2010 +0300
@@ -24,7 +24,7 @@
 
 int GetlocalIPAdressL(char *localaddr, int aMidletIapId, int aApType);
 
-int SocketLocalHostInfo::getLocalAddress(int /* aSd */, char *aLocalAddr,
+OS_EXPORT int SocketLocalHostInfo::getLocalAddress(int /* aSd */, char *aLocalAddr,
         int aMidletIapId, int aApType)
 {
     TRAPD(err,GetlocalIPAdressL(aLocalAddr,aMidletIapId, aApType););
@@ -32,6 +32,77 @@
 
 }
 
+int getIPAddressL(const int aIapId, char *ipAddress)
+{
+    RSocketServ socketServ;
+    RSocket sock;
+    User::LeaveIfError(socketServ.Connect());
+    User::LeaveIfError(sock.Open(socketServ, KAfInet, KSockStream,
+                                 KProtocolInetTcp));
+
+    //  find the ip address of the active interface
+    TSoInetInterfaceInfo ifInfo;
+    TPckg<TSoInetInterfaceInfo> ifInfoPkg(ifInfo);
+    TSoInetIfQuery ifQuery;
+    TPckg<TSoInetIfQuery> ifQueryPkg(ifQuery);
+
+    // To find out which interfaces are using our current IAP, we must
+    // enumerate and go through all of them and make a query by name for each.
+    ILOG(ESOCKET, "Looping thru all the destinations and ap \n\n");
+    User::LeaveIfError(sock.SetOpt(KSoInetEnumInterfaces,
+                                   KSolInetIfCtrl));
+
+    while (sock.GetOpt(KSoInetNextInterface, KSolInetIfCtrl, ifInfoPkg)
+            == KErrNone)
+    {
+        ifQuery.iName = ifInfo.iName;
+        TInt err = sock.GetOpt(KSoInetIfQueryByName, KSolInetIfQuery,
+                               ifQueryPkg);
+        if ((err == KErrNone) && (ifQuery.iZone[1] == aIapId))
+        {
+            ILOG2(ESOCKET, "Network id = %d, IAP id = %d ",(TUint32)(ifQuery.iZone[15]),(TUint32)ifQuery.iZone[1]);
+
+            // IAP ID is index 1 of iZone
+            // We have found an interface using the IAP we are interested in.
+            if (ifInfo.iAddress.Address() > 0)
+            {
+                if (!ifInfo.iAddress.IsUnspecified()
+                        && !ifInfo.iAddress.IsLoopback()
+                        && !ifInfo.iAddress.IsLinkLocal())
+                {
+                    // found a IPv4 address
+                    TBuf8<20> aIP8;
+                    TBuf<20> aIP;
+                    TInetAddr aAddr;
+                    aAddr = ifInfo.iAddress;
+                    aAddr.ConvertToV4();
+                    aAddr.Output(aIP);
+                    aIP8.Copy(aIP);
+
+                    strncpy(ipAddress, (char*) aIP8.Ptr(),
+                            aIP8.Length());
+                    ipAddress[aIP8.Length()] = '\0';
+                    ILOG1(ESOCKET, "GetlocalIPAdressLLL , ip = %s",
+                          ipAddress);
+                    sock.Close();
+                    socketServ.Close();
+                    ILOG(ESOCKET, "returning from getIpAddr");
+                    return KErrNone;
+                }
+            }  // end if addr > 0
+            else if (err != KErrNone)
+            {
+                sock.Close();
+                return err; // return with error
+            }
+        }
+    }   // end while
+    sock.Close();
+    socketServ.Close();
+    return KErrNone;
+
+}
+
 /**
  *In Symbian, when a server connection is opened, it is not bound to any interface
  *so the openC calls returns "0.0.0.0" as the local address.
@@ -43,7 +114,7 @@
 int GetlocalIPAdressL(char *localaddr, int aMidletIapId, int aType)
 {
     JELOG2(ESOCKET);
-
+    int err = KErrNone;
     TUint32 activeIapId = 0;
     TConnectionInfoBuf connectionInfo;
     TUint count = 0;
@@ -103,66 +174,19 @@
                     continue; // go to the next active IAP
             }
 
-            //  find the ip address of the active interface
-
-            TSoInetInterfaceInfo ifInfo;
-            TPckg<TSoInetInterfaceInfo> ifInfoPkg(ifInfo);
-            TSoInetIfQuery ifQuery;
-            TPckg<TSoInetIfQuery> ifQueryPkg(ifQuery);
-            // To find out which interfaces are using our current IAP, we must
-            // enumerate and go through all of them and make a query by name for each.
-            ILOG(ESOCKET, "Looping thru all the destinations and ap \n\n");
-            User::LeaveIfError(sock.SetOpt(KSoInetEnumInterfaces,
-                                           KSolInetIfCtrl));
-            while (sock.GetOpt(KSoInetNextInterface, KSolInetIfCtrl, ifInfoPkg)
-                    == KErrNone)
-            {
-                ifQuery.iName = ifInfo.iName;
-                TInt err = sock.GetOpt(KSoInetIfQueryByName, KSolInetIfQuery,
-                                       ifQueryPkg);
+            // find the ip address of the active IAP
+            err = getIPAddressL(activeIapId,localaddr);
+            break;  // once we find the IP addr, return
 
-                if ((err == KErrNone) && (ifQuery.iZone[1] == activeIapId))
-                {
-                    //TUint32 t5 = (TUint32)(ifQuery.iZone[15]);                    
-                    ILOG2(ESOCKET, "Network id = %d, IAP id = %d ",(TUint32)(ifQuery.iZone[15]),(TUint32)ifQuery.iZone[1]);
-                    
-                    // IAP ID is index 1 of iZone
-                    // We have found an interface using the IAP we are interested in.
-                    if (ifInfo.iAddress.Address() > 0)
-                        if (!ifInfo.iAddress.IsUnspecified()
-                                && !ifInfo.iAddress.IsLoopback()
-                                && !ifInfo.iAddress.IsLinkLocal())
-                        {
-                            // found a IPv4 address
-                            TBuf8<20> aIP8;
-                            TBuf<20> aIP;
-                            TInetAddr aAddr;
-                            aAddr = ifInfo.iAddress;
-                            aAddr.ConvertToV4();
-                            aAddr.Output(aIP);
-                            aIP8.Copy(aIP);
-
-                            strncpy(localaddr, (char*) aIP8.Ptr(),
-                                    aIP8.Length());
-                            localaddr[aIP8.Length()] = '\0';
-                            ILOG1(ESOCKET, "GetlocalIPAdressL , ip = %s",
-                                  localaddr);
-                            sock.Close();
-                            return KErrNone;
-                        }
-                }
-                else if (err != KErrNone)
-                {
-                    sock.Close();
-                    return err; // return with error
-                }
-            } // end while
         } // end for loop
 
     } // end else active connection
-
+    ILOG(ESOCKET, "GetlocalIPAdressL , got ip ");
+    conn.Close();
     sock.Close();
-    return KErrNotFound; // return with KErrNotFound
+    socketServ.Close();
+
+    return err; // return with KErrNotFound
 
 
 }
--- a/javacommons/security/javasrc/com/nokia/mj/impl/security/midp/common/SecurityExtensionsReader.java	Mon Jun 21 15:32:50 2010 +0300
+++ b/javacommons/security/javasrc/com/nokia/mj/impl/security/midp/common/SecurityExtensionsReader.java	Thu Jul 15 18:31:06 2010 +0300
@@ -327,6 +327,7 @@
             String mappingsSystemProperty)
     {
         String[] mappings = Tokenizer.split(mappingsSystemProperty, ";");
+        Vector validatedPermNames = new Vector();
         if (mappings != null)
         {
             for (int i=0; i<mappings.length; i++)
@@ -358,11 +359,13 @@
                             // one more check against the existing extensions
                             // permission mappings
                             found = find(namedPermName,
-                                         classBasedPermName,
+                                         (validatedPermNames.contains(classBasedPermName) 
+                                         ? null: classBasedPermName),
                                          extPermissionMappings);
                         }
                         if (!found)
                         {
+                            validatedPermNames.addElement(classBasedPermName);
                             extPermissionMappings.put(
                                 namedPermName,
                                 new MIDPPermission(
@@ -387,8 +390,9 @@
             Object key = e.nextElement();
             Object value = permMapping.get(key);
             if (((String)key).equalsIgnoreCase(namedPermName)
-                    || (((MIDPPermission)value)).getName()
-                    .equalsIgnoreCase(classBasedPermName))
+                    || ( classBasedPermName != null 
+                    && (((MIDPPermission)value)).getName()
+                    .equalsIgnoreCase(classBasedPermName)))
             {
                 return true;
             }
--- a/javacommons/security/javasrc/com/nokia/mj/impl/security/midp/common/UserSecuritySettingsImpl.java	Mon Jun 21 15:32:50 2010 +0300
+++ b/javacommons/security/javasrc/com/nokia/mj/impl/security/midp/common/UserSecuritySettingsImpl.java	Thu Jul 15 18:31:06 2010 +0300
@@ -181,6 +181,10 @@
         {
             id = URL_START_ID;
         }
+        else
+        {
+            return aSettingName;   
+        }
         return resLoader.format(id, null /*aTextParameters*/);
     }
 
--- a/javaextensions/datagram/datagram/build/javadatagram.pro	Mon Jun 21 15:32:50 2010 +0300
+++ b/javaextensions/datagram/datagram/build/javadatagram.pro	Thu Jul 15 18:31:06 2010 +0300
@@ -21,6 +21,6 @@
 
 INCLUDEPATH += ../../inc
 
-LIBS += -ljavadatagramscplugin -ljavagcf
+LIBS += -ljavadatagramscplugin -ljavagcf -ljavasocket
 
 include(../../../../build/omj.pri)
--- a/javaextensions/datagram/datagram/build/javadatagram_0x2002DCA9.mmp	Mon Jun 21 15:32:50 2010 +0300
+++ b/javaextensions/datagram/datagram/build/javadatagram_0x2002DCA9.mmp	Thu Jul 15 18:31:06 2010 +0300
@@ -75,6 +75,7 @@
 
 LIBRARY		javadatagramscplugin.lib
 LIBRARY		javagcf.lib
+LIBRARY		javasocket.lib
 LIBRARY		javautils.lib
 LIBRARY		libpthread.lib
 LIBRARY		libstdcppv5.lib
--- a/javaextensions/datagram/datagram/javasrc/com/nokia/mj/impl/datagram/UDPDatagramConnectionImpl.java	Mon Jun 21 15:32:50 2010 +0300
+++ b/javaextensions/datagram/datagram/javasrc/com/nokia/mj/impl/datagram/UDPDatagramConnectionImpl.java	Thu Jul 15 18:31:06 2010 +0300
@@ -297,7 +297,33 @@
         {
             throw new IOException("getLocalAddress failed: connection is already closed");
         }
-        retVal = _getLocalAddress(iNativePeerHandle, address);
+        int apId = -1;
+        int apType = -1;
+        try
+        {
+
+            Uid appSuite = ApplicationInfo.getInstance().getSuiteUid();
+            iCmInstance = ConnectionManager.getInstance();
+            AccessPoint apn = iCmInstance.getApplicationDefault(appSuite);
+            if (apn != null)
+            {
+                apId = apn.getNapId();
+                apType = apn.getType();
+
+                if ((apType!=AccessPoint.NAP_SNAP) && (apType!=AccessPoint.NAP_IAP))
+                {
+                    apType = -1;
+                    apId = -1;
+                }
+                Logger.LOG(Logger.ESOCKET, Logger.EInfo,
+                           "+SocketServerConnectionImpl:: getApplicationDefault returned,  \n"+apn.getNapId()+" type = "+apn.getType());
+            }
+        }
+        catch (Exception e)
+        {
+
+        }
+        retVal = _getLocalAddress(iNativePeerHandle, address, apId, apType);
         if (retVal < 0)
         {
             throw new IOException("getLocalAddress method failed.Posix error code: " + retVal);
@@ -512,7 +538,7 @@
     public Datagram newDatagram(byte[] aBuf, int aSize, String aAddr)
     throws IOException
     {
-
+        DatagramImpl tmp = null;
         if (!iConnectionOpen)
         {
             throw new IOException("newDatagram failed: connection is already closed");
@@ -524,9 +550,21 @@
         if (aAddr != null)
         {
             UrlParser urlvalidation = new UrlParser(aAddr);
+            tmp = new DatagramImpl(aBuf, aSize, aAddr);
         }
-        DatagramImpl t = new DatagramImpl(aBuf, aSize, aAddr);
-        return t;
+        else
+        {
+            String tmpAddr = null;
+            if (iUri != null)   // server datagram if iUri = null
+            {
+                if (iUri.host != null) // server datagram is host is null
+                {
+                    tmpAddr = iUri.toString();
+                }
+            }
+            tmp = new DatagramImpl(aBuf, aSize, tmpAddr);
+        }
+        return tmp;
     }
 
     Finalizer registerforFinalization()
@@ -571,7 +609,7 @@
                              int length, String host, int port);
     private native int _receive(int iNativePeerHandle, byte[] buf, int offset,
                                 int length, String[] senderAddr, int[] senderPort);
-    private native int _getLocalAddress(int iNativePeerHandle, String[] address);
+    private native int _getLocalAddress(int iNativePeerHandle, String[] address, int aIapId, int aType);
     private native int _getLocalPort(int iNativePeerHandle);
     private native int _close(int iNativePeerHandle);
     private native void _dispose(int iNativePeerHandle);
--- a/javaextensions/datagram/datagram/src/datagramconnectionjni.cpp	Mon Jun 21 15:32:50 2010 +0300
+++ b/javaextensions/datagram/datagram/src/datagramconnectionjni.cpp	Thu Jul 15 18:31:06 2010 +0300
@@ -23,6 +23,7 @@
 #include "logger.h"
 #include "pushexception.h"
 #include "pusherrorcodes.h"
+#include "socketlocalhostinfo.h"
 
 using namespace java;
 
@@ -99,16 +100,18 @@
 }
 
 JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_datagram_UDPDatagramConnectionImpl__1getLocalAddress
-(JNIEnv *aJni, jobject, jint nativePeerHandle, jobjectArray aAddress)
+(JNIEnv *aJni, jobject, jint /* nativePeerHandle */, jobjectArray aAddress, jint aMidletIapId, jint aApType)
 {
     char * addr = new char[256];
-    NativeDatagramConnection* datagramConn = reinterpret_cast<NativeDatagramConnection*>(nativePeerHandle);
-    int retVal = datagramConn->getLocalAddress(addr);
+
+    int err = SocketLocalHostInfo::getLocalAddress(0,addr,aMidletIapId,aApType);
+    PLOG2(ESOCKET, "getLocalAddress, ret = %d, addr = %s" , err, addr);
     jstring jnistring = aJni->NewStringUTF(addr);
     aJni->SetObjectArrayElement(aAddress, 0, jnistring);
     aJni->DeleteLocalRef(jnistring);
     delete[] addr;
-    return retVal;
+
+    return err;
 }
 
 JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_datagram_UDPDatagramConnectionImpl__1getLocalPort
--- a/javaextensions/datagram/datagram/src/nativedatagramconnection.cpp	Mon Jun 21 15:32:50 2010 +0300
+++ b/javaextensions/datagram/datagram/src/nativedatagramconnection.cpp	Thu Jul 15 18:31:06 2010 +0300
@@ -98,6 +98,11 @@
 
         LOG(ESOCKET, EInfo, "Datagram client connection");
         mSockDesc = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
+        struct sockaddr_in addr;
+        addr.sin_family = AF_INET;
+        addr.sin_addr.s_addr = htonl(INADDR_ANY);
+        int res = bind(mSockDesc, (struct sockaddr*) &addr, sizeof(addr));
+        LOG1(ESOCKET, EInfo, "Datagram client connection, bind returned %d",res);
 
         if (aApn != -1)
         {
--- a/javaextensions/wma/sms_cbs/javasrc/com/nokia/mj/impl/sms/SMSPermissionImpl.java	Mon Jun 21 15:32:50 2010 +0300
+++ b/javaextensions/wma/sms_cbs/javasrc/com/nokia/mj/impl/sms/SMSPermissionImpl.java	Thu Jul 15 18:31:06 2010 +0300
@@ -84,8 +84,7 @@
                 formattedDestination = iDestination.substring(1);
                 prefix = "+";
             }
-            formattedDestination = Formatter.formatDigits(formattedDestination) 
-                + prefix;
+            formattedDestination = prefix + Formatter.formatDigits(formattedDestination);
             if (iNumberOfSegments > 1)
             {
                 return (SecurityPromptMessage.getInstance()).getText(
--- a/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt/InstallDetailsView.java	Mon Jun 21 15:32:50 2010 +0300
+++ b/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt/InstallDetailsView.java	Thu Jul 15 18:31:06 2010 +0300
@@ -124,16 +124,11 @@
                             new String[] { iInstallInfo.getName() }),
                            horizontalSpan, labelStyle);
 
-        if (identified)
-        {
-            // Vendor information must be displayed only for
-            // identified applications.
-            Label vendorLabel = createLabel
-                                (InstallerUiTexts.get
-                                 (InstallerUiTexts.VENDOR,
-                                  new String[] { iInstallInfo.getVendor() }),
-                                 horizontalSpan, labelStyle);
-        }
+        Label vendorLabel = createLabel
+            (InstallerUiTexts.get
+             (InstallerUiTexts.VENDOR,
+              new String[] { iInstallInfo.getVendor() }),
+             horizontalSpan, labelStyle);
 
         Label versionLabel = createLabel
                              (InstallerUiTexts.get
--- a/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt/UninstallConfirmationView.java	Mon Jun 21 15:32:50 2010 +0300
+++ b/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt/UninstallConfirmationView.java	Thu Jul 15 18:31:06 2010 +0300
@@ -119,16 +119,11 @@
                             new String[] { iUninstallInfo.getName() }),
                            horizontalSpan, labelStyle);
 
-        if (identified)
-        {
-            // Vendor information must be displayed only for
-            // identified applications.
-            Label vendorLabel = createLabel
-                                (InstallerUiTexts.get
-                                 (InstallerUiTexts.VENDOR,
-                                  new String[] { iUninstallInfo.getVendor() }),
-                                 horizontalSpan, labelStyle);
-        }
+        Label vendorLabel = createLabel
+            (InstallerUiTexts.get
+             (InstallerUiTexts.VENDOR,
+              new String[] { iUninstallInfo.getVendor() }),
+             horizontalSpan, labelStyle);
 
         Label versionLabel = createLabel
                              (InstallerUiTexts.get
--- a/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/ViewBase.java	Mon Jun 21 15:32:50 2010 +0300
+++ b/javamanager/javainstaller/installerui/javasrc/com/nokia/mj/impl/installer/ui/eswt2/ViewBase.java	Thu Jul 15 18:31:06 2010 +0300
@@ -536,15 +536,10 @@
         if (aFull)
         {
             // Add vendor.
-            if (aInstallInfo.getCertificates() != null)
-            {
-                // Vendor information must be displayed only for
-                // identified applications.
-                createAppInfoLabel(
-                    InstallerUiTexts.get(
-                        InstallerUiTexts.SUITE_VENDOR,
-                        new String[] { aInstallInfo.getVendor() }));
-            }
+            createAppInfoLabel(
+                InstallerUiTexts.get(
+                    InstallerUiTexts.SUITE_VENDOR,
+                    new String[] { aInstallInfo.getVendor() }));
         }
         // Add size.
         long size = 0;
--- a/javamanager/javaregistry/client/src/writeablejavaregistryentry.cpp	Mon Jun 21 15:32:50 2010 +0300
+++ b/javamanager/javaregistry/client/src/writeablejavaregistryentry.cpp	Thu Jul 15 18:31:06 2010 +0300
@@ -303,19 +303,15 @@
         AttributesL();
     }
 
-    CJavaAttribute* regAttr = NULL;
 
     for (TInt i = 0; i < iAttributes.Count(); i++)
     {
         if (0 == (iAttributes[i])->Name().Compare(aName))
         {
-            regAttr = CJavaAttribute::NewL((iAttributes[i])->Name(),
-                                           (iAttributes[i])->Value(),
-                                           (iAttributes[i])->Trusted());
-            break;
+            return iAttributes[i];
         }
     }
-    return regAttr;
+    return NULL;
 }
 
 // ---------------------------------------------------------------------------
--- a/javamanager/javasettings/appmngrplugin/src/appmngr2midletappinfo.cpp	Mon Jun 21 15:32:50 2010 +0300
+++ b/javamanager/javasettings/appmngrplugin/src/appmngr2midletappinfo.cpp	Thu Jul 15 18:31:06 2010 +0300
@@ -636,21 +636,18 @@
         iDataSize = attribute->Value().AllocL();
     }
     // Description
-    delete attribute;
     attribute = aEntry->AttributeL(KMIDletDescription()); // no ownership
     if (attribute)
     {
         iDescription = attribute->Value().AllocL();
     }
     // Info URL
-    delete attribute;
     attribute = aEntry->AttributeL(KMIDletInfoURL()); // no ownership
     if (attribute)
     {
         iInfoUrl = attribute->Value().AllocL();
     }
     // Update URL
-    delete attribute;
     attribute = aEntry->AttributeL(KNokiaUpdate()); // no ownership
     if (attribute)
     {
@@ -664,7 +661,6 @@
             iUpdateUrl = attribute->Value().AllocL();
         }
     }
-    delete attribute;
     // Use localized midlet suite name if it exists
     attribute = aEntry->AttributeL(KNokiaMIDletName()); // no ownership
     if (attribute)
@@ -676,7 +672,6 @@
         // Use non-localized name
         iLocalizedMIDletName = aEntry->Name().AllocL();
     }
-    delete attribute;
 
     RArray<TUid> midletUids;
     CleanupClosePushL(midletUids);
@@ -696,7 +691,6 @@
         if (attribute)
         {
             contentLength += attribute->Value().Length();
-            delete attribute;
         }
         else
         {
@@ -737,7 +731,6 @@
                 ptrContent.Append(KListSeparatorAndSpace);
                 ptrContent.Append(attribute->Value());
             }
-            delete attribute;
         }
         else
         {
@@ -795,7 +788,6 @@
             iPermissions = attribute->Value().AllocL();
             iPermissions->Des().TrimAll();
         }
-        delete attribute;
     }
 
     LOG(EJavaAppMngrPlugin, EInfo, "- CAppMngr2MidletAppInfo::ConstructL");
--- a/javaruntimes/starter/build/javamidp_installer.pkg	Mon Jun 21 15:32:50 2010 +0300
+++ b/javaruntimes/starter/build/javamidp_installer.pkg	Thu Jul 15 18:31:06 2010 +0300
@@ -1,4 +1,4 @@
-; javamidp_installer.pkg generated by qmake at 2010-06-08T10:21:53
+; javamidp_installer.pkg generated by qmake at 2010-06-22T08:16:56
 ; This file is generated by qmake and should not be modified by the user
 ;
 
@@ -27,5 +27,5 @@
  
 
 
-"X:/sf/app/jrt/javaruntimes/starter/build/javamidp.sis" - "c:\adm\javamidp.sis"
-@"X:/sf/mw/qt/smartinstaller.sis",(0x2002CCCD)
+"R:/sf/app/jrt/javaruntimes/starter/build/javamidp.sis" - "c:\adm\javamidp.sis"
+@"R:/sf/mw/qt/smartinstaller.sis",(0x2002CCCD)
--- a/javaruntimes/starter/build/javamidp_template.pkg	Mon Jun 21 15:32:50 2010 +0300
+++ b/javaruntimes/starter/build/javamidp_template.pkg	Thu Jul 15 18:31:06 2010 +0300
@@ -1,4 +1,4 @@
-; javamidp_template.pkg generated by qmake at 2010-06-08T10:21:53
+; javamidp_template.pkg generated by qmake at 2010-06-22T08:16:56
 ; This file is generated by qmake and should not be modified by the user
 ;
 
--- a/javauis/amms_akn/mmacontrol/src/cammsaudiooutputcontrol.cpp	Mon Jun 21 15:32:50 2010 +0300
+++ b/javauis/amms_akn/mmacontrol/src/cammsaudiooutputcontrol.cpp	Thu Jul 15 18:31:06 2010 +0300
@@ -355,6 +355,18 @@
     if (deviceType == KAccMonHeadset)
     {
         DEBUG("AMMS::CAMMSAudioOutputControl::DisconnectedL: Headset Disconnected");
+        iArray.Reset();
+        iAccMonitor->GetConnectedAccessoriesL(iArray);   
+        TInt count = iArray.Count();
+        if (count != 0)
+        {   
+           for (TInt i = 0; i != count; i++)
+           {
+              TAccMonCapability deviceType = iArray[ i ]->AccDeviceType();
+              if (deviceType == KAccMonHeadset)
+                 return;
+           }
+        }
         // If audio o/p preference is default and no accessories is connected or
         // o/p preference is not private then set the preference as public to
         // volume control
--- a/javauis/eswt_akn/org.eclipse.ercp.swt.s60/native/inc/swtlabel.h	Mon Jun 21 15:32:50 2010 +0300
+++ b/javauis/eswt_akn/org.eclipse.ercp.swt.s60/native/inc/swtlabel.h	Thu Jul 15 18:31:06 2010 +0300
@@ -56,6 +56,7 @@
     TInt  MinimumHeight(TInt aLineCount) const;
     void  DoSetFontL(const CFont* aFont);
     void  SwtHandleResourceChangeL(TInt aType);
+    TInt  GetFontHeight(const CFont* aFont) const;
 
 // From CCoeControl
 public:
--- a/javauis/eswt_akn/org.eclipse.ercp.swt.s60/native/src/swtbutton.cpp	Mon Jun 21 15:32:50 2010 +0300
+++ b/javauis/eswt_akn/org.eclipse.ercp.swt.s60/native/src/swtbutton.cpp	Thu Jul 15 18:31:06 2010 +0300
@@ -213,18 +213,12 @@
     iButton->SetBackground(this);   // Back will be drawn by ASwtControlBase::Draw
 
     // Set default color
-    TRgb colorNormal;
+    TRgb color;
     AknsUtils::GetCachedColor(AknsUtils::SkinInstance(),
-                              colorNormal,
+                              color,
                               KAknsIIDQsnTextColors,
-                              EAknsCIQsnTextColorsCG13); // SK
-    TRgb colorPressed;
-    AknsUtils::GetCachedColor(AknsUtils::SkinInstance(),
-                              colorPressed,
-                              KAknsIIDQsnTextColors,
-                              EAknsCIQsnTextColorsCG69); // pressed SK
-    iButton->OverrideColorL(EColorButtonText, colorNormal);
-    iButton->OverrideColorL(EColorButtonTextPressed, colorPressed);
+                              EAknsCIQsnTextColorsCG6);
+    iButton->OverrideColorL(EColorButtonText, color);
 }
 
 // ---------------------------------------------------------------------------
@@ -646,13 +640,10 @@
     }
     else
     {
-        // Reset to default color
-        TRgb colorNormal;
         AknsUtils::GetCachedColor(AknsUtils::SkinInstance(),
-                                  colorNormal,
+                                  color,
                                   KAknsIIDQsnTextColors,
-                                  EAknsCIQsnTextColorsCG13); // SK
-        iButton->OverrideColorL(EColorButtonText, colorNormal);
+                                  EAknsCIQsnTextColorsCG6);
     }
 
     if (iButton)
--- a/javauis/eswt_akn/org.eclipse.ercp.swt.s60/native/src/swtcontrolbase.cpp	Mon Jun 21 15:32:50 2010 +0300
+++ b/javauis/eswt_akn/org.eclipse.ercp.swt.s60/native/src/swtcontrolbase.cpp	Thu Jul 15 18:31:06 2010 +0300
@@ -73,7 +73,12 @@
                         CSwtLafFacade::EInputFieldSkinPlacingGeneralLine5, rect, 0).Rect().iTl;
 
     iFocusFrame = CAknsFrameBackgroundControlContext::NewL(
-                      KAknsIIDQsnFrInput, rect, innerRect, EFalse /*parent absolute*/);
+#ifdef RD_JAVA_S60_RELEASE_9_2
+                      KAknsIIDQsnFrPopupPreview,
+#else
+                      KAknsIIDQsnFrInput,
+#endif // RD_JAVA_S60_RELEASE_9_2
+                      rect, innerRect, EFalse /*parent absolute*/);
 
     if (iBackgrdDefaultUsed)
     {
--- a/javauis/eswt_akn/org.eclipse.ercp.swt.s60/native/src/swtlabel.cpp	Mon Jun 21 15:32:50 2010 +0300
+++ b/javauis/eswt_akn/org.eclipse.ercp.swt.s60/native/src/swtlabel.cpp	Thu Jul 15 18:31:06 2010 +0300
@@ -483,8 +483,7 @@
     const CFont* font = iEikLabel->Font();
 
     // Estimate how many text rows within given rectangle
-    // Use HeightInPixels same as MinimumHeight
-    TInt textPaneHeight = font->HeightInPixels();
+    TInt textPaneHeight = GetFontHeight(font);
     const TInt gap = iEikLabel->PixelGapBetweenLines();
 
     // The last row in label does not add a gap after it. So...
@@ -620,7 +619,7 @@
     // This is to fix some fonts getting clipped from above.
     // Do not change this ever, as wrapping will surely brake.
     return aLineCount * iEikLabel->PixelGapBetweenLines()
-           + aLineCount * iEikLabel->Font()->HeightInPixels();
+           + aLineCount * GetFontHeight(iEikLabel->Font());
 }
 
 // ---------------------------------------------------------------------------
@@ -649,6 +648,24 @@
 }
 
 // ---------------------------------------------------------------------------
+// CSwtLabel::GetFontHeight
+// ---------------------------------------------------------------------------
+//
+TInt CSwtLabel::GetFontHeight(const CFont* aFont) const
+{
+    if (!aFont)
+    {
+        return 0;
+    }
+
+#ifdef RD_JAVA_S60_RELEASE_9_2
+    return aFont->FontMaxHeight();
+#else
+    return aFont->HeightInPixels();
+#endif
+}
+
+// ---------------------------------------------------------------------------
 // CSwtLabel::Draw
 // From CCoeControl
 // ---------------------------------------------------------------------------
--- a/javauis/lcdui_akn/javalcdui/build/build.xml	Mon Jun 21 15:32:50 2010 +0300
+++ b/javauis/lcdui_akn/javalcdui/build/build.xml	Thu Jul 15 18:31:06 2010 +0300
@@ -77,7 +77,6 @@
                    com.nokia.mid.ui.TextEditorImpl,
                    com.nokia.mid.ui.Clipboard,
                    com.nokia.mid.ui.S60TextEditor,
-                   com.nokia.mid.ui.S40TextEditor,
                    com.nokia.mid.ui.TextEditorListener,
                    com.nokia.mid.ui.CanvasGraphicsItem,
                    com.nokia.mid.ui.CanvasGraphicsItemPainter,
@@ -96,7 +95,7 @@
         com.nokia.keyboard.type=:lcduib.DynamicPropertyHandler
         com.nokia.key.scancode=:lcduib.DynamicPropertyHandler
         com.nokia.key.modifier=:lcduib.DynamicPropertyHandler 
-        com.nokia.mid.ui.customfonts=true
+        com.nokia.mid.ui.customfontsize=true
         com.nokia.mid.ui.tactilefeedback=true
         com.nokia.mid.ui.screensaverprevention=true
     </properties>
--- a/javauis/lcdui_akn/javalcdui/inc/MMIDCustomComponent.h	Mon Jun 21 15:32:50 2010 +0300
+++ b/javauis/lcdui_akn/javalcdui/inc/MMIDCustomComponent.h	Thu Jul 15 18:31:06 2010 +0300
@@ -40,8 +40,18 @@
  */
 class MMIDCustomComponent
 {
+public: // new types
+    /**
+     * Datatype indicates what change was made.
+     */
+    enum TChange
+    {
+        EFullscreenChange,
+        EResolutionChange,
+        EPartialVKBChange
+    };
+
 public: // New methods
-
     /**
      * Returns the count of controls in this custom component.
      *
@@ -117,11 +127,13 @@
     virtual void HandleFullscreenModeChange() = 0;
 
     /**
-     * Handles changes of screen orientation.
+     * Handles system resource change messages.
+     *
+     * @param aType A message UID value.
      *
      * @since S60 5.0
      */
-    virtual void HandleResolutionChange() = 0;
+    virtual void HandleResourceChange(TInt aType) = 0;
 
 protected: // Destructor
 
--- a/javauis/lcdui_akn/javalcdui/inc/lcdui.h	Mon Jun 21 15:32:50 2010 +0300
+++ b/javauis/lcdui_akn/javalcdui/inc/lcdui.h	Thu Jul 15 18:31:06 2010 +0300
@@ -49,6 +49,7 @@
 #include <badesca.h>
 #include <gdi.h>
 #include <w32std.h>
+#include <aknsconstants.h>
 
 #ifdef RD_JAVA_NGA_ENABLED
 #include <EGL/egltypes.h>
@@ -133,6 +134,13 @@
 }
 
 
+#ifdef RD_JAVA_S60_RELEASE_9_2
+const TInt KHighlightedItemTextColor    = EAknsCIQsnTextColorsCG6;
+#else
+const TInt KHighlightedItemTextColor    = EAknsCIQsnTextColorsCG8;
+#endif // RD_JAVA_S60_RELEASE_9_2
+const TInt KNonHighlightedItemTextColor = EAknsCIQsnTextColorsCG6;
+
 
 /**
  *
--- a/javauis/lcdui_akn/javalcdui/javasrc.nokialcdui/com/nokia/mid/ui/Clipboard.java	Mon Jun 21 15:32:50 2010 +0300
+++ b/javauis/lcdui_akn/javalcdui/javasrc.nokialcdui/com/nokia/mid/ui/Clipboard.java	Thu Jul 15 18:31:06 2010 +0300
@@ -66,9 +66,7 @@
      * Copies characters from the system clipboard.
      * <P>
      * Returns empty string when there is nothing in the system clipboard.
-     * <P>
-     * This method is not supported on S40 platform, returns <code>null</code>.
-     * <P>
+     *
      * @return the content in clipboard
      */
     public static String copyFromClipboard()
--- a/javauis/lcdui_akn/javalcdui/javasrc.nokialcdui/com/nokia/mid/ui/S40TextEditor.java	Mon Jun 21 15:32:50 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,320 +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:  Interface for S40 Text Editor
- *
- */
-
-package com.nokia.mid.ui;
-
-import javax.microedition.lcdui.Command;
-import javax.microedition.lcdui.Image;
-
-/**
- * This interfaces provides access to extended editing-related functionality,
- *  that is only available on s40-devices:<p>
- * <b>Commands:</b><br>
- * Applications can use {@link TextEditor#getTextEditorCommands()} and
- * {@link TextEditor#launchTextEditorCommand(Command, int)} to present
- * editing-commands in a customized way. When launching such a command,
- * the application has to specify a command-mode. This is because some commands
- * may require information regarding the key-state that has caused this command
- * to be launched. For example, calling
- * launchTextEditorCommand(cmd, COMMAND_MODE_KEYPRESS) for the "Clear"-command
- * will cause to editor to keep deleting characters until the application calls
- * launchTextEditorCommand(cmd, COMMAND_MODE_KEYRELEASE). Since not all commands
- * require keystate-information, applications can use
- * {@link com.nokia.mid.ui.S40TextEditor #isCommandKeyWanted(Command)}
- * If no command-key is wanted, COMMAND_MODE_SELECTED should be passed
- * when launching this command <p>
- * <b>Indicator-icons</b><br>
- * It is possible to access the indicator-icons that the platform would normally
- * display as Images, using
- * {@link com.nokia.mid.ui.S40TextEditor #getIndicatorIcons()} <p>
- * <b>Visibility</b><br>
- * Applications may be in the situation where they want an editor to be visible,
- * but to not process keys or be animated, e.g. while a custom options-menu
- * is displayed. In those cases, it is possible to call
- * {@link com.nokia.mid.ui.S40TextEditor #setVisible(int)} <p>
- * <b>Extra properties</b><br>
- * Some properties that are not available in the com.nokia.mid.ui.TextEditor,
- * like writing-direction, native emoticon support and positioning for native
- * popup-windows.  <p>
- * On s40-devices this interface is implemented by the object returned by
- * {@link com.nokia.mid.ui.TextEditor#createTextEditor(String, int, int, int,
- * int)} if the MIDlet is manufacturer- or operator-signed
- *
- */
-public abstract interface S40TextEditor
-{
-
-    /**
-     * command type used to indicate commands
-     * that should be put on the middle softkey
-     */
-    public final static int SELECT_SOFTKEY_COMMAND = 9;
-
-    /**
-     * command type used to indicate commands
-     * that should be put on the right softkey.
-     */
-    public final static int RIGHT_SOFTKEY_COMMAND = 10;
-
-    /**
-     * command type used to indicate commands
-     * that should be put as the last one in the option list.
-     */
-    public final static int LAST_IN_OPTIONS_COMMAND = 12;
-
-    /**
-     * command type used to indicate commands
-     * that should be put on the left softkey.
-     */
-    public final static int LEFT_SOFTKEY_COMMAND = 13;
-
-
-    /**
-     * constant for left-to-right direction
-     */
-    public static final int DIRECTION_LTR = 0;
-
-    /**
-     * constant for right-to-left direction
-     */
-    public static final int DIRECTION_RTL = 1;
-
-    /**
-     * Event that indicates that the applications options-list should be closed.
-     * The implementation sends this even in a case where the platform
-     * has displayed further nested options as the result
-     * of a {@link TextEditor#launchTextEditorCommand(Command)}-call.
-     * If the user selects one of the nested options (e.g. "copy"),
-     * the platform will carry out the associated functionality, dismiss
-     * the native options-popup  and send the ACTION_OPTIONS_CLOSED-event,
-     * in order to indicate that any options-list that the application
-     * might have displayed should also be closed.
-     *
-     */
-    public static final int ACTION_OPTIONS_CLOSED = 0x200;
-
-    /**
-     * Event that indicates a change in the position of this editor. Typically
-     * one (or both) of the values last returned by
-     * {@link com.nokia.mid.ui.TextEditor#getContentHeight()} and
-     * {@link com.nokia.mid.ui.TextEditor#getVisibleContentPosition()}
-     * will have changed after this event.
-     *
-     */
-    public static final int ACTION_SCROLLBAR_CHANGED = 0x400;
-
-    /**
-     * Indicates that the text in this TextEditor is masked according to the
-     * Oz Mobile Password Masking Scheme
-     */
-    public static final int PASSWORD_MASKED = 0x400000;
-
-    /**
-     * Indicates that the text in this TextEditor is locked according to the
-     * Oz Mobile Password Masking Scheme
-     */
-    public static final int PASSWORD_LOCKED = 0x800000;
-
-    /**
-     * constant value to indicate a hidden/invisible TextEditor
-     */
-    public static final int HIDDEN=0;
-
-    /**
-     * constant value to indicate partial visibility of a TextEditor.
-     * A partially visible TextEditor will still be displayed, but not
-     * receive any key-events, and not have a blinking cursor
-     */
-    public static final int PARTIALLY_VISIBLE=0;
-
-    /**
-     * constant value to indicate full visibility of a TextEditor
-     */
-    public static final int VISIBLE=0;
-
-
-    /**
-     * Command-mode to indicate that a command is launched without
-     * keystate-information, e.g. from an options-menu
-     */
-    public static final int COMMAND_MODE_SELECTED=0;
-
-    /**
-     * Command-mode to indicate that a command is launched with a keypress,
-     * e.g. by pressing RSK
-     */
-    public static final int COMMAND_MODE_KEYPRESS=0;
-
-    /**
-     * Command-mode to indicate that a command has been launched
-     * with a keypress, and that this key has now been released,
-     * e.g. by releasing the RSK
-     */
-    public static final int COMMAND_MODE_KEYRELEASE=0;
-
-    /**
-     * Specifies the current input mode of this TextEditor
-     * @param mode the new input-mode. This should be a value returned by
-     *     {@link TextEditor#getInputMode()}
-     */
-    public void setInputMode(int mode) throws IllegalArgumentException;
-
-    /**
-     * Gets the current input mode of this TextEditor
-     * @return the current input mode. This value represents a native
-     * input-mode, that can be passed to {@link TextEditor#setInputMode(int)}
-     *
-     */
-    public int getInputMode();
-
-    /**
-     * Returns the current set of Editor-Commands
-     * @return the commands
-     */
-    public Command[] getTextEditorCommands();
-
-
-
-    /**
-     * Executes an editor-option. This method will invoke native functionality
-     * according to the command. This may be an action in the editor
-     * (copy, delete,..) which then in turn will cause callbacks to this editors
-     * TextEditorListener. It may as well cause platform-controlled panels
-     * (nested options, touch-dialog) to cover part of or the full display. <br>
-     * This method should be called from inside the keyPressed()-method.
-     * @param cmd The command to launch. This has to be a command returned by
-     *     {@link TextEditor#getTextEditorCommands()}
-     * @return true if launching this command has displayed a list of further
-     *      sub-commands as a popup. if an application has displayed
-     *      an options-menu before launching a command, this options-menu
-     *      should normally stay on the screen after this launch, to indicate
-     *      that the native sub-commands are nested and related to the command
-     *      that has been launched.
-     *
-     * @throws IllegalStateException if the TextEditor is not focussed during
-     *      this call
-     * @throws IllegalArgumentException if the command is not available
-     *      in the editor. Commands that are available in the editor are only
-     *      those that this editor has provided via
-     *      {@link TextEditor#getTextEditorCommands()}
-     */
-    public boolean launchTextEditorCommand(Command cmd,int mode)
-    throws IllegalStateException, IllegalArgumentException;
-
-    /**
-     * Gets the menu-state of a Command
-     * @param cmd The Command to query for Menu-state. This has to be a command
-     *      returned by {@link TextEditor#getTextEditorCommands()}
-     * @return true if this a Menu Command. Launching a Menu Command will show
-     *      a popup on the display, providing further commands to the user
-     */
-    public boolean isMenuCommand(Command cmd);
-
-    /**
-     * Returns whether a command requires keystate-information to be launched.
-     * @param cmd The command to be queried
-     * @return true if cmd requires keystate-information. In this case,
-     *      one of COMMAND_MODE_KEYPRESS or COMMAND_MODE_KEYRELEASE should be
-     *      passed when launching this command via
-     *      {@link com.nokia.mid.ui.S40TextEditor #launchTextEditorCommand(
-     *      Command, int)} false if cmd does not require keystate-informationl.
-     *      In that case, COMMAND_MODE_SELECTED should be passed
-     *      when launching it.
-     */
-    public boolean isCommandKeyWanted(Command cmd);
-
-
-    /**
-     * Specifies the amount of pixels by which the TextEditor will scroll text
-     * horizontally, if multiline input is disabled.
-     * @param offset The scrolling offset. When a cursor-movement requires
-     *      horizontal scrolling of the text, this value indicates by how many
-     *      pixels the text will be moved.
-     */
-    public void setHorizontalScrollingWidth(int offset);
-
-    /**
-     * Gets the current horizontal scrolling width
-     * @return the scrolling width
-     */
-    public int getHorizontalScrollingWidth();
-
-    /**
-     * Gets the current writing-direction
-     * @return DIRECTION_LTR or DIRECTION_RTL
-     */
-    public int getWritingDirection();
-
-    /**
-     * Gets the current indicator-icons as images
-     * @return the icons
-     */
-    public Image[] getIndicatorIcons();
-
-    /**
-     * Specifies the visibility of this TextEditor.
-     * In some cases, for example when an application wants to display a custom
-     * Options-Menu, the method
-     * {@link com.nokia.mid.ui.TextEditor#setVisible(boolean)}
-     * may not be sufficient. For this purpose, this method allows to specify
-     * a partial visibility, which will display the TextEditor without
-     * e.g. animating the curosr, an in which the application can receive
-     * the key-events from the Canvas.
-     * @param visible the type of the visibility.
-     *      Has to be one of VISIBLE,PARTIALLY_VISIBLE or HIDDEN. Calling this
-     *      method with VISIBLE has the same effect as calling
-     *      {@link com.nokia.mid.ui.TextEditor#setVisible(boolean)} with true,
-     *      HIDDEN as with false.
-     * @throws IllegalArgumentException if visible has an unspecified value
-     */
-    public void setVisible(int visible) throws IllegalArgumentException;
-
-    /**
-     * Specifies whether emoticons should be available for this editor.
-     * If not enabled, the implementation will not provide any facilities
-     * to insert emoticons, e.g. via commands or special character-dialog,
-     * itself
-     * @param enable true to enable emoticons, false to disable
-     */
-    public void enableEmoticons(boolean enable);
-
-    /**
-     * Gets the emoticons-state of this editor
-     * @return true if emoticons are enabled, false if not
-     */
-    public boolean isEnableEmoticons();
-
-    /**
-     * Specifies a position on the screen where native popups will be displayed.
-     * This is a hint to the implementation, that may be disregarded.
-     * @param x x-coordinate of the popups position
-     * @param y y-coordinate of the popups position
-     */
-    public void setPopupPosition(int x,int y);
-
-    /**
-     * Specifies prefix and postfix text to be displayed along with the actual
-     * editor-content. This text will not be part of the actual editor-buffer,
-     * and hence can't be edited, and will not be considered by methods like
-     * {@link com.nokia.mid.ui.TextEditor#size()}
-     * @param prefix text to be displayed before the actual content.
-     *      May be null to disable prefix-text
-     * @param postfix text to be displayed after the actual content.
-     *      May be null to disable postfix-text
-     */
-    public void setFixedText(String prefix,String postfix);
-}
--- a/javauis/lcdui_akn/javalcdui/javasrc.nokialcdui/com/nokia/mid/ui/S60TextEditor.java	Mon Jun 21 15:32:50 2010 +0300
+++ b/javauis/lcdui_akn/javalcdui/javasrc.nokialcdui/com/nokia/mid/ui/S60TextEditor.java	Thu Jul 15 18:31:06 2010 +0300
@@ -70,6 +70,14 @@
  * change and resize, move TextEditor to the visible area and adjust the
  * whole Canvas.
  * </p>
+ * 
+ * <h3>Touch settings</h3>
+ * <p>
+ * The TextEditor receives touch events in touch devices. This can be 
+ * disabled/enabled by {@link com.nokia.mid.ui.S60TextEditor#setTouchEnabled(boolean)}
+ * An editor with touch-event disabled won't be able to perform any
+ * touch-related functionality.
+ * </p>
  * @see TextEditor
  * @since 1.4
  */
@@ -314,7 +322,28 @@
      *      The y coordinate of the wanted caret position.
      */
     public void setCaretXY(int x, int y);
+    
+    /**
+     * Specifies whether or not the editor will receive touch-events.
+     * <p>
+     * This is enabled by default.
+     * An editor with touch-event disabled won't be able to perform any
+     * touch-related functionality such as scrolling or positioning the
+     * cursor. It may however still be controlled via the
+     * virtual keypad/control-panel if that is enabled, or receive other +
+     * input e.g. via physical keys
+     * <p>
+     * @param enabled
+     *              true to enabled touch-event, false to disable
+     */
+    public void setTouchEnabled(boolean enabled);
 
+    /**
+     * Gets the current touch-enabled state
+     * <p>
+     * @return true if the editor is touch-enabled, false otherwise
+     */
+    public boolean isTouchEnabled();
 }
 
 // End of file
--- a/javauis/lcdui_akn/javalcdui/javasrc.nokialcdui/com/nokia/mid/ui/TextEditor.java	Mon Jun 21 15:32:50 2010 +0300
+++ b/javauis/lcdui_akn/javalcdui/javasrc.nokialcdui/com/nokia/mid/ui/TextEditor.java	Thu Jul 15 18:31:06 2010 +0300
@@ -149,9 +149,6 @@
     // The current font of this text editor component
     private Font iFont;
 
-    // Indicates receiving of pointer events by the editor
-    private boolean iTouchEnabled;
-
     // Text editor container for handling editor focusing.
     private static TextEditorContainer iEditorContainer;
 
@@ -195,9 +192,8 @@
      * </P>
      *
      * <P>
-     * On Series60-devices, if the MIDlet is manufacturer or operator-signed,
-     * the object returned by this method will also implement the
-     * com.nokia.mid.ui.s60.TextEditor
+     * On Series60-devices the object returned by this method will also
+     * implement the com.nokia.mid.ui.S60TextEditor.
      * </P>
      *
      * @param text
@@ -259,9 +255,8 @@
      * </P>
      *
      * <P>
-     * On Series60-devices, if the MIDlet is manufacturer or operator-signed,
-     * the object returned by this method will also implement the
-     * com.nokia.mid.ui.s60.TextEditor
+     * On Series60-devices the object returned by this method will also
+     * implement the com.nokia.mid.ui.S60TextEditor.
      * </P>
      *
      * @param maxSize
@@ -619,41 +614,6 @@
     }
 
     /**
-     * Specifies whether or not the editor will receive touch-events.
-     * <p>
-     * This is enabled by default.
-     * An editor with touch-event disabled won't be able to perform any
-     * touch-related functionality such as scrolling or positioning the
-     * cursor. It may however still be controlled via the
-     * virtual keypad/control-panel if that is enabled, or receive other +
-     * input e.g. via physical keys
-     * <p>
-     * @param enabled
-     *              true to enabled touch-event, false to disable
-     */
-    public void setTouchEnabled(boolean enabled)
-    {
-        if (iTouchEnabled != enabled)
-        {
-            synchronized (iToolkit)
-            {
-                _setTouchEnabled(getToolkitHandle(), iHandle, enabled);
-                iTouchEnabled = enabled;
-            }
-        }
-    }
-
-    /**
-     * Gets the current touch-enabled state
-     * <p>
-     * @return true if the editor is touch-enabled, false otherwise
-     */
-    public boolean isTouchEnabled()
-    {
-        return iTouchEnabled;
-    }
-
-    /**
      * <P>
      * Returns the Z-position, or the elevation, of the item. The Z-position
      * decides the stacking order of neighboring items.
@@ -885,17 +845,12 @@
             font = Font.getDefaultFont();
         }
 
-        int[] newSize = new int[2];
-
         synchronized (iToolkit)
         {
-            NativeError.check(_setFont(getToolkitHandle(), iHandle,
-                                       iLCDUIPackageInvoker.getFontHandle(font), newSize));
-
+            NativeError.check(_setFont(getToolkitHandle(),
+                                       iHandle,
+                                       iLCDUIPackageInvoker.getFontHandle(font)));
             iFont = font;
-
-            iWidth = newSize[0];
-            iHeight = newSize[1];
         }
     }
 
@@ -976,8 +931,6 @@
      * rendered using given color value. The default highlight background
      * color is fully opaque black.
      *
-     * This method is not supported on S40 platform.
-     *
      * @param color
      *            the color
      */
@@ -998,8 +951,6 @@
      * using given color value. The default highlight foreground color is fully
      * opaque white.
      *
-     * This method is not supported on S40 platform.
-     *
      * @param color
      *            the color
      */
@@ -1442,6 +1393,42 @@
         }
     }
 
+    /**
+     * Gets the height of this <code>TextEditor</code> in pixels.
+     *
+     * @return height in pixels
+     */
+    public int getHeight()
+    {
+        int[] size = doGetSize();
+        return size[1];
+    }
+
+    /**
+     * Gets the width of this <code>TextEditor</code> in pixels.
+     *
+     * @return width in pixels
+     */
+    public int getWidth()
+    {
+        int[] size = doGetSize();
+        return size[0];
+    }
+
+    /*
+     * Gets TextEditor size in pixels - width, height. 
+     */
+    private int[] doGetSize()
+    {
+        int[] size = new int[2];
+        synchronized (iToolkit)
+        {
+            NativeError.check(_getSize(getToolkitHandle(), iHandle,
+                size));
+        }
+        return size;
+    }
+
     /*
      * Disposes the Landmark native peer object, if the handles are valid.
      * Invalid (negative) handles indicate that their creation failed in the
@@ -1529,17 +1516,12 @@
 
         int handle = 0;
 
-        // The size of the editor must be known after construction. Use return
-        // values to store the height and width of the editor after
-        // construction.
-        int[] size = new int[2];
-
         synchronized (iToolkit)
         {
             // Create native peer object for this Java object.
             handle =
                 _createNativePeer(getToolkitHandle(), maxSize, aWidth, aHeight,
-                                  aHeightInRows, size);
+                                  aHeightInRows);
         }
 
         // Check if construction failed and throw out of memory error.
@@ -1548,14 +1530,6 @@
             throw new OutOfMemoryError();
         }
 
-        // Operation was a success, store size.
-        iWidth = size[0];
-        iHeight = size[1];
-        iMaxSize = maxSize;
-
-        // Enabling receiving pointer events
-        iTouchEnabled = true;
-
         // Sets parent to null
         iParent = null;
 
@@ -1573,12 +1547,15 @@
         // Set the constraints of the editor. The content is now empty.
         setConstraints(constraints);
 
-        // Set font to Java default font.
-        setFont(Font.getDefaultFont());
-
+        // Store the maxSize of the editor
+        iMaxSize = maxSize;
+        
         // Set the text. This now throws an exception if the content is not
         // valid for the current set of constraints.
         setContent(aContent);
+        
+        // Set font to Java default font.
+        setFont(Font.getDefaultFont());
     }
 
     // Private methods.
@@ -1678,8 +1655,7 @@
         int maxSize,
         int aWidth,
         int aHeight,
-        boolean aHeightInRows,
-        int[] aSize);
+        boolean aHeightInRows);
 
     /*
      * Disposes the native side peer object.
@@ -2114,16 +2090,13 @@
      * @param aFont The application preferred font to be used in this
      * TextEditor.
      *
-     * @param aNewSize On return, contains the new size of the editor.
-     *
      * @return NativeError.KErrNone if the operation was successful. Otherwise,
      * a system-wide error code is returned.
      */
     private native int _setFont(
         int aToolkitHandle,
         int aNativePeerHandle,
-        int aFont,
-        int[] aNewSize);
+        int aFont);
 
     /*
      * Sets a listener for this text editor.
@@ -2172,21 +2145,16 @@
     private native int _getZPosition(int aToolkitHandle, int aNativePeerHandle);
 
     /*
-     * Specifies whether or not the editor will receive touch-events.
+     * Gets the size of the text editor.
+     *
+     * @param aToolkitHandle A handle to the LCDUI toolkit.
      *
-     * This is enabled by default.
-     * An editor with touch-event disabled won't be able to perform any
-     * touch-related functionality such as scrolling or positioning the
-     * cursor. It may however still be controlled via the
-     * virtual keypad/control-panel if that is enabled, or receive other +
-     * input e.g. via physical keys
+     * @param aNativePeerHandle A handle to the native side peer object.
      *
-     * @param aEnabled
-     *              true to enabled touch-event, false to disable
+     * @return The size of the TextEditor in pixels.
      */
-    private native int _setTouchEnabled(int aToolkitHandle,
-                                        int aNativePeerHandle, boolean aEnabled);
-
+    private native int _getSize(int aToolkitHandle, int aNativePeerHandle, 
+        int[] aSize);
 }
 
 // End of file
--- a/javauis/lcdui_akn/javalcdui/javasrc.nokialcdui/com/nokia/mid/ui/TextEditorExtensionAccess.java	Mon Jun 21 15:32:50 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,38 +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: Touch-support for TextEditor-API
-*
-*/
-
-package com.nokia.mid.ui;
-
-import com.nokia.mid.ui.TextEditorTouchControl;
-
-/**
- * This interface provides access to extended functionality related to the TextEditor-API
- * The object returned by the method {@link com.nokia.mid.ui.TextEditor#createTextEditor(int, int, int, int)} and
- * {@link com.nokia.mid.ui.TextEditor#createTextEditor(int, int, int, int)} implements this interface.
- * It depends on the capabilities of the device whether the extensions provided via this interface are
- * supported or not. For unsupported extensions, the getter-methods of this interface will return null.
- */
-public interface TextEditorExtensionAccess
-{
-
-    /**
-     * Gets the Touch-extensions of the TextEditor-API. See also {@link TextEditorTouchControl}
-     * @return the extension, or null if the device does not support touch.
-     */
-    public TextEditorTouchControl getTouchControl();
-
-}
--- a/javauis/lcdui_akn/javalcdui/javasrc.nokialcdui/com/nokia/mid/ui/TextEditorImpl.java	Mon Jun 21 15:32:50 2010 +0300
+++ b/javauis/lcdui_akn/javalcdui/javasrc.nokialcdui/com/nokia/mid/ui/TextEditorImpl.java	Thu Jul 15 18:31:06 2010 +0300
@@ -82,6 +82,9 @@
         TOUCH_INPUT_HWR | TOUCH_INPUT_VKB | TOUCH_INPUT_FSQ |
         TOUCH_INPUT_ITUT | TOUCH_INPUT_FSC | TOUCH_INPUT_MINI_ITUT;
 
+    // Indicates receiving of pointer events by the editor
+    private boolean iTouchEnabled;
+
     /*
      * <P>
      * Creates a new <code>TextEditor</code> object with the given initial contents,
@@ -132,6 +135,8 @@
                    int aHeight)
     {
         super(aText, aMaxSize, aConstraints, aWidth, aHeight, false);
+        // Enabling receiving pointer events
+        iTouchEnabled = true;
     }
 
     /*
@@ -176,6 +181,8 @@
     TextEditorImpl(int aMaxSize, int aConstraints, int aWidth, int aRows)
     {
         super(null, aMaxSize, aConstraints, aWidth, aRows, true);
+        // Enabling receiving pointer events
+        iTouchEnabled = true;
     }
 
     /*
@@ -490,6 +497,41 @@
     }
 
     /*
+     * Specifies whether or not the editor will receive touch-events.
+     * <p>
+     * This is enabled by default.
+     * An editor with touch-event disabled won't be able to perform any
+     * touch-related functionality such as scrolling or positioning the
+     * cursor. It may however still be controlled via the
+     * virtual keypad/control-panel if that is enabled, or receive other +
+     * input e.g. via physical keys
+     * <p>
+     * @param enabled
+     *              true to enabled touch-event, false to disable
+     */
+    public void setTouchEnabled(boolean enabled)
+    {
+        if (iTouchEnabled != enabled)
+        {
+            synchronized (iToolkit)
+            {
+                _setTouchEnabled(getToolkitHandle(), iHandle, enabled);
+                iTouchEnabled = enabled;
+            }
+        }
+    }
+
+    /*
+     * Gets the current touch-enabled state
+     * <p>
+     * @return true if the editor is touch-enabled, false otherwise
+     */
+    public boolean isTouchEnabled()
+    {
+        return iTouchEnabled;
+    }
+
+    /*
      * Hidden default constructor.
      */
     private TextEditorImpl()
@@ -652,6 +694,22 @@
         int aNativePeerHandle,
         int x,
         int y);
+
+    /*
+     * Specifies whether or not the editor will receive touch-events.
+     *
+     * This is enabled by default.
+     * An editor with touch-event disabled won't be able to perform any
+     * touch-related functionality such as scrolling or positioning the
+     * cursor. It may however still be controlled via the
+     * virtual keypad/control-panel if that is enabled, or receive other +
+     * input e.g. via physical keys
+     *
+     * @param aEnabled
+     *              true to enabled touch-event, false to disable
+     */
+    private native int _setTouchEnabled(int aToolkitHandle,
+                                        int aNativePeerHandle, boolean aEnabled);
 }
 
 // End of file
--- a/javauis/lcdui_akn/javalcdui/javasrc.nokialcdui/com/nokia/mid/ui/TextEditorTouchControl.java	Mon Jun 21 15:32:50 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,164 +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:  TextEditor-API alignment for Nokia-UI
-*
-*/
-package com.nokia.mid.ui;
-
-import com.nokia.mid.ui.TextEditorListener;
-
-/**
- * Touch-devices can use a virtual control-panel to replace physical keys, and to facilitate
- * textual input. The purpose of this interface is to provide some level of access and control over such a panel, when
- * using the TextEditor-API. <p>
- *
- * MIDlets can obtain an instance of this interface via the {@link TextEditorExtensionAccess} in the
- * following way:
- * <pre>
- * TextEditor editor = com.nokia.mid.ui.TextEditor.createTextEditor("hello world", 50, TextField.ANY, 100, 100);
- * TextEditorTouchControl touchControl = ((TextEditorExtensionAccess)editor).getTouchControl();
- * if(touchControl!=null){
- *   // this is a touch-device
- * }
- * else{
- *   // this is a non-touch-device
- * }
- * </pre>
- * The instance is associated with the editor it has been obtained from, and controls only this editor.<p>
- *
- * Because a control-panel covers parts of the display which would otherwise be available to the application, MIDlets may
- * choose to only display the panel at certain times, e.g. when the editor is focussed. This is possible with
- * {@link TextEditorTouchControl#setPanelMode(int)}. Furthermore, a panel can be positioned anywhere an the display via
- * {@link TextEditorTouchControl#setPanelPosition(int, int)}. This interface also allows to query the size of the panel, so
- * that applications can integrate it into the Canvas. <p>
- *
- * On touch-devices, the platform can make use of pointer-input to let the user interact with a TextEditor on a Canvas, without
- * that the application knows about this. For example, if the user taps with his stylus or finger somewhere inside a visible
- * and focussed TextEditor, the MIDlet might not receive any notification about this via the Canvas-methods pointerPressed,
- * pointerDragged or pointerReleased. Instead, the platform could change the position of the cursor and generate the
- * according event for the editors {@link TextEditorListener}. Or it may even just ignore this event completely. In general,
- * an application should not expect to receive any pointer-events after a "press" inside a focussed TextEditor.
- * Under certain circumstances however, for example as a response to the {@link TextEditorTouchControl#ACTION_TRAVERSE_OUT_SCROLL_UP}
- * or {@link TextEditorTouchControl#ACTION_TRAVERSE_OUT_SCROLL_DOWN} event, an application can decide at any time to override this
- * behaviour, and force the platform to deliver all subsequent pointer-events to the Canvas.
- * This can be done with {@link TextEditorTouchControl#setTouchEnabled(boolean)}. Note that a TextEditor which has been touch-disabled
- * this way will not be able to perform any interaction like cursor-positioning or scrolling via touch-input, until is has been
- * enabled again.
- */
-public interface TextEditorTouchControl
-{
-
-
-    //native_const(JAVA_TEXTEDITOR)
-    //{
-
-    /**
-     * Constant to disable the display of a keypad/control-panel
-     */
-    public static final int PANEL_OFF = 1;
-
-    /**
-     * Constant to enable the display of a keypad/control-panel.
-     * In this mode the user cannot change the position of the panel, however
-     * the MIDlet can still do so via {@link TextEditorTouchControl#setPanelPosition(int, int)}
-     */
-    public static final int PANEL_FIXED_POSITION = 2;
-
-    /**
-     * Constant to enable the display of a keypad/control-panel.
-     * In this mode, the user can change the position of the panel of the display e.g. by
-     * dragging, if this is supported by the device. Changes to the position will generate the
-     * {@link TextEditorTouchControl#ACTION_PANEL_MOVED}-event. The current panel-position is
-     * provided via {@link TextEditorTouchControl#getPanelX()} and {@link TextEditorTouchControl#getPanelY()}
-     */
-    public static final int PANEL_FLOATING = 3;
-    //}
-
-    /**
-     * Event to indicate that the keypad/control-panel has been moved by the user
-     */
-    public static final int ACTION_PANEL_MOVED = 0x10000000;
-
-
-    /**
-     * Controls the behaviour of the virtual keypad/control-panel, if the device provides one.
-     * This is a hint which may be disregarded if the device does not support a virtual keypad/control-panel.
-     * @param mode One of {@link TextEditorTouchControl#PANEL_OFF} {@link TextEditorTouchControl#PANEL_FIXED_POSITION}
-     * or {@link TextEditorTouchControl#PANEL_FLOATING}
-     */
-    public void setPanelMode(int mode);
-
-    /**
-     * Gets the current panel-mode
-     * @return the mode, see {@link TextEditorTouchControl#setPanelMode(int)}
-     */
-    public int getPanelMode();
-
-    /**
-     * Sets the position of the panel on the display.
-     * @param x x-position of the keypad
-     * @param y y-position of the keypad
-     */
-    public void setPanelPosition(int x, int y);
-
-    /**
-     * Gets the width of the panel
-     * @return the width
-     */
-    public int getPanelWidth();
-
-    /**
-     * Gets the height of the panel
-     * @return the height
-     */
-    public int getPanelHeight();
-
-    /**
-     * Gets the current x-position of the panel on the display
-     * @return the x-coordinate
-     */
-    public int getPanelX();
-
-    /**
-     * Gets the current y-position of the panel on the display
-     * @return the y-coordinate
-     */
-    public int getPanelY();
-
-    /**
-     * Specifies whether or not the editor will receive touch-events. This is enabled by default.
-     * An editor with touch-event disabled won't be able to perform any touch-related functionality
-     * such as scrolling or positioning the cursor. It may however still be controlled via the
-     * virtual keypad/control-panel if that is enabled, or receive other input e.g. via physical
-     * keys
-     * @param enabled true to enabled touch-event, false to disable
-     */
-    public void setTouchEnabled(boolean enabled);
-
-    /**
-     * Gets the current touch-enabled state
-     * @return true if the editor is touch-enabled, false otherwise
-     */
-    public boolean isTouchEnabled();
-
-    /**
-     * Sets the caret as close as possible to a given x/y location. This is a hint to the implementation
-     * that may be disregarded.
-     * @param x new x-coordinate for the caret, relative to the editors origin
-     * @param y new y-coordinate for the caret, relative to the editors origin
-     */
-    public void setCaret(int x, int y);
-
-
-}
--- a/javauis/lcdui_akn/javalcdui/javasrc/javax/microedition/lcdui/Toolkit.java	Mon Jun 21 15:32:50 2010 +0300
+++ b/javauis/lcdui_akn/javalcdui/javasrc/javax/microedition/lcdui/Toolkit.java	Thu Jul 15 18:31:06 2010 +0300
@@ -95,7 +95,7 @@
 
     // NGA specific change
     private int iFlags = FLAG_NONE;
-    
+
     //
     // Event source : must keep in sync with TSourceType in lcdui.h
     //
@@ -128,14 +128,14 @@
     static final int EVENT_TRAVERSE    = 26;
     static final int EVENT_SET_CURRENT = 29;
     static final int EVENT_SERIAL      = 30;
-    
+
     static final int EVET_CANVAS_GRAPHICS_ITEM_REPAINT = 31;
     static final int EVENT_M3G_DRAW = 32 ;
     // IMPLICIT EVENT TYPES
     static final int EVENT_DISMISS = 0;         // ALERT
     static final int EVENT_ITEM_CHANGED = 0;    // ITEM(S)
     static final int EVENT_SELECT  = 0;         // LIST
-    
+
 
     //
     // Op codes for syncing to screen
@@ -147,7 +147,7 @@
     // NGA specific change.
     // Op code indicating M3G content start
     private static final int M3G_CONTENT_START = 2;
-    
+
     Toolkit(ToolkitInvoker aInvoker)
     {
         iInvoker     = aInvoker;
@@ -582,8 +582,8 @@
             {
                 if (iObservers.elementAt(ii) instanceof ToolkitObserverNGAExtension)
                 {
-                    final ToolkitObserverNGAExtension observer = 
-                                (ToolkitObserverNGAExtension)iObservers.elementAt(ii);
+                    final ToolkitObserverNGAExtension observer =
+                        (ToolkitObserverNGAExtension)iObservers.elementAt(ii);
                     observer.foregroundEvent(foreground);
                 }
             }
--- a/javauis/lcdui_akn/javalcdui/javasrc/javax/microedition/lcdui/ToolkitInvoker.java	Mon Jun 21 15:32:50 2010 +0300
+++ b/javauis/lcdui_akn/javalcdui/javasrc/javax/microedition/lcdui/ToolkitInvoker.java	Thu Jul 15 18:31:06 2010 +0300
@@ -287,17 +287,17 @@
         }
         return ((Graphics)aGraphics).iHandle;
     }
-    
+
     /*
      * @see com.nokia.mj.impl.rt.legacy.ToolkitInvoker#isForeground()
-     */	
+     */
     public boolean isForeground()
     {
         Toolkit toolkit = getCurrentToolkit();
-        if (toolkit != null) 
+        if (toolkit != null)
         {
             Display display = toolkit.getDisplay();
-            if (display != null) 
+            if (display != null)
             {
                 return display.IsForeground();
             }
--- a/javauis/lcdui_akn/javalcdui/src.nokialcdui/TextEditor.cpp	Mon Jun 21 15:32:50 2010 +0300
+++ b/javauis/lcdui_akn/javalcdui/src.nokialcdui/TextEditor.cpp	Thu Jul 15 18:31:06 2010 +0300
@@ -92,8 +92,7 @@
     TInt aMaxSize,
     TInt aWidth,
     TInt aHeight,
-    TBool aHeightInRows,
-    TSize* aSize)
+    TBool aHeightInRows)
 {
     // Get LCDUI component factory.
     MMIDComponentFactory* factory = aToolkit->ComponentFactory();
@@ -110,9 +109,6 @@
 
     // Component can be popped from the cleanup stack.
     CleanupPopComponent(textEditor);
-
-    // Store the size of the text editor.
-    *aSize = textEditor->EditorSize();
 }
 
 /*
@@ -127,8 +123,7 @@
     jint aMaxSize,
     jint aWidth,
     jint aHeight,
-    jboolean aHeightInRows,
-    jintArray aSize)
+    jboolean aHeightInRows)
 {
     DEBUG("TextEditor.cpp - createNativePeer +");
 
@@ -136,7 +131,6 @@
 
     jobject peer = aJniEnv->NewWeakGlobalRef(aPeer);
     TInt handle = -1;
-    TSize size;
 
     TInt error = toolkit->ExecuteTrap(
                      &CreateNativePeerL,
@@ -146,19 +140,9 @@
                      aMaxSize,
                      aWidth,
                      aHeight,
-                     (TBool)aHeightInRows,
-                     &size);
+                     (TBool)aHeightInRows);
 
-    // Store returned size.
-    if (error == KErrNone)
-    {
-        jint sizeArray[ 2 ] = { size.iWidth, size.iHeight };
-        aJniEnv->SetIntArrayRegion(aSize, 0, 2, sizeArray);
-
-        DEBUG_INT2("TextEditor.cpp - createNativePeer -, width=%d height=%d",
-                   size.iWidth, size.iHeight);
-    }
-    else
+    if (error != KErrNone)
     {
         // Global reference must be removed at this point if construction
         // failed for some reason.
@@ -436,45 +420,6 @@
 }
 
 /**
- * Local helper function for setting the touch enabled state of a text editor
- *
- * @param aTextEditor The text editor object to be modified.
- * @param aEnabled The touch enabled status of the text editor to be set.
- */
-LOCAL_C void SetTouchEnabled(
-    MMIDTextEditor* aTextEditor,
-    TBool aEnabled)
-{
-    aTextEditor->SetTouchEnabled(aEnabled);
-}
-
-/*
- * Class:     com_nokia_mid_ui_TextEditor
- * Method:    _setTouchEnabled
- * Signature: (IIZ)I
- */
-JNIEXPORT jint JNICALL Java_com_nokia_mid_ui_TextEditor__1setTouchEnabled(
-    JNIEnv* /* aJniEnv */,
-    jobject /* aPeer */,
-    jint aToolkitHandle,
-    jint aNativePeerHandle,
-    jboolean aEnabled)
-{
-    DEBUG("TextEditor.cpp - setTouchEnabled +");
-
-    CMIDToolkit* toolkit = JavaUnhand< CMIDToolkit >(aToolkitHandle);
-
-    MMIDTextEditor* editor =
-        MIDUnhandObject< MMIDTextEditor >(aNativePeerHandle);
-
-    toolkit->ExecuteV(&SetTouchEnabled, editor, (TBool)aEnabled);
-
-    DEBUG("TextEditor.cpp - setTouchEnabled -");
-
-    return KErrNone;
-}
-
-/**
  * Local helper function for setting the focus state of a text editor
  *
  * @param aTextEditor The text editor object to be modified.
@@ -1310,17 +1255,12 @@
  *
  * @param aEditor The editor.
  * @param aFont The font to be set.
- * @param aSize On return, contains the new size of the editor.
  */
 LOCAL_C void SetFontL(
     MMIDTextEditor* aEditor,
-    MMIDFont* aFont,
-    TSize* aSize)
+    MMIDFont* aFont)
 {
     aEditor->SetFontL(aFont);
-
-    // Store the size of the text editor.
-    *aSize = aEditor->EditorSize();
 }
 
 /*
@@ -1329,12 +1269,11 @@
  * Signature: (III)I
  */
 JNIEXPORT jint JNICALL Java_com_nokia_mid_ui_TextEditor__1setFont(
-    JNIEnv* aJniEnv,
+    JNIEnv* /* aJniEnv */,
     jobject /* aPeer */,
     jint aToolkitHandle,
     jint aNativePeerHandle,
-    jint aFontHandle,
-    jintArray aNewSize)
+    jint aFontHandle)
 {
     DEBUG("TextEditor.cpp - setFont +");
 
@@ -1344,22 +1283,11 @@
         MIDUnhandObject< MMIDTextEditor >(aNativePeerHandle);
 
     MMIDFont* font = MIDUnhandObject< MMIDFont >(aFontHandle);
-    TSize size;
 
     TInt error = toolkit->ExecuteTrap(
                      &SetFontL,
                      editor,
-                     font,
-                     &size);
-
-    if (error == KErrNone)
-    {
-        jint sizeArray[ 2 ] = { size.iWidth, size.iHeight };
-        aJniEnv->SetIntArrayRegion(aNewSize, 0, 2, sizeArray);
-
-        DEBUG_INT2("TextEditor.cpp - setFont -, width=%d height=%d",
-                   size.iWidth, size.iHeight);
-    }
+                     font);
 
     DEBUG_INT("TextEditor.cpp - setFont -, error=%d", error);
 
@@ -1525,4 +1453,47 @@
     DEBUG("TextEditor.cpp - dispose -");
 }
 
+/**
+ * Local helper function for getting the size of the text editor.
+ *
+ * @param aEditor The editor.
+ * @param aSize On return, contains the new size of the editor.
+ */
+LOCAL_C void EditorSize(
+    MMIDTextEditor* aEditor,
+    TSize* aSize)
+{
+    // Store the size of the text editor.
+    *aSize = aEditor->EditorSize();
+}
+
+/*
+ * Class:     com_nokia_mid_ui_TextEditor
+ * Method:    _getSize
+ * Signature: (III)V
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_mid_ui_TextEditor__1getSize(
+        JNIEnv* aJniEnv,
+        jobject /* aPeer */,
+        jint aToolkitHandle,
+        jint aNativePeerHandle,
+        jintArray aNewSize)
+{
+    DEBUG("TextEditor.cpp - getSize +");
+
+    CMIDToolkit* toolkit = JavaUnhand< CMIDToolkit >(aToolkitHandle);
+
+    MMIDTextEditor* editor =
+        MIDUnhandObject< MMIDTextEditor >(aNativePeerHandle);
+
+    TSize size;
+
+    toolkit->ExecuteV(&EditorSize, editor, &size);
+
+    jint sizeArray[2] = {size.iWidth, size.iHeight};
+    aJniEnv->SetIntArrayRegion(aNewSize, 0, 2, sizeArray);
+
+    DEBUG("TextEditor.cpp - getSize");
+    return KErrNone;
+}
 // End of file
--- a/javauis/lcdui_akn/javalcdui/src.nokialcdui/TextEditorImpl.cpp	Mon Jun 21 15:32:50 2010 +0300
+++ b/javauis/lcdui_akn/javalcdui/src.nokialcdui/TextEditorImpl.cpp	Thu Jul 15 18:31:06 2010 +0300
@@ -386,4 +386,43 @@
     return error;
 }
 
+/**
+ * Local helper function for setting the touch enabled state of a text editor
+ *
+ * @param aTextEditor The text editor object to be modified.
+ * @param aEnabled The touch enabled status of the text editor to be set.
+ */
+LOCAL_C void SetTouchEnabled(
+    MMIDTextEditor* aTextEditor,
+    TBool aEnabled)
+{
+    aTextEditor->SetTouchEnabled(aEnabled);
+}
+
+/*
+ * Class:     com_nokia_mid_ui_TextEditorImpl
+ * Method:    _setTouchEnabled
+ * Signature: (IIZ)I
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_mid_ui_TextEditorImpl__1setTouchEnabled(
+    JNIEnv* /* aJniEnv */,
+    jobject /* aPeer */,
+    jint aToolkitHandle,
+    jint aNativePeerHandle,
+    jboolean aEnabled)
+{
+    DEBUG("TextEditor.cpp - setTouchEnabled +");
+
+    CMIDToolkit* toolkit = JavaUnhand< CMIDToolkit >(aToolkitHandle);
+
+    MMIDTextEditor* editor =
+        MIDUnhandObject< MMIDTextEditor >(aNativePeerHandle);
+
+    toolkit->ExecuteV(&SetTouchEnabled, editor, (TBool)aEnabled);
+
+    DEBUG("TextEditor.cpp - setTouchEnabled -");
+
+    return KErrNone;
+}
+
 // End of file
--- a/javauis/lcdui_akn/javalcdui/src/CMIDToolkit.cpp	Mon Jun 21 15:32:50 2010 +0300
+++ b/javauis/lcdui_akn/javalcdui/src/CMIDToolkit.cpp	Thu Jul 15 18:31:06 2010 +0300
@@ -569,7 +569,7 @@
             mFirst = EFalse;
         }
     }
-    
+
     // Stop the start screen if it is still active.
     java::ui::CoreUiAvkonAppUi* appUi = java::ui::CoreUiAvkonLcdui::getInstance().getJavaUiAppUi();
     if (appUi && appUi->hasStartScreen())
--- a/javauis/lcdui_akn/lcdgd/src/lcdgdev.cpp	Mon Jun 21 15:32:50 2010 +0300
+++ b/javauis/lcdui_akn/lcdgd/src/lcdgdev.cpp	Thu Jul 15 18:31:06 2010 +0300
@@ -514,10 +514,9 @@
         TUint32 srcColor = *(TUint32*)colorAddr;
 
         TUint32 mask = (TUint32)(((TInt32)srcColor) >> 24); // Sign extend down.
-        ASSERT(mask == 0 || mask == (TUint32)-1);
 
 #ifdef RD_JAVA_NGA_ENABLED
-        if (mask)
+        if (mask == (TUint32)-1)
         {
             // Note that the target is not always opaque anymore
             dstColor = srcColor;
--- a/javauis/lcdui_akn/lcdui/inc/CMIDCanvas.h	Mon Jun 21 15:32:50 2010 +0300
+++ b/javauis/lcdui_akn/lcdui/inc/CMIDCanvas.h	Thu Jul 15 18:31:06 2010 +0300
@@ -1290,9 +1290,10 @@
     /**
      * Pixel source is activated when canvas has a frame ready to be passed
      * to Alf composition.
+     * @param aDrawingOngoing Flag if system drawing is on now.
      * @since S60 9.2
      */
-    void ActivatePixelSourceL();
+    void ActivatePixelSourceL(TBool aDrawingOngoing);
 
     /**
      * Suspending pixel source releases its resources on graphics HW.
@@ -1584,6 +1585,11 @@
      */
     TBool iForeground;
 
+#ifdef RD_JAVA_S60_RELEASE_9_2
+    // Indicates state of partial VKB
+    TBool iPartialVKBOpen;
+#endif
+
 #ifdef RD_JAVA_NGA_ENABLED
 
     /**
--- a/javauis/lcdui_akn/lcdui/inc/CMIDCanvasGraphicsItem.h	Mon Jun 21 15:32:50 2010 +0300
+++ b/javauis/lcdui_akn/lcdui/inc/CMIDCanvasGraphicsItem.h	Thu Jul 15 18:31:06 2010 +0300
@@ -155,11 +155,13 @@
     void HandleFullscreenModeChange();
 
     /**
-     * Handles changes of screen orientation.
+     * Handles system resource change messages.
+     *
+     * @param aType A message UID value.
      *
      * @since S60 5.0
      */
-    void HandleResolutionChange();
+    void HandleResourceChange(TInt aType);
 
 public: // From MMIDScalable
 
@@ -268,6 +270,16 @@
      */
     void Dispose();
 
+private: // own methods
+    /**
+     * This method is called when some change which can affect scaling
+     * of CanvasGraphicsItem.
+     *
+     * @param aChange Indicator what change was occurred.
+     * @since S60 5.0
+     */
+    void HandleChangeForScaling(TChange aChange);
+
 private: // Construtors
 
     /**
@@ -298,6 +310,11 @@
 
     // A non-scaled position of item. Needed by scaling.
     TPoint iNonScaledPosition;
+
+#ifdef RD_JAVA_S60_RELEASE_9_2
+    // Indicates state of partial VKB
+    TBool iPartialVKBOpen;
+#endif
 };
 
 #endif // CMIDCANVASGRAPHICSITEM_H
--- a/javauis/lcdui_akn/lcdui/inc/CMIDControlItem.h	Mon Jun 21 15:32:50 2010 +0300
+++ b/javauis/lcdui_akn/lcdui/inc/CMIDControlItem.h	Thu Jul 15 18:31:06 2010 +0300
@@ -120,14 +120,29 @@
     inline TBool GetVisibilityInForm();
     inline void SetVisibilityInForm(const TBool aVisibility);
 
+    /**
+     * Sets the iHighlighted flag. Used by CMIDForm.
+     */
+    inline void SetHighlight(const TBool aHighlight);
+
+    /**
+     * Returns ETrue, if item is highlighted on Form.
+     */
+    inline TBool IsHighlighted();
+
 protected:
     CCoeEnv* iCoeEnv;
     CMIDItemLabel* iLabelControl; // The label for the control
 
-    //The background control context for when the item is highlighted
+    // The background control context for when the item is highlighted
     CAknsFrameBackgroundControlContext* iHighlightedBackgroundCc;
 
     TBool iVisibilityInForm;
+
+    // This flag is true, if item on Form is currently highlighted.
+    // Flag is used for returning correct background content
+    // (see MopSupplyObject).
+    TBool iHighlighted;
 };
 
 inline void CMIDControlItem::SetSizeQuiet(const TSize& aSize)
@@ -155,4 +170,14 @@
     iVisibilityInForm = aVisibility;
 }
 
+inline void CMIDControlItem::SetHighlight(const TBool aHighlight)
+{
+    iHighlighted = aHighlight;
+}
+
+inline TBool CMIDControlItem::IsHighlighted()
+{
+    return iHighlighted;
+}
+
 #endif // CMIDCONTROLITEM_H
--- a/javauis/lcdui_akn/lcdui/inc/CMIDDateFieldItem.h	Mon Jun 21 15:32:50 2010 +0300
+++ b/javauis/lcdui_akn/lcdui/inc/CMIDDateFieldItem.h	Thu Jul 15 18:31:06 2010 +0300
@@ -139,6 +139,11 @@
      **/
     void UpdateMemberVariables();
 
+    /**
+     * Updates color for text in date editor when focus is changed.
+     */
+    void UpdateTextColorsL();
+
 private: // data
 
     CEikTTimeEditor* iEditor;
--- a/javauis/lcdui_akn/lcdui/inc/CMIDTextBoxQueryDialog.h	Mon Jun 21 15:32:50 2010 +0300
+++ b/javauis/lcdui_akn/lcdui/inc/CMIDTextBoxQueryDialog.h	Thu Jul 15 18:31:06 2010 +0300
@@ -314,7 +314,7 @@
 
     TTypeUid::Ptr MopSupplyObject(TTypeUid aId);
 
-    void CMIDTextBoxQueryDialog::SetRightScrollBarPosition();
+    void UpdateScrollBarPositionL();
 
 private:
     inline TUint GetConstraints() const;
@@ -394,14 +394,6 @@
      * Used key event
      */
     const TKeyEvent*            iusedKeyEvent;
-    /**
-     * Count line of text in iEditor
-     */
-    TInt                        iLastCountLine;
-    /**
-     * Rect of Editor
-     */
-    TRect iEditorRect;
 
     /**
      * Used when ConstraintsValidForText decide
--- a/javauis/lcdui_akn/lcdui/inc/CMIDTextEditor.h	Mon Jun 21 15:32:50 2010 +0300
+++ b/javauis/lcdui_akn/lcdui/inc/CMIDTextEditor.h	Thu Jul 15 18:31:06 2010 +0300
@@ -672,6 +672,15 @@
     void HandleResolutionChange();
 
     /**
+     * Handles system resource change messages.
+     *
+     * @param aType A message UID value.
+     *
+     * @since S60 5.0
+     */
+    void HandleResourceChange(TInt aType);
+
+    /**
      * Sets the caret in the Editor at x, y location.
      *
      * @param x
@@ -803,6 +812,15 @@
      */
     HBufC* ConvertedContentLC(const TDesC& aContent);
 
+    /**
+     * This method is called when some change affects scaling
+     * of CanvasGraphicsItem.
+     *
+     * @param aChange Indicator what change was occurred.
+     * @since S60 5.0
+     */
+    void HandleChangeForScaling(TChange aChange);
+
 private: // Construtors
 
     /**
@@ -858,6 +876,11 @@
     // Nonscaled editor size. This is needed for correct scaling.
     TSize iNonScaledEditorSize;
 
+#ifdef RD_JAVA_S60_RELEASE_9_2
+    // Indicates state of partial VKB
+    TBool iPartialVKBOpen;
+#endif
+
 #ifdef RD_TACTILE_FEEDBACK
     // True if editor is already connected to the pen input server
     TBool iPenInputServerConnected;
--- a/javauis/lcdui_akn/lcdui/inc/CMIDTextFieldItem.h	Mon Jun 21 15:32:50 2010 +0300
+++ b/javauis/lcdui_akn/lcdui/inc/CMIDTextFieldItem.h	Thu Jul 15 18:31:06 2010 +0300
@@ -146,6 +146,11 @@
     void ConstructL(const TDesC& aLabel,const TDesC& aText,TInt aConstraints,TInt aMaxSize);
     CMIDEdwin* TextComponent() const;
 
+    /**
+     * Updates color for text in editor when focus is changed.
+     */
+    void UpdateTextColorsL();
+
 public:
     /**
      * Sets the cursor visiblity for the text field (=edwin) when this item is focused.
--- a/javauis/lcdui_akn/lcdui/src/CMIDCanvas.cpp	Mon Jun 21 15:32:50 2010 +0300
+++ b/javauis/lcdui_akn/lcdui/src/CMIDCanvas.cpp	Thu Jul 15 18:31:06 2010 +0300
@@ -50,7 +50,7 @@
 #include <javasymbianoslayer.h>
 #ifdef RD_JAVA_S60_RELEASE_9_2
 // Used with partial VKB
-#include <aknpriv.hrh>
+#include <AknPriv.hrh>
 #endif // RD_JAVA_S60_RELEASE_9_2
 
 #include "javaoslayer.h"
@@ -1089,6 +1089,13 @@
 
         PostEvent(EPaint, posPacked, sizePacked);
     }
+
+    // If is added first direct content, then NGA is switched off
+    // and move of iViewRect is needed.
+    if (iFullScreen && iScalingOn && iDirectContents.Count() == 1)
+    {
+        iViewRect.Move(-iPositionRelativeToScreen);
+    }
 #endif // RD_JAVA_NGA_ENABLED
 }
 
@@ -1110,6 +1117,14 @@
         if (iDirectContents.Count() == 0)
         {
             iRestoreContentWhenUnfaded = EFalse;
+#ifdef RD_JAVA_NGA_ENABLED
+            // If is removed last direct content, then NGA is switched on
+            // and move of iViewRect is needed.
+            if (iScalingOn && iFullScreen)
+            {
+                iViewRect.Move(iPositionRelativeToScreen);
+            }
+#endif // RD_JAVA_NGA_ENABLED
         }
     }
 }
@@ -1461,6 +1476,7 @@
     return iDisplayable;
 }
 #endif // RD_JAVA_S60_RELEASE_9_2
+
 // ---------------------------------------------------------------------------
 // CMIDCanvas::SetComponentIndexL
 // Changes the index of the specified custom component.
@@ -1758,7 +1774,7 @@
     if (!IsEglAvailable())
     {
         // No M3G content, use pixel source
-        ActivatePixelSourceL();
+        ActivatePixelSourceL(EFalse);
         DEBUG("CMIDCanvas::Draw - Pixel Source activated");
     }
     else // M3G content, use EGL surface
@@ -2097,22 +2113,38 @@
 void CMIDCanvas::HandleResourceChange(TInt aType)
 {
 #ifdef RD_JAVA_S60_RELEASE_9_2
-    if ((aType == KEikInputLanguageChange) |
-            (aType == KAknSplitInputEnabled) |
+    if ((aType == KAknSplitInputEnabled) |
             (aType == KAknSplitInputDisabled))
+    {
+        // We need inform CanvasItems that partial virtual keyboard
+        // is open or closed. This is needed only when partial VKB changes
+        // its state.
+        TBool partialVKBOpen = (aType == KAknSplitInputEnabled);
+        if (partialVKBOpen != iPartialVKBOpen)
+        {
+            iPartialVKBOpen = partialVKBOpen;
+            for (int i = 0; i < iCustomComponents.Count(); i++)
+            {
+                iCustomComponents[i]->HandleResourceChange(aType);
+            }
+        }
+    }
+    else if (aType == KEikInputLanguageChange)
 #else
     if (aType == KEikInputLanguageChange)
 #endif // RD_JAVA_S60_RELEASE_9_2
     {
+        // We need inform TextEditor that input language is changed.
         if ((iFocusedComponent != KComponentFocusedNone) &&
-        (iFocusedComponent < iCustomComponents.Count()))
+                (iFocusedComponent < iCustomComponents.Count()))
         {
             iCustomComponents[iFocusedComponent]->
             CustomComponentControl(KComponentMainControl)->
             HandleResourceChange(aType);
         }
-    }
-    if (aType == KEikDynamicLayoutVariantSwitch)
+
+    }
+    else if (aType == KEikDynamicLayoutVariantSwitch)
     {
         // If orientation change is done,
         // then we have to inform all components about it.
@@ -2120,7 +2152,7 @@
         {
             for (int i = 0; i < iCustomComponents.Count(); i++)
             {
-                iCustomComponents[i]->HandleResolutionChange();
+                iCustomComponents[i]->HandleResourceChange(aType);
             }
         }
     }
@@ -2288,9 +2320,11 @@
             // iViewRect.iBr - TSize(1, 1)  -> (iContentSize.iWidth - 1,
             //                                  iContentSize.iHeight - 1)
             point -= iViewRect.iTl;
-            
+
 #ifdef RD_JAVA_NGA_ENABLED
-            if (iFullScreen && iScalingOn)
+            // If NGA is started and scaling is on then the drawing rectangle
+            // is moved. Them we need move pointer events too.
+            if (iFullScreen && iScalingOn && iDirectContents.Count() == 0)
             {
                 // Fix coordinates
                 point += iPositionRelativeToScreen;
@@ -2432,7 +2466,9 @@
 
         // To have cursor on focused control.
         if ((iFocusedComponent != KComponentFocusedNone) &&
-                (iFocusedComponent < iCustomComponents.Count()))
+                (iFocusedComponent < iCustomComponents.Count()) &&
+                iCustomComponents[iFocusedComponent]->
+                CustomComponentControl(KComponentMainControl)->IsVisible())
         {
             iCustomComponents[iFocusedComponent]->
             CustomComponentControl(KComponentMainControl)->
@@ -2443,7 +2479,7 @@
         // To avoid situation when Canvas is redrawn but black area remains
         if (iAlfCompositionPixelSource)
         {
-            TRAPD(err, ActivatePixelSourceL());
+            TRAPD(err, ActivatePixelSourceL(EFalse));
             if (err != KErrNone)
             {
                 DEBUG_INT("CMIDCanvas::FocusChanged - ActivatePixelSourceL error %d", err);
@@ -2474,9 +2510,11 @@
             }
         }
 
-        // To  cursor on focused control.
+        // To remove cursor on focused control.
         if ((iFocusedComponent != KComponentFocusedNone) &&
-                (iFocusedComponent < iCustomComponents.Count()))
+                (iFocusedComponent < iCustomComponents.Count()) && 
+                iCustomComponents[iFocusedComponent]->
+                CustomComponentControl(KComponentMainControl)->IsVisible())
         {
             iCustomComponents[iFocusedComponent]->
             CustomComponentControl(KComponentMainControl)->
@@ -2524,7 +2562,12 @@
 
         TSize contentSize;
 
+#ifdef RD_JAVA_S60_RELEASE_9_2
+        if (iFullScreen && (orientedOrgMIDletScrSize != controlSize)
+                && !iPartialVKBOpen)
+#else
         if (iFullScreen && (orientedOrgMIDletScrSize != controlSize))
+#endif // RD_JAVA_S60_RELEASE_9_2
         {
             contentSize = orientedOrgMIDletScrSize;
         }
@@ -2621,7 +2664,7 @@
             myself->ClearUiSurface(ETrue);
             if (iAlfCompositionPixelSource)
             {
-                TRAP_IGNORE(myself->ActivatePixelSourceL());
+                TRAP_IGNORE(myself->ActivatePixelSourceL(ETrue));
             }
         }
         iWndUpdate = EFalse;
@@ -2910,6 +2953,10 @@
 
     InitPixelSourceL();
 #endif // RD_JAVA_NGA_ENABLED        
+
+#ifdef RD_JAVA_S60_RELEASE_9_2
+    iPartialVKBOpen = EFalse;
+#endif // RD_JAVA_S60_RELEASE_9_2
 }
 
 
@@ -3142,7 +3189,9 @@
     if (iFullScreen)
     {
 #ifdef RD_JAVA_NGA_ENABLED
-        if (iScalingOn)
+        // If both NGA and scaling are on, then iViewRect is needed move
+        // for preverifing wrong position of Canvas.
+        if (iScalingOn && (!iFullScreen || iDirectContents.Count() == 0))
         {
             // Translate to screen coordinates.
             rect.Move(iPositionRelativeToScreen);
@@ -3166,6 +3215,15 @@
             viewSize = iTargetMIDletScrSize;
         }
 
+#ifdef RD_JAVA_S60_RELEASE_9_2
+        // If partial VKB is open then MIDlet is not scaled.
+        // That we need set iViewRect to whole size of Canvas.
+        if (iPartialVKBOpen)
+        {
+            viewSize = Size();
+        }
+#endif //RD_JAVA_S60_RELEASE_9_2
+
         // If optional JAD parameter Nokia-MIDlet-Target-Display-Size is NOT
         // defined and Nokia-MIDlet-Original-Display-Size is defined to
         // smaller size than the device's screen size, we will scale the
@@ -3601,7 +3659,7 @@
 // In scaling case need to call SetExtent() again if pixel source was suspended.
 // ---------------------------------------------------------------------------
 //
-void CMIDCanvas::ActivatePixelSourceL()
+void CMIDCanvas::ActivatePixelSourceL(TBool aDrawingOngoing)
 {
     ASSERT(iAlfCompositionPixelSource);
 
@@ -3623,7 +3681,7 @@
 
     if (iPixelSourceSuspended)
     {
-        ClearUiSurface(EFalse);
+        ClearUiSurface(aDrawingOngoing);
         iPixelSourceSuspended = EFalse;
         if (iFullScreen && iScalingOn)
         {
--- a/javauis/lcdui_akn/lcdui/src/CMIDCanvasGraphicsItem.cpp	Mon Jun 21 15:32:50 2010 +0300
+++ b/javauis/lcdui_akn/lcdui/src/CMIDCanvasGraphicsItem.cpp	Thu Jul 15 18:31:06 2010 +0300
@@ -22,6 +22,11 @@
 #include <bitdev.h>
 #include <bitstd.h>
 #include <j2me/jdebug.h>
+#ifdef RD_JAVA_S60_RELEASE_9_2
+// Used with partial VKB
+#include <AknPriv.hrh>
+#endif // RD_JAVA_S60_RELEASE_9_2
+#include <AknDef.h>
 
 // INTERNAL INCLUDES
 #include "CMIDCanvasGraphicsItem.h"
@@ -82,6 +87,9 @@
         iComponentContainer->UnregisterComponent(this);
     }
 
+    iComponentContainer = NULL;
+    iUtils = NULL;
+    
     DEBUG("CMIDCanvasGraphicsItem::~CMIDCanvasGraphicsItem -");
 }
 
@@ -152,18 +160,20 @@
     // Store container. NULL is ok.
     iComponentContainer = aComponentContainer;
 
-    // Set item size and position is needed here.
-    TSize size = iItemPainter->Size();
-    SetSizeL(size.iWidth, size.iHeight);
-    TPoint position = iItemPainter->Position();
-    SetPosition(position.iX, position.iY);
-
-    if (iUtils)
+    if (iComponentContainer)
     {
-        // Set canvas fullscreen size is needed here.
-        iItemPainter->SetOnScreenCanvasRect(iUtils->GetOnScreenCanvasRect());
+        // Set item size and position is needed here.
+        TSize size = iItemPainter->Size();
+        SetSizeL(size.iWidth, size.iHeight);
+        TPoint position = iItemPainter->Position();
+        SetPosition(position.iX, position.iY);
+    
+        if (iUtils)
+        {
+            // Set canvas fullscreen size is needed here.
+            iItemPainter->SetOnScreenCanvasRect(iUtils->GetOnScreenCanvasRect());
+        }
     }
-
     DEBUG("CMIDCanvasGraphicsItem::SetParentL -");
 }
 
@@ -316,7 +326,53 @@
 //
 void CMIDCanvasGraphicsItem::HandleFullscreenModeChange()
 {
-    // Calling all functions which set size and position.
+    if (iUtils && iUtils->IsScalingEnabled())
+    {
+        // We need reposition text editor.
+        HandleChangeForScaling(EFullscreenChange);
+    }
+}
+
+TBool CMIDCanvasGraphicsItem::IsScalingOn() const
+{
+    return iUtils && iComponentContainer && iUtils->IsScalingEnabled()
+#ifdef RD_JAVA_S60_RELEASE_9_2
+           && !iPartialVKBOpen
+#endif // RD_JAVA_S60_RELEASE_9_2
+           && iComponentContainer->IsFullScreen();
+}
+
+void CMIDCanvasGraphicsItem::HandleResourceChange(TInt aType)
+{
+#ifdef RD_JAVA_S60_RELEASE_9_2
+    if ((aType == KAknSplitInputEnabled) ||
+            (aType == KAknSplitInputDisabled))
+    {
+        iPartialVKBOpen = (aType == KAknSplitInputEnabled);
+
+        if (iUtils && iComponentContainer && iUtils->IsScalingEnabled() &&
+                iComponentContainer->IsFullScreen())
+        {
+            // We need reposition text editor.
+            HandleChangeForScaling(EPartialVKBChange);
+        }
+    }
+#endif // RD_JAVA_S60_RELEASE_9_2
+
+    if (KEikDynamicLayoutVariantSwitch)
+    {
+        if (iUtils && iComponentContainer && iUtils->IsScalingEnabled() &&
+                iComponentContainer->IsFullScreen())
+        {
+            // We need reposition text editor.
+            HandleChangeForScaling(EResolutionChange);
+        }
+    }
+}
+
+void CMIDCanvasGraphicsItem::HandleChangeForScaling(TChange aChange)
+{
+    // Calling functions which set size and position.
     TRAPD(err, SetSizeL(iNonScaledSize.iWidth, iNonScaledSize.iHeight));
     if (err != KErrNone)
     {
@@ -324,38 +380,30 @@
     }
     SetPosition(iNonScaledPosition.iX, iNonScaledPosition.iY);
 
-    if (iUtils)
+    if (aChange == EResolutionChange || aChange == EFullscreenChange)
     {
-        // Setting of fullscreen canvas rect.
-        iItemPainter->SetOnScreenCanvasRect(iUtils->GetOnScreenCanvasRect());
+        if (iUtils)
+        {
+            // Setting of fullscreen canvas rect.
+            iItemPainter->SetOnScreenCanvasRect(iUtils->GetOnScreenCanvasRect());
+        }
     }
-}
 
-// ---------------------------------------------------------------------------
-// CMIDCanvasGraphicsItem::HandleResolutionChange
-// (other items are commented in the header file)
-// ---------------------------------------------------------------------------
-//
-void CMIDCanvasGraphicsItem::HandleResolutionChange()
-{
-    // Calling all functions which set size and position.
-    TRAPD(err, SetSizeL(iNonScaledSize.iWidth, iNonScaledSize.iHeight));
-    if (err != KErrNone)
+#ifdef RD_JAVA_S60_RELEASE_9_2
+    if (aChange == EPartialVKBChange)
     {
-        DEBUG_INT("CMIDCanvasGraphicsItem::HandleFullscreenModeChange: SetSizeL method leave with %d code", err);
+        if (iPartialVKBOpen)
+        {
+            // When partial VKB is opening, stop scaling.
+            iItemPainter->SetOnScreenCanvasRect(iComponentContainer->Control().Rect());
+        }
+        else if (iUtils)
+        {
+            // When partial VKB is closing, restore scaling.
+            iItemPainter->SetOnScreenCanvasRect(iUtils->GetOnScreenCanvasRect());
+        }
     }
-    SetPosition(iNonScaledPosition.iX, iNonScaledPosition.iY);
-    if (iUtils)
-    {
-        // Setting of fullscreen canvas rect.
-        iItemPainter->SetOnScreenCanvasRect(iUtils->GetOnScreenCanvasRect());
-    }
-}
-
-TBool CMIDCanvasGraphicsItem::IsScalingOn() const
-{
-    return iUtils && iComponentContainer && iUtils->IsScalingEnabled() &&
-           iComponentContainer->IsFullScreen();
+#endif // RD_JAVA_S60_RELEASE_9_2
 }
 
 // End of file
--- a/javauis/lcdui_akn/lcdui/src/CMIDCanvasGraphicsItemPainter.cpp	Mon Jun 21 15:32:50 2010 +0300
+++ b/javauis/lcdui_akn/lcdui/src/CMIDCanvasGraphicsItemPainter.cpp	Thu Jul 15 18:31:06 2010 +0300
@@ -118,7 +118,13 @@
         {
         case ESync:
             // We redraw the proper drawing rect.
-            DrawNow(TRect(iPosition, iViewSize));
+            // The top-left point is set to PositionRelativeToScreen
+            // in case that scaling is on.
+            DrawNow(
+                TRect(
+                    iContentRect.Size() != iViewSize ?
+                        PositionRelativeToScreen() : iPosition,
+                    iViewSize));
             break;
 
         case ESyncRect:
--- a/javauis/lcdui_akn/lcdui/src/CMIDChoiceGroupControl.cpp	Mon Jun 21 15:32:50 2010 +0300
+++ b/javauis/lcdui_akn/lcdui/src/CMIDChoiceGroupControl.cpp	Thu Jul 15 18:31:06 2010 +0300
@@ -1172,10 +1172,21 @@
     {
         // Get color from skin
         TRgb rgb = AKN_LAF_COLOR(215);
-        TInt textColor = IsFocused() ? EAknsCIQsnTextColorsCG8 : EAknsCIQsnTextColorsCG6;
+        TInt textColor;
+
+        // Set color for text according to item highlight
+        // (logical color constants are defined in lcdui.h)
+        if (iItem && iItem->IsHighlighted())
+        {
+            textColor = KHighlightedItemTextColor;
+        }
+        else
+        {
+            textColor = KNonHighlightedItemTextColor;
+        }
 
         AknsUtils::GetCachedColor(AknsUtils::SkinInstance(),
-                                  rgb,KAknsIIDQsnTextColors, textColor);
+                                  rgb, KAknsIIDQsnTextColors, textColor);
         iPopupTextLayout.DrawText(SystemGc(), aText, ETrue, rgb);
     }
 }
--- a/javauis/lcdui_akn/lcdui/src/CMIDControlItem.cpp	Mon Jun 21 15:32:50 2010 +0300
+++ b/javauis/lcdui_akn/lcdui/src/CMIDControlItem.cpp	Thu Jul 15 18:31:06 2010 +0300
@@ -52,8 +52,9 @@
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
 CMIDControlItem::CMIDControlItem(MMIDItem::TLayout aLayout, CMIDUIManager* aUIManager)
-        : CMIDItem(aLayout, aUIManager),
-        iCoeEnv(CCoeEnv::Static())
+        : CMIDItem(aLayout, aUIManager)
+        , iCoeEnv(CCoeEnv::Static())
+        , iHighlighted(EFalse)
 {
 }
 
@@ -217,10 +218,20 @@
 {
     if (aId.iUid == MAknsControlContext::ETypeId && iForm)
     {
-        return IsFocused() ?
-               MAknsControlContext::SupplyMopObject(aId, iForm->GetHighlightBackgroundCc()) :
-               MAknsControlContext::SupplyMopObject(aId,
-                                                    iForm->CurrentDisplayable().BackGroundControlContext());
+        if (iHighlighted)
+        {
+            // Highlighted background control context must be returned
+            // no matter if item is focused or not. Only then highlighted item
+            // will be displayed correctly, if Form is faded
+            // (e.g. Menu is shown).
+            return MAknsControlContext::SupplyMopObject(aId,
+                    iForm->GetHighlightBackgroundCc());
+        }
+        else
+        {
+            return MAknsControlContext::SupplyMopObject(aId,
+                    iForm->CurrentDisplayable().BackGroundControlContext());
+        }
     }
     return SupplyMopObject(aId, iMenuHandler->Cba(), iMenuHandler->MenuBar());
 }
@@ -249,10 +260,13 @@
 void CMIDControlItem::SetLabelColor(CMIDItemLabel* aLabelControl)
 {
     TRgb color;
-        
-    TInt labelColor = (IsFocused() && 
-                       Type() != MMIDComponent::ECustomItem &&
-                       Type() != MMIDComponent::EImageItem) ? EAknsCIQsnTextColorsCG8 : EAknsCIQsnTextColorsCG6;
+
+    // Set color for label text according to item highlight
+    // (logical color constants are defined in lcdui.h)
+    TInt labelColor = (iHighlighted
+                       && Type() != MMIDComponent::ECustomItem
+                       && Type() != MMIDComponent::EImageItem)
+                      ? KHighlightedItemTextColor : KNonHighlightedItemTextColor;
 
     // Get color from skin
     if ((AknsUtils::GetCachedColor(AknsUtils::SkinInstance(), color,
--- a/javauis/lcdui_akn/lcdui/src/CMIDDateFieldItem.cpp	Mon Jun 21 15:32:50 2010 +0300
+++ b/javauis/lcdui_akn/lcdui/src/CMIDDateFieldItem.cpp	Thu Jul 15 18:31:06 2010 +0300
@@ -70,7 +70,9 @@
     }
     if (iEditor)
     {
+#ifndef RD_JAVA_S60_RELEASE_9_2
         iEditor->SetFocus(ETrue);   // needed to notify observers about editor destruction
+#endif // RD_JAVA_S60_RELEASE_9_2
         delete iEditor;
         iEditor = NULL;
     }
@@ -817,15 +819,11 @@
     iEditor->SetFocus(focus);
     if (focus)
     {
-        // Text colour from skin - focused
-        iEditor->SetSkinTextColorL(EAknsCIQsnTextColorsCG8);
         TRAP_IGNORE(iUIManager->OpenNaviPaneControllerL()->PauseTickerL(
                         TICKER_PAUSE_INTERVAL, this));
     }
     else
     {
-        // Text colour from skin - unfocused
-        iEditor->SetSkinTextColorL(EAknsCIQsnTextColorsCG6);
         TRAP_IGNORE(iUIManager->OpenNaviPaneControllerL()->PauseTickerL(
                         0, this));
 #ifdef RD_SCALABLE_UI_V2
@@ -833,6 +831,8 @@
 #endif
     }
 
+    TRAP_IGNORE(UpdateTextColorsL());
+
     CMIDControlItem::FocusChanged(aDrawNow);
 
     DoSafeDraw();
@@ -952,4 +952,20 @@
     }
 }
 
+void CMIDDateFieldItem::UpdateTextColorsL()
+{
+    // Set color for content text according to item highlight
+    // (logical color constants are defined in lcdui.h)
+    if (iHighlighted)
+    {
+        // Text colour from skin - highlighted
+        iEditor->SetSkinTextColorL(KHighlightedItemTextColor);
+    }
+    else
+    {
+        // Text colour from skin - unfocused
+        iEditor->SetSkinTextColorL(KNonHighlightedItemTextColor);
+    }
+}
+
 // End of File
--- a/javauis/lcdui_akn/lcdui/src/CMIDDisplayable.cpp	Mon Jun 21 15:32:50 2010 +0300
+++ b/javauis/lcdui_akn/lcdui/src/CMIDDisplayable.cpp	Thu Jul 15 18:31:06 2010 +0300
@@ -276,11 +276,12 @@
         iSKPositionWithQwerty = ESoftkeysRight;
     }
 
+    // initialization of keypad information
+    ReadOnScreenKeypadTypeFromSuiteSettings();
+
     DEBUG("- CMIDDisplayable::ConstructL");
 }
 
-
-
 CMIDDisplayable::CMIDDisplayable(MMIDEnv& aEnv,CMIDUIManager& aUIManager)
         :CEikBorderedControl(TGulBorder(KMIDLetBorder)),
         iUIManager(&aUIManager),iEnv(aEnv),
--- a/javauis/lcdui_akn/lcdui/src/CMIDEdwin.cpp	Mon Jun 21 15:32:50 2010 +0300
+++ b/javauis/lcdui_akn/lcdui/src/CMIDEdwin.cpp	Thu Jul 15 18:31:06 2010 +0300
@@ -734,7 +734,8 @@
 #else
     if (IsConstraintSet(MMIDTextField::ENumeric) && (aType == EEventKeyUp) && !IsReadOnly() &&
 #endif // RD_SCALABLE_UI_V2
-            ((scanCode==EStdKeyNkpAsterisk) || (scanCode == EStdKeyMinus) || (scanCode==EStdKeyNkpMinus) || (scanCode == 0x2A) || (scanCode == 0x2D)))
+            ((scanCode==EStdKeyNkpAsterisk) || (scanCode == EStdKeyMinus) || (scanCode==EStdKeyNkpMinus) || (scanCode == 0x2A) || (scanCode == 0x2D) ||
+             (TChar(aKeyEvent.iCode) == TChar('-') && scanCode != EStdKeyMinus)))
     {
         HandleMinusCharEventL(EEventTextUpdate);
         CEikEdwin::ReportEdwinEventL(EEventTextUpdate);
@@ -752,20 +753,26 @@
     {
         CPlainText* res = CEikEdwin::Text();
         TInt textLength = CEikEdwin::TextLength();
-        if (scanCode == EStdKeyMinus)
+        if (scanCode == EStdKeyMinus && textLength < iMaxSize)
         {
             res->InsertL(CEikEdwin::CursorPos(), KMinusChar);
         }
-        else if (scanCode == EStdKeyFullStop)
+        else if (scanCode == EStdKeyFullStop && textLength < iMaxSize)
         {
             res->InsertL(CEikEdwin::CursorPos(), KFullStopChar);
         }
 
         HandleTextChangedL(); // notify editor about the text changes
         CEikEdwin::ReportEdwinEventL(EEventTextUpdate);
+        TInt cursorPos = CEikEdwin::CursorPos();
+
         if (CEikEdwin::TextLength() < iMaxSize)
         {
-            CEikEdwin::SetCursorPosL(CEikEdwin::CursorPos() + 1, EFalse);
+            CEikEdwin::SetCursorPosL(cursorPos + 1, EFalse);
+        }
+        else if (cursorPos == (iMaxSize - 1) && cursorPos == textLength && scanCode==EStdKeyFullStop)
+        {
+            CEikEdwin::SetCursorPosL(iMaxSize, EFalse);
         }
     }
     //Error tone playing case1:
@@ -903,6 +910,30 @@
             response = CEikEdwin::OfferKeyEventL(aKeyEvent,aType);
             UpdateTextCapacityIndicatorValueL();
         }
+        else
+        {
+            // If minus char was entered in full querty editor mode
+            if (IsConstraintSet(MMIDTextField::EDecimal) &&
+                    (aType == EEventKey) && !IsReadOnly() &&
+                    (TChar(aKeyEvent.iCode) == TChar('-') && scanCode != EStdKeyMinus))
+            {
+                CPlainText* res = CEikEdwin::Text();
+
+                if (res && TChar(aKeyEvent.iCode) == TChar('-') &&
+                        TextLength() < iMaxSize)
+                {
+                    res->InsertL(GetCaretPosition(), KMinusChar);
+                    HandleTextChangedL(); // notify editor about the text changes
+                    CEikEdwin::ReportEdwinEventL(EEventTextUpdate);
+
+                    if (TextLength() < iMaxSize)
+                    {
+                        CEikEdwin::SetCursorPosL(GetCaretPosition() + 1, EFalse);
+                    }
+                }
+            }
+
+        }
         return response;
     }
 }
@@ -1047,6 +1078,7 @@
             TInt illegalCharPos = -1;
             TPtr16 ptr = res->Des();
             TInt minusPos = ptr.LocateReverse(TChar('-'));
+            TInt endCursorPos = CEikEdwin::CursorPos();
 
             // check if minus sign is inserted on incorrect place
             // (not at the beginning)
@@ -1094,9 +1126,10 @@
                     {
                         cursorPos--;
                     }
-                    CEikEdwin::SetCursorPosL(cursorPos, EFalse);
+                    endCursorPos = cursorPos;
                 }
             }
+            CEikEdwin::SetCursorPosL(endCursorPos, EFalse);
             CleanupStack::Pop(res);
             delete res;
         }
--- a/javauis/lcdui_akn/lcdui/src/CMIDEdwinUtils.cpp	Mon Jun 21 15:32:50 2010 +0300
+++ b/javauis/lcdui_akn/lcdui/src/CMIDEdwinUtils.cpp	Thu Jul 15 18:31:06 2010 +0300
@@ -1221,9 +1221,9 @@
 
     TInt totalLength = ptr.Length() + aBuf.Length();
     if (totalLength > ptr.MaxLength())
-    {
-        iClearText = iClearText->ReAllocL(totalLength);
-        ptr = iClearText->Des();
+    {    
+		iClearText = iClearText->ReAllocL(totalLength);
+		ptr.Set(iClearText->Des());
     }
 
     ptr.Insert(aPos,aBuf);
--- a/javauis/lcdui_akn/lcdui/src/CMIDForm.cpp	Mon Jun 21 15:32:50 2010 +0300
+++ b/javauis/lcdui_akn/lcdui/src/CMIDForm.cpp	Thu Jul 15 18:31:06 2010 +0300
@@ -181,6 +181,12 @@
     {
         SetFocusedItem(ci.IsSelectable() ? aIndex : KErrNotFound);
     }
+    else if (aIndex <= iFocused)
+    {
+        // If new item is inserted to Form above the current item,
+        // index must increase
+        iFocused++;
+    }
 
     RequestLayoutL();
 }
@@ -1977,6 +1983,8 @@
     { // actions for the item loosing focus
         CMIDControlItem& control = ControlItem(iFocused);
         control.PostFocusTransferEvent(EFalse, aDirection);
+        // setting highlight must be called before setting focus
+        control.SetHighlight(EFalse);
         control.SetFocus(EFalse);
         UpdateItemCommands(NULL, NULL);
     }
@@ -2009,6 +2017,7 @@
         SetHighlightBackgroundRects();
 
         control.PostFocusTransferEvent(ETrue, aDirection);
+        control.SetHighlight(ETrue);
         control.SetFocus(ETrue);
         // msk: deliver also the possible MSK command to displayable
         UpdateItemCommands(control.CommandList(), control.GetMSKCommand());
@@ -2305,7 +2314,11 @@
 
     // Background for highlighted item, frame rects are set later
     iHighlightedBackgroundCc = CAknsFrameBackgroundControlContext::NewL(
+#ifdef RD_JAVA_S60_RELEASE_9_2
+                                   KAknsIIDQsnFrPopupPreview,
+#else
                                    KAknsIIDQsnFrInput,
+#endif // RD_JAVA_S60_RELEASE_9_2
                                    TRect(), TRect(), ETrue);
 
     iDisplayable.SetComponentL(*this);
--- a/javauis/lcdui_akn/lcdui/src/CMIDTextBoxQueryDialog.cpp	Mon Jun 21 15:32:50 2010 +0300
+++ b/javauis/lcdui_akn/lcdui/src/CMIDTextBoxQueryDialog.cpp	Thu Jul 15 18:31:06 2010 +0300
@@ -87,7 +87,6 @@
     iEdwinUtils = CMIDEdwinUtils::NewL(this, iDecimalSeparator);
 
     iConstraints = aConstraints;
-    iLastCountLine = 0;
     iStrict = ETrue;
 
     // if text is invalid according to constraints, throw IllegalArgumentException,
@@ -456,7 +455,7 @@
 void CMIDTextBoxQueryDialog::FocusChanged(TDrawNow aDrawNow)
 {
     CAknTextQueryDialog::FocusChanged(aDrawNow);
-    SetRightScrollBarPosition();
+    TRAP_IGNORE(UpdateScrollBarPositionL());
 }
 //
 // We do not want to become visible if we are not showing
@@ -485,12 +484,7 @@
     {
         CAknTextQueryDialog::SizeChanged();
     }
-    if (iEditor && iEditor->ScrollBarFrame() && iEditor->ScrollBarFrame()->VerticalScrollBar())
-    {
-        iEditorRect = iEditor->Rect();
-        iEditorRect.SetWidth(iEditorRect.Width() - iEditor->ScrollBarFrame()->VerticalScrollBar()->Rect().Width());
-        SetRightScrollBarPosition();
-    }
+    TRAP_IGNORE(UpdateScrollBarPositionL());
 }
 
 TKeyResponse CMIDTextBoxQueryDialog::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
@@ -662,7 +656,8 @@
 #else
     if (IsConstraintSet(MMIDTextField::ENumeric) && (aType == EEventKeyUp) && !iEditor->IsReadOnly() &&
 #endif // RD_SCALABLE_UI_V2
-            ((scanCode==EStdKeyNkpAsterisk) || (scanCode == EStdKeyMinus) || (scanCode==EStdKeyNkpMinus) || (scanCode == 0x2A) || (scanCode == 0x2D)))
+            ((scanCode==EStdKeyNkpAsterisk) || (scanCode == EStdKeyMinus) || (scanCode==EStdKeyNkpMinus) || (scanCode == 0x2A) || (scanCode == 0x2D) ||
+             (TChar(aKeyEvent.iCode) == TChar('-') && scanCode != EStdKeyMinus)))
     {
         HandleMinusCharEventL(MEikEdwinObserver::EEventTextUpdate);
         return EKeyWasConsumed;
@@ -688,10 +683,15 @@
         }
 
         iEditor->HandleTextChangedL(); // notify editor about the text changes
+        TInt cursorPos = GetCaretPosition();
 
         if (Size() < iMaxSize)
         {
-            SetCursorPositionL(GetCaretPosition() + 1);
+            SetCursorPositionL(cursorPos + 1);
+        }
+        else if (cursorPos == (iMaxSize - 1) && cursorPos == textLength && scanCode==EStdKeyFullStop)
+        {
+            SetCursorPositionL(iMaxSize);
         }
 
         HandleTextUpdateL(MEikEdwinObserver::EEventTextUpdate);
@@ -900,14 +900,6 @@
 
         HandleTextUpdateL(MEikEdwinObserver::EEventTextUpdate);
 
-        if (iEditor && iEditor->TextLayout())
-        {
-            if (iLastCountLine != iEditor->TextLayout()->GetLineNumber(iEditor->TextLength() - 1))
-            {
-                iLastCountLine = iEditor->TextLayout()->GetLineNumber(iEditor->TextLength() - 1);
-                SetRightScrollBarPosition();
-            }
-        }
     }
 }
 
@@ -937,6 +929,7 @@
             TInt pointPosL = ptr.Locate(iDecimalSeparator);
             TInt pointPosR = ptr.LocateReverse(iDecimalSeparator);
             TInt cursorPos = GetCaretPosition();
+            TInt endCursorPos = cursorPos;
 
             // check if minus sign is inserted on incorrect place
             // (not at the beginning)
@@ -975,7 +968,7 @@
                     // Set correct cusros possition
                     if (pointPosL == 0 && minusPos == pointPosL)
                     {
-                        SetCursorPositionL(pointPosL + 1);
+                        endCursorPos = (pointPosL + 1);
                     }
                 }
             }
@@ -983,7 +976,6 @@
             // Locate decimal separator again
             pointPosL = ptr.Locate(iDecimalSeparator);
             pointPosR = ptr.LocateReverse(iDecimalSeparator);
-            cursorPos = GetCaretPosition();
 
             if ((minusPos != KErrNotFound) && (pointPosL == 0))
             {
@@ -1009,9 +1001,11 @@
                     {
                         cursorPos--;
                     }
-                    SetCursorPositionL(cursorPos);
+
+                    endCursorPos = cursorPos;
                 }
             }
+            SetCursorPositionL(endCursorPos);
         }
         else if (((iConstraints &
                    MMIDTextField::EConstraintMask) == MMIDTextField::EMailAddr) ||
@@ -1560,17 +1554,40 @@
             aType == KEikColorResourceChange || aType == KAknsMessageSkinChange ||
             aType == KUidValueCoeColorSchemeChangeEvent)
     {
-        SetRightScrollBarPosition();
+        TRAP_IGNORE(UpdateScrollBarPositionL());
     }
-
 }
 
-void CMIDTextBoxQueryDialog::SetRightScrollBarPosition()
+/* UpdateScrollBarPositionL
+ *
+ * This method is called for placing scrollbar to correct place in edwin
+ */
+void CMIDTextBoxQueryDialog::UpdateScrollBarPositionL()
 {
-    // Editor Rect should not be set with empty values
-    if (iEditor && iEditorRect.Height() != 0 && iEditorRect.Width() != 0)
+    if(iEditor && iEditor->TextLayout())
     {
-        iEditor->SetRect(iEditorRect);
+        TInt numLines = iEditor->TextLayout()->NumFormattedLines();
+        if(numLines == iEditor->MaximumHeightInLines())
+        {
+            if(iEditor->ScrollBarFrame())
+            {
+                iEditor->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff, CEikScrollBarFrame::EOff);
+            }
+        }
+        else if(numLines > iEditor->MaximumHeightInLines())
+        {
+            if(!iEditor->ScrollBarFrame())
+            {
+                iEditor->CreatePreAllocatedScrollBarFrameL();
+                iEditor->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto);
+            }
+            TRect editorRect = iEditor->Rect();
+            if(iEditor->ScrollBarFrame()->VerticalScrollBar())
+            {
+                editorRect.SetWidth(editorRect.Width() - iEditor->ScrollBarFrame()->VerticalScrollBar()->ScrollBarBreadth());
+                iEditor->SetRect(editorRect);
+            }
+        }
     }
 }
 // End of file
--- a/javauis/lcdui_akn/lcdui/src/CMIDTextEditor.cpp	Mon Jun 21 15:32:50 2010 +0300
+++ b/javauis/lcdui_akn/lcdui/src/CMIDTextEditor.cpp	Thu Jul 15 18:31:06 2010 +0300
@@ -21,6 +21,10 @@
 #include <aknappui.h>
 #include <aknnavi.h>
 #include <j2me/jdebug.h>
+#ifdef RD_JAVA_S60_RELEASE_9_2
+// Used with partial VKB
+#include <AknPriv.hrh>
+#endif // RD_JAVA_S60_RELEASE_9_2
 
 // INTERNAL INCLUDES
 #include "CMIDTextEditor.h"
@@ -109,6 +113,8 @@
     delete iEditingStateIndicator;
 
     iUtils = NULL;
+    iComponentContainer = NULL;
+    iDirectContainer = NULL;
 
     DEBUG("CMIDTextEditor::~CMIDTextEditor -");
 }
@@ -158,12 +164,25 @@
 {
     DEBUG("CMIDTextEditor::CustomComponentContainerDisposing +");
 
-    // Remove container association.
-    iComponentContainer = NULL;
+#ifdef RD_JAVA_S60_RELEASE_9_2
+    if (iFocusState)
+    {
+        iTextEdwin->CloseVKB();
+    }
+#endif // RD_JAVA_S60_RELEASE_9_2
 
-    // Uninitialize the text editor window.
+    // Call SetFocus on edwin
+    iTextEdwin->SetFocus(EFalse);
+    // Disable the custom indicators as in Avkon if not controlled by
+    // the client application.
+    if (iEditingStateIndicator->EnabledState() ==
+            CMIDEditingStateIndicator::EIndicatorStateRelative)
+    {
+        iEditingStateIndicator->MakeVisible(EFalse);
+    }
+    // Set editor window uninitialized
     iTextEdwin->Uninitialize();
-
+    iComponentContainer = NULL;
     DEBUG("CMIDTextEditor::CustomComponentContainerDisposing -");
 }
 
@@ -332,19 +351,19 @@
             iNonScaledEditorSize = iTextEdwin->Size();
         }
         SetFontL(iNonScaledFont);
+
+        if (iUtils)
+        {
+            // It sets edwin variables necessary for correct clipping.
+            iTextEdwin->SetOnScreenCanvasRect(iUtils->GetOnScreenCanvasRect());
+            iTextEdwin->SetScaling(IsScalingOn());
+    
+            // It sets indicator variables necessary for correct clipping.
+            iEditingStateIndicator->SetScalingOn(IsScalingOn());
+            iEditingStateIndicator->SetCanvasRect(iUtils->GetOnScreenCanvasRect());
+        }
     }
-
-    if (iUtils)
-    {
-        // It sets edwin variables necessary for correct clipping.
-        iTextEdwin->SetOnScreenCanvasRect(iUtils->GetOnScreenCanvasRect());
-        iTextEdwin->SetScaling(IsScalingOn());
-
-        // It sets indicator variables necessary for correct clipping.
-        iEditingStateIndicator->SetScalingOn(IsScalingOn());
-        iEditingStateIndicator->SetCanvasRect(iUtils->GetOnScreenCanvasRect());
-    }
-
+    
     DEBUG("CMIDTextEditor::SetParentL -");
 }
 
@@ -464,7 +483,6 @@
             // Cursor is not shown automatically if the editor has focus.
             // So, set cursor visible.
             iTextEdwin->SetCursorVisible(ETrue);
-
         }
         else
         {
@@ -472,6 +490,7 @@
             // Remove the selection at this point. The selection can be
             // set again with the API.
             SetCursorPositionL(iTextEdwin->CursorPos());
+            iTextEdwin->Redraw();
         }
     }
     else if (!aVisible && iTextEdwin->IsVisible())
@@ -490,10 +509,9 @@
 
         // Always disable indicator if the editor is hidden.
         iEditingStateIndicator->MakeVisible(EFalse);
+        iTextEdwin->Redraw();
     }
 
-    iTextEdwin->Redraw();
-
     DEBUG("CMIDTextEditor::SetVisibleL -");
 }
 
@@ -582,29 +600,29 @@
     {
         // Set focus if the text editor is not focused
         iFocusState = ETrue;
-        // Call SetFocus on edwin
-        iTextEdwin->SetFocus(ETrue);
+
         // Send the information about new focused component to parent
         iComponentContainer->SetFocusedComponent(this);
 
-        // Set focus automatically selects the editor's content
-        // Remove the selection at this point. The selection can be
-        // set again with the API.
-        SetCursorPositionL(iTextEdwin->CursorPos());
-
-        // If the editor is not visible. do not show the cursor either.
-        if (!iTextEdwin->IsVisible())
+        // If the editor is visible, give him focus.
+        if (iTextEdwin->IsVisible())
         {
-            DEBUG("CMIDTextEditor::SetFocusStateL, hiding cursor");
-
-            iTextEdwin->SetCursorVisible(EFalse);
-        }
-        else if (iEditingStateIndicator->EnabledState() ==
-                 CMIDEditingStateIndicator::EIndicatorStateRelative)
-        {
-            // Enable the custom indicators as in Avkon if not controlled
-            // by the client application
-            iEditingStateIndicator->MakeVisible(ETrue);
+            DEBUG("CMIDTextEditor::SetFocusStateL, visible - iTextEdwin->setFocus(true)");
+            // Call SetFocus on edwin
+            iTextEdwin->SetFocus(ETrue);
+            // Set focus automatically selects the editor's content
+            // Remove the selection at this point. The selection can be
+            // set again with the API.
+            SetCursorPositionL(iTextEdwin->CursorPos());
+            
+            if (iEditingStateIndicator->EnabledState() ==
+                             CMIDEditingStateIndicator::EIndicatorStateRelative)
+            {
+                // Enable the custom indicators as in Avkon if not controlled
+                // by the client application
+                iEditingStateIndicator->MakeVisible(ETrue);
+            }
+            iTextEdwin->Redraw();
         }
     }
     else if (!(aFocusState) && (iFocusState))
@@ -632,10 +650,9 @@
         {
             iEditingStateIndicator->MakeVisible(EFalse);
         }
+        iTextEdwin->Redraw();
     }
 
-    iTextEdwin->Redraw();
-
     DEBUG("CMIDTextEditor::SetFocusStateL -");
 }
 
@@ -2121,42 +2138,56 @@
 //
 void CMIDTextEditor::HandleFullscreenModeChange()
 {
-    // It is needed to store iRowCountActive, because SetEditorSize resets it.
-    TBool rowCountActive = iRowCountActive;
-
-    // Calling all functions which sets sizes and position of TextEditor.
-    SetEditorSize(iNonScaledEditorSize.iWidth, iNonScaledEditorSize.iHeight);
-    SetPosition(iNonScaledPosition.iX, iNonScaledPosition.iY);
-    if (iNonScaledFont)
+    if (iUtils && iUtils->IsScalingEnabled())
     {
-        TRAPD(err, SetFontL(iNonScaledFont));
-        if (err != KErrNone)
-        {
-            DEBUG_INT("CMIDTextEditor::HandleFullscreenModeChange - error %d", err);
-        }
-    }
-
-    // restoring of iRowCountActive
-    iRowCountActive = rowCountActive;
-
-    if (iUtils)
-    {
-        // It sets edwin variables necessary for correct clipping.
-        iTextEdwin->SetOnScreenCanvasRect(iUtils->GetOnScreenCanvasRect());
-        iTextEdwin->SetScaling(IsScalingOn());
-
-        // It sets indicator variables necessary for correct clipping.
-        iEditingStateIndicator->SetScalingOn(IsScalingOn());
-        iEditingStateIndicator->SetCanvasRect(iUtils->GetOnScreenCanvasRect());
+        // We need reposition text editor.
+        HandleChangeForScaling(EFullscreenChange);
     }
 }
 
-// ---------------------------------------------------------------------------
-// CMIDTextEditor::HandleResolutionChange
-// (other items were commented in a header
-// ---------------------------------------------------------------------------
-//
-void CMIDTextEditor::HandleResolutionChange()
+TBool CMIDTextEditor::IsScalingOn() const
+{
+    return iUtils && iComponentContainer && iUtils->IsScalingEnabled()
+#ifdef RD_JAVA_S60_RELEASE_9_2
+           && !iPartialVKBOpen
+#endif // RD_JAVA_S60_RELEASE_9_2
+           && iComponentContainer->IsFullScreen();
+}
+
+void CMIDTextEditor::HandleResourceChange(TInt aType)
+{
+#ifdef RD_JAVA_S60_RELEASE_9_2
+    if ((aType == KAknSplitInputEnabled) ||
+            (aType == KAknSplitInputDisabled))
+    {
+        iPartialVKBOpen = (aType == KAknSplitInputEnabled);
+        if (iTextEdwin && iTextEdwin->IsFocused())
+        {
+            // Inform edwin about the event.
+            iTextEdwin->HandleResourceChange(aType);
+        }
+
+        if (iUtils && iComponentContainer && iUtils->IsScalingEnabled() &&
+                iComponentContainer->IsFullScreen())
+        {
+            // Reposition the text editor.
+            HandleChangeForScaling(EPartialVKBChange);
+        }
+    }
+#endif // RD_JAVA_S60_RELEASE_9_2
+
+    if (aType == KEikDynamicLayoutVariantSwitch)
+    {
+        if (iUtils && iComponentContainer && iUtils->IsScalingEnabled() &&
+                iComponentContainer->IsFullScreen())
+        {
+            // Reposition the text editor.
+            HandleChangeForScaling(EResolutionChange);
+        }
+    }
+}
+
+void CMIDTextEditor::HandleChangeForScaling(TChange aChange)
 {
     // It is needed to store iRowCountActive, because SetEditorSize resets it.
     TBool rowCountActive = iRowCountActive;
@@ -2176,20 +2207,52 @@
     // restoring of iRowCountActive
     iRowCountActive = rowCountActive;
 
-    if (iUtils)
+    if ((aChange == EFullscreenChange) || (aChange == EResolutionChange))
     {
-        // It sets edwin variable necessary for correct clipping.
-        iTextEdwin->SetOnScreenCanvasRect(iUtils->GetOnScreenCanvasRect());
+        if (iUtils)
+        {
+            // It sets edwin variable necessary for correct clipping.
+            iTextEdwin->SetOnScreenCanvasRect(iUtils->GetOnScreenCanvasRect());
+
+            // It sets indicator variable necessary for correct clipping.
+            iEditingStateIndicator->SetCanvasRect(iUtils->GetOnScreenCanvasRect());
+        }
+        if (aChange == EFullscreenChange)
+        {
+            // If scaling is turn on or off, we need to inform edwin
+            // and indicator about that.
+            iTextEdwin->SetScaling(IsScalingOn());
+            iEditingStateIndicator->SetScalingOn(IsScalingOn());
+        }
+    }
 
-        // It sets indicator variable necessary for correct clipping.
-        iEditingStateIndicator->SetCanvasRect(iUtils->GetOnScreenCanvasRect());
-    }
-}
+#ifdef RD_JAVA_S60_RELEASE_9_2
+    if (aChange == EPartialVKBChange)
+    {
+        if (iPartialVKBOpen)
+        {
+            // When partial keyboard is opening, the scalingmust be stoped.
+            // Setting edwin's variables, it is necessary for correct clipping.
+            iTextEdwin->SetOnScreenCanvasRect(iComponentContainer->Control().Rect());
+            iTextEdwin->SetScaling(EFalse);
 
-TBool CMIDTextEditor::IsScalingOn() const
-{
-    return iUtils && iComponentContainer && iUtils->IsScalingEnabled() &&
-           iComponentContainer->IsFullScreen();
+            // Setting indicator's variables, it is necessary for correct clipping.
+            iEditingStateIndicator->SetScalingOn(EFalse);
+            iEditingStateIndicator->SetCanvasRect(iComponentContainer->Control().Rect());
+        }
+        else if (iUtils)
+        {
+            // When partial keybord is closing, the scaling needs to be restored.
+            // Setting edwin's variables, it is necessary for correct clipping.
+            iTextEdwin->SetOnScreenCanvasRect(iUtils->GetOnScreenCanvasRect());
+            iTextEdwin->SetScaling(IsScalingOn());
+
+            // Setting indicator's variables, it is necessary for correct clipping.
+            iEditingStateIndicator->SetScalingOn(IsScalingOn());
+            iEditingStateIndicator->SetCanvasRect(iUtils->GetOnScreenCanvasRect());
+        }
+    }
+#endif // RD_JAVA_S60_RELEASE_9_2
 }
 
 // End of file
--- a/javauis/lcdui_akn/lcdui/src/CMIDTextEditorEdwin.cpp	Mon Jun 21 15:32:50 2010 +0300
+++ b/javauis/lcdui_akn/lcdui/src/CMIDTextEditorEdwin.cpp	Thu Jul 15 18:31:06 2010 +0300
@@ -156,7 +156,14 @@
         response = HandleSpecialKeyEventsL(aKeyEvent, aType);
 
         // Not handled, try with CEikEdwin
-        if (response == EKeyWasNotConsumed)
+        // Consume down and up type of keyevents
+        if ((response == EKeyWasConsumed) || 
+                (aType != EEventKey && aKeyEvent.iScanCode != 
+                EStdKeyApplication0))
+        {
+            response = EKeyWasConsumed;
+        }
+        else
         {
             // Old text is needed if the new content is not valid for the
             // given set of constraints. This validation is made because
@@ -171,16 +178,31 @@
             CleanupStack::PushL(oldContent);
 
             response = CEikEdwin::OfferKeyEventL(aKeyEvent, aType);
-
-            // Validate new content and undo if not valid.
-            if (!iEdwinUtils.ConstraintsValidForText(
-                        Read(), iConstraints, EFalse))
-            {
-                CEikEdwin::SetTextL(oldContent);
-                // Notify about text change.
-                HandleTextChangedL();
-                // Restore cursor's original position.
-                SetCursorPosL(iCursorPosForAction, EFalse);
+            
+            if (response == EKeyWasConsumed) {
+                // Validate new content and undo if not valid.
+                if (!iEdwinUtils.ConstraintsValidForText(
+                            Read(), iConstraints, EFalse))
+                {
+                    CEikEdwin::SetTextL(oldContent);
+                    // Notify about text change.
+                    HandleTextChangedL();
+                    // Restore cursor's original position.
+                    SetCursorPosL(iCursorPosForAction, EFalse);
+                }
+            }
+            else
+            { 
+                // Consuming the up/down arrows, because edwin does not 
+                // consume them if at first/last line. 
+                if ((aType == EEventKey) &&
+                        (((aKeyEvent.iCode == EKeyUpArrow) ||
+                          (aKeyEvent.iCode == EKeyDownArrow)) ||
+                         ((aKeyEvent.iScanCode == EStdKeyUpArrow) ||
+                          (aKeyEvent.iScanCode == EStdKeyDownArrow))))
+                {
+                    response = EKeyWasConsumed;
+                }
             }
             CleanupStack::PopAndDestroy(oldContent);
         }
@@ -548,7 +570,7 @@
 //
 void CMIDTextEditorEdwin::HandleResourceChange(TInt aType)
 {
-    CCoeControl::HandleResourceChange(aType);
+    CEikEdwin::HandleResourceChange(aType);
     // Notification about language change
     if (aType == KEikInputLanguageChange)
     {
--- a/javauis/lcdui_akn/lcdui/src/CMIDTextEditorEdwinCustomDraw.cpp	Mon Jun 21 15:32:50 2010 +0300
+++ b/javauis/lcdui_akn/lcdui/src/CMIDTextEditorEdwinCustomDraw.cpp	Thu Jul 15 18:31:06 2010 +0300
@@ -252,6 +252,10 @@
     {
         iEdwin.GetColor(EColorControlHighlightBackground, ret);
     }
+    else if (aColorIndex == TLogicalRgb::ESystemSelectionForegroundIndex)
+    {
+        iEdwin.GetColor(EColorControlHighlightText, ret);
+    }
     else
     {
         // Other colors use parent's SystemColor.
--- a/javauis/lcdui_akn/lcdui/src/CMIDTextFieldEdwin.cpp	Mon Jun 21 15:32:50 2010 +0300
+++ b/javauis/lcdui_akn/lcdui/src/CMIDTextFieldEdwin.cpp	Thu Jul 15 18:31:06 2010 +0300
@@ -123,7 +123,11 @@
     }
     else
     { // skinning colour groups for editable text
-        skinTextColor = IsFocused() ? EAknsCIQsnTextColorsCG8 : EAknsCIQsnTextColorsCG6;
+        // Set color for content text (logical color constants 
+        // are defined in lcdui.h)
+        skinTextColor = IsFocused() ?
+                        TAknsQsnTextColorsIndex(KHighlightedItemTextColor)
+                        : TAknsQsnTextColorsIndex(KNonHighlightedItemTextColor);
     }
 
     TRect parentRect = aRect;
--- a/javauis/lcdui_akn/lcdui/src/CMIDTextFieldItem.cpp	Mon Jun 21 15:32:50 2010 +0300
+++ b/javauis/lcdui_akn/lcdui/src/CMIDTextFieldItem.cpp	Thu Jul 15 18:31:06 2010 +0300
@@ -345,6 +345,7 @@
     CMIDControlItem::FocusChanged(aDrawNow);
     // DoLayout and change text color when focused
     SizeChanged();
+    TRAP_IGNORE(UpdateTextColorsL());
 }
 
 void CMIDTextFieldItem::HandleCurrentL(TBool aCurrent)
@@ -672,3 +673,21 @@
     }
 }
 
+void CMIDTextFieldItem::UpdateTextColorsL()
+{
+    if (iTextField)
+    {
+        // Set color for content text according to item highlight
+        // (logical color constants are defined in lcdui.h)
+        if (iHighlighted)
+        {
+            // Text colour from skin - highlighted
+            iTextField->SetTextSkinColorIdL(KHighlightedItemTextColor);
+        }
+        else
+        {
+            // Text colour from skin - unfocused
+            iTextField->SetTextSkinColorIdL(KNonHighlightedItemTextColor);
+        }
+    }
+}