Revision: 200947 default PDK_3.0.f PDK_3.0.g
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:46:07 +0200
changeset 0 254040eb3b7d
child 4 9f92ee11141b
Revision: 200947 Kit: 200951
defaultapplicationsettings/group/bld.inf
defaultapplicationsettings/gsplugin/data/10281BA0.rss
defaultapplicationsettings/gsplugin/data/gsdasplugin_rsc.rss
defaultapplicationsettings/gsplugin/group/GSDasPluginIcons.mk
defaultapplicationsettings/gsplugin/group/bld.inf
defaultapplicationsettings/gsplugin/group/gsdasplugin.mmp
defaultapplicationsettings/gsplugin/inc/gs_das.h
defaultapplicationsettings/gsplugin/inc/gs_das_emptycontainer.h
defaultapplicationsettings/gsplugin/loc/gs_das.loc
defaultapplicationsettings/gsplugin/src/gs_das.cpp
defaultapplicationsettings/gsplugin/src/gs_das_emptycontainer.cpp
defaultapplicationsettings/gsplugin/src/gs_das_implementationtable.cpp
defaultapplicationsettings/rom/DefaultApplicationSettings.iby
defaultapplicationsettings/rom/DefaultApplicationSettingsResources.iby
defaultapplicationsettings/server/data/defaultappserver.rss
defaultapplicationsettings/server/data/defaultappserver_reg.rss
defaultapplicationsettings/server/group/bld.inf
defaultapplicationsettings/server/group/das_server.mmp
defaultapplicationsettings/server/inc/das.hlp.hrh
defaultapplicationsettings/server/inc/das.hrh
defaultapplicationsettings/server/inc/das_app.h
defaultapplicationsettings/server/inc/das_appui.h
defaultapplicationsettings/server/inc/das_doc.h
defaultapplicationsettings/server/inc/das_gsentries.rh
defaultapplicationsettings/server/inc/das_server.h
defaultapplicationsettings/server/inc/das_service.h
defaultapplicationsettings/server/inc/das_servmimeapps.h
defaultapplicationsettings/server/inc/das_srvmime_dlg.h
defaultapplicationsettings/server/inc/das_view.h
defaultapplicationsettings/server/loc/defaultappserver.loc
defaultapplicationsettings/server/loc/services_db.loc
defaultapplicationsettings/server/src/das.cpp
defaultapplicationsettings/server/src/das_app.cpp
defaultapplicationsettings/server/src/das_appui.cpp
defaultapplicationsettings/server/src/das_doc.cpp
defaultapplicationsettings/server/src/das_server.cpp
defaultapplicationsettings/server/src/das_service.cpp
defaultapplicationsettings/server/src/das_servmimeapps.cpp
defaultapplicationsettings/server/src/das_srvmime_dlg.cpp
defaultapplicationsettings/server/src/das_view.cpp
defaultapplicationsettings/service/BWINS/defaultappclientU.DEF
defaultapplicationsettings/service/EABI/defaultappclientU.DEF
defaultapplicationsettings/service/group/bld.inf
defaultapplicationsettings/service/group/das_service.mmp
defaultapplicationsettings/service/inc/das_service.h
defaultapplicationsettings/service/src/das_client.cpp
defaultapplicationsettings/service/src/das_service.cpp
defaultapplicationsettings/services_db/BWINS/servicesdbU.DEF
defaultapplicationsettings/services_db/Eabi/servicesdbU.DEF
defaultapplicationsettings/services_db/group/bld.inf
defaultapplicationsettings/services_db/group/services_db.mmp
defaultapplicationsettings/services_db/src/services_db.cpp
devmngt_plat/default_app_client_api/default_app_client_api.metaxml
devmngt_plat/default_app_client_api/group/bld.inf
devmngt_plat/default_app_client_api/inc/das_client.h
devmngt_plat/default_app_client_api/tsrc/DasClientApiTest/bwins/DasClientApiTestU.DEF
devmngt_plat/default_app_client_api/tsrc/DasClientApiTest/eabi/DasClientApiTestU.def
devmngt_plat/default_app_client_api/tsrc/DasClientApiTest/group/DasClientApiTest.bat
devmngt_plat/default_app_client_api/tsrc/DasClientApiTest/group/DasClientApiTest.iby
devmngt_plat/default_app_client_api/tsrc/DasClientApiTest/group/DasClientApiTest.mmp
devmngt_plat/default_app_client_api/tsrc/DasClientApiTest/group/DasClientApiTest.pkg
devmngt_plat/default_app_client_api/tsrc/DasClientApiTest/group/bld.inf
devmngt_plat/default_app_client_api/tsrc/DasClientApiTest/inc/CClientLauncher.h
devmngt_plat/default_app_client_api/tsrc/DasClientApiTest/inc/DasClientApiTest.h
devmngt_plat/default_app_client_api/tsrc/DasClientApiTest/src/DasClientApiTest.cpp
devmngt_plat/default_app_client_api/tsrc/DasClientApiTest/src/DasClientApiTestblocks.cpp
devmngt_plat/group/bld.inf
devmngt_plat/services_db_api/group/bld.inf
devmngt_plat/services_db_api/inc/services_db.h
devmngt_plat/services_db_api/inc/services_db.rh
devmngt_plat/services_db_api/services_db_api.metaxml
devmngt_plat/services_db_api/tsrc/ServicesDbApiTest/Bmarm/ServicesDbApiTestU.DEF
devmngt_plat/services_db_api/tsrc/ServicesDbApiTest/Bwins/ServicesDbApiTestU.DEF
devmngt_plat/services_db_api/tsrc/ServicesDbApiTest/EABI/ServicesDbApiTestU.def
devmngt_plat/services_db_api/tsrc/ServicesDbApiTest/conf/ui_ServicesDbApiTest.cfg
devmngt_plat/services_db_api/tsrc/ServicesDbApiTest/data/ServicesDbApiTest.rsc
devmngt_plat/services_db_api/tsrc/ServicesDbApiTest/group/ServicesDbApiTest.iby
devmngt_plat/services_db_api/tsrc/ServicesDbApiTest/group/ServicesDbApiTest.mmp
devmngt_plat/services_db_api/tsrc/ServicesDbApiTest/group/ServicesDbApiTest.pkg
devmngt_plat/services_db_api/tsrc/ServicesDbApiTest/group/ServicesDbApiTest_DoxyFile.txt
devmngt_plat/services_db_api/tsrc/ServicesDbApiTest/group/ServicesDbApiTest_nrm.mmp
devmngt_plat/services_db_api/tsrc/ServicesDbApiTest/group/bld.inf
devmngt_plat/services_db_api/tsrc/ServicesDbApiTest/group/proeng_c.bat
devmngt_plat/services_db_api/tsrc/ServicesDbApiTest/group/proeng_z.bat
devmngt_plat/services_db_api/tsrc/ServicesDbApiTest/inc/ServicesDbApiTest.h
devmngt_plat/services_db_api/tsrc/ServicesDbApiTest/init/TestFramework_SDB.ini
devmngt_plat/services_db_api/tsrc/ServicesDbApiTest/src/ServicesDbApiTest.cpp
devmngt_plat/services_db_api/tsrc/ServicesDbApiTest/src/ServicesDbApiTest.rss
devmngt_plat/services_db_api/tsrc/ServicesDbApiTest/src/ServicesDbApiTestBlocks.cpp
devmngt_pub/group/bld.inf
group/bld.inf
layers.sysdef.xml
package_definition.xml
sysdef_1_4_0.dtd
systemswuis/group/bld.inf
systemswuis/touchscreencalib/PubSub/touchscprivatepskeys.h
systemswuis/touchscreencalib/aif/TouchScreenCalibaif.rss
systemswuis/touchscreencalib/data/TouchScreenCalib.rss
systemswuis/touchscreencalib/data/TouchScreenCalib_anim.rss
systemswuis/touchscreencalib/data/TouchScreenCalib_reg.rss
systemswuis/touchscreencalib/group/TouchScreenCalib.mmp
systemswuis/touchscreencalib/group/bld.inf
systemswuis/touchscreencalib/group/touchscreencalib_icons.mk
systemswuis/touchscreencalib/inc/MTouchScreenCalibPropertyResponder.h
systemswuis/touchscreencalib/inc/TouchScreenCalibAppUi.h
systemswuis/touchscreencalib/inc/TouchScreenCalibApplication.h
systemswuis/touchscreencalib/inc/TouchScreenCalibDefines.h
systemswuis/touchscreencalib/inc/TouchScreenCalibDocument.h
systemswuis/touchscreencalib/inc/TouchScreenCalibPubSubObserver.h
systemswuis/touchscreencalib/inc/TouchScreenCalibSubscriber.h
systemswuis/touchscreencalib/inc/TouchScreenCalibView.h
systemswuis/touchscreencalib/loc/touchscreencalib.loc
systemswuis/touchscreencalib/rom/TouchScreenCalib.iby
systemswuis/touchscreencalib/rom/TouchScreenCalibResources.iby
systemswuis/touchscreencalib/rom/TouchScreenCalib_variant.iby
systemswuis/touchscreencalib/src/TouchScreenCalibAppUi.cpp
systemswuis/touchscreencalib/src/TouchScreenCalibApplication.cpp
systemswuis/touchscreencalib/src/TouchScreenCalibDocument.cpp
systemswuis/touchscreencalib/src/TouchScreenCalibPubSubObserver.cpp
systemswuis/touchscreencalib/src/TouchScreenCalibSubscriber.cpp
systemswuis/touchscreencalib/src/TouchScreenCalibView.cpp
systemswuis/touchscreencalib/tsccustcmds/bwins/tsccustcmdsu.def
systemswuis/touchscreencalib/tsccustcmds/eabi/tsccustcmdsu.def
systemswuis/touchscreencalib/tsccustcmds/group/tsccustcmds.mmp
systemswuis/touchscreencalib/tsccustcmds/inc/MTSCPropertyResponder.h
systemswuis/touchscreencalib/tsccustcmds/inc/TSCPubSubObserver.h
systemswuis/touchscreencalib/tsccustcmds/inc/tsccustcmdfactory.h
systemswuis/touchscreencalib/tsccustcmds/inc/tscstartupextension.h
systemswuis/touchscreencalib/tsccustcmds/inc/tscstartupextensiondef.h
systemswuis/touchscreencalib/tsccustcmds/inc/tscsubscriber.h
systemswuis/touchscreencalib/tsccustcmds/src/tsccustcmdfactory.cpp
systemswuis/touchscreencalib/tsccustcmds/src/tscpubsubobserver.cpp
systemswuis/touchscreencalib/tsccustcmds/src/tscstartupextension.cpp
systemswuis/touchscreencalib/tsccustcmds/src/tscsubscriber.cpp
systemswuis/touchscreencalib/tscstartupextensionplugin/data/10283123.rss
systemswuis/touchscreencalib/tscstartupextensionplugin/group/tscstartupextensionplugin.mmp
systemswuis/touchscreencalib/tscstartupextensionplugin/inc/MTSCPlugInPropertyResponder.h
systemswuis/touchscreencalib/tscstartupextensionplugin/inc/TSCPlugInPubSubObserver.h
systemswuis/touchscreencalib/tscstartupextensionplugin/inc/tscpluginsubscriber.h
systemswuis/touchscreencalib/tscstartupextensionplugin/inc/tscstartupextensionplugin.h
systemswuis/touchscreencalib/tscstartupextensionplugin/inc/tscstartupextensionplugindef.h
systemswuis/touchscreencalib/tscstartupextensionplugin/src/implementationfactory.cpp
systemswuis/touchscreencalib/tscstartupextensionplugin/src/tscpluginpubsubobserver.cpp
systemswuis/touchscreencalib/tscstartupextensionplugin/src/tscpluginsubscriber.cpp
systemswuis/touchscreencalib/tscstartupextensionplugin/src/tscstartupextensionplugin.cpp
tsrc/group/bld.inf
tsrc/group/copy_binaries_to_sys_dir.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/group/bld.inf	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2005-2006 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:  Build information file for project DefaultApplicationSettings
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+#include "../services_db/group/bld.inf"
+#include "../server/group/bld.inf"
+#include "../service/group/bld.inf"
+#include "../gsplugin/group/bld.inf"
+
+PRJ_EXPORTS
+
+../rom/DefaultApplicationSettings.iby CORE_APP_LAYER_IBY_EXPORT_PATH(defaultapplicationsettings.iby)
+../rom/DefaultApplicationSettingsResources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(defaultapplicationsettingsresources.iby)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/gsplugin/data/10281BA0.rss	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,99 @@
+/*
+* Copyright (c) 2005-2006 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:  ECOM Interface definition for project General Settings Plugin
+*
+*/
+
+
+#include <registryinfo.rh>
+
+/**
+* How to use the resource definition:
+*
+* IMPLEMENTATION_INFO
+*    {
+*    implementation_uid  = <Your implementation UID here>;
+*    version_no          = 1;
+*    display_name        = "<Your plugin name here (just for debugging)>";
+*    default_data        = "<One of the below UIDs your plugin will be part of>";
+*    opaque_data         = "<Position of your plugin in the parent listbox>";
+*    }
+*
+* For example plugins wishing to use Apps Plugin as a parent use 
+* KGSAppsPluginUid (defined in GSFWViewUIDs.h):
+*
+*    default_data = "0x10207239";
+
+// Use this UID if plugin belongs to Main view:
+const TUid KGSMainViewUid = { 0x1020723B };
+
+
+// No item is selected in the container's listbox
+const TUid KGSNoneSelected = { 0x00000000 };
+
+// UIDs used by the sub-view plugins:
+
+// Use this UID if plugin belongs to General view:
+const TUid KGSGenPluginUid  = { 0x10207237 };
+
+// Use this UID if plugin belongs to Telephony view:
+const TUid KGSTelPluginUid  = { 0x1020723D };
+
+// Use this UID if plugin belongs to Connection view:
+const TUid KGSConPluginUid  = { 0x10207250 };
+
+// Use this UID if plugin belongs to Applications view:
+const TUid KGSAppsPluginUid = { 0x10207239 };
+
+// Use this UID if plugin belongs to Personalisation view:
+const TUid KGSPrslnPluginUid = { 0x10207252 };
+
+// Use this UID if plugin belongs to Security view:
+const TUid KGSSecurityPluginUid = { 0x1020743A };
+
+// Use this UID if plugin belongs to Standby view:
+const TUid KGSStandbyPluginUid = { 0x1020743F };
+
+*
+* Note that position of the plugin is supported only for internally provided
+* plugins. Others, such as 3rd party plugins, are sorted according to their
+* name and plugin provider category.
+*
+* Plugin position must follow the postition defined in UI specification.
+* Position starts from 0. Use -1 if position is not to be used in sorting.
+*
+*/
+RESOURCE REGISTRY_INFO theInfo
+    {
+    dll_uid     = 0x10281BA0; // Plugin dll UID 
+    interfaces  = 
+        {
+        INTERFACE_INFO
+            {
+            interface_uid   = 0x10207236; // UID for CGSPluginInterface - do not change.
+            implementations = 
+                {
+                IMPLEMENTATION_INFO
+                    {
+                    implementation_uid  = 0x10281BA1; // Plugin UID
+                    version_no          = 1;
+                    display_name        = "DefaultAppSettings Plugin"; 
+                    default_data        = "0x10207239"; 
+                    opaque_data         = "0"; // Order number. We are the first
+                    }
+                };
+            }
+        };
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/gsplugin/data/gsdasplugin_rsc.rss	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,101 @@
+/*
+* Copyright (c) 2005-2006 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:  Resource file for project General Settings Plugin
+*
+*/
+
+
+//  INCLUDES
+#include    <bldvariant.hrh>
+#include    <avkon.rh>
+#include    <avkon.rsg>
+#include    <avkon.mbg>
+#include    <eikcore.rsg>
+#include    <eikon.rh>
+#include    <eikon.rsg>
+#include    <avkon.loc>
+#include    <data_caging_paths_strings.hrh>
+
+#include    <gs_das.loc>
+
+//  RESOURCE IDENTIFIER
+NAME    DAGS
+RESOURCE RSS_SIGNATURE { }
+RESOURCE TBUF { buf=""; }
+
+//  RESOURCE DEFINITIONS 
+
+//----------------------------------------------------
+//   
+//    r_gs_menubar_change_exit
+//    Options menu with 'Exit' item.
+//
+//----------------------------------------------------
+//
+RESOURCE MENU_BAR r_gs_menubar_change_exit
+    {
+    titles =
+        {
+        MENU_TITLE 
+            { 
+            menu_pane = r_gs_menu_item_exit;
+            }
+        };
+    }
+
+//----------------------------------------------------
+//   
+//    r_gs_menu_item_exit
+//    Options menu item 'Exit'.
+//
+//----------------------------------------------------
+//
+RESOURCE MENU_PANE r_gs_menu_item_exit
+    {
+    items =
+        {
+        MENU_ITEM 
+            {
+            command = EAknCmdExit;
+            txt = qtn_options_exit;
+            }
+        };
+    }
+    
+//----------------------------------------------------
+//   
+//    r_gs_example_view_title
+//    Packet data view's title.
+//
+//----------------------------------------------------
+//
+RESOURCE TBUF r_gs_defaultapp_caption
+    {
+    buf = qtn_da_gsp_caption;
+    }
+
+//----------------------------------------------------
+//   
+//    r_gs_defaultapp_view
+//    Default App plugin view.
+//
+//----------------------------------------------------
+//
+RESOURCE AVKON_VIEW r_gs_defaultapp_view
+    {
+    menubar = r_gs_menubar_change_exit;
+    cba = R_AVKON_SOFTKEYS_OPTIONS_BACK__SELECT;    
+    }
+
+//End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/gsplugin/group/GSDasPluginIcons.mk	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,71 @@
+#
+# Copyright (c) 2005 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: Icons makefile for project Default Application settings
+#
+
+ifeq (WINS,$(findstring WINS, $(PLATFORM)))
+ZDIR=\epoc32\release\$(PLATFORM)\$(CFG)\Z
+else
+ZDIR=\epoc32\data\z
+endif
+
+# ----------------------------------------------------------------------------
+# : Configure these
+# ----------------------------------------------------------------------------
+
+TARGETDIR=$(ZDIR)\resource\apps
+HEADERDIR=\epoc32\include
+ICONTARGETFILENAME=$(TARGETDIR)\gsdasplugin.mif
+HEADERFILENAME=$(HEADERDIR)\gsdasplugin.mbg
+
+do_nothing :
+	@rem do_nothing
+
+MAKMAKE : do_nothing
+
+BLD : do_nothing
+
+CLEAN : do_nothing
+
+LIB : do_nothing
+
+CLEANLIB : do_nothing
+
+# ----------------------------------------------------------------------------
+# : Configure these.
+#
+# NOTE 1: DO NOT DEFINE MASK FILE NAMES! They are included automatically by
+# MifConv if the mask detph is defined.
+#
+# NOTE 2: Usually, source paths should not be included in the bitmap
+# definitions. MifConv searches for the icons in all icon directories in a
+# predefined order, which is currently \s60\icons, \s60\bitmaps2, \s60\bitmaps.
+# The directory \s60\icons is included in the search only if the feature flag
+# __SCALABLE_ICONS is defined.
+# ----------------------------------------------------------------------------
+
+RESOURCE :
+	mifconv $(ICONTARGETFILENAME) /h$(HEADERFILENAME) \
+		/c8,8 qgn_prop_cp_dev_def.svg
+
+
+FREEZE : do_nothing
+
+SAVESPACE : do_nothing
+
+RELEASABLES :
+	@echo $(HEADERFILENAME)&& \
+	@echo $(ICONTARGETFILENAME)
+
+FINAL : do_nothing
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/gsplugin/group/bld.inf	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2005-2008 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:  Build information file for project General Settings Plugin
+*
+*/
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+// export loc file
+../loc/gs_das.loc			APP_LAYER_LOC_EXPORT_PATH( gs_das.loc )
+
+PRJ_EXTENSIONS
+START EXTENSION s60/mifconv
+  OPTION TARGETFILE gsdasplugin.mif
+  OPTION HEADERFILE gsdasplugin.mbg
+  OPTION SOURCES -c8,8 qgn_prop_cp_dev_def
+END
+
+
+PRJ_MMPFILES
+gsdasplugin.mmp
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/gsplugin/group/gsdasplugin.mmp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,71 @@
+/*
+* Copyright (c) 2005-2006 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:  Project definition file for project General Settings Plugin
+*
+*/
+
+
+#include <data_caging_paths.hrh>
+#include <platform_paths.hrh>
+
+CAPABILITY          CAP_ECOM_PLUGIN
+TARGET              gsdasplugin.dll
+TARGETTYPE          PLUGIN
+UID                 0x10009D8D 0x10281BA0
+VENDORID            VID_DEFAULT
+
+SOURCEPATH          ../src
+SOURCE              gs_das_implementationtable.cpp 
+SOURCE              gs_das.cpp
+SOURCE              gs_das_emptycontainer.cpp 
+
+USERINCLUDE         ../inc
+USERINCLUDE         ../data
+
+// Default system include paths for middleware layer modules.
+APP_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE       /epoc32/include/ecom
+
+SOURCEPATH          ../data
+//ECOM resource definition
+START RESOURCE      10281BA0.rss 
+TARGET              gsdasplugin.rsc 
+END // ECOM resource definition
+
+//Default App GS plugin resources
+START RESOURCE      gsdasplugin_rsc.rss 
+HEADER
+TARGETPATH          RESOURCE_FILES_DIR
+LANGUAGE_IDS
+END // Default App GS plugin resources
+
+LIBRARY             euser.lib
+LIBRARY             ecom.lib
+LIBRARY             egul.lib
+LIBRARY             aknskins.lib
+LIBRARY             efsrv.lib
+LIBRARY             avkon.lib
+LIBRARY             bafl.lib 
+LIBRARY             cone.lib 
+LIBRARY             eikcore.lib 
+LIBRARY             commonengine.lib//For RConeResourceLoader
+LIBRARY             gsframework.lib
+LIBRARY             gsecomplugin.lib
+LIBRARY             defaultappclient.lib
+
+LIBRARY             apparc.lib
+LIBRARY             apgrfx.lib
+
+// End of File
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/gsplugin/inc/gs_das.h	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,177 @@
+/*
+* Copyright (c) 2005-2006 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:  Implements a (minimal) GS Plugin
+*
+*/
+
+
+
+#ifndef GS_DAS_H
+#define GS_DAS_H
+
+// Includes
+#include <aknview.h>
+#include <AknServerApp.h>
+#include <eikclb.h>
+#include <ConeResLoader.h>
+
+#include <gsplugininterface.h>
+#include "gs_das_emptycontainer.h"
+// Classes referenced
+class CDefaultAppClient;
+
+// Constants
+/** This is the name of the plugin's resource file */
+_LIT( KDefaultAppGSPluginResourceFileName, "z:gsdasplugin_rsc.rsc" );
+
+/** This is the plugin's UID */
+const TUid KDefaultAppGSPluginUid = { 0x10281BA1 };
+  
+// CLASS DECLARATION
+
+/**
+ *  This class implements a GS plugin.
+ *
+ *  This class inplements a GS plugin that acts as a client for the Default App Server, so that it can be
+ *  accessed from the GS application.
+ *
+ *  @since S60 5.0
+ */
+class CDefaultAppGSPlugin : public CGSPluginInterface, public MAknServerAppExitObserver
+    {
+    
+public: // Constructors and destructor
+        
+    /**
+     * Symbian OS two-phased constructor
+     * @return
+     */
+
+    static CDefaultAppGSPlugin* NewL( TAny* aInitParams );
+
+    /**
+     * Destructor.
+     */
+    ~CDefaultAppGSPlugin();
+
+public: // From CAknView
+                
+    /**
+     * From CAknView
+     * Returns the UID of the Plugin (see base class)
+     *
+     * @since S60 5.0
+     */
+    TUid Id() const;
+        
+    /**
+     * From CAknView
+     * Activates the plugin (see base class)
+     *
+     * @since S60 5.0
+     * @param aPrevViewId see base class
+     * @param aCustomMessageId see base class
+     * @param aCustomMessage see base class
+     */        
+    void DoActivateL( const TVwsViewId& aPrevViewId,
+                      TUid aCustomMessageId,
+                      const TDesC8& aCustomMessage );
+        
+    /**
+     * From CAknView
+     * Deactivates the Plugin (see base class)
+     *
+     * @since S60 5.0
+     */
+    void DoDeactivate();
+    
+    /**
+     * From CAknView
+     * Handles a menu command (see base class)
+     *
+     * @since S60 5.0
+     * @param aCommand the command to handle
+     */
+    void HandleCommandL( TInt aCommand );
+
+public: // From CGSPluginInterface
+    
+    /**
+     * From CGSPluginInterface
+     * Returns the Plugin Caption (see base class)
+     *
+     * @since S60 5.0
+     * @param aCaption placeholder for the caption
+     */   
+    void GetCaptionL( TDes& aCaption ) const;
+    
+    /**
+     * From CGSPluginInterface
+     * Returns the plugin's icon (see CGSPluginInterface header file)
+     *
+     * @since S60 5.0
+     * @param aIconType icon type
+     */  
+    CGulIcon* CreateIconL( const TUid aIconType );
+        
+private: // From MAknServerAppExitObserver
+    
+    /**
+     * From MAknServerAppExitObserver
+     * Handles server exits
+     *
+     * @since S60 5.0
+     * @param aReason for the server exit
+     */
+    void HandleServerAppExit ( TInt aReason );
+        
+private:
+        
+    /**
+     * C++ default constructor.
+     */
+    CDefaultAppGSPlugin();
+
+    /**
+     * Symbian OS default constructor.
+     */
+    void ConstructL();
+        
+private: // Data  
+
+    /**
+     * The Resource Loader
+     */
+    RConeResourceLoader iResources; // Resouce loader.
+    
+    /**
+     * The id of the previous View, to be activated when user pushes Back
+     */
+    TVwsViewId iPrevViewId;
+    
+    /**
+     * Pointer to the Default App Client API class
+     * Own.
+     */
+    CDefaultAppClient* iClient;
+    
+    /**
+     * Empty Container, used to avoid screen flickering
+     * Own.
+     */
+    CCEmptyContainer* iEmptyContainer;
+    };
+
+#endif // GS_DAS_H
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/gsplugin/inc/gs_das_emptycontainer.h	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,73 @@
+/*
+* Copyright (c) 2005-2006 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:  Implements a empty container for gsplugin
+*
+*/
+
+
+#ifndef CEMPTYCONTAINER_H
+#define CEMPTYCONTAINER_H
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+#include <coecntrl.h>
+
+// CLASS DECLARATION
+
+/**
+ *  CCEmptyContainer
+ * 
+ */
+class CCEmptyContainer : public CCoeControl
+    {
+public:
+    // Constructors and destructor
+
+    /**
+     * Destructor.
+     */
+    ~CCEmptyContainer();
+
+    /**
+     * Two-phased constructor.
+     */
+    static CCEmptyContainer* NewL ( const TRect& aRect, const CCoeControl* aParent );
+
+    /**
+     * Two-phased constructor.
+     */
+    static CCEmptyContainer* NewLC ( const TRect& aRect, const CCoeControl* aParent );
+    
+public:
+    // from base class CCoeControl
+       TInt CountComponentControls() const;
+       
+       CCoeControl* ComponentControl( TInt aIndex ) const;
+
+private:
+
+    /**
+     * Constructor for performing 1st stage construction
+     */
+    CCEmptyContainer();
+
+    /**
+     * EPOC default constructor for performing 2nd stage construction
+     */
+    void ConstructL ( const TRect& aRect, const CCoeControl* aParent );
+
+    };
+
+#endif // CEMPTYCONTAINER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/gsplugin/loc/gs_das.loc	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2005-2006 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:  Localization strings for project General Settings Plugin
+*
+*/
+
+
+// d:Text of a list item in General Settings application
+// d:Item opens the Default Applications settings
+// l:list_single_large_graphic_pane_t1
+// r:5.0
+//
+#define qtn_da_gsp_caption "Default Applications"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/gsplugin/src/gs_das.cpp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,255 @@
+/*
+* Copyright (c) 2005-2006 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:  Implements a (minimal) GS Plugin
+*
+*/
+
+
+// Includes
+#include <aknViewAppUi.h>
+#include <StringLoader.h>
+#include <bautils.h>
+
+#include <gsdasplugin_rsc.rsg> // Plugin's own  UI resources
+#include <gsdasplugin.mbg>
+
+#include "gs_das.h"
+
+#include <das_client.h>
+
+
+// Constants
+
+#ifdef __SCALABLE_ICONS
+  // svg file
+  _LIT( KGSDasPluginIconFileName, "\\resource\\apps\\GSDasPlugin.mif");
+#else
+  // bitmap
+  _LIT( KGSDasPluginIconFileName, "\\resource\\apps\\GSDasPlugin.mbm");
+#endif // __SCALABLE_ICONS
+
+
+// ========================= MEMBER FUNCTIONS ================================
+
+
+// ---------------------------------------------------------------------------
+// CDefaultAppGSPlugin::CDefaultAppGSPlugin()
+// Constructor
+//
+// ---------------------------------------------------------------------------
+//
+CDefaultAppGSPlugin::CDefaultAppGSPlugin( )
+    : iResources( *iCoeEnv ), iClient(NULL)
+    {
+    
+    }
+
+// ---------------------------------------------------------------------------
+// CDefaultAppGSPlugin::~CDefaultAppGSPlugin()
+// Destructor
+//
+// ---------------------------------------------------------------------------
+//
+CDefaultAppGSPlugin::~CDefaultAppGSPlugin()
+    {
+    iResources.Close();
+    if(iClient)
+        delete iClient;
+    if( iEmptyContainer )
+        {
+        AppUi()->RemoveFromViewStack( *this, iEmptyContainer );
+        delete iEmptyContainer;
+        };
+    }
+
+// ---------------------------------------------------------------------------
+// CDefaultAppGSPlugin::ConstructL()
+// Symbian OS two-phased constructor
+// 
+// ---------------------------------------------------------------------------
+//
+void CDefaultAppGSPlugin::ConstructL()
+    {
+    // Find the resource file:
+    TParse parse;
+    parse.Set( KDefaultAppGSPluginResourceFileName, &KDC_RESOURCE_FILES_DIR, NULL );
+    TFileName fileName( parse.FullName() );
+
+    // Get language of resource file:
+    BaflUtils::NearestLanguageFile( CEikonEnv::Static()->FsSession(), fileName );
+
+    // Open resource file:
+    iResources.OpenL( fileName );
+    
+    //We can call this after opening the resource file ...
+    BaseConstructL( R_GS_DEFAULTAPP_VIEW );
+    }
+
+// ---------------------------------------------------------------------------
+// CDefaultAppGSPlugin::NewL()
+// Static constructor
+//
+// ---------------------------------------------------------------------------
+//
+CDefaultAppGSPlugin* CDefaultAppGSPlugin::NewL( TAny* /*aInitParams*/ )
+    {
+    CDefaultAppGSPlugin* self = new( ELeave ) CDefaultAppGSPlugin( );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+// ========================= From CAknView ==================
+
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Returns the UID of the plugin (see base class)
+// ---------------------------------------------------------------------------
+//
+TUid CDefaultAppGSPlugin::Id() const
+    {
+    return KDefaultAppGSPluginUid;
+    }
+
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Activates the plugin (see base class)
+// See das_servmimeapps.h for possible values of the flags (useful for R&D)
+// -0x00010000 : 
+// ---------------------------------------------------------------------------
+//
+void CDefaultAppGSPlugin::DoActivateL( const TVwsViewId& aPrevViewId,
+                                  TUid /*aCustomMessageId*/,
+                                  const TDesC8& /*aCustomMessage*/ )
+    {
+    iPrevViewId = aPrevViewId;
+    
+    TInt flags(0); //See das_servmimeapps.h for possible values of the flags (useful for R&D)
+    
+    if( !iClient )
+        {
+        iClient=CDefaultAppClient::NewL(this);
+        }
+    
+    iClient->ChangeDefaultsL( flags );
+    
+    //construct an empty control, so we avoid the screen flickering
+    if( !iEmptyContainer )
+        {
+        iEmptyContainer = CCEmptyContainer::NewL( ClientRect(),NULL );
+        iEmptyContainer->SetMopParent(this);
+        AppUi()->AddToStackL(*this, iEmptyContainer);
+        };
+    }
+
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Deactivates the Plugin (see base class)
+// ---------------------------------------------------------------------------
+//
+void CDefaultAppGSPlugin::DoDeactivate()
+    {
+    if(iEmptyContainer)
+        {
+    	AppUi()->RemoveFromViewStack(*this, iEmptyContainer);
+    	delete iEmptyContainer;
+    	iEmptyContainer=NULL;
+        };
+    }
+
+
+// ---------------------------------------------------------------------------
+// From class CAknView.
+// Handles a menu command (see base class)
+// ---------------------------------------------------------------------------
+//
+void CDefaultAppGSPlugin::HandleCommandL( TInt aCommand )
+    {
+    switch ( aCommand )
+        {
+        case EAknSoftkeyBack:
+            AppUi()->ActivateLocalViewL( iPrevViewId.iViewUid );
+            break;
+        case EAknCmdExit:
+        case EEikCmdExit:
+            AppUi()->RunAppShutter();
+            break;
+        default:
+            AppUi()->HandleCommandL( aCommand ); //also handles EAknCmdExit 
+            break;
+        }
+    }
+// ========================= From CGSPluginInterface ==================
+
+
+
+// ---------------------------------------------------------------------------
+// From class CGSPluginInterface.
+// Returns the Plugin Caption (see base class)
+// ---------------------------------------------------------------------------
+//
+void CDefaultAppGSPlugin::GetCaptionL( TDes& aCaption ) const
+    {
+    HBufC* result = StringLoader::LoadL( R_GS_DEFAULTAPP_CAPTION );
+    aCaption.Copy( *result );
+    delete result;
+    }
+
+// ---------------------------------------------------------------------------
+// From class CGSPluginInterface.
+// Return the icon, if has one.
+// ---------------------------------------------------------------------------
+//
+CGulIcon* CDefaultAppGSPlugin::CreateIconL( const TUid aIconType )
+    {
+    //EMbm<Mbm_file_name><Bitmap_name>
+    CGulIcon* icon;    
+
+    if( aIconType == KGSIconTypeLbxItem )
+        {
+        icon = AknsUtils::CreateGulIconL(
+        AknsUtils::SkinInstance(),
+        KAknsIIDQgnPropCpDevDef,
+        KGSDasPluginIconFileName,
+        EMbmGsdaspluginQgn_prop_cp_dev_def,
+        EMbmGsdaspluginQgn_prop_cp_dev_def_mask );    
+        }
+       else
+        {
+        icon = CGSPluginInterface::CreateIconL( aIconType );
+        };
+
+    return icon;
+    }
+
+// ========================= From MAknServerAppExitObserver ==================
+
+// ---------------------------------------------------------------------------
+// From class MAknServerAppExitObserver.
+// Handles server exits
+// ---------------------------------------------------------------------------
+//
+void CDefaultAppGSPlugin::HandleServerAppExit( TInt aReason)
+    {
+    delete iClient;
+    iClient=NULL;
+    TRAP_IGNORE(HandleCommandL(aReason));//do not care why it leaved
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/gsplugin/src/gs_das_emptycontainer.cpp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,73 @@
+/*
+* Copyright (c) 2005-2006 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:  Implements a (minimal) GS Plugin
+*
+*/
+
+
+#include "gs_das_emptycontainer.h"
+
+CCEmptyContainer::CCEmptyContainer()
+    {
+    // No implementation required
+    }
+
+CCEmptyContainer::~CCEmptyContainer()
+    {
+    }
+
+CCEmptyContainer* CCEmptyContainer::NewLC ( const TRect& aRect, 
+        const CCoeControl* aParent )
+    {
+    CCEmptyContainer* self = new (ELeave) CCEmptyContainer();
+    CleanupStack::PushL ( self );
+    self->ConstructL( aRect, aParent );
+    return self;
+    }
+
+CCEmptyContainer* CCEmptyContainer::NewL ( const TRect& aRect, 
+        const CCoeControl* aParent )
+    {
+    CCEmptyContainer* self = CCEmptyContainer::NewLC ( aRect, aParent );
+    CleanupStack::Pop(); // self;
+    return self;
+    }
+
+void CCEmptyContainer::ConstructL( const TRect& aRect,const CCoeControl* aParent )
+    {
+    if ( aParent == NULL )
+        {
+        CreateWindowL();
+        }
+    else
+        {
+        SetContainerWindowL( *aParent );
+        }
+    SetRect( aRect );
+    ActivateL();
+    }
+
+TInt CCEmptyContainer::CountComponentControls() const
+    {
+    return 0;
+    }
+
+CCoeControl* CCEmptyContainer::ComponentControl ( TInt aIndex ) const
+    {
+    switch( aIndex )
+        {
+        
+        }
+    return NULL;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/gsplugin/src/gs_das_implementationtable.cpp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 2005-2006 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:  Implementation table
+*
+*/
+
+
+// System includes
+#include <e32std.h>
+#include <implementationproxy.h>
+
+// User includes
+#include "gs_das.h"
+#include <das_client.h>
+
+// Constants
+const TImplementationProxy KDASGSPluginImplementationTable[] = 
+    {
+    // Uid for plugin implementation:
+    IMPLEMENTATION_PROXY_ENTRY( 0x10281BA1,    CDefaultAppGSPlugin::NewL )
+    };
+
+
+// ---------------------------------------------------------------------------
+// ImplementationGroupProxy
+// Gate/factory function
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy( 
+    TInt& aTableCount )
+    {
+    TInt error;
+    if( !CDefaultAppClient::ServiceAvailable(error) )
+        {
+        //there was an error, service not found.
+        aTableCount=0;
+        }
+    else //service was found
+        aTableCount = sizeof( KDASGSPluginImplementationTable ) 
+            / sizeof( TImplementationProxy );
+            
+    return KDASGSPluginImplementationTable;
+    }
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/rom/DefaultApplicationSettings.iby	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,44 @@
+/*
+* Copyright (c) 2005-2006 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:  Image description file for project DefaultApplicationSettings
+*
+*/
+
+
+
+#ifndef DEFAULTAPPLICATIONSETTINGS_IBY
+#define DEFAULTAPPLICATIONSETTINGS_IBY
+
+#include <bldvariant.hrh>
+
+#ifdef RD_DEFAULT_APPLICATION_SETTINGS
+
+S60_APP_EXE(DefaultAppServer)
+S60_APP_AIF_RSC(DefaultAppServer)
+
+//services_db
+file=ABI_DIR\BUILD_DIR\servicesdb.dll                   SHARED_LIB_DIR\servicesdb.dll
+
+//client lib
+file=ABI_DIR\BUILD_DIR\defaultappclient.dll             SHARED_LIB_DIR\defaultappclient.dll
+
+//gs plugin
+ECOM_PLUGIN( gsdasplugin.dll, 10281BA0.rsc )
+data=DATAZ_\BITMAP_DIR\GSDasPlugin.mif                  BITMAP_DIR\GSDasPlugin.mif
+
+#endif // RD_DEFAULT_APPLICATION_SETTINGS
+
+#endif // DEFAULTAPPLICATIONSETTINGS_IBY
+
+//  End of File  
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/rom/DefaultApplicationSettingsResources.iby	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2005-2006 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:  Image description file for project DefaultApplicationSettings
+*
+*/
+
+
+
+#ifndef DEFAULTAPPLICATIONSETTINGSRESOURCES_IBY
+#define DEFAULTAPPLICATIONSETTINGSRESOURCES_IBY
+
+#include <bldvariant.hrh>
+
+#ifdef RD_DEFAULT_APPLICATION_SETTINGS
+
+//server
+data=DATAZ_\APP_RESOURCE_DIR\defaultappserver.rsc       APP_RESOURCE_DIR\defaultappserver.rsc
+
+//gs plugin
+data=DATAZ_\RESOURCE_FILES_DIR\gsdasplugin_rsc.rsc      RESOURCE_FILES_DIR\gsdasplugin_rsc.rsc
+
+#endif // RD_DEFAULT_APPLICATION_SETTINGS
+
+#endif // DEFAULTAPPLICATIONSETTINGSRESOURCES_IBY
+
+//  End of File  
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/server/data/defaultappserver.rss	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,460 @@
+/*
+* Copyright (c) 2005-2006 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:  Resource definitions for project DefaultApp Server
+*
+*/
+
+
+#include <avkon.rh>
+#include <avkon.rsg>
+#include <avkon.hrh>
+#include <avkon.loc>
+#include <avkon.mbg>
+
+#include <eikon.rh>
+#include <eikon.rsg>
+
+#include <uikon.rh>
+
+#include <bldvariant.hrh>
+
+#include <appinfo.rh>//localisable app info
+#include <data_caging_paths_strings.hrh>
+
+#include <services_db.rh>
+#include "das_gsentries.rh"
+#include "das.hrh"
+#include <defaultappserver.loc>
+#include <services_db.loc>
+
+NAME DFAP
+RESOURCE RSS_SIGNATURE { }
+RESOURCE TBUF { buf=""; }
+
+
+
+// ---------------------------------------------------------   
+// Define default menu and CBA key.
+// ---------------------------------------------------------
+//
+RESOURCE EIK_APP_INFO
+    {
+    menubar=r_das_menubar;
+    cba = r_das_softkeys_options_back__change;//R_AVKON_SOFTKEYS_OPTIONS_BACK;
+    }
+
+// ---------------------------------------------------------
+// r_das_menubar
+// Menubar for Default App Server
+// ---------------------------------------------------------
+//
+RESOURCE MENU_BAR r_das_menubar
+    {
+    titles=
+        {
+        MENU_TITLE 
+            { 
+            menu_pane = r_das_menu;
+            }
+        };
+    }
+
+// ---------------------------------------------------------------------------
+// r_das_menu
+// Menu for Options
+// ---------------------------------------------------------------------------
+//
+RESOURCE MENU_PANE r_das_menu
+    {
+    items=
+        {
+        MENU_ITEM 
+            { 
+            flags = EEikMenuItemAction;
+            command = EAknCmdOpen;
+            txt = qtn_options_change; 
+            },
+        MENU_ITEM 
+            { 
+            command = EAknCmdFindPopupActivated; 
+            txt = qtn_options_find; 
+            },
+        MENU_ITEM 
+            { 
+            command = EDasCmdAdvanced; 
+            txt = qtn_options_advanced;
+            },
+        MENU_ITEM
+            {
+            cascade = r_das_menu_original_settings;
+            txt = qtn_da_options_reset;
+            },
+        MENU_ITEM 
+            { 
+            command = EAknCmdHelp;
+            txt = qtn_options_help; 
+            },
+        MENU_ITEM 
+            { 
+            command = EAknCmdExit; 
+            txt = qtn_options_exit; 
+            }
+        };
+    }
+    
+// ---------------------------------------------------------------------------
+// r_das_menu_factory_settings
+// Sub-menu for Factory settings
+// This contains one item, but additional items will be added to it
+// ---------------------------------------------------------------------------
+//
+RESOURCE MENU_PANE r_das_menu_original_settings
+    {
+    items =
+        {
+        MENU_ITEM
+            {
+            command = EDasCmdResetSelected;
+            txt = qtn_da_options_reset_selected;
+            flags = EEikMenuItemSpecific;
+            },
+        MENU_ITEM
+            {
+            command = EDasCmdResetAll;
+            txt = qtn_da_options_reset_all;
+            }
+        };
+    }
+
+// ---------------------------------------------------------------------------
+// r_das_servicesmimes_listbox
+// Listbox for the Services & MIMEs
+// ---------------------------------------------------------------------------
+//
+RESOURCE LISTBOX r_das_servicesmimes_listbox
+    {
+    flags = EAknListBoxSelectionList;
+    }
+
+// ---------------------------------------------------------------------------
+// r_da_title_app
+// Application title
+// ---------------------------------------------------------------------------
+//
+RESOURCE TBUF r_da_title_app 
+    {
+    buf = qtn_da_title_app;
+    }
+
+// ---------------------------------------------------------------------------
+// r_da_title_main
+// Main view title
+// ---------------------------------------------------------------------------
+//
+RESOURCE TBUF r_da_title_main 
+    {
+    buf = qtn_da_title_main;
+    }
+
+// ---------------------------------------------------------------------------
+// r_da_title_popup_adv
+// Advanced settings
+// ---------------------------------------------------------------------------
+//
+RESOURCE TBUF r_da_title_advanced
+    {
+    buf = qtn_da_title_advanced;
+    }
+
+
+
+
+// resources for the simplified view
+
+
+// ---------------------------------------------------------------------------
+// r_da_tasks
+// This is the list of tasks. For each task, there are 3 items:
+//  -the task name (this will be shown in the list)
+//  -the MIME label (the selected default application for the task will be set as default for Open and this MIME)
+//  -a list of Services & MIMEs that belong to the task: all applications that can handle at least one Service & MIME
+//   from the list, may become defaults for the task (however, only for the Services & MIMEs the application supports).
+// ---------------------------------------------------------------------------
+//
+RESOURCE DAS_GS_TASKS r_da_tasks
+    {
+    tasks=
+        {
+        DAS_GS_TASK_ENTRY
+            {
+            task_name = qtn_da_main_browse;
+            //USE_TASK_TITLE
+            task_title = qtn_da_title_popup_browse;
+
+            mime_label = "application/x-web-browse";
+            service_mimes =
+                {
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "text/html"; }
+                };
+            }, //browse web task
+        DAS_GS_TASK_ENTRY
+            {
+            task_name = qtn_da_main_play_music;
+            //
+            task_title = qtn_da_title_popup_music;
+
+            mime_label = "application/x-audio-play";
+            service_mimes =
+                {
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "audio/mp3"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "audio/mpeg"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "audio/x-mp3"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "audio/mpegurl"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "audio/x-mpegurl"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "audio/3gpp"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "audio/3gpp2"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "audio/mp4"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "audio/aac"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "audio/basic"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "audio/amr"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "audio/amr-wb"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "audio/awb"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "audio/x-amr"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "audio/x-epoc-wve"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "audio/x-sibo-wve"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "audio/wav"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "audio/x-wav"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "audio/x-au"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "audio/au"; },
+                // SERIES 60 MIDI
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "audio/x-midi"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "audio/midi"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "audio/sp-midi"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "audio/x-beatnik-rmf"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "audio/x-rmf"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "audio/rmf"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "audio/mobile-xmf"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "audio/vnd.nokia.mobile-xmf"; },
+                //qcelp
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "audio/qcelp"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "audio/vnd.qcelp"; },
+                //wma
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "audio/x-ms-wma"; }
+                //real audio (probably with system priority in the system)
+                /* 
+                 * Real Audio is commented out because leaving it here would be confusing for users:
+                 * If Real Audio is uncommented below, both Music Player and RealPlayer will be listed 
+                 * as handling music. However, the Music Player can not handle the Real Audio MIMEs
+                 * (it can handle most of the MIMEs above this comment). The RealPlayer can only handle 
+                 * the RealAudio MIMEs (commented here). So there is no overlapping between the 2 players.
+                 * This would mean that whatever the client choses as the default player between these 2,
+                 * they will still continue to play media as before. E.g. all mp3s, WMAs, AACs will be
+                 * played with the MediaPlayer even if RealPlayer is chosed as default audio player.
+                 *
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "audio/vnd.rn-realaudio"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "audio/x-pn-realaudio-plugin"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "audio/x-pn-realaudio"; }
+                 */
+                };
+            }, //play music task
+        DAS_GS_TASK_ENTRY
+            {
+            task_name = qtn_da_main_play_videos;
+            //USE_TASK_TITLE
+            task_title = qtn_da_title_popup_video;
+
+            mime_label = "application/x-video-play";
+            service_mimes =
+                {
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "video/3gpp"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "video/3gpp2"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "video/mpeg4"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "video/mp4"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "application/sdp"; },
+                //following MIMEs are probably system priority in the platform player
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "video/vnd.rn-realvideo"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "application/vnd.rn-realmedia"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "application/x-pn-realmedia"; }
+                };
+            }, //play videos task
+        DAS_GS_TASK_ENTRY
+            {
+            task_name = qtn_da_main_view_images;
+            //USE_TASK_TITLE
+            task_title = qtn_da_title_popup_image;
+
+            mime_label = "application/x-image-view";
+            service_mimes =
+                {
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "image/jpeg"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "image/jpg"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "image/jp2"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "image/tiff"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "image/x-wmf"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "image/ico"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "image/gif"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "image/bmp"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "image/x-bmp"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "image/x-bitmap"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "image/x-xbitmap"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "image/x-win-bitmap"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "image/x-windows-bmp"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "image/ms-bmp"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "image/x-ms-bmp"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "image/vnd.wap.wbmp"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "image/png"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "image/x-epoc-mbm"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "image/vnd.nokia.ota-bitmap"; },
+                DAS_SERVICE_MIME
+                    { service_uid = 0x10208DCA; mime = "image/x-ota-bitmap"; }
+                };
+            } //view images task
+        }; //tasks
+    }
+
+        
+// ---------------------------------------------------------------------------
+// r_defaultappserver_localisable_app_info
+// Localisable app info
+// ---------------------------------------------------------------------------
+//
+RESOURCE LOCALISABLE_APP_INFO r_defaultappserver_localisable_app_info
+    {
+    short_caption = qtn_da_title_app;    
+    caption_and_icon =
+    CAPTION_AND_ICON_INFO
+        {
+        caption = qtn_da_title_app;
+        };
+    }
+
+RESOURCE CBA r_das_softkeys_options_back__change
+    {
+    buttons =
+        {
+        CBA_BUTTON {id=EAknSoftkeyOptions; txt=text_softkey_option;},
+        CBA_BUTTON {id=EAknSoftkeyBack; txt=text_softkey_back;},
+        CBA_BUTTON {id=EAknCmdOpen; txt=qtn_msk_change;}
+        };
+    }
+   
+RESOURCE DIALOG r_das_dlg
+    {
+    flags = EAknDialogSelectionList | EEikDialogFlagNotifyEsc;
+            
+    buttons = r_das_softkeys_options_back__change;
+    items = 
+        {
+        DLG_LINE
+            {
+            type = EAknCtDoubleListBox;
+
+            id = ESelectionListControl;
+            control = LISTBOX
+                {
+                flags = EAknListBoxSelectionList;
+                };
+            },
+        DLG_LINE
+            {
+            itemflags = EEikDlgItemNonFocusing;
+            id = EFindControl;
+            type = EAknCtSelectionListPopupFind;
+            }
+        };
+    }
+
+// ---------------------------------------------------------------------------
+// r_da_services_mime
+// This resource stores localized strings for the supported services, identified
+// by their Uid and generic name.
+// This resource is defined in the services_db.rh file
+// ---------------------------------------------------------------------------
+//
+RESOURCE DAS_SERVICES r_da_service_mime
+    {
+    services = 
+        {
+        DAS_SERVICE_ENTRY
+            {
+            service_uid = 0x10208DCA; //KOpenServiceUid
+            service_name = "Open";
+            service_localized_name = qtn_da_service_open;
+            }         
+        };
+    }    
+    
+    
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/server/data/defaultappserver_reg.rss	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2005-2006 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:  Registration resource file for Default App Server
+*
+*/
+
+
+
+//  INCLUDES
+
+#include <appinfo.rh>
+#include <defaultappserver.rsg>
+#include <data_caging_paths_strings.hrh>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0x10281B9C //server app UID
+
+//  RESOURCE DEFINITIONS
+// -----------------------------------------------------------------------------
+//
+// APP_REGISTRATION_INFO
+// Registration resource for Default App Server
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE APP_REGISTRATION_INFO
+    {
+    app_file = "defaultappserver";
+    embeddability = KAppEmbeddable;
+    hidden = KAppIsHidden;
+    newfile=KAppDoesNotSupportNewFile;
+    localisable_resource_file = APP_RESOURCE_DIR"\\defaultappserver";
+    localisable_resource_id = R_DEFAULTAPPSERVER_LOCALISABLE_APP_INFO;    
+    service_list =
+        {
+        SERVICE_INFO { uid = 0x10281B9D; }
+        };
+    }
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/server/group/bld.inf	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2005-2006 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:  Build information file for project Default App Server
+*
+*/
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+// export loc file
+../loc/defaultappserver.loc		APP_LAYER_LOC_EXPORT_PATH( defaultappserver.loc )
+../loc/services_db.loc			APP_LAYER_LOC_EXPORT_PATH( services_db.loc )
+
+PRJ_MMPFILES
+das_server.mmp
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/server/group/das_server.mmp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,80 @@
+/*
+* Copyright (c) 2005-2006 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:  Project definition file for project Default App Server
+*
+*/
+
+
+
+#include <data_caging_paths.hrh>
+#include <platform_paths.hrh>  
+
+TARGET                  defaultappserver.exe
+TARGETTYPE              EXE
+UID                     0 0x10281B9C
+
+CAPABILITY              WriteDeviceData  SwEvent
+VENDORID                VID_DEFAULT
+
+SOURCEPATH              ../src
+SOURCE                  das.cpp               //entry point
+SOURCE                  das_app.cpp           //Application class
+SOURCE                  das_doc.cpp           //Document class
+SOURCE                  das_appui.cpp         //AppUi class
+SOURCE                  das_srvmime_dlg.cpp   //dlg class: services & MIMEs
+SOURCE                  das_view.cpp          //standard view class, rather empty
+SOURCE                  das_server.cpp        //server class
+SOURCE                  das_service.cpp       //service class
+SOURCE                  das_servmimeapps.cpp  //engine class
+
+USERINCLUDE             ../inc
+
+// Default system include paths for middleware layer modules.
+APP_LAYER_SYSTEMINCLUDE
+
+START RESOURCE          ../data/defaultappserver.rss
+HEADER
+TARGETPATH              APP_RESOURCE_DIR
+LANGUAGE_IDS
+END // RESOURCE
+
+START RESOURCE          ../data/defaultappserver_reg.rss
+DEPENDS defaultappserver.rsg
+TARGETPATH              /private/10003a3f/apps
+END
+
+
+
+
+LIBRARY                 euser.lib
+LIBRARY                 apparc.lib //is this needed??
+LIBRARY                 apgrfx.lib
+LIBRARY                 apmime.lib
+LIBRARY                 cone.lib
+LIBRARY                 eikcore.lib
+LIBRARY                 eikcoctl.lib
+LIBRARY                 eikdlg.lib
+LIBRARY                 avkon.lib
+LIBRARY                 bafl.lib
+LIBRARY                 commonengine.lib //StringLoader
+LIBRARY                 serviceregistry.lib
+
+LIBRARY aknskins.lib
+LIBRARY egul.lib
+LIBRARY aknlayout2scalable.lib
+LIBRARY aknicon.lib
+LIBRARY hlplch.lib // for "Help" options menu
+LIBRARY featmgr.lib
+
+LIBRARY                 servicesdb.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/server/inc/das.hlp.hrh	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2005-2006 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:  Help IDs for project Default App Server
+*
+*/
+
+
+#ifndef DAS_HLP_HRH
+#define DAS_HLP_HRH
+
+
+_LIT(KDA_HLP_MAIN,"DA_HLP_MAIN"); //GS client, simplified view
+_LIT(KDA_HLP_ADVANCED,"DA_HLP_ADVANCED"); //GS client, advanced view
+_LIT(KDA_HLP_APPLICATION,"DA_HLP_APPLICATION"); //other client
+
+#endif // DAS_HLP_HRH
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/server/inc/das.hrh	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2005-2006 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:  Resource headers for project Default App Server
+*
+*/
+
+
+#ifndef DAS_HRH
+#define DAS_HRH
+
+// DefaultApp enumerate command codes 
+enum TDefaultAppCommands
+    {
+    EDasCmdAdvanced=100,
+    EDasCmdResetAll,
+    EDasCmdResetSelected
+    };
+
+#endif // DAS_HRH
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/server/inc/das_app.h	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,89 @@
+/*
+* Copyright (c) 2005-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  This class implements the application.
+*
+*/
+
+
+
+#ifndef C_DEFAULTAPPAPPLICATION_H
+#define C_DEFAULTAPPAPPLICATION_H
+
+#include <aknapp.h>
+
+class CDefaultAppDocument;
+class CDefaultAppServer;
+
+/** UID for the application; this should correspond to the uid defined in the mmp file */
+const TUid KUidDefaultAppServer = { 0x10281B9C };
+
+/**
+ *  This class implements the application.
+ *
+ *  @since Series 60 v5.0
+ */
+class CDefaultAppApplication : public CAknApplication
+    {
+private: // Functions from base classes
+
+    /**
+     * From CApaApplication.
+     * Returns application's UID (KUidDefaultAppServer).
+     *
+     * @since S60 v5.0
+     * @return The value of KUidDefaultAppServer.
+     */
+    TUid AppDllUid() const;
+
+    /**
+     * From CApaApplication.
+     * Creates CDefaultAppDocument document object.
+     *
+     * @since S60 v5.0
+     * @return A pointer to the created document object.
+     */
+    CApaDocument* CreateDocumentL();
+       
+    /**
+     * From CApaApplication.
+     * Creates a new server object (CDefaultAppServer).
+     *
+     * @since S60 v5.0
+     * @param aAppServer pointer to the newly created server object
+     */
+    void NewAppServerL(CApaAppServer*& aAppServer);
+    
+public:
+    /**
+     * C++ default constructor.
+     */
+    CDefaultAppApplication(void);
+    
+public: //data
+    /**
+     * Pointer to the documet class
+     * Not owned.
+     */
+    CDefaultAppDocument* iDocument; //not owned
+    
+    /**
+     * Pointer to the server class
+     * Not owned.
+     */
+    CDefaultAppServer* iServer;     //not owned
+    };
+
+#endif      // C_DEFAULTAPPAPPLICATION_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/server/inc/das_appui.h	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,173 @@
+/*
+* Copyright (c) 2005-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  This class implements the AppUi
+*
+*/
+
+
+
+#ifndef C_DEFAULTAPPAPPUI_H
+#define C_DEFAULTAPPAPPUI_H
+
+
+#include <aknappui.h>
+#include <eikmenub.h>
+
+class CDefaultAppSrvMimeDlg;
+class CDefaultAppView;
+class CDefaultAppServMimeApps;
+
+
+
+/**
+ *  This class implements the AppUi.
+ *
+ *  @since Series 60 v5.0
+ */
+class CDefaultAppAppUi : public CAknAppUi
+    {
+public:
+    
+    /**
+     * Destructor.
+     */
+    virtual ~CDefaultAppAppUi();
+
+    /**
+     * C++ default constructor.
+     */
+    CDefaultAppAppUi();
+
+    /**
+     * Symbian OS default constructor.
+     */
+    void ConstructL();
+    
+    /**
+     * This function completes the construction of the AppUi. This function is called after the client
+     * has connected to this server instance, and all the necessary data for this construction step is 
+     * available.
+     *
+     * @since S60 v5.0
+     * @param aClientUid The Uid of the client
+     * @param aServiceFlags various flags that may alter what data is displayed to the user
+     */
+    void ConstructSrvMimeDlgL(TUid aClientUid, TInt aServiceFlags);
+    
+    /* 
+     * This functino is used to record the exist of the dialog; 
+     */
+    void SetDialogExist( TBool aExist );
+    
+public: // from CAknAppUi
+    
+    /**
+     * From CAknAppUi.
+     * Handles commands from the menu (see base class)
+     *
+     * @since S60 v5.0
+     * @param aCommand the command being handled
+     */
+    void HandleCommandL(TInt aCommand);
+
+    /**
+     * From CAknAppUi.
+     * Handles layout changes (e.g. from portrait to landscape)
+     *
+     * @since S60 v5.0
+     * @param aType The type of resources that have changed
+     */
+    void HandleResourceChangeL(TInt aType);
+    
+     /**
+     * Handles Window Server events (we are interested in catching the end key event 
+     * and exiting the application
+     *
+     * @since S60 v5.0
+     * @param aEvent The event that occurred
+     * @param aDestination The control associated with the event
+     */
+    void HandleWsEventL(const TWsEvent & aEvent, CCoeControl * aDestination);
+
+
+private:
+    
+    /**
+     * Imports and displays the icon of the client application.
+     *
+     * @since S60 v5.0
+     */
+    void SetClientIconL(TUid aClietAppUid);
+
+public: 
+    
+    /**
+     * Pointer to the View
+     * Own.
+     */
+    CDefaultAppView *iView;
+    
+    /**
+     * Pointer to the dialog
+     * Own.
+     */
+    CDefaultAppSrvMimeDlg *iDlg;
+    
+    /**
+     * Pointer to the "engine". The engine is a place where application data is retrieved and stored.
+     * Own.
+     */
+    CDefaultAppServMimeApps *iServMimeApps;
+    
+    /**
+     * variable used to remember the list selection position when reloading the dialog
+     * for the simplified view
+     * Own.
+     */
+    TInt iSelectedItemSimple;
+    
+    /**
+     * variable used to remember the list selection position when reloading the dialog
+     * for the advanced view
+     * Own.
+     */
+    TInt iSelectedItemAdvanced;
+    
+    /**
+     * variable used to remember dialog type (simple/advanced) when reloading the dialog
+     * Own.
+     */
+    TBool iReloadDlgAdvanced;
+    
+    /**
+     * variable used to specify if the dialog is reloaded
+     * Own.
+     */
+    TBool iReloadDlg;
+    
+    /**
+     * specifies if the dialog is dismissed or reloaded
+     * Own.
+     */
+    TBool iExitBack;
+    
+    TUid  iClientUid;
+    
+private:
+    // This is used to record the exist of the dialogue.
+    TBool iDialogExist;
+    };
+#endif // C_DEFAULTAPPAPPUI_H
+
+//end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/server/inc/das_doc.h	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,74 @@
+/*
+* Copyright (c) 2005-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  This class implements the application document.
+*
+*/
+
+
+
+#ifndef C_DEFAULTAPPDOC_H
+#define C_DEFAULTAPPDOC_H
+
+#include <AknDoc.h>
+
+class CDefaultAppAppUi;
+
+/**
+ *  This class implements the application document.
+ *
+ *  @since Series 60 v5.0
+ */
+class CDefaultAppDocument : public CAknDocument
+    {
+public:
+
+    /**
+     * Symbian OS two-phased constructor
+     * @return
+     */
+    static CDefaultAppDocument* NewL(CEikApplication& aApp);
+    
+    /**
+     * Symbian OS two-phased constructor
+     * @return
+     */
+    static CDefaultAppDocument* NewLC(CEikApplication& aApp);
+
+// from base class CAknDocument
+    /**
+     * From CAknDocument.
+     * Function to create the AppUi.
+     *
+     * @since S60 v5.0
+     * @return the created AppUi instance
+     */
+    CEikAppUi* CreateAppUiL();
+
+private:
+
+    /**
+     * C++ default constructor.
+     */
+    CDefaultAppDocument(CEikApplication& aApp);
+public:
+    /**
+     * Pointer to the AppUi
+     * Not owned
+     */
+    CDefaultAppAppUi* iDefaultAppUi; //not owned
+    };
+
+#endif      // C_DEFAULTAPPDOC_H
+
+// End of File
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/server/inc/das_gsentries.rh	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2005-2006 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:  Resource headers for project das_server
+*
+*/
+
+
+#ifndef DAS_GSENTRIES_RH
+#define DAS_GSENTRIES_RH
+
+// ---------------------------------------------------------------------------
+// New structure to describe a Service & MIME pair
+// ---------------------------------------------------------------------------
+//
+STRUCT DAS_SERVICE_MIME
+    {
+    LONG service_uid;
+    LTEXT8 mime;
+    }
+
+// ---------------------------------------------------------------------------
+// New structure to describe a Task.
+// A Task has a name, a MIME label and a list of associated Service & MIMEs pairs.
+// ---------------------------------------------------------------------------
+//
+STRUCT DAS_GS_TASK_ENTRY
+    {
+    LTEXT task_name;
+    
+    //task title
+    LTEXT task_title;         
+
+    // The main service and MIME give the default application for the task. 
+    // The default application for the task is registered as default for the main MIME and Service
+    // The default application for the task does not necessarily have to support the main MIME and Service
+    // ()
+    LTEXT8 mime_label;
+    
+    //other pairs that 
+    STRUCT service_mimes[]; //Type is DAS_SERVICE_MIME
+    }
+
+// ---------------------------------------------------------------------------
+// New structure to describe a list of Tasks
+// ---------------------------------------------------------------------------
+//
+STRUCT DAS_GS_TASKS
+    {
+    STRUCT tasks[]; //Type is DAS_GS_TASK_ENTRY
+    }
+
+#endif // DAS_GSENTRIES_RH
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/server/inc/das_server.h	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,72 @@
+/*
+* Copyright (c) 2005-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  The Default Application server class
+*
+*/
+
+
+
+#ifndef C_DEFAULTAPPSERVER_H
+#define C_DEFAULTAPPSERVER_H
+
+#include <AknServerApp.h>
+
+class CDefaultAppApplication;
+
+/**
+ *  This is the main implemetation of DefaultApp server.
+ *
+ *  @since Series 60 v5.0
+ */
+class CDefaultAppServer: public CAknAppServer
+    {
+public:  // Constructors and destructor
+
+    /**
+     * Symbian OS two-phased constructor
+     * @return
+     */
+    static CDefaultAppServer* NewL(CDefaultAppApplication *aApp);
+    
+// from base class CAknAppServer 
+
+    /**
+     * From CAknAppServer
+     * Creates a service for the specified service Uid
+     *
+     * @since S60 v5.0
+     * @param aServiceType the service type Uid
+     * @return the created service 
+     */   
+    CApaAppServiceBase* CreateServiceL(TUid aServiceType) const;
+
+private:
+
+    /**
+     * C++ default constructor.
+     */
+    CDefaultAppServer(CDefaultAppApplication *aApp);
+
+public:
+    /**
+     * pointer to the application. After the client connects, the server side needs to announce the AppUi class, to
+     * continue the construction
+     * Not owned.
+     */
+    CDefaultAppApplication* iApp; //Not owned        
+    };
+
+#endif      // C_DEFAULTAPPSERVER_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/server/inc/das_service.h	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,122 @@
+/*
+* Copyright (c) 2005-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  The Default App Service implementation (server-side)
+*
+*/
+
+
+
+#ifndef C_DEFAULTAPPSERVICE_H
+#define C_DEFAULTAPPSERVICE_H
+
+#include <AknServerApp.h>
+
+class CDefaultAppServer;
+
+/**
+ *  This class implements the Default Application server-side service.
+ *
+ *  @since Series 60 v5.0
+ */
+class CDefaultAppService : public CAknAppServiceBase
+    {
+public:
+    enum TIpcMessageIds
+        {
+        ESetDefaultAll = RApaAppServiceBase::KServiceCmdBase
+        };
+        
+    /**
+     * Symbian OS two-phased constructor
+     * @return
+     */    
+    static CDefaultAppService* NewL(const CDefaultAppServer* aServer);
+    
+    /**
+     * Destructor.
+     */
+    virtual ~CDefaultAppService();
+    
+public: // from base class CAknAppServiceBase  
+
+    /**
+     * From CAknAppServiceBase.
+     * function called when a new message is received
+     *
+     * @since S60 v5.0
+     * @param aMessage the received service message
+     */
+    void ServiceL(const RMessage2& aMessage);        
+    
+    /**
+     * From CAknAppServiceBase.
+     * function called to check client credentials. Used to retrieve client app UID
+     *
+     * @since S60 v5.0
+     * @param aMsg the message being received
+     */
+    CPolicyServer::TCustomResult SecurityCheckL(const RMessage2& aMsg, TInt& aAction, TSecurityInfo& aMissing);
+
+private: //construction
+
+    /**
+     * C++ constructor.
+     */
+    CDefaultAppService(const CDefaultAppServer* aServer);
+    
+    /**
+     * Sets default for all the Service & MIME pairs supported by the client
+     *
+     * @since S60 v5.0
+     * @param aMessage the received service message
+     */
+    void HandleSetDefaultAllL(const RMessage2& aMessage);
+    
+    /**
+     * Function where most of the processing happens.
+     * We use it so that the service request from the client returns immediately
+     *
+     * @since S60 v5.0
+     * @param aInstance a pointer to the calling CDefaultAppService instance  
+     */
+    static TInt IdleWorker(TAny *aInstance);
+    
+public:
+    /**
+     * The Uid of the client application
+     */
+    TUid iClientUid;
+    
+    /**
+     * Service flags requested by the client
+     */
+    TInt iServiceFlags;
+    
+    /**
+     * pointer to the server
+     * Not owned.
+     */
+    const CDefaultAppServer* iDefaultAppServer;  //not owned
+    
+    /**
+     * Active Object where most of the processing happens. We use it so that the service
+     * call returns immediately.
+     * Owned.
+     */
+    CIdle *iIdle;
+    };
+
+#endif      // C_DEFAULTAPPSERVICE_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/server/inc/das_servmimeapps.h	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,533 @@
+/*
+* Copyright (c) 2005-2006 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:  Keeps info about Services, MIMEs and Applications
+*
+*/
+
+
+
+#ifndef C_DEFAULTAPPSERVMIMEAPPS_H
+#define C_DEFAULTAPPSERVMIMEAPPS_H
+
+class CApaMaskedBitmap;
+class CDefaultAppServMimeApps;
+class CServicesDB;
+class RApaLsSession;
+
+/**  The UID of the General Settings Application */
+const TUid KUidGS = { 0x100058EC }; //we define this here because we use it in several places
+
+/**
+ *  Helper class: stores an Application name, its UID and some other info (how many 
+ *  service&MIMEs pair it supports, is it platform application or not)
+ *  This helper class is used to sort the list of Applications that support a Service&MIME pair
+ *
+ *  @since S60 v5.0
+ */
+class CAppHelper : public CBase
+    {
+public:
+    /**  flags used with the app helper. */
+    enum 
+        {
+        EFlagPlatformApp  =0x0001,
+        EFlagNameNotOwned =0x0002
+        };
+public:
+
+    /**
+     * Destructor.
+     */
+    ~CAppHelper();
+    
+    /**
+     * Symbian OS two-phased constructor
+     * @return
+     */
+    static CAppHelper* NewLC(const TDesC& aName, const TInt aUid);
+    
+    /**
+     * Symbian OS two-phased constructor
+     * @return
+     */
+    static CAppHelper* NewLC(const CAppHelper& aApp);
+    
+    /**
+     * This function is used for ordering an array of CAppHelper objects
+     *
+     * @since S60 v5.0
+     * @param a1 CAppHelper object
+     * @param a2 CAppHelper object
+     */
+    static TInt OrderApplications(const CAppHelper& a1, const CAppHelper& a2);
+private:
+
+    /**
+     * C++ constructor
+     */
+    CAppHelper(const TInt aUid, const TInt aScore, const TInt aFlags=0);
+public:
+    
+    /**
+     * the App name
+     * Owned or Not Owned, depending on flags (iFlag&EFlagNameNotOwned).
+     */
+    HBufC* iName;
+    
+    /**
+     * the UID of the application
+     */
+    TInt iUid;
+    
+    /**
+     * the application score (how many Services & MIMEs it supports)
+     */
+    TInt iScore;
+    
+    /**
+     * Object flags
+     */
+    TInt iFlags;
+    };
+    
+/**
+ *  Helper class: stores a Service & Mime Pair
+ *
+ *  This class stores data specific to a Service & MIME pair:
+ *  -the Service + MIME string
+ *  -the Service Uid
+ *  -the MIME
+ *  -a list of applications (CAppHelper) that support this Service & MIME pair
+ *  -the list index and Uid of the default application for this Service & MIME pair
+ *
+ *  @since S60 v5.0
+ */
+class CServiceMime : public CBase
+    {
+    friend class CDefaultAppServMimeApps;
+public:
+
+    /**
+     * C++ constructor
+     */
+    CServiceMime();
+    
+    /**
+     * Destructor.
+     */
+    ~CServiceMime();
+    
+    /**
+     * This function is used for ordering an array of CServiceMime objects
+     *
+     * @since S60 v5.0
+     * @param a1 CServiceMime object
+     * @param a2 CServiceMime object
+     */
+    static TInt OrderServiceMimes(const CServiceMime& a1, const CServiceMime& a2);
+    
+private:
+    /**
+     * String that contains the localized Service + MIME name
+     * Owned.
+     */
+    HBufC *iServiceMime;
+    
+    /**
+     * The Uid of the service
+     */
+    TUid  iServiceUid;
+    
+    /**
+     * the MIME string
+     * Owned.
+     */
+    HBufC8 *iMime;
+    
+    /**
+     * list of applications that support this Service & MIME pair
+     * Owned (members of the array).
+     */
+    RPointerArray<CAppHelper> iApplications;
+    
+    /**
+     * the UID of the default application for this Service & MIME
+     */
+    TUid iDefaultAppUid;
+    
+    /**
+     * the list index for the default application
+     * this has the following special values:
+     *  -1 : the default is (yet) unknown
+     *  -2 : there is a single app in the list, its priority is System 
+     *       (this means: do not add other apps unless they have system priority)
+     *  -3 : there are more than one applications in the list, ALL have the System priority 
+     *       (this also means: do not add other apps unless they have system priority)
+     */
+    TInt iDefaultApp;
+    
+    /**
+     * indicates if the Service & MIME pair instance is used by a task or not 
+     */
+    TBool iUsedByTasks;
+    };
+    
+    
+/**
+ *  Helper class: stores a Task
+ *
+ *  This class stores data specific to a Task:
+ *  -the task caption/title (list layout and title layout)
+ *  -the lists of Service (UIDs) & MIMEs associated with this task
+ *  -the MIME label 
+ *  -a list of Services & MIMEs objects (and their associated application list) that correspond to the list 
+ *   of Services & MIMEs associated with the task
+ *  -a list of applications (CAppHelper) that are associated with this task
+ *  -the UID and list index of the default application for the task, in the list(s) above.
+ *
+ *  How this works:
+ *  The Service & MIME pairs associated with the task are those pairs for which changing the default application for the
+ *  task will have an impact: the new default becomes the default application for all these pairs, if applicable.
+ *  The list of candidate default applications is build from the Service & MIME pairs associated with the task: any
+ *  application that can handle at least one pair, is added to the list. The score corresponds to the number of pairs an 
+ *  application is able to handle (the better the score, the more suitable the application is for the task).
+ *  When a new application is made default, it is also made default for Open + the MIME label. This way we can retrieve
+ *  the default application for the task, to display it to the user.
+ *  The list of Services & MIME objects are instances of CServiceMime that correspond to the list of Services & MIMEs that
+ *  are associated with the task (the associated Services & MIMEs is a "theoretical" list, while the CServiceMime list
+ *  is a list of Services & MIMEs that were found in the system. The Services & MIMEs in this object list is a subset of
+ *  the associated Services & MIMEs. The reunion of all Applications lists associated with each CServiceMime object in the
+ *  list is going to be same as the list of Applications that are associated with the Task.
+ *  When a new default application is selected for the task, this new default is saved in 2 ways:
+ *  -the new default application is made default for the Open service and the MIME label. This way, we can retrieve next
+ *   time the default application for the task. There is no danger to launch this default for opening the MIME label, since
+ *   no application is supposed to support the MIME label.
+ *  -the new default application is made default for all the Services & MIMEs associated with the task: for each instance
+ *   of CServiceMime in the list, the default is looked in the application list of the object: if it is found (which means 
+ *   that the new default application supports that Service & MIME), then the new task default is made default for the
+ *   current Service & MIME too.
+ *
+ *  @since S60 v5.0
+ */
+class CMediaTask : public CBase
+    {
+    friend class CDefaultAppServMimeApps;
+public:
+
+    /**
+     * Symbian OS two-phased constructor
+     * @return
+     */
+    static CMediaTask* NewLC( TResourceReader& aReader );
+    
+    /**
+     * Destructor.
+     */
+    ~CMediaTask();
+private:
+    
+    /**
+     * C++ constructor
+     */
+    CMediaTask();
+    
+    /**
+     * Symbian constructor
+     */
+    void ConstructL( TResourceReader& aReader );
+private:
+    /**
+     * Task caption, list layout
+     * Owned.
+     */
+    HBufC *iTaskList;
+
+    /**
+     * Task caption, title layout
+     * Owned.
+     */
+    HBufC *iTaskTitle;
+    
+    /**
+     * List of MIMEs associated with the task
+     * Owned (members of the array).
+     */
+    RPointerArray<HBufC8> iMimes;
+    
+    /**
+     * List of services associated with the task (1 to 1 correspondence with iMimes, they form pairs together) 
+     */
+    RArray<TInt> iServicesUids;
+    
+    /**
+     * the MIME label
+     * Owned.
+     */
+    HBufC8 *iMimeLabel;
+    
+    /**
+     * the list of real/discovered CServiceMime associated with the task
+     * Not Owned (members of the array).
+     */
+    RPointerArray<CServiceMime> iSMs; //not owned
+    
+    /**
+     * Application captions for the applications associated with the task
+     * Owned (members of the array).
+     * Application names NOT owned (names are owned by CServiceMime objects)
+     */
+    RPointerArray<CAppHelper> iApplications;
+    
+    /**
+     * The UID of the default application for the task
+     */
+    TUid iDefaultAppUid; //the Uid for the default application
+    
+    /**
+     * the index (in the application list) of the default application for the task
+     */
+    TInt iDefaultApp; //index
+    
+    };    
+
+
+/**
+ *  Engine class for the application
+ *
+ *  This class stores a list of Services and MIMEs and it may store a list of Tasks. All data handling operations
+ *  are implemented in this class.
+ *  There are 2 types of clients for the Default App Server:
+ *   1. General Settings Application (using a plugin). For this type of client we have to display first a list of tasks,
+ *      and if the user switches to the advanced view, we have to display a list of all Services & MIMEs in the system
+ *      for which the user can change the default application.
+ *   2. Normal applications may also be clients for the Default APp Server. For normal applications, only a list of Services
+ *      and MIMEs for which the cliet application is a default candidate is displayed. The task list is not constructed.
+ *  When the class is instantiated, it looks in the system (AppArc) and it builds all the data structures it needs. After
+ *  that, it can populate various lists for displaying them to the user, and can also change the default application, as 
+ *  instructed by the user (AppUi calls the functions).
+ *
+ *  @since S60 v5.0
+ */
+class CDefaultAppServMimeApps : public CBase
+    {
+public:
+    /**  flags used with the Set Default service. They influence what data is stored in the data structures. */
+    enum 
+        {
+        EFlagNoObserver=1,
+        //R&D values
+        EFlagShowAllServicesAndMimes    = 0x00010000,
+        EFlagGsClient                   = 0x00020000,
+        };
+    
+    /**
+     * Symbian OS two-phased constructor
+     * @return
+     */
+    static CDefaultAppServMimeApps* NewL(const TUid& aAppUid, TInt aServiceFlags);
+    
+    /**
+     * Symbian OS two-phased constructor
+     * @return
+     */
+    static CDefaultAppServMimeApps* NewLC(const TUid& aAppUid, TInt aServiceFlags);
+
+    /**
+     * Destructor.
+     */
+    virtual ~CDefaultAppServMimeApps();
+
+    /**
+     * This function fills with entries a data structure used by a List Box to display Services & MIMEs or Tasks
+     *
+     * @since S60 v5.0
+     * @param aServicesAndMimes the container for the list entries
+     */
+    void GetServicesAndMimesListL(CDesCArray& aServicesAndMimesArray);
+    
+    /**
+     * This function fills a Popup-list data structure with applications specific to the selected Service & MIME or Task
+     *
+     * @since S60 v5.0
+     * @param aIndex the index of the selected Service & MIME pair or Task
+     * @param aApplicationsArray the container for the list entries
+     * @param aTitle a container for the title of the list (also filled by the function)
+     */
+    void GetApplicationsListL(TInt aIndex, CDesCArray& aApplicationsArray, HBufC*& aTitle);
+    
+    /**
+     * This function sets a new default, for a Service & MIME pair or for a Task.
+     * The function also updates the list of Services & MIMEs (or Tasks), to display the new default application
+     *
+     * @since S60 v5.0
+     * @param aServiceAndMimeIndex the index of the selected Service or Mime (or Task)
+     * @param aDefaultAppIndex the index of the new default application
+     * @param aServicesAndMimesArray the container for the list entries (to be updated)
+     */
+    void UpdateDefaultL(TInt aServiceAndMimeIndex, TInt aDefaultAppIndex, CDesCArray *aServicesAndMimesArray);
+    
+    /**
+     * This function resets (removes) the defaults associated with a certain task, 
+     * or it can remove all the defaults
+     *
+     * @since S60 v5.0
+     * @param aCathegory specifies the task index for which the function should reset 
+     *                   the default, or -1 if all defaults should be reset
+     * @return 0 or error code (KErrArgument -> aCathegory has an invalid value)
+     */
+    TInt RestoreFactorySettingsL(TInt aCathegory);
+    
+private:  //construction
+
+    /**
+     * C++ constructor
+     */
+    CDefaultAppServMimeApps();
+
+    /**
+     * This function builds the info database behind this class.
+     * For all available services in the resources it creats the corresponding
+     * Services & MIMEs (or Tasks) instances.
+     *
+     * @since S60 v5.0
+     * @param aAppUid the Uid of the client application
+     * @param aServiceFlags different service flags requested by the client
+     */
+    void ConstructL(TUid aAppUid, TInt aServiceFlags);
+    
+    /**
+     * This function builds part the info database behind this class.
+     * It creates the Services & MIMEs (or Tasks) instances for the given service
+     *
+     * @since S60 v5.0
+     * @param aServiceUid the Uid of the current service
+     * @param aServiceIndex the index of the current service
+     * @param aServiceFlags different service flags requested by the client
+     * @param aServicesDb pointer to an instance that holds localized service names
+     */
+    void AddMIMEsForServiceL(TUid aServiceUid, TInt aServiceIndex, TInt aServiceFlags, CServicesDB* aServicesDb);
+    
+    /**
+     * This function sorts the Services & MIMEs and their applications. 
+     * It also sorts the Serivces & MIMEs associated with tasks
+     *
+     * @since S60 v5.0
+     */
+    void BeautifyAndSortServMimeApps(void);
+
+    /**
+     * This function reads from the resource file the list of tasks (and associated data). 
+     * This function is used during construction
+     *
+     * @since S60 v5.0
+     * @param aResourceId the resource id corresponding to the tasks resource
+     */
+    void GetTaskListL( TInt aResourceId );
+    
+    /**
+     * This function adds a new Application to a list of an Service & Mime object.
+     *
+     * @since S60 v5.0
+     * @param aServMime the Service & Mime object
+     * @param aAppUid the uid of the inserted application
+     * @param aPrio the priority of the inserted application for the Service & MIME of the host object
+     * @param aLs pointer to a RApaLsSession object (so we do not need to create a new connection)
+     */
+    void InsertApplicationL(CServiceMime& aServMime, const TUid& aAppUid, const TDataTypePriority& aPrio, const RApaLsSession *aLs);
+    
+    /**
+     * This function takes a task and a Service & MIME object. It checks all the applications that support the given
+     * Service & MIME object (from its list). If an application is not in the task's application list, this function adds 
+     * it there, with a score of 1. If the application is already in the list, then its score is incremented.
+     * The Service & MIME object is also marked as being used by a task.
+     *
+     * @since S60 v5.0
+     * @param aTask the selected task
+     * @param aServMime the selected Service & MIME object
+     */
+    void PopulateTaskWithApplicationsL(CMediaTask& aTask, CServiceMime* aServMime);
+    
+    /**
+     * This function creates a string that will become en element of a list box. To create the string, the function
+     * concatenates several sub-strings.
+     *
+     * @since S60 v5.0
+     * @param aServMime the selected Service & MIME object
+     * @param aInsertDefaultApp if TRUE, creates an object that also contains the name of the default application for the
+     *        Service & MIME pair
+     * @return the created string
+     */
+    HBufC* GetServiceAndMimeStringLC(CServiceMime& aServMime, TBool aInsertDefaultApp) const;
+    
+    /**
+     * This function creates a string that will become en element of a list box. To create the string, the function
+     * concatenates several sub-strings.
+     *
+     * @since S60 v5.0
+     * @param aMediaTask the selected Task object
+     * @param aInsertDefaultApp if TRUE, creates an object that also contains the name of the default application for the
+     *        Service & MIME pair
+     * @return the created string
+     */
+    HBufC* GetMediaTaskStringLC(CMediaTask& aMediaTask, TBool aInsertDefaultApp) const;
+
+private:  //data
+    
+    /**
+     * The list of Services & MIMEs
+     * Owned (members of the array).
+     */
+    RPointerArray<CServiceMime> iServMimes;
+    
+    /**
+     * The list of Tasks
+     * Owned (members of the array).
+     */
+    RPointerArray<CMediaTask> iTasks;
+    
+    /**
+     * The list of Services & MIMEs that are used by tasks (but otherwise would have been deleted, since they are not 
+     * displayed to the user, because there is no more than one default candidate for each Service & MIME in this list)
+     * Owned (members of the array).
+     */
+    RPointerArray<CServiceMime> iTaskServMimes; //ServMimes with a single application, used in tasks
+    
+public:
+
+    /**
+     * the list of elements, ar required by the dialog
+     */
+    CDesCArraySeg iList;
+
+    /**
+     * the UID of the client application
+     */
+    TUid iAppUid;
+    
+    /**
+     * TRUE if the current view is the GS simplified view (if this var is TRUE, it also implies that GS is our client)
+     */
+    TBool iSimplifiedView;
+    
+    /**
+     * if TRUE, the client application does not observe our exit. In this case do not display "Exit" in the menu, since 
+     * the client application will not exit when the server exits.
+     */
+    TBool iFlagNoObserver;
+    };
+
+
+#endif // C_DEFAULTAPPSRVMIMEVIEW_H
+
+// end of file
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/server/inc/das_srvmime_dlg.h	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,197 @@
+/*
+* Copyright (c) 2005-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  The Service & MIME list dlg
+*
+*/
+
+
+#ifndef C_DEFAULTAPPSRVMIMEDLG_H
+#define C_DEFAULTAPPSRVMIMEDLG_H
+
+
+#include <badesca.h> // CDesCArray
+#include <coecntrl.h> // CCoeControl
+#include <eiklbo.h> // MEikListBoxObserver
+
+
+#include <aknselectionlist.h> 
+#include <aknsettingitemlist.h> 
+
+// FORWARD DECLARATIONS
+class CAknDoubleStyleListBox;
+class CDefaultAppAppUi;
+//class CDefaultAppServMimeApps;
+
+/**
+ *  This is the Dialog class of the application
+ *
+ *  This dialog displays a double list box and it can also display a pop-up list on top of it.
+ *  The elements of the lists are created by the engine (CDefaultAppServMimeApps class)
+ *
+ *  @since S60 v5.0
+ */
+class CDefaultAppSrvMimeDlg : public CAknSelectionListDialog, 
+                              public MListBoxItemChangeObserver
+    {
+public:
+    
+    /**
+     * Symbian OS two-phased constructor
+     * @return
+     */
+    static CDefaultAppSrvMimeDlg* NewL(CDefaultAppAppUi* aAppUi);
+    
+    /**
+     * Destructor.
+     */
+    virtual ~CDefaultAppSrvMimeDlg();
+    
+public: //from CAknSelectionListDialog
+    
+    /**
+     * From CAknSelectionListDialog.
+     * This function is called when buttons/softkeys are pressed, to check if the dlg should exit.
+     * We always return EFalse, since this is a modeless & nonwaiting dialog.
+     *
+     * @since S60 v5.0
+     * @param aButtonId the list box for which the event happened
+     */
+    virtual TBool OkToExitL(TInt aButtonId);
+    
+    /**
+     * From CAknSelectionListDialog.
+     * This function is called when a command is issued by the user.
+     *
+     * @since S60 v5.0
+     * @param aCommandId the list box for which the event happened
+     */
+    virtual void ProcessCommandL(TInt aCommand);
+    
+    /**
+     * From CAknSelectionListDialog.
+     * This function is called during the construction of the dialog.
+     * We build the list of elements here.
+     *
+     * @since S60 v5.0
+     */
+    virtual void PreLayoutDynInitL();
+    
+
+public: //from CAknDialog
+    
+    /**
+     * From CAknDialog.
+     * This function is called to complete the menu construction.
+     *
+     * @since S60 v5.0
+     * @param aResourceId the resource id
+     * @param aMenuPane the menu class instance
+     */
+    virtual void DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane);
+    
+public: //from CCoeControl
+
+    /**
+     * From CCoeControl.
+     * This function is called to get the help context
+     *
+     * @since S60 v5.0
+     * @param aContext recipient for the help context
+     */
+    virtual void GetHelpContext(TCoeHelpContext& aContext) const;
+    
+    /**
+     * From CCoeControl.
+     * Called by the framework when the view size is changed
+     *
+     * @since S60 v5.0
+     */
+    virtual void SizeChanged();
+    
+    /**
+     * From CCoeControl.
+     * Called by the framework to process the key event
+     *
+     * @since S60 v5.0
+     */
+    virtual TKeyResponse OfferKeyEventL(const TKeyEvent &aKeyEvent, TEventCode aType);
+    
+    
+public: //own functions
+
+    /**
+     * Enables marquee for the list elements.
+     *
+     * @since S60 v5.0
+     */
+    void EnableMarqueeL();
+    
+    
+    /**
+     * Part of the popup menu construction process: 
+     * gets 2 icons, the selected (ticked) and empty icon
+     *
+     * @since S60 v5.0
+     * @return an array with the 2 icons
+     */
+    CArrayPtr<CGulIcon>* GetPopupListIconsL() const;
+    
+    /**
+     * Creates a pop-up list for a selected item of the list-box.
+     *
+     * @since S60 v5.0
+     * @param aSelectedIndex the selected element (used to get the content of the pop-up list)
+     */
+    void OpenMenuForSelectedServiceAndMimeL(TInt aSelectedIndex);    
+public:
+    //from MListBoxItemChangeObserver
+    void ListBoxItemsChanged(CEikListBox* aListBox);
+    
+private: //construction
+
+    /**
+     * C++ default constructor.
+     */
+    CDefaultAppSrvMimeDlg(CDefaultAppAppUi* aAppUi, TInt *aSelected);
+
+private: //data    
+    /**
+     * Pointer to the AppUi
+     * Not Owned.
+     */
+    CDefaultAppAppUi* iDefaultAppUi;
+    
+    /**
+     * The index of the selected element in the list. This is pointer to AppUI's index
+     * Not owned.
+     */
+    TInt *iSelected;
+    
+    /**
+     * Flag allowing to exit the dialog
+     */
+    TBool iOkToExit;
+
+    /**
+     * Pointer refer to CAknPopupList
+     */
+    CAknPopupList* iPopupList;
+    };
+    
+
+#endif // C_DEFAULTAPPSRVMIMEDLG_H
+
+// end of file
+
+    
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/server/inc/das_view.h	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,92 @@
+/*
+* Copyright (c) 2005-2006 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:  Standard View
+*
+*/
+
+
+#ifndef C_DEFAULTAPPVIEW_H
+#define C_DEFAULTAPPVIEW_H
+
+#include <coecntrl.h> // CCoeControl
+
+
+// FORWARD DECLARATIONS
+class CDefaultAppAppUi;
+
+
+class CDefaultAppView : public CCoeControl
+    {
+    public: // New methods
+
+        /**
+        * NewL.
+        * Two-phased constructor.
+        * Create a CDefaultAppView object, which will draw itself to aRect.
+        * @param aRect The rectangle this view will be drawn to.
+        * @return a pointer to the created instance of CDefaultAppView.
+        */
+        static CDefaultAppView* NewL( const TRect& aRect );
+
+        /**
+        * NewLC.
+        * Two-phased constructor.
+        * Create a CDefaultAppView object, which will draw itself
+        * to aRect.
+        * @param aRect Rectangle this view will be drawn to.
+        * @return A pointer to the created instance of CDefaultAppView.
+        */
+        static CDefaultAppView* NewLC( const TRect& aRect );
+
+        /**
+        * CDefaultAppView
+        * Virtual Destructor.
+        */
+        virtual ~CDefaultAppView();
+
+    public:  // Functions from base classes
+
+        /**
+        * From CCoeControl, Draw
+        * Draw this CDefaultAppView to the screen.
+        * @param aRect the rectangle of this view that needs updating
+        */
+        void Draw( const TRect& aRect ) const;
+
+        /**
+        * From CoeControl, SizeChanged.
+        * Called by framework when the view size is changed.
+        */
+        virtual void SizeChanged();
+
+    private: // Constructors
+
+        /**
+        * ConstructL
+        * @param aRect The rectangle this view will be drawn to.
+        */
+        void ConstructL(const TRect& aRect);
+
+        /**
+        * C++ default constructor.
+        */
+        CDefaultAppView();
+
+    };
+
+#endif // C_DEFAULTAPPVIEW_H
+
+// end of file
+
+    
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/server/loc/defaultappserver.loc	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,139 @@
+/*
+* Copyright (c) 2005-2006 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:  Localization strings for project Default App Server
+*
+*/
+
+
+/************* All views *********************/
+
+// d:Menu string (cascade), resets settings defaults to original/factory values
+// l:list_single_pane_t1_cp2/opt3
+// r:5.0
+//
+#define qtn_da_options_reset "Original settings"
+
+// d:Sub-menu string, resets selected item to original/factory value
+// l:list_single_popup_submenu_pane_t1
+// r:5.0
+//
+#define qtn_da_options_reset_selected "For selected item"
+
+// d:Sub-menu string, resets all defaults to original/factory values
+// l:list_single_popup_submenu_pane_t1
+// r:5.0
+//
+#define qtn_da_options_reset_all "For all items"
+
+
+/************* Simplified view *********************/
+
+// d:The title for this view
+// d:It describes a list of applications that are launched by default when the user performs a task that is 
+// d:defined in general terms by the list items (see these items next). Examples of such tasks are:
+// d:"Play Music", "Play Videos", "View Images", "Browse web".
+// l:title_pane_t2/opt9
+// r:5.0
+//
+#define qtn_da_title_main "Default Applications"
+
+// d:Item in a list of tasks
+// d:It describes a task (in general terms) that will be performed by a selected application.
+// l:list_double_pane_t1_cp2
+// r:5.0
+//
+#define qtn_da_main_view_images "View images"
+
+// d:Same string as before, as a title for a pop-up menu list
+// d:It describes a task (in general terms) that will be performed by a selected application.
+// l:heading_pane_t1
+// r:5.0
+//
+#define qtn_da_title_popup_image "View images"
+
+// d:Item in a list of tasks
+// d:It describes a task (in general terms) that will be performed by a selected application.
+// l:list_double_pane_t1_cp2
+// r:5.0
+//
+#define qtn_da_main_play_videos "Play videos"
+
+// d:Same string as before, as a title for a pop-up menu list
+// d:It describes a task (in general terms) that will be performed by a selected application.
+// l:heading_pane_t1
+// r:5.0
+//
+#define qtn_da_title_popup_video "Play videos"
+
+// d:Item in a list of tasks
+// d:It describes a task (in general terms) that will be performed by a selected application.
+// l:list_double_pane_t1_cp2
+// r:5.0
+//
+#define qtn_da_main_play_music "Play music"
+
+// d:Same string as before, as a title for a pop-up menu list
+// d:It describes a task (in general terms) that will be performed by a selected application.
+// l:heading_pane_t1
+// r:5.0
+//
+#define qtn_da_title_popup_music "Play music"
+
+// d:Item in a list of tasks
+// d:It describes a task (in general terms) that will be performed by a selected application.
+// l:list_double_pane_t1_cp2
+// r:5.0
+//
+#define qtn_da_main_browse "Browse web"
+
+// d:Same string as before, as a title for a pop-up menu list
+// d:It describes a task (in general terms) that will be performed by a selected application.
+// l:heading_pane_t1
+// r:5.0
+//
+#define qtn_da_title_popup_browse "Browse web"
+
+
+/************* Advanced view *********************/
+
+// d:The title for this view
+// d:It describes a list of applications that are launched by default when the user performs a task
+// d:that is defined quite clear (in engineering terms :-). The task is defined by the Service performed
+// d:on a file that has a certain MIME.  Examples of such tasks are:
+// d:"Open audio/mp3", "Print image/jpeg", "Open application/html", "Edit application/text".
+// d:The service name (Open, Print, Edit in the above examples) is localized, the MIME is not.
+// l:title_pane_t2/opt9
+// r:5.0
+//
+#define qtn_da_title_advanced "Advanced settings"
+
+
+
+
+/************* Application specific settings view *********************/
+// NOTE: This view is very similar with the "Advanced view", just the title is changed
+
+// d:The title for this view (the view is very similar with the "Advanced view", the only difference is that
+// d:in this view, the list is filtered so only the task specific to the client application are displayed).
+// d:The view describes a list of applications that are launched by default when the user performs a task
+// d:that is defined quite clear (in engineering terms :-). The task is defined by the Service performed
+// d:on a file that has a certain MIME.  Examples of such tasks are:
+// d:"Open audio/mp3", "Print image/jpeg", "Open application/html", "Edit application/text".
+// d:The service name (Open, Print, Edit in the above examples) is localized, the MIME is not.
+
+// l:title_pane_t2/opt9
+// r:5.0
+//
+#define qtn_da_title_app "Default Applications"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/server/loc/services_db.loc	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2005-2006 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:  Localization strings for project Services DB
+*
+*/
+
+
+
+/************* Service + MIMEs *********************/
+
+/* Examples of MIMEs:
+   -audio/mpeg
+   -video/3gpp
+   -image/jpeg
+ */
+
+
+
+// d:This is the name of a Service (it should be short)
+// d:The parameter is a MIME (non-localizable text). String is scrollable.
+// d:This is the default service, it opens a file with an application
+// l:None
+// r:5.0
+//
+#define qtn_da_service_open "Open %U"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/server/src/das.cpp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2005-2006 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:  Executable module to start the process and load the DefaultAppServer.
+*
+*/
+
+
+#include <e32base.h>
+#include "das_app.h"
+#include <eikstart.h>
+
+// ---------------------------------------------------------------------------
+// NewApplication()
+// constructs CDefaultAppApplication
+// Returns: CApaDocument*: created application object
+//
+// ---------------------------------------------------------------------------
+LOCAL_C CApaApplication* NewApplication()
+    {
+    return new CDefaultAppApplication;
+    }
+
+// ---------------------------------------------------------------------------
+// E32Main()
+//
+// ---------------------------------------------------------------------------
+GLDEF_C TInt E32Main()
+    {
+    return EikStart::RunApplication(NewApplication);
+    }
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/server/src/das_app.cpp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,58 @@
+/*
+* Copyright (c) 2005-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  This is the main application implementation of default app server.
+*
+*/
+
+
+#include "das_app.h"
+#include "das_doc.h"
+#include "das_server.h"
+
+// ---------------------------------------------------------------------------
+// Return the UID for the CSoundApplication application
+// ---------------------------------------------------------------------------
+//
+TUid CDefaultAppApplication::AppDllUid() const
+    {
+    return KUidDefaultAppServer;
+    }
+
+// ---------------------------------------------------------------------------
+// Default constructor
+// ---------------------------------------------------------------------------
+//
+CDefaultAppApplication::CDefaultAppApplication(void) : iDocument(NULL), iServer(NULL)
+    {}
+    
+// ---------------------------------------------------------------------------
+// Create an CDefaultAppDocument document, and return a pointer to it
+// ---------------------------------------------------------------------------
+//
+CApaDocument* CDefaultAppApplication::CreateDocumentL()
+    {
+    iDocument = CDefaultAppDocument::NewL(*this);
+    return (static_cast<CApaDocument*>(iDocument));
+    }
+
+// ---------------------------------------------------------------------------
+// Simple function to return a server object
+// ---------------------------------------------------------------------------
+//
+void CDefaultAppApplication::NewAppServerL(CApaAppServer*& aAppServer)
+    {
+    aAppServer = iServer = CDefaultAppServer::NewL(this);
+    }
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/server/src/das_appui.cpp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,204 @@
+/*
+* Copyright (c) 2005-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  This is the app ui implementation of default application server.
+*
+*/
+
+
+#include <eikserverapp.h> 
+#include <akncontext.h>
+#include <apgicnfl.h> 
+#include <AknIconArray.h> 
+#include <AknsUtils.h>
+#include <aknlists.h> 
+#include <defaultappserver.rsg> 
+#include "das_appui.h"
+#include "das_view.h"
+#include "das_srvmime_dlg.h"
+#include "das_servmimeapps.h"
+#include "das.hrh"
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CDefaultAppAppUi::~CDefaultAppAppUi()
+    {
+    if(iView)
+        delete iView; 
+    if(iServMimeApps)
+        delete iServMimeApps;
+    }
+
+// ---------------------------------------------------------------------------
+// Default constructor
+// ---------------------------------------------------------------------------
+//    
+CDefaultAppAppUi::CDefaultAppAppUi() : iView(NULL), iDlg(NULL), iExitBack(EFalse)
+    {
+    // No implementation required
+    }
+
+// ---------------------------------------------------------------------------
+// Symbian constructor
+// ---------------------------------------------------------------------------
+//
+void CDefaultAppAppUi::ConstructL()
+{
+    BaseConstructL(EAknEnableSkin|EAknEnableMSK|EAknSingleClickCompatible);
+    // Create view object
+    iView = CDefaultAppView::NewL( ClientRect() );
+}
+
+// ---------------------------------------------------------------------------
+// Continues the construction, after the client connects to the server and some data is known
+// (client UID and service flags)
+// ---------------------------------------------------------------------------
+//
+void CDefaultAppAppUi::ConstructSrvMimeDlgL(TUid aClientUid, TInt aServiceFlags)
+{
+    SetClientIconL(aClientUid);
+    iClientUid = aClientUid;
+    iSelectedItemSimple=-1;
+    iSelectedItemAdvanced=-1;
+    iReloadDlgAdvanced=(aClientUid==KUidGS?EFalse:ETrue);
+    iReloadDlg=ETrue;
+    do
+    {        
+        if(!iServMimeApps)
+            iServMimeApps=CDefaultAppServMimeApps::NewL(aClientUid, aServiceFlags);
+        	
+        if(iReloadDlgAdvanced)
+        {
+    	    //some settings for the advanced view
+    	    iServMimeApps->iSimplifiedView=EFalse;
+        }
+        else
+        {
+            //some settings for the simple view
+    	    iServMimeApps->iSimplifiedView=ETrue;
+        };
+        iServMimeApps->GetServicesAndMimesListL(iServMimeApps->iList);
+        
+        iDlg=CDefaultAppSrvMimeDlg::NewL(this);
+        SetDialogExist( ETrue );
+        iDlg->SetMopParent(this);
+        iDlg->ExecuteLD(R_DAS_DLG);
+        iDlg=NULL;
+    }
+    while(iReloadDlg);
+    
+    
+    //exit the server
+    if(iExitBack)
+    {
+        //if we exit by "Back" button, notify the client app, so that it does not exit.
+        CEikAppServer* server = iEikonEnv->AppServer(); //if we do not do this, the client exits when backkey is pressed
+        if ( server )
+        {
+            server->NotifyServerExit( EAknSoftkeyBack );
+        }
+    };
+    //exit this application
+    RunAppShutter();
+}
+
+// ---------------------------------------------------------------------------
+// From class CAknAppUi.
+// handle menu command
+// ---------------------------------------------------------------------------
+//
+void CDefaultAppAppUi::HandleCommandL(TInt aCommand)
+    {
+    switch (aCommand)
+        {
+    case EAknSoftkeyExit:
+        __ASSERT_ALWAYS(0,User::Leave(KErrGeneral));
+        break;
+    case EEikCmdExit:
+    
+        Exit();
+        break;
+    //no need for default. We may also have other commands that we do not handle here.
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// imports and displays the icon of the client application.
+// ---------------------------------------------------------------------------
+//
+void CDefaultAppAppUi::SetClientIconL(TUid aClietAppUid)
+    {
+    CEikStatusPane *statusPane=StatusPane();
+    TUid contextPaneUid=TUid::Uid(EEikStatusPaneUidContext);
+    if(statusPane && statusPane->PaneCapabilities(contextPaneUid).IsPresent())
+        {
+        CAknContextPane *contextPane=(CAknContextPane*)(statusPane->ControlL(contextPaneUid)); //we don't get the ownership
+        MAknsSkinInstance* skinInstance = AknsUtils::SkinInstance(); //we don't get the ownership
+        
+        CFbsBitmap* iconBmp = NULL;
+        CFbsBitmap* iconBmpMask = NULL;
+    
+        AknsUtils::CreateAppIconLC(skinInstance,aClietAppUid,EAknsAppIconTypeContext,
+                                       iconBmp,iconBmpMask);
+        CleanupStack::Pop(2);//the 2 icons
+        
+        contextPane->SetPicture(iconBmp,iconBmpMask);// ownership transfer for the 2 pictures
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Handles layout changes (e.g. from portrait to landscape)
+// ---------------------------------------------------------------------------
+//
+void CDefaultAppAppUi::HandleResourceChangeL(TInt aType)
+    {
+     CAknAppUi::HandleResourceChangeL( aType );
+     
+     if(iView)
+     iView->HandleResourceChange(aType);
+     if( iDlg && iDialogExist )
+     iDlg->HandleResourceChange(aType);
+        
+     if ( aType == KEikDynamicLayoutVariantSwitch )
+         {
+         if( iView )
+         iView->SetRect(ClientRect());
+         if( iDlg && iDialogExist )
+         iDlg->SetRect(ClientRect());
+         }
+    }
+
+// ---------------------------------------------------------------------------
+// Handles Window Server events (we are interested in catching the end key event 
+// and exiting the application
+// ---------------------------------------------------------------------------
+//
+void CDefaultAppAppUi::HandleWsEventL(const TWsEvent & aEvent, CCoeControl * aDestination)
+    {
+     CAknAppUi::HandleWsEventL(aEvent,aDestination);
+    }
+
+// ---------------------------------------------------------------------------
+// This functino is used to record the exist of the dialog; 
+// and exiting the application
+// ---------------------------------------------------------------------------
+//
+void CDefaultAppAppUi::SetDialogExist( TBool aExist )
+    {
+    iDialogExist = aExist;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/server/src/das_doc.cpp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,65 @@
+/*
+* 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:  Implementation of the document class
+*
+*/
+
+
+
+#include "das_doc.h"
+#include "das_appui.h"
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Symbian 2-phased constructor
+// ---------------------------------------------------------------------------
+//
+CDefaultAppDocument* CDefaultAppDocument::NewL(CEikApplication& aApp)
+    {
+    CDefaultAppDocument* self = NewLC(aApp);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Symbian 2-phased constructor
+// ---------------------------------------------------------------------------
+//
+CDefaultAppDocument* CDefaultAppDocument::NewLC(CEikApplication& aApp)
+    {
+    CDefaultAppDocument* self = new (ELeave) CDefaultAppDocument(aApp);
+    CleanupStack::PushL(self);
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Default constructor
+// ---------------------------------------------------------------------------
+//
+CDefaultAppDocument::CDefaultAppDocument(CEikApplication& aApp) : CAknDocument(aApp), iDefaultAppUi(NULL)
+    {
+    // No implementation required
+    }
+
+// ---------------------------------------------------------------------------
+// Instantiates CDefaultAppAppUi
+// ---------------------------------------------------------------------------
+//
+CEikAppUi* CDefaultAppDocument::CreateAppUiL()
+    {
+    iAppUi = iDefaultAppUi = new (ELeave) CDefaultAppAppUi;
+    return (static_cast<CEikAppUi*>(iAppUi));
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/server/src/das_server.cpp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2005-2006 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:  Implementation of the server class
+*
+*/
+
+
+
+#include <eikstart.h>  //for RDebug
+
+#include "das_server.h"
+#include "das_service.h"
+#include "das_app.h"
+
+const TUid KDefaultAppServiceUid = { 0x10281B9D };
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Symbian 2-phased constructor
+// ---------------------------------------------------------------------------
+//
+CDefaultAppServer* CDefaultAppServer::NewL(CDefaultAppApplication* aApp)
+    {
+    CDefaultAppServer* self = new (ELeave) CDefaultAppServer(aApp);
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Default constructor
+// ---------------------------------------------------------------------------
+//
+CDefaultAppServer::CDefaultAppServer(CDefaultAppApplication* aApp) : iApp(aApp)
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// From class CAknAppServer.
+// Creates a service for the specified service Uid
+// ---------------------------------------------------------------------------
+//
+CApaAppServiceBase* CDefaultAppServer::CreateServiceL(TUid aServiceType) const
+    {
+    RDebug::Print(_L("CDefaultAppServer::CreateServiceL"));
+    if (aServiceType == KDefaultAppServiceUid)
+        return CDefaultAppService::NewL(this);
+    else
+        return CAknAppServer::CreateServiceL(aServiceType);
+    }
+        
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/server/src/das_service.cpp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,125 @@
+/*
+* Copyright (c) 2005-2006 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:  Implementation of the DefaultApp service
+*
+*/
+
+
+//#include <eikstart.h> //for RDebug
+#include "das_server.h"
+#include "das_service.h"
+#include "das_app.h"
+#include "das_doc.h"
+#include "das_appui.h"
+#include "das_servmimeapps.h"
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Default constructor
+// ---------------------------------------------------------------------------
+//
+CDefaultAppService::CDefaultAppService(const CDefaultAppServer* aServer) : iDefaultAppServer(aServer)
+    {
+    iClientUid=TUid::Uid(0);
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CDefaultAppService::~CDefaultAppService()
+    {
+    delete iIdle;
+    }
+// ---------------------------------------------------------------------------
+// Symbian 2-phased constructor
+// ---------------------------------------------------------------------------
+//    
+CDefaultAppService* CDefaultAppService::NewL(const CDefaultAppServer* aServer)
+    {
+    CDefaultAppService* self = new (ELeave) CDefaultAppService(aServer);
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// From class CAknAppServiceBase.
+// function called when a new message is received
+// ---------------------------------------------------------------------------
+//            
+void CDefaultAppService::ServiceL(const RMessage2& aMessage)
+    {
+    switch (aMessage.Function())
+        {
+        case ESetDefaultAll : 
+            HandleSetDefaultAllL(aMessage);
+            break;        
+        default:
+            CAknAppServiceBase::ServiceL(aMessage);
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// From class CAknAppServiceBase.
+// function called to check client credentials. Used to retrieve client app UID
+// ---------------------------------------------------------------------------
+//
+CPolicyServer::TCustomResult CDefaultAppService::SecurityCheckL(const RMessage2& aMsg, TInt& /*aAction*/, TSecurityInfo& /*aMissing*/)
+    {
+    iClientUid=aMsg.SecureId();
+    return CPolicyServer::EPass;
+    }        
+
+// ---------------------------------------------------------------------------
+// Sets default for all the Service & MIME pairs supported by the client
+// ---------------------------------------------------------------------------
+//
+void CDefaultAppService::HandleSetDefaultAllL(const RMessage2& aMessage)
+    {
+    //Get flags
+    //TInt serviceFlags=aMessage.Int0();
+    iServiceFlags=aMessage.Int0();
+    aMessage.Complete(KErrNone);
+    
+	if(!iIdle)
+	    {
+		iIdle=CIdle::NewL(CActive::EPriorityStandard);
+	    TCallBack cb(&IdleWorker,this);
+	    iIdle->Start(cb);
+	    };
+    }
+
+// ---------------------------------------------------------------------------
+// Function where most of the processing happens.
+// We use it so that the service request from the client returns immediately
+// ---------------------------------------------------------------------------
+//
+TInt CDefaultAppService::IdleWorker(TAny *aInstance)
+	{
+	CDefaultAppService *service=(CDefaultAppService*)aInstance;
+	//construct the view
+	if ( service->iDefaultAppServer && 
+		 service->iDefaultAppServer->iApp &&
+		 service->iDefaultAppServer->iApp->iDocument &&
+		 service->iDefaultAppServer->iApp->iDocument->iDefaultAppUi)
+	    {
+	    service->iDefaultAppServer->iApp->iDocument->iDefaultAppUi->ConstructSrvMimeDlgL(service->iClientUid,service->iServiceFlags);
+	    };
+	return 0; //no more work to do
+	}
+
+
+   
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/server/src/das_servmimeapps.cpp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,1073 @@
+/*
+* Copyright (c) 2005-2006 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:  Keeps info about Services, MIMEs and Applications
+*
+*/
+
+
+// System includes
+#include <e32def.h> // STATIC_CAST
+#include <defaultappserver.rsg> // R_DAS_SERVICESMIMES_LISTBOX
+#include <StringLoader.h> // StringLoader
+#include <barsread.h> //TResourceRead
+#include <eikenv.h> //CEikonEnv
+#include <apgcli.h>
+#include <apgicnfl.h> // CApaMaskedBitmap
+
+#include <serviceregistry.h>
+
+#include "das_servmimeapps.h"
+#include "das_app.h" // KUidDefaultAppServer
+#include <services_db.h>
+
+#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <apmstd.h>
+#else
+#include <apmstd.h>
+#include <apmfndr.h> // KDataTypePrioritySystem
+#endif
+
+const TInt KStringMargin = 10; //10 is a sufficiently large margin
+
+// ======== MEMBER FUNCTIONS ======== CAppHelper
+
+// ---------------------------------------------------------------------------
+// Symbian 2-phased constructor
+// ---------------------------------------------------------------------------
+// 
+CAppHelper* CAppHelper::NewLC(const TDesC& aName, const TInt aUid)
+    {
+    CAppHelper* self = new (ELeave) CAppHelper(aUid,0);
+    CleanupStack::PushL(self);
+    //construct iName, copy it
+    self->iName = HBufC::NewL(aName.Size());
+    TPtr* ptr=new (ELeave) TPtr(self->iName->Des());
+    ptr->Copy(aName);
+    delete ptr;
+    
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Symbian 2-phased constructor
+// ---------------------------------------------------------------------------
+//     
+CAppHelper* CAppHelper::NewLC(const CAppHelper& aApp)
+    {
+    CAppHelper* self = new (ELeave) CAppHelper(aApp.iUid,1,aApp.iFlags);
+    CleanupStack::PushL(self);
+    //construct iName, get pointer and flag it
+    self->iName = aApp.iName;
+    self->iFlags |= EFlagNameNotOwned;
+    return self;
+    }
+ 
+// ---------------------------------------------------------------------------
+// C++ Constructor
+// ---------------------------------------------------------------------------
+//     
+CAppHelper::CAppHelper(const TInt aUid, const TInt aScore, const TInt aFlags):
+    iName(NULL), iUid(aUid), iScore(aScore), iFlags(aFlags)
+    {
+    //no implementation needed
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//    
+CAppHelper::~CAppHelper(void)
+    {
+    if(!( iFlags&EFlagNameNotOwned ))
+        delete iName;
+    iName = NULL;
+    }
+// ---------------------------------------------------------------------------
+// This function is used to order Applications
+// ---------------------------------------------------------------------------
+//  
+TInt CAppHelper::OrderApplications(const CAppHelper& a1, const CAppHelper& a2)
+    {
+    //if a1<a2 return -1, otherwise 0 or 1
+    //platform applications are always first (smaller)
+    if(a1.iFlags&EFlagPlatformApp && !(a2.iFlags&EFlagPlatformApp))
+        return -1; //a1 is platform app, a2 is not
+    if(!(a1.iFlags&EFlagPlatformApp) && a2.iFlags&EFlagPlatformApp)
+        return 1; //a1 is not platform app, a2 is
+    
+    //look into names names
+    if(*a1.iName < *a2.iName) return -1;
+    if(*a1.iName > *a2.iName) return 1;
+    //if we are here, strings were equal
+    return 0;
+    }
+
+    
+// ======== MEMBER FUNCTIONS ======== CServiceMime
+
+// ---------------------------------------------------------------------------
+// C++ Constructor
+// ---------------------------------------------------------------------------
+//     
+CServiceMime::CServiceMime() : iServiceMime(NULL), iMime(NULL)
+    {
+    iDefaultAppUid=TUid::Uid(0);
+    iDefaultApp=-1;//currently we do not know the default index
+    iUsedByTasks=EFalse;
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CServiceMime::~CServiceMime()
+    {
+    if (iServiceMime) delete iServiceMime;
+    if (iMime) delete iMime;
+    for (TInt i=0 ; i<iApplications.Count() ; i++)
+        delete iApplications[i];
+    iApplications.Close();
+    }
+    
+// ---------------------------------------------------------------------------
+// This function is used to order Services & MIMEs
+// ---------------------------------------------------------------------------
+//  
+TInt CServiceMime::OrderServiceMimes(const CServiceMime& a1, const CServiceMime& a2)
+    {
+    //if a1<a2 return -1, otherwise 0 or 1
+    //we sort by the MIME, then by the service
+    if(*a1.iMime<*a2.iMime)return -1;
+    if(*a1.iMime>*a2.iMime)return 1;
+    //if we are here, MIMEs are the same
+    if(*a1.iServiceMime<*a2.iServiceMime)return -1;
+    if(*a1.iServiceMime>*a2.iServiceMime)return 1;
+    //if we are here, strings were equal
+    return 0;
+    }
+
+// ======== MEMBER FUNCTIONS ======== CMediaTask
+
+// ---------------------------------------------------------------------------
+// Symbian 2-phased constructor
+// ---------------------------------------------------------------------------
+// 
+CMediaTask* CMediaTask::NewLC( TResourceReader& aReader )
+    {
+    CMediaTask* self = new (ELeave) CMediaTask();
+    CleanupStack::PushL(self);
+    self->ConstructL(aReader);
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//    
+CMediaTask::~CMediaTask()
+    {
+    
+    if(iTaskList)delete iTaskList;
+    if(iTaskTitle)delete iTaskTitle;
+    
+    if(iMimeLabel)delete iMimeLabel;
+    
+    iMimes.ResetAndDestroy();
+    iServicesUids.Close();
+    
+    iSMs.Close();//elements not owned
+    
+    iApplications.ResetAndDestroy();
+    }
+
+// ---------------------------------------------------------------------------
+// C++ Constructor
+// ---------------------------------------------------------------------------
+// 
+CMediaTask::CMediaTask() : iMimeLabel(NULL), iDefaultApp(-1)
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// The construction means reading the task details from the resource file
+// ---------------------------------------------------------------------------
+//    
+void CMediaTask::ConstructL( TResourceReader& aReader )
+    {
+    TInt i,count;
+    //read the task name
+    iTaskList = aReader.ReadHBufCL();
+    if( !iTaskList )User::Leave(KErrArgument);
+    
+    //read the task title
+    iTaskTitle = aReader.ReadHBufCL();
+    if( !iTaskTitle )User::Leave(KErrArgument);
+    
+    //read the mime label
+    iMimeLabel = aReader.ReadHBufC8L();
+    if( !iMimeLabel )User::Leave(KErrArgument);
+    
+    //read the service mimes entries
+    count = aReader.ReadInt16();
+    for (i=0; i<count; i++)
+        {
+        //read the service uid
+        TInt uid=aReader.ReadInt32();
+        if(uid == 0)User::Leave(KErrArgument);
+        //read the mime
+        HBufC8* mime=aReader.ReadHBufC8L();
+        if( !mime )User::Leave(KErrArgument);
+        //append both things
+        iServicesUids.Append(uid);
+        iMimes.Append(mime);//takes ownership
+        }
+    }
+    
+    
+// ======== MEMBER FUNCTIONS ======== CDefaultAppServMimeApps
+
+// ---------------------------------------------------------------------------
+// Symbian 2-phased constructor
+// ---------------------------------------------------------------------------
+// 
+CDefaultAppServMimeApps* CDefaultAppServMimeApps::NewL(const TUid& aAppUid, TInt aServiceFlags)
+    {
+    CDefaultAppServMimeApps* self = CDefaultAppServMimeApps::NewLC(aAppUid, aServiceFlags);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Symbian 2-phased constructor
+// ---------------------------------------------------------------------------
+// 
+CDefaultAppServMimeApps* CDefaultAppServMimeApps::NewLC(const TUid& aAppUid, TInt aServiceFlags)
+    {
+    CDefaultAppServMimeApps* self = new (ELeave) CDefaultAppServMimeApps();
+    CleanupStack::PushL(self);
+    self->ConstructL(aAppUid, aServiceFlags);
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// This function builds the data structures for the dialog:
+// It reads the considered services from the resource files, then it builds the
+// task list and the associated list of Services& MIMEs and applications.
+// ---------------------------------------------------------------------------
+//
+void CDefaultAppServMimeApps::ConstructL(TUid aAppUid, TInt aServiceFlags)
+    {
+    //set the client app uid
+    /* Uncomment this for testing the General Settings (Control Pannel) specific view from another application (R&D purpose)
+     * 
+    TBool flagGsClient = aServiceFlags & EFlagGsClient;
+    if(flagGsClient)aAppUid=KUidGS; //we mimic the GS Client. 
+    */
+    iAppUid = aAppUid;
+    
+    //for all the available services, launch the AddMIMEsForServiceL function
+    TResourceReader reader;
+    CEikonEnv::Static()->CreateResourceReaderLC( reader, R_DA_SERVICE_MIME );
+    CServicesDB* sdb = CServicesDB::NewLC(&reader);
+    TInt i;
+    TUid uid;
+    for(i=0; i<sdb->Count(); i++)
+        {
+        uid = sdb->ServiceUidL(i);
+        AddMIMEsForServiceL(uid,i,aServiceFlags,sdb);
+        };
+    CleanupStack::PopAndDestroy(sdb);
+    CleanupStack::PopAndDestroy( ); // reader
+    //change MIMEs & sort
+    BeautifyAndSortServMimeApps();
+    }
+    
+// ---------------------------------------------------------------------------
+// this is by far the most complicated function in the entire subsystem
+// some more comments are needed, but after this function will be split in 2
+// ---------------------------------------------------------------------------
+//
+void CDefaultAppServMimeApps::AddMIMEsForServiceL(TUid aServiceUid, TInt aServiceIndex, TInt aServiceFlags, CServicesDB* aServicesDb)
+    {
+    CServiceMime *sm = NULL;
+    TUid uid;
+    
+    RApaLsSession ls;
+    TApaAppInfo info;
+    CApaAppServiceInfoArray* serv=NULL;
+    CServiceRegistry *sr=NULL;
+    TInt i,j,k;
+    TInt it,jt;//indexes for iterating inside tasks
+    TInt lowerMarker, upperMarker;
+    //flags
+    TBool flagShowAll = EFalse;
+    /*
+     * Uncomment the line below to show all the Services & MIMEs in views, and not only those for which default app can be changed.
+     * This can be used for R&D, to see all the MIMEs&Services in the system.
+    flagShowAll = aServiceFlags & EFlagShowAllServicesAndMimes;
+     */
+    iFlagNoObserver = aServiceFlags & EFlagNoObserver;
+    
+    //check who is connecting, so that we can set the view
+    if(iAppUid == KUidGS)
+        {
+        iSimplifiedView=ETrue; //at least in the beginning. 
+                               //For this function, this is also a flag that says if we have GS as client or not
+        GetTaskListL(R_DA_TASKS);
+        }
+    else iSimplifiedView=EFalse;
+        
+    //connect
+    User::LeaveIfError( ls.Connect() );
+    CleanupClosePushL( ls );
+    
+    //Get all the apps and MIMEs for the current service
+    ls.GetAppInfo(info,iAppUid);
+    serv=ls.GetServiceImplementationsLC(aServiceUid);
+    lowerMarker = upperMarker = iServMimes.Count();
+    //create entries for the MIMEs supported by the client application
+    for (i=0; i<serv->Array().Count(); i++)
+        {
+        uid=serv->Array()[i].Uid();
+        if( iSimplifiedView || uid == iAppUid) //this means that for app clients, we first skip all the other applications
+            {
+            //if iSimplifiedView is true, then we have GS as a client    
+            for(j=0; j<serv->Array()[i].DataTypes().Count(); j++)
+                {
+                TBool createSM=ETrue;
+                if(iSimplifiedView)
+                    {
+                    //check if we already have an entry for this service & MIME
+                    for(k=lowerMarker; k<upperMarker; k++)
+                        if(iServMimes[k]->iMime->Des() == serv->Array()[i].DataTypes()[j].iDataType.Des8())
+                            {
+                            //we found it!
+                            sm=iServMimes[k];
+                            createSM=EFalse;
+                            break;//we found the sm, no need to search for it any more
+                            }
+                    //if we don't find it, we will create an entry ...
+                    }
+            
+                if(createSM)
+                    {
+                    //we have to create sm, we did not found it previously (or we were not looking for it)
+                    sm=new (ELeave) CServiceMime;
+                    CleanupStack::PushL(sm);
+                    sm->iMime = HBufC8::NewL(serv->Array()[i].DataTypes()[j].iDataType.Des8().Size());
+                    *(sm->iMime) = serv->Array()[i].DataTypes()[j].iDataType.Des8();
+                    //transform the MIME from audio/mpeg to audio mpeg
+                    HBufC *transformedMime=HBufC::NewLC(serv->Array()[i].DataTypes()[j].iDataType.Des().Size());
+                    TPtr *ptr=new (ELeave) TPtr(transformedMime->Des());
+                    CleanupStack::PushL(ptr);
+                    ptr->Copy(serv->Array()[i].DataTypes()[j].iDataType.Des());
+                    TInt location=ptr->Locate('/');
+                    if(location>0)ptr->Replace(location,1,_L(" "));
+                    //transforming done
+                    //sm->iServiceMime = aServicesDb->ServiceStringLC(aServiceIndex, serv->Array()[i].DataTypes()[j].iDataType.Des());
+                    sm->iServiceMime = aServicesDb->ServiceStringLC(aServiceIndex, transformedMime->Des());
+                    CleanupStack::Pop(sm->iServiceMime);
+                    CleanupStack::PopAndDestroy(ptr);
+                    CleanupStack::PopAndDestroy(transformedMime);
+                    //StringLoader::LoadL( R_DA_SERVICE_OPEN, serv->Array()[i].DataTypes()[j].iDataType.Des());
+                    sm->iServiceUid=aServiceUid;
+                    }
+            
+                //insert the client application
+                InsertApplicationL(*sm, uid, serv->Array()[i].DataTypes()[j].iPriority, &ls);
+            
+                //get the Uid of the default application for this service and MIME
+                ls.AppForDataType(serv->Array()[i].DataTypes()[j].iDataType,sm->iDefaultAppUid);
+                
+                if(createSM)
+                    {
+                    //sm was created this iteration, ad it.
+                    iServMimes.AppendL(sm);//takes ownership of sm
+                    upperMarker++;
+                    CleanupStack::Pop(sm);
+                
+                    }
+                }//for
+                /*
+                 * If a service that has no MIME will be considered, some code must be added (probably in this place)
+                 */
+            }//if (
+        
+        }
+    __ASSERT_DEBUG(upperMarker == iServMimes.Count(), User::Panic( _L("upperMarker bad value"), 1));
+    
+    if(sr)
+        {
+        //we do not need it any more
+        delete sr;
+        sr=NULL;
+        }
+    if(lowerMarker == upperMarker)
+        {
+        //current app does not support any MIME for the current service, clean and get out of here
+        CleanupStack::PopAndDestroy(serv);
+        CleanupStack::PopAndDestroy();  // closes RApaLsSession
+        return;
+        }
+        
+    if(!iSimplifiedView)
+        {
+        //if we are here, we have MIMEs for the current service
+        //iterate once more and add applications for MIMEs already in the list
+        for (i=0; i<serv->Array().Count(); i++)
+            {
+            uid=serv->Array()[i].Uid();
+            if( uid == iAppUid) continue; //we don't add our client application once more in the list (it is already there)
+            for(j=0; j<serv->Array()[i].DataTypes().Count(); j++)
+                for(k=lowerMarker; k<upperMarker; k++)
+                    if(iServMimes[k]->iMime->Des() == serv->Array()[i].DataTypes()[j].iDataType.Des8())
+                        {
+                        InsertApplicationL(*(iServMimes[k]), serv->Array()[i].Uid(), serv->Array()[i].DataTypes()[j].iPriority, &ls);
+                        }//if same MIME
+            }
+        }
+        
+    //before deleting some of the entries ...    
+    if(iSimplifiedView)
+        {
+        //check the service & MIMEs against the task list...
+        //first, check the service against task services
+        for(it=0; it<iTasks.Count(); it++)
+            for(jt=0; jt<iTasks[it]->iServicesUids.Count(); jt++)
+                if(aServiceUid.iUid == iTasks[it]->iServicesUids[jt])
+                    {
+                    //lets check if the MIME matches too...
+                    for(k=lowerMarker; k<upperMarker; k++)
+                        if(*iServMimes[k]->iMime == *iTasks[it]->iMimes[jt])
+                            {
+                            //this entry matches an entry in the task list
+                            //add the applications to the list
+                            PopulateTaskWithApplicationsL(*iTasks[it],iServMimes[k]);
+                            //link the sm, if it has more than 1 application
+                            break;//sm found, no need to search for it further
+                            }
+                    }
+        }
+    
+    
+    
+    //iterate from the newly added entries and set the index
+    for(k=lowerMarker; k<upperMarker; k++)
+        {
+        TBool smSetOrRemoved = EFalse;
+        //check for single applications
+        if( iServMimes[k]->iApplications.Count() <2 && !flagShowAll)
+            {
+            //this entry has a single element (that should not be shown)
+            //we either delete it, or move it
+            if(iServMimes[k]->iUsedByTasks)
+                {
+                //the sm is used by tasks, we move it
+                iTaskServMimes.AppendL(iServMimes[k]);//takes ownership of sm
+                }
+            else
+                {
+                //the sm is not used by tasks, we delete it.
+                delete iServMimes[k];
+                }
+            
+            //we remove the entry from the iServMimes (so that it is not shown)
+            iServMimes.Remove(k);
+            k--;
+            upperMarker--;
+            smSetOrRemoved=ETrue;
+            }
+        
+        //set the index
+        if(!smSetOrRemoved)
+            {
+            for(i=0 ; i< iServMimes[k]->iApplications.Count() ; i++)
+                {
+                if(iServMimes[k]->iApplications[i]->iUid == iServMimes[k]->iDefaultAppUid.iUid)
+                    iServMimes[k]->iDefaultApp=i;
+                }
+            }
+        };
+    
+    if(iSimplifiedView)
+    for(it=0; it<iTasks.Count(); it++)
+        if(iTasks[it]->iDefaultAppUid.iUid == 0 && iTasks[it]->iApplications.Count()>0)
+            {
+            //there is no uid, look for the platform App and make it the default
+            for(jt=0; jt<iTasks[it]->iApplications.Count(); jt++)
+                if(iTasks[it]->iApplications[jt]->iFlags & CAppHelper::EFlagPlatformApp)
+                    {
+                    iTasks[it]->iDefaultAppUid.iUid = iTasks[it]->iApplications[jt]->iUid;
+                    iTasks[it]->iDefaultApp=jt;
+                    break;//app found, no need to search for it any longer
+                    };
+                
+            //if no app found, mark the first one as default
+            if(iTasks[it]->iDefaultAppUid.iUid == 0)
+                {
+                iTasks[it]->iDefaultAppUid.iUid = iTasks[it]->iApplications[0]->iUid;
+                iTasks[it]->iDefaultApp = 0;//the index
+                };
+            }
+        else
+            for(jt=0; jt<iTasks[it]->iApplications.Count(); jt++)
+                if(iTasks[it]->iApplications[jt]->iUid == iTasks[it]->iDefaultAppUid.iUid)
+                    {
+                    iTasks[it]->iDefaultApp=jt;
+                    break;//app found, no need to search for it any longer
+                    }
+    
+    //done, destroy serv
+    CleanupStack::PopAndDestroy(serv);
+    CleanupStack::PopAndDestroy( );  // closes RApaLsSession
+    }
+    
+// ---------------------------------------------------------------------------
+// C++ Constructor
+// ---------------------------------------------------------------------------
+//     
+CDefaultAppServMimeApps::CDefaultAppServMimeApps(): iList(4)
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//    
+CDefaultAppServMimeApps::~CDefaultAppServMimeApps()
+    {
+    iServMimes.ResetAndDestroy();
+    iTasks.ResetAndDestroy();
+    iTaskServMimes.ResetAndDestroy();
+    }
+
+// ---------------------------------------------------------------------------
+// This function sorts the Services & MIMEs and their applications. 
+// It also sorts the Serivces & MIMEs associated with tasks
+// ---------------------------------------------------------------------------
+//
+void CDefaultAppServMimeApps::BeautifyAndSortServMimeApps(void)
+    {
+    //first, go through the Services & MIMEs localized names and sort them
+    TLinearOrder<CServiceMime> order(&CServiceMime::OrderServiceMimes);
+    iServMimes.Sort(order);
+    
+    //go through applications and sort them
+    TInt i,j;
+    for(i=0; i<iServMimes.Count(); i++)
+        {
+        TLinearOrder<CAppHelper> order2(&CAppHelper::OrderApplications);
+        iServMimes[i]->iApplications.Sort(order2);
+        //get our app index 
+        for(j=0; j<iServMimes[i]->iApplications.Count(); j++)
+            if(iServMimes[i]->iApplications[j]->iUid == iServMimes[i]->iDefaultAppUid.iUid)
+                iServMimes[i]->iDefaultApp = j;
+        };
+    //if we have tasks, we sort their apps too
+    for(i=0; i<iTasks.Count(); i++)
+        {
+        TLinearOrder<CAppHelper> order2(&CAppHelper::OrderApplications);
+        iTasks[i]->iApplications.Sort(order2);
+        //get our app index 
+        for(j=0; j<iTasks[i]->iApplications.Count(); j++)
+            if(iTasks[i]->iApplications[j]->iUid == iTasks[i]->iDefaultAppUid.iUid)
+                iTasks[i]->iDefaultApp = j;
+        };
+    }
+
+
+// ---------------------------------------------------------------------------
+// This function reads from the resource file the list of tasks (and associated data). 
+// This function is used during construction
+// ---------------------------------------------------------------------------
+//    
+void CDefaultAppServMimeApps::GetTaskListL( TInt aResourceId )
+    {
+    TResourceReader reader;
+    TInt i;
+    CServiceRegistry* sr=CServiceRegistry::NewL();
+    CleanupStack::PushL(sr);
+
+    // Read tasks
+    
+    CEikonEnv::Static()->CreateResourceReaderLC( reader, aResourceId );
+
+    TInt count = reader.ReadInt16();
+    for ( i = 0; i < count; i++ )
+        {
+        CMediaTask* task=CMediaTask::NewLC(reader);
+        // Read the default application for this task ...
+        sr->GetDefault(KOpenServiceUid, *task->iMimeLabel, task->iDefaultAppUid);
+        
+        //add the task to the list
+        iTasks.Append(task);
+        CleanupStack::Pop(task);
+        }
+
+    CleanupStack::PopAndDestroy(); // reader
+    CleanupStack::PopAndDestroy(sr);
+    }
+    
+// ---------------------------------------------------------------------------
+// This function adds a new Application to a list of an Service & Mime object.
+// ---------------------------------------------------------------------------
+//    
+void CDefaultAppServMimeApps::InsertApplicationL(CServiceMime& aServMime, const TUid& aAppUid, const TDataTypePriority& aPrio, const RApaLsSession *aLs)
+    {
+    TBool addIt = ETrue;
+
+    if(aPrio == KDataTypePrioritySystem)
+        {
+        // the application to be inserted has system priority
+        if(aServMime.iDefaultApp == -1)
+            {
+            //we have non-system applications in the list
+            //delete them ...
+            aServMime.iApplications.ResetAndDestroy();
+                          
+            //... and make the default -2 ... (it means single app with system priority)
+            aServMime.iDefaultApp = -2;
+            //... and add our application (after exiting from the "if")
+            }
+        else
+            {
+            //do not delete the applications, but just add our application
+            //...and make the default -3 (it means multiple apps with system priority)
+            aServMime.iDefaultApp = -3;
+            //... and add our application (after exiting from the "if")
+            }
+        }
+    else
+        {
+        // the application to be inserted does NOT have system priority
+        if(aServMime.iDefaultApp < -1)
+            {
+            // there are only System apps in the list, do not add ours
+            addIt = EFalse;
+            }
+        // else there are normal applications in the list, insert ours, as well
+        }
+    //add the application to the list
+    if(addIt)
+        {
+        TApaAppInfo info;
+        aLs->GetAppInfo(info,aAppUid);
+        //find the best name for the application
+        CAppHelper *app = NULL;
+        if(info.iCaption.Size() != 0)
+            {
+            //this is for now, the preferred name
+            app = CAppHelper::NewLC(info.iCaption, aAppUid.iUid);
+            }
+        else
+            {
+            //fall-back name
+            app = CAppHelper::NewLC(info.iShortCaption, aAppUid.iUid);
+            };
+        //is the app platform application??
+        if (info.iFullName.Left(1) == _L("Z") || 
+            info.iFullName.Left(1) == _L("z")) 
+            app->iFlags |= CAppHelper::EFlagPlatformApp;
+        //append the name
+        aServMime.iApplications.AppendL(app);
+        CleanupStack::Pop(app);
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// This function takes a task and a Service & MIME object. It checks all the applications that support the given
+// Service & MIME object (from its list). If an application is not in the task's application list, this function adds 
+// it there, with a score of 1. If the application is already in the list, then its score is incremented.
+// The Service & MIME object is also marked as being used by a task.
+// ---------------------------------------------------------------------------
+//    
+void CDefaultAppServMimeApps::PopulateTaskWithApplicationsL(CMediaTask& aTask,CServiceMime* aServMime)
+    {
+    TInt i,j;
+    TBool found;
+    //add the applications to the list
+    for(i=0; i<aServMime->iApplications.Count(); i++)
+        {
+        found=EFalse;
+        for(j=0; j<aTask.iApplications.Count(); j++)
+            if(aServMime->iApplications[i]->iUid == aTask.iApplications[j]->iUid)
+                {
+                //we found this application...
+                found=ETrue;
+                //... increase its score
+                aTask.iApplications[j]->iScore++;
+                //... and get to the next application
+                break; //application found, no need to search for it any more
+                }
+        //if the application was not found, we have to add it!
+        if(!found)
+            {
+            CAppHelper *app = CAppHelper::NewLC(*aServMime->iApplications[i]);
+            aTask.iApplications.AppendL(app);
+            CleanupStack::Pop(app);
+            }
+        }
+    //mark the sm
+    aServMime->iUsedByTasks=ETrue;
+    //link the sm
+    aTask.iSMs.Append(aServMime);
+    }
+
+// ---------------------------------------------------------------------------
+// This function fills with entries a data structure used by a List Box to display Services & MIMEs or Tasks
+// ---------------------------------------------------------------------------
+//
+void CDefaultAppServMimeApps::GetServicesAndMimesListL(CDesCArray& aServicesAndMimesArray)
+    {
+    TInt i;
+    aServicesAndMimesArray.Reset();
+    if(iSimplifiedView)
+        {
+        for ( i=0 ; i<iTasks.Count() ; i++ )
+            {
+            TDesC* string = GetMediaTaskStringLC(*iTasks[i], ETrue);
+            aServicesAndMimesArray.AppendL (*string);
+            CleanupStack::PopAndDestroy(string);
+            }
+        }
+    else
+        {
+        for ( i=0 ; i<iServMimes.Count() ; i++ )
+            {
+            TDesC* string = GetServiceAndMimeStringLC(*iServMimes[i], ETrue);
+            aServicesAndMimesArray.AppendL (*string);
+            CleanupStack::PopAndDestroy(string);
+            }
+        }
+    
+    }
+    
+// ---------------------------------------------------------------------------
+// This function fills a Popup-list data structure with applications specific to the selected Service & MIME or Task
+// ---------------------------------------------------------------------------
+//    
+void CDefaultAppServMimeApps::GetApplicationsListL(TInt aIndex, CDesCArray& aApplicationsArray, HBufC*& aTitle)
+    {
+    // Strings will be of the format "1\tApplication"
+    _LIT (KStringAppsDefault, "1\t");
+    _LIT (KStringAppsNonDefault, "0\t");
+    
+    TInt bufLen=20;
+    HBufC *string=HBufC::NewLC(bufLen);
+    HBufC *newString=NULL;
+    TInt i,len;
+    RPointerArray<CAppHelper> *apps=NULL;
+    
+    //get the proper list
+    if(iSimplifiedView)
+        apps = &(iTasks[aIndex]->iApplications);
+    else
+        apps = &(iServMimes[aIndex]->iApplications);
+    
+    for ( i=0 ; i<apps->Count() ; i++ )
+        {
+        len=(*apps)[i]->iName->Size() + KStringMargin ;
+        if(len>bufLen)
+            {
+            newString=string->ReAllocL(len);
+            if(newString != string)
+                {
+                CleanupStack::Pop(string);//already destroyed
+                string=newString;
+                CleanupStack::PushL(string);
+                }
+            bufLen=len;
+            newString=NULL;
+            }
+        //copy the application into the string buffer
+        TPtr ptr=string->Des();
+        TBool isDefault=EFalse;
+        
+        if( iSimplifiedView && iTasks[aIndex]->iDefaultApp==i) isDefault=ETrue;
+        if( !iSimplifiedView && iServMimes[aIndex]->iDefaultApp==i) isDefault=ETrue;
+        
+        if( isDefault ) ptr.Copy(KStringAppsDefault);
+        else ptr.Copy(KStringAppsNonDefault);
+        ptr.Append(*(*apps)[i]->iName);
+        
+        aApplicationsArray.AppendL (ptr);
+        }
+    
+    CleanupStack::PopAndDestroy(string); //data in ptr is out of scope
+        
+    //get the title now
+    if ( iSimplifiedView )
+        aTitle = GetMediaTaskStringLC(*iTasks[aIndex], EFalse);
+    else
+        aTitle = GetServiceAndMimeStringLC(*iServMimes[aIndex], EFalse);
+    CleanupStack::Pop(aTitle);
+    }
+
+// ---------------------------------------------------------------------------
+// This function sets a new default, for a Service & MIME pair or for a Task.
+// The function also updates the list of Services & MIMEs (or Tasks), to display the new default application
+// ---------------------------------------------------------------------------
+//    
+void CDefaultAppServMimeApps::UpdateDefaultL(TInt aServiceAndMimeIndex, TInt aDefaultAppIndex, CDesCArray *aServicesAndMimesArray)
+    {
+    //check for correct parameters
+    if (aServiceAndMimeIndex <0 || aDefaultAppIndex <0) User::Leave(KErrArgument);
+    if(iSimplifiedView)
+        {
+        if( aServiceAndMimeIndex >= iTasks.Count() ||
+            aDefaultAppIndex >= iTasks[aServiceAndMimeIndex]->iApplications.Count())
+            User::Leave(KErrArgument);
+        }
+    else
+        {
+        if( aServiceAndMimeIndex >= iServMimes.Count() ||
+            aDefaultAppIndex >= iServMimes[aServiceAndMimeIndex]->iApplications.Count())
+            User::Leave(KErrArgument);
+        }
+    
+    //if we are here, parameters are within their range
+    TBool doUpdate=ETrue;
+    TUid defaultAppUid;
+    CServiceRegistry *sr=CServiceRegistry::NewL();
+    CleanupStack::PushL(sr);
+        
+    //update the default in the Service Registry
+    if(iSimplifiedView)
+        {
+        TInt i,j;
+        TUid serviceUid;
+        //set the default for the generic MIME (and our server application)
+        TDataType dt(*iTasks[aServiceAndMimeIndex]->iMimeLabel);
+        defaultAppUid=TUid::Uid(iTasks[aServiceAndMimeIndex]->iApplications[aDefaultAppIndex]->iUid);
+        if(sr->SetDefault(KOpenServiceUid, dt,defaultAppUid))
+            {
+            //if we are here, SetDefault returned an error.
+            //so we do not update the default...
+            doUpdate=EFalse;
+            }
+        //set the selected default for all the Services & MIME that it supports
+        if(doUpdate)
+            {
+            for(i=0; i<iTasks[aServiceAndMimeIndex]->iSMs.Count(); i++)
+                for(j=0; j<iTasks[aServiceAndMimeIndex]->iSMs[i]->iApplications.Count(); j++)
+                    if(defaultAppUid.iUid == iTasks[aServiceAndMimeIndex]->iSMs[i]->iApplications[j]->iUid )
+                        {
+                        //the selected application supports this Service & MIME pair.
+                        //make the app default for the pair.
+                        dt=*iTasks[aServiceAndMimeIndex]->iSMs[i]->iMime;
+                        serviceUid=iTasks[aServiceAndMimeIndex]->iSMs[i]->iServiceUid;
+                        sr->SetDefault(serviceUid, dt,defaultAppUid);
+                        //update the sm so that it reflects the new default
+                        iTasks[aServiceAndMimeIndex]->iSMs[i]->iDefaultAppUid=defaultAppUid;
+                        iTasks[aServiceAndMimeIndex]->iSMs[i]->iDefaultApp=j;
+                        break; //application found in sm's list, do not need to search for it any more
+                        }
+            //update the default entries
+            iTasks[aServiceAndMimeIndex]->iDefaultApp=aDefaultAppIndex;
+            iTasks[aServiceAndMimeIndex]->iDefaultAppUid=defaultAppUid;
+            }
+            
+        }
+    else
+        {
+        TDataType dt(*iServMimes[aServiceAndMimeIndex]->iMime);
+        defaultAppUid=TUid::Uid(iServMimes[aServiceAndMimeIndex]->iApplications[aDefaultAppIndex]->iUid);
+        if(sr->SetDefault(iServMimes[aServiceAndMimeIndex]->iServiceUid, dt,defaultAppUid))
+            {
+            //if we are here, SetDefault returned an error.
+            //so we do not update the default...
+            doUpdate=EFalse;
+            }
+        //update the default entries
+        if(doUpdate)
+            {
+            iServMimes[aServiceAndMimeIndex]->iDefaultApp=aDefaultAppIndex;
+            iServMimes[aServiceAndMimeIndex]->iDefaultAppUid=defaultAppUid;
+            }
+        }
+    CleanupStack::PopAndDestroy(sr);
+        
+    //check if setting the default failed
+    if(!doUpdate)
+    {
+    	//### if updating the default failed, here would be the place to put an error note to the user
+    	return; // or leave
+    };
+        
+    //update the item in the list
+    if (aServicesAndMimesArray)
+        {
+        //get the string
+        TDesC* string;
+        if(iSimplifiedView)
+            string = GetMediaTaskStringLC(*iTasks[aServiceAndMimeIndex], ETrue);
+        else
+            string = GetServiceAndMimeStringLC(*iServMimes[aServiceAndMimeIndex], ETrue);
+        aServicesAndMimesArray->Delete(aServiceAndMimeIndex);
+        aServicesAndMimesArray->InsertL(aServiceAndMimeIndex,*string);
+        CleanupStack::PopAndDestroy(string);
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// This function creates a string that will become en element of a list box. To create the string, the function
+// concatenates several sub-strings.
+// ---------------------------------------------------------------------------
+//    
+HBufC* CDefaultAppServMimeApps::GetServiceAndMimeStringLC(CServiceMime& aServMime, TBool aInsertDefaultApp) const
+    {
+    HBufC *string=NULL;
+    TPtr *ptr=NULL;
+    TInt len;
+    _LIT(KTab,"\t");
+    
+    if(aInsertDefaultApp && aServMime.iDefaultApp >= 0) //it may be that we do not have a default ...
+        len=aServMime.iApplications[aServMime.iDefaultApp]->iName->Size();
+    else
+        len=0;
+    len+= aServMime.iServiceMime->Size();
+    len+= KStringMargin ; 
+    
+    string=HBufC::NewLC(len);
+        
+    //build the string, add the tabs before and after
+    ptr=new (ELeave) TPtr(string->Des());
+    CleanupStack::PushL(ptr);
+    
+    ptr->Copy(*aServMime.iServiceMime);
+
+    if(aInsertDefaultApp)
+        {
+        ptr->Insert(0,KTab);
+        ptr->Append(KTab);
+
+        //add default app
+        if(aServMime.iDefaultApp >= 0) //it may be that we do not have a default ...
+            ptr->Append(*aServMime.iApplications[aServMime.iDefaultApp]->iName);
+        }
+
+    CleanupStack::PopAndDestroy(ptr);
+
+    return string; //pass ownership, string also on the stack
+        
+    }
+
+// ---------------------------------------------------------------------------
+// This function creates a string that will become en element of a list box. To create the string, the function
+// concatenates several sub-strings.
+// ---------------------------------------------------------------------------
+//    
+HBufC* CDefaultAppServMimeApps::GetMediaTaskStringLC(CMediaTask& aMediaTask, TBool aInsertDefaultApp) const
+    {
+    TPtr *ptr=NULL;
+    TInt len = KStringMargin;
+    _LIT(KTab,"\t");
+    HBufC *taskName=NULL; //not owned, not deleted at the end of function
+    
+    //compute the string length
+    if(aInsertDefaultApp)
+        {
+        //we insert the task list name
+        taskName = aMediaTask.iTaskList;
+        //we also insert the length od the default app (if we have it)
+        if(aMediaTask.iDefaultApp >= 0)//it may be that we do not have a default ...
+            len += aMediaTask.iApplications[aMediaTask.iDefaultApp]->iName->Size();
+        }
+    else
+        {
+        //we should insert the task title, if we have it
+        taskName = aMediaTask.iTaskTitle;
+        //taskName = aMediaTask.iTaskList;
+        };
+    len += taskName->Size();
+    
+    //allocate the string
+    HBufC *string=HBufC::NewLC(len);
+    
+    //add the title
+    ptr=new (ELeave) TPtr(string->Des());
+    CleanupStack::PushL(ptr);
+    ptr->Copy(*taskName);
+
+    //add other stuff
+    if(aInsertDefaultApp)
+        {
+        ptr->Insert(0,KTab);
+        ptr->Append(KTab);
+        //add default app
+        if(aMediaTask.iDefaultApp >= 0) //it may be that we do not have a default ...
+            ptr->Append(*aMediaTask.iApplications[aMediaTask.iDefaultApp]->iName);
+        }
+    
+    CleanupStack::PopAndDestroy(ptr);
+
+    return string; //pass ownership, string also on the stack
+    }
+
+// ---------------------------------------------------------------------------
+// This function resets (removes) the defaults associated with a certain task, 
+// or it can remove all the defaults
+// ---------------------------------------------------------------------------
+//  
+TInt CDefaultAppServMimeApps::RestoreFactorySettingsL(TInt aCathegory)
+    {
+    TInt i, j;
+    CServiceRegistry *sr=NULL;
+    
+    if(aCathegory == -1)
+        {
+        sr=CServiceRegistry::NewL();
+        
+        if ( iSimplifiedView )
+        	{
+            for(i=0; i<iTasks.Count(); i++)
+        	    {
+                for(j=0; j<iTasks[i]->iMimes.Count(); j++)
+            	    {
+            	    sr->RemoveEntry(TUid::Uid(iTasks[i]->iServicesUids[j]), TDataType(*iTasks[i]->iMimes[j]));
+            	    }
+                //remove the entry that identifies the default app for the task
+                sr->RemoveEntry(KOpenServiceUid, TDataType(*iTasks[i]->iMimeLabel));
+        	    }
+        	}
+        else
+        	{
+        	//we reset the defaults for all the services & MIME
+        	for(i=0; i<iServMimes.Count(); i++)
+        	    sr->RemoveEntry(iServMimes[i]->iServiceUid, TDataType(*iServMimes[i]->iMime));
+        	//remove the entry that identifies the default app for the task
+        	for(i=0; i<iTasks.Count(); i++)
+        	    sr->RemoveEntry(KOpenServiceUid, TDataType(*iTasks[i]->iMimeLabel));     	
+        	}
+        }
+    else if(iSimplifiedView && aCathegory >= 0 && aCathegory < iTasks.Count())
+        {
+        //we are in simplified view, restore defaults for a single task
+        sr=CServiceRegistry::NewL();
+        for(i=0; i<iTasks[aCathegory]->iMimes.Count(); i++)
+                sr->RemoveEntry(TUid::Uid(iTasks[aCathegory]->iServicesUids[i]), TDataType(*iTasks[aCathegory]->iMimes[i]));
+            //remove the entry that identifies the default app for the task
+            sr->RemoveEntry(KOpenServiceUid, TDataType(*iTasks[aCathegory]->iMimeLabel));
+        }
+    else if(!iSimplifiedView && aCathegory >= 0 && aCathegory < iServMimes.Count())
+        {
+        //we are in the advanced view, restore defaults for a single Service & MIME pair
+        sr=CServiceRegistry::NewL();
+        sr->RemoveEntry(iServMimes[aCathegory]->iServiceUid, TDataType(*iServMimes[aCathegory]->iMime));
+        }
+    else return -1; //wrong aCathegory range
+    
+    if(sr) delete sr;
+    return 0;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/server/src/das_srvmime_dlg.cpp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,530 @@
+/*
+* Copyright (c) 2005-2008 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:  Implementation of the Services & MIME view class
+*
+*/
+
+
+
+// System includes
+#include <e32base.h>
+#include <AknIconArray.h> 
+#include <gulicon.h>
+#include <AknsUtils.h>
+#include <avkon.mbg>
+
+#include <featmgr.h>
+#include <hlplch.h>
+
+#include <aknlists.h>
+#include <barsread.h>
+#include <e32def.h>
+#include <eikclbd.h>
+#include <eikmenub.h>
+
+#include <defaultappserver.rsg>
+#include <StringLoader.h>
+#include <uikon.hrh>
+#include <aknPopup.h>
+#include <akntitle.h>
+#include <aknsfld.h>
+#include <featmgr.h>
+
+#include <aknsettingitemlist.h> 
+
+#include "das_srvmime_dlg.h"
+#include "das_servmimeapps.h"
+#include "das_appui.h"
+#include "das_app.h"
+#include "das.hrh"
+#include "das.hlp.hrh"
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Symbian 2-phased constructor
+// ---------------------------------------------------------------------------
+//    
+CDefaultAppSrvMimeDlg* CDefaultAppSrvMimeDlg::NewL(CDefaultAppAppUi* aAppUi)
+    {
+    //we first need to create a CDefaultAppServMimeApps instance
+    TInt *selected;
+    if(aAppUi->iReloadDlgAdvanced)
+    {
+    	//some settings for the advanced view
+    	selected=&(aAppUi->iSelectedItemAdvanced);
+    }
+    else
+    {
+        //some settings for the simple view
+    	selected=&(aAppUi->iSelectedItemSimple);
+    };
+    
+    //create the dialog instance (ownership of servMimeApps is passed to the dialog
+    CDefaultAppSrvMimeDlg *dialog=new(ELeave)CDefaultAppSrvMimeDlg(aAppUi, selected);
+    CleanupStack::PushL(dialog);
+    dialog->ConstructL(R_DAS_MENUBAR); 
+    CleanupStack::Pop(dialog);
+    return dialog;
+    }
+
+// ---------------------------------------------------------------------------
+// C++ Constructor
+// ---------------------------------------------------------------------------
+//    
+CDefaultAppSrvMimeDlg::CDefaultAppSrvMimeDlg(CDefaultAppAppUi* aAppUi, TInt *aSelected) : 
+    CAknSelectionListDialog(*aSelected, &aAppUi->iServMimeApps->iList, NULL), 
+    iDefaultAppUi(aAppUi), iSelected(aSelected), iOkToExit(EFalse)
+    {
+    //no implementation necessary
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//    
+CDefaultAppSrvMimeDlg::~CDefaultAppSrvMimeDlg()
+    {
+    if ( iDefaultAppUi )
+        {
+        iDefaultAppUi->SetDialogExist( EFalse );
+        }
+    
+    if ( iPopupList )
+        {
+        iPopupList->CancelPopup();
+        iPopupList = NULL;
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// From class From CAknSelectionListDialog
+// This function is called when buttons/softkeys are pressed, to check if the dlg should exit.
+// We make the checkings and return the result.
+// ---------------------------------------------------------------------------
+//   
+TBool CDefaultAppSrvMimeDlg::OkToExitL(TInt aButtonId)
+    {
+    CAknSelectionListDialog::OkToExitL(aButtonId);
+    if ( aButtonId == EAknSoftkeyOptions && iPopupList )
+    	{
+    	iPopupList->CancelPopup();
+    	iPopupList = NULL;
+    	}
+    if(aButtonId == EAknSoftkeyBack || aButtonId == EAknCmdOpen || aButtonId == EAknSoftkeyOk)
+        {
+        ProcessCommandL(aButtonId);
+        };
+    if(aButtonId==EAknCmdEnd || aButtonId==EAknSoftkeyCancel)
+    	{
+    	iOkToExit=ETrue;
+    	iDefaultAppUi->iReloadDlg=EFalse;
+    	}
+    return iOkToExit;
+    }
+
+// ---------------------------------------------------------------------------
+// From class From CAknSelectionListDialog
+// This function is called when a command is issued by the user.
+// ---------------------------------------------------------------------------
+//
+void CDefaultAppSrvMimeDlg::ProcessCommandL(TInt aCommand)
+    {
+    CAknSelectionListDialog::ProcessCommandL(aCommand); //this hides the menu and takes care of find
+    iEnterKeyPressed=EFalse; 
+    
+    
+    *iSelected = ListBox()->CurrentItemIndex();
+    if (FindBox() && *iSelected != -1)
+	    *iSelected = STATIC_CAST(CAknFilteredTextListBoxModel*,ListBox()->Model())->Filter()->FilteredItemIndex(*iSelected);
+    // ATTENTION: If *iSelected is -1 it means that the list is empty!
+
+    
+    switch(aCommand)
+        {
+    case EDasCmdAdvanced:
+        //SwitchViewL();
+        
+        //make the dialog reload        
+        iDefaultAppUi->iReloadDlgAdvanced=ETrue;
+        iOkToExit=ETrue;
+        //force our exit
+        TryExitL(0);
+        
+        break;
+    case EAknCmdHelp:
+        HlpLauncher::LaunchHelpApplicationL(iEikonEnv->WsSession(), iDefaultAppUi->AppHelpContextL());
+        break;
+    case EDasCmdResetAll:
+    case EDasCmdResetSelected:
+        if(aCommand==EDasCmdResetSelected)
+        {
+        	if(*iSelected!=-1)
+        	    iDefaultAppUi->iServMimeApps->RestoreFactorySettingsL(*iSelected);
+        }   
+        else
+            iDefaultAppUi->iServMimeApps->RestoreFactorySettingsL(-1);
+            
+        //common code:
+        //reload the dialog
+        if(!iDefaultAppUi->iServMimeApps->iSimplifiedView)
+            iDefaultAppUi->iReloadDlgAdvanced=ETrue;
+        iOkToExit=ETrue;
+        //delete the iServMimeApps so that it will be reloaded next time
+        delete iDefaultAppUi->iServMimeApps;
+        iDefaultAppUi->iServMimeApps=NULL;
+        //force our exit
+        TryExitL(0);
+        break;
+    case EAknCmdExit:
+        //exit the server
+        iOkToExit=ETrue;
+        iDefaultAppUi->iReloadDlg=EFalse;
+        //force our exit
+        TryExitL(0);
+        break;
+    case EAknSoftkeyBack:
+        //we have 2 cases here: 
+        //if we are in the advanced view, we switch back to the simple view.
+        //if we are in the simple view, then we exit the server
+        if(iDefaultAppUi->iServMimeApps->iAppUid == KUidGS && !iDefaultAppUi->iServMimeApps->iSimplifiedView)
+            {
+            //switch back to simple view
+            //make the dialog reload
+            iDefaultAppUi->iReloadDlgAdvanced=EFalse;
+            iOkToExit=ETrue;
+            // no need to force our exit, we are comming from a TryExitL() 
+            }
+        else
+            {
+            //exit the server
+            iOkToExit=ETrue;
+            iDefaultAppUi->iReloadDlg=EFalse;
+            //tell AppUi that the exit is due a "Back" command
+            iDefaultAppUi->iExitBack=ETrue;
+            }
+        break;
+    case EAknCmdOpen:
+    case EAknSoftkeyOk:
+        //we have the index of the selected item in *iSelected
+        OpenMenuForSelectedServiceAndMimeL(*iSelected);
+        break;    
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// From class From CAknSelectionListDialog
+// Called during the construction of the dialog. We build the list of elements here.
+// ---------------------------------------------------------------------------
+//    
+void CDefaultAppSrvMimeDlg::PreLayoutDynInitL()
+    {
+    CAknSelectionListDialog::PreLayoutDynInitL();
+    
+    CEikSettingsListBox* listbox=(CEikSettingsListBox*)ListBox();
+    // Ownership retained by us
+    listbox->CreateScrollBarFrameL( ETrue );
+    listbox->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOn, CEikScrollBarFrame::EAuto );
+    listbox->UpdateScrollBarsL();   
+
+    //enable marquee
+    EnableMarqueeL();   
+        
+    //restore the selected item    
+    if(*iSelected >= 0)
+        {
+        listbox->SetCurrentItemIndex(*iSelected);
+        };
+        
+    //change the title
+    CEikStatusPane *statusPane=iDefaultAppUi->StatusPane();
+    if(statusPane && statusPane->PaneCapabilities(TUid::Uid(EEikStatusPaneUidTitle)).IsPresent())
+        {
+        CAknTitlePane *titlePane=(CAknTitlePane*)(statusPane->ControlL(TUid::Uid(EEikStatusPaneUidTitle)));
+        HBufC* titleString;
+        //load the correct title string
+        if(iDefaultAppUi->iReloadDlgAdvanced)
+            {
+                if(iDefaultAppUi->iClientUid == KUidGS)
+                    //User activated advanced view in Control Panel
+                    titleString=StringLoader::LoadLC(R_DA_TITLE_ADVANCED);
+                else //Client is some application other than Control Panel; load app specific view.
+                    titleString=StringLoader::LoadLC(R_DA_TITLE_APP);
+            }
+        else //Simple view in Control Panel
+            titleString=StringLoader::LoadLC(R_DA_TITLE_MAIN);
+        titlePane->SetTextL(*titleString);
+        CleanupStack::PopAndDestroy(titleString);
+        };
+    
+    ListBox()->AddItemChangeObserverL( this );
+    }
+    
+// ---------------------------------------------------------------------------
+// From class CAknDialog.
+// Called when the menu is initialized.
+// ---------------------------------------------------------------------------
+//
+void CDefaultAppSrvMimeDlg::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane)
+    {
+    if (aResourceId != R_DAS_MENU) return;
+    __ASSERT_ALWAYS(iDefaultAppUi->iServMimeApps,User::Leave(KErrGeneral));
+    
+    // for !iSimplifiedView dim the EDasCmdAdvanced
+    if(!iDefaultAppUi->iServMimeApps->iSimplifiedView)
+        aMenuPane->SetItemDimmed(EDasCmdAdvanced, ETrue);    
+    
+    // if the Client is not observing when we are exiting, then dim the Exit
+    if(iDefaultAppUi->iServMimeApps->iFlagNoObserver)
+        aMenuPane->SetItemDimmed(EAknCmdExit, ETrue);
+    
+    // Help should be displayed only if the feature is supported
+    // according to Feature Manager
+    if (!FeatureManager::FeatureSupported(KFeatureIdHelp))
+        {
+        aMenuPane->SetItemDimmed(EAknCmdHelp, ETrue);
+        }
+		//if the findbox already exists, dim the find menu item.
+    if ( FindBox()->IsVisible() )
+        {
+        aMenuPane->SetItemDimmed(EAknCmdFindPopupActivated, ETrue);
+        }
+    
+    CTextListBoxModel* modelSm = ( ( CEikSettingsListBox* )ListBox() )->Model();  // not taking ownership
+    TInt itemCount = modelSm->NumberOfItems();
+		//if the listbox is empty, dim the change menu item.
+    if (itemCount == 0)
+        {
+        aMenuPane->SetItemDimmed(EAknCmdOpen, ETrue);
+        }
+    
+    }
+    
+// ---------------------------------------------------------------------------
+// From class CCoeControl.
+// Called to get the help context.
+// ---------------------------------------------------------------------------
+//
+void CDefaultAppSrvMimeDlg::GetHelpContext(TCoeHelpContext& aContext) const
+    {
+    aContext.iMajor = KUidDefaultAppServer;
+    
+    //check if we have proper values
+    if(!iDefaultAppUi->iServMimeApps)
+        aContext.iContext = KDA_HLP_MAIN;
+    else
+        {
+        //check for GS client
+        if (iDefaultAppUi->iServMimeApps->iAppUid == KUidGS)
+            {
+            //the client is GS. Check for simplified or advanced view
+            if (iDefaultAppUi->iServMimeApps->iSimplifiedView)
+                aContext.iContext = KDA_HLP_MAIN;
+            else
+                aContext.iContext = KDA_HLP_ADVANCED;
+            }
+        else
+            {
+            //this is not GS client
+            aContext.iContext = KDA_HLP_APPLICATION;
+            };
+        };
+    }
+
+// ---------------------------------------------------------------------------
+// From class CCoeControl.
+// Called to get the help context.
+// ---------------------------------------------------------------------------
+//    
+void CDefaultAppSrvMimeDlg::SizeChanged()
+    {
+    CAknSelectionListDialog::SizeChanged(); 
+    }
+   
+    
+// ---------------------------------------------------------------------------
+// Enables marquee for the list elements.
+// ---------------------------------------------------------------------------
+//  
+void CDefaultAppSrvMimeDlg::EnableMarqueeL()
+    {
+    CFormattedCellListBoxData *tmp=((CEikSettingsListBox*)(ListBox()))->ItemDrawer()->FormattedCellData();
+    
+    tmp->SetMarqueeParams(KMaxTInt, 6, 2000000, 10000); // Magic: loop forever
+    tmp->EnableMarqueeL(ETrue);
+    }
+
+
+// ---------------------------------------------------------------------------
+// Loads icons from a file and sets them in the drawer for iSavedGamesList
+// ---------------------------------------------------------------------------
+//  
+CArrayPtr<CGulIcon>* CDefaultAppSrvMimeDlg::GetPopupListIconsL() const
+    {
+    // CGulIcon class packages two bitmaps: icon image and its mask
+    // CAknIconArray inherits from CArrayPtrFlat
+    CArrayPtr<CGulIcon>* iconList = new (ELeave) 
+                                 CAknIconArray(2);
+    CleanupStack::PushL(iconList);
+    
+    TFileName iconFile( AknIconUtils::AvkonIconFileName() );
+    MAknsSkinInstance* skinInstance;
+    CFbsBitmap* newIconBmp = NULL;
+    CFbsBitmap* newIconBmpMask = NULL;
+    CGulIcon* newIcon = NULL;
+    
+    skinInstance = AknsUtils::SkinInstance();
+              
+    //creating blank icon
+    AknsUtils::CreateIconLC(skinInstance,KAknsIIDQgnPropEmpty,
+                           newIconBmp,newIconBmpMask,iconFile,
+                           EMbmAvkonQgn_prop_empty,
+                           EMbmAvkonQgn_prop_empty_mask);
+    
+    newIcon = CGulIcon::NewL(newIconBmp,newIconBmpMask);
+    
+    CleanupStack::Pop(2);//newIconBmp & newIconBmpMask
+    CleanupStack::PushL(newIcon);
+    iconList->AppendL(newIcon);
+    
+    CleanupStack::Pop(newIcon);     
+              
+    //creating TICK mark icon
+    AknsUtils::CreateIconLC(skinInstance,KAknsIIDQgnPropSubCurrent,
+                           newIconBmp,newIconBmpMask,iconFile,
+                           EMbmAvkonQgn_prop_sub_current,
+                           EMbmAvkonQgn_prop_sub_current_mask);
+    
+    newIcon = CGulIcon::NewL(newIconBmp,newIconBmpMask);
+    
+    CleanupStack::Pop(2);//newIconBmp & newIconBmpMask
+    CleanupStack::PushL(newIcon);
+    iconList->AppendL(newIcon);
+
+    CleanupStack::Pop(newIcon);
+    
+    CleanupStack::Pop(iconList);
+
+    newIconBmp = NULL;
+    newIconBmpMask = NULL;
+    newIcon = NULL;
+
+    return iconList;
+    }
+        
+    
+// ---------------------------------------------------------------------------
+// Pops-up a menu list with the Applications for the selected Service & MIME item
+// ---------------------------------------------------------------------------
+//  
+void CDefaultAppSrvMimeDlg::OpenMenuForSelectedServiceAndMimeL(TInt aSelectedIndex)
+    {
+    if(!iDefaultAppUi->iServMimeApps)User::Leave(KErrNotFound);
+    if(aSelectedIndex<0)return; //there is no selected item (list is empty)
+    
+    CAknSingleGraphicPopupMenuStyleListBox *selectedServiceAndMime = new (ELeave) CAknSingleGraphicPopupMenuStyleListBox;
+    CleanupStack::PushL(selectedServiceAndMime);
+    
+    if ( iPopupList != NULL )
+    	{
+        iPopupList->CancelPopup();
+        iPopupList = NULL;
+    	}
+    
+    iPopupList = CAknPopupList::NewL(selectedServiceAndMime, R_AVKON_SOFTKEYS_OK_CANCEL);
+    selectedServiceAndMime->ConstructL(iPopupList,EAknListBoxMenuList);
+    selectedServiceAndMime->CreateScrollBarFrameL (ETrue);
+    selectedServiceAndMime->ScrollBarFrame()->SetScrollBarVisibilityL( 
+            CEikScrollBarFrame::EOff, 
+            CEikScrollBarFrame::EAuto );
+
+    //construct icons
+    CArrayPtr<CGulIcon>* icons=GetPopupListIconsL();
+    selectedServiceAndMime->ItemDrawer()->ColumnData()->SetIconArray(icons); // passing ownership of icons
+    
+    
+    //populate the applications list
+    CTextListBoxModel* modelApps = selectedServiceAndMime->Model();  // not taking ownership
+    modelApps->SetOwnershipType (ELbmOwnsItemArray);
+    CDesCArray* applications = STATIC_CAST(CDesCArray*, modelApps->ItemTextArray());
+    HBufC* listTitle=NULL;
+    iDefaultAppUi->iServMimeApps->GetApplicationsListL(aSelectedIndex, *applications, listTitle);
+    
+    
+    //set the title of the list
+    CleanupStack::PushL(listTitle);
+    iPopupList->SetTitleL(*listTitle);
+    CleanupStack::PopAndDestroy(listTitle);
+    //
+    TInt popupOk = iPopupList->ExecuteLD();
+    iPopupList = NULL;
+    
+    if(popupOk)
+        {
+        TInt selected = selectedServiceAndMime->CurrentItemIndex();
+        
+        //update the default in the array & list
+        //get the list array first
+        CTextListBoxModel* modelSm = ((CEikSettingsListBox*)ListBox())->Model();  // not taking ownership
+        //modelSm->SetOwnershipType (ELbmOwnsItemArray);
+        CDesCArray* servicesAndMimesArray = STATIC_CAST(CDesCArray*, modelSm->ItemTextArray());
+        //do the update
+        iDefaultAppUi->iServMimeApps->UpdateDefaultL(aSelectedIndex,selected,servicesAndMimesArray);
+        //redraw the list
+        DrawNow();
+        }
+    CleanupStack::PopAndDestroy(selectedServiceAndMime);
+    }
+
+// ---------------------------------------------------------------------------
+// OfferKeyEventL from ccoecontrol
+// ---------------------------------------------------------------------------
+// 
+TKeyResponse CDefaultAppSrvMimeDlg::OfferKeyEventL(const TKeyEvent &aKeyEvent, TEventCode aType)
+    {
+    if ( aKeyEvent.iCode == EKeyBackspace )
+        {
+        if ( FindBox()->TextLength() >0 )
+            {
+            return FindBox()->OfferKeyEventL( aKeyEvent, aType );
+            }
+        }
+    return CAknSelectionListDialog::OfferKeyEventL( aKeyEvent ,aType );
+    }
+
+// -----------------------------------------------------------------------------
+// CDefaultAppSrvMimeDlg::ListBoxItemsChanged (from MListBoxItemChangeObserver)
+// 
+// -----------------------------------------------------------------------------
+//
+void CDefaultAppSrvMimeDlg::ListBoxItemsChanged( CEikListBox* aListBox )
+    {
+    if ( aListBox )
+        {
+        CEikButtonGroupContainer& cba = ButtonGroupContainer();
+        CTextListBoxModel* modelSm = ((CEikSettingsListBox*)aListBox)->Model();  // not taking ownership
+        TInt itemCount = modelSm->NumberOfItems();
+        if (itemCount == 0)
+            {
+            cba.MakeCommandVisible(EAknCmdOpen, EFalse);
+            }
+        else
+            {
+            cba.MakeCommandVisible(EAknCmdOpen, ETrue);
+            }
+        }
+    }
+   
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/server/src/das_view.cpp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,115 @@
+/*
+* Copyright (c) 2005-2006 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:  Implementation of the view class
+*
+*/
+
+
+
+// System includes
+
+#include "das_view.h"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CDefaultAppView::NewL()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CDefaultAppView* CDefaultAppView::NewL( const TRect& aRect )
+    {
+    CDefaultAppView* self = CDefaultAppView::NewLC( aRect );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CDefaultAppView::NewLC()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CDefaultAppView* CDefaultAppView::NewLC( const TRect& aRect )
+    {
+    CDefaultAppView* self = new ( ELeave ) CDefaultAppView;
+    CleanupStack::PushL( self );
+    self->ConstructL( aRect );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CDefaultAppView::ConstructL()
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CDefaultAppView::ConstructL( const TRect& aRect )
+    {
+    // Create a window for this application view
+    CreateWindowL();
+
+    // Set the windows size
+    SetRect( aRect );
+
+    // Activate the window, which makes it ready to be drawn
+    ActivateL();
+    }
+
+// -----------------------------------------------------------------------------
+// CDefaultAppView::CDefaultAppView()
+// C++ default constructor can NOT contain any code, that might leave.
+// -----------------------------------------------------------------------------
+//
+CDefaultAppView::CDefaultAppView()
+    {
+    // No implementation required
+    }
+
+
+// -----------------------------------------------------------------------------
+// CDefaultAppView::~CDefaultAppView()
+// Destructor.
+// -----------------------------------------------------------------------------
+//
+CDefaultAppView::~CDefaultAppView()
+    {
+    // No implementation required
+    }
+
+
+// -----------------------------------------------------------------------------
+// CDefaultAppView::Draw()
+// Draws the display.
+// -----------------------------------------------------------------------------
+//
+void CDefaultAppView::Draw( const TRect& /*aRect*/ ) const
+    {
+    // Get the standard graphics context
+    CWindowGc& gc = SystemGc();
+
+    // Gets the control's extent
+    TRect drawRect( Rect());
+
+    
+  	}
+
+// -----------------------------------------------------------------------------
+// CDefaultAppView::SizeChanged()
+// Called by framework when the view size is changed.
+// -----------------------------------------------------------------------------
+//
+void CDefaultAppView::SizeChanged()
+    {  
+    DrawNow();
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/service/BWINS/defaultappclientU.DEF	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,8 @@
+EXPORTS
+	??1CDefaultAppClient@@UAE@XZ @ 1 NONAME ; CDefaultAppClient::~CDefaultAppClient(void)
+	?ChangeDefaultsL@CDefaultAppClient@@QAEXH@Z @ 2 NONAME ; void CDefaultAppClient::ChangeDefaultsL(int)
+	?NewL@CDefaultAppClient@@SAPAV1@PAVMAknServerAppExitObserver@@@Z @ 3 NONAME ; class CDefaultAppClient * CDefaultAppClient::NewL(class MAknServerAppExitObserver *)
+	?NewLC@CDefaultAppClient@@SAPAV1@PAVMAknServerAppExitObserver@@@Z @ 4 NONAME ; class CDefaultAppClient * CDefaultAppClient::NewLC(class MAknServerAppExitObserver *)
+	?PairsToDisplayL@CDefaultAppClient@@QAEHXZ @ 5 NONAME ; int CDefaultAppClient::PairsToDisplayL(void)
+	?ServiceAvailable@CDefaultAppClient@@SAHAAH@Z @ 6 NONAME ; int CDefaultAppClient::ServiceAvailable(int &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/service/EABI/defaultappclientU.DEF	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,14 @@
+EXPORTS
+	_ZN17CDefaultAppClient15ChangeDefaultsLEi @ 1 NONAME
+	_ZN17CDefaultAppClient15PairsToDisplayLEv @ 2 NONAME
+	_ZN17CDefaultAppClient16ServiceAvailableERi @ 3 NONAME
+	_ZN17CDefaultAppClient4NewLEP25MAknServerAppExitObserver @ 4 NONAME
+	_ZN17CDefaultAppClient5NewLCEP25MAknServerAppExitObserver @ 5 NONAME
+	_ZN17CDefaultAppClientD0Ev @ 6 NONAME
+	_ZN17CDefaultAppClientD1Ev @ 7 NONAME
+	_ZN17CDefaultAppClientD2Ev @ 8 NONAME
+	_ZTI17CDefaultAppClient @ 9 NONAME ; #<TI>#
+	_ZTI18RDefaultAppService @ 10 NONAME ; #<TI>#
+	_ZTV17CDefaultAppClient @ 11 NONAME ; #<VT>#
+	_ZTV18RDefaultAppService @ 12 NONAME ; #<VT>#
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/service/group/bld.inf	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2005-2006 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:  Build information file for project DefaultAppServer - Service
+*
+*/
+
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+PRJ_MMPFILES
+das_service.mmp
+
+PRJ_TESTMMPFILES
+
+PRJ_TESTEXPORTS
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/service/group/das_service.mmp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 2005-2006 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:  Project definition file for project DefaultAppServer - Service
+*
+*/
+
+
+
+#include <data_caging_paths.hrh>
+#include <platform_paths.hrh>  
+
+TARGET                  defaultappclient.dll
+TARGETTYPE              DLL
+UID                     0x1000008d 0x10281B9E
+
+CAPABILITY              CAP_GENERAL_DLL DRM
+VENDORID                VID_DEFAULT
+
+// Define directories for the .def-files of WINSCW build.
+// IMPORTANT NOTICE:  The lines in the example that end with a backslash 
+// must have one space after the backslash.
+#if defined(ARMCC)
+deffile ../EABI/ 
+#elif defined( WINSCW )
+deffile ../BWINS/ 
+#endif
+
+SOURCEPATH              ../src
+SOURCE                  das_service.cpp
+SOURCE                  das_client.cpp
+
+USERINCLUDE             ../inc
+
+// Default system include paths for middleware layer modules.
+APP_LAYER_SYSTEMINCLUDE
+
+LIBRARY                 euser.lib
+LIBRARY                 apgrfx.lib
+LIBRARY                 avkon.lib
+LIBRARY                 eikcore.lib
+LIBRARY                 apparc.lib
+
+//EXPORTUNFROZEN
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/service/inc/das_service.h	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,68 @@
+/*
+* Copyright (c) 2005-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  This class defines the service used to change the default app.
+*
+*/
+
+
+
+#ifndef R_DEFAULTAPPSERVICE_H
+#define R_DEFAULTAPPSERVICE_H
+
+#include <AknServerApp.h>
+
+/**
+ *  Definition for the default app service
+ *
+ *  This class defines the client side of the default app service.
+ *
+ *  @lib defaultappclient.dll
+ *  @since S60 v5.0
+ */
+class RDefaultAppService : public RAknAppServiceBase
+    {
+
+private:
+
+    /**  messages used */
+    enum TIpcMessageIds
+            {
+            ESetDefaultAll = RApaAppServiceBase::KServiceCmdBase
+            };
+public:
+
+    /**
+     * Sends SetDefault message to the server
+     *
+     * @since S60 v5.0
+     * @param aFlags service class (value is transparent for this class/function)
+     * @return 0 for success, negative value on failure
+     */
+    TInt SetDefault( TInt aFlags );
+
+private: // From RApaAppServiceBase
+
+    /**
+     * From RApaAppServiceBase.
+     * Returns the uid of the service
+     *
+     * @since S60 v5.0
+     * @return the Uid of the provided service (Default App Service)
+     */
+    TUid ServiceUid() const;
+    };
+
+
+#endif // R_DEFAULTAPPSERVICE_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/service/src/das_client.cpp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,241 @@
+/*
+* Copyright (c) 2005-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  This class implemets the Default App Client API
+*
+*/
+
+
+#include <e32std.h>
+#include <apgcli.h>
+
+
+#include <das_client.h>
+#include "das_service.h"
+
+#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <apaid.h>
+#else
+#include <apaid.h>
+#include <apaidpartner.h> // new file introduced by xSymbian
+#endif
+
+const TUid KDefaultAppServiceUid = { 0x10281B9D };
+
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CDefaultAppClient::NewL()
+// 
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CDefaultAppClient* CDefaultAppClient::NewL( MAknServerAppExitObserver* aObserver )
+    {
+    CDefaultAppClient* self = CDefaultAppClient::NewLC( aObserver );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CDefaultAppClient::NewLC()
+//
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CDefaultAppClient* CDefaultAppClient::NewLC( MAknServerAppExitObserver* aObserver )
+    {
+    CDefaultAppClient* self = new ( ELeave ) CDefaultAppClient;
+    CleanupStack::PushL( self );
+    self->ConstructL( aObserver );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CDefaultAppClient::CDefaultAppClient()
+// Default constructor
+//
+// ---------------------------------------------------------------------------
+//
+CDefaultAppClient::CDefaultAppClient()
+    {
+    iServerAppUid.iUid = 0;
+    }
+
+// ---------------------------------------------------------------------------
+// CDefaultAppClient::ConstructL()
+// 
+//
+// ---------------------------------------------------------------------------
+//
+void CDefaultAppClient::ConstructL( MAknServerAppExitObserver* aObserver )
+    {
+    iObserver=aObserver;
+    iService = new (ELeave) RDefaultAppService;
+    }
+
+// ---------------------------------------------------------------------------
+// CDefaultAppClient::~CDefaultAppClient
+//
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CDefaultAppClient::~CDefaultAppClient()
+    {
+    if(iMonitor)
+        {
+        iMonitor->Cancel();
+        delete iMonitor;
+        };
+    if(iService)
+        {
+        iService->Close();
+        delete iService;
+        };
+    
+    
+        
+    // iObserver is not owned
+    }
+
+
+// ---------------------------------------------------------------------------
+// Function to check if a server is present in the system. If the
+// server is present, the subsequent functions should not fail due
+// to server unavailability.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CDefaultAppClient::ServiceAvailable(TInt& aErrorCode)
+    {
+    TRAP(aErrorCode,GetServiceParamsL(NULL));
+    if(aErrorCode != KErrNone) return EFalse;
+    return ETrue;
+    }
+
+// ---------------------------------------------------------------------------
+// Function to check the number of Service & MIME pairs the server would display if the 
+// ChangeDefaultsL() would be called. The purpose of this function
+// is to allow the client application not to display an entry for starting the server, in the 
+// Options menu, in case the Server's list of Service & MIME pairs is empty.
+// 
+// Please note that the function may return a higher number than the actual number
+// of pairs, because it does not check for MIMEs with System priority (that would not be 
+// displayed).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CDefaultAppClient::PairsToDisplayL()
+    {
+    RApaLsSession ls;
+    TInt i,j;
+    TInt pairs=0;
+    
+    //Get own UID
+    TUid clientAppUid = User::Identity(); 
+    
+    //connect
+    User::LeaveIfError(ls.Connect());
+    
+    //we are connected, so some initialization
+    CleanupClosePushL( ls );
+    User::LeaveIfError(ls.GetAllApps());
+    
+    //get all services & MIMEs supported by our application
+    CApaAppServiceInfoArray* servicesAndDataTypes=ls.GetAppServicesLC(clientAppUid);
+    
+    for(i=0; i<servicesAndDataTypes->Array().Count(); i++ )
+        {
+        const TApaAppServiceInfo currentServiceInfo = servicesAndDataTypes->Array()[i];
+        for ( j = 0 ; j < currentServiceInfo.DataTypes().Count() ; j++ )
+            {
+            //check if there are more than one applications supporting this Service & MIME pair
+            CApaAppServiceInfoArray* apps=ls.GetServiceImplementationsLC(currentServiceInfo.Uid(),currentServiceInfo.DataTypes()[j].iDataType);
+            
+            if(apps->Array().Count()>1)
+                {
+            	//more that one app handles this Service & MIME
+            	pairs++;
+                };
+        
+            CleanupStack::PopAndDestroy(apps);
+            };
+        };
+      
+    //clean
+    CleanupStack::PopAndDestroy(servicesAndDataTypes);
+    CleanupStack::PopAndDestroy();  // closes RApaLsSession        
+    
+    return pairs;
+    }
+    
+// ---------------------------------------------------------------------------
+// This function launches the server, as a chained application. The client application will not be
+// available to the user until the server does not exit.
+// When the server exits, the client application gains control again. The observer (if specified 
+// during instantiation (NewL) is notified that the server has exited.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CDefaultAppClient::ChangeDefaultsL( TInt aFlags )
+    {
+    if(iServerAppUid.iUid == 0)
+        GetServiceParamsL( &iServerAppUid );
+    
+    iService->ConnectChainedAppL(iServerAppUid);
+    
+    if(iObserver)
+        iMonitor = CApaServerAppExitMonitor::NewL(*iService, *iObserver, CActive::EPriorityStandard);
+    else
+        aFlags|=EFlagNoObserver;
+    
+    iService->SetDefault(aFlags);
+    }
+
+
+
+// ---------------------------------------------------------------------------
+// This function finds out the uid of the Default Application Server 
+// (the application registered to handle the DefaultApp service)
+// ---------------------------------------------------------------------------
+//     
+void CDefaultAppClient::GetServiceParamsL( TUid *aServerAppUid)
+    {
+    CApaAppServiceInfoArray* services = NULL;    
+    RApaLsSession ls;
+    TInt count = 0; //number of services found so far.
+    
+    User::LeaveIfError(ls.Connect());
+    CleanupClosePushL( ls );
+    
+    User::LeaveIfError(ls.GetServerApps( KDefaultAppServiceUid ));
+
+    services = ls.GetServiceImplementationsLC( KDefaultAppServiceUid );
+        
+    if( services )
+        {
+        count = services->Array().Count();
+        // get the server's Uid
+        if( aServerAppUid )
+            aServerAppUid->iUid = services->Array()[0].Uid().iUid;
+        };
+    CleanupStack::PopAndDestroy( 2 );  // destroys services + closes RApaLsSession
+            
+    if ( count == 0) User::Leave(KErrNotFound);
+    if ( count > 1) User::Leave(KErrNotSupported);
+        
+    // if we are here, it means that we have a single server handling the defaults
+    }
+
+
+
+   
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/service/src/das_service.cpp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,44 @@
+/*
+* Copyright (c) 2005-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  This class defines the service used to change the default app.
+*
+*/
+
+
+#include "das_service.h"
+
+
+// ======== MEMBER FUNCTIONS ========
+
+
+const TUid KDefaultAppServiceUid = { 0x10281B9D };
+
+// ---------------------------------------------------------------------------
+// Sends SetDefault message to the server
+// ---------------------------------------------------------------------------
+//        
+TInt RDefaultAppService::SetDefault( TInt aFlags )
+    {
+    return SendReceive( ESetDefaultAll, TIpcArgs( aFlags ) );
+    }
+        
+// ---------------------------------------------------------------------------
+// From class RApaAppServiceBase.
+// Returns the uid of the service
+// ---------------------------------------------------------------------------
+//
+TUid RDefaultAppService::ServiceUid() const
+    {
+    return KDefaultAppServiceUid;
+    }        
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/services_db/BWINS/servicesdbU.DEF	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,11 @@
+EXPORTS
+	??1CServicesDB@@UAE@XZ @ 1 NONAME ; CServicesDB::~CServicesDB(void)
+	?Count@CServicesDB@@QBEHXZ @ 2 NONAME ; int CServicesDB::Count(void) const
+	?NewL@CServicesDB@@SAPAV1@PAVTResourceReader@@@Z @ 3 NONAME ; class CServicesDB * CServicesDB::NewL(class TResourceReader *)
+	?NewLC@CServicesDB@@SAPAV1@PAVTResourceReader@@@Z @ 4 NONAME ; class CServicesDB * CServicesDB::NewLC(class TResourceReader *)
+	?ServiceNameLC@CServicesDB@@QBEPAVHBufC16@@H@Z @ 5 NONAME ; class HBufC16 * CServicesDB::ServiceNameLC(int) const
+	?ServiceNameLC@CServicesDB@@QBEPAVHBufC16@@VTUid@@@Z @ 6 NONAME ; class HBufC16 * CServicesDB::ServiceNameLC(class TUid) const
+	?ServiceStringLC@CServicesDB@@QBEPAVHBufC16@@HABVTDes16@@@Z @ 7 NONAME ; class HBufC16 * CServicesDB::ServiceStringLC(int, class TDes16 const &) const
+	?ServiceStringLC@CServicesDB@@QBEPAVHBufC16@@VTUid@@ABVTDes16@@@Z @ 8 NONAME ; class HBufC16 * CServicesDB::ServiceStringLC(class TUid, class TDes16 const &) const
+	?ServiceUidL@CServicesDB@@QBE?AVTUid@@H@Z @ 9 NONAME ; class TUid CServicesDB::ServiceUidL(int) const
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/services_db/Eabi/servicesdbU.DEF	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,15 @@
+EXPORTS
+	_ZN11CServicesDB4NewLEP15TResourceReader @ 1 NONAME
+	_ZN11CServicesDB5NewLCEP15TResourceReader @ 2 NONAME
+	_ZN11CServicesDBD0Ev @ 3 NONAME
+	_ZN11CServicesDBD1Ev @ 4 NONAME
+	_ZN11CServicesDBD2Ev @ 5 NONAME
+	_ZNK11CServicesDB11ServiceUidLEi @ 6 NONAME
+	_ZNK11CServicesDB13ServiceNameLCE4TUid @ 7 NONAME
+	_ZNK11CServicesDB13ServiceNameLCEi @ 8 NONAME
+	_ZNK11CServicesDB15ServiceStringLCE4TUidRK6TDes16 @ 9 NONAME
+	_ZNK11CServicesDB15ServiceStringLCEiRK6TDes16 @ 10 NONAME
+	_ZNK11CServicesDB5CountEv @ 11 NONAME
+	_ZTI11CServicesDB @ 12 NONAME DATA 12 ; #<TI>#
+	_ZTV11CServicesDB @ 13 NONAME DATA 20 ; #<VT>#
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/services_db/group/bld.inf	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2005-2006 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:  Build information file for project Service DB
+*
+*/
+
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+
+PRJ_MMPFILES
+services_db.mmp
+
+PRJ_TESTMMPFILES
+
+
+PRJ_TESTEXPORTS
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/services_db/group/services_db.mmp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,52 @@
+/*
+* Copyright (c) 2005-2006 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:  Project definition file for Services DB
+*
+*/
+
+
+
+#include <data_caging_paths.hrh>
+#include <platform_paths.hrh>  
+
+TARGET                  servicesdb.dll
+TARGETTYPE              DLL
+UID                     0x1000008d 0x10281B9F
+
+CAPABILITY              CAP_GENERAL_DLL DRM
+VENDORID                VID_DEFAULT
+
+// Define directories for the .def-files of WINSCW build.
+// IMPORTANT NOTICE:  The lines in the example that end with a backslash 
+// must have one space after the backslash.
+#if defined(ARMCC)
+deffile ../Eabi/ 
+#elif defined( WINSCW )
+deffile ../BWINS/ 
+#endif
+
+
+SOURCEPATH              ../src
+SOURCE                  services_db.cpp
+
+USERINCLUDE             ../inc
+
+// Default system include paths for middleware layer modules.
+APP_LAYER_SYSTEMINCLUDE
+
+LIBRARY                 euser.lib
+LIBRARY                 commonengine.lib
+LIBRARY                 bafl.lib  //TResourceReader
+
+//EXPORTUNFROZEN
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/defaultapplicationsettings/services_db/src/services_db.cpp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,230 @@
+/*
+* Copyright (c) 2005-2006 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:  Implements the Services DB API
+*
+*/
+
+
+#include <e32std.h>
+#include <bautils.h>
+#include <StringLoader.h>
+
+#include <services_db.h>
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CServicesDB::NewLC()
+//
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CServicesDB* CServicesDB::NewLC( TResourceReader* aResReader )
+    {
+    CServicesDB* self = new (ELeave) CServicesDB();
+    CleanupStack::PushL(self);
+    self->ConstructL(aResReader);
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CServicesDB::NewL()
+//
+//
+// ---------------------------------------------------------------------------
+//    
+EXPORT_C CServicesDB* CServicesDB::NewL( TResourceReader* aResReader )
+    {
+    CServicesDB* self = CServicesDB::NewLC(aResReader);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CServicesDB::CServicesDB()
+//
+//
+// ---------------------------------------------------------------------------
+//
+CServicesDB::CServicesDB()
+    {
+    //no implementation necessary
+    }
+
+// ---------------------------------------------------------------------------
+// CServicesDB::~CServicesDB()
+//
+//
+// ---------------------------------------------------------------------------
+//    
+EXPORT_C CServicesDB::~CServicesDB()
+    {
+    iServiceUids.Close();
+    iServiceNames.ResetAndDestroy();
+    iServiceLoc.ResetAndDestroy();
+    }
+
+// ---------------------------------------------------------------------------
+// The class is constructed by reading the data from the specified resource id into memory
+// ---------------------------------------------------------------------------
+//
+void CServicesDB::ConstructL( TResourceReader* aResReader )
+    {
+    TInt i;
+    TInt count = aResReader->ReadInt16();
+    for ( i = 0; i < count; i++ )
+        {
+        //read the service uid
+        TInt uid=aResReader->ReadInt32();
+        if(uid == 0)User::Leave(KErrArgument);
+        //read the service name
+        HBufC* service=aResReader->ReadHBufCL();
+        if(!service)User::Leave(KErrArgument);
+        //read the localized string
+        HBufC* serviceLoc=aResReader->ReadHBufCL();
+        if(!serviceLoc)User::Leave(KErrArgument);
+        
+        //append things
+        iServiceUids.Append(uid);
+        iServiceNames.Append(service);//takes ownership
+        iServiceLoc.Append(serviceLoc);//takes ownership
+        }
+    //done
+    }            
+
+// ---------------------------------------------------------------------------
+// Returns the number of available services 
+// (the number of services read from the resource during construction)
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CServicesDB::Count() const
+    {
+    return iServiceUids.Count();
+    }
+
+// ---------------------------------------------------------------------------
+// Function to return the Uid of a service (by index).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TUid CServicesDB::ServiceUidL(TInt aIndex) const
+    {
+    if(aIndex<0 || aIndex>=iServiceUids.Count())
+        User::Leave(KErrArgument);
+    return TUid::Uid(iServiceUids[aIndex]);
+    }
+    
+    
+// ---------------------------------------------------------------------------
+// Function to return the localized name associated with a service. If the returned 
+// strings accepts a parameter, this can be specified as aParam
+// ---------------------------------------------------------------------------
+//
+EXPORT_C HBufC* CServicesDB::ServiceStringLC(TInt aIndex, const TDes& aParam) const
+    {
+    TInt size=aParam.Size();
+    HBufC *string=NULL;
+    
+    //check parameters
+    if(aIndex<0 || aIndex>=iServiceUids.Count())
+        User::Leave(KErrArgument);
+    
+    //get the size of the new string
+    size+=iServiceLoc[aIndex]->Size();
+    //allocate the string
+    string = HBufC::NewLC(size);
+    //create string content
+    TPtr ptr=string->Des();
+    if(aParam.Size())
+        {
+        //we have something in aParam
+        //ptr.Format(*iServiceLoc[aIndex],&aParam);
+        StringLoader::Format(ptr,*iServiceLoc[aIndex],-1,aParam);
+        }
+    else
+        {
+        //nothing in aParam, just copy the localized string to string
+        ptr.Copy(*iServiceLoc[aIndex]);
+        }
+    //done, return
+    return string; //string is on the stack, too
+    }
+    
+// ---------------------------------------------------------------------------
+// Function to return the localized name associated with a service. If the returned 
+// strings accepts a parameter, this can be specified as aParam
+// ---------------------------------------------------------------------------
+//
+EXPORT_C HBufC* CServicesDB::ServiceStringLC(TUid aServiceUid, const TDes& aParam) const
+    {
+    HBufC* string=NULL;
+    TInt i;
+    
+    //look for the service UIDs
+    for(i=0; i<iServiceUids.Count(); i++)
+        {
+        if(iServiceUids[i] == aServiceUid.iUid)
+            {
+            string = ServiceStringLC(i,aParam);
+            break;//service found
+            }
+        }
+    if(!string)CleanupStack::PushL(string);//otherwise, string is already on the stack!
+    return string;
+    }
+    
+// ---------------------------------------------------------------------------
+// Function to return the generic name of a service. 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C HBufC* CServicesDB::ServiceNameLC(TInt aIndex) const
+    {
+    HBufC* string=NULL;
+    TInt size=0;
+     
+    //check parameters
+    if(aIndex<0 || aIndex>=iServiceUids.Count())
+        User::Leave(KErrArgument);
+    
+    //get the size of the new string
+    size=iServiceNames[aIndex]->Size();
+    //allocate the string
+    string = HBufC::NewLC(size);
+    //create string content
+    TPtr ptr=string->Des();
+    ptr.Copy(*iServiceNames[aIndex]);
+    return string;
+    }
+
+// ---------------------------------------------------------------------------
+// Function to return the generic name of a service. 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C HBufC* CServicesDB::ServiceNameLC(TUid aServiceUid) const
+    {
+    HBufC* string=NULL;
+    TInt i;
+    
+    //loc for the service UIDs
+    for(i=0; i<iServiceUids.Count(); i++)
+        {
+        if(iServiceUids[i] == aServiceUid.iUid)
+            {
+            string = ServiceNameLC(i);
+            break;//service found
+            }
+        }
+    if(!string)CleanupStack::PushL(string);//otherwise, string is already on the stack!
+    return string;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devmngt_plat/default_app_client_api/default_app_client_api.metaxml	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,18 @@
+<?xml version="1.0" ?>
+<api id="a5a5f7d02cd304f45dac9894b0154901" dataversion="2.0">
+  <name>Default App Client API</name>
+  <description>API for launching the Default App Server and allow the user to change the default app for Services &amp; MIMEs</description>
+  <type>c++</type>
+  <collection>DefaultApplicationSettings</collection>
+  <libs>
+    <lib name="defaultappclient.lib" />
+  </libs>
+  <release category="platform"/>
+  <attributes>
+     <!-- This indicates wether the api provedes separate html documentation -->
+     <!-- or is the additional documentation generated from headers. -->
+     <!-- If you are unsuere then the value is "no" -->
+     <htmldocprovided>no</htmldocprovided>
+     <adaptation>no</adaptation>
+  </attributes>
+</api>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devmngt_plat/default_app_client_api/group/bld.inf	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2006 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:  File that exports the files belonging to 
+:                Default App Client API
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+../inc/das_client.h     APP_LAYER_PLATFORM_EXPORT_PATH(das_client.h)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devmngt_plat/default_app_client_api/inc/das_client.h	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,168 @@
+/*
+* Copyright (c) 2005-2006 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:  Client interface to ask for setting the default application
+*
+*/
+
+
+
+#ifndef C_DEFAULTAPPCLIENT_H
+#define C_DEFAULTAPPCLIENT_H
+
+#include <e32def.h>
+#include <e32base.h>
+#include <aknserverapp.h>
+
+class RDefaultAppService; 
+ 
+ 
+/**
+ *  Client API for setting the default application.
+ *
+ *  This class defines the API that applications should use to trigger the launch of the
+ *  Default Application Server, that asks the user to select default applications for those
+ *  Service & MIME pairs for which the client application is a candidate.
+ *
+ *  A client application should first instantiate the service, using eithe NewL() or NewLC()
+ *  The client application can check first if the sercive is available in the system (by using 
+ *  the ServiceAvailable() function. The client application may also check if there is 
+ *  anything to display (if there is any Service & MIME that the client application supports for 
+ *  which there is at least another application supporting the pair). If there is no such pair,
+ *  then launching the server would display an empty list). This checking is performed using the 
+ *  PairsToDisplayL() function. 
+ *
+ *  After the above checkings are done, the client application can ask the server to change
+ *  defaults by calling the ChangeDefaultsL() function. 
+ *    
+ *
+ *  @lib defaultappclient.dll
+ *  @since S60 v5.0
+ */
+class CDefaultAppClient : public CBase 
+    {
+
+public:
+
+    /**  flags used to modify the service behaviour */
+    enum TFlags
+        {
+        EFlagNoObserver=1,
+        EFlagReserved1=2,
+        EFlagReserved2=4
+        };
+
+    /**
+     * Symbian OS two-phased constructor
+     * @return
+     */
+    IMPORT_C static CDefaultAppClient* NewL(MAknServerAppExitObserver* aObserver);
+
+    /**
+     * Symbian OS two-phased constructor
+     * @return
+     */
+    IMPORT_C static CDefaultAppClient* NewLC(MAknServerAppExitObserver* aObserver);
+
+    /**
+     * Destructor.
+     */
+    IMPORT_C virtual ~CDefaultAppClient();
+
+    /**
+     * Function to check if a server is present in the system. If the
+     * server is present, the subsequent functions should not fail due
+     * to server unavailability.
+     *
+     * @since S60 v5.0
+     * @return ETrue or EFalse, depending service/server availability
+     */
+    IMPORT_C static TBool ServiceAvailable( TInt& aErrorCode );
+    
+    /**
+     * Function to check the number of Service & MIME pairs the server would display if the 
+     * ChangeDefaultsL() would be called. The purpose of this function
+     * is to allow the client application not to display an entry for starting the server, in the 
+     * Options menu, in case the Server's list of Service & MIME pairs is empty.
+     * 
+     * Please note that the function may return a higher number than the actual number
+     * of pairs, because it does not check for MIMEs with System priority (that would not be 
+     * displayed).
+     *
+     * @since S60 v5.0
+     * @return the number of Service & MIME pairs the server would display
+     */
+    IMPORT_C TInt PairsToDisplayL();
+    
+    /**
+     * This function launches the server, as a chained application. The client application will not be
+     * available to the user until the server does not exit.
+     * When the server exits, the client application gains control again. The observer (if specified 
+     * during instantiation (NewL) is notified that the server has exited.
+     *
+     * @since S60 v5.0
+     * @param aFlags service flags 
+     */
+    IMPORT_C void ChangeDefaultsL( TInt aFlags = 0 );
+    
+
+private:
+
+    /**
+     * C++ default constructor.
+     */
+    CDefaultAppClient();
+
+    /**
+     * Symbian constructor.
+     */
+    void ConstructL( MAknServerAppExitObserver* aObserver );
+    
+    /**
+     * This function finds out the uid of the Default Application Server 
+     * (the application registered to handle the DefaultApp service)
+     *
+     * @since S60 v5.0
+     * @param aServerAppUid If parameter is non-NULL, it returns the Uid of the server there
+     */
+    static void GetServiceParamsL( TUid* aServerAppUid); 
+
+private: // data
+
+    /**
+     * The UID of the server application (we discover the server)
+     */
+    TUid iServerAppUid;
+
+    /**
+     * Pointer to the service class.
+     * Own.
+     */
+    RDefaultAppService *iService; 
+    
+    /**
+     * Pointer to the Observer to call after the operation initiated by
+     * ChangeDefaultsAsyncL() has finished.
+     * Not Owned.
+     */
+    MAknServerAppExitObserver* iObserver;
+    
+    /**
+     * Monitor object that calls the iObserver when the server has exited.
+     * Owned.
+     */
+    CApaServerAppExitMonitor* iMonitor;
+    
+    };
+
+#endif // C_DEFAULTAPPCLIENT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devmngt_plat/default_app_client_api/tsrc/DasClientApiTest/bwins/DasClientApiTestU.DEF	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,3 @@
+EXPORTS
+	?LibEntryL@@YAPAVCScriptBase@@AAVCTestModuleIf@@@Z @ 1 NONAME ; class CScriptBase * __cdecl LibEntryL(class CTestModuleIf &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devmngt_plat/default_app_client_api/tsrc/DasClientApiTest/eabi/DasClientApiTestU.def	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,3 @@
+EXPORTS
+	_Z9LibEntryLR13CTestModuleIf @ 1 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devmngt_plat/default_app_client_api/tsrc/DasClientApiTest/group/DasClientApiTest.bat	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,22 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description: 
+@rem
+
+copy C:\TestFramework\testframework_DasClientApiTest.ini C:\TestFramework\TestFramework.ini
+md e:\bctest
+md e:\bctest\Results
+
+ATSINTERFACE.EXE -testmodule testcombiner -config C:\TestFramework\uiDasClientApiTest.cfg
+copy c:\Logs\TestFramework\TestReport.txt e:\bctest\results\DAS_TEST.txt
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devmngt_plat/default_app_client_api/tsrc/DasClientApiTest/group/DasClientApiTest.iby	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2002-2005 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:  Personalisation application localised resource IBY
+*
+*/
+
+
+/*
+-----------------------------------------------------------------------------
+
+    DESCRIPTION
+
+    stiftestframework_DasClientApiTest.iby file specifies needed test components for
+    ROM image
+
+-----------------------------------------------------------------------------
+*/
+
+#ifndef DasClientApiTest__IBY
+#define DasClientApiTest__IBY
+
+file=ABI_DIR\BUILD_DIR\DasClientApiTest.DLL                SHARED_LIB_DIR\DasClientApiTest.DLL
+
+data=\epoc32\data\z\system\data\testframework_DasClientApiTest.ini       testframework\testframework_DasClientApiTest.ini
+
+data=\epoc32\data\z\system\data\tcDasClientApiTest.cfg               testframework\tcDasClientApiTest.cfg
+
+data=\epoc32\data\z\system\data\ui_DasClientApiTest.cfg               testframework\ui_DasClientApiTest.cfg
+
+#endif // DasClientApiTest__IBY
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devmngt_plat/default_app_client_api/tsrc/DasClientApiTest/group/DasClientApiTest.mmp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,61 @@
+/*
+* Copyright (c) 2002 - 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Project specification file of  DasClientApiTest
+*
+*/
+
+
+#include <data_caging_paths.hrh> 
+#include <platform_paths.hrh>
+
+TARGET          DasClientApiTest.dll
+TARGETTYPE      dll
+UID             0x1000008D 0x101FB3E3
+
+CAPABILITY      ALL -TCB
+
+DEFFILE         DasClientApiTest.def
+
+//START RESOURCE ../data/DasClientApiTest_reg.rss
+//	TARGETPATH  /private/10003a3f/apps
+//END
+
+#ifdef SBSV2
+USERINCLUDE     ../inc 
+
+    MW_LAYER_SYSTEMINCLUDE
+
+#else // SBSV2 not defined
+USERINCLUDE     ../inc 
+APP_LAYER_SYSTEMINCLUDE 
+    
+
+SOURCEPATH      ../src
+#endif // SBSV2
+
+SOURCE          DasClientApiTest.cpp
+SOURCE          DasClientApiTestblocks.cpp
+
+LIBRARY         euser.lib
+LIBRARY         stiftestinterface.lib
+LIBRARY         stiftestengine.lib
+LIBRARY         defaultappclient.lib//default application client
+LIBRARY			avkon.lib//MAknServerAppExitObserver
+LIBRARY         cone.lib 
+LIBRARY         eikcore.lib 
+LIBRARY			eiksrv.lib
+  
+LANG            SC
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devmngt_plat/default_app_client_api/tsrc/DasClientApiTest/group/DasClientApiTest.pkg	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,67 @@
+;
+; 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: Installation file for STIF
+;
+;
+;
+;
+; Installation file for STIF
+;
+
+; Languages
+&EN
+
+; Provide value for uid
+#{"STIF"},(0x00000000),1,1,0,TYPE=SA
+
+; Series60 product id for S60 3.0
+[0x101F7961], 0, 0, 0, {"Series60ProductID"}
+
+; Localised Vendor name
+%{"Nokia"}
+
+; Unique Vendor name
+:"Nokia"
+
+; Logo
+; None
+
+; Package signature - Optional
+; None
+
+; Start of Package body
+
+; Condition blocks
+; None
+
+; Options list
+; None
+
+; Install files
+"\epoc32\release\armv5\urel\DasClientApiTest.dll"   -   "!:\Sys\Bin\DasClientApiTest.dll"
+
+"\Epoc32\winscw\c\testframework\testframework_DasClientApiTest.ini"-"!:\TestFramework\testframework_DasClientApiTest.ini"
+"\Epoc32\winscw\c\testframework\tcDasClientApiTest.cfg"-"!:\TestFramework\tcDasClientApiTest.cfg"
+"\Epoc32\winscw\c\testframework\ui_DasClientApiTest.cfg"-"!:\TestFramework\ui_DasClientApiTest.cfg"
+"\epoc32\winscw\c\DasClientApiTest.bat"-"!:\DASTest.bat"
+; Embedded SIS 
+; None
+
+; End of Package body
+
+; PKG dependencies
+; None
+
+; PKG capabilities
+; None
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devmngt_plat/default_app_client_api/tsrc/DasClientApiTest/group/bld.inf	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,68 @@
+/*
+* Copyright (c) 2002 - 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Build information file for project DasClientApiTest
+*
+*/
+
+
+
+PRJ_PLATFORMS
+// specify the platforms your component needs to be built for here
+// defaults to WINS MARM so you can ignore this if you just build these
+DEFAULT
+
+#ifdef SBSV2
+    PRJ_TESTEXPORTS
+    DasClientApiTest.iby                              /epoc32/rom/include/DasClientApiTest.iby
+    
+    ../init/testframework_DasClientApiTest.ini        /epoc32/data/z/system/data/testframework.ini
+
+    ../conf/ui_DasClientApiTest.cfg                   /epoc32/winscw/c/TestFramework/ui_DasClientApiTest.cfg
+
+    ../conf/tcDasClientApiTest.cfg                    /epoc32/wins/c/TestFramework/tcDasClientApiTest.cfg
+
+#else // SBSV2 not defined
+    PRJ_TESTEXPORTS
+
+    ../init/testframework_DasClientApiTest.ini           /epoc32/wins/c/TestFramework/testframework.ini
+    ../init/testframework_DasClientApiTest.ini           /epoc32/winscw/c/TestFramework/testframework.ini
+
+    ../conf/ui_DasClientApiTest.cfg                      /epoc32/wins/c/TestFramework/ui_DasClientApiTest.cfg
+    ../conf/ui_DasClientApiTest.cfg                      /epoc32/data/z/system/data/ui_DasClientApiTest.cfg
+
+    ../conf/tcDasClientApiTest.cfg                       /epoc32/winscw/c/TestFramework/tcDasClientApiTest.cfg
+    ../conf/tcDasClientApiTest.cfg                       /epoc32/data/z/system/data/tcDasClientApiTest.cfg
+
+#endif // SBSV2
+
+DasClientApiTest.iby /epoc32/rom/include/DasClientApiTest.iby
+../init/testframework_DasClientApiTest.ini /epoc32/data/z/system/data/testframework.ini
+../init/testframework_DasClientApiTest.ini		/epoc32/winscw/c/testframework/testframework_DasClientApiTest.ini
+../conf/ui_DasClientApiTest.cfg /epoc32/winscw/c/TestFramework/ui_DasClientApiTest.cfg
+../conf/tcDasClientApiTest.cfg /epoc32/wins/c/TestFramework/tcDasClientApiTest.cfg
+ 
+PRJ_EXPORTS
+
+DasClientApiTest.bat		/epoc32/winscw/c/DasClientApiTest.bat
+
+//testframework_DasClientApiTest.ini		/epoc32/winscw/c/testframework/testframework_DasClientApiTest.ini
+//tcDasClientApiTest.cfg	/epoc32/winscw/c/testframework/tcDasClientApiTest.cfg
+//ui_DasClientApiTest.cfg	/epoc32/winscw/c/testframework/ui_DasClientApiTest.cfg
+
+PRJ_TESTMMPFILES
+DasClientApiTest.mmp
+
+PRJ_MMPFILES
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devmngt_plat/default_app_client_api/tsrc/DasClientApiTest/inc/CClientLauncher.h	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,76 @@
+/*
+* Copyright (c) 2002 - 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CCClientLauncher declaration.
+*
+*/
+
+#ifndef CCLIENTLAUNCHER_H
+#define CCLIENTLAUNCHER_H
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+#include <aknserverapp.h> 
+#include <aknappui.h> 
+
+// CLASS DECLARATION
+
+/**
+ *  CCClientLauncher
+ * 
+ */
+class CCClientLauncher : public CAknAppUi,public MAknServerAppExitObserver
+    {
+public:
+    // Constructors and destructor
+
+    /**
+     * Destructor.
+     */
+    ~CCClientLauncher();
+
+    /**
+     * Two-phased constructor.
+     */
+    static CCClientLauncher* NewL();
+    
+    /**
+     * Two-phased constructor.
+     */
+    static CCClientLauncher* NewLC();
+    
+public:
+    //function from CAknAppUi
+    void  ProcessCommandL (TInt aCommand);
+    
+private:
+    //function from MAknServerAppExitObserver
+    //handle the exit of the server.
+    void HandleServerAppExit(TInt aReason);
+    
+private:
+
+    /**
+     * Constructor for performing 1st stage construction
+     */
+    CCClientLauncher();
+
+    /**
+     * EPOC default constructor for performing 2nd stage construction
+     */
+    void ConstructL();
+
+    };
+
+#endif // CCLIENTLAUNCHER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devmngt_plat/default_app_client_api/tsrc/DasClientApiTest/inc/DasClientApiTest.h	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,170 @@
+/*
+* Copyright (c) 2005-2006 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:  Implementation of class CDasClientApiTest
+*
+*/
+
+
+#ifndef C_DASCLIENTAPITEST_H
+#define C_DASCLIENTAPITEST_H
+
+//  INCLUDES
+#include <StifLogger.h>
+#include <TestScripterInternal.h>
+#include <StifTestModule.h>
+#include <TestclassAssert.h>
+#include <aknserverapp.h> 
+#include <das_client.h>
+//
+#include <CClientLauncher.h>
+// MACROS
+#define TEST_CLASS_VERSION_MAJOR 0
+#define TEST_CLASS_VERSION_MINOR 0
+#define TEST_CLASS_VERSION_BUILD 0
+// User MACROS
+#define KErrGeneral     -2
+#define KFirstOption    1
+#define KSecondtOption  2
+
+//define client flags
+#define KFlagNoObserver     1
+#define KFlagReserved1      2
+#define KFlagReserved2      4
+// Logging path
+_LIT( KDasClientApiTestLogPath, "\\logs\\testframework\\DasClientApiTest\\" ); 
+// Log file
+_LIT( KDasClientApiTestLogFile, "DasClientApiTest.txt" ); 
+_LIT( KDasClientApiTestLogFileWithTitle, "DasClientApiTest_[%S].txt" );
+
+//
+/**
+*  CDasClientApiTest test class for STIF Test Framework TestScripter.
+*  @since S60 5.0
+*/
+
+NONSHARABLE_CLASS(CDasClientApiTest) : public CScriptBase/*,public MAknServerAppExitObserver*/
+    {
+public:  // Constructors and destructor
+
+    /**
+    * Two-phased constructor.
+    */
+    static CDasClientApiTest* NewL( CTestModuleIf& aTestModuleIf );
+
+    /**
+    * Destructor.
+    */
+    virtual ~CDasClientApiTest();
+    
+/*private:
+    //function from MAknServerAppExitObserver. is used to handle the exit of the server.
+    
+    void HandleServerAppExit(TInt aReason);*/
+
+public: // Functions from base classes
+
+    /**
+    * From CScriptBase Runs a script line.
+    * @since S60 5.0
+    * @param aItem Script line containing method name and parameters
+    * @return Symbian OS error code
+    */
+    virtual TInt RunMethodL( CStifItemParser& aItem );
+    
+private:
+
+    /**
+    * C++ default constructor.
+    */
+    CDasClientApiTest( CTestModuleIf& aTestModuleIf );
+
+    /**
+    * By default Symbian 2nd phase constructor is private.
+    */
+    void ConstructL();
+
+    /**
+    * Frees all resources allocated from test methods.
+    * @since S60 5.0
+    */
+    void Delete();
+
+    /**
+    * Test method.
+    * @since S60 5.0
+    * @param aItem Script line containing parameters.
+    * @return Symbian OS error code.
+    */
+    virtual TInt InitialClientL(const TInt aOption );
+    
+    virtual TInt CallClientNewLL( CStifItemParser& aItem );
+    
+    virtual TInt CallClientNewLCL( CStifItemParser& aItem );
+    
+    virtual TInt CallServiceAvailableL( CStifItemParser& aItem );
+    
+//    virtual TInt CallPairsToDisplayLL( CStifItemParser& aItem );
+    
+    virtual TInt CallChangeDefaultsLL( CStifItemParser& aItem );
+    /**
+     * Method used to log version of test class
+     */
+    void SendTestClassVersion();
+    
+        /**
+     * Turn off ScreenSaver
+     * @since S60 5.0
+     * @return Symbian OS error code.
+     */
+    void TurnOffScreenSaver();
+
+    /**
+     * Restore ScreenSaver
+     * @since S60 5.0
+     * @return Symbian OS error code.
+     */
+    void RestoreScreenSaver();
+
+
+    /**
+    * In this method NewLC is called.
+    * @since ?Series60_version
+    * @param aResReader Resource reader to get information from Resource file
+    * @return Symbian OS error code.
+    */
+    void CallNewlcL(  MAknServerAppExitObserver* aObserver );
+
+
+private:    // Data
+
+    /**
+     * ScreenSaver Property
+     */
+    TInt iOldScreenSaverProperty;
+    
+    /**
+     * ?description_of_pointer_member
+     * Not own.
+     */
+    //?type* ?member_name;
+    CDefaultAppClient* iClient;
+    
+    //
+    CCClientLauncher* iLauncher;
+    
+    };
+
+#endif      // C_DASCLIENTAPITEST_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devmngt_plat/default_app_client_api/tsrc/DasClientApiTest/src/DasClientApiTest.cpp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,181 @@
+/*
+* Copyright (c) 2005-2006 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:  Implementation of class CDasClientApiTest
+*
+*/
+
+
+// INCLUDE FILES
+#include <Stiftestinterface.h>
+#include <SettingServerClient.h>
+#include <ScreensaverInternalPSKeys.h>
+#include <e32property.h>
+
+#include "DasClientApiTest.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CDasClientApiTest::CDasClientApiTest
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CDasClientApiTest::CDasClientApiTest( CTestModuleIf& aTestModuleIf ):
+    CScriptBase( aTestModuleIf )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CDasClientApiTest::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CDasClientApiTest::ConstructL()
+    {
+    //Read logger settings to check whether test case name is to be
+    //appended to log file name.
+    RSettingServer settingServer;
+    TInt ret = settingServer.Connect();
+    if(ret != KErrNone)
+        {
+        User::Leave(ret);
+        }
+    // Struct to StifLogger settigs.
+    TLoggerSettings loggerSettings; 
+    // Parse StifLogger defaults from STIF initialization file.
+    ret = settingServer.GetLoggerSettings(loggerSettings);
+    if(ret != KErrNone)
+        {
+        User::Leave(ret);
+        } 
+    // Close Setting server session
+    settingServer.Close();
+
+    TFileName logFileName;
+    
+    if(loggerSettings.iAddTestCaseTitle)
+        {
+        TName title;
+        TestModuleIf().GetTestCaseTitleL(title);
+        logFileName.Format(KDasClientApiTestLogFileWithTitle, &title);
+        }
+    else
+        {
+        logFileName.Copy(KDasClientApiTestLogFile);
+        }
+
+    iLog = CStifLogger::NewL( KDasClientApiTestLogPath, 
+                          logFileName,
+                          CStifLogger::ETxt,
+                          CStifLogger::EFile,
+                          EFalse );
+    
+    SendTestClassVersion();
+    
+    TurnOffScreenSaver();
+    }
+
+// -----------------------------------------------------------------------------
+// CDasClientApiTest::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CDasClientApiTest* CDasClientApiTest::NewL( CTestModuleIf& aTestModuleIf )
+    {
+    CDasClientApiTest* self = new( ELeave ) CDasClientApiTest( aTestModuleIf );
+
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+
+    return self;
+
+    }
+
+// Destructor
+CDasClientApiTest::~CDasClientApiTest()
+    { 
+
+    // Delete resources allocated from test methods
+    Delete();
+
+    // Delete logger
+    delete iLog; 
+
+    }
+
+//-----------------------------------------------------------------------------
+// CDasClientApiTest::SendTestClassVersion
+// Method used to send version of test class
+//-----------------------------------------------------------------------------
+//
+void CDasClientApiTest::SendTestClassVersion()
+    {
+    TVersion moduleVersion;
+    moduleVersion.iMajor = TEST_CLASS_VERSION_MAJOR;
+    moduleVersion.iMinor = TEST_CLASS_VERSION_MINOR;
+    moduleVersion.iBuild = TEST_CLASS_VERSION_BUILD;
+
+    TFileName moduleName;
+    moduleName = _L( "DasClientApiTest.dll" );
+
+    TBool newVersionOfMethod = ETrue;
+    TestModuleIf().SendTestModuleVersion( moduleVersion, moduleName, 
+        newVersionOfMethod );
+    }
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+// -----------------------------------------------------------------------------
+// LibEntryL is a polymorphic Dll entry point.
+// Returns: CScriptBase: New CScriptBase derived object
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CScriptBase* LibEntryL( 
+    CTestModuleIf& aTestModuleIf ) // Backpointer to STIF Test Framework
+    {
+    return ( CScriptBase* ) CDasClientApiTest::NewL( aTestModuleIf );
+    }
+
+// -----------------------------------------------------------------------------
+// Turn off ScreenSaver
+// -----------------------------------------------------------------------------
+//
+void CDasClientApiTest::TurnOffScreenSaver()
+    {
+    //TInt Get(TUid aCategory, TUint aKey, TInt &aValue);
+    TInt err1 = RProperty::Get( KPSUidScreenSaver, KScreenSaverAllowScreenSaver, 
+        iOldScreenSaverProperty );
+    TInt err2 = RProperty::Set( KPSUidScreenSaver, KScreenSaverAllowScreenSaver, 
+        KScreenSaverAllowScreenSaver );    
+    RDebug::Printf( "screensaver property=%d err1=%d err2=%d\n", 
+        iOldScreenSaverProperty, err1, err2 );
+    }
+
+// -----------------------------------------------------------------------------
+// Restore ScreenSaver
+// -----------------------------------------------------------------------------
+//
+void CDasClientApiTest::RestoreScreenSaver()
+    {
+    RProperty::Set( KPSUidScreenSaver, KScreenSaverAllowScreenSaver, 
+        iOldScreenSaverProperty );
+    User::ResetInactivityTime();
+    }
+
+
+//  End of File
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devmngt_plat/default_app_client_api/tsrc/DasClientApiTest/src/DasClientApiTestblocks.cpp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,250 @@
+/*
+/*
+* Copyright (c) 2002 - 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  This cpp file has the functions to test Das Client API.
+*
+*/
+
+
+// [INCLUDE FILES]
+#include <e32svr.h>
+#include <StifParser.h>
+#include <Stiftestinterface.h>
+#include "DasClientApiTest.h"
+
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CDasClientApiTest::Delete
+// Delete here all resources allocated and opened from test methods. 
+// Called from destructor. 
+// -----------------------------------------------------------------------------
+//
+void CDasClientApiTest::Delete() 
+    { 
+    if( iLauncher )
+    	{
+        delete iLauncher;
+        iLauncher = NULL;
+    	}
+
+    if( iClient )
+    	{
+        delete iClient;
+        iClient = NULL;
+    	}
+    }
+
+// -----------------------------------------------------------------------------
+// CDasClientApiTest::RunMethodL
+// Run specified method. Contains also table of test mothods and their names.
+// -----------------------------------------------------------------------------
+//
+TInt CDasClientApiTest::RunMethodL( 
+    CStifItemParser& aItem ) 
+    {
+
+    static TStifFunctionInfo const KFunctions[] =
+        {  
+        // First string is the function name used in TestScripter script file.
+        // Second is the actual implementation member function. 
+        ENTRY( "CallClientNewLL", CDasClientApiTest::CallClientNewLL ),
+        ENTRY( "CallClientNewLCL", CDasClientApiTest::CallClientNewLCL ),
+        ENTRY( "CallServiceAvailableL", CDasClientApiTest::CallServiceAvailableL ),
+        ENTRY( "CallChangeDefaultsLL", CDasClientApiTest::CallChangeDefaultsLL ),
+        // [test cases entries]
+
+        };
+
+    const TInt count = sizeof( KFunctions ) / sizeof( TStifFunctionInfo );
+
+    return RunInternalL( KFunctions, count, aItem );
+
+    }
+
+// -----------------------------------------------------------------------------
+// CDasClientApiTest::CallNewlcL
+// This function is used because we can not TRAP CServicesDB::NewLC
+// -----------------------------------------------------------------------------
+//
+void CDasClientApiTest::CallNewlcL(  MAknServerAppExitObserver* aObserver )
+{ 
+   iClient = CDefaultAppClient::NewLC( aObserver );
+   CleanupStack::Pop( iClient );
+}
+
+// -----------------------------------------------------------------------------
+// CServicesDbApiTest::InitialClientL
+// This function is used to create CDefaultAppClient object. This function is used
+// to call CDefaultAppClient::NewL and CDefaultAppClient::NewLC functions. 
+// -----------------------------------------------------------------------------
+//
+TInt CDasClientApiTest::InitialClientL( TInt aOption )
+    {
+    //launcher of the client;
+    if( aOption == KFirstOption )
+        {
+        TRAPD( error, iClient = CDefaultAppClient::NewL( NULL ) );
+        if( KErrNone != error )
+            {
+            iLog->Log( _L( "=>CDefaultAppClient::NewL leaves" ) );
+            return error;
+            }
+        }
+    else
+        {
+        TRAPD( error1, CallNewlcL( NULL ) );
+        if( KErrNone != error1 )
+            {
+            iLog->Log( _L( "=>CDefaultAppClient::NewLC leaves" ) );
+            return error1;
+            }
+        }
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CServicesDbApiTest::CallClientNewLL
+// Is used to test CDefaultAppClient::NewL
+// -----------------------------------------------------------------------------
+TInt CDasClientApiTest::CallClientNewLL( CStifItemParser& /*aItem*/ )
+    {
+    TInt result;
+    
+    TRAPD( error, result = InitialClientL( KFirstOption ) );   
+    if( KErrNone != error )
+        {
+        iLog->Log( _L( "CDefaultAppClient object not created with NewL." ) ); 
+        return error;
+        }
+    else
+        {
+        if( KErrNone != result )
+            {
+            iLog->Log( _L( "CDefaultAppClient object not created with NewL." ) ); 
+            return result;
+            }
+        else
+        	{
+        	iLog->Log( _L( "CDefaultAppClient object created with NewL." ) ); 
+        	}
+        };
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CServicesDbApiTest::CallClientNewLCL
+// Is used to test CDefaultAppClient::NewLC
+// -----------------------------------------------------------------------------
+TInt CDasClientApiTest::CallClientNewLCL( CStifItemParser& /*aItem*/ )
+    {
+    TInt result;
+    TRAPD( error, result = InitialClientL( KSecondtOption ) );
+    if( KErrNone != error )
+        {
+        return error;
+        }
+    else
+        {
+        if( KErrNone != result )
+            {
+            return result;
+            }
+        }
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CServicesDbApiTest::CallServiceAvailableL
+// Is used to test CDefaultAppClient::ServiceAvailableL
+// -----------------------------------------------------------------------------
+TInt CDasClientApiTest::CallServiceAvailableL( CStifItemParser& /*aItem*/ )
+    {
+    //Initial the iClient
+    TInt result;
+    TRAPD( error, result = InitialClientL( KFirstOption ) );
+    if( KErrNone != error )
+        {
+        return error;
+        }
+    else
+        {
+        if( KErrNone != result )
+            {
+            return result;
+            }
+        };
+    //call the function 
+
+    TInt errcode;
+    TBool returnvalue;
+    TRAPD( callerror, returnvalue = CDefaultAppClient::ServiceAvailable( errcode ) );
+    if( KErrNone != callerror )
+        {
+        iLog->Log(_L( "Call function ServiceAvailable failed.The function leaves,the leace code is %d"), callerror );
+        return callerror;
+        }
+    else
+        {
+        if( returnvalue != KErrNone )
+            {
+            iLog->Log( _L( "The function returned sucessfully,But the service is not available. The error code is %d" ), errcode );
+            return errcode;
+            }
+        else
+            {
+            iLog->Log( _L( "The function ServiceAvailable called success, and the service is available! " ) );
+            }
+        }
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CServicesDbApiTest::CallChangeDefaultsLL
+// Is used to test CDefaultAppClient::ChangeDefaultsL
+// -----------------------------------------------------------------------------
+TInt CDasClientApiTest::CallChangeDefaultsLL( CStifItemParser& /*aItem*/ )
+    {
+    //
+    TInt result;
+    TRAPD( error, result = InitialClientL( KFirstOption ) );
+    if(KErrNone != error)
+        {
+        iLog->Log( _L( "Initial the iClient failed,the failed code is %d" ), error );
+        return error;
+        }
+    else
+        {
+        if( KErrNone != result )
+            {            
+            return result;
+            }
+        };
+    TRAPD( errorCall, iClient->ChangeDefaultsL() );
+    if( errorCall != KErrNone )
+        {
+        iLog->Log( _L( "Function ChangeDefaultsL is called failed. The failed code is %d" ), errorCall );
+        return errorCall;
+        }
+    else
+        {
+        iLog->Log( _L( "The Function is called successfully." ) );
+        }
+    return KErrNone;
+    }
+
+//
+//  [End of File]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devmngt_plat/group/bld.inf	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2006 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:  Includes all the Domain API specific bld.inf files, which 
+*                export files.
+*
+*/
+
+
+
+#include "../default_app_client_api/group/bld.inf"
+#include "../services_db_api/group/bld.inf"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devmngt_plat/services_db_api/group/bld.inf	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2006 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:  File that exports the files belonging to 
+:                Services DB API
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+../inc/services_db.rh     APP_LAYER_PLATFORM_EXPORT_PATH(services_db.rh)
+../inc/services_db.h     APP_LAYER_PLATFORM_EXPORT_PATH(services_db.h)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devmngt_plat/services_db_api/inc/services_db.h	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,146 @@
+/*
+* Copyright (c) 2005-2006 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:  Implementation of class CServicesDB
+*
+*/
+
+
+
+#ifndef SERVICES_DB_H
+#define SERVICES_DB_H
+
+#include <e32def.h>
+#include <e32base.h>
+
+class TResourceReader;
+ 
+/**
+ *  API for retrieving various localized strings associated with services.
+ *
+ *  This class receives a resource ID during construction (resource type is DAS_SERVICES)
+ *  and retrieves various info defined in this resource. 
+ *
+ *  @lib defaultappclient.dll
+ *  @since S60 v5.0
+ */
+class CServicesDB : public CBase
+    {
+
+public:
+    /**
+     * Symbian OS two-phased constructor
+     * @return
+     */
+    IMPORT_C static CServicesDB* NewL( TResourceReader* aResReader );
+    
+    /**
+     * Symbian OS two-phased constructor
+     * @return
+     */
+    IMPORT_C static CServicesDB* NewLC( TResourceReader* aResReader );
+
+    /**
+     * Destructor.
+     */
+    IMPORT_C ~CServicesDB();
+    
+public:
+
+    /**
+     * Returns the number of available services 
+     * (the number of services read from the resource during construction)
+     *
+     * @since S60 v5.0
+     * @return number of available services/elements
+     */
+    IMPORT_C TInt Count() const;
+    
+    /**
+     * Function to return the Uid of a service (by index).
+     *
+     * @since S60 v5.0
+     * @return the uid of the service (it leaves if aIndex is not a valid index)
+     */
+    IMPORT_C TUid ServiceUidL(TInt aIndex) const;
+    
+    /**
+     * Function to return the localized name associated with a service. If the returned 
+     * strings accepts a parameter, this can be specified as aParam
+     *
+     * @since S60 v5.0
+     * @param aIndex the index of the service
+     * @param aParam parameter for the localized string
+     * @return the localized name (it leaves if aIndex is not a valid index)
+     */
+    IMPORT_C HBufC* ServiceStringLC(TInt aIndex, const TDes& aParam) const;
+    
+    /**
+     * Function to return the localized name associated with a service. If the returned 
+     * strings accepts a parameter, this can be specified as aParam
+     *
+     * @since S60 v5.0
+     * @param aServiceUid the Uid of the service
+     * @param aParam parameter for the localized string
+     * @return the localized name (NULL, if the service is not found)
+     */
+    IMPORT_C HBufC* ServiceStringLC(TUid aServiceUid, const TDes& aParam) const;
+    
+    /**
+     * Function to return the generic name of a service. 
+     *
+     * @since S60 v5.0
+     * @param aIndex the index of the service
+     * @return the generic name of the service (it leaves if aIndex is not a valid index)
+     */
+    IMPORT_C HBufC* ServiceNameLC(TInt aIndex) const;
+    
+    /**
+     * Function to return the generic name of a service. 
+     *
+     * @since S60 v5.0
+     * @param aServiceUid the Uid of the service
+     * @return the generic name of the service (NULL, if the service is not found)
+     */
+    IMPORT_C HBufC* ServiceNameLC(TUid aServiceUid) const;
+    
+private:
+    
+    /**
+     * C++ default constructor.
+     */
+    CServicesDB();
+    
+    /**
+     * Symbian constructor.
+     */
+    void ConstructL( TResourceReader* aResReader );
+        
+private:
+    /**
+     * array of service Uids
+     */
+    RArray<TInt> iServiceUids;
+    
+    /**
+     * array of service names
+     */
+    RPointerArray<HBufC> iServiceNames;
+    
+    /**
+     * array of service localized names
+     */
+    RPointerArray<HBufC> iServiceLoc;
+    };
+
+#endif // SERVICES_DB_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devmngt_plat/services_db_api/inc/services_db.rh	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,44 @@
+/*
+* Copyright (c) 2005-2006 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:  Resource headers for project Services DB
+*
+*/
+
+
+#ifndef SERVICES_DB_RH
+#define SERVICES_DB_RH
+
+
+// ---------------------------------------------------------------------------
+// This structure defines a service entry: it holds the service uid,
+// service generic name, and service localized string
+// ---------------------------------------------------------------------------
+//
+STRUCT DAS_SERVICE_ENTRY
+    {
+    LONG service_uid;
+    LTEXT service_name;
+    LTEXT service_localized_name;
+    }
+
+// ---------------------------------------------------------------------------
+// This structure defines a list of service entries
+// ---------------------------------------------------------------------------
+//
+STRUCT DAS_SERVICES
+    {
+    STRUCT services[]; //Type is DAS_SERVICE_ENTRY
+    }
+
+#endif // SERVICES_DB_RH
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devmngt_plat/services_db_api/services_db_api.metaxml	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,18 @@
+<?xml version="1.0" ?>
+<api id="ae69ac471f1c896165c698e47987d2fd" dataversion="2.0">
+  <name>Services DB API</name>
+  <description>API for retrieving information about services: UID, generic name (in engineering English), localized name.</description>
+  <type>c++</type>
+  <collection>DefaultApplicationSettings</collection>
+  <libs>
+    <lib name="servicesdb.lib" />
+  </libs>
+  <release category="platform"/>
+  <attributes>
+     <!-- This indicates wether the api provedes separate html documentation -->
+     <!-- or is the additional documentation generated from headers. -->
+     <!-- If you are unsuere then the value is "no" -->
+     <htmldocprovided>no</htmldocprovided>
+     <adaptation>no</adaptation>
+  </attributes>
+</api>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devmngt_plat/services_db_api/tsrc/ServicesDbApiTest/Bmarm/ServicesDbApiTestU.DEF	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,3 @@
+EXPORTS
+	LibEntryL__FR13CTestModuleIf @ 1 NONAME R3UNUSED ; LibEntryL(CTestModuleIf &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devmngt_plat/services_db_api/tsrc/ServicesDbApiTest/Bwins/ServicesDbApiTestU.DEF	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,3 @@
+EXPORTS
+	?LibEntryL@@YAPAVCScriptBase@@AAVCTestModuleIf@@@Z @ 1 NONAME ; class CScriptBase * __cdecl LibEntryL(class CTestModuleIf &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devmngt_plat/services_db_api/tsrc/ServicesDbApiTest/EABI/ServicesDbApiTestU.def	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,3 @@
+EXPORTS
+	_Z9LibEntryLR13CTestModuleIf @ 1 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devmngt_plat/services_db_api/tsrc/ServicesDbApiTest/conf/ui_ServicesDbApiTest.cfg	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,304 @@
+###################################################################################
+#
+# This cfg file has tests for Services DB API
+# The resource file - ServicesDbApiTest.rss defined to test this api has the following services. 
+# The tests listed below are based on this resource file services
+#
+# RESOURCE DAS_SERVICES r_da_service_mime
+#    {
+#   services = 
+#        {
+#       DAS_SERVICE_ENTRY
+#            {
+#            service_uid = 0x101; // NOT A REAL UID - 257 
+#            service_name = "Open";
+#            service_localized_name = "Open Localized";
+#            },
+#        DAS_SERVICE_ENTRY
+#            {
+#            service_uid = 0x102; // NOT A REAL UID - 258
+#            service_name = "Upload";
+#            service_localized_name = "Upload Localized";
+#            },
+#        DAS_SERVICE_ENTRY
+#            {
+#            service_uid = 0x103; // NOT A REAL UID - 259
+#            service_name = "Print";
+#            service_localized_name = "Print Localized %U";
+#            }
+#        };
+#
+###################################################################################
+
+
+[Define]
+KFirstServiceIndex             0
+KSecondServiceIndex            1
+KThirdServiceIndex             2
+KNotAServiceInResourceIndex    10
+KFirstServiceUid               257
+KSecondServiceUid              258
+KThirdServiceUid               259
+KNotAServiceInResourceUid      260
+KErrGeneral                    -2
+KErrArgument                   -6
+[Enddefine]
+
+
+# This test case is for NewL
+# 1
+[Test]
+title Initialize Services DB 
+create ServicesDbApiTest foobar
+foobar InitializeSeviceDB 
+delete foobar
+[Endtest]
+
+# This test case is for NewLC
+# 2
+[Test]
+title Initialize on stack
+create ServicesDbApiTest foobar
+foobar InitializeonStackSeviceDB 
+delete foobar
+[Endtest]
+
+# Testing Count function 
+# 3 
+[Test]
+title CountSeviceDB
+create ServicesDbApiTest foobar
+foobar CountSeviceDB 
+delete foobar
+[Endtest]  
+
+######################################################################
+# Testing ServiceUidL function with different INDEX parameters 
+######################################################################
+# 4
+[Test]
+title Test ServiceUidL - No parameter
+create ServicesDbApiTest foobar
+allownextresult KErrGeneral
+foobar ServiceUidLSeviceDB 
+delete foobar
+[Endtest]  
+
+#5
+[Test]
+title Test ServiceUidL 0 INDEX
+create ServicesDbApiTest foobar
+foobar ServiceUidLSeviceDB KFirstServiceIndex
+delete foobar
+[Endtest] 
+
+#6 
+[Test]
+title Test ServiceUidL 1 INDEX
+create ServicesDbApiTest foobar
+foobar ServiceUidLSeviceDB KSecondServiceIndex
+delete foobar
+[Endtest] 
+
+#7
+[Test]
+title Test ServiceUidL 2 INDEX
+create ServicesDbApiTest foobar
+foobar ServiceUidLSeviceDB KThirdServiceIndex
+delete foobar
+[Endtest] 
+
+#8
+[Test]
+title Test ServiceUidL Wrong INDEX
+create ServicesDbApiTest foobar
+allownextresult KErrArgument
+foobar ServiceUidLSeviceDB KNotAServiceInResourceIndex
+delete foobar
+[Endtest] 
+
+#--------------------------------------------------------------------#
+
+######################################################################
+# Testing ServiceStringLC function with different INDEX parameters 
+######################################################################
+#9
+[Test]
+title Test ServiceStringLC with No Index
+create ServicesDbApiTest foobar
+allownextresult KErrGeneral
+foobar ServiceStringLCSeviceDB 
+delete foobar
+[Endtest]  
+
+#10
+[Test]
+title Test ServiceStringLC with  0 Index
+create ServicesDbApiTest foobar
+foobar ServiceStringLCSeviceDB KFirstServiceIndex
+delete foobar
+[Endtest]  
+
+#11
+[Test]
+title Test ServiceStringLC with  1 Index
+create ServicesDbApiTest foobar
+foobar ServiceStringLCSeviceDB KSecondServiceIndex
+delete foobar
+[Endtest]  
+
+#12
+[Test]
+title Test ServiceStringLC with  2 Index
+create ServicesDbApiTest foobar
+foobar ServiceStringLCSeviceDB KThirdServiceIndex
+delete foobar
+[Endtest]  
+
+#13
+[Test]
+title Test ServiceStringLC with  wrong Index
+create ServicesDbApiTest foobar
+allownextresult KErrArgument
+foobar ServiceStringLCSeviceDB KNotAServiceInResourceIndex
+delete foobar
+[Endtest]  
+
+#--------------------------------------------------------------------#
+
+######################################################################
+# Testing ServiceStringLC function with different UID as parameters 
+######################################################################
+#14
+[Test]
+title Test ServiceStringLC with No UID
+create ServicesDbApiTest foobar
+allownextresult KErrGeneral
+foobar ServiceStringLCUIDSeviceDB 
+delete foobar
+[Endtest]
+
+#15
+[Test]
+title Test ServiceStringLC with 257 UID (0x101)
+create ServicesDbApiTest foobar
+foobar ServiceStringLCUIDSeviceDB KFirstServiceUid
+delete foobar
+[Endtest]
+
+#16
+[Test]
+title Test ServiceStringLC with 258 UID (0x102)
+create ServicesDbApiTest foobar
+foobar ServiceStringLCUIDSeviceDB KSecondServiceUid
+delete foobar
+[Endtest]
+
+#17
+[Test]
+title Test ServiceStringLC with 258 UID (0x103)
+create ServicesDbApiTest foobar
+foobar ServiceStringLCUIDSeviceDB KThirdServiceUid
+delete foobar
+[Endtest]
+
+#18
+[Test]
+title Test ServiceStringLC with Wrong UID 
+create ServicesDbApiTest foobar
+foobar ServiceStringLCUIDSeviceDB KNotAServiceInResourceUid
+delete foobar
+[Endtest]
+
+#--------------------------------------------------------------------#
+
+######################################################################
+# Testing ServiceNameLC function with different INDEX as parameters 
+######################################################################
+#19
+[Test]
+title test ServiceNameLC with No parameter 
+allownextresult KErrGeneral
+create ServicesDbApiTest foobar
+foobar ServiceNameLCSeviceDB 
+delete foobar
+[Endtest]
+
+#20
+[Test]
+title test ServiceNameLC with 0 index
+create ServicesDbApiTest foobar
+foobar ServiceNameLCSeviceDB KFirstServiceIndex
+delete foobar
+[Endtest]
+
+#21
+[Test]
+title test ServiceNameLC with 1 index
+create ServicesDbApiTest foobar
+foobar ServiceNameLCSeviceDB KSecondServiceIndex
+delete foobar
+[Endtest]
+
+#22
+[Test]
+title test ServiceNameLC with 2 index
+create ServicesDbApiTest foobar
+foobar ServiceNameLCSeviceDB KThirdServiceIndex
+delete foobar
+[Endtest]
+
+#23
+[Test]
+title test ServiceNameLC with incorrect index
+create ServicesDbApiTest foobar
+allownextresult KErrArgument
+foobar ServiceNameLCSeviceDB KNotAServiceInResourceIndex
+delete foobar
+[Endtest]
+
+#--------------------------------------------------------------------#
+
+######################################################################
+# Testing ServiceNameLC function with different UID as parameters 
+######################################################################
+#24
+[Test]
+title test ServiceNameLC with No Parameter
+allownextresult KErrGeneral
+create ServicesDbApiTest foobar
+foobar ServiceNameLCuidSeviceDB 
+delete foobar
+[Endtest]
+
+#25
+[Test]
+title test ServiceNameLC with  257 UID (0x101)
+create ServicesDbApiTest foobar
+foobar ServiceNameLCuidSeviceDB KFirstServiceUid
+delete foobar
+[Endtest]
+
+#26
+[Test]
+title test ServiceNameLC with  258 UID (0x102)
+create ServicesDbApiTest foobar
+foobar ServiceNameLCuidSeviceDB KSecondServiceUid
+delete foobar
+[Endtest]
+
+#27
+[Test]
+title test ServiceNameLC with  259 UID (0x103)
+create ServicesDbApiTest foobar
+foobar ServiceNameLCuidSeviceDB KThirdServiceUid
+delete foobar
+[Endtest]
+
+#28
+[Test]
+title test ServiceNameLC with  260 UID
+create ServicesDbApiTest foobar
+foobar ServiceNameLCuidSeviceDB KNotAServiceInResourceUid
+delete foobar
+[Endtest]
Binary file devmngt_plat/services_db_api/tsrc/ServicesDbApiTest/data/ServicesDbApiTest.rsc has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devmngt_plat/services_db_api/tsrc/ServicesDbApiTest/group/ServicesDbApiTest.iby	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2002-2005 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:  Personalisation application localised resource IBY
+*
+*/
+
+
+#ifndef SERVICESDBAPITEST_IBY
+#define SERVICESDBAPITEST_IBY
+
+
+file=ABI_DIR/BUILD_DIR/ServicesDbApiTest.dll		SHARED_LIB_DIR/ServicesDbApiTest.dll
+data=DATAZ_/RESOURCE_FILES_DIR/ServicesDbApiTest.rsc   RESOURCE_FILES_DIR/ServicesDbApiTest.rsc
+
+#endif  // SERVICESDBAPITEST_IBY
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devmngt_plat/services_db_api/tsrc/ServicesDbApiTest/group/ServicesDbApiTest.mmp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,84 @@
+/*
+* Copyright (c) 2002 - 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Project specification file of  ServicesDbApiTest
+*
+*/
+
+
+#include <platform_paths.hrh>
+#include <data_caging_paths.hrh>
+
+TARGET          ServicesDbApiTest.dll
+TARGETTYPE      dll
+UID             0x1000008D 0x101FB3E3
+
+CAPABILITY      ALL -TCB
+
+VENDORID VID_DEFAULT
+
+
+//TARGETPATH      ?target_path
+DEFFILE         ServicesDbApiTest.def
+
+
+APP_LAYER_SYSTEMINCLUDE
+USERINCLUDE     ../inc 
+
+SOURCEPATH      ../src
+
+SOURCE          ServicesDbApiTest.cpp
+SOURCE          ServicesDbApiTestBlocks.cpp
+
+START RESOURCE          ServicesDbApiTest.rss
+HEADER
+TARGETPATH              RESOURCE_FILES_DIR
+END // RESOURCE
+
+
+LIBRARY         euser.lib
+LIBRARY         stiftestinterface.lib
+LIBRARY         stiftestengine.lib 
+LIBRARY         eikcore.lib 
+LIBRARY         efsrv.lib 
+LIBRARY         bafl.lib 
+LIBRARY         cone.lib 
+LIBRARY         servicesdb.lib 
+LIBRARY         commonengine.lib
+
+LANG            SC
+
+epocallowdlldata
+/*
+START WINS      
+?wins_specific_information
+END
+
+START MARM
+?marm_specific_information
+END
+*/
+// Other possible keywords:
+ 
+// DOCUMENT     ?file, that is not compiled, but added to MSVC project workspace (i.e. release notes)
+/*
+START BITMAP ?target
+TARGETPATH   ?emulated_path_on_target_machine
+HEADER
+SOURCE       ?color_depth ?source_bitmap
+END
+*/
+// DEFFILE ?filename
+// AIF ?filename
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devmngt_plat/services_db_api/tsrc/ServicesDbApiTest/group/ServicesDbApiTest.pkg	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,66 @@
+;
+; 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: Installation file for STIF
+;
+;
+;
+
+; Languages
+&EN
+
+; Provide value for uid
+#{"STIF"},(0x00000000),1,1,0,TYPE=SA
+
+; Series60 product id for S60 3.0
+[0x101F7961], 0, 0, 0, {"Series60ProductID"}
+
+; Localised Vendor name
+%{"Nokia"}
+
+; Unique Vendor name
+:"Nokia"
+
+; Logo
+; None
+
+; Package signature - Optional
+; None
+
+; Start of Package body
+
+
+; Condition blocks
+; None
+
+; Options list
+; None
+
+; Install files
+"/epoc32/release/armv5/urel/ServicesDbApiTest.dll"   -   "c:/Sys/Bin/ServicesDbApiTest.dll"
+"/epoc32/data/z/resource/ServicesDbApiTest.rsc"     -    "c:/resource/ServicesDbApiTest.rsc"
+;.cfg & .ini files
+"..\init\TestFramework_SDB.ini" - "!:\TestFramework\TestFramework_SDB.ini"
+"..\conf\ui_ServicesDbApiTest.cfg" - "!:\TestFramework\ui_ServicesDbApiTest.cfg"
+;"proeng_c.bat" - "!:\proeng.bat"
+
+; Embedded SIS 
+; None
+
+; End of Package body
+
+; PKG dependencies
+; None
+
+; PKG capabilities
+; None
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devmngt_plat/services_db_api/tsrc/ServicesDbApiTest/group/ServicesDbApiTest_DoxyFile.txt	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,222 @@
+# Doxyfile 1.4.1
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+PROJECT_NAME           = ServicesDbApiTest
+PROJECT_NUMBER         = 
+OUTPUT_DIRECTORY       = P:\ServicesDbApiTest\
+CREATE_SUBDIRS         = NO
+OUTPUT_LANGUAGE        = English
+USE_WINDOWS_ENCODING   = YES
+BRIEF_MEMBER_DESC      = YES
+REPEAT_BRIEF           = YES
+ABBREVIATE_BRIEF       = 
+ALWAYS_DETAILED_SEC    = NO
+INLINE_INHERITED_MEMB  = NO
+FULL_PATH_NAMES        = NO
+STRIP_FROM_PATH        = 
+STRIP_FROM_INC_PATH    = 
+SHORT_NAMES            = NO
+JAVADOC_AUTOBRIEF      = NO
+MULTILINE_CPP_IS_BRIEF = NO
+DETAILS_AT_TOP         = NO
+INHERIT_DOCS           = YES
+DISTRIBUTE_GROUP_DOC   = NO
+TAB_SIZE               = 8
+ALIASES                = 
+OPTIMIZE_OUTPUT_FOR_C  = YES
+OPTIMIZE_OUTPUT_JAVA   = NO
+SUBGROUPING            = YES
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+EXTRACT_ALL            = YES
+EXTRACT_PRIVATE        = NO
+EXTRACT_STATIC         = NO
+EXTRACT_LOCAL_CLASSES  = NO
+EXTRACT_LOCAL_METHODS  = NO
+HIDE_UNDOC_MEMBERS     = NO
+HIDE_UNDOC_CLASSES     = NO
+HIDE_FRIEND_COMPOUNDS  = NO
+HIDE_IN_BODY_DOCS      = NO
+INTERNAL_DOCS          = YES
+CASE_SENSE_NAMES       = YES
+HIDE_SCOPE_NAMES       = NO
+SHOW_INCLUDE_FILES     = YES
+INLINE_INFO            = YES
+SORT_MEMBER_DOCS       = YES
+SORT_BRIEF_DOCS        = NO
+SORT_BY_SCOPE_NAME     = NO
+GENERATE_TODOLIST      = NO
+GENERATE_TESTLIST      = NO
+GENERATE_BUGLIST       = NO
+GENERATE_DEPRECATEDLIST= YES
+ENABLED_SECTIONS       = 
+MAX_INITIALIZER_LINES  = 30
+SHOW_USED_FILES        = YES
+SHOW_DIRECTORIES       = YES
+FILE_VERSION_FILTER    = 
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+QUIET                  = NO
+WARNINGS               = YES
+WARN_IF_UNDOCUMENTED   = YES
+WARN_IF_DOC_ERROR      = YES
+WARN_NO_PARAMDOC       = NO
+WARN_FORMAT            = "$file:$line: $text"
+WARN_LOGFILE           = 
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+INPUT                  = P:\ServicesDbApiTest\
+FILE_PATTERNS          = *.h \
+                         *.rh \
+                         *.hrh
+RECURSIVE              = YES
+EXCLUDE                = 
+EXCLUDE_SYMLINKS       = NO
+EXCLUDE_PATTERNS       = 
+EXAMPLE_PATH           = 
+EXAMPLE_PATTERNS       = 
+EXAMPLE_RECURSIVE      = NO
+IMAGE_PATH             = 
+INPUT_FILTER           = 
+FILTER_PATTERNS        = 
+FILTER_SOURCE_FILES    = NO
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+SOURCE_BROWSER         = NO
+INLINE_SOURCES         = NO
+STRIP_CODE_COMMENTS    = YES
+REFERENCED_BY_RELATION = YES
+REFERENCES_RELATION    = YES
+VERBATIM_HEADERS       = YES
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+ALPHABETICAL_INDEX     = NO
+COLS_IN_ALPHA_INDEX    = 5
+IGNORE_PREFIX          = 
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+GENERATE_HTML          = NO
+HTML_OUTPUT            = html
+HTML_FILE_EXTENSION    = .html
+HTML_HEADER            = 
+HTML_FOOTER            = 
+HTML_STYLESHEET        = 
+HTML_ALIGN_MEMBERS     = YES
+GENERATE_HTMLHELP      = YES
+CHM_FILE               = 
+HHC_LOCATION           = 
+GENERATE_CHI           = NO
+BINARY_TOC             = YES
+TOC_EXPAND             = YES
+DISABLE_INDEX          = YES
+ENUM_VALUES_PER_LINE   = 4
+GENERATE_TREEVIEW      = YES
+TREEVIEW_WIDTH         = 250
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+GENERATE_LATEX         = NO
+LATEX_OUTPUT           = latex
+LATEX_CMD_NAME         = latex
+MAKEINDEX_CMD_NAME     = makeindex
+COMPACT_LATEX          = NO
+PAPER_TYPE             = a4wide
+EXTRA_PACKAGES         = 
+LATEX_HEADER           = 
+PDF_HYPERLINKS         = NO
+USE_PDFLATEX           = NO
+LATEX_BATCHMODE        = NO
+LATEX_HIDE_INDICES     = NO
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+GENERATE_RTF           = YES
+RTF_OUTPUT             = Doc
+COMPACT_RTF            = YES
+RTF_HYPERLINKS         = YES
+RTF_STYLESHEET_FILE    = 
+RTF_EXTENSIONS_FILE    = 
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+GENERATE_MAN           = NO
+MAN_OUTPUT             = man
+MAN_EXTENSION          = .3
+MAN_LINKS              = NO
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+GENERATE_XML           = NO
+XML_OUTPUT             = xml
+XML_SCHEMA             = 
+XML_DTD                = 
+XML_PROGRAMLISTING     = YES
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+GENERATE_AUTOGEN_DEF   = NO
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+GENERATE_PERLMOD       = NO
+PERLMOD_LATEX          = NO
+PERLMOD_PRETTY         = YES
+PERLMOD_MAKEVAR_PREFIX = 
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor   
+#---------------------------------------------------------------------------
+ENABLE_PREPROCESSING   = YES
+MACRO_EXPANSION        = YES
+EXPAND_ONLY_PREDEF     = NO
+SEARCH_INCLUDES        = YES
+INCLUDE_PATH           = 
+INCLUDE_FILE_PATTERNS  = 
+PREDEFINED             = NONSHARABLE_CLASS
+EXPAND_AS_DEFINED      = 
+SKIP_FUNCTION_MACROS   = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references   
+#---------------------------------------------------------------------------
+TAGFILES               = 
+GENERATE_TAGFILE       = 
+ALLEXTERNALS           = NO
+EXTERNAL_GROUPS        = YES
+PERL_PATH              = /usr/bin/perl
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool   
+#---------------------------------------------------------------------------
+CLASS_DIAGRAMS         = YES
+HIDE_UNDOC_RELATIONS   = YES
+HAVE_DOT               = NO
+CLASS_GRAPH            = YES
+COLLABORATION_GRAPH    = YES
+GROUP_GRAPHS           = YES
+UML_LOOK               = NO
+TEMPLATE_RELATIONS     = YES
+INCLUDE_GRAPH          = YES
+INCLUDED_BY_GRAPH      = YES
+CALL_GRAPH             = NO
+GRAPHICAL_HIERARCHY    = YES
+DIRECTORY_GRAPH        = YES
+DOT_IMAGE_FORMAT       = png
+DOT_PATH               = 
+DOTFILE_DIRS           = 
+MAX_DOT_GRAPH_WIDTH    = 1024
+MAX_DOT_GRAPH_HEIGHT   = 1024
+MAX_DOT_GRAPH_DEPTH    = 0
+DOT_TRANSPARENT        = NO
+DOT_MULTI_TARGETS      = NO
+GENERATE_LEGEND        = YES
+DOT_CLEANUP            = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine   
+#---------------------------------------------------------------------------
+SEARCHENGINE           = NO
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devmngt_plat/services_db_api/tsrc/ServicesDbApiTest/group/ServicesDbApiTest_nrm.mmp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,84 @@
+/*
+* Copyright (c) 2002 - 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Project specification file of  ServicesDbApiTest
+*
+*/
+
+
+#include <platform_paths.hrh>
+#include <data_caging_paths.hrh>
+
+TARGET          ServicesDbApiTest.dll
+TARGETTYPE      dll
+UID             0x1000008D 0x101FB3E3
+
+CAPABILITY      ALL -TCB
+
+VENDORID VID_DEFAULT
+
+
+//TARGETPATH      ?target_path
+DEFFILE         ServicesDbApiTest.def
+
+
+APP_LAYER_SYSTEMINCLUDE
+USERINCLUDE     ../inc 
+
+SOURCEPATH      ../src
+
+SOURCE          ServicesDbApiTest.cpp
+SOURCE          ServicesDbApiTestBlocks.cpp
+
+START RESOURCE          ServicesDbApiTest.rss
+HEADER
+TARGETPATH              RESOURCE_FILES_DIR
+END // RESOURCE
+
+
+LIBRARY         euser.lib
+LIBRARY         stiftestinterface.lib
+LIBRARY         stiftestengine.lib 
+LIBRARY         eikcore.lib 
+LIBRARY         efsrv.lib 
+LIBRARY         bafl.lib 
+LIBRARY         cone.lib 
+LIBRARY         servicesdb.lib 
+LIBRARY         commonengine.lib
+
+LANG            SC
+
+epocallowdlldata
+/*
+START WINS      
+?wins_specific_information
+END
+
+START MARM
+?marm_specific_information
+END
+*/
+// Other possible keywords:
+ 
+// DOCUMENT     ?file, that is not compiled, but added to MSVC project workspace (i.e. release notes)
+/*
+START BITMAP ?target
+TARGETPATH   ?emulated_path_on_target_machine
+HEADER
+SOURCE       ?color_depth ?source_bitmap
+END
+*/
+// DEFFILE ?filename
+// AIF ?filename
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devmngt_plat/services_db_api/tsrc/ServicesDbApiTest/group/bld.inf	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,62 @@
+/*
+* Copyright (c) 2002 - 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Build information file for project ServicesDbApiTest
+*
+*/
+
+
+
+PRJ_PLATFORMS
+// specify the platforms your component needs to be built for here
+// defaults to WINS MARM so you can ignore this if you just build these
+DEFAULT
+
+PRJ_TESTEXPORTS
+// NOTE: If using ARS requirements all export operations should be done under this.
+// 'abld test export'
+
+
+PRJ_EXPORTS
+// Specify the source file followed by its destination here
+// copy will be used to copy the source file to its destination
+// If there's no destination then the source file will be copied
+// to the same name in /epoc32/include
+// Example: 
+/*
+/agnmodel/inc/AGMCOMON.H
+*/
+//IBY file
+
+
+PRJ_TESTMMPFILES
+ServicesDbApiTest.mmp
+
+PRJ_MMPFILES
+ServicesDbApiTest_nrm.mmp
+
+// Specify the .mmp files required for building the important component
+// releasables.
+//
+// Specify "tidy" if the component you need to build doesn't need to be
+// released. Specify "ignore" if the MMP file exists but should be
+// ignored.
+// Example:
+/*
+/agnmodel/group/agnmodel.mmp
+#if defined(MARM)
+/agnmodel/group/agsvexe.mmp
+#endif
+*/
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devmngt_plat/services_db_api/tsrc/ServicesDbApiTest/group/proeng_c.bat	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,23 @@
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0""
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description: Copy file batch 
+rem
+
+copy C:\TestFramework\testframework_ProEngWrapAPI.ini C:\TestFramework\TestFramework.ini
+md e:\BCTest
+md e:\BCTest\Results
+
+ATSINTERFACE.EXE -testmodule testscripter -config C:\TestFramework\ProEngWrapAPI.cfg
+copy c:\Logs\TestFramework\TestReport.txt e:\BCTest\results\SP_ProEngWrapAPI.txt
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devmngt_plat/services_db_api/tsrc/ServicesDbApiTest/group/proeng_z.bat	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,25 @@
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0""
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description: Copy file batch
+rem
+
+copy z:\TestFramework\testframework_ProEngWrapAPI.ini C:\TestFramework\TestFramework.ini
+md e:\BCTest
+md e:\BCTest\Results
+
+ATSINTERFACE.EXE -testmodule testscripter -config C:\TestFramework\ProEngWrapAPI.cfg
+copy c:\Logs\TestFramework\TestReport.txt e:\BCTest\results\SP_ProEngWrapAPI.txt
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devmngt_plat/services_db_api/tsrc/ServicesDbApiTest/inc/ServicesDbApiTest.h	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,264 @@
+/*
+* Copyright (c) 2002 - 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Implementation of class CServicesDbApiTest
+*
+*/
+
+
+
+#ifndef SERVICESDBAPITEST_H
+#define SERVICESDBAPITEST_H
+
+//  INCLUDES
+#include <StifLogger.h>
+#include <TestScripterInternal.h>
+#include <StifTestModule.h>
+#include <TestclassAssert.h>
+#include <services_db.h>
+#include <ConeResLoader.h>
+#include <data_caging_path_literals.hrh>
+#include <StringLoader.h>
+#include <barsread.h>
+#include <eikenv.h>
+
+
+
+// MACROS
+#define TEST_CLASS_VERSION_MAJOR 0
+#define TEST_CLASS_VERSION_MINOR 0
+#define TEST_CLASS_VERSION_BUILD 0
+
+// Logging path
+_LIT( KServicesDbApiTestLogPath, "\\logs\\testframework\\ServicesDbApiTest\\" ); 
+// Log file
+_LIT( KServicesDbApiTestLogFile, "ServicesDbApiTest.txt" ); 
+_LIT( KServicesDbApiTestLogFileWithTitle, "ServicesDbApiTest_[%S].txt" );
+
+_LIT(KEmptyString,"");
+
+// FORWARD DECLARATIONS
+class CServicesDbApiTest;
+
+
+//Constants
+const TInt KNoOfServices = 3; // This is the number of services listed in resource file. 
+const TInt KFirstOption = 0;
+const TInt KSecondOption = 1;
+const TInt KFirstServiceIndex = 0;
+const TInt KSecondServiceIndex = 1;
+const TInt KThirdServiceIndex=2;
+const TInt KFirstServiceUid =   257;
+const TInt KSecondServiceUid = 258;
+const TInt KThirdServiceUid  =  259;
+const TInt KBufSize = 128;
+
+// CLASS DECLARATION
+
+/**
+*  CServicesDbApiTest test class for STIF Test Framework TestScripter.
+*  This class is written to test Services DB API. 
+*
+*  @lib ServicesDbApiTest.lib
+*  @since ?Series60_version
+*/
+NONSHARABLE_CLASS(CServicesDbApiTest) : public CScriptBase
+    {
+    public:  // Constructors and destructor
+
+        /**
+        * Two-phased constructor.
+        */
+        static CServicesDbApiTest* NewL( CTestModuleIf& aTestModuleIf );
+
+        /**
+        * Destructor.
+        */
+        virtual ~CServicesDbApiTest();
+
+ 
+    public: // Functions from base classes
+
+        /**
+        * From CScriptBase Runs a script line.
+        * @since ?Series60_version
+        * @param aItem Script line containing method name and parameters
+        * @return Symbian OS error code
+        */
+        virtual TInt RunMethodL( CStifItemParser& aItem );
+
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CServicesDbApiTest( CTestModuleIf& aTestModuleIf );
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+        /**
+        * Frees all resources allocated from test methods.
+        * @since ?Series60_version
+        */
+        void Delete();
+
+        /**
+        * Test methods are listed below. 
+        */
+        
+        /**
+         * Method used to log version of test class
+         */
+        void SendTestClassVersion();
+
+        //[TestMethods]
+        
+        /**
+        * Creates CServicesDB object
+        * @since ?Series60_version
+        * @param aOption Option to create CServicesDB object using NewL or NewLC
+        * @return Symbian OS error code.
+        */
+        TInt CreateSeviceDBL(TInt aOption);  
+        
+        /**
+        * In this method NewLC is called.
+        * @since ?Series60_version
+        * @param aResReader Resource reader to get information from Resource file
+        * @return Symbian OS error code.
+        */
+        void CallNewlcL(  TResourceReader aResReader );
+        
+        /**
+        * This method is used to test CServicesDB::NewL
+        * @since ?Series60_version
+        * @param No parameters required
+        * @return Symbian OS error code.
+        */
+        TInt InitializeSeviceDB( );
+        
+        /**
+        * This method is used to test CServicesDB::NewLC
+        * @since ?Series60_version
+        * @param No parameters required
+        * @return Symbian OS error code.
+        */
+        TInt InitializeonStackSeviceDB( );
+        
+        /**
+        * This method is used to test CServicesDB::Count
+        * @since ?Series60_version
+        * @param No parameters required
+        * @return Symbian OS error code.
+        */
+        TInt CountSeviceDB();
+        
+        /**
+        * This method is used to test CServicesDB::ServiceUidL
+        * @since ?Series60_version
+        * @param aItem Script line containing parameters.
+        * @return Symbian OS error code.
+        */
+        TInt ServiceUidLSeviceDB( CStifItemParser& aItem );
+        
+        /**
+        * This method is used to test CServicesDB::ServiceStringLC
+        * with Index as parameter.
+        * @since ?Series60_version
+        * @param aItem Script line containing parameters.
+        * @return Symbian OS error code.
+        */
+        TInt ServiceStringLCSeviceDB( CStifItemParser& aItem );
+        
+        /**
+        * This method is used to test CServicesDB::ServiceStringLC
+        * with UID as parameter
+        * @since ?Series60_version
+        * @param aItem Script line containing parameters.
+        * @return Symbian OS error code.
+        */
+        TInt ServiceStringLCuidSeviceDB( CStifItemParser& aItem );
+        
+        /**
+        * This method is used to test CServicesDB::ServiceNameLC
+        * with Index as parameter
+        * @since ?Series60_version
+        * @param aItem Script line containing parameters.
+        * @return Symbian OS error code.
+        */
+        TInt ServiceNameLCSeviceDB( CStifItemParser& aItem );
+        
+        /**
+        * This method is used to test CServicesDB::ServiceNameLC
+        * with UID as parameter
+        * @since ?Series60_version
+        * @param aItem Script line containing parameters.
+        * @return Symbian OS error code.
+        */
+        TInt ServiceNameLCuidSeviceDB( CStifItemParser& aItem );
+        
+        /**
+        * This is method encapsulates ServiceStringLC. 
+        * This method can be TRAPD and used to help in testing ServiceStringLC
+        * @since ?Series60_version
+        * @param aIndex the index of the service
+        * @param aParam parameter for the localized string
+        * @return Symbian OS error code.
+        */
+        TInt CallServiceStringLCSeviceDBL(TInt aIndex,const TDes& aParam );
+        
+        /**
+        * This is method encapsulates ServiceStringLC. 
+        * This method can be TRAPD and used to help in testing ServiceStringLC
+        * @since ?Series60_version
+        * @param aServiceUid the Uid of the service
+        * @param aParam parameter for the localized string
+        * @return Symbian OS error code.
+        */
+        TInt CallServiceStringLCuidSeviceDBL( TUid aServiceUid, const TDes& aParam);
+        
+        /**
+        * This is method encapsulates ServiceNameLC. 
+        * This method can be TRAPD and used to help in testing ServiceNameLC
+        * @since ?Series60_version
+        * @param aIndex the index of the service
+        * @return Symbian OS error code.
+        */
+        TInt CallServiceNameLCSeviceDBL(TInt aIndex);
+        
+        /**
+        * This is method encapsulates ServiceNameLC. 
+        * This method can be TRAPD and used to help in testing ServiceNameLC
+        * @since ?Series60_version
+        * @param aServiceUid the Uid of the service
+        * @return Symbian OS error code.
+        */
+        TInt CallServiceNameLCuidSeviceDBL( TUid aServiceUid );
+        
+        
+    private:    // Data
+        
+        // This is the pointer to object of the class being tested
+        // Through this pointer all the Exported methods are tested. 
+        CServicesDB *iServicesDB;
+    
+        
+    };
+
+#endif      // SERVICESDBAPITEST_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devmngt_plat/services_db_api/tsrc/ServicesDbApiTest/init/TestFramework_SDB.ini	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,200 @@
+#
+# This is STIF initialization file
+# Comment lines start with '#'-character.
+# See STIF TestFramework users guide.doc for instructions
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+# Set following test engine settings:
+#	- Set Test Reporting mode. TestReportMode's possible values are:
+#		+ 'Summary': Summary of the tested test cases.
+#		+ 'Environment': Hardware and software info.
+#		+ 'TestCases': Test case report.
+#		+ 'FullReport': Set of all above ones.
+#		+ Example 'TestReportMode= Summary TestCases'
+#
+# 	- CreateTestReport setting controls report creation mode
+#		+ YES, Test report will created.
+#		+ NO, No Test report.
+#
+# 	- File path indicates the base path of the test report.
+# 	- File name indicates the name of the test report.
+#
+# 	- File format indicates the type of the test report.
+#		+ TXT, Test report file will be txt type, for example 'TestReport.txt'.
+#		+ HTML, Test report will be html type, for example 'TestReport.html'.
+#   + XML, Test report will be xml type, for example 'TestReport.xml'.
+#          Note, that xml format is available only when output is set to FILE.
+#
+# 	- File output indicates output source of the test report.
+#		+ FILE, Test report logging to file.
+#		+ RDEBUG, Test report logging to using rdebug.
+#
+# 	- File Creation Mode indicates test report overwriting if file exist.
+#		+ OVERWRITE, Overwrites if the Test report file exist.
+#		+ APPEND, Continue logging after the old Test report information if
+#                 report exist.
+# 	- Sets a device reset module's dll name(Reboot).
+#		+ If Nokia specific reset module is not available or it is not correct one
+#		  StifHWResetStub module may use as a template for user specific reset
+#		  module.
+# 	- Sets STIF test measurement disable options. e.g. pluging1 and pluging2 disablation
+#		DisableMeasurement= stifmeasurementplugin01 stifmeasurementplugin02
+#
+
+[Engine_Defaults]
+
+TestReportMode= FullReport    # Possible values are: 'Empty', 'Summary', 'Environment',
+                                                     'TestCases' or 'FullReport'
+
+CreateTestReport= YES         # Possible values: YES or NO
+
+TestReportFilePath= C:\LOGS\TestFramework\
+TestReportFileName= TestReport
+
+TestReportFormat= TXT         # Possible values: TXT, HTML or XML
+TestReportOutput= FILE        # Possible values: FILE or RDEBUG
+TestReportFileCreationMode= OVERWRITE # Possible values: OVERWRITE or APPEND
+
+DeviceResetDllName= StifResetForNokia.dll # e.g. 'StifHWResetStub.dll' for user specific reseting
+
+DisableMeasurement= stifmeasurementdisablenone  # Possible values are:
+              # 'stifmeasurementdisablenone', 'stifmeasurementdisableall'
+              # 'stifmeasurementplugin01', 'stifmeasurementplugin02',
+              # 'stifmeasurementplugin03', 'stifmeasurementplugin04',
+              # 'stifmeasurementplugin05' or 'stifbappeaprofiler'
+
+Timeout= 0                    # Default timeout value for each test case. In milliseconds
+UITestingSupport= YES        # Possible values: YES or NO
+#SeparateProcesses= YES       # Possible values: YES or NO (default: NO)
+[End_Defaults]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+# Module configurations start
+# Modules are added between module tags
+# tags. Module name is specified after ModuleName= tag, like
+# ModuleName= XXXXXXXXX
+# Modules might have initialisation file, specified as
+# IniFile= c:\testframework\YYYYYY
+# Modules might have several configuration files, like
+# TestCaseFile= c:\testframework\NormalCases.txt
+# TestCaseFile= c:\testframework\SmokeCases.txt
+# TestCaseFile= c:\testframework\ManualCases.txt
+
+# (TestCaseFile is synonym for old term ConfigFile)
+
+# Following case specifies demo module settings. Demo module
+# does not read any settings from file, so tags 
+# IniFile and TestCaseFile are not used.
+# In the simplest case it is enough to specify only the
+# name of the test module when adding new test module
+
+[New_Module]
+ModuleName= testscripter
+TestCaseFile= c:\testframework\ui_ServicesDbApiTest.cfg
+[End_Module]
+
+
+# Load testmoduleXXX, optionally with initialization file and/or test case files
+#[New_Module]
+#ModuleName= testmodulexxx
+
+#TestModuleXXX used initialization file
+#IniFile= c:\testframework\init.txt
+
+#TestModuleXXX used configuration file(s)
+#TestCaseFile= c:\testframework\testcases1.cfg
+#TestCaseFile= c:\testframework\testcases2.cfg
+#TestCaseFile= c:\testframework\manualtestcases.cfg
+
+#[End_Module]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+# Set STIF logging overwrite parameters for Logger.
+# 	Hardware and emulator environment logging path and styles can
+# 	be configured from here to overwrite the Logger's implemented values.
+#	
+#	Settings description:
+#	- Indicates option for creation log directory/directories. If log directory/directories
+#         is/are not created by user they will make by software.
+#		+ YES, Create log directory/directories if not allready exist.
+#		+ NO, Log directory/directories not created. Only created one is used.
+#
+#	- Overwrite emulator path setting.
+#		+ Example: If 'EmulatorBasePath= C:\LOGS\TestFramework\' and in code is defined 
+#		           Logger's path 'D:\\LOGS\\Module\\' with those definition the path
+#		           will be 'C:\LOGS\TestFramework\LOGS\Module\'
+#
+#	- Overwrite emulator's logging format.
+#		+ TXT, Log file(s) will be txt type(s), for example 'Module.txt'.
+#		+ HTML, Log file(s) will be html type(s), for example 'Module.html'.
+#
+#	- Overwrited emulator logging output source.
+#		+ FILE, Logging to file(s).
+#		+ RDEBUG, Logging to using rdebug(s).
+#
+#	- Overwrite hardware path setting (Same description as above in emulator path).
+#	- Overwrite hardware's logging format(Same description as above in emulator format).
+#	- Overwrite hardware's logging output source(Same description as above in emulator output).
+#
+#	- File Creation Mode indicates file overwriting if file exist.
+#		+ OVERWRITE, Overwrites if file(s) exist.
+#		+ APPEND, Continue logging after the old logging information if file(s) exist.
+#
+#	- Will thread id include to the log filename.
+#		+ YES, Thread id to log file(s) name, Example filename 'Module_b9.txt'.
+#		+ NO, No thread id to log file(s), Example filename 'Module.txt'.
+#
+#	- Will time stamps include the to log file.
+#		+ YES, Time stamp added to each line in log file(s). Time stamp is 
+#                 for example'12.Nov.2003 115958    LOGGING INFO'
+#		+ NO, No time stamp(s).
+#
+#	- Will line breaks include to the log file.
+#		+ YES, Each logging event includes line break and next log event is in own line.
+#		+ NO, No line break(s).
+#
+#	- Will event ranking include to the log file.
+#		+ YES, Event ranking number added to each line in log file(s). Ranking number
+#                 depends on environment's tics, for example(includes time stamp also)
+#                 '012   12.Nov.2003 115958    LOGGING INFO'
+#		+ NO, No event ranking.
+#
+#	- Will write log file in unicode format.
+#		+ YES, Log file will be written in unicode format
+#		+ NO, Log will be written as normal, not unicode, file.
+#
+
+[Logger_Defaults]
+
+#NOTE: If you want to set Logger using next setting(s) remove comment(s)'#'
+#NOTE: TestEngine and TestServer logging settings cannot change here
+
+#CreateLogDirectories= YES    # Possible values: YES or NO
+
+#EmulatorBasePath= C:\LOGS\TestFramework\
+#EmulatorFormat= HTML         # Possible values: TXT or HTML
+#EmulatorOutput= FILE         # Possible values: FILE or RDEBUG
+
+#HardwareBasePath= D:\LOGS\TestFramework\
+#HardwareFormat= HTML         # Possible values: TXT or HTML
+#HardwareOutput= FILE         # Possible values: FILE or RDEBUG
+
+#FileCreationMode= OVERWRITE  # Possible values: OVERWRITE or APPEND
+
+#ThreadIdToLogFile= YES       # Possible values: YES or NO
+#WithTimeStamp= YES           # Possible values: YES or NO
+#WithLineBreak= YES           # Possible values: YES or NO
+#WithEventRanking= YES        # Possible values: YES or NO
+
+#FileUnicode= YES             # Possible values: YES or NO
+#AddTestCaseTitle= YES        # Possible values: YES or NO
+[End_Logger_Defaults]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+# End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devmngt_plat/services_db_api/tsrc/ServicesDbApiTest/src/ServicesDbApiTest.cpp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,155 @@
+/*
+* Copyright (c) 2002 - 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Implementation of class CServicesDbApiTest
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <Stiftestinterface.h>
+#include "ServicesDbApiTest.h"
+#include <SettingServerClient.h>
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CServicesDbApiTest::CServicesDbApiTest
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CServicesDbApiTest::CServicesDbApiTest( 
+    CTestModuleIf& aTestModuleIf ):
+        CScriptBase( aTestModuleIf )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CServicesDbApiTest::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CServicesDbApiTest::ConstructL()
+    {
+    //Read logger settings to check whether test case name is to be
+    //appended to log file name.
+    RSettingServer settingServer;
+    TInt ret = settingServer.Connect();
+    if(ret != KErrNone)
+        {
+        User::Leave(ret);
+        }
+    // Struct to StifLogger settigs.
+    TLoggerSettings loggerSettings; 
+    // Parse StifLogger defaults from STIF initialization file.
+    ret = settingServer.GetLoggerSettings(loggerSettings);
+    if(ret != KErrNone)
+        {
+        User::Leave(ret);
+        } 
+    // Close Setting server session
+    settingServer.Close();
+
+    TFileName logFileName;
+    
+    if(loggerSettings.iAddTestCaseTitle)
+        {
+        TName title;
+        TestModuleIf().GetTestCaseTitleL(title);
+        logFileName.Format(KServicesDbApiTestLogFileWithTitle, &title);
+        }
+    else
+        {
+        logFileName.Copy(KServicesDbApiTestLogFile);
+        }
+
+    iLog = CStifLogger::NewL( KServicesDbApiTestLogPath, 
+                          logFileName,
+                          CStifLogger::ETxt,
+                          CStifLogger::EFile,
+                          EFalse );
+    
+    SendTestClassVersion();
+    
+    }
+
+// -----------------------------------------------------------------------------
+// CServicesDbApiTest::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CServicesDbApiTest* CServicesDbApiTest::NewL( 
+    CTestModuleIf& aTestModuleIf )
+    {
+    CServicesDbApiTest* self = new (ELeave) CServicesDbApiTest( aTestModuleIf );
+
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+
+    return self;
+
+    }
+
+// Destructor
+CServicesDbApiTest::~CServicesDbApiTest()
+    { 
+
+    // Delete resources allocated from test methods
+    Delete();
+
+    // Delete logger
+    delete iLog; 
+    delete iServicesDB;
+    
+    }
+
+//-----------------------------------------------------------------------------
+// CServicesDbApiTest::SendTestClassVersion
+// Method used to send version of test class
+//-----------------------------------------------------------------------------
+//
+void CServicesDbApiTest::SendTestClassVersion()
+	{
+	TVersion moduleVersion;
+	moduleVersion.iMajor = TEST_CLASS_VERSION_MAJOR;
+	moduleVersion.iMinor = TEST_CLASS_VERSION_MINOR;
+	moduleVersion.iBuild = TEST_CLASS_VERSION_BUILD;
+	
+	TFileName moduleName;
+	moduleName = _L("ServicesDbApiTest.dll");
+
+	TBool newVersionOfMethod = ETrue;
+	TestModuleIf().SendTestModuleVersion(moduleVersion, moduleName, newVersionOfMethod);
+	}
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+// -----------------------------------------------------------------------------
+// LibEntryL is a polymorphic Dll entry point.
+// Returns: CScriptBase: New CScriptBase derived object
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CScriptBase* LibEntryL( 
+    CTestModuleIf& aTestModuleIf ) // Backpointer to STIF Test Framework
+    {
+
+    return ( CScriptBase* ) CServicesDbApiTest::NewL( aTestModuleIf );
+
+    }
+
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devmngt_plat/services_db_api/tsrc/ServicesDbApiTest/src/ServicesDbApiTest.rss	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,62 @@
+/*
+* 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: Resource definitions for project ServicesDbApiTest
+*
+*/
+// ---------------------------------------------------------------------------
+// r_da_services_mime
+// This resource stores localized strings for the supported services, identified
+// by their Uid and generic name.
+// This resource is defined in the services_db.rh file
+// ---------------------------------------------------------------------------
+//
+#include    <bldvariant.hrh>
+#include    <avkon.rh>
+//#include    <avkon.rsg>
+//#include    <avkon.mbg>
+//#include    <eikcore.rsg>
+#include    <eikon.rh>
+//#include    <eikon.rsg>
+//#include    <avkon.loc>
+//#include    <data_caging_paths_strings.hrh>
+#include <services_db.rh>
+//  RESOURCE IDENTIFIER
+NAME    SDBT // 4 letter ID
+RESOURCE RSS_SIGNATURE { }
+RESOURCE TBUF { buf=""; }
+
+RESOURCE DAS_SERVICES r_da_service_mime
+    {
+    services = 
+        {
+        DAS_SERVICE_ENTRY
+            {
+            service_uid = 0x101; // NOT A REAL UID
+            service_name = "Open";
+            service_localized_name = "Open Localized";
+            },
+        DAS_SERVICE_ENTRY
+            {
+            service_uid = 0x102; // NOT A REAL UID
+            service_name = "Upload";
+            service_localized_name = "Upload Localized";
+            },
+        DAS_SERVICE_ENTRY
+            {
+            service_uid = 0x103; // NOT A REAL UID
+            service_name = "Print";
+            service_localized_name = "Print Localized %U";
+            }
+        };
+    }    
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devmngt_plat/services_db_api/tsrc/ServicesDbApiTest/src/ServicesDbApiTestBlocks.cpp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,590 @@
+/*
+* Copyright (c) 2002 - 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  This cpp file has the functions to test Services DB API.
+*
+*/
+
+
+
+// [INCLUDE FILES]
+#include <e32svr.h>
+#include <StifParser.h>
+#include <Stiftestinterface.h>
+#include "ServicesDbApiTest.h"
+#include <ServicesDbApiTest.rsg>
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CServicesDbApiTest::Delete
+// Delete here all resources allocated and opened from test methods. 
+// Called from destructor. 
+// -----------------------------------------------------------------------------
+//
+void CServicesDbApiTest::Delete() 
+    {
+
+    }
+
+// -----------------------------------------------------------------------------
+// CServicesDbApiTest::RunMethodL
+// Run specified method. Contains also table of test mothods and their names.
+// -----------------------------------------------------------------------------
+//
+TInt CServicesDbApiTest::RunMethodL( 
+    CStifItemParser& aItem ) 
+    {
+
+    static TStifFunctionInfo const KFunctions[] =
+        {  
+        ENTRY( "InitializeSeviceDB",         CServicesDbApiTest::InitializeSeviceDB ),
+        ENTRY( "InitializeonStackSeviceDB",  CServicesDbApiTest::InitializeonStackSeviceDB ),
+        ENTRY( "CountSeviceDB",              CServicesDbApiTest::CountSeviceDB),
+        ENTRY( "ServiceUidLSeviceDB",        CServicesDbApiTest::ServiceUidLSeviceDB),
+        ENTRY( "ServiceStringLCSeviceDB",    CServicesDbApiTest::ServiceStringLCSeviceDB),
+        ENTRY( "ServiceStringLCUIDSeviceDB", CServicesDbApiTest::ServiceStringLCuidSeviceDB),
+        ENTRY( "ServiceNameLCSeviceDB",      CServicesDbApiTest::ServiceNameLCSeviceDB),
+        ENTRY( "ServiceNameLCuidSeviceDB",   CServicesDbApiTest::ServiceNameLCuidSeviceDB),
+          };
+
+    const TInt count = sizeof( KFunctions ) / 
+                        sizeof( TStifFunctionInfo );
+
+    return RunInternalL( KFunctions, count, aItem );
+
+    }
+
+
+// -----------------------------------------------------------------------------
+// CServicesDbApiTest::CreateSeviceDBL
+// This function is used to create CServicesDB object. This function is used
+// to call CServicesDB::NewL and CServicesDB::NewLC functions. 
+// -----------------------------------------------------------------------------
+//
+TInt CServicesDbApiTest::CreateSeviceDBL( TInt aOption )
+{
+      
+     // Get CCoeEnv instance
+    CEikonEnv* eikEnv = CEikonEnv::Static();
+    // Initialize loader
+    //open our resource file
+    RConeResourceLoader resources(*eikEnv);
+    
+    TParse parse;
+    parse.Set(_L("c:ServicesDbApiTest.rsc"), &KDC_RESOURCE_FILES_DIR, NULL ); 
+     
+    TFileName fileName( parse.FullName() );
+    iLog->Log(_L("Opened Resource file named ::  "));   iLog->Log(fileName);
+         
+    TRAPD( error, resources.OpenL(fileName) ); //Open resource file
+    if ( KErrNone != error )
+    {
+        iLog->Log(_L("Error in opening resource file. ERROR = %d "),error); //return( error );
+        //Check on Z drive if not found on C drive
+        parse.Set(_L("z:ServicesDbApiTest.rsc"), &KDC_RESOURCE_FILES_DIR, NULL ); 
+        TFileName fileName1( parse.FullName() );
+        iLog->Log(_L("Opening Resource file named ::  "));   iLog->Log(fileName1);
+        
+        TRAPD( error1 , resources.OpenL(fileName1) );
+        if ( KErrNone != error1  )
+        {
+            iLog->Log(_L("Error in opening resource file. ERROR = %d "),error1); 
+            return( error1 ); 
+        }
+    }  
+  
+    TResourceReader reader;
+    eikEnv->CreateResourceReaderLC( reader, R_DA_SERVICE_MIME );
+    
+    if ( KFirstOption == aOption )
+    {
+        TRAPD( errorinNewL, iServicesDB=CServicesDB::NewL(&reader) );
+        if ( KErrNone != errorinNewL )
+        {
+            iLog->Log(_L("=>CServicesDB::NewL leaves"));
+        }
+        CleanupStack::PopAndDestroy(); //reader's resource
+        resources.Close();        
+        return ( errorinNewL );
+    }  
+    else 
+    {
+        TRAPD( errorinNewLC, CallNewlcL(reader) );
+        if( KErrNone != errorinNewLC )
+        { 
+            iLog->Log(_L("=>CServicesDB::NewLC leaves"));
+        }
+        CleanupStack::PopAndDestroy();
+        resources.Close();
+        return ( errorinNewLC );
+    }
+}
+
+
+// -----------------------------------------------------------------------------
+// CServicesDbApiTest::CallNewlcL
+// This function is used because we can not TRAP CServicesDB::NewLC
+// -----------------------------------------------------------------------------
+//
+void CServicesDbApiTest::CallNewlcL(  TResourceReader aResReader )
+{ 
+   iServicesDB = CServicesDB::NewLC( &aResReader );
+   CleanupStack::Pop();
+}
+
+
+// -----------------------------------------------------------------------------
+// CServicesDbApiTest::InitializeSeviceDB
+// Is used to test CServicesDB::NewL 
+// -----------------------------------------------------------------------------
+//
+TInt CServicesDbApiTest::InitializeSeviceDB( )
+{
+    TInt result;
+    TRAPD( error , result = CreateSeviceDBL( KFirstOption ) );
+    if ( KErrNone != error )
+    {  iLog->Log(_L("Services DB object not created with NewL.")); return ( error );  }
+    else
+    {  
+       if ( KErrNone != result )
+       {
+          iLog->Log(_L("Services DB object not created with NewL.")); return ( result );
+       }
+       else
+       {
+           iLog->Log(_L("Services DB object created with NewL."));       
+       }
+    }
+    return ( result );
+}
+
+
+// -----------------------------------------------------------------------------
+// CServicesDbApiTest::InitializeonStackSeviceDB
+// Is used to test CServicesDB::NewLC
+// -----------------------------------------------------------------------------
+//
+TInt CServicesDbApiTest::InitializeonStackSeviceDB( )
+{
+    TInt result;
+    TRAPD( error, result = CreateSeviceDBL( KSecondOption ) );
+    if ( KErrNone != error )
+    {  iLog->Log(_L("Services DB object not created with NewLC.")); return ( error );  }
+    else
+    {  
+        if ( KErrNone != result )
+        {
+           iLog->Log(_L("Services DB object not created with NewLC.")); return ( result );
+        }
+        else
+        {
+            iLog->Log(_L("Services DB object created with NewLC."));       
+        } 
+    }
+    return ( result );
+}
+
+
+// -----------------------------------------------------------------------------
+// CServicesDbApiTest::CountSeviceDB
+// Testing - IMPORT_C TInt Count() const;
+// -----------------------------------------------------------------------------
+//
+TInt CServicesDbApiTest::CountSeviceDB()
+{
+    TInt result = InitializeSeviceDB();
+    if ( KErrNone != result )
+        {
+            return ( result );
+        }
+    TInt nrServices=iServicesDB->Count();
+    iLog->Log(_L("Number of Services listed in resource file = %d"),nrServices);
+    if ( KNoOfServices != nrServices )
+    { 
+        iLog->Log(_L("The number of services returned by CServicesDB::COUNT is incorrect"));
+        return ( KErrGeneral );
+    }
+    return ( KErrNone );
+}
+
+// -----------------------------------------------------------------------------
+// CServicesDbApiTest::ServiceUidLSeviceDB
+// Testing - IMPORT_C TUid ServiceUidL(TInt aIndex) const;
+// -----------------------------------------------------------------------------
+//
+TInt CServicesDbApiTest::ServiceUidLSeviceDB( CStifItemParser& aItem )
+{
+    TInt result = InitializeSeviceDB();
+    if ( KErrNone != result )
+        {
+            return ( result );
+        }
+    TUid serviceUid;
+    TInt index;
+     
+    if( aItem.GetNextInt(index) != KErrNone )
+    { 
+        iLog->Log(_L("NO Index number provided, index is required parameter for testing ServiceUid "));
+        return ( KErrGeneral );
+    }
+
+    TRAPD( error, serviceUid = iServicesDB->ServiceUidL(index) );
+    if ( KErrNone != error )
+    {
+       iLog->Log(_L("Incorrect Index. There is no service matching the Index Number."));
+       iLog->Log(_L("=> ServiceUidL leaves when index is incorrect."));
+       return (error);
+    }
+        
+    iLog->Log(_L("UID of the Service[%d]=%d"),index,serviceUid.iUid);
+    
+    switch (index)
+        {
+        case KFirstServiceIndex: if (serviceUid.iUid == 0x101) 
+                {  iLog->Log(_L("Service UID is correct"));   }
+                else 
+                {  iLog->Log(_L("Service UID is incorrect")); return ( KErrGeneral );  }
+                break;
+        case KSecondServiceIndex: if (serviceUid.iUid == 0x102) 
+                {  iLog->Log(_L("Service UID is correct"));   }
+                else 
+                {  iLog->Log(_L("Service UID is incorrect")); return ( KErrGeneral );  }
+                break;
+        case KThirdServiceIndex: if (serviceUid.iUid == 0x103)
+                {  iLog->Log(_L("Service UID is correct"));   }
+                else 
+                {  iLog->Log(_L("Service UID is incorrect")); return ( KErrGeneral );  }
+                break;    
+        default : break;
+        };
+
+    return ( KErrNone );
+}
+
+
+// -----------------------------------------------------------------------------
+// CServicesDbApiTest::ServiceStringLCSeviceDB
+// Testing - IMPORT_C HBufC* ServiceStringLC(TInt aIndex, const TDes& aParam) const;
+// -----------------------------------------------------------------------------
+//
+TInt CServicesDbApiTest::ServiceStringLCSeviceDB( CStifItemParser& aItem )
+{    
+    TInt result = InitializeSeviceDB();
+    if ( KErrNone != result )
+    {
+        return ( result );
+    }
+    TInt index;
+    TBuf<KBufSize> format(KEmptyString);
+    
+    if( aItem.GetNextInt(index) != KErrNone )
+    { 
+        iLog->Log(_L("NO Index number provided, index is required parameter for testing ServiceUid "));
+        return ( KErrGeneral );
+    }
+    TInt res;
+    TRAPD( error, res = CallServiceStringLCSeviceDBL(index,format ));
+    if ( KErrNone != error )
+    {
+        iLog->Log(_L("Incorrect Index. There is no service matching the Index Number."));
+        iLog->Log(_L("=> ServiceStringLC leaves when index is incorrect."));
+        return (error);
+    }
+     
+    return ( res ); 
+}
+
+
+// -----------------------------------------------------------------------------
+// CServicesDbApiTest::CallServiceStringLCSeviceDBL
+// This function is used because we can not trap ServiceStringLC
+// -----------------------------------------------------------------------------
+//
+TInt CServicesDbApiTest::CallServiceStringLCSeviceDBL(TInt aIndex,const TDes& aParam )
+{
+    HBufC *string;
+    string=iServicesDB->ServiceStringLC(aIndex,aParam);
+    iLog->Log(_L("LOCALIZED name of the Service[%d] = "),aIndex);
+    iLog->Log(*string);
+    
+    switch (aIndex)
+        {
+        case KFirstServiceIndex: if(!(string->Des().Compare(_L("Open Localized"))))
+                {  iLog->Log(_L("LOCALIZED name is correct"));   }
+                else 
+                {  iLog->Log(_L("LOCALIZED name is incorrect"));
+                   CleanupStack::PopAndDestroy(string); return ( KErrGeneral );  }
+                break;
+        case KSecondServiceIndex: if(!(string->Des().Compare(_L("Upload Localized"))))
+                {  iLog->Log(_L("LOCALIZED name is correct"));   }
+                else 
+                {  iLog->Log(_L("LOCALIZED name is incorrect")); 
+                   CleanupStack::PopAndDestroy(string); return ( KErrGeneral );  }
+                break;
+        case KThirdServiceIndex: if(!(string->Des().Compare(_L("Print Localized %U"))))
+                {  iLog->Log(_L("LOCALIZED name is correct"));   }
+                else 
+                {  iLog->Log(_L("LOCALIZED name is incorrect"));  
+                   CleanupStack::PopAndDestroy(string);return ( KErrGeneral );  }
+                break;    
+        default : break;
+        }; 
+    
+    CleanupStack::PopAndDestroy(string);    
+    return ( KErrNone );
+
+}
+
+
+// -----------------------------------------------------------------------------
+// CServicesDbApiTest::ServiceStringLCuidSeviceDB
+// Testing - IMPORT_C HBufC* ServiceStringLC(TUid aServiceUid, const TDes& aParam) const;
+// -----------------------------------------------------------------------------
+//
+TInt CServicesDbApiTest::ServiceStringLCuidSeviceDB( CStifItemParser& aItem )
+{
+    TInt result = InitializeSeviceDB();
+    if ( KErrNone != result )
+    {
+        return ( result );
+    }
+    TBuf<KBufSize> format(KEmptyString);
+    TInt uid;
+    
+    if( aItem.GetNextInt(uid) != KErrNone )
+    { 
+        iLog->Log(_L("NO UID number provided, UID is required parameter for testing ServiceStringLC "));
+        return ( KErrGeneral );
+    }   
+    TUid serviceUID= TUid::Uid(uid);
+    iLog->Log(_L("serviceUID = %d"),serviceUID.iUid);
+    TInt res ;
+    TRAPD(error, res = CallServiceStringLCuidSeviceDBL(serviceUID,format));
+    if ( KErrNone != error )
+    {
+        iLog->Log(_L("=> ServiceStringLC leaves. Error code = %d"),error);
+        return (error);
+    }
+    return ( res ); 
+
+}
+
+
+// -----------------------------------------------------------------------------
+// CServicesDbApiTest::CallServiceStringLCuidSeviceDBL
+// This function is used because we can not trap ServiceStringLC
+// -----------------------------------------------------------------------------
+//
+TInt CServicesDbApiTest::CallServiceStringLCuidSeviceDBL( TUid aServiceUid, const TDes& aParam )
+{
+    HBufC *string;
+    string=iServicesDB->ServiceStringLC(aServiceUid,aParam);
+    if ( NULL != string )
+    {
+       iLog->Log(_L("LOCALIZED name of the Service with UID(%d) = "),aServiceUid.iUid);
+       iLog->Log(*string);
+    }
+    else 
+    {
+        iLog->Log(_L("No matching service found, Service UID provided is incorrect")); 
+    } 
+       
+    switch (aServiceUid.iUid)
+        {
+        case KFirstServiceUid: if(!(string->Des().Compare(_L("Open Localized"))))
+                {  iLog->Log(_L("LOCALIZED name is correct"));   }
+                else 
+                {  iLog->Log(_L("LOCALIZED name is incorrect")); 
+                   CleanupStack::PopAndDestroy(string); return ( KErrGeneral );  }
+                break;
+        case KSecondServiceUid: if(!(string->Des().Compare(_L("Upload Localized"))))
+                {  iLog->Log(_L("LOCALIZED name is correct"));   }
+                else 
+                {  iLog->Log(_L("LOCALIZED name is incorrect"));
+                   CleanupStack::PopAndDestroy(string); return ( KErrGeneral );  }
+                break;
+        case KThirdServiceUid: if(!(string->Des().Compare(_L("Print Localized %U"))))
+                {  iLog->Log(_L("LOCALIZED name is correct"));   }
+                else 
+                {  iLog->Log(_L("LOCALIZED name is incorrect"));  
+                   CleanupStack::PopAndDestroy(string);return ( KErrGeneral );  }
+                break;    
+        default : break;
+        }; 
+       
+    CleanupStack::PopAndDestroy(string);    
+    return ( KErrNone );
+}
+
+// -----------------------------------------------------------------------------
+// CServicesDbApiTest::ServiceNameLCSeviceDB
+// Testing - IMPORT_C HBufC* ServiceNameLC(TInt aIndex) const;
+// -----------------------------------------------------------------------------
+//
+TInt CServicesDbApiTest::ServiceNameLCSeviceDB( CStifItemParser& aItem )
+{
+    TInt result = InitializeSeviceDB();
+    if ( KErrNone != result )
+    {
+        return ( result );
+    }
+    TInt index;
+    TBuf<KBufSize> format(KEmptyString);
+    
+    if( aItem.GetNextInt(index) != KErrNone )
+    { 
+        iLog->Log(_L("NO Index number provided, index is required parameter for testing ServiceNameLC "));
+        return ( KErrGeneral );
+    }
+    iLog->Log(_L("checked till here"));
+    iLog->Log(_L("index = %d"),index);
+    
+    TRAPD(error,TInt res = CallServiceNameLCSeviceDBL(index));
+    if ( KErrNone != error )
+    {
+        iLog->Log(_L("Incorrect Index. There is no service matching the Index Number."));
+        iLog->Log(_L("=> ServiceNameLC leaves when index is incorrect."));
+        return (error);
+    }
+    return ( KErrNone ); 
+   
+}
+
+
+// -----------------------------------------------------------------------------
+// CServicesDbApiTest::ServiceNameLCSeviceDB
+// This function is used because we can not trap ServiceNameLC
+// -----------------------------------------------------------------------------
+//
+TInt CServicesDbApiTest::CallServiceNameLCSeviceDBL(TInt aIndex)
+{
+    HBufC *string;
+    string=iServicesDB->ServiceNameLC(aIndex);
+    iLog->Log(_L("GENERIC name of the Service[%d] = "),aIndex);
+    iLog->Log(*string);
+    
+    switch (aIndex)
+        {
+        case KFirstServiceIndex: if(!(string->Des().Compare(_L("Open"))))
+                {  iLog->Log(_L("GENERIC name is correct"));   }
+                else 
+                {  iLog->Log(_L("GENERIC name is incorrect"));
+                   CleanupStack::PopAndDestroy(string); return ( KErrGeneral );  }
+                break;
+        case KSecondServiceIndex: if(!(string->Des().Compare(_L("Upload"))))
+                {  iLog->Log(_L("GENERIC name is correct"));   }
+                else 
+                {  iLog->Log(_L("GENERIC name is incorrect"));
+                   CleanupStack::PopAndDestroy(string); return ( KErrGeneral );  }
+                break;
+        case KThirdServiceIndex: if(!(string->Des().Compare(_L("Print"))))
+                {  iLog->Log(_L("GENERIC name is correct"));   }
+                else 
+                {  iLog->Log(_L("GENERIC name is incorrect")); 
+                   CleanupStack::PopAndDestroy(string);return ( KErrGeneral );  }
+                break;    
+        default : break;
+        }; 
+    
+    CleanupStack::PopAndDestroy(string);    
+    return ( KErrNone );
+
+}
+
+
+// -----------------------------------------------------------------------------
+// CServicesDbApiTest::ServiceNameLCuidSeviceDB
+// Testing - IMPORT_C HBufC* ServiceNameLC(TUid aServiceUid) const;
+// -----------------------------------------------------------------------------
+//
+TInt CServicesDbApiTest::ServiceNameLCuidSeviceDB( CStifItemParser& aItem )
+{
+    
+    TInt result = InitializeSeviceDB();
+    if ( KErrNone != result )
+    {
+        return ( result );
+    }
+    TBuf<KBufSize> format(KEmptyString);
+    TInt uid;
+    
+    if( aItem.GetNextInt(uid) != KErrNone )
+    { 
+        iLog->Log(_L("NO UID number provided, UID is required parameter for testing ServiceStringLC "));
+        return ( KErrGeneral );
+    }
+    iLog->Log(_L("checked till here"));
+    
+    TUid serviceUID= TUid::Uid(uid);
+    iLog->Log(_L("serviceUID = %d"),serviceUID.iUid);
+    
+    TRAPD(error,TInt res = CallServiceNameLCuidSeviceDBL(serviceUID));
+    if ( KErrNone != error )
+    {
+        iLog->Log(_L("=> ServiceNameLC leaves."),error);
+        return (error);
+    }
+    return ( KErrNone ); 
+}
+
+
+// -----------------------------------------------------------------------------
+// CServicesDbApiTest::ServiceNameLCuidSeviceDB
+// This function is used because we can not trap ServiceNameLC
+// -----------------------------------------------------------------------------
+//
+TInt CServicesDbApiTest::CallServiceNameLCuidSeviceDBL( TUid aServiceUid )
+{
+    HBufC *string;
+    string=iServicesDB->ServiceNameLC(aServiceUid);
+    if ( NULL != string )
+    {
+       iLog->Log(_L("GENERIC name of the Service with UID(%d) = "),aServiceUid.iUid);
+       iLog->Log(*string);
+    }
+    else 
+    {
+        iLog->Log(_L("No matching service found, Service UID provided is incorrect")); 
+    } 
+       
+    switch (aServiceUid.iUid)
+        {
+        case KFirstServiceUid: if(!(string->Des().Compare(_L("Open"))))
+                {  iLog->Log(_L("GENERIC name is correct"));   }
+                else 
+                {  iLog->Log(_L("GENERIC name is incorrect")); 
+                   CleanupStack::PopAndDestroy(string); return ( KErrGeneral );  }
+                break;
+        case KSecondServiceUid: if(!(string->Des().Compare(_L("Upload"))))
+                {  iLog->Log(_L("GENERIC name is correct"));   }
+                else 
+                {  iLog->Log(_L("GENERIC name is incorrect"));
+                   CleanupStack::PopAndDestroy(string); return ( KErrGeneral );  }
+                break;
+        case KThirdServiceUid: if(!(string->Des().Compare(_L("Print"))))
+                {  iLog->Log(_L("GENERIC name is correct"));   }
+                else 
+                {  iLog->Log(_L("GENERIC name is incorrect"));  
+                   CleanupStack::PopAndDestroy(string);return ( KErrGeneral );  }
+                break;    
+        default : break;
+        }; 
+       
+    CleanupStack::PopAndDestroy(string);    
+    return ( KErrNone );
+}
+
+
+//  [End of File] - Do not remove
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devmngt_pub/group/bld.inf	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2006 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:  Includes all the SDK API specific bld.inf files, which 
+*                export files.
+*
+*/
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/group/bld.inf	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 2008 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: Build information file for project settingsuis 
+*
+*/
+
+
+// mw layer
+// Device management ADO
+
+//Components:
+
+//devmngt_plat
+#include "../devmngt_plat/group/bld.inf"
+
+//devmngt_pub
+#include "../devmngt_pub/group/bld.inf"
+
+#include "../defaultapplicationsettings/group/bld.inf"
+
+//systemswuis
+#include "../systemswuis/group/bld.inf"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/layers.sysdef.xml	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,22 @@
+<?xml version="1.0"?>
+
+<!DOCTYPE SystemDefinition SYSTEM "sysdef_1_4_0.dtd" [
+  <!ENTITY layer_real_source_path "sf/app/settingsuis" >
+]>
+
+<SystemDefinition name="settingsuis" schema="1.4.0">
+  <systemModel>
+    <layer name="app_layer">
+      <module name="settingsuis">
+      <unit name="settingsuis" unitID="presdo.settingsuis" bldFile="&layer_real_source_path;/group" mrp="" />
+      </module>
+    </layer>
+    <layer name="api_test_layer">
+      <module name="settingsuis_test">
+      <!--<unit unitID="presdo.settingsuis_test" mrp="" bldFile="&layer_real_source_path;/tsrc/group" name="settingsuis_test" />-->
+      <unit unitID="presdo.settingsuis_test" mrp="" bldFile="&layer_real_source_path;/devmngt_plat/services_db_api/tsrc/ServicesDbApiTest/group" name="settingsuis_test" />
+      </module>
+    </layer>      
+  </systemModel>
+</SystemDefinition>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/package_definition.xml	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<SystemDefinition schema="3.0.0">
+  <package id="settingsuis" name="Settings UIs" levels="rsc ui">
+    <collection id="defaultapplicationsettings" name="Default Application Settings" level="rsc">
+      <component id="services_db" filter="s60" name="Services Database" introduced="^1">
+        <unit bldFile="defaultapplicationsettings/services_db/group"/>
+      </component>
+      <component id="defaultapplicationsettings_server" filter="s60" name="Default Application Server" introduced="^1">
+        <unit bldFile="defaultapplicationsettings/server/group"/>
+      </component>
+      <component id="service" filter="s60" name="Default Application Service" introduced="^1">
+        <unit bldFile="defaultapplicationsettings/service/group"/>
+      </component>
+      <component id="dasgsplugin" filter="s60" name="Default Application Settings GS Plugin" class="plugin" introduced="^1">
+        <unit bldFile="defaultapplicationsettings/gsplugin/group"/>
+      </component>
+      <component id="defaultapplicationsettings_build" filter="s60" name="Default Application Settings Build" introduced="^1">
+      	<!-- split the IBYs up into the appropriate components? -->
+        <unit bldFile="defaultapplicationsettings/group"/>
+      </component>
+    </collection>
+    <collection id="systemswuis" name="System SW UIs" level="ui">
+      <component id="touchscreencalib" filter="s60" name="Touchscreen Calibration" introduced="^1">
+        <unit bldFile="systemswuis/touchscreencalib/group"/>
+      </component>
+    </collection>
+    <collection id="settingsuis_info" name="Settings UIs Info" level="ui">
+      <component id="devmngt_pub" filter="s60" class="api" name="Settings UIs Public Interfaces" introduced="^1">
+        <unit bldFile="devmngt_pub/group"/>
+      </component>
+      <component id="settingsuis_test" filter="s60" purpose="development" name="Settings UIs Test" introduced="^1">
+      	<!-- what needs to be done about this? -->
+        <!-- <unit bldFile="tsrc/group"/> -->
+      </component>
+      <component id="devmngt_plat" filter="s60" class="api" name="Settings UIs Platform Interfaces" introduced="^1">
+        <unit bldFile="devmngt_plat/group"/>
+        	<!-- should these be #included elsewhere? -->
+        <!-- <unit bldFile="devmngt_plat/services_db_api/tsrc/servicesdbapitest/group"/> -->
+        <!-- <unit bldFile="devmngt_plat/default_app_client_api/tsrc/dasclientapitest/group"/> -->
+      </component>
+    </collection>
+  </package>
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sysdef_1_4_0.dtd	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,86 @@
+ <!ELEMENT SystemDefinition (systemModel?, build?)>
+ <!ATTLIST SystemDefinition
+  name CDATA #REQUIRED
+  schema CDATA #REQUIRED>
+ <!ELEMENT systemModel (layer+)>
+ <!ELEMENT layer (logicalset* | module*)*>
+ <!ATTLIST layer
+  name CDATA #REQUIRED
+  levels CDATA #IMPLIED
+  span CDATA #IMPLIED>
+ <!ELEMENT logicalset (logicalsubset* | module* | unit* | package* | prebuilt*)*>
+ <!ATTLIST logicalset name CDATA #REQUIRED>
+ <!ELEMENT logicalsubset (module* | unit* | package* | prebuilt*)*>
+ <!ATTLIST logicalsubset name CDATA #REQUIRED>
+ <!ELEMENT module (component* | unit* | package* | prebuilt*)*>
+ <!ATTLIST module
+  name CDATA #REQUIRED
+  level CDATA #IMPLIED>
+ <!ELEMENT component (unit* | package* | prebuilt*)*>
+ <!ATTLIST component name CDATA #REQUIRED>
+ <!ELEMENT unit EMPTY>
+ <!ATTLIST unit
+  unitID ID #REQUIRED
+  name CDATA #REQUIRED
+  mrp CDATA #REQUIRED
+  filter CDATA #IMPLIED
+  bldFile CDATA #REQUIRED
+  priority CDATA #IMPLIED
+  contract CDATA #IMPLIED>
+ <!ELEMENT package EMPTY>
+ <!ATTLIST package
+  name CDATA #REQUIRED
+  mrp CDATA #REQUIRED
+  filter CDATA #IMPLIED
+  contract CDATA #IMPLIED>
+ <!ELEMENT prebuilt EMPTY>
+ <!ATTLIST prebuilt
+  name CDATA #REQUIRED
+  version CDATA #REQUIRED
+  late (Y|N) #IMPLIED
+  filter CDATA #IMPLIED
+  contract CDATA #IMPLIED>
+ <!ELEMENT build (option* | target+ | targetList+ | unitList+ | configuration+)*>
+ <!ELEMENT unitList (unitRef+)>
+ <!ATTLIST unitList
+  name ID #REQUIRED
+  description CDATA #REQUIRED>
+ <!ELEMENT unitRef EMPTY>
+ <!ATTLIST unitRef unit IDREF #REQUIRED>
+ <!ELEMENT targetList EMPTY>
+ <!ATTLIST targetList
+  name ID #REQUIRED
+  description CDATA #REQUIRED
+  target IDREFS #REQUIRED>
+ <!ELEMENT target EMPTY>
+ <!ATTLIST target
+  name ID #REQUIRED
+  abldTarget CDATA #REQUIRED
+  description CDATA #REQUIRED>
+ <!ELEMENT option EMPTY>
+ <!ATTLIST option
+  name ID #REQUIRED
+  abldOption CDATA #REQUIRED
+  description CDATA #REQUIRED
+  enable (Y | N | y | n) #REQUIRED>
+ <!ELEMENT configuration (unitListRef+ | layerRef+ | task+)*>
+ <!ATTLIST configuration
+  name ID #REQUIRED
+  description CDATA #REQUIRED
+  filter CDATA #REQUIRED>
+ <!ELEMENT task ( unitListRef* , (buildLayer | specialInstructions))>
+ <!ELEMENT unitListRef EMPTY>
+ <!ATTLIST unitListRef unitList IDREF #REQUIRED>
+ <!ELEMENT layerRef EMPTY>
+ <!ATTLIST layerRef layerName CDATA #REQUIRED>
+ <!ELEMENT buildLayer EMPTY>
+ <!ATTLIST buildLayer
+  command CDATA #REQUIRED
+  targetList IDREFS #IMPLIED
+  unitParallel (Y | N | y | n) #REQUIRED
+  targetParallel (Y | N | y | n) #IMPLIED>
+ <!ELEMENT specialInstructions EMPTY>
+ <!ATTLIST specialInstructions
+  name CDATA #REQUIRED
+  cwd CDATA #REQUIRED
+  command CDATA #REQUIRED>  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/group/bld.inf	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,19 @@
+/*
+* Copyright (c) 2008 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: Build information file for project systemswuis  
+*
+*/
+
+
+#include "../touchscreencalib/group/bld.inf"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/PubSub/touchscprivatepskeys.h	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2008 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:  Private Publish&Subscribe definitions of the
+*                Security UIs subsystem
+*
+*/
+
+
+#ifndef TOUCHSCPRIVATEPSKEYS_H
+#define TOUCHSCPRIVATEPSKEYS_H
+
+// INCLUDES
+
+//CONSTANTS
+
+// =============================================================================
+// Touch Screen Calibration API
+// =============================================================================
+
+/**
+* Touchscreen calibration P&S UID
+*/
+const TUid KPSUidTouchScreenCalibration = { 0x102828BC };
+
+/**
+* Wait a touchscreen calibration
+*/
+const TUint32 KPSTouchScreenCalibration = 0x00000000;
+enum TPSTouchScreenCalibration
+    {
+    ETouchScreenCalibrationWait,
+    ETouchScreenCalibrationOk    
+    };
+    
+#endif//TOUCHSCPRIVATEPSKEYS_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/aif/TouchScreenCalibaif.rss	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2006 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:  RSS for creating the aif file for TouchScreenCalib.
+*
+*/
+
+
+//  INCLUDES
+#include <aiftool.rh>
+
+RESOURCE AIF_DATA
+{
+    app_uid = 0x102828BC; 
+    hidden = KAppIsHidden;
+    num_icons = 0;
+    embeddability = KAppNotEmbeddable;
+    newfile = KAppDoesNotSupportNewFile;
+}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/data/TouchScreenCalib.rss	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2006 - 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  
+*           This file contains all the resources for the module.
+*
+*/
+
+
+//  RESOURCE IDENTIFIER
+NAME    TSCA // 4 letter ID
+
+//  INCLUDES
+#include <eikon.rh>
+#include <avkon.rsg>
+#include <avkon.rh>
+#include "touchscreencalib.loc"
+
+//  CONSTANTS  
+//  -none
+
+//  MACROS 
+//  -none
+
+//  RESOURCE DEFINITIONS 
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf="touch_screen_calib"; }
+
+RESOURCE EIK_APP_INFO
+    {
+        status_pane = r_status_pane;
+    }
+
+RESOURCE STATUS_PANE_APP_MODEL r_status_pane
+    {
+        layout= R_AVKON_STATUS_PANE_LAYOUT_EMPTY;
+    }
+
+RESOURCE TBUF       r_qtn_touch_screen_cali_instr_can { buf = qtn_touch_screen_cali_instr_can; }
+RESOURCE TBUF       r_qtn_touch_screen_cali_instr_res { buf = qtn_touch_screen_cali_instr_res; }
+RESOURCE TBUF       r_qtn_touch_screen_cali_instr_gen { buf = qtn_touch_screen_cali_instr_gen; }
+RESOURCE TBUF       r_qtn_touch_screen_cali_cancel { buf = qtn_touch_screen_cali_cancel; }
+RESOURCE TBUF       r_qtn_touch_screen_cali_done { buf = qtn_touch_screen_cali_done; }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/data/TouchScreenCalib_anim.rss	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,70 @@
+/*
+* Copyright (c) 2006 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:  It contains resources for Touch Screen Calibration tap target
+*                animation
+*
+*/
+
+
+//  RESOURCE IDENTIFIER
+NAME    TSAN
+
+//  INCLUDES
+#include <uikon.rh>
+#include <avkon.rh>
+#include <touchscreencalib.mbg>
+
+//  RESOURCE DEFINITIONS 
+
+RESOURCE RSS_SIGNATURE { }
+
+STRUCT ANIM_DURATION
+    {
+    WORD time;
+    }
+
+RESOURCE ANIM_DURATION r_anim_duration
+    {
+    time = 0; //milliseconds
+    }
+
+RESOURCE BMPANIM_DATA r_shutdown_anim
+    {
+    frameinterval = 200;
+
+    playmode = EAknBitmapAnimationPlayModeCycle;
+
+    bmpfile = "z:\\resource\\apps\\touchscreencalib.mbm";
+
+    frames = r_target_frames;
+    }
+
+RESOURCE ARRAY r_target_frames 
+    {
+    items = 
+        {
+            BMPANIM_FRAME { bmpid = EMbmTouchscreencalibQgn_graf_screencalib_1;
+                            maskid = EMbmTouchscreencalibQgn_graf_screencalib_1_mask; },
+            BMPANIM_FRAME { bmpid = EMbmTouchscreencalibQgn_graf_screencalib_2;
+                            maskid = EMbmTouchscreencalibQgn_graf_screencalib_2_mask; },
+            BMPANIM_FRAME { bmpid = EMbmTouchscreencalibQgn_graf_screencalib_3;
+                            maskid = EMbmTouchscreencalibQgn_graf_screencalib_3_mask; },
+            BMPANIM_FRAME { bmpid = EMbmTouchscreencalibQgn_graf_screencalib_4;
+                            maskid = EMbmTouchscreencalibQgn_graf_screencalib_4_mask; },
+            BMPANIM_FRAME { bmpid = EMbmTouchscreencalibQgn_graf_screencalib_5;
+                            maskid = EMbmTouchscreencalibQgn_graf_screencalib_5_mask; }
+        };
+    }
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/data/TouchScreenCalib_reg.rss	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2006 - 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  RSS for creating the registration file for TouchScreenCalib.
+*
+*/
+
+
+#include <appinfo.rh>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0x102828BC // application UID
+RESOURCE APP_REGISTRATION_INFO
+    {
+    app_file="TouchScreenCalib"; // filename of application binary (minus extension)
+    hidden = KAppIsHidden;    
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/group/TouchScreenCalib.mmp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,82 @@
+/*
+* Copyright (c) 2006 - 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*           This is project specification file for the TouchScreenCalib.
+*
+*/
+
+
+#include <data_caging_paths.hrh>
+#include <platform_paths.hrh>
+
+TARGET          touchscreencalib.exe
+TARGETTYPE      exe
+UID             0x0 0x102828BC
+EPOCSTACKSIZE	0x5000
+
+VENDORID        VID_DEFAULT
+CAPABILITY      CAP_APPLICATION
+
+SOURCEPATH      ../src
+
+SOURCE          TouchScreenCalibApplication.cpp 
+SOURCE          TouchScreenCalibAppUi.cpp
+SOURCE          TouchScreenCalibDocument.cpp
+SOURCE          TouchScreenCalibView.cpp
+SOURCE          TouchScreenCalibPubSubObserver.cpp
+SOURCE          TouchScreenCalibSubscriber.cpp
+
+START RESOURCE  ../data/TouchScreenCalib.rss
+TARGETPATH      APP_RESOURCE_DIR
+HEADER
+LANGUAGE_IDS
+END  // RESOURCE
+
+START RESOURCE  ../data/TouchScreenCalib_anim.rss
+HEADER
+TARGETPATH      APP_RESOURCE_DIR
+END  // RESOURCE
+
+START RESOURCE  ../data/TouchScreenCalib_reg.rss
+HEADER
+TARGETPATH      /private/10003a3f/apps
+END
+
+USERINCLUDE     . ../inc ../data
+USERINCLUDE     ../../inc
+APP_LAYER_SYSTEMINCLUDE
+
+LIBRARY         euser.lib  
+LIBRARY         apparc.lib  
+LIBRARY         cone.lib    
+LIBRARY         avkon.lib
+LIBRARY         eikdlg.lib 
+LIBRARY         eikcore.lib 
+LIBRARY         efsrv.lib
+LIBRARY         fbscli.lib
+LIBRARY         commonengine.lib        //use of SharedData
+LIBRARY         ws32.lib
+LIBRARY         aknnotify.lib           //AknGlobalNote
+LIBRARY         apgrfx.lib              //
+LIBRARY         egul.lib                //DrawUtils
+LIBRARY         bafl.lib
+LIBRARY         aknskins.lib            //for skin background
+LIBRARY         cdlengine.lib           //for scalable ui
+LIBRARY         gdi.lib
+LIBRARY         aknlayout2scalable.lib
+LIBRARY         aknicon.lib
+LIBRARY         centralrepository.lib
+LIBRARY         starterclient.lib       //use of Starter to remove splash screen
+LIBRARY         touchfeedback.lib
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/group/bld.inf	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,48 @@
+/*
+* Copyright (c) 2006 - 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  This file provides the information required for building the
+*                whole of a TouchScreenCalib.
+*
+*/
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+../loc/touchscreencalib.loc             APP_LAYER_LOC_EXPORT_PATH(touchscreencalib.loc)
+../rom/TouchScreenCalib.iby             CORE_APP_LAYER_IBY_EXPORT_PATH(touchscreencalib.iby)
+../rom/TouchScreenCalib_variant.iby     CUSTOMER_APP_LAYER_IBY_EXPORT_PATH(touchscreencalib_variant.iby)
+../rom/TouchScreenCalibResources.iby    LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(touchscreencalibresources.iby)
+../PubSub/touchscprivatepskeys.h        |../../inc/touchscprivatepskeys.h
+
+PRJ_MMPFILES
+
+TouchScreenCalib.mmp
+../tscstartupextensionplugin/group/tscstartupextensionplugin.mmp
+../tsccustcmds/group/tsccustcmds.mmp
+
+PRJ_EXTENSIONS
+
+START EXTENSION s60/mifconv
+OPTION TARGETFILE touchscreencalib.mif
+OPTION HEADERFILE touchscreencalib.mbg
+OPTION SOURCES -c16,8 Qgn_graf_screencalib \
+		-c16,8 Qgn_graf_screencalib_1 \
+		-c16,8 Qgn_graf_screencalib_2 \
+		-c16,8 Qgn_graf_screencalib_3 \
+		-c16,8 Qgn_graf_screencalib_4 \
+		-c16,8 Qgn_graf_screencalib_5
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/group/touchscreencalib_icons.mk	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,75 @@
+#
+# Copyright (c) 2006 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: Icons makefile for project touchscreencalib
+#
+
+ifeq (WINS,$(findstring WINS, $(PLATFORM)))
+ZDIR=\epoc32\release\$(PLATFORM)\$(CFG)\z
+else
+ZDIR=\epoc32\data\z
+endif
+
+# ----------------------------------------------------------------------------
+# : Configure these
+# ----------------------------------------------------------------------------
+
+TARGETDIR=$(ZDIR)\resource\apps
+HEADERDIR=\epoc32\include
+ICONTARGETFILENAME=$(TARGETDIR)\touchscreencalib.mif
+HEADERFILENAME=$(HEADERDIR)\touchscreencalib.mbg
+
+do_nothing :
+	@rem do_nothing
+
+MAKMAKE : do_nothing
+
+BLD : do_nothing
+
+CLEAN : do_nothing
+
+LIB : do_nothing
+
+CLEANLIB : do_nothing
+
+# ----------------------------------------------------------------------------
+# : Configure these.
+#
+# NOTE 1: DO NOT DEFINE MASK FILE NAMES! They are included automatically by
+# MifConv if the mask detph is defined.
+#
+# NOTE 2: Usually, source paths should not be included in the bitmap
+# definitions. MifConv searches for the icons in all icon directories in a
+# predefined order, which is currently \s60\icons, \s60\bitmaps2.
+# The directory \s60\icons is included in the search only if the feature flag
+# __SCALABLE_ICONS is defined.
+# ----------------------------------------------------------------------------
+
+RESOURCE :
+	mifconv $(ICONTARGETFILENAME) /h$(HEADERFILENAME) \
+		/c16,8 Qgn_graf_screencalib \
+		/c16,8 Qgn_graf_screencalib_1 \
+		/c16,8 Qgn_graf_screencalib_2 \
+		/c16,8 Qgn_graf_screencalib_3 \
+		/c16,8 Qgn_graf_screencalib_4 \
+		/c16,8 Qgn_graf_screencalib_5
+
+FREEZE : do_nothing
+
+SAVESPACE : do_nothing
+
+RELEASABLES :
+	@echo $(HEADERFILENAME)&& \
+	@echo $(ICONTARGETFILENAME)
+
+FINAL : do_nothing
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/inc/MTouchScreenCalibPropertyResponder.h	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Interface of Touch screen calibration property change obsever
+*
+*/
+
+
+#ifndef MTOUCHSCREENCALIBPROPERTYRESPONDER_H
+#define MTOUCHSCREENCALIBPROPERTYRESPONDER_H
+
+// INCLUDES
+#include <e32base.h>
+
+class MTouchScreenCalibPropertyResponder
+    {
+public:
+    virtual void HandlePropertyChangedL( const TUid& aCategory, TUint aKey ) = 0;
+    };
+#endif //MTOUCHSCREENCALIBPROPERTYRESPONDER_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/inc/TouchScreenCalibAppUi.h	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,202 @@
+/*
+* Copyright (c) 2006 - 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  AppUi class of the application.
+*
+*/
+
+
+#ifndef TOUCHSCREENCALIBAPPUI_H
+#define TOUCHSCREENCALIBAPPUI_H
+
+// SYSTEM INCLUDES
+#include <aknappui.h>
+#include <coecntrl.h>
+#include <StringLoader.h>
+#include <aknPopup.h>
+#include <aknlists.h>
+#include <badesca.h>
+#include <AknDef.h>
+#include <e32hal.h>
+
+// CONSTANTS
+const TInt KConvertGetCase = 0;
+const TInt KConvertSaveCase = 1;
+
+const TInt KUnknownOrientation = 0;
+const TInt KPortraitOrientation = 1;
+const TInt KLandscapeOrientation = 2;
+
+// FORWARD DECLARATIONS
+class TTouchScreenCalibLayout
+    {
+public:
+    TAknLayoutRect      iAnimImageLayout1;
+    TAknLayoutRect      iAnimImageLayout2;
+    TAknLayoutRect      iAnimImageLayout3;
+    TAknLayoutRect      iAnimImageLayout4;
+    };
+
+class CTouchScreenCalibView;
+class CTouchScreenCalibPubSubObserver;
+/**
+*  'AppUi' class.
+*
+*/
+class CTouchScreenCalibAppUi : public CAknAppUi, CCoeControl
+{
+    public: // Constructors and destructor
+
+        /**
+        * C++ default constructor.
+        */
+        CTouchScreenCalibAppUi();
+
+        /**
+        * Destructor.
+        */
+        ~CTouchScreenCalibAppUi();
+
+        // from CCoeAppUiBase
+        void PrepareToExit();
+
+        /**
+        * Handles key events
+        * @param TKeyEvent key event
+        * @param TEventCode event code
+        * @since S60 3.2
+        */
+        void HandleKeyL( const TKeyEvent& aKeyEvent, TEventCode aType );
+
+        /**
+        * Handles pointer events
+        * @param TPoint co-ordinates
+        * @since S60 3.2
+        */
+        void HandlePointerL( TPoint aPos );
+
+        /**
+        * Check current point number
+        * @since S60 3.2
+        * @return TInt, point number
+        */
+        TInt GetCalibrationStep();
+
+        /**
+        * Get rect of current tap animation or image
+        * @since S60 3.2
+        * @param TInt, point number
+        * @return TRect, animation or image rect.
+        */
+        TRect GetAnimImageRect(TInt aPointNumber = 0);
+
+        /**
+        * From CAknAppUi, called when screen layout changes
+        */
+        void HandleScreenDeviceChangedL();
+
+        /**
+        * Check if first boot is going on
+        * @since S60 3.2
+        * @return. ETrue if first boot, otherwise EFalse
+        */
+        TBool FirstBoot();
+
+    protected:
+        /*
+         * Handles changes to the application when it
+         * switches to or from the foreground.
+         */
+        virtual void HandleForegroundEventL(TBool aForeground);
+
+    private:
+        /**
+        * EPOC default constructor.
+        */
+        void ConstructL();
+
+        /**
+        * Update display
+        * @since S60 3.2
+        */
+        void UpdateL();
+
+        /**
+        * Checks layout orientation
+        * @since S60 3.2
+        * @return TBool. ETrue if orientation same in driver native level and window level
+        */
+        TBool IsCorrectOrientation(TRect aRect);
+
+        /**
+        * Convert calibration or tapped points to different layout orientation
+        * @since S60 3.2
+        * @param Points
+        * @param Convert case.
+        * @return Calibration points. KConvertGetCase or KConvertSaveCase.
+        */
+        TDigitizerCalibration ConvertToCorrectOrientation(TDigitizerCalibration aPoints,
+                                                          TInt aConvertCase);
+        /**
+        * Get calibration points
+        * @since S60 3.2
+        * @return Calibration points
+        */
+        TDigitizerCalibration CalibrationPoints();
+
+        /**
+        * Change to next calibration point
+        * @since S60 3.2
+        */
+        void NextCalibrationStepL();
+
+        /**
+        * Saves calibration
+        * @since S60 3.2
+        */
+        void SaveCalibration();
+
+        /**
+        * Restart calibration at first point
+        * @since S60 3.2
+        */
+        void ResetCalibrationStepsL();
+
+        /**
+        * Sets tap points to 0 values
+        * @since S60 3.2
+        */
+        void ResetTapPoints();
+
+        TDigitizerCalibration ChangeOrientation(TDigitizerCalibration aSourcePoints,
+                                                TPoint aDestReso);
+        
+        
+        void SetOrientation();
+
+    private: //Data
+        CTouchScreenCalibView*              iTouchScreenCalibView; //owns
+        CTouchScreenCalibPubSubObserver*    iTouchScreenCalibPubSubObserver; //owns
+        TDigitizerCalibration               iCalibrationPoints;
+        TDigitizerCalibration               iTapPoints;
+        TInt                                iCurrentCalibrationStep;
+        TBool                               iExitting;
+        TTouchScreenCalibLayout             iTouchScreenCalibLayout;
+        TBool                               iCalibrationDone;
+        TInt								iNativeOrientation;
+        TBool                               iCalibrationCancel;
+};
+
+#endif // TOUCHSCREENCALIBAPPUI_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/inc/TouchScreenCalibApplication.h	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,51 @@
+/*
+* Copyright (c) 2006 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:  Application class of the module.
+*
+*/
+
+
+
+#ifndef TOUCHSCREENCALIBAPPLICATION_H
+#define TOUCHSCREENCALIBAPPLICATION_H
+
+// SYSTEM INCLUDES
+#include <aknapp.h>
+
+// CONSTANTS
+const TUid KUidTouchScreenCalib = { 0x102828BC };
+
+// CLASS DECLARATION
+
+/**
+* CTouchScreenCalibApp application class.
+*/
+class CTouchScreenCalibApplication : public CAknApplication
+    {
+    private: // from CApaApplication
+        /**
+        * Create CTouchScreenCalibDocument document object.
+        */
+        CApaDocument* CreateDocumentL();
+
+        /**
+        * Return KUidTouchScreenCalib.
+        */
+        TUid AppDllUid() const;
+    };
+
+#endif // TOUCHSCREENCALIBAPPLICATION_H
+
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/inc/TouchScreenCalibDefines.h	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,44 @@
+/*
+* Copyright (c) 2006 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:  Includes some common defines used in the TouchScreenCalib application
+*
+*/
+
+
+#ifndef TOUCHSCREENCALIBDEFINES_H
+#define TOUCHSCREENCALIBDEFINES_H
+
+//CONSTANTS
+_LIT( KTouchScreenCalibAppName, "TouchScreenCalib" ); 
+
+// MACROS
+
+#define PANIC(aPanic) User::Panic( KTouchScreenCalibAppName, aPanic )
+
+#define TRACE_ADDPREFIX(aText) (TPtrC((const TText *)L"TouchScreenCalibApp: \"" L##aText L"\""))
+
+#ifdef _DEBUG
+#define TRACES(aMsg) RDebug::Print( TRACE_ADDPREFIX(aMsg) )
+#define TRACES1(aFormat,aP1) RDebug::Print( TRACE_ADDPREFIX(aFormat),(aP1) )
+#define TRACES2(aFormat,aP1,aP2) RDebug::Print( TRACE_ADDPREFIX(aFormat),(aP1),(aP2) )
+#define TRACES3(aFormat,aP1,aP2,aP3) RDebug::Print( TRACE_ADDPREFIX(aFormat),(aP1),(aP2),(aP3) )
+#else
+#define TRACES(aMsg)
+#define TRACES1(aFormat,aP1)
+#define TRACES2(aFormat,aP1,aP2)
+#define TRACES3(aFormat,aP1,aP2,aP3)
+#endif
+#endif      // TOUCHSCREENCALIBDEFINES_H
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/inc/TouchScreenCalibDocument.h	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,80 @@
+/*
+* Copyright (c) 2006 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:  Document class of the module.
+*
+*/
+
+
+
+#ifndef TOUCHSCREENCALIBDOCUMENT_H
+#define TOUCHSCREENCALIBDOCUMENT_H
+
+// SYSTEM INCLUDES
+#include <AknDoc.h>
+
+// FORWARD DECLARATIONS
+class   CEikAppUi;
+
+// CLASS DECLARATION
+
+/**
+*  CTouchScreenCalibDocument application class.
+*/
+class CTouchScreenCalibDocument : public CAknDocument
+{
+    public:
+
+        /**
+        *   C++ default constructor.
+        */
+        CTouchScreenCalibDocument(CEikApplication& aApp): CAknDocument(aApp) { }
+
+        /**
+        *   Two-phased constructor.
+        */
+        static CTouchScreenCalibDocument* NewL(CEikApplication& aApp);
+
+        /**
+        *   Destructor.
+        */
+        virtual ~CTouchScreenCalibDocument();
+
+    private:
+        /**
+        *   EPOC default constructor.
+        */
+        void ConstructL();
+
+        /**
+        * This method makes an application hidden so that it is not visible
+        * for example in Applications list and FastSwap window.
+        * @param CApaWindowGroupName* aWgName
+        * @return void        
+        */
+        void UpdateTaskNameL( CApaWindowGroupName* aWgName );
+
+    private:// from CEikDocument
+
+        /**
+        * Create CTouchScreenCalibAppUi object.
+        */
+        CEikAppUi* CreateAppUiL();
+        
+    private:// data
+
+};
+
+#endif
+
+//End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/inc/TouchScreenCalibPubSubObserver.h	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2007 - 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  
+*           This class the handles the received indications from the Public and
+*           Subscribe.
+*
+*/
+
+
+#ifndef TOUCHSCREENCALIBPUBSUBOBSERVER_H
+#define TOUCHSCREENCALIBPUBSUBOBSERVER_H
+
+//  INCLUDES
+#include <e32property.h>
+#include "MTouchScreenCalibPropertyResponder.h"
+#include "TouchScreenCalibAppUi.h"
+
+// CLASS DECLARATION
+class CTouchScreenCalibAppUi;
+class CTouchScreenCalibSubscriber;
+
+class CTouchScreenCalibPubSubObserver : public CBase, public MTouchScreenCalibPropertyResponder
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        * C++ constructor.
+        */
+        CTouchScreenCalibPubSubObserver( CTouchScreenCalibAppUi* aTouchScreenCalibAppUi );
+        
+        /**
+        * Two-phased constructor.
+        */
+        static CTouchScreenCalibPubSubObserver* NewL( CTouchScreenCalibAppUi* aTouchScreenCalibAppUi );
+        
+        /**
+        * Destructor.
+        */
+        ~CTouchScreenCalibPubSubObserver();
+
+    private:
+
+        /**
+        * By default EPOC constructor is private.
+        */
+        void ConstructL();
+
+        CTouchScreenCalibPubSubObserver();
+
+    protected: // From MTouchScreenCalibPropertyResponder
+
+        void HandlePropertyChangedL( const TUid& aCategory, TUint aKey );
+
+    private:    // Data
+        //reference to application class
+        CTouchScreenCalibAppUi*         iTouchScreenCalibAppUi; //uses
+        RProperty                       iProperty;
+        CTouchScreenCalibSubscriber*    iGlobalSWStateSubscriber;
+        CTouchScreenCalibSubscriber*    iTsyCallState;
+    };
+
+#endif      // TOUCHSCREENCALIBPUBSUBOBSERVER_H   
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/inc/TouchScreenCalibSubscriber.h	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  TouchScreenCalibSubscriber (Publish & Subscribe).
+*
+*/
+
+
+#ifndef TOUCHSCREENCALIBSUBSCRIBER_H
+#define TOUCHSCREENCALIBSUBSCRIBER_H
+
+// INCLUDES
+#include <e32base.h>
+#include <e32property.h>
+#include "MTouchScreenCalibPropertyResponder.h"
+
+// CLASS DECLARATION
+/**
+*  CTouchScreenCalibSubscriber
+*  
+*  @lib   
+*  @since 3.2
+*/
+
+class CTouchScreenCalibSubscriber : public CActive
+{
+public:
+    /**
+    * Two-phased constructor.
+    */         
+    static CTouchScreenCalibSubscriber* NewL( MTouchScreenCalibPropertyResponder& aTouchScreenCalibPropertyResponder, 
+                                     const TUid& aCategory, 
+                                     TUint aKey );
+
+    /**
+    * Destructor.
+    */
+     ~CTouchScreenCalibSubscriber();
+
+     void Subscribe();
+
+private:
+     CTouchScreenCalibSubscriber( MTouchScreenCalibPropertyResponder& aTouchScreenCalibPropertyResponder, 
+                         const TUid& aCategory, TUint 
+                         aKey );
+     void ConstructL();
+
+public: // from CActive
+    /**
+    *	@param none
+    *	@return none
+    */    
+    void RunL();
+    
+    /**
+    *	@param aError the error returned
+    *	@return error
+    */
+    TInt RunError( TInt aError );
+
+    /**
+    *	@param none
+    *	@return none
+    */    
+    void DoCancel();
+	
+private: // Methods not implemented
+    CTouchScreenCalibSubscriber( const CTouchScreenCalibSubscriber& );           // Copy constructor
+    CTouchScreenCalibSubscriber& operator=( const CTouchScreenCalibSubscriber& );// Assigment operator
+
+private:
+
+    MTouchScreenCalibPropertyResponder& iTouchScreenCalibPropertyResponder;
+    RProperty                           iProperty;
+    TUid                                iCategory;
+    TUint                               iKey;
+};
+
+#endif // TOUCHSCREENCALIBSUBSCRIBER_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/inc/TouchScreenCalibView.h	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,215 @@
+/*
+* Copyright (c) 2006 - 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  
+*     This class is the container class of the CTouchScreenCalibView.
+*     Is used to show tap target animation.
+*
+*/
+
+
+
+#ifndef TOUCHSCREENCALIBVIEW_H
+#define TOUCHSCREENCALIBVIEW_H
+
+// SYSTEM INCLUDES
+#include <coecntrl.h>
+#include <data_caging_path_literals.hrh>
+
+#include <touchfeedback.h>
+// USER INCLUDES
+#include "TouchScreenCalibAppUi.h"
+
+// CONSTANTS
+
+// FORWARD DECLARATIONS
+class TCalibAnimImageRect
+    {
+public:
+    TRect iAnimImageRect1;
+    TRect iAnimImageRect2;
+    TRect iAnimImageRect3;
+    TRect iAnimImageRect4;
+    };
+
+class CTouchScreenCalibAppUi;
+class CAknBitmapAnimation;
+
+// CLASS DECLARATION
+
+/**
+*  This class takes care of showing welcome animatio to the user.
+*/
+class CTouchScreenCalibView :  public CCoeControl , public MCoeControlObserver 
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        *  C++ default constructor.
+        */
+        CTouchScreenCalibView( CTouchScreenCalibAppUi* aTouchScreenCalibAppUi );
+
+        /**
+        * Two-phased constructor.
+        */
+        static CTouchScreenCalibView* NewL( CTouchScreenCalibAppUi* aTouchScreenCalibAppUi );
+
+        /**
+        *  Destructor
+        */
+        ~CTouchScreenCalibView();      
+
+        /**
+        *  This handles the key events in this control.
+        */
+        TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType);
+
+        /**
+        * Update UI
+        */
+        void UpdateL( TAknLayoutText aTextLayout );
+        
+        /**
+        * Prepare to draw background for ending phase
+        */
+        void DrawEndingBackground();
+        
+        /**
+        * Prepare to draw background for notes
+        */
+        void EndTargetAnimation();
+    
+        /**
+        *  This makes the animation module to stop showing animation.
+        */
+        void EndAnimation();
+
+        /**
+        * 
+        */
+        void SetTextL(TAknLayoutText aTextLayout);
+
+        /**
+        * 
+        */
+        void SetWinPriority(TInt aPriority);
+
+    private:
+
+        /**
+        * By default EPOC constructor is private.
+        */
+        void ConstructL();
+
+        CTouchScreenCalibView();
+
+        /**
+        *  Is called when size is changed.
+        */
+        void SizeChanged();
+
+        /**
+        *  Returns the count of the components in the container.
+        */
+        TInt CountComponentControls() const;
+
+        /**
+        *  Returns the component specified by aIndex parameter.
+        */
+        CCoeControl* ComponentControl(TInt aIndex) const;
+
+        /**
+        *  Handles the event of the control.
+        */
+        void HandleControlEventL(CCoeControl* aControl,TCoeEvent aEventType);
+
+        /**
+        *  Handles key events.
+        *  @param  aKeyEvent        Event to be handled
+        *  @param  aType            Type of the key event 
+        *  @return TKeyResponse
+        */
+        virtual TKeyResponse HandleKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);
+
+        /**
+        * Handles pointer events
+        */
+        virtual void HandlePointerEventL(const TPointerEvent& aPointerEvent);
+
+        /**
+        * Checks tapped point's validity
+        * @param TPoint             co-ordinates
+        * @since S60 3.2
+        */
+        TBool Validate(TPoint aPos);
+
+        /**
+        * Draw white background
+        * @since S60 3.2
+        */
+        void DrawBackground() const;
+
+        /**
+        * Draw texts
+        * @since S60 3.2
+        */
+        void DrawText() const;
+
+        /**
+        * Draw inactive tap points
+        * @since S60 3.2
+        */
+        void ShowImage( TRect aRect ) const;
+
+    private: // Functions from base classes
+
+        /**
+        * From CCoeControl
+        */
+        void Draw( const TRect& aRect ) const;
+    
+    protected: // Data
+
+        //Used for showing animation    
+        CAknBitmapAnimation *iAnim; //owns
+
+        CFbsBitmap *iBitmap;
+        CFbsBitmap *iBitmapMask;
+
+        CTouchScreenCalibAppUi* iTouchScreenCalibAppUi; //uses
+
+        //used for telling when the animation is showing
+        TBool iAnimationShowing;
+
+        //used for telling if animation is cancelled by user.
+        TBool iAnimationCancelled;
+
+        const CFont* iFont; // not owned
+
+        CArrayPtr<HBufC>* iText;
+
+        
+        TCalibAnimImageRect iAnimImageRect;
+
+        TPoint iTextTopLeft;
+        TSize iTextSize;
+        TInt iTextBaselineOffset;
+        TRgb iTextColor;
+        CGraphicsContext::TTextAlign iTextAlignment;
+        TBool iCalibrationCompleted;
+        MTouchFeedback* iTouchFeedback;
+    };
+
+#endif      // TOUCHSCREENCALIBVIEW_H
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/loc/touchscreencalib.loc	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,59 @@
+/*
+* Copyright (c) 2008 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:  Localization strings for TouchScreenCalib
+*
+*/
+
+
+// LOCALISATION STRINGS
+
+//d:Asks user to tap center of the target with stylus.
+//l:main_touch_calib_pane_t1
+//w:
+//r:3.2
+//
+#define qtn_touch_screen_cali_instr_gen "Touch screen calibration step %N of 4: Use stylus to tap center of target."
+
+//d:Used to tell user that pressing Send key cancels calibration and exits application.
+//d:This is used when TouchScreenCalib application is started from General Settings by user.
+//l:main_touch_calib_pane_t2
+//w:
+//r:3.2
+//
+#define qtn_touch_screen_cali_instr_can "To cancel press Send key."
+
+//d:Used to tell user that pressing Send key resets calibration and calibration
+//d:begins again from point 1. This is used when TouchScreenCalib application is
+//d:started when the phone is starter for the first time.
+//l:main_touch_calib_pane_t2
+//w:
+//r:3.2
+//
+#define qtn_touch_screen_cali_instr_res "To start again from point 1 press Send key."
+
+//d:This Information Note is displayed if user cancels calibration with Send key press.
+//l:popup_note_window/opt2
+//w:
+//r:5.0
+//
+#define qtn_touch_screen_cali_cancel "Calibration cancelled."
+
+//d:This Confirmation Note is dipslayed when calibration is done succesfully.
+//l:popup_note_window/opt2
+//w:
+//r:3.2
+//
+#define qtn_touch_screen_cali_done "Calibration successful!"
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/rom/TouchScreenCalib.iby	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*     This class is a part of the standard application framework.
+*     The application gets instantiated starting from this class.
+*     Provides a factory method for instantiating the document object.
+*
+*/
+#ifndef __TOUCHSCREENCALIB_IBY__
+#define __TOUCHSCREENCALIB_IBY__
+
+#if defined (__PEN_SUPPORT) && defined(__PEN_SUPPORT_CALIBRATION)
+S60_APP_EXE(TouchScreenCalib)
+S60_APP_AIF_RSC(TouchScreenCalib)
+#endif
+#if ( defined FF_TOUCHSCREENCALIB_IN_STARTUP && defined __PEN_SUPPORT && defined __PEN_SUPPORT_CALIBRATION )
+ECOM_PLUGIN( tscstartupextensionplugin.dll, tscstartupextensionplugin.rsc )
+file=ABI_DIR\BUILD_DIR\tsccustcmds.dll           SHARED_LIB_DIR\tsccustcmds.dll
+#endif //FF_TOUCHSCREENCALIB_IN_STARTUP
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/rom/TouchScreenCalibResources.iby	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*     This class is a part of the standard application framework.
+*     The application gets instantiated starting from this class.
+*     Provides a factory method for instantiating the document object.
+*
+*/
+
+#ifndef __TOUCHSCREENCALIB_RESOURCES_IBY__
+#define __TOUCHSCREENCALIB_RESOURCES_IBY__
+
+#if defined (RD_SCALABLE_UI_V2) && defined(__PEN_SUPPORT) && defined(__PEN_SUPPORT_CALIBRATION)
+S60_APP_RESOURCE(TouchScreenCalib)
+#endif
+
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/rom/TouchScreenCalib_variant.iby	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*     This class is a part of the standard application framework.
+*     The application gets instantiated starting from this class.
+*     Provides a factory method for instantiating the document object.
+*
+*/
+
+#ifndef __TOUCHSCREENCALIB_VARIANT_IBY__
+#define __TOUCHSCREENCALIB_VARIANT_IBY__
+
+#if defined (RD_SCALABLE_UI_V2) && defined(__PEN_SUPPORT) && defined(__PEN_SUPPORT_CALIBRATION)
+SCALABLE_IMAGE(APP_BITMAP_DIR,APP_BITMAP_DIR,TouchScreenCalib)
+S60_APP_RESOURCE(TouchScreenCalib_anim)
+#endif
+
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/src/TouchScreenCalibAppUi.cpp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,722 @@
+/*
+* Copyright (c) 2006 - 2008 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:  AppUi class of the application.
+*
+*/
+
+
+// SYSTEM INCLUDES
+#include <aknnotewrappers.h>
+#include <TouchScreenCalib.rsg>
+#include <e32property.h>
+#ifdef RD_STARTUP_ANIMATION_CUSTOMIZATION
+#include "touchscprivatepskeys.h"
+#else //RD_STARTUP_ANIMATION_CUSTOMIZATION
+#include <StartupAppInternalPSKeys.h>
+#endif //RD_STARTUP_ANIMATION_CUSTOMIZATION
+#include <aknlayoutscalable_apps.cdl.h>
+#include <layoutmetadata.cdl.h>
+#include <centralrepository.h>
+#include <starterdomaincrkeys.h>
+#include <starterclient.h>     //used for RemoveSplashScreen
+
+// USER INCLUDES
+#include "TouchScreenCalibApplication.h"
+#include "TouchScreenCalibAppUi.h"
+#include "TouchScreenCalibDefines.h"
+#include "TouchScreenCalibDocument.h"
+#include "TouchScreenCalibView.h"
+#include "TouchScreenCalibPubSubObserver.h"
+
+// CONSTANTS
+
+_LIT_SECURITY_POLICY_C1(KReadDeviceDataPolicy, ECapabilityReadDeviceData);
+_LIT_SECURITY_POLICY_C1(KWriteDeviceDataPolicy, ECapabilityWriteDeviceData);
+
+// ================= MEMBER FUNCTIONS =======================
+//
+// ----------------------------------------------------
+// CTouchScreenCalibAppUi::CTouchScreenCalibAppUi()
+// ----------------------------------------------------
+CTouchScreenCalibAppUi::CTouchScreenCalibAppUi():
+    iTouchScreenCalibPubSubObserver( NULL ),
+    iCurrentCalibrationStep( 0 ),
+    iExitting( EFalse ),
+    iCalibrationDone( EFalse ),
+    iCalibrationCancel( EFalse )
+    {
+    TRACES("CTouchScreenCalibAppUi::CTouchScreenCalibAppUi");
+    iNativeOrientation = KUnknownOrientation;
+    }
+
+// ----------------------------------------------------
+// CTouchScreenCalibAppUi::ConstructL()
+// ----------------------------------------------------
+void CTouchScreenCalibAppUi::ConstructL()
+    {
+    TRACES("CTouchScreenCalibAppUi::ConstructL()");
+    TInt flags = EStandardApp|EAknEnableSkin;
+
+    BaseConstructL(flags);
+
+#ifdef RD_STARTUP_ANIMATION_CUSTOMIZATION
+    RProperty::Define(KPSUidTouchScreenCalibration,
+#else //RD_STARTUP_ANIMATION_CUSTOMIZATION    
+    RProperty::Define(KPSUidStartup,
+#endif //RD_STARTUP_ANIMATION_CUSTOMIZATION
+                      KPSTouchScreenCalibration,
+                      RProperty::EInt,
+                      KReadDeviceDataPolicy,
+                      KWriteDeviceDataPolicy );
+    
+    // Clearing the calibration before doing the actual calibration
+    TDigitizerCalibrationType caltype = EFactory;
+    UserHal::RestoreXYInputCalibration(caltype);
+    ResetTapPoints();
+    
+//    SetOrientation();
+
+    iCalibrationPoints = CalibrationPoints();
+
+    // Set TSC application to be system application
+    CEikonEnv& eikEnv = *CEikonEnv::Static();
+    eikEnv.SetSystem( ETrue );
+
+    iTouchScreenCalibLayout.iAnimImageLayout1.LayoutRect(Rect(),AknLayoutScalable_Apps::main_touch_calib_pane_g1().LayoutLine());
+    iTouchScreenCalibLayout.iAnimImageLayout2.LayoutRect(Rect(),AknLayoutScalable_Apps::main_touch_calib_pane_g2().LayoutLine());
+    iTouchScreenCalibLayout.iAnimImageLayout3.LayoutRect(Rect(),AknLayoutScalable_Apps::main_touch_calib_pane_g3().LayoutLine());
+    iTouchScreenCalibLayout.iAnimImageLayout4.LayoutRect(Rect(),AknLayoutScalable_Apps::main_touch_calib_pane_g4().LayoutLine());
+
+    iTouchScreenCalibView = CTouchScreenCalibView::NewL( this );
+    AddToStackL( iTouchScreenCalibView );
+
+    iTouchScreenCalibView->SetWinPriority(0);
+    // Disable priority changes of window server
+    eikEnv.WsSession().ComputeMode( RWsSession::EPriorityControlDisabled );
+
+    UpdateL();
+    
+    iTouchScreenCalibPubSubObserver = CTouchScreenCalibPubSubObserver::NewL( this );
+
+    if (FirstBoot())
+        {
+        TRACES("CTouchScreenCalibAppUi::ConstructL(): First boot ongoing");        
+        TRACES("CTouchScreenCalibAppUi::ConstructL(): Connect to Starter");
+        RStarterSession startersession;
+        if( startersession.Connect() == KErrNone )
+            {
+            TRACES("CTouchScreenCalibAppUi::ConstructL(): Connected to Starter");
+            startersession.EndSplashScreen();
+            TRACES("CTouchScreenCalibAppUi::ConstructL(): Splash screen removed");
+            startersession.Close();
+            }
+        }
+    NextCalibrationStepL();
+
+    TRACES("CTouchScreenCalibAppUi::ConstructL(): End");
+    }
+
+// ----------------------------------------------------
+// CTouchScreenCalibAppUi::~CTouchScreenCalibAppUi()
+// ----------------------------------------------------
+CTouchScreenCalibAppUi::~CTouchScreenCalibAppUi()
+    {
+    TRACES("CTouchScreenCalibAppUi::~CTouchScreenCalibAppUi()");
+    if (iTouchScreenCalibView)
+        {
+        TRACES("CTouchScreenCalibAppUi::~CTouchScreenCalibAppUi(): delete iTouchScreenCalibView");
+        RemoveFromStack( iTouchScreenCalibView );
+        delete iTouchScreenCalibView;
+        }
+    if (iTouchScreenCalibPubSubObserver)
+        {
+        TRACES("CTouchScreenCalibAppUi::~CTouchScreenCalibAppUi(): delete iTouchScreenCalibPubSubObserver");
+        delete iTouchScreenCalibPubSubObserver;
+        }
+    TRACES("CTouchScreenCalibAppUi::~CTouchScreenCalibAppUi(): End");
+    }
+
+// ----------------------------------------------------
+// CTouchScreenCalibAppUi::NextCalibrationStepL()
+// ----------------------------------------------------
+void CTouchScreenCalibAppUi::NextCalibrationStepL()
+    {
+    TRACES("CTouchScreenCalibAppUi::NextCalibrationStepL()");
+    TRACES2("CTouchScreenCalibAppUi::NextCalibrationStepL(): TapPoint1: %d %d",iTapPoints.iTl.iX, iTapPoints.iTl.iY);
+    TRACES2("CTouchScreenCalibAppUi::NextCalibrationStepL(): TapPoint2: %d %d",iTapPoints.iTr.iX, iTapPoints.iTr.iY);
+    TRACES2("CTouchScreenCalibAppUi::NextCalibrationStepL(): TapPoint3: %d %d",iTapPoints.iBr.iX, iTapPoints.iBr.iY);
+    TRACES2("CTouchScreenCalibAppUi::NextCalibrationStepL(): TapPoint4: %d %d",iTapPoints.iBl.iX, iTapPoints.iBl.iY);
+    iCurrentCalibrationStep++;
+    TRACES1("CTouchScreenCalibAppUi::NextCalibrationStepL(): CurrentCalibrationStep: %d",iCurrentCalibrationStep);
+
+    if (iCurrentCalibrationStep > 4)
+        {
+        TRACES("CTouchScreenCalibAppUi::NextCalibrationStepL(): Calibration succesfully completed. Save it and exit application.");
+        SaveCalibration();
+        iCalibrationDone = ETrue;
+
+        iTouchScreenCalibView->EndTargetAnimation();
+        iTouchScreenCalibView->SetWinPriority(ECoeWinPriorityNormal);
+        TRACES("CTouchScreenCalibAppUi::NextCalibrationStepL(): Show 'Calibration Done' note");
+        HBufC* noteText = CEikonEnv::Static()->AllocReadResourceLC(R_QTN_TOUCH_SCREEN_CALI_DONE );
+        CAknInformationNote* note =
+            new( ELeave ) CAknInformationNote( ETrue );
+        note->ExecuteLD( *noteText );
+        CleanupStack::PopAndDestroy( noteText );
+        if ( FirstBoot() )
+            {
+            iTouchScreenCalibView->DrawEndingBackground();
+#ifdef RD_STARTUP_ANIMATION_CUSTOMIZATION
+            RProperty::Set( KPSUidTouchScreenCalibration, KPSTouchScreenCalibration, ETouchScreenCalibrationOk );    
+#else //RD_STARTUP_ANIMATION_CUSTOMIZATION    
+            RProperty::Set( KPSUidStartup, KPSTouchScreenCalibration, ETouchScreenCalibrationOk );    
+#endif //RD_STARTUP_ANIMATION_CUSTOMIZATION            
+            iTouchScreenCalibView->SetWinPriority(0);
+            }
+        else
+            {
+            PrepareToExit();
+            }
+        }
+    else
+        {
+        TRACES("CTouchScreenCalibAppUi::NextCalibrationStepL(): Update next step.");
+        UpdateL();
+        }
+    TRACES("CTouchScreenCalibAppUi::NextCalibrationStepL(): End");
+    }
+
+// ----------------------------------------------------
+// CTouchScreenCalibAppUi::SaveCalibration()
+// ----------------------------------------------------
+void CTouchScreenCalibAppUi::SaveCalibration()
+    {
+    TRACES("CTouchScreenCalibAppUi::SaveCalibration()");
+
+    // Touch Screen driver supports only portrait orientation. If device is now in
+    // landscape mode, convert points to portrait.
+    TDigitizerCalibration tapPoints = ConvertToCorrectOrientation(iTapPoints,
+                                                                  KConvertSaveCase);
+    UserHal::SetXYInputCalibration(tapPoints);
+    TRACES("CTouchScreenCalibAppUi::SaveCalibration(): End");
+    }
+
+// ----------------------------------------------------
+// CTouchScreenCalibAppUi::ResetCalibrationStepsL()
+// ----------------------------------------------------
+void CTouchScreenCalibAppUi::ResetCalibrationStepsL()
+    {
+    iCurrentCalibrationStep = 0;
+    ResetTapPoints();
+    NextCalibrationStepL();
+    }
+
+// ---------------------------------------------------------------------------
+// CTouchScreenCalibAppUi::HandleForegroundEventL(TBool aForeground)
+// ---------------------------------------------------------------------------
+void CTouchScreenCalibAppUi::HandleForegroundEventL( TBool aForeground )
+    {
+    // call super-class first
+    CAknAppUi::HandleForegroundEventL( aForeground );
+    TRACES1("CTouchScreenCalibAppUi::HandleForegroundEventL( %d )", aForeground);
+    if ( aForeground )
+        {
+        // if we are coming to foreground
+        UpdateL();
+        }
+    else
+        {
+        if (!FirstBoot())
+            {
+            // Take old calibration in use                
+            TDigitizerCalibrationType caltype = ESaved;
+            UserHal::RestoreXYInputCalibration(caltype);
+            PrepareToExit();
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CTouchScreenCalibAppUi::HandleKeyL(const TKeyEvent& aKeyEvent, TEventCode /*aType*/ )
+// ---------------------------------------------------------------------------
+void CTouchScreenCalibAppUi::HandleKeyL( const TKeyEvent& aKeyEvent, TEventCode /*aType*/ )
+    {
+    TRACES1("CTouchScreenCalibAppUi::HandleKeyL(): %d",aKeyEvent.iCode);
+
+    if (aKeyEvent.iCode == EKeyYes) //Send key
+        {
+        TRACES("CTouchScreenCalibAppUi::HandleKeyL(): Send Key");
+        if (FirstBoot()) // Restart calibration from step 1
+            {
+            TRACES("CTouchScreenCalibAppUi::HandleKey(): Go to first calibration step");
+            ResetCalibrationStepsL();
+            }
+        else// Show "Calibration cancelled" Information note.
+            {
+            TRACES("CTouchScreenCalibAppUi::HandleKeyL(): Show cancel note");
+            iCalibrationCancel = ETrue;
+            
+            iTouchScreenCalibView->EndAnimation();          
+            iTouchScreenCalibView->SetWinPriority(ECoeWinPriorityNormal);
+            HBufC* noteText = CEikonEnv::Static()->AllocReadResourceLC(R_QTN_TOUCH_SCREEN_CALI_CANCEL );
+            CAknInformationNote* note =
+                new( ELeave ) CAknInformationNote( ETrue );
+            note->ExecuteLD( *noteText );
+            CleanupStack::PopAndDestroy( noteText );
+            
+            // Take old calibration in use
+            TDigitizerCalibrationType caltype = ESaved;
+            UserHal::RestoreXYInputCalibration(caltype);
+            PrepareToExit();
+            }
+        }
+    else if ( aKeyEvent.iCode == EKeyNo || aKeyEvent.iCode == EKeyApplication0 
+                     || ( aKeyEvent.iCode == EKeyNull && aKeyEvent.iScanCode == EStdKeyDevice7 ))
+        {
+        TRACES("CTouchScreenCalibAppUi::HandleKeyL(): End Key or App Key");
+        if (!FirstBoot())
+            {
+            // Take old calibration in use                
+            TDigitizerCalibrationType caltype = ESaved;
+            UserHal::RestoreXYInputCalibration(caltype);
+            PrepareToExit();
+            }
+        }
+    TRACES("CTouchScreenCalibAppUi::HandleKeyL(): End");
+    }
+
+// ---------------------------------------------------------------------------
+// CTouchScreenCalibAppUi::HandlePointerL()
+// ---------------------------------------------------------------------------
+void CTouchScreenCalibAppUi::HandlePointerL( TPoint aPos )
+    {
+    TRACES("CTouchScreenCalibAppUi::HandlePointerL()");
+
+    switch(iCurrentCalibrationStep)
+        {
+        case 1:
+            TRACES("CTouchScreenCalibAppUi::HandlePointerL(): case 1");
+            iTapPoints.iTl.iX = aPos.iX;
+            iTapPoints.iTl.iY = aPos.iY;
+            break;
+        case 2:
+            TRACES("CTouchScreenCalibAppUi::HandlePointerL(): case 2");
+            iTapPoints.iTr.iX = aPos.iX;
+            iTapPoints.iTr.iY = aPos.iY;
+            break;
+        case 3:
+            TRACES("CTouchScreenCalibAppUi::HandlePointerL(): case 4");
+            iTapPoints.iBr.iX = aPos.iX;
+            iTapPoints.iBr.iY = aPos.iY;
+            break;
+        case 4:
+            TRACES("CTouchScreenCalibAppUi::HandlePointerL(): case 3");
+            iTapPoints.iBl.iX = aPos.iX;
+            iTapPoints.iBl.iY = aPos.iY;
+            break;
+        default:
+            TRACES("CTouchScreenCalibAppUi::HandlePointerL(): case default");
+            break;
+        }
+    TRACES("CTouchScreenCalibAppUi::HandlePointerL(): End: Continue calibration");
+    NextCalibrationStepL();
+    }
+
+// ---------------------------------------------------------------------------
+// CTouchScreenCalibAppUi::PrepareToExit()
+// ---------------------------------------------------------------------------
+void CTouchScreenCalibAppUi::PrepareToExit()
+    {
+    TRACES("CTouchScreenCalibAppUi::PrepareToExit()");
+    if (!iExitting)
+        {
+        iExitting = ETrue;
+        CEikAppUi::PrepareToExit();
+        Exit();
+        }
+    TRACES("CTouchScreenCalibAppUi::PrepareToExit(): End");
+    }
+
+// ---------------------------------------------------------------------------
+// CTouchScreenCalibAppUi::ResetTapPoints()
+// ---------------------------------------------------------------------------
+void CTouchScreenCalibAppUi::ResetTapPoints()
+    {
+    TRACES("CTouchScreenCalibAppUi::ResetTapPoints()");
+    iTapPoints.iTl.iX = 0;
+    iTapPoints.iTl.iY = 0;
+    iTapPoints.iTr.iX = 0;
+    iTapPoints.iTr.iY = 0;
+    iTapPoints.iBr.iX = 0;
+    iTapPoints.iBr.iY = 0;
+    iTapPoints.iBl.iX = 0;
+    iTapPoints.iBl.iY = 0;
+    TRACES("CTouchScreenCalibAppUi::ResetTapPoints(): End");
+    }
+
+// ---------------------------------------------------------------------------
+// CTouchScreenCalibAppUi::UpdateL()
+// ---------------------------------------------------------------------------
+void CTouchScreenCalibAppUi::UpdateL()
+    {
+    TRACES("CTouchScreenCalibAppUi::UpdateL()");
+    TRACES1("CTouchScreenCalibAppUi::UpdateL(): iCurrentCalibrationStep: %d",iCurrentCalibrationStep);
+
+    TAknLayoutText textLayout;
+    textLayout.LayoutText(TRect(), AknLayoutScalable_Apps::main_touch_calib_pane_t1().LayoutLine());
+
+    TRACES2("CTouchScreenCalibAppUi::UpdateL(): Text rect top:    X:%d Y:%d",textLayout.TextRect().iTl.iX, textLayout.TextRect().iTl.iY);
+    TRACES2("CTouchScreenCalibAppUi::UpdateL(): Text rect:bottom: X:%d Y:%d",textLayout.TextRect().iBr.iX, textLayout.TextRect().iBr.iY);
+
+    iTouchScreenCalibView->UpdateL(textLayout);
+
+    TRACES("CTouchScreenCalibAppUi::UpdateL(): End");
+    }
+
+// ---------------------------------------------------------------------------
+// CTouchScreenCalibAppUi::GetCalibrationStep()
+// ---------------------------------------------------------------------------
+TInt CTouchScreenCalibAppUi::GetCalibrationStep()
+    {
+    return iCurrentCalibrationStep;
+    }
+
+// ---------------------------------------------------------------------------
+// CTouchScreenCalibAppUi::GetAnimImageRect()
+// ---------------------------------------------------------------------------
+TRect CTouchScreenCalibAppUi::GetAnimImageRect(TInt aPointNumber)
+    {
+    TRACES1("CTouchScreenCalibAppUi::GetAnimImageRect(%d)", aPointNumber);
+    TRect rect;
+    TInt width(0);
+    TInt height(0);
+
+    // If aPointNumber is 0, return current calibration point.
+    if (aPointNumber == 0)
+        {
+        aPointNumber = GetCalibrationStep();
+        }
+
+    switch (aPointNumber)
+        {
+        case 1:
+            width = iTouchScreenCalibLayout.iAnimImageLayout1.Rect().iBr.iX -
+                         iTouchScreenCalibLayout.iAnimImageLayout1.Rect().iTl.iX;
+            height= iTouchScreenCalibLayout.iAnimImageLayout1.Rect().iBr.iY -
+                         iTouchScreenCalibLayout.iAnimImageLayout1.Rect().iTl.iY;
+
+            rect = TRect(TPoint( iCalibrationPoints.iTl.iX - (width/2),
+                                 iCalibrationPoints.iTl.iY - (height/2)),
+                         TPoint( iCalibrationPoints.iTl.iX + (width/2),
+                                 iCalibrationPoints.iTl.iY + (height/2)));
+            break;
+        case 2:
+            width = iTouchScreenCalibLayout.iAnimImageLayout2.Rect().iBr.iX -
+                         iTouchScreenCalibLayout.iAnimImageLayout2.Rect().iTl.iX;
+            height= iTouchScreenCalibLayout.iAnimImageLayout2.Rect().iBr.iY -
+                         iTouchScreenCalibLayout.iAnimImageLayout2.Rect().iTl.iY;
+
+            rect = TRect(TPoint( iCalibrationPoints.iTr.iX - (width/2),
+                                 iCalibrationPoints.iTr.iY - (height/2)),
+                         TPoint( iCalibrationPoints.iTr.iX + (width/2),
+                                 iCalibrationPoints.iTr.iY + (height/2)));
+            break;
+        case 3:
+            width = iTouchScreenCalibLayout.iAnimImageLayout3.Rect().iBr.iX -
+                         iTouchScreenCalibLayout.iAnimImageLayout3.Rect().iTl.iX;
+            height= iTouchScreenCalibLayout.iAnimImageLayout3.Rect().iBr.iY -
+                         iTouchScreenCalibLayout.iAnimImageLayout3.Rect().iTl.iY;
+
+            rect = TRect(TPoint( iCalibrationPoints.iBr.iX - (width/2),
+                                 iCalibrationPoints.iBr.iY - (height/2)),
+                         TPoint( iCalibrationPoints.iBr.iX + (width/2),
+                                 iCalibrationPoints.iBr.iY + (height/2)));
+            break;
+        case 4:
+            width = iTouchScreenCalibLayout.iAnimImageLayout4.Rect().iBr.iX -
+                         iTouchScreenCalibLayout.iAnimImageLayout4.Rect().iTl.iX;
+            height= iTouchScreenCalibLayout.iAnimImageLayout4.Rect().iBr.iY -
+                         iTouchScreenCalibLayout.iAnimImageLayout4.Rect().iTl.iY;
+
+            rect = TRect(TPoint( iCalibrationPoints.iBl.iX - (width/2),
+                                 iCalibrationPoints.iBl.iY - (height/2)),
+                         TPoint( iCalibrationPoints.iBl.iX + (width/2),
+                                 iCalibrationPoints.iBl.iY + (height/2)));
+            break;
+        default:
+            break;
+        }
+    TRACES("CTouchScreenCalibAppUi::GetAnimImageRect(): End");
+    return rect;
+    }
+
+// ---------------------------------------------------------------------------
+// CTouchScreenCalibAppUi::HandleResourceChange(...)
+// ---------------------------------------------------------------------------
+void CTouchScreenCalibAppUi::HandleScreenDeviceChangedL()
+    {
+    TRACES("CTouchScreenCalibAppUi::HandleResourceChange()");
+    CAknAppUiBase::HandleScreenDeviceChangedL();
+
+    if (!iCalibrationDone && !iCalibrationCancel )
+        {
+        TRACES("CTouchScreenCalibAppUi::HandleResourceChange(): Restart calibration");
+        iCalibrationPoints = CalibrationPoints();
+        if (iTouchScreenCalibView)
+            {
+            RemoveFromStack( iTouchScreenCalibView );
+            delete iTouchScreenCalibView;
+            iTouchScreenCalibView = NULL;
+            }
+        iTouchScreenCalibView = CTouchScreenCalibView::NewL( this );
+        AddToStackL( iTouchScreenCalibView );
+        ResetCalibrationStepsL();
+        }
+    else
+        {
+        TRACES("CTouchScreenCalibAppUi::HandleResourceChange(): Update ending background");
+        iTouchScreenCalibView->DrawEndingBackground();
+        }
+    TRACES("CTouchScreenCalibAppUi::HandleResourceChange(): End");
+    }
+
+// ---------------------------------------------------------------------------
+// CTouchScreenCalibAppUi::CalibrationPoints();
+// ---------------------------------------------------------------------------
+TDigitizerCalibration CTouchScreenCalibAppUi::CalibrationPoints()
+    {
+    TRACES("CTouchScreenCalibAppUi::CalibrationPoints()");
+    TDigitizerCalibration calibrationPoints;
+#if defined(__WINS__)
+    // Dummy values for emulator for testing purposes
+    TRect rect = iAvkonAppUi->ApplicationRect();
+    TRACES2("CTouchScreenCalibAppUi::CalibrationPoints(): Window resolution: (%d. %d)",rect.iBr.iX,rect.iBr.iY);
+
+    calibrationPoints.iTl.iX = rect.iTl.iX+50;
+    calibrationPoints.iTl.iY = rect.iTl.iY+50;
+    calibrationPoints.iTr.iX = rect.iBr.iX-50;
+    calibrationPoints.iTr.iY = rect.iTl.iY+50;
+    calibrationPoints.iBr.iX = rect.iBr.iX-50;
+    calibrationPoints.iBr.iY = rect.iBr.iY-50;
+    calibrationPoints.iBl.iX = rect.iTl.iX+50;
+    calibrationPoints.iBl.iY = rect.iBr.iY-50;
+#else
+    UserHal::CalibrationPoints(calibrationPoints);
+#endif
+
+    // Orientation in driver level could be different than window orientation. Convert
+    // points to correct orientation.
+    if (calibrationPoints.iBr.iX > calibrationPoints.iBr.iY )
+        {
+        TRACES("CTouchScreenCalibAppUi::CalibrationPoints(): Native orientation: landscape");
+        iNativeOrientation = KLandscapeOrientation;
+        }
+    else
+        {
+        TRACES("CTouchScreenCalibAppUi::CalibrationPoints(): Native orientation: portrait");
+        iNativeOrientation = KPortraitOrientation;
+        }
+    calibrationPoints = ConvertToCorrectOrientation(calibrationPoints, KConvertGetCase);
+
+    TRACES("CTouchScreenCalibAppUi::CalibrationPoints(): End");
+    return calibrationPoints;
+    }
+
+// ---------------------------------------------------------------------------
+// CTouchScreenCalibAppUi::ConvertToCorrectOrientation(TDigitizerCalibration aPoints);
+// ---------------------------------------------------------------------------
+TDigitizerCalibration CTouchScreenCalibAppUi::ConvertToCorrectOrientation(TDigitizerCalibration aPoints,
+                                                                          TInt aConvertCase)
+    {
+    TRACES("CTouchScreenCalibAppUi::ConvertToCorrectOrientation()");
+    TRACES2("CTouchScreenCalibAppUi::ConvertToCorrectOrientation(): X:%d Y:%d", aPoints.iTl.iX,aPoints.iTl.iY);
+    TRACES2("CTouchScreenCalibAppUi::ConvertToCorrectOrientation(): X:%d Y:%d", aPoints.iTr.iX,aPoints.iTr.iY);
+    TRACES2("CTouchScreenCalibAppUi::ConvertToCorrectOrientation(): X:%d Y:%d", aPoints.iBr.iX,aPoints.iBr.iY);
+    TRACES2("CTouchScreenCalibAppUi::ConvertToCorrectOrientation(): X:%d Y:%d", aPoints.iBl.iX,aPoints.iBl.iY);
+    TDigitizerCalibration points;
+    TPoint destReso;
+
+    TRect rect = iAvkonAppUi->ApplicationRect();
+
+    if (!IsCorrectOrientation(rect))
+        {
+        TRACES("CTouchScreenCalibAppUi::ConvertToCorrectOrientation(): Points are not for current layout.");
+        if (aConvertCase == KConvertGetCase)
+            {
+            destReso.iX = rect.iBr.iX;
+            destReso.iY = rect.iBr.iY;
+            TRACES2("CTouchScreenCalibAppUi::ConvertToCorrectOrientation(): Destin reso: X:%d Y:%d", destReso.iX,destReso.iY);
+            points = ChangeOrientation(aPoints, destReso);
+            }
+        else
+            {
+            destReso.iX = rect.iBr.iY;
+            destReso.iY = rect.iBr.iX;
+            TRACES2("CTouchScreenCalibAppUi::ConvertToCorrectOrientation(): Destin reso: X:%d Y:%d", destReso.iX,destReso.iY);
+            points = ChangeOrientation(aPoints, destReso);
+            }
+        }
+    else
+        {
+        points = aPoints;
+        }
+
+    TRACES2("CTouchScreenCalibAppUi::ConvertToCorrectOrientation(): X:%d Y:%d", points.iTl.iX,points.iTl.iY);
+    TRACES2("CTouchScreenCalibAppUi::ConvertToCorrectOrientation(): X:%d Y:%d", points.iTr.iX,points.iTr.iY);
+    TRACES2("CTouchScreenCalibAppUi::ConvertToCorrectOrientation(): X:%d Y:%d", points.iBr.iX,points.iBr.iY);
+    TRACES2("CTouchScreenCalibAppUi::ConvertToCorrectOrientation(): X:%d Y:%d", points.iBl.iX,points.iBl.iY);
+
+    TRACES("CTouchScreenCalibAppUi::ConvertToCorrectOrientation(): End");
+    return points;
+    }
+
+// ---------------------------------------------------------------------------
+// CTouchScreenCalibAppUi::IsCorrectOrientation(TRect aRect)
+// ---------------------------------------------------------------------------
+TBool CTouchScreenCalibAppUi::IsCorrectOrientation(TRect aRect)
+    {
+    TRACES("CTouchScreenCalibAppUi::IsCorrectOrientation()");
+    TBool ret(ETrue);
+    TBool nativePortrait(ETrue);
+
+    if (iNativeOrientation == KLandscapeOrientation)
+        {
+        TRACES("CTouchScreenCalibAppUi::IsCorrectOrientation(): Native orientation: landscape");
+        nativePortrait = EFalse;
+        }
+
+    TBool windowsPortrait(ETrue);
+
+    if (aRect.iBr.iX > aRect.iBr.iY)
+        {
+        TRACES("CTouchScreenCalibAppUi::IsCorrectOrientation(): Window orientation: landscape");
+        windowsPortrait = EFalse;
+        }
+    else
+        {
+        windowsPortrait = ETrue;
+        }
+
+    if (nativePortrait != windowsPortrait)
+        {
+        ret = EFalse;
+        }
+
+    TRACES1("CTouchScreenCalibAppUi::IsCorrectOrientation(): End: returns %d",ret);
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CTouchScreenCalibAppUi::ChangeOrientation(TDigitizerCalibration aPoints);
+// ---------------------------------------------------------------------------
+TDigitizerCalibration CTouchScreenCalibAppUi::ChangeOrientation(TDigitizerCalibration aSourcePoints,
+                                                                TPoint aDestReso)
+    {
+    TRACES("CTouchScreenCalibAppUi::ChangeOrientation()");
+    TDigitizerCalibration destPoints;
+
+    destPoints.iTl.iX = aSourcePoints.iTr.iY;
+    destPoints.iTl.iY = aDestReso.iY - aSourcePoints.iTr.iX;
+    destPoints.iTr.iX = aSourcePoints.iBr.iY;
+    destPoints.iTr.iY = aDestReso.iY - aSourcePoints.iBr.iX;
+    destPoints.iBr.iX = aSourcePoints.iBl.iY;
+    destPoints.iBr.iY = aDestReso.iY - aSourcePoints.iBl.iX;
+    destPoints.iBl.iX = aSourcePoints.iTl.iY;
+    destPoints.iBl.iY = aDestReso.iY - aSourcePoints.iTl.iX;
+
+
+    TRACES("CTouchScreenCalibAppUi::ChangeOrientation(): End");
+    return destPoints;
+    }
+
+// ---------------------------------------------------------
+// CTouchScreenCalibAppUi::FirstBoot()
+// ---------------------------------------------------------
+TBool CTouchScreenCalibAppUi::FirstBoot()
+    {
+    TRACES("CTouchScreenCalibAppUi::FirstBoot()");
+    TInt value( 0 );
+
+    TRACES("CTouchScreenCalibAppUi::FirstBoot(): Read first boot info from Central Repository ");
+    CRepository* repository(NULL);
+
+    TRAPD( err, repository = CRepository::NewL( KCRUidStartup ) );
+    if ( err == KErrNone )
+        {
+        err = repository->Get( KStartupFirstBoot, value );
+        }
+
+    delete repository;
+
+    if (value)
+        {
+        TRACES("CTouchScreenCalibAppUi::FirstBoot(): End, return EFalse");
+        return EFalse;
+        }
+
+    else
+        {
+        TRACES("CTouchScreenCalibAppUi::FirstBoot(): End, return ETrue");
+        return ETrue;
+        }
+    }
+
+
+/*
+ * This funcntion is used to change the screen orientation to the
+ * same orientation with the factory given calibration data. But it 
+ * is not used now. So just leave it here!
+ * */
+
+
+void CTouchScreenCalibAppUi::SetOrientation()
+    {
+#ifndef __WINS__
+
+    TInt orientation = KUnknownOrientation;
+    TInt nativeOrientation = KUnknownOrientation;
+    TDigitizerCalibration Points;
+    UserHal::CalibrationPoints( Points );
+    if ( Points.iBr.iX  > Points.iBr.iY)
+        {
+        orientation = KLandscapeOrientation;
+        }
+    else
+        {
+        orientation = KPortraitOrientation;
+        }
+    TRect rect = iAvkonAppUi->ApplicationRect();
+    if ( rect.iBr.iX > rect.iBr.iY )
+        {
+        nativeOrientation = KLandscapeOrientation;
+        }
+    else
+        {
+        nativeOrientation = KPortraitOrientation;
+        }
+    
+    if (orientation != nativeOrientation )
+        {
+        if ( orientation == KLandscapeOrientation )
+            {
+            SetOrientationL( CAknAppUiBase::EAppUiOrientationLandscape );
+            }
+        else
+            {
+            SetOrientationL( CAknAppUiBase::EAppUiOrientationPortrait );
+            }
+        }
+#endif
+    }
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/src/TouchScreenCalibApplication.cpp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,59 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  
+*     This module implements the application core i.e. application
+*     class and standard exported functions
+*
+*/
+
+
+// INCLUDE FILES
+#include "TouchScreenCalibApplication.h"
+#include "TouchScreenCalibDocument.h"
+
+// ========================= MEMBER FUNCTIONS ================================
+
+// ---------------------------------------------------------------------------
+// CTouchScreenCalibApplication::AppDllUid()
+// Returns application UID
+// ---------------------------------------------------------------------------
+TUid CTouchScreenCalibApplication::AppDllUid() const
+    {
+    return KUidTouchScreenCalib;
+    }
+
+// ---------------------------------------------------------------------------
+// CTouchScreenCalibApplication::CreateDocumentL()
+// Creates CTouchScreenCalibDocument object
+//
+// ---------------------------------------------------------------------------
+CApaDocument* CTouchScreenCalibApplication::CreateDocumentL()
+    {
+    return CTouchScreenCalibDocument::NewL(*this);
+    }
+
+// ===================== OTHER EXPORTED FUNCTIONS ============================
+#include <eikstart.h>
+
+LOCAL_C CApaApplication* NewApplication()
+    {
+    return new CTouchScreenCalibApplication;
+    }
+
+GLDEF_C TInt E32Main()
+    {
+    return EikStart::RunApplication(NewApplication);
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/src/TouchScreenCalibDocument.cpp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,73 @@
+/*
+* Copyright (c) 2006 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:  Document class of the application.
+*
+*/
+
+
+// SYSTEM INCLUDES
+#include <apgwgnam.h>
+
+// USER INCLUDES
+#include "TouchScreenCalibDocument.h"
+#include "TouchScreenCalibAppUi.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CTouchScreenCalibDocument::~CTouchScreenCalibDocument()
+// ---------------------------------------------------------
+CTouchScreenCalibDocument::~CTouchScreenCalibDocument()
+    {
+    }
+
+// ---------------------------------------------------------
+// CTouchScreenCalibDocument::ConstructL()
+// ---------------------------------------------------------
+void CTouchScreenCalibDocument::ConstructL()
+    {
+    }
+
+// ---------------------------------------------------------
+// CTouchScreenCalibDocument::NewL()
+// ---------------------------------------------------------
+CTouchScreenCalibDocument* CTouchScreenCalibDocument::NewL(
+        CEikApplication& aApp)     // CTouchScreenCalibApp reference
+    {
+    CTouchScreenCalibDocument* self = new (ELeave) CTouchScreenCalibDocument(aApp);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+    
+// ----------------------------------------------------
+// CTouchScreenCalibDocument::CreateAppUiL()
+// ----------------------------------------------------
+CEikAppUi* CTouchScreenCalibDocument::CreateAppUiL()
+    {
+    return new(ELeave) CTouchScreenCalibAppUi;
+    }
+
+// ----------------------------------------------------
+// CTouchScreenCalibDocument::UpdateTaskNameL()
+// Makes TouchScreenCalib-application hidden in menu shell and fastswap window
+// ----------------------------------------------------
+void CTouchScreenCalibDocument::UpdateTaskNameL( CApaWindowGroupName* aWgName )
+    {
+    CEikDocument::UpdateTaskNameL( aWgName );
+    aWgName->SetHidden( ETrue );
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/src/TouchScreenCalibPubSubObserver.cpp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,131 @@
+/*
+* Copyright (c) 2007 - 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  
+*           This class the handles the received indications from the Public and
+*           Subscribe. 
+*
+*/
+
+
+// SYSTEM INCLUDES
+#include <startupdomainpskeys.h>
+#include <ctsydomainpskeys.h>
+
+// USER INCLUDES
+#include "TouchScreenCalibPubSubObserver.h"
+#include "TouchScreenCalibPubSubObserver.h"
+#include "TouchScreenCalibSubscriber.h"
+#include "TouchScreenCalibDefines.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ----------------------------------------------------
+// CTouchScreenCalibPubSubObserver::CTouchScreenCalibPubSubObserver( CTouchScreenCalibAppUi* aTouchScreenCalibAppUi )
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ----------------------------------------------------
+CTouchScreenCalibPubSubObserver::CTouchScreenCalibPubSubObserver( CTouchScreenCalibAppUi* aTouchScreenCalibAppUi ) :
+    iTouchScreenCalibAppUi( aTouchScreenCalibAppUi )
+    {
+    }
+
+// ----------------------------------------------------
+// CTouchScreenCalibPubSubObserver::ConstructL()
+// ----------------------------------------------------
+void CTouchScreenCalibPubSubObserver::ConstructL()
+    {
+    TRACES("CTouchScreenCalibPubSubObserver::ConstructL()");
+
+    iGlobalSWStateSubscriber = CTouchScreenCalibSubscriber::NewL( *this, 
+                                                     KPSUidStartup, 
+                                                     KPSGlobalSystemState );
+    iGlobalSWStateSubscriber->Subscribe();
+
+    iTsyCallState = CTouchScreenCalibSubscriber::NewL( *this, 
+                                                     KPSUidCtsyCallInformation, 
+                                                     KCTsyCallState );
+    iTsyCallState->Subscribe();
+    
+    TRACES("CTouchScreenCalibPubSubObserver::ConstructL(): End");
+    }
+
+// ----------------------------------------------------------------------------
+// CTouchScreenCalibPubSubObserver::HandlePropertyChangedL()
+// ----------------------------------------------------------------------------
+void CTouchScreenCalibPubSubObserver::HandlePropertyChangedL( const TUid& aCategory, TUint aKey )
+    {
+    TRACES("CTouchScreenCalibPubSubObserver::HandlePropertyChangedL()");
+    TRACES1("CTouchScreenCalibPubSubObserver::HandlePropertyChangedL(): aKey: %d",aKey );
+
+    if (aCategory == KPSUidStartup && aKey == KPSGlobalSystemState)
+        {
+        TInt eventState;
+        User::LeaveIfError( RProperty::Get ( KPSUidStartup, KPSGlobalSystemState, eventState ) );
+
+        if( eventState == ESwStateCriticalPhaseOK ||
+            eventState == ESwStateEmergencyCallsOnly ||
+            eventState == ESwStateNormalRfOn ||
+            eventState == ESwStateNormalRfOff ||
+            eventState == ESwStateNormalBTSap )
+            {
+            TRACES("CTouchScreenCalibPubSubObserver::HandlePropertyChangedL(): Critical startup phase ready");
+            iTouchScreenCalibAppUi->PrepareToExit();
+            }
+        }
+    else if (aCategory == KPSUidCtsyCallInformation && aKey == KCTsyCallState)
+        {
+        TInt eventState;
+        User::LeaveIfError( RProperty::Get ( KPSUidCtsyCallInformation, KCTsyCallState, eventState ) );
+
+        if( eventState == EPSCTsyCallStateRinging ||
+            eventState == EPSCTsyCallStateDisconnecting)
+            {
+            TRACES("CTouchScreenCalibPubSubObserver::HandlePropertyChangedL(): Call detected");
+            iTouchScreenCalibAppUi->PrepareToExit();
+            }
+        }
+    TRACES("CTouchScreenCalibPubSubObserver::HandlePropertyChangedL(): End");
+    }
+
+// ----------------------------------------------------
+// CTouchScreenCalibPubSubObserver* CTouchScreenCalibPubSubObserver::NewL( CTouchScreenCalibAppUi* aTouchScreenCalibAppUi )
+// ----------------------------------------------------
+CTouchScreenCalibPubSubObserver* CTouchScreenCalibPubSubObserver::NewL( CTouchScreenCalibAppUi* aTouchScreenCalibAppUi )
+    {
+    TRACES("CTouchScreenCalibPubSubObserver::NewL()");
+    CTouchScreenCalibPubSubObserver* self = new (ELeave) CTouchScreenCalibPubSubObserver( aTouchScreenCalibAppUi );
+
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop(); // self
+
+    TRACES("CTouchScreenCalibPubSubObserver::NewL(): End");
+    return self;
+    }
+
+// ----------------------------------------------------
+// CTouchScreenCalibPubSubObserver::~CTouchScreenCalibPubSubObserver()
+// ----------------------------------------------------
+CTouchScreenCalibPubSubObserver::~CTouchScreenCalibPubSubObserver()
+    {
+    TRACES("CTouchScreenCalibPubSubObserver::~CTouchScreenCalibPubSubObserver()");
+
+    delete iGlobalSWStateSubscriber;
+    delete iTsyCallState;
+    iProperty.Close();
+
+    TRACES("CTouchScreenCalibPubSubObserver::~CTouchScreenCalibPubSubObserver(): End");
+    }
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/src/TouchScreenCalibSubscriber.cpp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,120 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CTouchScreenCalibSubscriber implementation.
+ *
+*/
+
+
+// INCLUDES
+#include <e32svr.h>
+#include "TouchScreenCalibAppUi.h"
+#include "TouchScreenCalibSubscriber.h"
+#include "TouchScreenCalibDefines.h"
+
+// CONSTANTS
+
+// ============================= MEMBER FUNCTIONS =============================
+
+// ----------------------------------------------------------------------------
+// CTouchScreenCalibSubscriber::NewL()
+// ----------------------------------------------------------------------------
+CTouchScreenCalibSubscriber* CTouchScreenCalibSubscriber::NewL( 
+                            MTouchScreenCalibPropertyResponder& aTouchScreenCalibPropertyResponder,
+                            const TUid& aCategory, 
+                            TUint aKey )
+    {
+    CTouchScreenCalibSubscriber* self = new (ELeave) CTouchScreenCalibSubscriber( aTouchScreenCalibPropertyResponder,
+                                                                aCategory, 
+                                                                aKey );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop(); //self
+    return self;
+    }
+
+// ----------------------------------------------------------------------------
+// CTouchScreenCalibSubscriber::ConstructL()
+// ----------------------------------------------------------------------------
+void CTouchScreenCalibSubscriber::ConstructL()
+    {
+    CActiveScheduler::Add( this );
+    iProperty.Attach( iCategory, iKey );
+    }
+
+// ----------------------------------------------------------------------------
+// CTouchScreenCalibSubscriber::Subscribe()
+// ----------------------------------------------------------------------------
+void CTouchScreenCalibSubscriber::Subscribe()
+    {
+    TRACES("CTouchScreenCalibSubscriber::Subscribe()");
+    iProperty.Subscribe( iStatus );
+    SetActive();
+    TRACES("CTouchScreenCalibSubscriber::Subscribe(): End");
+    }
+
+// ----------------------------------------------------------------------------
+// CTouchScreenCalibSubscriber::CTouchScreenCalibSubscriber()
+// ----------------------------------------------------------------------------
+CTouchScreenCalibSubscriber::CTouchScreenCalibSubscriber( MTouchScreenCalibPropertyResponder& aTouchScreenCalibPropertyResponder, 
+                                        const TUid& aCategory, 
+                                        TUint aKey ) :
+    CActive( EPriorityStandard ),
+    iTouchScreenCalibPropertyResponder( aTouchScreenCalibPropertyResponder ),
+    iCategory( aCategory),
+    iKey( aKey )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CTouchScreenCalibSubscriber::RunL()
+// ----------------------------------------------------------------------------
+void CTouchScreenCalibSubscriber::RunL()
+    {
+    TRACES("CTouchScreenCalibSubscriber::RunL()");
+    Subscribe();
+    iTouchScreenCalibPropertyResponder.HandlePropertyChangedL( iCategory, iKey );
+    TRACES("CTouchScreenCalibSubscriber::RunL(): End");
+    }
+
+// ----------------------------------------------------------------------------
+// CTouchScreenCalibSubscriber::DoCancel()
+// ----------------------------------------------------------------------------
+void CTouchScreenCalibSubscriber::DoCancel()
+    {
+    iProperty.Cancel();
+    }
+
+// ----------------------------------------------------------------------------
+// CTouchScreenCalibSubscriber::RunError()
+// ----------------------------------------------------------------------------
+TInt CTouchScreenCalibSubscriber::RunError( TInt aError )
+    {    
+    return aError;
+    }
+
+// ----------------------------------------------------------------------------
+// CTouchScreenCalibSubscriber::~CTouchScreenCalibSubscriber()
+// ----------------------------------------------------------------------------
+CTouchScreenCalibSubscriber::~CTouchScreenCalibSubscriber()
+    {
+    TRACES("CTouchScreenCalibSubscriber::~CTouchScreenCalibSubscriber()");
+    Cancel();
+    iProperty.Close();
+    TRACES("CTouchScreenCalibSubscriber::~CTouchScreenCalibSubscriber(): End");
+    }
+
+// End of File
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/src/TouchScreenCalibView.cpp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,569 @@
+/*
+* Copyright (c) 2006 - 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  
+*     This class is the container class of the CTouchScreenCalibView.
+*     Is used to show tap target animation.
+*
+*/
+
+
+// SYSTEM INCLUDES
+#include <aknappui.h>
+#include <aknnotewrappers.h>
+#include <barsread.h>
+#include <AknBitmapAnimation.h>
+#include <ConeResLoader.h>
+#include <AknBidiTextUtils.h>
+#include <TouchScreenCalib_anim.rsg>
+#include <TouchScreenCalib.rsg>
+#include <touchscreencalib.mbg>
+
+// USER INCLUDES
+#include "TouchScreenCalibView.h"
+#include "TouchScreenCalibDefines.h"
+#include "TouchScreenCalibAppUi.h"
+
+// CONSTANTS
+_LIT( KTargetAnimationResource, "z:TouchScreenCalib_anim.rsc" );
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------------------------
+// CTouchScreenCalibView::ConstructL()
+// Symbian 2nd phase constructor can leave.
+// ---------------------------------------------------------------------------
+void CTouchScreenCalibView::ConstructL()
+    {
+    TRACES("CTouchScreenCalibView::ConstructL()");
+
+    CreateWindowL();
+
+    iAnimImageRect.iAnimImageRect1 = iTouchScreenCalibAppUi->GetAnimImageRect(1);
+    iAnimImageRect.iAnimImageRect2 = iTouchScreenCalibAppUi->GetAnimImageRect(2);
+    iAnimImageRect.iAnimImageRect3 = iTouchScreenCalibAppUi->GetAnimImageRect(3);
+    iAnimImageRect.iAnimImageRect4 = iTouchScreenCalibAppUi->GetAnimImageRect(4);
+
+    // Parse filename of bitmaps
+    _LIT( KDirAndFile, "z:TouchScreenCalib.mif" );
+    TParse* fp1 = new(ELeave) TParse(); 
+    fp1->Set(KDirAndFile, &KDC_APP_BITMAP_DIR, NULL);
+    TFileName fileName( fp1->FullName() );
+    TRACES1("CTouchScreenCalibImage::CreateIconL(): Image: %S", &(fp1->FullName()) );
+    delete fp1;
+
+    AknIconUtils::CreateIconL( iBitmap, 
+                               iBitmapMask, 
+                               fileName, 
+                               EMbmTouchscreencalibQgn_graf_screencalib,
+                               EMbmTouchscreencalibQgn_graf_screencalib_mask);
+
+    iAvkonAppUi->StatusPane()->MakeVisible(EFalse);
+
+    TRACES("CTouchScreenCalibView::ConstructL(): Animation loading started");
+    iAnim = CAknBitmapAnimation::NewL();
+    iAnim->SetContainerWindowL( *this );
+    iAnim->SetScaleModeForAnimationFrames(EAspectRatioPreservedAndUnusedSpaceRemoved);
+    TResourceReader rr;
+    RConeResourceLoader loader( *iCoeEnv );
+
+    TParse* fp = new(ELeave) TParse(); 
+    fp->Set(KTargetAnimationResource, &KDC_APP_RESOURCE_DIR, NULL);
+    TRACES1("CTouchScreenCalibView::ConstructL(): Animated target resource path: %S", &fp->FullName());
+    TFileName name( fp->FullName() );
+    delete fp;
+    TInt fileError = loader.Open( name );
+    if ( fileError == KErrNone )
+        {
+        CleanupClosePushL( loader );
+        iCoeEnv->CreateResourceReaderLC(rr, R_SHUTDOWN_ANIM);
+        TRAPD(err, iAnim->ConstructFromResourceL( rr ));
+        if( err == KErrNone )
+            {
+            TResourceReader timeReader;
+            iCoeEnv->CreateResourceReaderLC(timeReader, R_ANIM_DURATION);
+            CleanupStack::PopAndDestroy(); // pop timeReader
+            iAnim->SetPosition(TPoint(0,0));
+            iAnim->SetSize(TSize(0,0));
+            TRACES("CTouchScreenCalibView::ConstructL(): animation succesfully loaded");
+            }
+        else
+            {
+            TRACES("CTouchScreenCalibView::ConstructL(): animation loading failed");
+            }
+        CleanupStack::PopAndDestroy(); //pop rr
+        TRACES("CTouchScreenCalibView::ConstructL(): animation loading ended");
+        CleanupStack::PopAndDestroy(); //pop loader
+        }
+    else
+        {
+        TRACES("CTouchScreenCalibView::ConstructL(): resource file loading failed");
+        }
+
+    SetRect(iAvkonAppUi->ApplicationRect());
+    ActivateL();
+
+    iFont = AknLayoutUtils::FontFromId(EAknLogicalFontSecondaryFont);
+    iText = new( ELeave ) CArrayPtrFlat<HBufC>( 20 );
+
+    TApaTask self(iCoeEnv->WsSession());
+    self.SetWgId(iCoeEnv->RootWin().Identifier());
+    self.BringToForeground(); 
+
+    if (iTouchScreenCalibAppUi->FirstBoot())
+        {
+        Window().SetOrdinalPosition( 0, ECoeWinPriorityAlwaysAtFront + 10000 );
+        }
+    else
+        {
+        Window().SetOrdinalPosition( 0, ECoeWinPriorityHigh + 1 );
+        }
+    iTouchFeedback = MTouchFeedback::Instance();
+
+    TRACES("CTouchScreenCalibView::ConstructL(): ConstructL ended");
+    }
+
+// -----------------------------------------------------------------------------
+// CTouchScreenCalibView::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CTouchScreenCalibView* CTouchScreenCalibView::NewL( CTouchScreenCalibAppUi* aTouchScreenCalibAppUi )
+    {
+    TRACES("CTouchScreenCalibView::NewL()");
+    CTouchScreenCalibView* self = new (ELeave) CTouchScreenCalibView( aTouchScreenCalibAppUi );
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+
+// ---------------------------------------------------------
+// CTouchScreenCalibView::CTouchScreenCalibView()
+// ---------------------------------------------------------
+CTouchScreenCalibView::CTouchScreenCalibView( CTouchScreenCalibAppUi* aTouchScreenCalibAppUi ) :
+    iTouchScreenCalibAppUi( aTouchScreenCalibAppUi ),
+    iAnimationShowing( EFalse ),
+    iAnimationCancelled ( EFalse ),
+    iText( NULL ),
+    iCalibrationCompleted( EFalse )
+    {
+    TRACES("CTouchScreenCalibView::CTouchScreenCalibView()");
+    TRACES("CTouchScreenCalibView::CTouchScreenCalibView(): End");
+    }
+
+// ---------------------------------------------------------------------------
+// CTouchScreenCalibView::UpdateL( TAknLayoutText aTextLayout  )
+// ---------------------------------------------------------------------------
+void CTouchScreenCalibView::UpdateL( TAknLayoutText aTextLayout )
+    {
+    TRACES("CTouchScreenCalibView::UpdateL()");
+
+    TRect rect = iTouchScreenCalibAppUi->GetAnimImageRect();
+
+    SetTextL(aTextLayout);
+    EndAnimation();
+    DrawDeferred();
+
+    TPoint pos = TPoint(rect.iTl.iX, rect.iTl.iY);
+    TSize size = TSize(rect.iBr.iX-rect.iTl.iX, rect.iBr.iY-rect.iTl.iY);
+    iAnim->SetPosition(pos);
+    iAnim->SetSize(size);
+
+    TRAPD(err, iAnim->StartAnimationL());      
+    if ( err != KErrNone )
+        {
+        TRACES("CTouchScreenCalibView::UpdateL(): Starting animation failed");
+        }
+    
+    TRACES("CTouchScreenCalibView::UpdateL(): End");
+    }
+
+// ---------------------------------------------------------------------------
+// CTouchScreenCalibView::DrawEndingBackground()
+// ---------------------------------------------------------------------------
+void CTouchScreenCalibView::DrawEndingBackground()
+    {
+    TRACES("CTouchScreenCalibView::DrawEndingBackground()");
+    iCalibrationCompleted = ETrue;
+    SetRect( iAvkonAppUi->ApplicationRect() );
+    EndAnimation();
+    DrawNow();
+    TRACES("CTouchScreenCalibView::DrawEndingBackground(): End");
+    }
+
+// ---------------------------------------------------------------------------
+// CTouchScreenCalibView::EndTargetAnimation()
+// ---------------------------------------------------------------------------
+void CTouchScreenCalibView::EndTargetAnimation()
+    {
+    TRACES("CTouchScreenCalibView::EndTargetAnimation()");
+    EndAnimation();
+    DrawNow();
+    TRACES("CTouchScreenCalibView::EndTargetAnimation(): End");
+    }
+
+// ---------------------------------------------------------------------------
+// CTouchScreenCalibView::~CTouchScreenCalibView()
+// ---------------------------------------------------------------------------
+CTouchScreenCalibView::~CTouchScreenCalibView()
+    {
+    TRACES("CTouchScreenCalibView::~CTouchScreenCalibView() begin");
+
+    if( iAnim )
+        {
+        if( iAnimationShowing )
+            {
+            iAnim->CancelAnimation();
+            TRACES("CTouchScreenCalibView::~CTouchScreenCalibView() animation cancelled");
+            }
+        }
+    delete iAnim;
+    TRACES("CTouchScreenCalibView::~CTouchScreenCalibView() iAnim deleted");
+
+    if ( iText )
+        {
+        iText->ResetAndDestroy();
+        delete iText;
+        iText = NULL;
+        }
+
+    delete iBitmap;
+    delete iBitmapMask;
+
+    TRACES("CTouchScreenCalibView::~CTouchScreenCalibView() end");
+    }
+
+// ---------------------------------------------------------------------------
+// CTouchScreenCalibView::ComponentControl(TInt aIndex)
+// ---------------------------------------------------------------------------
+CCoeControl* CTouchScreenCalibView::ComponentControl(TInt aIndex) const
+    {
+    switch ( aIndex )
+        {
+        case 0:
+            {
+            return iAnim;
+            }
+        default:
+            {
+            return NULL;
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CTouchScreenCalibView::CountComponentControls()
+// ---------------------------------------------------------------------------
+TInt CTouchScreenCalibView::CountComponentControls() const
+    {
+    return iAnim ? 1 : 0; // return nbr of controls inside this container
+    }
+
+// ---------------------------------------------------------------------------
+// CTouchScreenCalibView::Draw(const TRect& aRect) const
+// ---------------------------------------------------------------------------
+void CTouchScreenCalibView::Draw(const TRect& ) const
+    {
+    TRACES("CTouchScreenCalibView::Draw()");
+    DrawBackground();
+    if (!iCalibrationCompleted)
+        {
+        DrawText();
+        ShowImage(iAnimImageRect.iAnimImageRect1);
+        ShowImage(iAnimImageRect.iAnimImageRect2);
+        ShowImage(iAnimImageRect.iAnimImageRect3);
+        ShowImage(iAnimImageRect.iAnimImageRect4);
+        }
+    TRACES("CTouchScreenCalibView::Draw(): End");
+    }
+
+// ---------------------------------------------------------------------------
+// CTouchScreenCalibView::SizeChanged()
+// ---------------------------------------------------------------------------
+void CTouchScreenCalibView::SizeChanged()
+    {
+    if( iAnim )
+        {
+        iAnim->SetRect(Rect());
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CTouchScreenCalibView::EndAnimation()
+// ---------------------------------------------------------------------------
+void CTouchScreenCalibView::EndAnimation() 
+    {
+    TRACES("CTouchScreenCalibView::EndAnimation()");
+    iAnim->CancelAnimation();
+    TRACES("CTouchScreenCalibView::EndAnimation(): End");
+    }
+
+// ---------------------------------------------------------------------------
+// CTouchScreenCalibView::HandleControlEventL(...)
+// ---------------------------------------------------------------------------
+void CTouchScreenCalibView::HandleControlEventL(
+        CCoeControl* ,
+        TCoeEvent )
+    {
+    //pure virtual from MCoeControlObserver
+    TRACES("CTouchScreenCalibView::HandleControlEventL()");
+    }
+
+// ---------------------------------------------------------------------------
+// CTouchScreenCalibView::OfferKeyEventL(...)
+// ---------------------------------------------------------------------------
+TKeyResponse CTouchScreenCalibView::OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType)
+    {
+    TRACES("CTouchScreenCalibView::OfferKeyEventL()");
+    iTouchScreenCalibAppUi->HandleKeyL( aKeyEvent, aType );
+    TRACES("CTouchScreenCalibView::OfferKeyEventL(): End: return EKeyWasConsumed");
+    return EKeyWasConsumed;
+    }
+
+// ----------------------------------------------------
+// CTouchScreenCalibView::HandleKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
+// ----------------------------------------------------
+TKeyResponse CTouchScreenCalibView::HandleKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType )
+    {
+    TRACES("CTouchScreenCalibView::HandleKeyEventL()");
+    iTouchScreenCalibAppUi->HandleKeyL( aKeyEvent, aType );
+    TRACES("CTouchScreenCalibView::HandleKeyEventL(): End: return EKeyWasConsumed");
+    return EKeyWasConsumed;
+    }
+
+// ----------------------------------------------------
+// CTouchScreenCalibView::HandlePointerEventL(const TPointerEvent& aPointerEvent)
+// ----------------------------------------------------
+void CTouchScreenCalibView::HandlePointerEventL(const TPointerEvent& aPointerEvent)
+    {
+    TRACES("CTouchScreenCalibView::HandlePointerEventL()");
+    if (aPointerEvent.iType == TPointerEvent::EButton1Up)
+        {
+        TRACES("CTouchScreenCalibView::HandlePointerEventL(): EButton1Up");
+        TRACES1("CTouchScreenCalibView::HandlePointerEventL(): X = %d",aPointerEvent.iPosition.iX);
+        TRACES1("CTouchScreenCalibView::HandlePointerEventL(): Y = %d",aPointerEvent.iPosition.iY);
+
+        TPoint pos;
+
+        pos.iX = aPointerEvent.iPosition.iX;
+        pos.iY = aPointerEvent.iPosition.iY;
+        if (Validate(pos))
+            {
+            iTouchFeedback->InstantFeedback( ETouchFeedbackBasic );
+            iTouchScreenCalibAppUi->HandlePointerL( pos );
+            }
+        }
+    TRACES("CTouchScreenCalibView::HandlePointerEventL(): End --------------- Waiting for next event -------------");
+    }
+
+// ----------------------------------------------------
+// CTouchScreenCalibView::Validate(TPoint aPos)
+// ----------------------------------------------------
+TBool CTouchScreenCalibView::Validate(TPoint aPos)
+    {
+    TRACES("CTouchScreenCalibView::Validate()");
+    TInt retval( EFalse );
+
+    if ((aPos.iX > iTouchScreenCalibAppUi->GetAnimImageRect().iTl.iX) && 
+        (aPos.iX < iTouchScreenCalibAppUi->GetAnimImageRect().iBr.iX) &&
+        (aPos.iY > iTouchScreenCalibAppUi->GetAnimImageRect().iTl.iY) &&
+        (aPos.iY < iTouchScreenCalibAppUi->GetAnimImageRect().iBr.iY))
+        {
+        retval = ETrue;
+        }
+    TRACES1("CTouchScreenCalibView::Validate(): End: Return %d",retval);
+    return retval;
+    }
+
+// ---------------------------------------------------------------------------
+// CTouchScreenCalibView::DrawBackground() const
+// ---------------------------------------------------------------------------
+void CTouchScreenCalibView::DrawBackground() const
+    {
+    TRACES("CTouchScreenCalibView::DrawBackground()");
+    CWindowGc& gc = SystemGc();
+    TRect rect = iAvkonAppUi->ApplicationRect();
+    gc.SetPenStyle(CGraphicsContext::ENullPen);
+    gc.SetBrushColor(KRgbWhite);
+    gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
+    gc.DrawRect(rect);
+    ControlEnv()->WsSession().Flush(); // force draw of the context
+    TRACES("CTouchScreenCalibView::DrawBackground(): End");
+    }
+
+// ---------------------------------------------------------------------------
+// CTouchScreenCalibView::DrawText()
+// ---------------------------------------------------------------------------
+void CTouchScreenCalibView::DrawText() const
+    {
+    TRACES("CTouchScreenCalibView::DrawText()");
+
+    CWindowGc& gc = SystemGc();
+
+    gc.SetPenStyle(CGraphicsContext::ENullPen);
+
+    gc.UseFont( iFont );
+
+    gc.SetBrushStyle(CGraphicsContext::ENullBrush);
+
+    TPoint position( 0, 0 );
+    TPoint topLeft;
+    position = iTextTopLeft;
+
+    for ( TInt index = 0 ;
+          index < iText->Count();
+          index++, position.iY += iTextBaselineOffset )
+        {
+        HBufC* text = (*iText)[ index ];
+        if ( text )
+            {
+            topLeft = TPoint( position.iX, position.iY - iTextBaselineOffset );
+            gc.SetPenColor(iTextColor);
+            TRACES2("CTouchScreenCalibView::DrawText(): TopLeft: %d, %d", topLeft.iX, topLeft.iY);
+            gc.DrawText( *text,
+                         TRect( topLeft, iTextSize ),
+                         iTextBaselineOffset,
+                         iTextAlignment );
+            }
+        }
+    ControlEnv()->WsSession().Flush(); // force draw of the context
+    gc.DiscardFont();
+    TRACES("CTouchScreenCalibView::DrawText(): End");
+    }
+
+// -----------------------------------------------------------------------------
+// CTouchScreenCalibView::SetTextL(TAknLayoutText aTextLayout)
+// -----------------------------------------------------------------------------
+void CTouchScreenCalibView::SetTextL(TAknLayoutText aTextLayout)
+    {
+    TRACES("CTouchScreenCalibView::SetTextL()");
+
+    TInt textLineWidth;
+
+    TRACES2("CTouchScreenCalibView::SetTextL(): Text rect top: X:%d Y:%d",aTextLayout.TextRect().iTl.iX, aTextLayout.TextRect().iTl.iY);
+    TRACES2("CTouchScreenCalibView::SetTextL(): Text rect:bot: X:%d Y:%d",aTextLayout.TextRect().iBr.iX, aTextLayout.TextRect().iBr.iY);
+
+    textLineWidth = aTextLayout.TextRect().Width();
+
+    iTextTopLeft = TPoint(aTextLayout.TextRect().iTl.iX, aTextLayout.TextRect().iTl.iY);
+
+    iTextBaselineOffset = iFont->HeightInPixels() * 4 / 3;
+
+    iTextSize = TSize(textLineWidth, iTextBaselineOffset + iFont->DescentInPixels());
+            
+    iTextColor = aTextLayout.Color();
+
+    iTextAlignment = CGraphicsContext::ECenter;
+
+    HBufC* mainText1 = StringLoader::LoadLC(R_QTN_TOUCH_SCREEN_CALI_INSTR_GEN, 
+                                            iTouchScreenCalibAppUi->GetCalibrationStep());
+
+    HBufC* mainText2;
+    if (iTouchScreenCalibAppUi->FirstBoot())
+        {
+        mainText2 = CEikonEnv::Static()->AllocReadResourceLC(R_QTN_TOUCH_SCREEN_CALI_INSTR_RES );
+        }
+    else
+        {
+        mainText2 = CEikonEnv::Static()->AllocReadResourceLC(R_QTN_TOUCH_SCREEN_CALI_INSTR_CAN );
+        }
+
+    TBuf<256> text;
+    text.Copy( mainText1->Des() );
+    _LIT(KLineChange, "\n");
+    text.Append(KLineChange);
+    text.Append(mainText2->Des());
+
+    TRACES1("CTouchScreenCalibView::SetTextL(): text: %S",&text);
+
+    CArrayFix<TPtrC>* wrappedArray =
+        new( ELeave ) CArrayFixFlat<TPtrC>( 10 );
+    CleanupStack::PushL( wrappedArray );
+
+    HBufC* dataToDestroy =
+        AknBidiTextUtils::ConvertToVisualAndWrapToArrayL(
+            text, textLineWidth, *iFont, *wrappedArray
+        );
+
+    TInt numLines( wrappedArray->Count() );
+    TRACES1("CTouchScreenCalibView::SetTextL(): Number of lines: %d",numLines );
+
+    if ( iText )
+        {
+        iText->ResetAndDestroy();
+        delete iText;
+        iText = NULL;
+        }
+    iText = new( ELeave ) CArrayPtrFlat<HBufC>( 20 );
+
+    for ( TInt i = 0 ; i < numLines ; i++ )
+        {
+        HBufC* line = (*wrappedArray)[i].AllocLC();
+        TInt lineLength = line->Length();
+        TRACES1("CTouchScreenCalibView::SetTextL(): lineLength: %d",lineLength);        
+        if(!lineLength)
+            {
+            iText->AppendL( NULL );
+            CleanupStack::PopAndDestroy(line);  // line
+            }
+        else
+            {
+            iText->AppendL( line );
+            CleanupStack::Pop(line);  // line
+            }
+        }
+    iText->AppendL( NULL );
+
+    // If the last char was newline, add one extra, since
+    // wrapping automatically removes it.
+    if ( text[ text.Length() - 1 ] == '\n' )
+        {
+        iText->AppendL( NULL );
+        }
+
+    CleanupStack::PopAndDestroy(wrappedArray); // wrappedArray
+    delete dataToDestroy;
+
+    CleanupStack::PopAndDestroy(2); //mainText1, mainText2
+    TRACES("CTouchScreenCalibView::SetTextL(); End");
+    }
+
+// -----------------------------------------------------------------------------
+// CTouchScreenCalibView::ShowImage(TRect aRect)
+// -----------------------------------------------------------------------------
+void CTouchScreenCalibView::ShowImage(TRect aRect) const
+    {
+    TRACES("CTouchScreenCalibView::ShowImage()");
+    CWindowGc& gc = SystemGc();    
+    AknIconUtils::SetSize( iBitmap, aRect.Size(), EAspectRatioPreservedAndUnusedSpaceRemoved );
+    gc.SetPenStyle(CGraphicsContext::ENullPen);
+    gc.SetBrushColor(KRgbRed);
+    gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
+    gc.DrawRect(aRect);
+    gc.BitBlt( TPoint(aRect.iTl.iX, aRect.iTl.iY), iBitmap ); // CWindowGc member function
+    ControlEnv()->WsSession().Flush(); // force draw of the context
+    TRACES("CTouchScreenCalibView::ShowImage(): End");
+    }
+
+// -----------------------------------------------------------------------------
+// CTouchScreenCalibView::SetWinPriority()
+// -----------------------------------------------------------------------------
+void CTouchScreenCalibView::SetWinPriority(TInt aPriority)
+    {
+    TRACES("CTouchScreenCalibView::SetWinPriority()");
+    Window().SetOrdinalPosition( 0, aPriority );
+    TRACES("CTouchScreenCalibView::SetWinPriority(): End");
+    }
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/tsccustcmds/bwins/tsccustcmdsu.def	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,3 @@
+EXPORTS
+	?CmdTSCStartupExtensionNewL@TSCCustCmdFactory@@SAPAVMSsmCustomCommand@@XZ @ 1 NONAME ; class MSsmCustomCommand * TSCCustCmdFactory::CmdTSCStartupExtensionNewL(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/tsccustcmds/eabi/tsccustcmdsu.def	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,7 @@
+EXPORTS
+	_ZN17TSCCustCmdFactory26CmdTSCStartupExtensionNewLEv @ 1 NONAME
+	_ZTI14CTSCSubscriber @ 2 NONAME ; #<TI>#
+	_ZTI18CTSCPubSubObserver @ 3 NONAME ; #<TI>#
+	_ZTV14CTSCSubscriber @ 4 NONAME ; #<VT>#
+	_ZTV18CTSCPubSubObserver @ 5 NONAME ; #<VT>#
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/tsccustcmds/group/tsccustcmds.mmp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2007 - 2008 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:  Project definition file for project TSCCustCmd
+*
+*/
+
+#include <platform_paths.hrh>
+
+TARGET          tsccustcmds.dll
+TARGETTYPE      DLL
+UID             0x1000008D 0x10283123
+
+CAPABILITY      CAP_GENERAL_DLL
+VENDORID        VID_DEFAULT
+
+SOURCEPATH      ../src
+SOURCE          tscstartupextension.cpp
+SOURCE          tsccustcmdfactory.cpp
+SOURCE          tscsubscriber.cpp
+SOURCE          tscpubsubobserver.cpp
+
+USERINCLUDE     ../inc
+USERINCLUDE     ../../../inc
+
+
+// Default system include paths for middleware layer modules.
+APP_LAYER_SYSTEMINCLUDE
+
+LIBRARY         euser.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/tsccustcmds/inc/MTSCPropertyResponder.h	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Interface of Touch screen calibration property change obsever
+*
+*/
+
+#ifndef MTSCPROPERTYRESPONDER_H
+#define MTSCPROPERTYRESPONDER_H
+
+// INCLUDES
+#include <e32base.h>
+
+class MTSCPropertyResponder
+    {
+public:
+    virtual void HandlePropertyChangedL( const TUid& aCategory, TUint aKey ) = 0;
+    };
+#endif //MTSCPROPERTYRESPONDER_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/tsccustcmds/inc/TSCPubSubObserver.h	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,76 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  
+*           This class the handles the received indications from the Public and
+*           Subscribe.
+*
+*/
+
+#ifndef TSCPUBSUBOBSERVER_H
+#define TSCPUBSUBOBSERVER_H
+
+//  INCLUDES
+#include <e32property.h>
+#include "MTSCPropertyResponder.h"
+#include "tscstartupextension.h"
+
+
+
+// CLASS DECLARATION
+class CTSCStartupExtension;
+class CTSCSubscriber;
+
+class CTSCPubSubObserver : public CBase, public MTSCPropertyResponder
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        * C++ constructor.
+        */
+    	CTSCPubSubObserver( CTSCStartupExtension* aTSCStartupExtension );
+        
+        /**
+        * Two-phased constructor.
+        */
+        static CTSCPubSubObserver* NewL( CTSCStartupExtension* aTSCStartupExtension );
+        
+        /**
+        * Destructor.
+        */
+        ~CTSCPubSubObserver();
+
+    private:
+
+        /**
+        * By default EPOC constructor is private.
+        */
+        void ConstructL();
+
+        CTSCPubSubObserver();
+
+    protected: // From MTSCPropertyResponder
+
+        void HandlePropertyChangedL( const TUid& aCategory, TUint aKey );
+
+    private:    // Data
+        //reference to application class
+        CTSCStartupExtension *        iTSCStartupExtension; //uses
+
+        RProperty iProperty;
+        CTSCSubscriber*   iTSCSyncSubscriber;
+    };
+
+#endif      // TSCPUBSUBOBSERVER_H   
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/tsccustcmds/inc/tsccustcmdfactory.h	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Custom command implementation factory.
+*
+*/
+
+#ifndef TSCCUSTCMDFACTORY_H
+#define TSCCUSTCMDFACTORY_H
+
+#include <e32def.h>
+
+class MSsmCustomCommand;
+
+/**
+* Creates custom command objects.
+*/
+class TSCCustCmdFactory
+    {
+public:
+
+	IMPORT_C static MSsmCustomCommand* CmdTSCStartupExtensionNewL(); 
+    };
+
+#endif // TSCCUSTCMDFACTORY_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/tsccustcmds/inc/tscstartupextension.h	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2006 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:  Declaration of CTSCStartupExtension class.
+*
+*/
+
+#ifndef TSCSTARTUPEXTENSION_H
+#define TSCSTARTUPEXTENSION_H
+
+#include <e32base.h>
+#include <ssm/ssmcustomcommand.h>
+
+// FORWARD DECLARATIONS
+class CTSCPubSubObserver;
+
+/**
+*/
+NONSHARABLE_CLASS( CTSCStartupExtension )
+  : public CBase,
+    public MSsmCustomCommand
+    {
+public:
+
+    static CTSCStartupExtension * NewL();
+    virtual ~CTSCStartupExtension ();
+
+    void CalibrationDone();
+
+private: // From MSsmCustomCommand
+
+    TInt Initialize( CSsmCustomCommandEnv* aCmdEnv );
+    void Execute( const TDesC8& aParams, TRequestStatus& aStatus );
+    void ExecuteCancel();
+    void Release();
+    void Close();
+
+private:
+
+    /**
+    * First phase constructor.
+    */
+    CTSCStartupExtension ();
+
+private: //data
+
+    CTSCPubSubObserver* iTSCPubSubObserver; //owns
+    
+    TRequestStatus* iStatus;
+    TBool iRequestSent;
+
+    };
+
+#endif // TSCSTARTUPEXTENSION_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/tsccustcmds/inc/tscstartupextensiondef.h	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Includes some common defines used in the TSCStartupExtension
+*
+*/
+
+#ifndef TSCSTARTUPEXTENSIONDEF_H
+#define TSCSTARTUPEXTENSIONDEF_H
+
+#include <e32debug.h>
+
+//CONSTANTS
+_LIT( KTouchScreenCalibAppName, "TSCStartupExtension" );  
+
+// MACROS
+
+#define PANIC(aPanic) User::Panic( KTouchScreenCalibAppName, aPanic )
+
+#define TRACE_ADDPREFIX(aText) (TPtrC((const TText *)L"TSCStartupExtension: \"" L##aText L"\""))
+
+#ifdef _DEBUG
+#define TRACES(aMsg) RDebug::Print( TRACE_ADDPREFIX(aMsg) )
+#define TRACES1(aFormat,aP1) RDebug::Print( TRACE_ADDPREFIX(aFormat),(aP1) )
+#define TRACES2(aFormat,aP1,aP2) RDebug::Print( TRACE_ADDPREFIX(aFormat),(aP1),(aP2) )
+#define TRACES3(aFormat,aP1,aP2,aP3) RDebug::Print( TRACE_ADDPREFIX(aFormat),(aP1),(aP2),(aP3) )
+#else
+#define TRACES(aMsg)
+#define TRACES1(aFormat,aP1)
+#define TRACES2(aFormat,aP1,aP2)
+#define TRACES3(aFormat,aP1,aP2,aP3)
+#endif
+#endif      // TSCSTARTUPEXTENSIONDEF_H
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/tsccustcmds/inc/tscsubscriber.h	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  TSC Subscriber (Publish & Subscribe).
+*
+*/
+
+#ifndef TSCPLUGINSUBSCRIBER_H
+#define TSCPLUGINSUBSCRIBER_H
+
+// INCLUDES
+#include <e32base.h>
+#include <e32property.h>
+#include "MTSCPropertyResponder.h"
+
+// CLASS DECLARATION
+/**
+*  CTSCSubscriber
+*  
+*  @lib   tscstartupextensionplugin
+*  @since 3.2
+*/
+
+class CTSCSubscriber : public CActive
+{
+public:
+    /**
+    * Two-phased constructor.
+    */         
+    static CTSCSubscriber* NewL( MTSCPropertyResponder& aTSCPropertyResponder, 
+                                     const TUid& aCategory, 
+                                     TUint aKey );
+
+    /**
+    * Destructor.
+    */
+     ~CTSCSubscriber();
+
+     void Subscribe();
+
+private:
+     CTSCSubscriber( MTSCPropertyResponder& aTSCPropertyResponder, 
+                         const TUid& aCategory, TUint 
+                         aKey );
+     void ConstructL();
+
+public: // from CActive
+    /**
+    *	@param none
+    *	@return none
+    */    
+    void RunL();
+    
+    /**
+    *	@param aError the error returned
+    *	@return error
+    */
+    TInt RunError( TInt aError );
+
+    /**
+    *	@param none
+    *	@return none
+    */    
+    void DoCancel();
+	
+private: // Methods not implemented
+    CTSCSubscriber( const CTSCSubscriber& );           // Copy constructor
+    CTSCSubscriber& operator=( const CTSCSubscriber& );// Assigment operator
+
+private:
+
+    MTSCPropertyResponder&          iTSCPropertyResponder;
+    RProperty                       iProperty;
+    TUid                            iCategory;
+    TUint                           iKey;
+};
+
+
+#endif // TSCSUBSCRIBER_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/tsccustcmds/src/tsccustcmdfactory.cpp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Custom command implementation factory.
+*
+*/
+
+#include "tsccustcmdfactory.h"
+#include "tscstartupextension.h"
+
+// ======== MEMBER FUNCTIONS ========
+
+EXPORT_C MSsmCustomCommand* TSCCustCmdFactory::CmdTSCStartupExtensionNewL()
+	{
+	return CTSCStartupExtension::NewL();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/tsccustcmds/src/tscpubsubobserver.cpp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,131 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  
+*           This class the handles the received indications from the Public and
+*           Subscribe.
+*
+*/
+
+// SYSTEM INCLUDES
+#ifdef RD_STARTUP_ANIMATION_CUSTOMIZATION
+#include <e32cmn.h>
+#include <touchscprivatepskeys.h>
+#else //RD_STARTUP_ANIMATION_CUSTOMIZATION
+#include <StartupAppInternalPSKeys.h>
+#endif //RD_STARTUP_ANIMATION_CUSTOMIZATION
+
+// USER INCLUDES
+#include "TSCPubSubObserver.h"
+#include "tscsubscriber.h"
+#include "tscstartupextensiondef.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ----------------------------------------------------
+// CTSCPubSubObserver::CTSCPubSubObserver( CTSCStartupExtension* aTSCStartupExtension )
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ----------------------------------------------------
+CTSCPubSubObserver::CTSCPubSubObserver( CTSCStartupExtension* aTSCStartupExtension ) :
+    iTSCStartupExtension( aTSCStartupExtension )
+    {
+    }
+
+// ----------------------------------------------------
+// CTSCPubSubObserver::ConstructL()
+// ----------------------------------------------------
+void CTSCPubSubObserver::ConstructL()
+    {
+    TRACES("CTSCPubSubObserver::ConstructL()");
+
+    iTSCSyncSubscriber = CTSCSubscriber::NewL( *this, 
+#ifdef RD_STARTUP_ANIMATION_CUSTOMIZATION
+                                                     KPSUidTouchScreenCalibration,
+#else //RD_STARTUP_ANIMATION_CUSTOMIZATION
+                                                     KPSUidStartup,
+#endif //RD_STARTUP_ANIMATION_CUSTOMIZATION                                                     
+                                                     KPSTouchScreenCalibration );
+    iTSCSyncSubscriber->Subscribe();
+
+    TInt touchScreenCalibrationState;
+#ifdef RD_STARTUP_ANIMATION_CUSTOMIZATION
+    RProperty::Get( KPSUidTouchScreenCalibration, KPSTouchScreenCalibration, touchScreenCalibrationState );
+#else //RD_STARTUP_ANIMATION_CUSTOMIZATION
+    RProperty::Get( KPSUidStartup, KPSTouchScreenCalibration, touchScreenCalibrationState );
+#endif //RD_STARTUP_ANIMATION_CUSTOMIZATION
+    if ( touchScreenCalibrationState == ETouchScreenCalibrationOk )
+        {
+        iTSCStartupExtension->CalibrationDone();
+        }
+
+    TRACES("CTSCPubSubObserver::ConstructL(): End");
+    }
+
+// ----------------------------------------------------------------------------
+// CTSCPubSubObserver::HandlePropertyChangedL()
+// ----------------------------------------------------------------------------
+void CTSCPubSubObserver::HandlePropertyChangedL( const TUid& /*aCategory*/, TUint aKey )
+    {
+    TRACES("CTSCPubSubObserver::HandlePropertyChangedL()");
+    TRACES1("CTSCPubSubObserver::HandlePropertyChangedL(): aKey: %d",aKey );
+
+    if (aKey == KPSTouchScreenCalibration)
+        {
+        TInt state;
+    
+#ifdef RD_STARTUP_ANIMATION_CUSTOMIZATION
+        RProperty::Get( KPSUidTouchScreenCalibration, KPSTouchScreenCalibration, state );
+#else //RD_STARTUP_ANIMATION_CUSTOMIZATION
+        RProperty::Get( KPSUidStartup, KPSTouchScreenCalibration, state );
+#endif //RD_STARTUP_ANIMATION_CUSTOMIZATION
+
+        if ( state == ETouchScreenCalibrationOk )
+            {
+            iTSCStartupExtension->CalibrationDone();
+            }
+        }
+
+    TRACES("CTSCPubSubObserver::HandlePropertyChangedL(): End");
+    }
+
+// ----------------------------------------------------
+// CTSCPubSubObserver::NewL( CTSCStartupExtension* aTSCStartupExtension )
+// ----------------------------------------------------
+CTSCPubSubObserver* CTSCPubSubObserver::NewL( CTSCStartupExtension* aTSCStartupExtension )
+    {
+    TRACES("CTSCPubSubObserver::NewL()");
+    CTSCPubSubObserver* self = new (ELeave) CTSCPubSubObserver( aTSCStartupExtension );
+
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop(); // self
+
+    TRACES("CTSCPubSubObserver::NewL(): End");
+    return self;
+    }
+
+// ----------------------------------------------------
+// CTSCPubSubObserver::~CTSCPubSubObserver()
+// ----------------------------------------------------
+CTSCPubSubObserver::~CTSCPubSubObserver()
+    {
+    TRACES("CTSCPubSubObserver::~CTSCPubSubObserver()");
+
+    delete iTSCSyncSubscriber;
+    iProperty.Close();
+
+    TRACES("CTSCPubSubObserver::~CTSCPubSubObserver(): End");
+    }
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/tsccustcmds/src/tscstartupextension.cpp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,148 @@
+/*
+* Copyright (c) 2006 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:  Declaration of CTSCStartupExtension class.
+*
+*/
+
+#include "tscstartupextension.h"
+#include "tscstartupextensiondef.h"
+#include "TSCPubSubObserver.h"
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CDiskSpaceReserve::NewL
+//
+// ---------------------------------------------------------------------------
+//
+CTSCStartupExtension * CTSCStartupExtension ::NewL()
+    {
+    TRACES("CTSCStartupExtension :: NewL ()");
+    CTSCStartupExtension * self = new ( ELeave ) CTSCStartupExtension ;
+
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Destructor
+//
+// ---------------------------------------------------------------------------
+//
+CTSCStartupExtension::~CTSCStartupExtension ()
+    {
+    TRACES("CTSCStartupExtension ::~CTSCStartupExtension ()");
+
+    TRACES("CTSCStartupExtension ::~CTSCStartupExtension () End");
+    }
+
+
+
+// ---------------------------------------------------------------------------
+// First phase constructor
+//
+// ---------------------------------------------------------------------------
+//
+CTSCStartupExtension::CTSCStartupExtension()
+    :iRequestSent(EFalse)
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CTSCStartupExtension::Initialize
+//
+// ---------------------------------------------------------------------------
+//
+TInt CTSCStartupExtension::Initialize( CSsmCustomCommandEnv* /*aCmdEnv*/ )
+    {
+    TRACES("CTSCStartupExtension::Initialize()");
+    iTSCPubSubObserver = CTSCPubSubObserver::NewL( this );
+    return KErrNone;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CTSCStartupExtension::Execute
+//
+// ---------------------------------------------------------------------------
+//
+void CTSCStartupExtension::Execute(
+    const TDesC8& /*aParams*/,
+    TRequestStatus& aStatus )
+    {
+    TRACES("CTSCStartupExtension::ExecuteL()");    
+    aStatus = KRequestPending;
+    iStatus = &aStatus;
+    TRACES("CTSCStartupExtension::ExecuteL(): End");
+    }
+
+
+// ---------------------------------------------------------------------------
+// CTSCStartupExtension::ExecuteCancel
+//
+// ---------------------------------------------------------------------------
+//
+void CTSCStartupExtension::ExecuteCancel()
+    {
+    // Nothing to do.
+    }
+
+
+// ---------------------------------------------------------------------------
+// CTSCStartupExtension::Release
+//
+// ---------------------------------------------------------------------------
+//
+void CTSCStartupExtension::Release()
+    {
+    delete this;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CTSCStartupExtension::Close
+//
+// ---------------------------------------------------------------------------
+//
+void CTSCStartupExtension::Close()
+    {
+    TRACES("CTSCStartupExtension :: Close()");
+    if (iTSCPubSubObserver)
+        {
+        delete iTSCPubSubObserver;
+        iTSCPubSubObserver = NULL;
+        }
+    TRACES("CTSCStartupExtension :: Close() End");
+    }
+
+// ---------------------------------------------------------------------------
+// CTSCStartupExtension::CalibrationDone
+//
+// ---------------------------------------------------------------------------
+//
+void CTSCStartupExtension::CalibrationDone()
+    {
+    TRACES("CTSCStartupExtension::CalibrationDone()");
+    if (!iRequestSent)
+        {
+        TRACES("CTSCStartupExtension::CalibrationDone(): Send complete request");
+        TInt errorCode = KErrNone;    
+        User::RequestComplete( iStatus, errorCode );
+        iRequestSent = ETrue;
+        }
+    TRACES("CTSCStartupExtension::CalibrationDone(): End");
+    }    
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/tsccustcmds/src/tscsubscriber.cpp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,119 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  TSC Subscriber (Publish & Subscribe).
+*
+*/
+
+// INCLUDES
+#include <e32svr.h>
+#include "tscstartupextension.h"
+#include "tscsubscriber.h"
+#include "tscstartupextensiondef.h"
+
+// CONSTANTS
+
+// ============================= MEMBER FUNCTIONS =============================
+
+// ----------------------------------------------------------------------------
+// CTSCSubscriber::NewL()
+// ----------------------------------------------------------------------------
+CTSCSubscriber* CTSCSubscriber::NewL( 
+                            MTSCPropertyResponder& aTSCPropertyResponder,
+                            const TUid& aCategory, 
+                            TUint aKey )
+    {
+    CTSCSubscriber* self = new (ELeave) CTSCSubscriber( aTSCPropertyResponder,
+                                                        aCategory, 
+                                                        aKey );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop(); //self
+    return self;
+    }
+
+// ----------------------------------------------------------------------------
+// CTSCSubscriber::ConstructL()
+// ----------------------------------------------------------------------------
+void CTSCSubscriber::ConstructL()
+    {
+    CActiveScheduler::Add( this );
+    iProperty.Attach( iCategory, iKey );
+    }
+
+// ----------------------------------------------------------------------------
+// CTSCSubscriber::Subscribe()
+// ----------------------------------------------------------------------------
+void CTSCSubscriber::Subscribe()
+    {
+    TRACES("CTSCSubscriber::Subscribe()");
+    iProperty.Subscribe( iStatus );
+    SetActive();
+    TRACES("CTSCSubscriber::Subscribe(): End");
+    }
+
+// ----------------------------------------------------------------------------
+// CTSCSubscriber::CTSCSubscriber()
+// ----------------------------------------------------------------------------
+CTSCSubscriber::CTSCSubscriber( MTSCPropertyResponder& aTSCPropertyResponder, 
+                                        const TUid& aCategory, 
+                                        TUint aKey ) :
+    CActive( EPriorityStandard ),
+    iTSCPropertyResponder( aTSCPropertyResponder ),
+    iCategory( aCategory),
+    iKey( aKey )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CTSCSubscriber::RunL()
+// ----------------------------------------------------------------------------
+void CTSCSubscriber::RunL()
+    {
+    TRACES("CTSCSubscriber::RunL()");
+    Subscribe();
+    iTSCPropertyResponder.HandlePropertyChangedL( iCategory, iKey );
+    TRACES("CTSCSubscriber::RunL(): End");
+    }
+
+// ----------------------------------------------------------------------------
+// CTSCSubscriber::DoCancel()
+// ----------------------------------------------------------------------------
+void CTSCSubscriber::DoCancel()
+    {
+    iProperty.Cancel();
+    }
+
+// ----------------------------------------------------------------------------
+// CTSCSubscriber::RunError()
+// ----------------------------------------------------------------------------
+TInt CTSCSubscriber::RunError( TInt aError )
+    {    
+    return aError;
+    }
+
+// ----------------------------------------------------------------------------
+// CTSCSubscriber::~CTSCSubscriber()
+// ----------------------------------------------------------------------------
+CTSCSubscriber::~CTSCSubscriber()
+    {
+    TRACES("CTSCSubscriber::~CTSCSubscriber()");
+    Cancel();
+    iProperty.Close();
+    TRACES("CTSCSubscriber::~CTSCSubscriber(): End");
+    }
+
+// End of File
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/tscstartupextensionplugin/data/10283123.rss	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,58 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Registry info resource file for TSCStartupExtensionPlugIn
+*  ECOM plugin.
+*
+*/
+
+
+
+//  INCLUDES
+#include "registryinfov2.rh"
+
+//  RESOURCE DEFINITIONS
+// ---------------------------------------------------------
+//
+//   tscstartupextensionplugin_registry_info
+//   Registry info resource.
+//
+// ---------------------------------------------------------
+//
+RESOURCE REGISTRY_INFO tscstartupextensionplugin_registry_info
+    {
+    resource_format_version = RESOURCE_FORMAT_VERSION_2;
+    dll_uid = 0x10283123;
+    interfaces =
+        {
+        INTERFACE_INFO
+            {
+            interface_uid = 0x10205067; // UID of System startup extension plug-in API
+            implementations =
+                {
+                IMPLEMENTATION_INFO
+                    {
+                    implementation_uid = 0x10283124;
+                    version_no = 1;
+                    display_name = "TSCStartupExtensionPlugIn";
+                    default_data = "";
+                    opaque_data = "";
+                    rom_only = 1;
+                    }
+                };
+            }
+        };
+    }
+
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/tscstartupextensionplugin/group/tscstartupextensionplugin.mmp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,48 @@
+/*
+* Copyright (c) 2007 - 2008 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:  Project definition file for project TSCStartupExtensionPlugIn
+*
+*/
+
+
+#include <data_caging_paths.hrh>
+#include <platform_paths.hrh>
+
+TARGET          tscstartupextensionplugin.dll
+CAPABILITY      CAP_ECOM_PLUGIN
+TARGETTYPE      PLUGIN
+UID             0x10009D8D 0x10283123
+VENDORID        VID_DEFAULT
+
+SOURCEPATH      ../src
+SOURCE          tscstartupextensionplugin.cpp
+SOURCE          implementationfactory.cpp
+SOURCE          tscpluginsubscriber.cpp
+SOURCE          tscpluginpubsubobserver.cpp
+
+USERINCLUDE     ../inc
+USERINCLUDE     ../../../inc
+
+SYSTEMINCLUDE   /epoc32/include/ecom
+
+
+START RESOURCE  ../data/10283123.rss
+TARGET          tscstartupextensionplugin.rsc
+END
+
+
+APP_LAYER_SYSTEMINCLUDE
+
+LIBRARY         euser.lib
+LIBRARY         ecom.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/tscstartupextensionplugin/inc/MTSCPlugInPropertyResponder.h	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Interface of Touch screen calibration property change obsever
+*
+*/
+
+
+#ifndef MTSCPLUGINPROPERTYRESPONDER_H
+#define MTSCPLUGINPROPERTYRESPONDER_H
+
+// INCLUDES
+#include <e32base.h>
+
+class MTSCPlugInPropertyResponder
+    {
+public:
+    virtual void HandlePropertyChangedL( const TUid& aCategory, TUint aKey ) = 0;
+    };
+#endif //MTSCPLUGINPROPERTYRESPONDER_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/tscstartupextensionplugin/inc/TSCPlugInPubSubObserver.h	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,77 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  
+*           This class the handles the received indications from the Public and
+*           Subscribe.
+*
+*/
+
+
+#ifndef TSCPLUGINPUBSUBOBSERVER_H
+#define TSCPLUGINPUBSUBOBSERVER_H
+
+//  INCLUDES
+#include <e32property.h>
+#include "MTSCPlugInPropertyResponder.h"
+#include "tscstartupextensionplugin.h"
+
+
+
+// CLASS DECLARATION
+class CTSCStartupExtensionPlugIn;
+class CTSCPlugInSubscriber;
+
+class CTSCPlugInPubSubObserver : public CBase, public MTSCPlugInPropertyResponder
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        * C++ constructor.
+        */
+        CTSCPlugInPubSubObserver( CTSCStartupExtensionPlugIn* aTSCStartupExtensionPlugIn );
+        
+        /**
+        * Two-phased constructor.
+        */
+        static CTSCPlugInPubSubObserver* NewL( CTSCStartupExtensionPlugIn* aTSCStartupExtensionPlugIn );
+        
+        /**
+        * Destructor.
+        */
+        ~CTSCPlugInPubSubObserver();
+
+    private:
+
+        /**
+        * By default EPOC constructor is private.
+        */
+        void ConstructL();
+
+        CTSCPlugInPubSubObserver();
+
+    protected: // From MTSCPlugInPropertyResponder
+
+        void HandlePropertyChangedL( const TUid& aCategory, TUint aKey );
+
+    private:    // Data
+        //reference to application class
+        CTSCStartupExtensionPlugIn*        iTSCStartupExtensionPlugIn; //uses
+
+        RProperty iProperty;
+        CTSCPlugInSubscriber*   iTSCSyncSubscriber;
+    };
+
+#endif      // TSCPLUGINPUBSUBOBSERVER_H   
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/tscstartupextensionplugin/inc/tscpluginsubscriber.h	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,92 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  TSC Subscriber (Publish & Subscribe).
+*
+*/
+
+
+#ifndef TSCPLUGINSUBSCRIBER_H
+#define TSCPLUGINSUBSCRIBER_H
+
+// INCLUDES
+#include <e32base.h>
+#include <e32property.h>
+#include "MTSCPlugInPropertyResponder.h"
+
+// CLASS DECLARATION
+/**
+*  CTSCPlugInSubscriber
+*  
+*  @lib   tscstartupextensionplugin
+*  @since 3.2
+*/
+
+class CTSCPlugInSubscriber : public CActive
+{
+public:
+    /**
+    * Two-phased constructor.
+    */         
+    static CTSCPlugInSubscriber* NewL( MTSCPlugInPropertyResponder& aTSCPlugInPropertyResponder, 
+                                     const TUid& aCategory, 
+                                     TUint aKey );
+
+    /**
+    * Destructor.
+    */
+     ~CTSCPlugInSubscriber();
+
+     void Subscribe();
+
+private:
+     CTSCPlugInSubscriber( MTSCPlugInPropertyResponder& aTSCPlugInPropertyResponder, 
+                         const TUid& aCategory, TUint 
+                         aKey );
+     void ConstructL();
+
+public: // from CActive
+    /**
+    *	@param none
+    *	@return none
+    */    
+    void RunL();
+    
+    /**
+    *	@param aError the error returned
+    *	@return error
+    */
+    TInt RunError( TInt aError );
+
+    /**
+    *	@param none
+    *	@return none
+    */    
+    void DoCancel();
+	
+private: // Methods not implemented
+    CTSCPlugInSubscriber( const CTSCPlugInSubscriber& );           // Copy constructor
+    CTSCPlugInSubscriber& operator=( const CTSCPlugInSubscriber& );// Assigment operator
+
+private:
+
+    MTSCPlugInPropertyResponder&    iTSCPlugInPropertyResponder;
+    RProperty                       iProperty;
+    TUid                            iCategory;
+    TUint                           iKey;
+};
+
+
+#endif // TSCPLUGINSUBSCRIBER_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/tscstartupextensionplugin/inc/tscstartupextensionplugin.h	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,85 @@
+/*
+* Copyright (c) 2006 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:  Declaration of CTSCStartupExtensionPlugIn class.
+*
+*/
+
+
+#ifndef TSCSTARTUPEXTENSIONPLUGIN_H
+#define TSCSTARTUPEXTENSIONPLUGIN_H
+
+#include <systemstartupextension.h>
+
+// FORWARD DECLARATIONS
+class CTSCPlugInPubSubObserver;
+
+/**
+ * System Startup Extension plug-in for executing Touch Screen Calibration
+ * during system startup.
+ *
+ *  @lib tscstartupextensionplugin.lib
+ *  @since S60 3.2
+ */
+NONSHARABLE_CLASS( CTSCStartupExtensionPlugIn )
+  : public CSystemStartupExtension
+    {
+
+public:
+
+    static CTSCStartupExtensionPlugIn* NewL( TAny* aConstructionParameters );
+
+    virtual ~CTSCStartupExtensionPlugIn();
+
+    /**
+     * Execute TSC operations depending on parameters.
+     *
+     * @since S60 3.2
+     * @param aStatus The request status to complete after the task has been
+     * finished.
+     */
+    virtual void ExecuteL( TRequestStatus& aStatus, const TDesC& aParams );
+
+    /**
+     * Cancel pending request.
+     *
+     * @since S60 3.2
+     */
+    virtual void Cancel();
+
+    /**
+     *
+     * @since S60 3.2
+     * @param none
+     */
+    void CalibrationDone();
+
+private:
+
+    CTSCStartupExtensionPlugIn( TAny* aConstructionParameters );
+
+    /**
+     * Second phase constructor.
+     *
+     */
+    void ConstructL();
+
+private: //data
+
+    CTSCPlugInPubSubObserver* iTSCPlugInPubSubObserver; //owns
+    
+    TRequestStatus* iStatus;
+    TBool iRequestSent;
+    };
+
+#endif // TSCSTARTUPEXTENSIONPLUGIN_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/tscstartupextensionplugin/inc/tscstartupextensionplugindef.h	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Includes some common defines used in the TSCStartupExtensionPlugIn
+*
+*/
+
+
+#ifndef TSCSTARTUPEXTENSIONPLUGINDEF_H
+#define TSCSTARTUPEXTENSIONPLUGINDEF_H
+
+#include <e32debug.h>
+
+//CONSTANTS
+_LIT( KTouchScreenCalibAppName, "TSCStartupExtensionPlugIn" );  
+
+// MACROS
+
+#define PANIC(aPanic) User::Panic( KTouchScreenCalibAppName, aPanic )
+
+#define TRACE_ADDPREFIX(aText) (TPtrC((const TText *)L"TSCStartupExtensionPlugIn: \"" L##aText L"\""))
+
+#ifdef _DEBUG
+#define TRACES(aMsg) RDebug::Print( TRACE_ADDPREFIX(aMsg) )
+#define TRACES1(aFormat,aP1) RDebug::Print( TRACE_ADDPREFIX(aFormat),(aP1) )
+#define TRACES2(aFormat,aP1,aP2) RDebug::Print( TRACE_ADDPREFIX(aFormat),(aP1),(aP2) )
+#define TRACES3(aFormat,aP1,aP2,aP3) RDebug::Print( TRACE_ADDPREFIX(aFormat),(aP1),(aP2),(aP3) )
+#else
+#define TRACES(aMsg)
+#define TRACES1(aFormat,aP1)
+#define TRACES2(aFormat,aP1,aP2)
+#define TRACES3(aFormat,aP1,aP2,aP3)
+#endif
+#endif      // TSCSTARTUPEXTENSIONPLUGINDEF_H
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/tscstartupextensionplugin/src/implementationfactory.cpp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  TSCStartupExtensionPlugIn ECOM implementation factory.
+*
+*/
+
+
+#include "tscstartupextensionplugin.h"
+
+#include <implementationproxy.h>
+
+// Define the interface UIDs.
+const TImplementationProxy ImplementationTable[] =
+    {
+    IMPLEMENTATION_PROXY_ENTRY( 0x10283124, CTSCStartupExtensionPlugIn::NewL )
+    };
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+// -----------------------------------------------------------------------------
+// ImplementationGroupProxy.
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
+    {
+    aTableCount = sizeof( ImplementationTable ) / sizeof( TImplementationProxy );
+    return ImplementationTable;
+    }
+
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/tscstartupextensionplugin/src/tscpluginpubsubobserver.cpp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,132 @@
+/*
+* Copyright (c) 2007 - 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  
+*           This class the handles the received indications from the Public and
+*           Subscribe.
+*
+*/
+
+
+// SYSTEM INCLUDES
+#ifdef RD_STARTUP_ANIMATION_CUSTOMIZATION
+#include <e32cmn.h>
+#include <touchscprivatepskeys.h>
+#else //RD_STARTUP_ANIMATION_CUSTOMIZATION
+#include <StartupAppInternalPSKeys.h>
+#endif //RD_STARTUP_ANIMATION_CUSTOMIZATION
+
+// USER INCLUDES
+#include "TSCPlugInPubSubObserver.h"
+#include "tscpluginsubscriber.h"
+#include "tscstartupextensionplugindef.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ----------------------------------------------------
+// TSCPlugInPubSubObserver::TSCPlugInPubSubObserver( CTSCStartupExtensionPlugIn* aTSCStartupExtensionPlugIn )
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ----------------------------------------------------
+CTSCPlugInPubSubObserver::CTSCPlugInPubSubObserver( CTSCStartupExtensionPlugIn* aTSCStartupExtensionPlugIn ) :
+    iTSCStartupExtensionPlugIn( aTSCStartupExtensionPlugIn )
+    {
+    }
+
+// ----------------------------------------------------
+// CTSCPlugInPubSubObserver::ConstructL()
+// ----------------------------------------------------
+void CTSCPlugInPubSubObserver::ConstructL()
+    {
+    TRACES("CTSCPlugInPubSubObserver::ConstructL()");
+
+    iTSCSyncSubscriber = CTSCPlugInSubscriber::NewL( *this, 
+#ifdef RD_STARTUP_ANIMATION_CUSTOMIZATION
+                                                     KPSUidTouchScreenCalibration,
+#else //RD_STARTUP_ANIMATION_CUSTOMIZATION
+                                                     KPSUidStartup,
+#endif //RD_STARTUP_ANIMATION_CUSTOMIZATION                                                     
+                                                     KPSTouchScreenCalibration );
+    iTSCSyncSubscriber->Subscribe();
+
+    TInt touchScreenCalibrationState;
+#ifdef RD_STARTUP_ANIMATION_CUSTOMIZATION
+    RProperty::Get( KPSUidTouchScreenCalibration, KPSTouchScreenCalibration, touchScreenCalibrationState );
+#else //RD_STARTUP_ANIMATION_CUSTOMIZATION
+    RProperty::Get( KPSUidStartup, KPSTouchScreenCalibration, touchScreenCalibrationState );
+#endif //RD_STARTUP_ANIMATION_CUSTOMIZATION
+    if ( touchScreenCalibrationState == ETouchScreenCalibrationOk )
+        {
+        iTSCStartupExtensionPlugIn->CalibrationDone();
+        }
+
+    TRACES("CTSCPlugInPubSubObserver::ConstructL(): End");
+    }
+
+// ----------------------------------------------------------------------------
+// CTSCPlugInPubSubObserver::HandlePropertyChangedL()
+// ----------------------------------------------------------------------------
+void CTSCPlugInPubSubObserver::HandlePropertyChangedL( const TUid& /*aCategory*/, TUint aKey )
+    {
+    TRACES("CTSCPlugInPubSubObserver::HandlePropertyChangedL()");
+    TRACES1("CTSCPlugInPubSubObserver::HandlePropertyChangedL(): aKey: %d",aKey );
+
+    if (aKey == KPSTouchScreenCalibration)
+        {
+        TInt state;
+    
+#ifdef RD_STARTUP_ANIMATION_CUSTOMIZATION
+        RProperty::Get( KPSUidTouchScreenCalibration, KPSTouchScreenCalibration, state );
+#else //RD_STARTUP_ANIMATION_CUSTOMIZATION
+        RProperty::Get( KPSUidStartup, KPSTouchScreenCalibration, state );
+#endif //RD_STARTUP_ANIMATION_CUSTOMIZATION
+
+        if ( state == ETouchScreenCalibrationOk )
+            {
+            iTSCStartupExtensionPlugIn->CalibrationDone();
+            }
+        }
+
+    TRACES("CTSCPlugInPubSubObserver::HandlePropertyChangedL(): End");
+    }
+
+// ----------------------------------------------------
+// CTSCPlugInPubSubObserver::NewL( CTSCStartupExtensionPlugIn* aTSCStartupExtensionPlugIn )
+// ----------------------------------------------------
+CTSCPlugInPubSubObserver* CTSCPlugInPubSubObserver::NewL( CTSCStartupExtensionPlugIn* aTSCStartupExtensionPlugIn )
+    {
+    TRACES("CTSCPlugInPubSubObserver::NewL()");
+    CTSCPlugInPubSubObserver* self = new (ELeave) CTSCPlugInPubSubObserver( aTSCStartupExtensionPlugIn );
+
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop(); // self
+
+    TRACES("CTSCPlugInPubSubObserver::NewL(): End");
+    return self;
+    }
+
+// ----------------------------------------------------
+// CTSCPlugInPubSubObserver::~CTSCPlugInPubSubObserver()
+// ----------------------------------------------------
+CTSCPlugInPubSubObserver::~CTSCPlugInPubSubObserver()
+    {
+    TRACES("CTSCPlugInPubSubObserver::~CTSCPlugInPubSubObserver()");
+
+    delete iTSCSyncSubscriber;
+    iProperty.Close();
+
+    TRACES("CTSCPlugInPubSubObserver::~CTSCPlugInPubSubObserver(): End");
+    }
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/tscstartupextensionplugin/src/tscpluginsubscriber.cpp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,120 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CTSCPlugInSubscriber implementation.
+ *
+*/
+
+
+// INCLUDES
+#include <e32svr.h>
+#include "tscstartupextensionplugin.h"
+#include "tscpluginsubscriber.h"
+#include "tscstartupextensionplugindef.h"
+
+// CONSTANTS
+
+// ============================= MEMBER FUNCTIONS =============================
+
+// ----------------------------------------------------------------------------
+// CTSCPlugInSubscriber::NewL()
+// ----------------------------------------------------------------------------
+CTSCPlugInSubscriber* CTSCPlugInSubscriber::NewL( 
+                            MTSCPlugInPropertyResponder& aTSCPlugInPropertyResponder,
+                            const TUid& aCategory, 
+                            TUint aKey )
+    {
+    CTSCPlugInSubscriber* self = new (ELeave) CTSCPlugInSubscriber( aTSCPlugInPropertyResponder,
+                                                                aCategory, 
+                                                                aKey );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop(); //self
+    return self;
+    }
+
+// ----------------------------------------------------------------------------
+// CTSCPlugInSubscriber::ConstructL()
+// ----------------------------------------------------------------------------
+void CTSCPlugInSubscriber::ConstructL()
+    {
+    CActiveScheduler::Add( this );
+    iProperty.Attach( iCategory, iKey );
+    }
+
+// ----------------------------------------------------------------------------
+// CTSCPlugInSubscriber::Subscribe()
+// ----------------------------------------------------------------------------
+void CTSCPlugInSubscriber::Subscribe()
+    {
+    TRACES("CTSCPlugInSubscriber::Subscribe()");
+    iProperty.Subscribe( iStatus );
+    SetActive();
+    TRACES("CTSCPlugInSubscriber::Subscribe(): End");
+    }
+
+// ----------------------------------------------------------------------------
+// CTSCPlugInSubscriber::CTSCPlugInSubscriber()
+// ----------------------------------------------------------------------------
+CTSCPlugInSubscriber::CTSCPlugInSubscriber( MTSCPlugInPropertyResponder& aTSCPlugInPropertyResponder, 
+                                        const TUid& aCategory, 
+                                        TUint aKey ) :
+    CActive( EPriorityStandard ),
+    iTSCPlugInPropertyResponder( aTSCPlugInPropertyResponder ),
+    iCategory( aCategory),
+    iKey( aKey )
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// CTSCPlugInSubscriber::RunL()
+// ----------------------------------------------------------------------------
+void CTSCPlugInSubscriber::RunL()
+    {
+    TRACES("CTSCPlugInSubscriber::RunL()");
+    Subscribe();
+    iTSCPlugInPropertyResponder.HandlePropertyChangedL( iCategory, iKey );
+    TRACES("CTSCPlugInSubscriber::RunL(): End");
+    }
+
+// ----------------------------------------------------------------------------
+// CTSCPlugInSubscriber::DoCancel()
+// ----------------------------------------------------------------------------
+void CTSCPlugInSubscriber::DoCancel()
+    {
+    iProperty.Cancel();
+    }
+
+// ----------------------------------------------------------------------------
+// CTSCPlugInSubscriber::RunError()
+// ----------------------------------------------------------------------------
+TInt CTSCPlugInSubscriber::RunError( TInt aError )
+    {    
+    return aError;
+    }
+
+// ----------------------------------------------------------------------------
+// CTSCPlugInSubscriber::~CTSCPlugInSubscriber()
+// ----------------------------------------------------------------------------
+CTSCPlugInSubscriber::~CTSCPlugInSubscriber()
+    {
+    TRACES("CTSCPlugInSubscriber::~CTSCPlugInSubscriber()");
+    Cancel();
+    iProperty.Close();
+    TRACES("CTSCPlugInSubscriber::~CTSCPlugInSubscriber(): End");
+    }
+
+// End of File
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswuis/touchscreencalib/tscstartupextensionplugin/src/tscstartupextensionplugin.cpp	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,124 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0""
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Implementation of CTSCStartupExtensionPlugIn class.
+*
+*/
+
+
+#include "tscstartupextensionplugin.h"
+#include "tscstartupextensionplugindef.h"
+#include "TSCPlugInPubSubObserver.h"
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor
+//
+// ---------------------------------------------------------------------------
+//
+CTSCStartupExtensionPlugIn* CTSCStartupExtensionPlugIn::NewL(
+    TAny* aConstructionParameters )
+    {
+    CTSCStartupExtensionPlugIn* self =
+        new( ELeave ) CTSCStartupExtensionPlugIn( aConstructionParameters );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Destructor
+//
+// ---------------------------------------------------------------------------
+//
+CTSCStartupExtensionPlugIn::~CTSCStartupExtensionPlugIn()
+    {
+    TRACES("CTSCStartupExtensionPlugIn::~CTSCStartupExtensionPlugIn()");
+    if (iTSCPlugInPubSubObserver)
+        {
+        delete iTSCPlugInPubSubObserver;
+        }
+    TRACES("CTSCStartupExtensionPlugIn::~CTSCStartupExtensionPlugIn()");
+    }
+
+
+// ---------------------------------------------------------------------------
+// First phase constructor
+//
+// ---------------------------------------------------------------------------
+//
+CTSCStartupExtensionPlugIn::CTSCStartupExtensionPlugIn(
+    TAny* aConstructionParameters )
+  : CSystemStartupExtension( aConstructionParameters ),
+    iRequestSent(EFalse)
+    {
+    }
+
+
+// ---------------------------------------------------------------------------
+// CTSCStartupExtensionPlugIn::ConstructL
+//
+// ---------------------------------------------------------------------------
+//
+void CTSCStartupExtensionPlugIn::ConstructL()
+    {
+    TRACES("CTSCStartupExtensionPlugIn::ConstructL()");
+    iTSCPlugInPubSubObserver = CTSCPlugInPubSubObserver::NewL( this );
+    TRACES("CTSCStartupExtensionPlugIn::ConstructL(): End");
+    }
+
+// ---------------------------------------------------------------------------
+// CTSCStartupExtensionPlugIn::ExecuteL
+//
+// ---------------------------------------------------------------------------
+//
+void CTSCStartupExtensionPlugIn::ExecuteL(
+    TRequestStatus& aStatus,
+    const TDesC& /*aParams*/ )
+    {
+    TRACES("CTSCStartupExtensionPlugIn::ExecuteL()");    
+    aStatus = KRequestPending;
+    iStatus = &aStatus;
+    TRACES("CTSCStartupExtensionPlugIn::ExecuteL(): End");
+    }
+
+// ---------------------------------------------------------------------------
+// CTSCStartupExtensionPlugIn::Cancel
+//
+// ---------------------------------------------------------------------------
+//
+void CTSCStartupExtensionPlugIn::Cancel()
+    {
+    // Nothing to do.
+    }
+
+// ---------------------------------------------------------------------------
+// CTSCStartupExtensionPlugIn::CalibrationDone
+//
+// ---------------------------------------------------------------------------
+//
+void CTSCStartupExtensionPlugIn::CalibrationDone()
+    {
+    TRACES("CTSCStartupExtensionPlugIn::CalibrationDone()");
+    if (!iRequestSent)
+        {
+        TRACES("CTSCStartupExtensionPlugIn::CalibrationDone(): Send complete request");
+        TInt errorCode = KErrNone;    
+        User::RequestComplete( iStatus, errorCode );
+        iRequestSent = ETrue;
+        }
+    TRACES("CTSCStartupExtensionPlugIn::CalibrationDone(): End");
+    }    
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tsrc/group/bld.inf	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,33 @@
+/*
+* 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: Build information file
+*
+*/
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+PRJ_MMPFILES
+
+PRJ_TESTMMPFILES
+//#include "../../devmngt_plat/settings_backgroundimage_api/tsrc/group/bld.inf"
+//#include "../../devmngt_plat/settings_framework_api/tsrc/group/bld.inf"
+//#include "../../devmngt_plat/settings_launch_api/tsrc/group/bld.inf"
+//#include "../../devmngt_plat/settings_listbox_api/tsrc/group/bld.inf"
+//#include "../../devmngt_plat/filelist_api/tsrc/group/bld.inf"
+//#include "../../devmngt_plat/profiles_engine_api/tsrc/group/bld.inf"
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tsrc/group/copy_binaries_to_sys_dir.mk	Thu Dec 17 08:46:07 2009 +0200
@@ -0,0 +1,41 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "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: Icons makefile for project settingsuis
+#
+
+do_nothing :
+	@rem do_nothing
+
+MAKMAKE : do_nothing
+
+BLD : do_nothing
+
+CLEAN : do_nothing
+	del \epoc32\RELEASE\winscw\udeb\Z\sys\bin\MT_CGSLauncher.dll /f
+
+LIB : do_nothing
+
+CLEANLIB : do_nothing
+
+RESOURCE : do_nothing
+
+FREEZE : do_nothing
+
+SAVESPACE : do_nothing
+
+RELEASABLES : do_nothing
+
+FINAL :
+	echo COPYING
+	copy \epoc32\RELEASE\winscw\udeb\MT_CGSLauncher.dll \epoc32\RELEASE\winscw\udeb\Z\sys\bin /y