Revision: 201023
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 23 Jun 2010 18:33:40 +0300
changeset 103 b99b84bcd2d1
parent 83 156f692b1687
child 104 9b022b1f357c
Revision: 201023 Kit: 2010125
activityfw/activitydatabase/bwins/hsactivitydbclientu.def
activityfw/activitydatabase/eabi/hsactivitydbclientu.def
activityfw/activitydatabase/hsactivitydbclient/hsactivitydbclient.pro
activityfw/activitydatabase/hsactivitydbclient/inc/hsactivitydbclient.h
activityfw/activitydatabase/hsactivitydbclient/s60/inc/hsactivitydbclient_p.h
activityfw/activitydatabase/hsactivitydbclient/s60/src/hsactivitydbclient_p.cpp
activityfw/activitydatabase/hsactivitydbclient/src/hsactivitydbclient.cpp
activityfw/activitydatabase/hsactivitydbserver/group/hsactivitydbserver.mmp
activityfw/activitydatabase/hsactivitydbserver/inc/activitybroadcasttask.h
activityfw/activitydatabase/hsactivitydbserver/inc/activitydataprovidertask.h
activityfw/activitydatabase/hsactivitydbserver/inc/activityobservertask.h
activityfw/activitydatabase/hsactivitydbserver/inc/activityqueries.h
activityfw/activitydatabase/hsactivitydbserver/inc/activityserver.h
activityfw/activitydatabase/hsactivitydbserver/inc/activitysession.h
activityfw/activitydatabase/hsactivitydbserver/inc/activitystorage.h
activityfw/activitydatabase/hsactivitydbserver/inc/activitystorageasynctask.h
activityfw/activitydatabase/hsactivitydbserver/inc/activitystoragesynctask.h
activityfw/activitydatabase/hsactivitydbserver/inc/activitytask.h
activityfw/activitydatabase/hsactivitydbserver/inc/activitytaskstorage.h
activityfw/activitydatabase/hsactivitydbserver/inc/activitythumbnailtask.h
activityfw/activitydatabase/hsactivitydbserver/inc/afbroadcasttask.h
activityfw/activitydatabase/hsactivitydbserver/inc/afdataprovidertask.h
activityfw/activitydatabase/hsactivitydbserver/inc/afobservertask.h
activityfw/activitydatabase/hsactivitydbserver/inc/afqueries.h
activityfw/activitydatabase/hsactivitydbserver/inc/afserver.h
activityfw/activitydatabase/hsactivitydbserver/inc/afsession.h
activityfw/activitydatabase/hsactivitydbserver/inc/afstorage.h
activityfw/activitydatabase/hsactivitydbserver/inc/afstorageasynctask.h
activityfw/activitydatabase/hsactivitydbserver/inc/afstoragesynctask.h
activityfw/activitydatabase/hsactivitydbserver/inc/aftask.h
activityfw/activitydatabase/hsactivitydbserver/inc/aftaskstorage.h
activityfw/activitydatabase/hsactivitydbserver/inc/afthumbnailtask.h
activityfw/activitydatabase/hsactivitydbserver/src/activitybroadcasttask.cpp
activityfw/activitydatabase/hsactivitydbserver/src/activitydataprovidertask.cpp
activityfw/activitydatabase/hsactivitydbserver/src/activityobservertask.cpp
activityfw/activitydatabase/hsactivitydbserver/src/activityserver.cpp
activityfw/activitydatabase/hsactivitydbserver/src/activitysession.cpp
activityfw/activitydatabase/hsactivitydbserver/src/activitystorage.cpp
activityfw/activitydatabase/hsactivitydbserver/src/activitystorageasynctask.cpp
activityfw/activitydatabase/hsactivitydbserver/src/activitystoragesynctask.cpp
activityfw/activitydatabase/hsactivitydbserver/src/activitythumbnailtask.cpp
activityfw/activitydatabase/hsactivitydbserver/src/afbroadcasttask.cpp
activityfw/activitydatabase/hsactivitydbserver/src/afdataprovidertask.cpp
activityfw/activitydatabase/hsactivitydbserver/src/afobservertask.cpp
activityfw/activitydatabase/hsactivitydbserver/src/afserver.cpp
activityfw/activitydatabase/hsactivitydbserver/src/afsession.cpp
activityfw/activitydatabase/hsactivitydbserver/src/afstorage.cpp
activityfw/activitydatabase/hsactivitydbserver/src/afstorageasynctask.cpp
activityfw/activitydatabase/hsactivitydbserver/src/afstoragesynctask.cpp
activityfw/activitydatabase/hsactivitydbserver/src/afthumbnailtask.cpp
activityfw/activitydatabase/hsactivitydbserver/src/main.cpp
activityfw/activitydatabase/inc/activitycmd.h
activityfw/activitydatabase/inc/hsactivitydbclientinterface.h
activityfw/activitydatabase/s60/inc/afentry.h
activityfw/activitydatabase/s60/inc/hsserializer.h
activityfw/activitydatabase/s60/src/afentry.cpp
activityfw/activitydatabase/s60/src/hsserializer.cpp
activityfw/activitylauncher/activitylauncher.pro
activityfw/activitylauncher/activitylauncherview.cpp
activityfw/activitylauncher/activitylauncherview.h
activityfw/activitylauncher/main.cpp
activityfw/activityserviceplugin/activityserviceplugin.pro
activityfw/activityserviceplugin/inc/activityclient_p.h
activityfw/activityserviceplugin/inc/activitydatastorage.h
activityfw/activityserviceplugin/src/activityclient_p.cpp
activityfw/activityserviceplugin/src/activitydatastorage.cpp
activityfw/tsutils/bwins/tsutilsu.def
activityfw/tsutils/eabi/tsutilsu.def
activityfw/tsutils/group/bld.inf
activityfw/tsutils/group/tsutils.mmp
activityfw/tsutils/inc/tsresourcemanager.h
activityfw/tsutils/inc/tswindowgroupsobserver.h
activityfw/tsutils/src/tsresourcemanager.cpp
activityfw/tsutils/src/tswindowgroupsmonitor.cpp
activityfw/tsutils/src/tswindowgroupsobserver.cpp
appfoundation/appfoundation.pro
appfoundation/appfoundation_tests.pri
appfoundation/appruntimemodel/appruntimemodel.pri
appfoundation/appruntimemodel/appruntimemodel.pro
appfoundation/appruntimemodel/inc/hsruntimefactory_p.h
appfoundation/appruntimemodel/inc/hsruntimeprovidermanifest.h
appfoundation/appruntimemodel/inc/hsruntimeprovidermanifest_p.h
appfoundation/appruntimemodel/src/hsruntimefactory.cpp
appfoundation/appruntimemodel/src/hsruntimeprovidermanifest.cpp
appfoundation/statemodel/inc/hsstatefactory_p.h
appfoundation/statemodel/inc/hsstateprovidermanifest.h
appfoundation/statemodel/inc/hsstateprovidermanifest_p.h
appfoundation/statemodel/src/hsstatefactory.cpp
appfoundation/statemodel/src/hsstateprovidermanifest.cpp
appfoundation/statemodel/statemodel.pri
appfoundation/statemodel/statemodel.pro
common.pri
contentstorage/bwins/cautilsu.def
contentstorage/caclient/caclient.pro
contentstorage/caclient/inc/caclient_defines.h
contentstorage/caclient/inc/caentry_p.h
contentstorage/caclient/inc/cahandler.h
contentstorage/caclient/inc/caitemmodel_p.h
contentstorage/caclient/inc/caitemmodellist.h
contentstorage/caclient/s60/src/camenuiconutility.cpp
contentstorage/caclient/s60/src/caobjectadapter.cpp
contentstorage/caclient/s60/src/caobserver.cpp
contentstorage/caclient/src/caentry.cpp
contentstorage/caclient/src/cahandler.cpp
contentstorage/caclient/src/cahandlerloader.cpp
contentstorage/caclient/src/cahandlerproxy.cpp
contentstorage/caclient/src/caiconcache.cpp
contentstorage/caclient/src/caitemmodel.cpp
contentstorage/caclient/src/caitemmodellist.cpp
contentstorage/caclient/src/caqtsfhandlerloader.cpp
contentstorage/caclient/src/caservice.cpp
contentstorage/caclient/stub/inc/caobjectadapter.h
contentstorage/caclient/stub/src/caobjectadapter.cpp
contentstorage/cahandler/app/inc/caapphandler.h
contentstorage/cahandler/app/inc/caapphandlerplugin.h
contentstorage/cahandler/app/src/caapphandler.cpp
contentstorage/cahandler/app/src/caapphandlerplugin.cpp
contentstorage/cahandler/app/src/causifuninstalloperation.cpp
contentstorage/cahandler/tapp/src/catapphandler.cpp
contentstorage/cahandler/tapp/src/catapphandlerplugin.cpp
contentstorage/cahandler/url/src/caurlhandler.cpp
contentstorage/cahandler/url/src/caurlhandlerplugin.cpp
contentstorage/casoftwareregistry/casoftwareregistry.pro
contentstorage/casoftwareregistry/s60/inc/casoftwareregistry_p.h
contentstorage/casoftwareregistry/s60/src/casoftwareregistry_p.cpp
contentstorage/casoftwareregistry/src/casoftwareregistry.cpp
contentstorage/casoftwareregistry/stub/inc/casoftwareregistry_p.h
contentstorage/casoftwareregistry/stub/src/casoftwareregistry_p.cpp
contentstorage/casrv/caappscanner/group/caappscanner.mmp
contentstorage/casrv/caappscanner/inc/casrvappscanner.h
contentstorage/casrv/caappscanner/src/casrvappscanner.cpp
contentstorage/casrv/caappscanner/src/proxy.cpp
contentstorage/casrv/calocalizerscanner/calocalizerscanner.pro
contentstorage/casrv/calocalizerscanner/inc/calocalizerscannerproxy.h
contentstorage/casrv/calocalizerscanner/src/calocalizerscannerproxy.cpp
contentstorage/casrv/casatmonitor/src/casatmonitor.cpp
contentstorage/casrv/casatmonitor/src/casatnotifier.cpp
contentstorage/casrv/causifscanner/src/causifscanner.cpp
contentstorage/casrv/causifscanner/src/proxy.cpp
contentstorage/casrv/cawidgetscanner/group/cawidgetscanner.mmp
contentstorage/casrv/cawidgetscanner/inc/cawidgetdescription.h
contentstorage/casrv/cawidgetscanner/inc/cawidgetscannerdef.h
contentstorage/casrv/cawidgetscanner/inc/cawidgetscannerinstallnotifier.h
contentstorage/casrv/cawidgetscanner/inc/cawidgetscannerparser.h
contentstorage/casrv/cawidgetscanner/inc/cawidgetscannerplugin.h
contentstorage/casrv/cawidgetscanner/inc/cawidgetstoragehandler.h
contentstorage/casrv/cawidgetscanner/inc/widgetscannerutils.h
contentstorage/casrv/cawidgetscanner/src/cawidgetdescription.cpp
contentstorage/casrv/cawidgetscanner/src/cawidgetscannerinstallnotifier.cpp
contentstorage/casrv/cawidgetscanner/src/cawidgetscannerparser.cpp
contentstorage/casrv/cawidgetscanner/src/cawidgetscannerplugin.cpp
contentstorage/casrv/cawidgetscanner/src/cawidgetstoragehandler.cpp
contentstorage/casrv/cawidgetscanner/src/widgetscannerutils.cpp
contentstorage/castorage/data/castorage.db
contentstorage/castorage/data/castoragedb_create.sql
contentstorage/castorage/data/castoragedb_variant_test.sql
contentstorage/castorage/inc/casqlitestorage.h
contentstorage/castorage/inc/castorage.h
contentstorage/castorage/inc/castorage_global.h
contentstorage/castorage/src/casqlitestorage.cpp
contentstorage/cautils/cautils.pro
contentstorage/cautils/inc/cainnerentry.h
contentstorage/cautils/src/caentryattribute.cpp
contentstorage/cautils/src/cainnerentry.cpp
contentstorage/eabi/cautilsu.def
contentstorage/extsrc/casathandler.cpp
contentstorage/group/camenu.mmp
contentstorage/inc/cadef.h
contentstorage/inc/castorage_global.h
contentstorage/srvinc/caprogressnotifier.h
contentstorage/srvinc/casrv.h
contentstorage/srvinc/castorageproxy.h
contentstorage/srvsrc/cainstallstrategy.cpp
contentstorage/srvsrc/cammcwatcher.cpp
contentstorage/srvsrc/caprogressnotifier.cpp
contentstorage/srvsrc/casrv.cpp
contentstorage/srvsrc/casrvnotifier.cpp
contentstorage/srvsrc/castorageproxy.cpp
homescreensrv.pro
homescreensrv_plat/appruntimemodel_api/appruntimemodel_api.pri
homescreensrv_plat/appruntimemodel_api/hsiruntimeprovider.h
homescreensrv_plat/appruntimemodel_api/hsruntime.h
homescreensrv_plat/appruntimemodel_api/hsruntimefactory.h
homescreensrv_plat/appruntimemodel_api/hsruntimemodel_global.h
homescreensrv_plat/contentstorage_api/cadefs.h
homescreensrv_plat/contentstorage_api/caentry.h
homescreensrv_plat/contentstorage_api/caitemmodel.h
homescreensrv_plat/contentstorage_api/casoftwareregistry.h
homescreensrv_plat/homescreen_information_api/inc/homescreendomainpskeys.h
homescreensrv_plat/homescreensrv_plat.pro
homescreensrv_plat/hswidgetmodel_api/hsipreferencestore.h
homescreensrv_plat/hswidgetmodel_api/hsiwidgetprovider.h
homescreensrv_plat/hswidgetmodel_api/ihswidgetpreferenceservice.h
homescreensrv_plat/statemodel_api/hsistateprovider.h
homescreensrv_plat/statemodel_api/hsstatefactory.h
homescreensrv_plat/statemodel_api/hsstatemodel_global.h
homescreensrv_plat/statemodel_api/statemodel_api.pri
hswidgetmodel/src/hswidget.cpp
hswidgetmodel/src/hswidgetfactory.cpp
hswidgetmodel/src/hswidgetprovidermanifest.cpp
rom/homescreensrv_core.iby
sis/homescreensrv.pkg
tstaskmonitor/backstepping/bwins/tsbacksteppingu.def
tstaskmonitor/backstepping/eabi/tsbacksteppingu.def
tstaskmonitor/backstepping/group/tsbackstepping.mmp
tstaskmonitor/backstepping/inc/tsbackstepping.h
tstaskmonitor/backstepping/inc/tsbacksteppingactivation.h
tstaskmonitor/backstepping/src/tsbackstepping.cpp
tstaskmonitor/backstepping/src/tsbacksteppingactivation.cpp
tstaskmonitor/client/client.pro
tstaskmonitor/server/group/hsrunningappmonitor.mmp
tstaskmonitor/server/inc/hsrunningappserver.h
tstaskmonitor/server/inc/tsfswdatalist.h
tstaskmonitor/server/inc/tsfswengine.h
tstaskmonitor/server/inc/tsfswmonitor.h
tstaskmonitor/server/inc/tsrunningappstorage.h
tstaskmonitor/server/src/hsrunningappserver.cpp
tstaskmonitor/server/src/tsfswdatalist.cpp
tstaskmonitor/server/src/tsfswengine.cpp
tstaskmonitor/server/src/tsfswmonitor.cpp
tstaskmonitor/server/src/tsrunningappstorage.cpp
tstaskmonitor/utils/inc/tsfswentry.h
tstaskmonitor/utils/src/tsfswentry.cpp
--- a/activityfw/activitydatabase/bwins/hsactivitydbclientu.def	Fri Jun 11 13:58:37 2010 +0300
+++ b/activityfw/activitydatabase/bwins/hsactivitydbclientu.def	Wed Jun 23 18:33:40 2010 +0300
@@ -5,27 +5,28 @@
 	?trUtf8@HsActivityDbClient@@SA?AVQString@@PBD0@Z @ 4 NONAME ; class QString HsActivityDbClient::trUtf8(char const *, char const *)
 	?applicationActivities@HsActivityDbClient@@UAEHAAV?$QList@V?$QHash@VQString@@VQVariant@@@@@@ABV?$QHash@VQString@@VQVariant@@@@@Z @ 5 NONAME ; int HsActivityDbClient::applicationActivities(class QList<class QHash<class QString, class QVariant> > &, class QHash<class QString, class QVariant> const &)
 	?getThumbnail@HsActivityDbClient@@QAEHVQSize@@VQString@@1PAX@Z @ 6 NONAME ; int HsActivityDbClient::getThumbnail(class QSize, class QString, class QString, void *)
-	?qt_metacast@HsActivityDbClient@@UAEPAXPBD@Z @ 7 NONAME ; void * HsActivityDbClient::qt_metacast(char const *)
-	?qt_metacall@HsActivityDbClient@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 8 NONAME ; int HsActivityDbClient::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?waitActivity@HsActivityDbClient@@UAEHABV?$QHash@VQString@@VQVariant@@@@@Z @ 9 NONAME ; int HsActivityDbClient::waitActivity(class QHash<class QString, class QVariant> const &)
-	?activities@HsActivityDbClient@@UAEHAAV?$QList@V?$QHash@VQString@@VQVariant@@@@@@@Z @ 10 NONAME ; int HsActivityDbClient::activities(class QList<class QHash<class QString, class QVariant> > &)
-	?trUtf8@HsActivityDbClient@@SA?AVQString@@PBD0H@Z @ 11 NONAME ; class QString HsActivityDbClient::trUtf8(char const *, char const *, int)
-	??0HsActivityDbClient@@QAE@PAVQObject@@@Z @ 12 NONAME ; HsActivityDbClient::HsActivityDbClient(class QObject *)
-	?tr@HsActivityDbClient@@SA?AVQString@@PBD0@Z @ 13 NONAME ; class QString HsActivityDbClient::tr(char const *, char const *)
-	?getStaticMetaObject@HsActivityDbClient@@SAABUQMetaObject@@XZ @ 14 NONAME ; struct QMetaObject const & HsActivityDbClient::getStaticMetaObject(void)
-	??_EHsActivityDbClient@@UAE@I@Z @ 15 NONAME ; HsActivityDbClient::~HsActivityDbClient(unsigned int)
-	?removeApplicationActivities@HsActivityDbClient@@UAEHABV?$QHash@VQString@@VQVariant@@@@@Z @ 16 NONAME ; int HsActivityDbClient::removeApplicationActivities(class QHash<class QString, class QVariant> const &)
-	?metaObject@HsActivityDbClient@@UBEPBUQMetaObject@@XZ @ 17 NONAME ; struct QMetaObject const * HsActivityDbClient::metaObject(void) const
-	?tr@HsActivityDbClient@@SA?AVQString@@PBD0H@Z @ 18 NONAME ; class QString HsActivityDbClient::tr(char const *, char const *, int)
-	?addActivity@HsActivityDbClient@@UAEHABV?$QHash@VQString@@VQVariant@@@@@Z @ 19 NONAME ; int HsActivityDbClient::addActivity(class QHash<class QString, class QVariant> const &)
-	?asyncRequestCompleated@HsActivityDbClient@@UAEXHHABVQPixmap@@PAX@Z @ 20 NONAME ; void HsActivityDbClient::asyncRequestCompleated(int, int, class QPixmap const &, void *)
-	?staticMetaObject@HsActivityDbClient@@2UQMetaObject@@B @ 21 NONAME ; struct QMetaObject const HsActivityDbClient::staticMetaObject
-	??1HsActivityDbClient@@UAE@XZ @ 22 NONAME ; HsActivityDbClient::~HsActivityDbClient(void)
-	?thumbnailRequested@HsActivityDbClient@@IAEXVQPixmap@@PAX@Z @ 23 NONAME ; void HsActivityDbClient::thumbnailRequested(class QPixmap, void *)
-	?activityRequested@HsActivityDbClient@@IAEXABVQString@@@Z @ 24 NONAME ; void HsActivityDbClient::activityRequested(class QString const &)
-	?updateActivity@HsActivityDbClient@@UAEHABV?$QHash@VQString@@VQVariant@@@@@Z @ 25 NONAME ; int HsActivityDbClient::updateActivity(class QHash<class QString, class QVariant> const &)
-	?removeActivity@HsActivityDbClient@@UAEHABV?$QHash@VQString@@VQVariant@@@@@Z @ 26 NONAME ; int HsActivityDbClient::removeActivity(class QHash<class QString, class QVariant> const &)
-	?dataChanged@HsActivityDbClient@@IAEXXZ @ 27 NONAME ; void HsActivityDbClient::dataChanged(void)
-	?notifyDataChange@HsActivityDbClient@@QAEHXZ @ 28 NONAME ; int HsActivityDbClient::notifyDataChange(void)
-	?asyncRequestCompleated@HsActivityDbClient@@UAEXHH@Z @ 29 NONAME ; void HsActivityDbClient::asyncRequestCompleated(int, int)
+	?dataChanged@HsActivityDbClient@@IAEXXZ @ 7 NONAME ; void HsActivityDbClient::dataChanged(void)
+	?qt_metacast@HsActivityDbClient@@UAEPAXPBD@Z @ 8 NONAME ; void * HsActivityDbClient::qt_metacast(char const *)
+	?qt_metacall@HsActivityDbClient@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 9 NONAME ; int HsActivityDbClient::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?waitActivity@HsActivityDbClient@@UAEHABV?$QHash@VQString@@VQVariant@@@@@Z @ 10 NONAME ; int HsActivityDbClient::waitActivity(class QHash<class QString, class QVariant> const &)
+	?activities@HsActivityDbClient@@UAEHAAV?$QList@V?$QHash@VQString@@VQVariant@@@@@@@Z @ 11 NONAME ; int HsActivityDbClient::activities(class QList<class QHash<class QString, class QVariant> > &)
+	?notifyDataChange@HsActivityDbClient@@QAEHXZ @ 12 NONAME ; int HsActivityDbClient::notifyDataChange(void)
+	?trUtf8@HsActivityDbClient@@SA?AVQString@@PBD0H@Z @ 13 NONAME ; class QString HsActivityDbClient::trUtf8(char const *, char const *, int)
+	?asyncRequestCompleated@HsActivityDbClient@@UAEXHH@Z @ 14 NONAME ; void HsActivityDbClient::asyncRequestCompleated(int, int)
+	??0HsActivityDbClient@@QAE@PAVQObject@@@Z @ 15 NONAME ; HsActivityDbClient::HsActivityDbClient(class QObject *)
+	?tr@HsActivityDbClient@@SA?AVQString@@PBD0@Z @ 16 NONAME ; class QString HsActivityDbClient::tr(char const *, char const *)
+	?getStaticMetaObject@HsActivityDbClient@@SAABUQMetaObject@@XZ @ 17 NONAME ; struct QMetaObject const & HsActivityDbClient::getStaticMetaObject(void)
+	??_EHsActivityDbClient@@UAE@I@Z @ 18 NONAME ; HsActivityDbClient::~HsActivityDbClient(unsigned int)
+	?removeApplicationActivities@HsActivityDbClient@@UAEHABV?$QHash@VQString@@VQVariant@@@@@Z @ 19 NONAME ; int HsActivityDbClient::removeApplicationActivities(class QHash<class QString, class QVariant> const &)
+	?metaObject@HsActivityDbClient@@UBEPBUQMetaObject@@XZ @ 20 NONAME ; struct QMetaObject const * HsActivityDbClient::metaObject(void) const
+	?tr@HsActivityDbClient@@SA?AVQString@@PBD0H@Z @ 21 NONAME ; class QString HsActivityDbClient::tr(char const *, char const *, int)
+	?addActivity@HsActivityDbClient@@UAEHABV?$QHash@VQString@@VQVariant@@@@0@Z @ 22 NONAME ; int HsActivityDbClient::addActivity(class QHash<class QString, class QVariant> const &, class QHash<class QString, class QVariant> const &)
+	?asyncRequestCompleated@HsActivityDbClient@@UAEXHHABVQPixmap@@PAX@Z @ 23 NONAME ; void HsActivityDbClient::asyncRequestCompleated(int, int, class QPixmap const &, void *)
+	?staticMetaObject@HsActivityDbClient@@2UQMetaObject@@B @ 24 NONAME ; struct QMetaObject const HsActivityDbClient::staticMetaObject
+	?updateActivity@HsActivityDbClient@@UAEHABV?$QHash@VQString@@VQVariant@@@@0@Z @ 25 NONAME ; int HsActivityDbClient::updateActivity(class QHash<class QString, class QVariant> const &, class QHash<class QString, class QVariant> const &)
+	??1HsActivityDbClient@@UAE@XZ @ 26 NONAME ; HsActivityDbClient::~HsActivityDbClient(void)
+	?thumbnailRequested@HsActivityDbClient@@IAEXVQPixmap@@PAX@Z @ 27 NONAME ; void HsActivityDbClient::thumbnailRequested(class QPixmap, void *)
+	?activityRequested@HsActivityDbClient@@IAEXABVQString@@@Z @ 28 NONAME ; void HsActivityDbClient::activityRequested(class QString const &)
+	?removeActivity@HsActivityDbClient@@UAEHABV?$QHash@VQString@@VQVariant@@@@@Z @ 29 NONAME ; int HsActivityDbClient::removeActivity(class QHash<class QString, class QVariant> const &)
+	?activityData@HsActivityDbClient@@UAEHAAVQVariant@@ABV?$QHash@VQString@@VQVariant@@@@@Z @ 30 NONAME ; int HsActivityDbClient::activityData(class QVariant &, class QHash<class QString, class QVariant> const &)
 
--- a/activityfw/activitydatabase/eabi/hsactivitydbclientu.def	Fri Jun 11 13:58:37 2010 +0300
+++ b/activityfw/activitydatabase/eabi/hsactivitydbclientu.def	Wed Jun 23 18:33:40 2010 +0300
@@ -1,42 +1,44 @@
 EXPORTS
 	_ZN18HsActivityDbClient10activitiesER5QListI5QHashI7QString8QVariantEE @ 1 NONAME
-	_ZN18HsActivityDbClient11addActivityERK5QHashI7QString8QVariantE @ 2 NONAME
-	_ZN18HsActivityDbClient11qt_metacallEN11QMetaObject4CallEiPPv @ 3 NONAME
-	_ZN18HsActivityDbClient11qt_metacastEPKc @ 4 NONAME
-	_ZN18HsActivityDbClient12getThumbnailE5QSize7QStringS1_Pv @ 5 NONAME
-	_ZN18HsActivityDbClient12waitActivityERK5QHashI7QString8QVariantE @ 6 NONAME
-	_ZN18HsActivityDbClient14launchActivityERK5QHashI7QString8QVariantE @ 7 NONAME
-	_ZN18HsActivityDbClient14removeActivityERK5QHashI7QString8QVariantE @ 8 NONAME
-	_ZN18HsActivityDbClient14updateActivityERK5QHashI7QString8QVariantE @ 9 NONAME
-	_ZN18HsActivityDbClient16staticMetaObjectE @ 10 NONAME DATA 16
-	_ZN18HsActivityDbClient17activityRequestedERK7QString @ 11 NONAME
-	_ZN18HsActivityDbClient18thumbnailRequestedE7QPixmapPv @ 12 NONAME
-	_ZN18HsActivityDbClient19getStaticMetaObjectEv @ 13 NONAME
-	_ZN18HsActivityDbClient21applicationActivitiesER5QListI5QHashI7QString8QVariantEERKS4_ @ 14 NONAME
-	_ZN18HsActivityDbClient22asyncRequestCompleatedEiiRK7QPixmapPv @ 15 NONAME
-	_ZN18HsActivityDbClient22asyncRequestCompleatedEiiRK7QString @ 16 NONAME
-	_ZN18HsActivityDbClient27removeApplicationActivitiesERK5QHashI7QString8QVariantE @ 17 NONAME
-	_ZN18HsActivityDbClient7connectEv @ 18 NONAME
-	_ZN18HsActivityDbClientC1EP7QObject @ 19 NONAME
-	_ZN18HsActivityDbClientC2EP7QObject @ 20 NONAME
-	_ZN18HsActivityDbClientD0Ev @ 21 NONAME
-	_ZN18HsActivityDbClientD1Ev @ 22 NONAME
-	_ZN18HsActivityDbClientD2Ev @ 23 NONAME
-	_ZNK18HsActivityDbClient10metaObjectEv @ 24 NONAME
-	_ZTI18HsActivityDbClient @ 25 NONAME
-	_ZTV18HsActivityDbClient @ 26 NONAME
-	_ZThn12_N18HsActivityDbClient22asyncRequestCompleatedEiiRK7QPixmapPv @ 27 NONAME
-	_ZThn12_N18HsActivityDbClient22asyncRequestCompleatedEiiRK7QString @ 28 NONAME
-	_ZThn8_N18HsActivityDbClient10activitiesER5QListI5QHashI7QString8QVariantEE @ 29 NONAME
-	_ZThn8_N18HsActivityDbClient11addActivityERK5QHashI7QString8QVariantE @ 30 NONAME
-	_ZThn8_N18HsActivityDbClient12waitActivityERK5QHashI7QString8QVariantE @ 31 NONAME
-	_ZThn8_N18HsActivityDbClient14launchActivityERK5QHashI7QString8QVariantE @ 32 NONAME
-	_ZThn8_N18HsActivityDbClient14removeActivityERK5QHashI7QString8QVariantE @ 33 NONAME
-	_ZThn8_N18HsActivityDbClient14updateActivityERK5QHashI7QString8QVariantE @ 34 NONAME
-	_ZThn8_N18HsActivityDbClient21applicationActivitiesER5QListI5QHashI7QString8QVariantEERKS4_ @ 35 NONAME
-	_ZThn8_N18HsActivityDbClient27removeApplicationActivitiesERK5QHashI7QString8QVariantE @ 36 NONAME
-	_ZN18HsActivityDbClient11dataChangedEv @ 37 NONAME
-	_ZN18HsActivityDbClient16notifyDataChangeEv @ 38 NONAME
-	_ZN18HsActivityDbClient22asyncRequestCompleatedEii @ 39 NONAME
-	_ZThn12_N18HsActivityDbClient22asyncRequestCompleatedEii @ 40 NONAME
+	_ZN18HsActivityDbClient11addActivityERK5QHashI7QString8QVariantES5_ @ 2 NONAME
+	_ZN18HsActivityDbClient11dataChangedEv @ 3 NONAME
+	_ZN18HsActivityDbClient11qt_metacallEN11QMetaObject4CallEiPPv @ 4 NONAME
+	_ZN18HsActivityDbClient11qt_metacastEPKc @ 5 NONAME
+	_ZN18HsActivityDbClient12getThumbnailE5QSize7QStringS1_Pv @ 6 NONAME
+	_ZN18HsActivityDbClient12waitActivityERK5QHashI7QString8QVariantE @ 7 NONAME
+	_ZN18HsActivityDbClient14launchActivityERK5QHashI7QString8QVariantE @ 8 NONAME
+	_ZN18HsActivityDbClient14removeActivityERK5QHashI7QString8QVariantE @ 9 NONAME
+	_ZN18HsActivityDbClient14updateActivityERK5QHashI7QString8QVariantES5_ @ 10 NONAME
+	_ZN18HsActivityDbClient16notifyDataChangeEv @ 11 NONAME
+	_ZN18HsActivityDbClient16staticMetaObjectE @ 12 NONAME DATA 16
+	_ZN18HsActivityDbClient17activityRequestedERK7QString @ 13 NONAME
+	_ZN18HsActivityDbClient18thumbnailRequestedE7QPixmapPv @ 14 NONAME
+	_ZN18HsActivityDbClient19getStaticMetaObjectEv @ 15 NONAME
+	_ZN18HsActivityDbClient21applicationActivitiesER5QListI5QHashI7QString8QVariantEERKS4_ @ 16 NONAME
+	_ZN18HsActivityDbClient22asyncRequestCompleatedEii @ 17 NONAME
+	_ZN18HsActivityDbClient22asyncRequestCompleatedEiiRK7QPixmapPv @ 18 NONAME
+	_ZN18HsActivityDbClient22asyncRequestCompleatedEiiRK7QString @ 19 NONAME
+	_ZN18HsActivityDbClient27removeApplicationActivitiesERK5QHashI7QString8QVariantE @ 20 NONAME
+	_ZN18HsActivityDbClient7connectEv @ 21 NONAME
+	_ZN18HsActivityDbClientC1EP7QObject @ 22 NONAME
+	_ZN18HsActivityDbClientC2EP7QObject @ 23 NONAME
+	_ZN18HsActivityDbClientD0Ev @ 24 NONAME
+	_ZN18HsActivityDbClientD1Ev @ 25 NONAME
+	_ZN18HsActivityDbClientD2Ev @ 26 NONAME
+	_ZNK18HsActivityDbClient10metaObjectEv @ 27 NONAME
+	_ZTI18HsActivityDbClient @ 28 NONAME
+	_ZTV18HsActivityDbClient @ 29 NONAME
+	_ZThn12_N18HsActivityDbClient22asyncRequestCompleatedEii @ 30 NONAME
+	_ZThn12_N18HsActivityDbClient22asyncRequestCompleatedEiiRK7QPixmapPv @ 31 NONAME
+	_ZThn12_N18HsActivityDbClient22asyncRequestCompleatedEiiRK7QString @ 32 NONAME
+	_ZThn8_N18HsActivityDbClient10activitiesER5QListI5QHashI7QString8QVariantEE @ 33 NONAME
+	_ZThn8_N18HsActivityDbClient11addActivityERK5QHashI7QString8QVariantES5_ @ 34 NONAME
+	_ZThn8_N18HsActivityDbClient12waitActivityERK5QHashI7QString8QVariantE @ 35 NONAME
+	_ZThn8_N18HsActivityDbClient14launchActivityERK5QHashI7QString8QVariantE @ 36 NONAME
+	_ZThn8_N18HsActivityDbClient14removeActivityERK5QHashI7QString8QVariantE @ 37 NONAME
+	_ZThn8_N18HsActivityDbClient14updateActivityERK5QHashI7QString8QVariantES5_ @ 38 NONAME
+	_ZThn8_N18HsActivityDbClient21applicationActivitiesER5QListI5QHashI7QString8QVariantEERKS4_ @ 39 NONAME
+	_ZThn8_N18HsActivityDbClient27removeApplicationActivitiesERK5QHashI7QString8QVariantE @ 40 NONAME
+	_ZN18HsActivityDbClient12activityDataER8QVariantRK5QHashI7QStringS0_E @ 41 NONAME
+	_ZThn8_N18HsActivityDbClient12activityDataER8QVariantRK5QHashI7QStringS0_E @ 42 NONAME
 
--- a/activityfw/activitydatabase/hsactivitydbclient/hsactivitydbclient.pro	Fri Jun 11 13:58:37 2010 +0300
+++ b/activityfw/activitydatabase/hsactivitydbclient/hsactivitydbclient.pro	Wed Jun 23 18:33:40 2010 +0300
@@ -29,11 +29,13 @@
 symbian{
 TARGET.UID3 = 0xE467C21E
 
-HEADERS   += ../s60/inc/hsserializer.h \
+HEADERS   += ../s60/inc/afentry.h \
+             ../s60/inc/hsserializer.h \
              s60/inc/hsactivitydbclient_p.h \
 			 s60/inc/hsactivitydbasyncrequest_p.h
 
-SOURCES   += ../s60/src/hsserializer.cpp \
+SOURCES   += ../s60/src/afentry.cpp \
+             ../s60/src/hsserializer.cpp \
              s60/src/hsactivitydbclient_p.cpp \
 			 s60/src/hsactivitydbasyncrequest_p.cpp
 
--- a/activityfw/activitydatabase/hsactivitydbclient/inc/hsactivitydbclient.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/activityfw/activitydatabase/hsactivitydbclient/inc/hsactivitydbclient.h	Wed Jun 23 18:33:40 2010 +0300
@@ -74,17 +74,9 @@
     void asyncRequestCompleated(int result,
                                 int requestType);
 
-    /**
-     * Interface implementation.
-     * @see int HsActivityDbClientInterface::saveActivity(const QVariantHash&)
-     */
-    int addActivity(const QVariantHash &);
+    int addActivity(const QVariantHash &, const QVariantHash &);
 
-    /**
-     * Interface implementation.
-     * @see int HsActivityDbClientInterface::updateActivity(const QVariantHash&)
-     */
-    int updateActivity(const QVariantHash &);
+    int updateActivity(const QVariantHash &, const QVariantHash &);
 
     /**
      * Interface implementation.
@@ -113,6 +105,12 @@
 
     /**
      * Interface implementation.
+     * @see int HsActivityDbClientInterface::activityData(QVariant &, const QVariantHash &)
+     */
+    int activityData(QVariant &result, const QVariantHash &activity);
+                              
+    /**
+     * Interface implementation.
      * @see int HsActivityDbClientInterface::waitActivity(const QVariantHash &)
      */
     int waitActivity(const QVariantHash &activity);
--- a/activityfw/activitydatabase/hsactivitydbclient/s60/inc/hsactivitydbclient_p.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/activityfw/activitydatabase/hsactivitydbclient/s60/inc/hsactivitydbclient_p.h	Wed Jun 23 18:33:40 2010 +0300
@@ -30,153 +30,77 @@
                                   public HsActivityDbClientInterface
 {
 public:
-    /**
-     * Constructor
-     */
     HsActivityDbClientPrivate(HsActivityDbAsyncRequestObserver &);
 
-    /**
-     * Destructor
-     */
     ~HsActivityDbClientPrivate();
 
-    /**
-     * Function establish connection to activity server
-     * @return 0 on succees, error code otherwise
-     */
     int connect();
 
-    /**
-     * Interface implementation.
-     * @see int HsActivityDbClientInterface::addActivity(const QVariantHash &)
-     */
-    int addActivity(const QVariantHash &);
+    int addActivity(const QVariantHash &privateData, 
+                    const QVariantHash &publicData);
 
-    /**
-     * Interface implementation.
-     * @see int HsActivityDbClientInterface::updateActivity(const QVariantHash &)
-     */
-    int updateActivity(const QVariantHash &);
+    int updateActivity(const QVariantHash &privateData, 
+                       const QVariantHash &publicData);
 
-    /**
-     * Interface implementation.
-     * @see int HsActivityDbClientInterface::removeActivity(const QVariantHash &)
-     */
     int removeActivity(const QVariantHash &activity);
 
-    /**
-     * Interface implementation.
-     * @see int HsActivityDbClientInterface::removeApplicationActivities(const QVariantHash &)
-    */
     int removeApplicationActivities(const QVariantHash &activity);
 
-    /**
-     * Interface implementation.
-     * @see int HsActivityDbClientInterface::activities(QList<QVariantHash> &);
-     */
     int activities(QList<QVariantHash> &);
 
-    /**
-     * Interface implementation.
-     * @see int HsActivityDbClientInterface::applicationActivities(QList<QVariantHash> &, const QVariantHash &)
-     */
     int applicationActivities(QList<QVariantHash>&, const QVariantHash &);
 
-    /**
-     * Interface implementation.
-     * @see int HsActivityDbClientInterface::waitActivity(const QVariantHash &)
-     */
+    int activityData(QVariant &result, const QVariantHash &activity);
+    
     int waitActivity(const QVariantHash &activity);
     
     int getThumbnail(QSize size, QString imagePath, QString  mimeType, void *userDdata);
     
     int notifyDataChange();
 
-    /**
-     * Interface implementation.
-     * @see int HsActivityDbClientInterface::launchActivity(const QVariantHash &)
-     */
     int launchActivity(const QVariantHash &);
 
-    /**
-     * Interface implementation.
-     * @see int HsActivityDbClientInterface::cancelWaitActivity()
-     */
     int cancelWaitActivity();
-    
+
     int cancelNotifyDataChange();
-    
+
 public:
-    /**
-     * Function get cached data from server
-     * @param taskId - request task id
-     * @param dst - destination, preallocated buffer
-     */
     void getData(int taskId, RBuf8 &dst);
 
-    /**
-     * Function initialize aync request
-     * @param func - requested function
-     * @param data - request data
-     * @param status - request status
-     */
     void sendDataAsync(int func,const TIpcArgs &data, TRequestStatus &status);
-    
-//    void emitActivityRequested();
-//    void emitThumbnailRequested();
-    
+
 public:
     void PushL(HsActivityDbAsyncRequestPrivate * task);
+
     void Pop(HsActivityDbAsyncRequestPrivate *task);
 
 private:
-    /**
-     * Function start activity server process.
-     * Function can leave on failure.
-     */
     void startServerL();
 
-    /**
-     * Function establish connection to activity server.
-     * Function can leave on failure
-     */
     void connectL();
 
-    /**
-     * Function execute remote call request.
-     * @param function - remote function identyfier
-     * @param activity - remote function parameters
-     */
-    void execSimpleRequestL(int function, const QVariantHash &activity);
+    void execSimpleRequestL(int function, 
+                            const QVariantHash &privateData, 
+                            const QVariantHash &publicData);
 
-    /**
-     * Function retrieve current activity name for application.
-     * Function can leave on failure
-     * @param  result - activity name
-     * @param activity - request filtering rules
-     */
-    void requestedActivityNameL(QString &result,
-                                const QVariantHash &activity);
 
-    /**
-     * Function retrieve all stored activity
-     * Function can leave on failure
-     * @param result - list of activity
-     */
     void activitiesL(QList<QVariantHash>& result);
 
-    /**
-     * Function retrieve all stored activity
-     * Function can leave on failure
-     * @param result - list of activity
-     * @param cond - request conditions
-     */
     void applicationActivitiesL(QList<QVariantHash>& result,
                                 const QVariantHash &cond);
 
-    void waitActivityL(const QVariantHash &activity);
-    
+    void activityDataL(QVariant &result, const QVariantHash &activity);
+
+    void launchActivityL(const QVariantHash &activity);
+
     void getThumbnailL(QSize size, QString imagePath, QString  mimeType, void *userDdata);
+
+    int checkDataConstraint(int func, const QVariantHash &data);
+
+    int execute(int func, const QVariantHash &privateData, const QVariantHash &publicData);
+
+    int execute(int func, QList<QVariantHash>&dst, const QVariantHash &src);
+
 private:
     RPointerArray<HsActivityDbAsyncRequestPrivate> mAsyncTasks;
     HsActivityDbAsyncRequestObserver& mObserver;
--- a/activityfw/activitydatabase/hsactivitydbclient/s60/src/hsactivitydbclient_p.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/activityfw/activitydatabase/hsactivitydbclient/s60/src/hsactivitydbclient_p.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -14,29 +14,34 @@
 * Description:
 *
 */
+#include <fbs.h>
+#include <s32mem.h>
+
+#include <qvariant.h>
+#include <XQConversions>
 
 #include "hsactivitydbclient_p.h"
 #include "hsactivitydbasyncrequest_p.h"
 #include "hsactivityglobals.h"
 #include "hsserializer.h"
-#include <qvariant.h>
-#include <XQConversions>
+#include "afentry.h"
+
 
 
 // -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
+/**
+ * Constructor
+ */
 HsActivityDbClientPrivate::HsActivityDbClientPrivate(HsActivityDbAsyncRequestObserver &observer):
     mObserver(observer)
 {
-    
+
 }
 
 // -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
+/**
+ * Destructor
+ */
 HsActivityDbClientPrivate::~HsActivityDbClientPrivate()
 {
     mAsyncTasks.ResetAndDestroy();
@@ -44,9 +49,10 @@
 }
 
 // -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
+/**
+ * Function establish connection to activity server
+ * @return 0 on succees, error code otherwise
+ */
 int HsActivityDbClientPrivate::connect()
 {
     TRAPD(errNo, connectL());
@@ -54,90 +60,91 @@
 }
 
 // -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-int HsActivityDbClientPrivate::addActivity(const QVariantHash &activity)
+/**
+ * Interface implementation.
+ * @see int HsActivityDbClientInterface::addActivity(const QVariantHash &)
+ */
+int HsActivityDbClientPrivate::addActivity(const QVariantHash &privateData,
+                                           const QVariantHash &publicData)
 {
-    int errNo(KErrCorrupt);
-    if (activity.end() != activity.find(ActivityApplicationKeyword) &&
-        activity.end() != activity.find(ActivityActivityKeyword)) {
-        TRAP(errNo, execSimpleRequestL(AddActivity, activity);)
-    }
-    return errNo;
+    return execute(AddActivity, privateData, publicData);
+    
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Interface implementation.
+ * @see int HsActivityDbClientInterface::updateActivity(const QVariantHash &)
+ */
+int HsActivityDbClientPrivate::updateActivity(const QVariantHash &privateData,
+                                              const QVariantHash &publicData)
+{
+    return execute(UpdateActivity, privateData, publicData);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Interface implementation.
+ * @see int HsActivityDbClientInterface::removeActivity(const QVariantHash &)
+ */
+int HsActivityDbClientPrivate::removeActivity(const QVariantHash &activity)
+{
+    return execute(RemoveActivity, QVariantHash(), activity);
 }
 
 // -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-int HsActivityDbClientPrivate::updateActivity(const QVariantHash &activity)
+/**
+ * Interface implementation.
+ * @see int HsActivityDbClientInterface::removeApplicationActivities(const QVariantHash &)
+*/
+
+int HsActivityDbClientPrivate::removeApplicationActivities(const QVariantHash &activity)
 {
-    int errNo(KErrCorrupt);
-    if (activity.end() != activity.find(ActivityApplicationKeyword) &&
-        activity.end() != activity.find(ActivityActivityKeyword)) {
-        TRAP(errNo, execSimpleRequestL(UpdateActivity, activity);)
-    }
-    return errNo;
+    return execute(RemoveApplicationActivities, QVariantHash(), activity);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Interface implementation.
+ * @see int HsActivityDbClientInterface::activities(QList<QVariantHash> &);
+ */
+int HsActivityDbClientPrivate::activities(QList<QVariantHash>& result)
+{
+    return execute(Activities, result, QVariantHash());
 }
 
 // -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-int HsActivityDbClientPrivate::removeActivity(const QVariantHash &activity)
+/**
+ * Interface implementation.
+ * @see int HsActivityDbClientInterface::applicationActivities(QList<QVariantHash> &, const QVariantHash &)
+ */
+int HsActivityDbClientPrivate::applicationActivities(QList<QVariantHash>& result,
+        const QVariantHash &condition)
 {
-    int errNo(KErrCorrupt);
-    if (activity.end() != activity.find(ActivityApplicationKeyword) &&
-        activity.end() != activity.find(ActivityActivityKeyword)) {
-        TRAP(errNo, execSimpleRequestL(RemoveActivity, activity);)
-    }
+    return execute(ApplicationActivities, result, condition);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Interface implementation.
+ * @see int HsActivityDbClientInterface::activityData(QVariant &, const QVariantHash &)
+ */
+int HsActivityDbClientPrivate::activityData(QVariant &result, const QVariantHash &activity)
+{
+    TRAPD(errNo,
+    User::LeaveIfError(checkDataConstraint(ApplicationActivity, activity));
+    activityDataL(result, activity);)
     return errNo;
 }
 
 // -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-int HsActivityDbClientPrivate::removeApplicationActivities(const QVariantHash &activity)
-{
-    int errNo(KErrCorrupt);
-    if (activity.end() != activity.find(ActivityApplicationKeyword)) {
-        TRAP(errNo, execSimpleRequestL(RemoveApplicationActivities, activity);)
-    }
-    return errNo;
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-int HsActivityDbClientPrivate::activities(QList<QVariantHash>& result)
-{
-    TRAPD(errNo, activitiesL(result));
-    return errNo;
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-int HsActivityDbClientPrivate::applicationActivities(QList<QVariantHash>& result,
-        const QVariantHash &condition)
-{
-    TRAPD(errNo, applicationActivitiesL(result, condition));
-    return errNo;
-}
-
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
+/**
+ * Interface implementation.
+ * @see int HsActivityDbClientInterface::waitActivity(const QVariantHash &)
+ */
 int HsActivityDbClientPrivate::waitActivity(const QVariantHash &activity)
 {
-    TRAPD(errNo, waitActivityL(activity);)
-    return errNo;
+    return execute(WaitActivity, QVariantHash(), activity);
 }
 
 // -----------------------------------------------------------------------------
@@ -156,24 +163,24 @@
 //
 int HsActivityDbClientPrivate::notifyDataChange()
 {
-    TRAPD(errNo,HsActivityDbAsyncRequestPrivate::notifyDataChangeLD(mObserver, *this);)
-    return errNo;
+    return execute(NotifyChange, QVariantHash(), QVariantHash());
 }
 
 // -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
+/**
+ * Interface implementation.
+ * @see int HsActivityDbClientInterface::launchActivity(const QVariantHash &)
+ */
 int HsActivityDbClientPrivate::launchActivity(const QVariantHash &activity)
 {
-    TRAPD(errNo, execSimpleRequestL(LaunchActivity, activity);)
-    return errNo;
+    return execute(LaunchActivity, QVariantHash(), activity);
 }
 
 // -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
+/**
+ * Interface implementation.
+ * @see int HsActivityDbClientInterface::cancelWaitActivity()
+ */
 int HsActivityDbClientPrivate::cancelWaitActivity()
 {
     return SendReceive(CancelWait, TIpcArgs());
@@ -189,9 +196,10 @@
 }
 
 // -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
+/**
+ * Function start activity server process.
+ * Function can leave on failure.
+ */
 void HsActivityDbClientPrivate::startServerL()
 {
     RProcess server;
@@ -215,9 +223,10 @@
 }
 
 // -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
+/**
+ * Function establish connection to activity server.
+ * Function can leave on failure
+ */
 void HsActivityDbClientPrivate::connectL()
 {
     const int asyncMessageSlots(12);
@@ -241,78 +250,248 @@
 }
 
 // -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void HsActivityDbClientPrivate::execSimpleRequestL(int function, const QVariantHash &activity)
+/**
+ * Function execute remote call request.
+ * @param function - remote function identyfier
+ * @param activity - remote function parameters
+ */
+void HsActivityDbClientPrivate::execSimpleRequestL(int function,
+                                                   const QVariantHash &privateData,
+                                                   const QVariantHash &publicData)
 {
-    TPckgBuf<TInt> appId( activity.find(ActivityApplicationKeyword).value().toInt() );
-    HBufC8 *actId = XQConversions::qStringToS60Desc8(activity.find(ActivityActivityKeyword).value().toString());
+
+    TPckgBuf<TInt> bitmapHdl(0);
+    int flags(0);
+    if(publicData.end() != publicData.find(ActivityPersistence) &&
+       publicData[ActivityPersistence].toBool()) {
+        flags |= CAfEntry::Persistent;
+    }
+    if(publicData.end() != publicData.find(ActivityVisibility) &&
+       !publicData[ActivityVisibility].toBool()) {
+        flags |= CAfEntry::Invisible;
+    }
+    CFbsBitmap* bitmap(0);
+    if (publicData.end() != publicData.find(ActivityScreenshotKeyword)) {
+        bitmap = publicData[ActivityScreenshotKeyword].value<QPixmap>().toSymbianCFbsBitmap();
+        if (bitmap) {
+            CleanupStack::PushL(bitmap);
+            bitmapHdl = bitmap->Handle();
+        }
+        
+        
+    }
+
+    RBuf8 prvBuffer, pubBuffer, data;
+    CleanupClosePushL(data);
+    CleanupClosePushL(prvBuffer);
+    CleanupClosePushL(pubBuffer);
+
+    prvBuffer << privateData;
+    if (publicData.end() != publicData.find(ActivityScreenshotKeyword)) {
+        QVariantHash localData(publicData);
+        localData.remove(ActivityScreenshotKeyword);
+        pubBuffer << localData;
+    } else {
+        pubBuffer << publicData;
+    }
+    
+    HBufC *actId = XQConversions::qStringToS60Desc(publicData[ActivityActivityKeyword].toString());
     CleanupStack::PushL(actId);
-    TPckgBuf<TInt> taskId(0);
-    RBuf8 data;
-    CleanupClosePushL(data);
-    data.CreateL(256);
-    data << activity;
-    User::LeaveIfError(SendReceive(function, TIpcArgs(&appId, actId, &data, &taskId)));
+    CAfEntry *entry = CAfEntry::NewL(flags,
+                                     publicData[ActivityApplicationKeyword].toInt(),
+                                     *actId,
+                                     KNullDesC,
+                                     prvBuffer,
+                                     pubBuffer);
+    CleanupStack::PopAndDestroy(actId);
+    CleanupStack::PopAndDestroy(&pubBuffer);
+    CleanupStack::PopAndDestroy(&prvBuffer);
+
+    CleanupStack::PushL(entry);
+    data.CreateL(entry->Size());
+    RDesWriteStream stream(data);
+    CleanupClosePushL(stream);
+    stream << (*entry);
+    CleanupStack::PopAndDestroy(&stream);
+    CleanupStack::PopAndDestroy(entry);
+    User::LeaveIfError(SendReceive(function, TIpcArgs(&data, &bitmapHdl)));
+    
     CleanupStack::PopAndDestroy(&data);
-    CleanupStack::PopAndDestroy(actId);
+    if (0 != bitmap) {
+        CleanupStack::PopAndDestroy(bitmap);
+    }
+
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Function retrieve all stored activity
+ * Function can leave on failure
+ * @param result - list of activity
+ */
+void HsActivityDbClientPrivate::activitiesL(QList<QVariantHash>& result)
+{
+    result.clear();
+
+    RBuf8 buffer;
+    CleanupClosePushL(buffer);
+
+    TPckgBuf<int> emptyFilter(0), length(0), taskId(0);
+    User::LeaveIfError(SendReceive(Activities,
+                                   TIpcArgs(&emptyFilter, &length, &taskId)));
+
+    CAfEntry::ReallocL(buffer, length());
+
+    User::LeaveIfError(SendReceive(GetData, TIpcArgs(&taskId, &buffer)));
+
+    RPointerArray<CAfEntry> entries;
+    CleanupClosePushL(entries);
+
+    entries << buffer;
+    buffer.Close();//release unneeded resources
+
+
+    while(entries.Count()) {
+        QVariantHash publicData;
+        publicData << entries[0]->Data(CAfEntry::Public);
+        publicData.insert(ActivityScreenshotKeyword,
+                          QString::fromUtf16(entries[0]->ImageSrc().Ptr(),
+                                             entries[0]->ImageSrc().Length()));
+        result.append(publicData);
+        entries.Remove(0);
+    }
+    CleanupStack::PopAndDestroy(&entries);
+    CleanupStack::PopAndDestroy(&buffer);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Function retrieve all stored activity
+ * Function can leave on failure
+ * @param result - list of activity
+ * @param cond - request conditions
+ */
+void HsActivityDbClientPrivate::applicationActivitiesL(QList<QVariantHash>& result,
+                                                     const QVariantHash & condition)
+{
+    result.clear();
+
+    RBuf8 buffer;
+    CleanupClosePushL(buffer);
+    CAfEntry *entry = CAfEntry::NewLC(0,
+                                      condition[ActivityApplicationKeyword].toInt(),
+                                      KNullDesC,
+                                      KNullDesC,
+                                      KNullDesC8,
+                                      KNullDesC8);//filtering using application id only
+    CAfEntry::ReallocL(buffer, entry->Size());
+    RDesWriteStream writer(buffer);
+    CleanupClosePushL(writer);
+    writer << (*entry);
+    CleanupStack::PopAndDestroy(&writer);
+    CleanupStack::PopAndDestroy(entry);
+
+    TPckgBuf<int> length(0), taskId(0);
+    User::LeaveIfError(SendReceive(ApplicationActivities,
+                                   TIpcArgs(&buffer, &length, &taskId)));
+
+    CAfEntry::ReallocL(buffer, length());
+
+    User::LeaveIfError(SendReceive(GetData, TIpcArgs(&taskId, &buffer)));
+
+    RPointerArray<CAfEntry> entries;
+    CleanupClosePushL(entries);
+
+    entries << buffer;
+    buffer.Close();//release unneeded resources
+
+
+    while(entries.Count()) {
+        QVariantHash publicData;
+        publicData << entries[0]->Data(CAfEntry::Public);
+        publicData.insert(ActivityScreenshotKeyword,
+                          QString::fromUtf16(entries[0]->ImageSrc().Ptr(),
+                                             entries[0]->ImageSrc().Length()));
+        result.append(publicData);
+        entries.Remove(0);
+    }
+    CleanupStack::PopAndDestroy(&entries);
+    CleanupStack::PopAndDestroy(&buffer);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Function retrieve private data of stored activity
+ * Function can leave on failure
+ * @param result - list of activity
+ * @param activity - request conditions
+ */
+void HsActivityDbClientPrivate::activityDataL(QVariant &result, const QVariantHash &activity)
+{
+    result.clear();
+
+    RBuf8 buffer;
+    CleanupClosePushL(buffer);
+
+    {   // prepare entry to send
+        HBufC *activityId = XQConversions::qStringToS60Desc(activity[ActivityActivityKeyword].toString());
+        CleanupStack::PushL(activityId);
+
+        CAfEntry *entry = CAfEntry::NewLC(0,
+                                          activity[ActivityApplicationKeyword].toInt(),
+                                          *activityId,
+                                          KNullDesC,
+                                          KNullDesC8,
+                                          KNullDesC8);//filtering using application id only
+        CAfEntry::ReallocL(buffer, entry->Size());
+        RDesWriteStream writer(buffer);
+        CleanupClosePushL(writer);
+        writer << (*entry);
+        CleanupStack::PopAndDestroy(&writer);
+        CleanupStack::PopAndDestroy(entry);
+        CleanupStack::PopAndDestroy(activityId);
+    }
+
+    {   // get data
+        TPckgBuf<int> length(0), taskId(0);
+        User::LeaveIfError(SendReceive(ApplicationActivity, TIpcArgs(&buffer, &length, &taskId)));
+
+        CAfEntry::ReallocL(buffer, length());
+        User::LeaveIfError(SendReceive(GetData, TIpcArgs(&taskId, &buffer)));
+    }
+
+    {   // read data to Qt structure
+        CAfEntry *entry = CAfEntry::NewLC();
+        RDesReadStream reader(buffer);
+        CleanupClosePushL(reader);
+        entry->InternalizeL(reader);
+        CleanupStack::PopAndDestroy(&reader);
+
+        buffer.Close(); //release unneeded resources
+
+        QVariantHash privateData;
+        privateData << entry->Data(CAfEntry::Private);
+        result = privateData.value(ActivityDataKeyword);
+
+        CleanupStack::PopAndDestroy(entry);
+    }
+    CleanupStack::PopAndDestroy(&buffer);
 }
 
 // -----------------------------------------------------------------------------
 //
 // -----------------------------------------------------------------------------
 //
-void HsActivityDbClientPrivate::activitiesL(QList<QVariantHash>& result)
+void HsActivityDbClientPrivate::launchActivityL(const QVariantHash &activity)
 {
-    TPckgBuf<TInt> appId(0);
-    TPtrC8 actId(KNullDesC8);
-    TPtrC8 desc(KNullDesC8);
-    TPckgBuf<TInt> taskId(0);
-    User::LeaveIfError(SendReceive(Activities, 
-                       TIpcArgs(&appId, &actId, &desc, &taskId)));
-
-    int sizeBuf(appId());
-    RBuf8 data;
-    CleanupClosePushL(data);
-    data.Create(sizeBuf);
-    User::LeaveIfError(SendReceive(GetData, TIpcArgs(&taskId, &data)));
-    
-    result << data;
-    CleanupStack::PopAndDestroy(&data);
-}
+    TPckgC<TInt> applicationId(activity[ActivityApplicationKeyword].toInt());
+    HBufC8 *activityId = XQConversions::qStringToS60Desc8(activity[ActivityActivityKeyword].toString());
+    CleanupStack::PushL(activityId);
+    TPtrC8 empty(KNullDesC8);
+    User::LeaveIfError(SendReceive(LaunchActivity,
+                                   TIpcArgs(&applicationId, activityId, &empty, &empty)));
+    CleanupStack::PopAndDestroy(activityId);
 
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void HsActivityDbClientPrivate::applicationActivitiesL(QList<QVariantHash>& result,
-                                                     const QVariantHash & condition)
-{
-    TPckgBuf<TInt> appId = condition.find(ActivityApplicationKeyword).value().toInt();
-    TPtrC8 actId(KNullDesC8);
-    TPtrC8 desc(KNullDesC8);
-    TPckgBuf<TInt> taskId(0);
-    User::LeaveIfError(SendReceive(ApplicationActivities, 
-                       TIpcArgs(&appId, &actId, &desc, &taskId)));
-
-    int sizeBuf(appId());
-    RBuf8 data;
-    CleanupClosePushL(data);
-    data.Create(sizeBuf);
-    User::LeaveIfError(SendReceive(GetData, TIpcArgs(&taskId, &data)));
-    
-    result << data;
-    CleanupStack::PopAndDestroy(&data);
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void HsActivityDbClientPrivate::waitActivityL(const QVariantHash &activity)
-{
-    HsActivityDbAsyncRequestPrivate::waitActivityLD(mObserver,*this, activity);
 }
 
 // -----------------------------------------------------------------------------
@@ -326,9 +505,11 @@
 }
 
 // -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
+/**
+ * Function get cached data from server
+ * @param taskId - request task id
+ * @param dst - destination, preallocated buffer
+ */
 void HsActivityDbClientPrivate::getData(int taskId, RBuf8 &data)
 {
     TPckgBuf<int> requestId(taskId);
@@ -336,11 +517,14 @@
 }
 
 // -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
+/**
+ * Function initialize aync request
+ * @param func - requested function
+ * @param data - request data
+ * @param status - request status
+ */
 void HsActivityDbClientPrivate::sendDataAsync(int func,
-                                              const TIpcArgs &data, 
+                                              const TIpcArgs &data,
                                               TRequestStatus& status)
 {
     SendReceive(func, data, status);
@@ -368,3 +552,92 @@
         mAsyncTasks.Remove(offset);
     }
 }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+int HsActivityDbClientPrivate::execute(int func, const QVariantHash &privateData, const QVariantHash &publicData)
+{
+    TRAPD(errNo,
+    User::LeaveIfError(checkDataConstraint(func, publicData));
+    switch (func) {
+    case AddActivity:
+    case UpdateActivity:
+    case RemoveActivity:
+    case RemoveApplicationActivities:
+        execSimpleRequestL(func, privateData, publicData);
+        break;
+    
+    case LaunchActivity:
+        launchActivityL(publicData);
+        break;
+    
+    case NotifyChange:
+        HsActivityDbAsyncRequestPrivate::notifyDataChangeLD(mObserver, *this);
+        break;
+    
+    case WaitActivity:
+        HsActivityDbAsyncRequestPrivate::waitActivityLD(mObserver,*this, publicData);
+        break;
+    
+    }
+    
+    )
+    return errNo;
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+int HsActivityDbClientPrivate::execute(int func, 
+                                       QList<QVariantHash>&dst, 
+                                       const QVariantHash &src)
+{
+    TRAPD(errNo,
+    User::LeaveIfError(checkDataConstraint(func, src));
+    switch (func) {
+    case Activities: activitiesL(dst);break;
+    case ApplicationActivities: applicationActivitiesL(dst, src); break;
+    }
+    )
+    return errNo;
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+int HsActivityDbClientPrivate::checkDataConstraint(int func, const QVariantHash &data)
+{
+    int retVal(KErrNone);
+    QStringList constraints;
+    switch(func) {
+    case AddActivity:
+    case UpdateActivity:
+        constraints << ActivityApplicationKeyword 
+                    << ActivityActivityKeyword 
+                    << ActivityScreenshotKeyword;
+        break;
+    
+    case ApplicationActivity:
+    case LaunchActivity:
+    case RemoveActivity:
+        constraints << ActivityApplicationKeyword
+                    << ActivityActivityKeyword;
+                    break;
+    
+    case WaitActivity:
+    case RemoveApplicationActivities:
+        constraints << ActivityApplicationKeyword;
+        break;
+    }
+    foreach (QString constraint, constraints) {
+        if (data.end() == data.find(constraint)) {
+            retVal = KErrCorrupt;
+            break;
+        }
+    }
+    return retVal;
+}
--- a/activityfw/activitydatabase/hsactivitydbclient/src/hsactivitydbclient.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/activityfw/activitydatabase/hsactivitydbclient/src/hsactivitydbclient.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -57,7 +57,7 @@
 {
     switch (requestType) {
         case WaitActivity:
-            if(KErrCancel != result) {
+            if (KErrCancel != result) {
                 waitActivity(QVariantHash());
             }            
             if (KErrNone == result) {
@@ -104,21 +104,25 @@
 }
 
 // -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-int HsActivityDbClient::addActivity(const QVariantHash &activity)
+/**
+ * Interface implementation.
+ * @see int HsActivityDbClientInterface::addActivity(const QVariantHash&)
+ */
+int HsActivityDbClient::addActivity(const QVariantHash &privateData, 
+                                    const QVariantHash &publicData)
 {
-    return d_ptr->addActivity(activity);
+    return d_ptr->addActivity(privateData, publicData);
 }
 
 // -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-int HsActivityDbClient::updateActivity(const QVariantHash &activity)
+/**
+ * Interface implementation.
+ * @see int HsActivityDbClientInterface::updateActivity(const QVariantHash&)
+ */
+int HsActivityDbClient::updateActivity(const QVariantHash &privateData, 
+                                       const QVariantHash &publicData)
 {
-    return d_ptr->updateActivity(activity);
+    return d_ptr->updateActivity(privateData, publicData);
 }
 
 // -----------------------------------------------------------------------------
@@ -162,6 +166,15 @@
 //
 // -----------------------------------------------------------------------------
 //
+int HsActivityDbClient::activityData(QVariant &result, const QVariantHash &activity)
+{
+    return d_ptr->activityData(result, activity);
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
 int HsActivityDbClient::waitActivity(const QVariantHash &activity)
 {
     QVariantHash condition(activity);
--- a/activityfw/activitydatabase/hsactivitydbserver/group/hsactivitydbserver.mmp	Fri Jun 11 13:58:37 2010 +0300
+++ b/activityfw/activitydatabase/hsactivitydbserver/group/hsactivitydbserver.mmp	Wed Jun 23 18:33:40 2010 +0300
@@ -23,19 +23,23 @@
 
 USERINCLUDE     ../inc
 USERINCLUDE     ../../inc
+USERINCLUDE     ../../s60/inc
 USERINCLUDE     ../../../../inc
 
 SOURCEPATH      ../src
 SOURCE          main.cpp
-SOURCE          activityserver.cpp
-SOURCE          activitysession.cpp
-SOURCE          activitystorage.cpp
-SOURCE          activitydataprovidertask.cpp
-SOURCE          activitybroadcasttask.cpp
-SOURCE          activitystoragesynctask.cpp
-SOURCE          activitystorageasynctask.cpp
-SOURCE          activityobservertask.cpp
-SOURCE          activitythumbnailtask.cpp
+SOURCE          afserver.cpp
+SOURCE          afsession.cpp
+SOURCE          afstorage.cpp
+SOURCE          afdataprovidertask.cpp
+SOURCE          afbroadcasttask.cpp
+SOURCE          afstoragesynctask.cpp
+SOURCE          afstorageasynctask.cpp
+SOURCE          afobservertask.cpp
+SOURCE          afthumbnailtask.cpp
+
+SOURCEPATH      ../../s60/src
+SOURCE          afentry.cpp
 
 LIBRARY        euser.lib 
 LIBRARY        estor.lib
@@ -43,6 +47,7 @@
 LIBRARY        efsrv.lib
 LIBRARY        bafl.lib
 LIBRARY        fbscli.lib
+LIBRARY        hash.lib 
 LIBRARY        bitmaptransforms.lib
 LIBRARY        imageconversion.lib
 LIBRARY        tsutils.lib
--- a/activityfw/activitydatabase/hsactivitydbserver/inc/activitybroadcasttask.h	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-#ifndef ACTIVITYBROADCASTTASK_H
-#define ACTIVITYBROADCASTTASK_H
-
-// INCLUDES
-#include <e32std.h>
-#include <e32base.h>
-
-#include "activitytaskstorage.h"
-#include "activitytask.h"
-// CLASS DECLARATION
-
-/**
- *  CActivityBroadcastTask
- * 
- */
-class ActivityBroadcastTask
-{
-public:
-    /**
-     * Handle broadccast message request
-     * @param storage - observer tasks storage
-     * @param msg - request message that will be provided to observers
-     */
-    static void ExecuteL(MActivityTaskStorage& storage, const RMessage2& msg);
-};
-
-#endif // ACTIVITYBROADCASTTASK_H
--- a/activityfw/activitydatabase/hsactivitydbserver/inc/activitydataprovidertask.h	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-#ifndef ACTIVITYDATAPROVIDERTASK_H
-#define ACTIVITYDATAPROVIDERTASK_H
-
-// INCLUDES
-#include <e32std.h>
-#include <e32base.h>
-
-#include "activitytaskstorage.h"
-#include "activitytask.h"
-
-/**
- *  CActivityDataProviderTask
- * 
- */
-class ActivityDataProviderTask
-{
-public:
-    /**
-     * Handle data request. Deliver data stored in other task.
-     * @param storage - data tasks storage
-     * @param msg - request message
-     */
-    static void ExecuteL(MActivityTaskStorage& storage, const RMessage2& msg);
-
-private:
-    /**
-     * Write response data to request message
-     * @param msg - destination message
-     * @param src - data source
-     */
-    static void ProvideDataL(const RMessage2& msg, const CActivityTask& src);
-
-};
-
-#endif // ACTIVITYDATAPROVIDERTASK_H
--- a/activityfw/activitydatabase/hsactivitydbserver/inc/activityobservertask.h	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,90 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-#ifndef ACTIVITYOBSERVERTASK_H
-#define ACTIVITYOBSERVERTASK_H
-
-// INCLUDES
-#include <e32std.h>
-#include <e32base.h>
-
-#include "activitytask.h"
-#include "activitytaskstorage.h"
-
-/**
- *  CActivityObserverTask
- * 
- */
-class CActivityObserverTask : public CActivityTask
-{
-public:
-    /**
-     * Destructor.
-     */
-    ~CActivityObserverTask();
-
-    /**
-     * Handle observer request. 
-     * @param globalStorage - global observers storage
-     * @param localStorage - local observers storage
-     * @param msg - request message
-     */
-    static void ExecuteLD(MActivityTaskStorage& globalStorage, 
-                          MActivityTaskStorage& localStorage,
-                          const RMessage2& msg);
-
-    /**
-     * Interface implementation
-     * @see CActivityTask::Data()
-     */
-    const TDesC8& Data() const;
-
-    /**
-     * Interface implementation
-     * @see CActivityTask::BroadcastReceivedL(const RMessage2&)
-     */
-    void BroadcastReceivedL(const RMessage2& );
-
-private:
-
-    /**
-     * Constructor for performing 1st stage construction
-     * @param globalStorage - global observers storage
-     * @param localStorage - local observers storage
-     * @param msg - request message
-     */
-    CActivityObserverTask(MActivityTaskStorage& globalStorage, 
-                          MActivityTaskStorage& localStorage,
-                          const RMessage2& msg);
-    
-    /**
-     * Write response data to requested message 
-     */
-    void WriteResponseL();
-    
-    /**
-     * Returns ETrue if task is related with session argument
-     */
-    TBool IsSessionTask(const CSession2* session);
-
-private:
-    MActivityTaskStorage& mGlobalStorage;
-    MActivityTaskStorage& mLocalStorage;
-    const RMessage2 mMsg;
-    RBuf8 mData;
-};
-
-#endif // ACTIVITYOBSERVERTASK_H
--- a/activityfw/activitydatabase/hsactivitydbserver/inc/activityqueries.h	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-#ifndef ACTIVITYQUERIES_H
-#define ACTIVITYQUERIES_H
-
-
-#include <e32base.h>
-
-_LIT( KSelectRow, "SELECT * FROM Activities WHERE ApplicationId=%S AND ActivityName='%S'");
-_LIT( KSelectRows, "SELECT Data FROM Activities");
-_LIT( KSelectAppRows, "SELECT Data FROM Activities WHERE ApplicationId=%S");
-_LIT( KDeleteRow, "DELETE FROM Activities WHERE ApplicationId=%S AND ActivityName='%S'");
-_LIT( KDeleteRows, "DELETE FROM Activities WHERE ApplicationId=%S");
-
-_LIT(KApplicationColumnName, "ApplicationId");
-_LIT(KActivityColumnName, "ActivityName");
-_LIT(KDataColumnName, "Data");
-
-_LIT(KActivityTableName, "Activities");
-_LIT(KActivityIndexName, "ActivitiesKey");
-#endif  // ACTIVITYQUERIES_H
-
--- a/activityfw/activitydatabase/hsactivitydbserver/inc/activityserver.h	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,97 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-#ifndef ACTIVITYSERVER_H
-#define ACTIVITYSERVER_H
-
-#define __E32SVR_H__
-
-// INCLUDES
-#include <e32std.h>
-#include <e32base.h>
-#include <f32file.h>    // RFs
-
-#include "activitytaskstorage.h"
-
-class CActivityStorage;
-/**
- *  CActivityServer
- * 
- */
-class CActivityServer : public CServer2,
-                        public MActivityTaskStorage
-{
-public:
-    /**
-     * Destructor.
-     */
-    ~CActivityServer();
-
-    /**
-     * Two-phased constructor.
-     */
-    static CActivityServer* NewLC();
-
-public:
-    /**
-     * Interface implementation
-     * @see MActivityTaskStorage::PushL(CActivityTask *)
-     */
-    void PushL(CActivityTask *);
-    
-    /**
-     * Interface implementation
-     * @see MActivityTaskStorage::Pop(CActivityTask *)
-     */
-    void Pop(CActivityTask *);
-    
-    /**
-     * Interface implementation
-     * @see MActivityTaskStorage::StorageData()
-     */
-    const RPointerArray<CActivityTask>& StorageData() const;
-    
-
-private:
-
-    /**
-     * Constructor for performing 1st stage construction
-     */
-    CActivityServer();
-
-    /**
-     * Default constructor for performing 2nd stage construction
-     */
-    void ConstructL();
-
-    /**
-     * Interface implementation
-     * @see CServer2::NewSessionL(const TVersion&, const RMessage2&)
-     */
-    CSession2* NewSessionL(const TVersion& version, const RMessage2& message) const;
-    
-    /**
-     * Removes not valid task
-     */
-    void RemoveNotValidTasks(const CSession2* session);
-    
-private:
-    RFs mFsSession;
-    CActivityStorage* mStorage;
-    RPointerArray<CActivityTask> mObservers;
-};
-
-#endif // ACTIVITYSERVER_H
--- a/activityfw/activitydatabase/hsactivitydbserver/inc/activitysession.h	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,110 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-#ifndef ACTIVITYSESSION_H
-#define ACTIVITYSESSION_H
-
-#ifndef __E32SVR_H__
-#define __E32SVR_H__
-#endif 
-// INCLUDES
-#include <e32std.h>
-#include <e32base.h>
-#include <f32file.h>
-
-#include "activitytaskstorage.h"
-
-class CActivityStorage;
-/**
- *  CActivitySession
- * 
- */
-class CActivitySession : public CSession2,
-                         public MActivityTaskStorage
-{
-public:
-    // Constructors and destructor
-
-    /**
-     * Destructor.
-     */
-    ~CActivitySession();
-
-    /**
-     * Two-phased constructor.
-     * @param fileSession - initialized file system session
-     * @param taskStorage - global observers storage
-     * @param storage - data storage
-     */
-    static CActivitySession* NewL(RFs& fileSession,
-                                  MActivityTaskStorage& taskStorage, 
-                                  CActivityStorage&storage);
-
-public:
-    /**
-     * Interface implementation
-     * @see MActivityTaskStorage::PushL(CActivityTask *)
-     */
-    void PushL(CActivityTask *);
-    
-    /**
-     * Interface implementation
-     * @see MActivityTaskStorage::Pop(CActivityTask *)
-     */
-    void Pop(CActivityTask *);
-    
-    /**
-     * Interface implementation
-     * @see MActivityTaskStorage::StorageData()
-     */
-    const RPointerArray<CActivityTask>& StorageData() const;
-    
-    /**
-     * Removes not valid task
-     */
-    void RemoveNotValidTasks(const CSession2* session);
-private:
-
-    /**
-     * Constructor for performing 1st stage construction
-     * @param fileSession - initialized file system session
-     * @param taskStorage - global observers storage
-     * @param storage - data storage
-     */
-    CActivitySession(RFs& fileSession,
-                     MActivityTaskStorage& taskStorage, 
-                     CActivityStorage& storage);
-
-    /**
-     * EPOC default constructor for performing 2nd stage construction
-     */
-    void ConstructL();
-
-private:
-    /**
-     * Implements interface
-     * @see void CSession2::ServiceL(const RMessage2&)
-     */
-    void ServiceL(const RMessage2& message);
-
-private:
-    RFs& mFileSession; 
-    MActivityTaskStorage& mTasksStorage;
-    CActivityStorage& mStorage;
-    RPointerArray<CActivityTask> mRunningTasks;
-};
-
-#endif // ACTIVITYSESSION_H
--- a/activityfw/activitydatabase/hsactivitydbserver/inc/activitystorage.h	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,196 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-#ifndef ACTIVITYSTORAGE_H
-#define ACTIVITYSTORAGE_H
-
-#define __E32SVR_H__
-
-#include <e32std.h>
-#include <e32base.h>
-#include <d32dbms.h>    // RDbStoreDatabase
-#include <s32file.h>    // CFileStore & CPermanentFileStore
-
-/**
- *  CActivityStorage
- * 
- */
-class CActivityStorage : public CBase
-    {
-public:
-    /**
-     * Destructor.
-     */
-    ~CActivityStorage();
-
-    /**
-     * Two-phased constructor.
-     * @param session - initialized session to file system
-     */
-    static CActivityStorage* NewL(RFs& session);
-
-    /**
-     * Register new activity
-     * @param appId - application id
-     * @param actId - activity id
-     * @param data - activity data
-     */
-    void AddActivityL(TInt appId,const TDesC8& actId, const TDesC8& data);
-
-    /**
-     * Update activity
-     * @param appId - application id
-     * @param actId - activity id
-     * @param data - activity data
-     */
-    void UpdateActivityL(TInt appId,const TDesC8& actId, const TDesC8& data);
-
-    /**
-     * Delete activity
-     * @param appId - application id
-     * @param actId - activity id
-     */
-    void DeleteActivityL(TInt appId,const TDesC8& actId);
-
-    /**
-     * Delete activity
-     * @param appId - application id
-     */
-    void DeleteActivitiesL(TInt appId);
-
-    /**
-     * Serialize all activity into the buffer
-     * @param dst - destination buffer
-     */
-    void ActivitiesL(RBuf8 &dst);
-
-    /**
-     * Serialize application activity into the buffer
-     * @param dst - destination buffer
-     * @param appId - application id
-     */
-    void ActivitiesL(RBuf8 &dst, TInt appId);
-
-private:
-    /**
-     * Constructor for performing 1st stage construction
-     * @param session - initialized session to file system
-     */
-    CActivityStorage(RFs& session);
-
-    /**
-     * EPOC default constructor for performing 2nd stage construction
-     */
-    void ConstructL();
-
-    /**
-     * Create database and its structure
-     * @param databaseFile - database file path
-     */
-    void CreateDbL(const TDesC& databaseFile);
-
-    /**
-     * Open database
-     * @param databaseFile - database file path
-     */
-    void OpenDbL(const TDesC& databaseFile);
-
-    /**
-     * Create database structure
-     */
-    void CreateTableL();
-
-    /**
-     * Serialize activity into buffer
-     * @param dst - destination buffer
-     */
-    void GetActivitiesL(const TDesC& dst);
-
-    /**
-     * Format query to select activity row
-     * @param appId - application id
-     * @param actId - activity id
-     * @return formated sql query
-     */
-    HBufC* SelectRowLC(TInt appId, const TDesC8& actId) const;
-    
-    /**
-     * Format query to select activities for application
-     * @param appId - application id
-     * @return formated sql query
-     */
-    HBufC* SelectRowsLC(TInt appId) const;
-
-    /**
-     * Format query to delete activity
-     * @param appId - application id
-     * @param actId - activity id
-     * @return formated sql query
-     */
-    HBufC* DeleteRowLC(TInt appId, const TDesC8& actId) const;
-    
-    /**
-     * Format query to delete activities for application
-     * @param appId - application id
-     * @return formated sql query
-     */
-    HBufC* DeleteRowsLC(TInt appId) const;
-
-    /**
-     * Format sql query
-     * @format - sql format string
-     * @param appId - application id
-     * @param actId - activity id
-     * @return formated sql query
-     */
-    HBufC* BuildQueryLC(const TDesC& format, TInt appId, const TDesC8& actId) const;
-
-    /**
-     * Count require buffer size to serialize activity query result
-     * @param data - sql query result
-     * @return reuired buffer size to seriazlie activity
-     */
-    TInt DataSizeL(RDbRowSet& data)const;
-
-    /**
-     * Serialize activity query result to preallocated buffer
-     * @param dst - preallocated buffer
-     * @param view - sql query result
-     */
-    void ExternalizeL(TDes8& dst, RDbRowSet& view)const;
-
-    /**
-     * Execute sql query and result serialize into buffer
-     * @param dst - destination result buffer
-     * @param query - sql activity query 
-     */
-    void ActivitiesL(RBuf8& dst, const TDesC& query);
-
-    /**
-     * Get activity for update
-     * @param query - destination query result
-     * @param appId - application id
-     * @param actId - activity id
-     */
-    void GetActivityForUpdateL(RDbView& query, TInt appId, const TDesC8& actId);
-
-private:
-    RFs& mFsSession;
-    RDbStoreDatabase mActDb;/* For database operations                 */
-    CFileStore* mFileStore;  /* For creating and opening database files */
-};
-
-#endif // ACTIVITYSTORAGE_H
--- a/activityfw/activitydatabase/hsactivitydbserver/inc/activitystorageasynctask.h	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,108 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-#ifndef ACTIVITYSTORAGEASYNCTASK_H
-#define ACTIVITYSTORAGEASYNCTASK_H
-
-// INCLUDES
-#include <e32std.h>
-#include <e32base.h>
-
-#include "activitytask.h"
-#include "activitytaskstorage.h"
-#include "activitystorage.h"
-
-/**
- *  CActivityStorageAsyncTask
- * 
- */
-class CActivityStorageAsyncTask : public CActivityTask
-{
-public:
-    // Constructors and destructor
-
-    /**
-     * Destructor.
-     */
-    ~CActivityStorageAsyncTask();
-
-    /**
-     * Handle asynchronous data storage requests
-     * @param taskStorage - data tasks storage
-     * @param dataStorage - data storage
-     * @param msg - request message
-     */
-    static void ExecuteLD(MActivityTaskStorage& taskStorage, 
-                          CActivityStorage& dataStorage, 
-                          const RMessage2& msg);
-
-    /**
-     * Interface implementation
-     * @see CActivityTask::Data()
-     */
-    const TDesC8& Data() const;
-
-    /**
-     * Interface implementation
-     * @see CActivityTask::BroadcastReceivedL(const RMessage2 &)
-     */
-    void BroadcastReceivedL(const RMessage2 &);
-
-private:
-
-    
-    /**
-     * Constructor for performing 1st stage construction
-     */
-    CActivityStorageAsyncTask();
-
-    /**
-     * Handle asynchronous data storage requests
-     * @param dataStorage - data storage
-     * @param msg - request message
-     */
-    void ExecuteL(CActivityStorage& dataStorage, const RMessage2& msg);
-    
-    /**
-     * Handle getting all activities request
-     * @param dataStorage - data storage
-     * @param msg - requested message
-     */
-    void AllActivitiesL(CActivityStorage& dataStorage, const RMessage2& msg);
-
-    /**
-     * Handle getting application activities request
-     * @param dataStorage - data storage
-     * @param msg - requested message
-     */
-    void ApplicationActivitiesL(CActivityStorage& dataStorage, const RMessage2& msg);
-
-    /**
-     * Write response data into request message
-     * @param msg - destination message
-     */
-    void WriteResponseL(const RMessage2& msg);
-    
-    /**
-     * Returns ETrue if task is related with session argument
-     */
-    TBool IsSessionTask(const CSession2* session);
-
-private:
-    RBuf8 mData;
-};
-
-#endif // ACTIVITYSTORAGEASYNCTASK_H
--- a/activityfw/activitydatabase/hsactivitydbserver/inc/activitystoragesynctask.h	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-#ifndef ACTIVITYSTORAGESYNCTASK_H
-#define ACTIVITYSTORAGESYNCTASK_H
-
-// INCLUDES
-#include <e32std.h>
-#include <e32base.h>
-
-#include "activitytask.h"
-#include "activitystorage.h"
-#include "activitytaskstorage.h"
-
-/**
- *  CActivityStorageSyncTask
- * 
- */
-class ActivityStorageSyncTask
-    {
-public:
-    /**
-     * Handle synchronous data storage requests
-     * @param dataStorage - data storage
-     * @param msg - request message
-     */
-    static void ExecuteL(MActivityTaskStorage& observers,
-                         CActivityStorage& dataStorage, 
-                         const RMessage2& msg);
-
-private:
-    /**
-     * Handle adding new activity.
-     * @param dataStorage - data storage
-     * @param msg - request message
-     */
-    static void AddActivityL(CActivityStorage& dataStorage, 
-                             const RMessage2& msg);
-
-    /**
-     * Handle updating existing activiy
-     * @param dataStorage - data storage
-     * @param msg - request message
-     */
-    static void UpdateActivityL(CActivityStorage& dataStorage, 
-                                const RMessage2& msg);
-
-    /**
-     * Handle removing activity.
-     * @param dataStorage - data storage
-     * @param msg - request message
-     */
-    static void DeleteActivityL(CActivityStorage& dataStorage, 
-                                const RMessage2& msg);
-
-    /**
-     * Handle removing all application activities.
-     * @param dataStorage - data storage
-     * @param msg - request message
-     */
-    static void DeleteApplicationActivitiesL(CActivityStorage& dataStorage, 
-                                             const RMessage2& msg);
-    
-    static void NotifyChangeL(MActivityTaskStorage& observers,
-                              const RMessage2& msg);
-
-    };
-
-#endif // ACTIVITYSTORAGESYNCTASK_H
--- a/activityfw/activitydatabase/hsactivitydbserver/inc/activitytask.h	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-#ifndef ACTIVITYTASK_H
-#define ACTIVITYTASK_H
-
-class CActivityTask: public CBase
-{
-public:
-    /**
-     * Return task data 
-     */
-    virtual const TDesC8& Data() const =0;
-    
-    /**
-     * Notify instance about incoming broadcast message.
-     * @param msg - broadcast message
-     */
-    virtual void BroadcastReceivedL(const RMessage2& msg) =0;
-    
-    /**
-     * Returns ETrue if task is related with session argument
-     */
-    virtual TBool IsSessionTask(const CSession2* session) =0;
-};
-
-#endif  //ACTIVITYTASK_H
-
--- a/activityfw/activitydatabase/hsactivitydbserver/inc/activitytaskstorage.h	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-#ifndef ACTIVITYTASKSTORAGE_H
-#define ACTIVITYTASKSTORAGE_H
-#include <e32base.h>
-class CActivityTask;
-class MActivityTaskStorage
-{
-public:
-    /**
-     * Register new task instance in storage. Ownership is transfered to storage.
-     * @param task - instance that need to be registered
-     */
-    virtual void PushL(CActivityTask * task)=0;
-    
-    /**
-     * Unregister task instance from storage. Ownership is transfered to caller.
-     * @param task - instance that need to be unregistered
-     */
-    virtual void Pop(CActivityTask *)=0;
-    
-    /**
-     * List of registered tasks
-     */
-    virtual const RPointerArray<CActivityTask>& StorageData() const =0;
-
-    /**
-     * Removes not valid task
-     */
-    virtual void RemoveNotValidTasks(const CSession2* session) =0;
-};
-
-#endif  //ACTIVITYTASKSTORAGE_H
-
--- a/activityfw/activitydatabase/hsactivitydbserver/inc/activitythumbnailtask.h	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-#ifndef ACTIVITYTHUMBNAILTASK_H
-#define ACTIVITYTHUMBNAILTASK_H
-
-#ifndef __E32SVR_H__
-#define __E32SVR_H__
-#endif
-
-#include <e32std.h>
-#include <e32base.h>
-#include <f32file.h>
-
-#include "activitytask.h"
-#include "activitytaskstorage.h"
-#include "tsgraphicfilescalinghandler.h"
-
-class CFbsBitmap;
-
-/**
- *  CActivityThumbnailTask
- * 
- */
-class CActivityThumbnailTask : public CActivityTask,
-                               public MImageReadyCallBack
-    {
-public:
-    /**
-     * Destructor.
-     */
-    ~CActivityThumbnailTask();
-
-    static void ExecuteLD(RFs& session,
-                          MActivityTaskStorage& taskStorage,
-                          const RMessage2& message);
-
-private:
-    /**
-     * Constructor for performing 1st stage construction
-     */
-    CActivityThumbnailTask(MActivityTaskStorage& storage, const RMessage2 msg);
-
-    /**
-     * EPOC default constructor for performing 2nd stage construction
-     */
-    void ConstructL(RFs& session);
-
-    /**
-     * 
-     */
-    void ImageReadyCallBack(TInt error, const CFbsBitmap *bitmap );
-
-    const TDesC8& Data()const;
-
-    void BroadcastReceivedL(const RMessage2& );
-    
-    /**
-     * Returns ETrue if task is related with session argument
-     */
-    TBool IsSessionTask(const CSession2* session);
-
-private:
-    MActivityTaskStorage& mStorage; 
-    const RMessage2 mMsg;
-    CBase* mService;
-    };
-
-#endif // ACTIVITYTHUMBNAILTASK_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/activityfw/activitydatabase/hsactivitydbserver/inc/afbroadcasttask.h	Wed Jun 23 18:33:40 2010 +0300
@@ -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:
+*
+*/
+#ifndef AFBROADCASTTASK_H
+#define AFBROADCASTTASK_H
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+
+#include "aftaskstorage.h"
+#include "aftask.h"
+
+class AfBroadcastTask
+{
+public:
+    static void ExecuteL(MAfTaskStorage& storage, const RMessage2& msg);
+};
+
+#endif // AFBROADCASTTASK_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/activityfw/activitydatabase/hsactivitydbserver/inc/afdataprovidertask.h	Wed Jun 23 18:33:40 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#ifndef AFDATAPROVIDERTASK_H
+#define AFDATAPROVIDERTASK_H
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+
+#include "aftaskstorage.h"
+#include "aftask.h"
+
+class AfDataProviderTask
+{
+public:
+    static void ExecuteL(MAfTaskStorage& storage, const RMessage2& msg);
+
+private:
+    static void ProvideDataL(const RMessage2& msg, const CAfTask& src);
+
+};
+
+#endif // AFDATAPROVIDERTASK_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/activityfw/activitydatabase/hsactivitydbserver/inc/afobservertask.h	Wed Jun 23 18:33:40 2010 +0300
@@ -0,0 +1,56 @@
+/*
+* 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:
+*
+*/
+#ifndef AFOBSERVERTASK_H
+#define AFOBSERVERTASK_H
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+
+#include "aftask.h"
+#include "aftaskstorage.h"
+
+class CAfObserverTask : public CAfTask
+{
+public:
+    ~CAfObserverTask();
+
+    static void ExecuteLD(MAfTaskStorage& globalStorage, 
+                          MAfTaskStorage& localStorage,
+                          const RMessage2& msg);
+
+    const TDesC8& Data() const;
+
+    void BroadcastReceivedL(const RMessage2& );
+
+private:
+    CAfObserverTask(MAfTaskStorage& globalStorage, 
+                    MAfTaskStorage& localStorage,
+                    const RMessage2& msg);
+
+    void WriteResponseL();
+
+    TBool IsSessionTask(const CSession2* session);
+
+private:
+    MAfTaskStorage& mGlobalStorage;
+    MAfTaskStorage& mLocalStorage;
+    const RMessage2 mMsg;
+    RBuf8 mData;
+};
+
+#endif // AFOBSERVERTASK_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/activityfw/activitydatabase/hsactivitydbserver/inc/afqueries.h	Wed Jun 23 18:33:40 2010 +0300
@@ -0,0 +1,38 @@
+/*
+* 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:
+*
+*/
+#ifndef AFQUERIES_H
+#define AFQUERIES_H
+
+
+#include <e32base.h>
+
+_LIT( KSelectRow, "SELECT * FROM Activities WHERE ApplicationId=%S AND ActivityName='%S'");
+_LIT( KSelectRows, "SELECT * FROM Activities");
+_LIT( KSelectAppRows, "SELECT * FROM Activities WHERE ApplicationId=%S");
+_LIT( KDeleteRow, "DELETE FROM Activities WHERE ApplicationId=%S AND ActivityName='%S'");
+_LIT( KDeleteRows, "DELETE FROM Activities WHERE ApplicationId=%S");
+_LIT( KDeleteNonPersistentActivities, "DELETE FROM Activities WHERE Flags<%S");
+
+_LIT(KApplicationColumnName, "ApplicationId");
+_LIT(KActivityColumnName, "ActivityName");
+_LIT(KFlagsColumnName, "Flags");
+_LIT(KDataColumnName, "Data");
+
+_LIT(KActivityTableName, "Activities");
+_LIT(KActivityIndexName, "ActivitiesKey");
+#endif  // AFQUERIES_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/activityfw/activitydatabase/hsactivitydbserver/inc/afserver.h	Wed Jun 23 18:33:40 2010 +0300
@@ -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:
+*
+*/
+#ifndef AFSERVER_H
+#define AFSERVER_H
+
+#define __E32SVR_H__
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+#include <f32file.h>    // RFs
+
+#include "aftaskstorage.h"
+
+class CAfStorage;
+
+class CAfServer : public CServer2,
+                  public MAfTaskStorage
+{
+public:
+    ~CAfServer();
+
+    static CAfServer* NewLC();
+
+public:
+    void PushL(CAfTask *);
+    
+    void Pop(CAfTask *);
+    
+    const RPointerArray<CAfTask>& StorageData() const;
+    
+
+private:
+    CAfServer();
+
+    void ConstructL();
+
+    CSession2* NewSessionL(const TVersion& version, const RMessage2& message) const;
+
+    void RemoveNotValidTasks(const CSession2* session);
+
+private:
+    RFs mFsSession;
+    CAfStorage* mStorage;
+    RPointerArray<CAfTask> mObservers;
+};
+
+#endif // AFSERVER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/activityfw/activitydatabase/hsactivitydbserver/inc/afsession.h	Wed Jun 23 18:33:40 2010 +0300
@@ -0,0 +1,68 @@
+/*
+* 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:
+*
+*/
+#ifndef AFSESSION_H
+#define AFSESSION_H
+
+#ifndef __E32SVR_H__
+#define __E32SVR_H__
+#endif 
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+#include <f32file.h>
+
+#include "aftaskstorage.h"
+
+class CAfStorage;
+
+class CAfSession : public CSession2,
+                   public MAfTaskStorage
+{
+public:
+    ~CAfSession();
+
+    static CAfSession* NewL(RFs& fileSession,
+                            MAfTaskStorage& taskStorage, 
+                            CAfStorage&storage);
+
+public:
+    void PushL(CAfTask *);
+
+    void Pop(CAfTask *);
+
+    const RPointerArray<CAfTask>& StorageData() const;
+
+    void RemoveNotValidTasks(const CSession2* session);
+
+private:
+    CAfSession(RFs& fileSession,
+               MAfTaskStorage& taskStorage, 
+               CAfStorage& storage);
+
+    void ConstructL();
+
+private:
+    void ServiceL(const RMessage2& message);
+
+private:
+    RFs& mFileSession; 
+    MAfTaskStorage& mTasksStorage;
+    CAfStorage& mStorage;
+    RPointerArray<CAfTask> mRunningTasks;
+};
+
+#endif // AFSESSION_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/activityfw/activitydatabase/hsactivitydbserver/inc/afstorage.h	Wed Jun 23 18:33:40 2010 +0300
@@ -0,0 +1,100 @@
+/*
+* 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:
+*
+*/
+#ifndef AFSTORAGE_H
+#define AFSTORAGE_H
+
+#define __E32SVR_H__
+
+#include <e32std.h>
+#include <e32base.h>
+#include <d32dbms.h>    // RDbStoreDatabase
+#include <s32file.h>    // CFileStore & CPermanentFileStore
+#include "afentry.h"
+
+class CAfStorage : public CBase
+    {
+public:
+    ~CAfStorage();
+
+    static CAfStorage* NewL(RFs& session);
+
+    void AddActivityL(CAfEntry &entry);
+    
+    void UpdateActivityL(CAfEntry &entry);
+
+    void DeleteActivityL(CAfEntry &entry);
+
+    void DeleteActivitiesL(CAfEntry &entry);
+
+    void ActivitiesL(RPointerArray<CAfEntry> &dst);
+
+    void ActivitiesL(RPointerArray<CAfEntry> &dst, TInt appId);
+    
+    void ActivityL(CAfEntry *&dst, CAfEntry &src);
+
+    RFs& Fs();
+
+private:
+    CAfStorage(RFs& session);
+
+    void ConstructL();
+
+    void CreateDbL(const TDesC& databaseFile);
+
+    void OpenDbL(const TDesC& databaseFile);
+
+    void CreateTableL();
+
+    void DeleteNonPersistentActivitiesL();
+
+    void GetActivitiesL(const TDesC& dst);
+
+    HBufC* SelectRowLC(TInt appId, const TDesC& actId) const;
+
+    HBufC* SelectRowsLC(TInt appId) const;
+
+    HBufC* DeleteRowLC(TInt appId, const TDesC& actId) const;
+    
+    HBufC* DeleteRowsLC(TInt appId) const;
+
+    HBufC* BuildQueryLC(const TDesC& format, TInt appId, const TDesC& actId) const;
+    
+    void ActivitiesL(RPointerArray<CAfEntry>& dst, 
+                     const TDesC& query, 
+                     CAfEntry::AccessRights rights,
+                     TInt limit = 0);
+
+    void ActivitiesL(RPointerArray<CAfEntry>& dst, 
+                     RDbView& query, 
+                     CAfEntry::AccessRights rights,
+                     TInt limit = 0);
+
+    void GetActivityForUpdateL(RDbView& query, TInt appId, const TDesC& actId);
+
+    void ReadDataL(RBuf& dst, RDbRowSet& src, TInt offset) const;
+
+    void ExternalizeDataL(RDbRowSet &dst,const CAfEntry & src, TInt offset) const;
+
+    void InternalizeDataL(CAfEntry &dst, RDbRowSet& src, TInt offset) const;
+
+private:
+    RFs& mFsSession;
+    RDbStoreDatabase mActDb;/* For database operations                 */
+    CFileStore* mFileStore;  /* For creating and opening database files */
+};
+
+#endif //AFSTORAGE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/activityfw/activitydatabase/hsactivitydbserver/inc/afstorageasynctask.h	Wed Jun 23 18:33:40 2010 +0300
@@ -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:
+*
+*/
+#ifndef AFSTORAGEASYNCTASK_H
+#define AFSTORAGEASYNCTASK_H
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+
+#include "aftask.h"
+#include "aftaskstorage.h"
+#include "afstorage.h"
+
+class CAfStorageAsyncTask : public CAfTask
+{
+public:
+    ~CAfStorageAsyncTask();
+
+    static void ExecuteLD(MAfTaskStorage& taskStorage, 
+                          CAfStorage& dataStorage, 
+                          const RMessage2& msg);
+
+    const TDesC8& Data() const;
+
+    void BroadcastReceivedL(const RMessage2 &);
+
+private:
+    CAfStorageAsyncTask();
+
+    void ExecuteL(CAfStorage& dataStorage, const RMessage2& msg);
+
+    void AllActivitiesL(CAfStorage& dataStorage, const RMessage2& msg);
+
+    void ApplicationActivitiesL(CAfStorage& dataStorage, const RMessage2& msg);
+
+    void ApplicationActivityL(CAfStorage& dataStorage, const RMessage2& msg);
+
+    void WriteResponseL(const RMessage2& msg);
+
+    TBool IsSessionTask(const CSession2* session);
+
+    void ExternalizeL();
+    
+    void ExternalizeL(const CAfEntry &entry);
+
+private:
+    RBuf8 mExternalizedData;
+    RPointerArray<CAfEntry> mInternalizedData;
+};
+
+#endif // AFSTORAGEASYNCTASK_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/activityfw/activitydatabase/hsactivitydbserver/inc/afstoragesynctask.h	Wed Jun 23 18:33:40 2010 +0300
@@ -0,0 +1,69 @@
+/*
+* 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:
+*
+*/
+#ifndef AFSTORAGESYNCTASK_H
+#define AFSTORAGESYNCTASK_H
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+
+#include "aftask.h"
+#include "afstorage.h"
+#include "aftaskstorage.h"
+
+class CAfEntry;
+/**
+ *  CActivityStorageSyncTask
+ * 
+ */
+class AfStorageSyncTask
+    {
+public:
+    static void ExecuteL(MAfTaskStorage& observers,
+                         CAfStorage& dataStorage, 
+                         const RMessage2& msg);
+
+private:
+    static void AddActivityL(CAfStorage& dataStorage, 
+                             const RMessage2& msg);
+
+    static void UpdateActivityL(CAfStorage& dataStorage, 
+                                const RMessage2& msg);
+
+    static void DeleteActivityL(CAfStorage& dataStorage, 
+                                const RMessage2& msg);
+
+    static void DeleteApplicationActivitiesL(CAfStorage& dataStorage, 
+                                             const RMessage2& msg);
+
+    static void NotifyChangeL(MAfTaskStorage& observers,
+                              const RMessage2& msg);
+
+    static void ReadEntryL(CAfEntry& entry, const RMessage2& msg);
+
+    static void CreateThumbnailL(const TDesC &path, TInt hdl);
+
+    static void ThumbnailPathL(RBuf &dst, 
+                               RFs& fileSystem, 
+                               TInt uid, 
+                               const TDesC &activityName);
+
+    static HBufC8* Md5HexDigestL(const TDes8 &string);
+
+    };
+
+#endif // AFSTORAGESYNCTASK_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/activityfw/activitydatabase/hsactivitydbserver/inc/aftask.h	Wed Jun 23 18:33:40 2010 +0300
@@ -0,0 +1,43 @@
+/*
+* 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:
+*
+*/
+#ifndef AFTASK_H
+#define AFTASK_H
+
+#include <e32base.h>
+
+class CAfTask: public CBase
+{
+public:
+    /**
+     * Return task data 
+     */
+    virtual const TDesC8& Data() const =0;
+    
+    /**
+     * Notify instance about incoming broadcast message.
+     * @param msg - broadcast message
+     */
+    virtual void BroadcastReceivedL(const RMessage2& msg) =0;
+    
+    /**
+     * Returns ETrue if task is related with session argument
+     */
+    virtual TBool IsSessionTask(const CSession2* session) =0;
+};
+
+#endif  //AFTASK_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/activityfw/activitydatabase/hsactivitydbserver/inc/aftaskstorage.h	Wed Jun 23 18:33:40 2010 +0300
@@ -0,0 +1,48 @@
+/*
+* 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:
+*
+*/
+#ifndef AFTASKSTORAGE_H
+#define AFTASKSTORAGE_H
+#include <e32base.h>
+class CAfTask;
+class MAfTaskStorage
+{
+public:
+    /**
+     * Register new task instance in storage. Ownership is transfered to storage.
+     * @param task - instance that need to be registered
+     */
+    virtual void PushL(CAfTask * task)=0;
+    
+    /**
+     * Unregister task instance from storage. Ownership is transfered to caller.
+     * @param task - instance that need to be unregistered
+     */
+    virtual void Pop(CAfTask *)=0;
+    
+    /**
+     * List of registered tasks
+     */
+    virtual const RPointerArray<CAfTask>& StorageData() const =0;
+
+    /**
+     * Removes not valid task
+     */
+    virtual void RemoveNotValidTasks(const CSession2* session) =0;
+};
+
+#endif  //AFTASKSTORAGE_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/activityfw/activitydatabase/hsactivitydbserver/inc/afthumbnailtask.h	Wed Jun 23 18:33:40 2010 +0300
@@ -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:
+*
+*/
+#ifndef AFTHUMBNAILTASK_H
+#define AFTHUMBNAILTASK_H
+
+#ifndef __E32SVR_H__
+#define __E32SVR_H__
+#endif
+
+#include <e32std.h>
+#include <e32base.h>
+#include <f32file.h>
+
+#include "aftask.h"
+#include "aftaskstorage.h"
+#include "tsgraphicfilescalinghandler.h"
+
+class CFbsBitmap;
+
+class CAfThumbnailTask : public CAfTask,
+                         public MImageReadyCallBack
+{
+public:
+    ~CAfThumbnailTask();
+
+    static void ExecuteLD(MAfTaskStorage& taskStorage,
+                          const RMessage2& message);
+
+private:
+    CAfThumbnailTask(MAfTaskStorage& storage, const RMessage2 msg);
+
+    void ConstructL();
+
+    void ImageReadyCallBack(TInt error, const CFbsBitmap *bitmap );
+
+    const TDesC8& Data()const;
+
+    void BroadcastReceivedL(const RMessage2& );
+
+    TBool IsSessionTask(const CSession2* session);
+
+private:
+    MAfTaskStorage& mStorage; 
+    const RMessage2 mMsg;
+    CBase* mService;
+};
+
+#endif // AFTHUMBNAILTASK_H
--- a/activityfw/activitydatabase/hsactivitydbserver/src/activitybroadcasttask.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-#include "activitybroadcasttask.h"
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void ActivityBroadcastTask::ExecuteL(MActivityTaskStorage& storage, 
-                                     const RMessage2& msg)
-{
-    const RPointerArray<CActivityTask> &tasks(storage.StorageData());
-    for (TInt iter(tasks.Count() - 1); iter >= 0 ; --iter ) {
-        (tasks[iter])->BroadcastReceivedL(msg);
-    }
-    if(EFalse == msg.IsNull()) {
-        msg.Complete(KErrNone);
-    }
-}
--- a/activityfw/activitydatabase/hsactivitydbserver/src/activitydataprovidertask.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,54 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-#include "activitydataprovidertask.h"
-#include "activitycmd.h"
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void ActivityDataProviderTask::ExecuteL(MActivityTaskStorage& storage, 
-                                       const RMessage2& msg)
-{
-    TPckgBuf<void*> requestId;
-    CActivityTask* taskPtr(0);
-    msg.Read(KRequestIdOffset, requestId);
-    
-    for (TInt iter(0);iter <storage.StorageData().Count();++iter) {
-        taskPtr = storage.StorageData()[iter];
-        if (taskPtr == requestId()) {//compare requested task address with storage objects
-            ProvideDataL(msg, *taskPtr);
-            storage.Pop(taskPtr);
-            delete taskPtr;
-            return;
-        }
-    }
-    User::Leave(KErrNotFound);
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void ActivityDataProviderTask::ProvideDataL(const RMessage2& msg, 
-                                            const CActivityTask& src)
-{
-    if (EFalse ==msg.IsNull()) {
-        msg.WriteL(KResponseDataOffset, src.Data());
-        msg.Complete(KErrNone);
-    }
-}
--- a/activityfw/activitydatabase/hsactivitydbserver/src/activityobservertask.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,136 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-#include "activityobservertask.h"
-#include "activitycmd.h"
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-CActivityObserverTask::CActivityObserverTask(MActivityTaskStorage& globalStorage, 
-                                             MActivityTaskStorage& localStorage, 
-                                             const RMessage2& msg)
-:
-    mGlobalStorage(globalStorage),
-    mLocalStorage(localStorage),
-    mMsg(msg)
-{
-    // No implementation required
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-CActivityObserverTask::~CActivityObserverTask()
-{
-    mData.Close();
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CActivityObserverTask::ExecuteLD(MActivityTaskStorage& globalStorage, 
-                                      MActivityTaskStorage& localStorage, 
-                                      const RMessage2& msg)
-{
-    CActivityObserverTask *self = new(ELeave)CActivityObserverTask(globalStorage, 
-                                                                   localStorage, 
-                                                                   msg);
-    CleanupStack::PushL(self);
-    globalStorage.PushL(self);
-    CleanupStack::Pop(self);
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-const TDesC8& CActivityObserverTask::Data() const
-{
-    return mData;
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CActivityObserverTask::BroadcastReceivedL(const RMessage2& msg)
-{
-    if(EFalse != mMsg.IsNull()) {
-        mGlobalStorage.Pop(this);//
-        mLocalStorage.Pop(this);
-        delete this;
-    } else if (WaitActivity == mMsg.Function() &&
-               LaunchActivity == msg.Function()) {
-               TPckgBuf<TInt> observerdId;
-               mMsg.ReadL(KRequestAppIdOffset, observerdId);
-
-        TPckgBuf<TInt> requestedId;
-        msg.ReadL(KRequestAppIdOffset, requestedId);
-        if (observerdId() == requestedId()) {
-            if (msg.GetDesLength(KRequestActOffset) > mData.MaxLength()) {
-                mData.ReAllocL(msg.GetDesLength(1));
-            }
-            msg.ReadL(KRequestActOffset, mData, 0);
-            WriteResponseL();
-            mLocalStorage.PushL(this);
-            mGlobalStorage.Pop(this);
-            mMsg.Complete(KErrNone);
-        }
-    } else if (WaitActivity == mMsg.Function() &&
-               CancelWait == msg.Function() &&
-               mMsg.Session() == msg.Session()) {
-        mGlobalStorage.Pop(this);
-        mMsg.Complete(KErrCancel);
-        delete this;
-    } else if (NotifyChange == mMsg.Function() &&
-               CancelNotify == msg.Function() &&
-               mMsg.Session() == msg.Session()) {
-        mGlobalStorage.Pop(this);
-        mMsg.Complete(KErrCancel);
-        delete this;
-    } else if(NotifyChange == mMsg.Function() &&
-              (AddActivity == msg.Function() ||
-               UpdateActivity == msg.Function() ||
-               RemoveActivity == msg.Function() ||
-               RemoveApplicationActivities == msg.Function())){
-        mMsg.Complete(KErrNone);
-        mGlobalStorage.Pop(this);
-        delete this;
-    }
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CActivityObserverTask::WriteResponseL()
-{
-    mMsg.WriteL(KResponseDataSizeOffset, TPckgBuf<TInt>(mData.Length()));//write data size
-    mMsg.WriteL(KResponseIdOffset, TPckgBuf<CBase*>(this));//task identyfier
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-TBool CActivityObserverTask::IsSessionTask(const CSession2* session)
-{
-	return mMsg.Session() == session ? ETrue : EFalse;
-}
--- a/activityfw/activitydatabase/hsactivitydbserver/src/activityserver.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,130 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-#include "activityserver.h"
-#include "activitysession.h"
-#include "activitystorage.h"
-#include "activitytask.h"
-
-#include <fbs.h>
-
-_LIT( KActivityServerName, "hsactivitydbserver" );
-_LIT(KObserverAlreadyExists, "Observer task exists");
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-CActivityServer::CActivityServer()
-:
-CServer2( EPriorityStandard )
-{
-    // No implementation required
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-CActivityServer::~CActivityServer()
-{
-    delete mStorage;
-    mFsSession.Close();
-    mObservers.ResetAndDestroy();
-    RFbsSession::Disconnect();
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-CActivityServer* CActivityServer::NewLC()
-{
-    CActivityServer* self = new (ELeave) CActivityServer();
-    CleanupStack::PushL(self);
-    self->ConstructL();
-    return self;
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CActivityServer::ConstructL()
-{
-    StartL(KActivityServerName);
-    User::LeaveIfError(mFsSession.Connect());
-    User::LeaveIfError(RFbsSession::Connect(mFsSession));
-    mStorage = CActivityStorage::NewL(mFsSession);
-    mObservers.Array();
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-CSession2* CActivityServer::NewSessionL(const TVersion &, const RMessage2&) const
-{
-    return CActivitySession::NewL(const_cast<CActivityServer*>(this)->mFsSession, 
-                                  *const_cast<CActivityServer*>(this), 
-                                  *mStorage);
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CActivityServer::PushL(CActivityTask * task)
-{
-    (KErrNotFound == mObservers.Find(task)) ?
-     mObservers.AppendL(task) :
-     User::Panic(KObserverAlreadyExists, KErrAlreadyExists);
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CActivityServer::Pop(CActivityTask *task)
-{
-    const TInt offset(mObservers.Find(task));
-    if (KErrNotFound != offset) {
-        mObservers.Remove(offset);
-    }
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-const RPointerArray<CActivityTask>& CActivityServer::StorageData() const
-{
-    return mObservers;
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CActivityServer::RemoveNotValidTasks(const CSession2* session)
-{
-	for (TInt i=mObservers.Count()-1; i>=0; --i) {
-		if( mObservers[i]->IsSessionTask(session) ) {
-			delete mObservers[i];
-			mObservers.Remove(i);
-		}
-	}
-}
--- a/activityfw/activitydatabase/hsactivitydbserver/src/activitysession.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,162 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-#include "activitysession.h"
-#include "activitytask.h"
-#include "activitycmd.h"
-
-#include "activitystorageasynctask.h"
-#include "activitystoragesynctask.h"
-#include "activityobservertask.h"
-#include "activitybroadcasttask.h"
-#include "activitydataprovidertask.h"
-#include "activitythumbnailtask.h"
-
-_LIT(KTaskAlreadyExists, "Activity task exists");
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-CActivitySession::CActivitySession(RFs& fileSession, 
-                                   MActivityTaskStorage& taskStorage, 
-                                   CActivityStorage& storage)
-:
-mFileSession(fileSession),
-mTasksStorage(taskStorage),
-mStorage(storage)
-{
-    // No implementation required
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-CActivitySession::~CActivitySession()
-{
-	RemoveNotValidTasks(this);
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-CActivitySession* CActivitySession::NewL(RFs& fileSession,
-                                         MActivityTaskStorage& taskStorage,
-                                         CActivityStorage& storage)
-{
-    CActivitySession* self = new (ELeave) CActivitySession(fileSession, 
-                                                           taskStorage, 
-                                                           storage);
-    CleanupStack::PushL(self);
-    self->ConstructL();
-    CleanupStack::Pop(self);
-    return self;
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CActivitySession::ConstructL()
-{
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CActivitySession::ServiceL(const RMessage2& message)
-{
-    switch (message.Function()) {
-    case AddActivity:
-    case UpdateActivity:
-    case RemoveActivity:
-    case RemoveApplicationActivities:
-        ActivityStorageSyncTask::ExecuteL(mTasksStorage, mStorage, message);
-        break;
-    
-    case Activities:
-    case ApplicationActivities:
-        CActivityStorageAsyncTask::ExecuteLD(*this, mStorage, message);
-        break;
-    
-    case WaitActivity:
-    case NotifyChange:
-        CActivityObserverTask::ExecuteLD(mTasksStorage, *this, message);
-        break;
-    case GetThumbnail:
-        CActivityThumbnailTask::ExecuteLD(mFileSession, *this, message);
-        break;
-    
-    case LaunchActivity:
-    case CancelWait:
-    case CancelNotify:
-        ActivityBroadcastTask::ExecuteL(mTasksStorage, message);
-        break;
-    
-    case GetData:
-        ActivityDataProviderTask::ExecuteL(*this,message);
-        break;
-    
-    default:
-        message.Complete(CServer2::EBadMessageNumber);
-        break;
-    }
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CActivitySession::PushL(CActivityTask * task)
-{
-    (KErrNotFound == mRunningTasks.Find(task)) ?
-     mRunningTasks.AppendL(task) :
-     User::Panic(KTaskAlreadyExists, KErrAlreadyExists);
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CActivitySession::Pop(CActivityTask *task)
-{
-    const TInt offset(mRunningTasks.Find(task));
-    if (KErrNotFound != offset) {
-        mRunningTasks.Remove(offset);
-    }
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-const RPointerArray<CActivityTask>& CActivitySession::StorageData() const
-{
-    return mRunningTasks;
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CActivitySession::RemoveNotValidTasks(const CSession2* session)
-{
-    mRunningTasks.ResetAndDestroy();
-    mTasksStorage.RemoveNotValidTasks(this);
-}
--- a/activityfw/activitydatabase/hsactivitydbserver/src/activitystorage.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,399 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-#include "activitystorage.h"
-#include "activityqueries.h"
-#include <bautils.h>
-#include <s32mem.h>
-
-_LIT(KDbName, "activity.db");
-_LIT(KDbDrive, "c:");
-const TInt KMaxPathLength = 256;
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-CActivityStorage::CActivityStorage(RFs& session)
-:
-mFsSession(session)
-{
-    // No implementation required
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-CActivityStorage::~CActivityStorage()
-{
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-CActivityStorage* CActivityStorage::NewL(RFs& session)
-{
-    CActivityStorage* self = new (ELeave) CActivityStorage(session);
-    CleanupStack::PushL(self);
-    self->ConstructL();
-    CleanupStack::Pop(); // self;
-    return self;
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CActivityStorage::ConstructL()
-{
-    RBuf path;
-    CleanupClosePushL( path );
-    path.CreateL(KMaxPathLength);
-    User::LeaveIfError(mFsSession.PrivatePath(path ));
-    path.Append(KDbName);
-    path.Insert(0, KDbDrive);
-    BaflUtils::EnsurePathExistsL(mFsSession, path);
-    BaflUtils::FileExists(mFsSession, path) ? OpenDbL(path) : CreateDbL(path);
-    CleanupStack::PopAndDestroy(&path);
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CActivityStorage::CreateDbL(const TDesC& databaseFile)
-{
-    mFileStore = CPermanentFileStore::ReplaceL(mFsSession, 
-                                               databaseFile, 
-                                               EFileRead|EFileWrite);
-    mFileStore->SetTypeL(mFileStore->Layout());// Set file store type
-    TStreamId id = mActDb.CreateL(mFileStore);// Create stream object
-    mFileStore->SetRootL(id);// Keep database id as root of store
-    mFileStore->CommitL();// Complete creation by commiting
-    CreateTableL();
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CActivityStorage::OpenDbL(const TDesC& databaseFile)
-{
-    mFileStore = CPermanentFileStore::OpenL(mFsSession, 
-                                            databaseFile, 
-                                            EFileRead|EFileWrite);
-    mFileStore->SetTypeL(mFileStore->Layout()); /* Set file store type*/
-    mActDb.OpenL(mFileStore,mFileStore->Root());
-    CDbTableNames* tables = mActDb.TableNamesL();
-    CleanupStack::PushL(tables);
-    if (0 == tables->Count()) {
-        CreateTableL();
-    }
-    CleanupStack::PopAndDestroy(tables);
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CActivityStorage::CreateTableL()
-{
-   // Add the columns to column set
-   CDbColSet* actColSet = CDbColSet::NewLC();
-   
-   TDbCol appName(KApplicationColumnName, EDbColInt64);// Using default length
-   appName.iAttributes = TDbCol::ENotNull;
-   actColSet->AddL(appName);
-   
-   TDbCol actName(KActivityColumnName, EDbColText8);// Using default length
-   actName.iAttributes = TDbCol::ENotNull;
-   actColSet->AddL(actName);
-   
-   actColSet->AddL(TDbCol(KDataColumnName, EDbColLongText8));// Stream Data
-   
-   // Add the columns to index definition
-   CDbKey* primaryKey = CDbKey::NewLC();
-   primaryKey->AddL(TDbKeyCol(KApplicationColumnName));
-   primaryKey->AddL(TDbKeyCol(KActivityColumnName));
-   primaryKey->MakePrimary();
-
-   // Create the table
-   /*User::LeaveIfError(mActDb.CreateTable(KActivityTableName, 
-                                         *actColSet, 
-                                         *primaryKey));*/
-   User::LeaveIfError(mActDb.CreateTable(KActivityTableName, 
-                                            *actColSet));
-   /*User::LeaveIfError(mActDb.CreateIndex(KActivityIndexName, 
-                                         KActivityTableName, 
-                                         *primaryKey));*/
-   CleanupStack::PopAndDestroy(primaryKey);
-   CleanupStack::PopAndDestroy(actColSet);
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CActivityStorage::AddActivityL(TInt appId, 
-                                    const TDesC8& actId, 
-                                    const TDesC8& data)
-{
-    //verify if row already exists
-    RDbView view;
-    CleanupClosePushL(view);
-    TRAPD( errNo, GetActivityForUpdateL(view, appId, actId));
-    if (KErrNone == errNo) {
-        User::Leave(KErrAlreadyExists);
-    }
-    CleanupStack::PopAndDestroy(&view);
-    
-    //write table
-    RDbTable table;
-    CleanupClosePushL(table);
-    User::LeaveIfError(table.Open(mActDb, KActivityTableName, table.EUpdatable));
-    CDbColSet *row = table.ColSetL();
-    CleanupStack::PushL(row);
-    
-    table.InsertL();
-    table.SetColL(row->ColNo(KApplicationColumnName), TInt64(appId));
-    table.SetColL(row->ColNo(KActivityColumnName), actId);
-    
-    //write blob data
-    RDbColWriteStream stream;
-    CleanupClosePushL(stream);
-    stream.OpenL(table, row->ColNo(KDataColumnName));
-    stream.WriteL(data);
-    CleanupStack::PopAndDestroy(&stream);
-    
-    table.PutL();
-    CleanupStack::PopAndDestroy(row);
-    CleanupStack::PopAndDestroy(&table);
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CActivityStorage::UpdateActivityL(TInt appId, 
-                                       const TDesC8& actId, 
-                                       const TDesC8& data)
-{
-    RDbView view;
-    CleanupClosePushL(view);
-    GetActivityForUpdateL(view, appId, actId);
-    view.UpdateL();
-    CDbColSet* colSet = view.ColSetL();
-    CleanupStack::PushL(colSet);
-    RDbColWriteStream writeStream;
-    CleanupClosePushL(writeStream);
-    writeStream.OpenL(view, colSet->ColNo(KDataColumnName));
-    writeStream.WriteL(data);
-    CleanupStack::PopAndDestroy(&writeStream);
-    view.PutL();
-    CleanupStack::PopAndDestroy(colSet);
-    CleanupStack::PopAndDestroy(&view);
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CActivityStorage::DeleteActivityL(TInt appId,const TDesC8& actId) 
-{
-    HBufC *query(DeleteRowLC(appId, actId));
-    User::LeaveIfError(mActDb.Execute(*query));
-    CleanupStack::PopAndDestroy(query);
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CActivityStorage::DeleteActivitiesL(TInt appId)
-{
-    HBufC *query(DeleteRowsLC(appId));
-    User::LeaveIfError(mActDb.Execute(*query));
-    CleanupStack::PopAndDestroy(query);
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CActivityStorage::ActivitiesL(RBuf8 &dst)
-{
-    ActivitiesL(dst, KSelectRows() );
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CActivityStorage::ActivitiesL(RBuf8 &dst,TInt appId)
-{
-    HBufC *query(SelectRowsLC(appId));
-    ActivitiesL(dst, *query);
-    CleanupStack::PopAndDestroy(query);
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-HBufC* CActivityStorage::SelectRowLC(TInt appId, const TDesC8& actId) const 
-{
-    return BuildQueryLC(KSelectRow(),appId, actId);
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-HBufC* CActivityStorage::SelectRowsLC(TInt appId) const
-{
-    return BuildQueryLC(KSelectAppRows(), appId, KNullDesC8);
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-HBufC* CActivityStorage::DeleteRowLC(TInt appId, const TDesC8& actId) const
-{
-    return BuildQueryLC(KDeleteRow(),appId, actId);
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-HBufC* CActivityStorage::DeleteRowsLC(TInt appId) const
-{
-    return BuildQueryLC(KDeleteRows(),appId, KNullDesC8);
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-HBufC* CActivityStorage::BuildQueryLC(const TDesC& format, 
-                                      TInt appId, 
-                                      const TDesC8& actId) const
-{
-    TBuf<16> appName;
-    appName.AppendNum(appId);
-    RBuf actName;
-    CleanupClosePushL(actName);
-    actName.CreateL(actId.Length());
-    actName.Copy(actId);
-    HBufC* query = HBufC::NewL(format.Length() + 
-                               appName.Length() + 
-                               actName.Length() );
-    query->Des().AppendFormat(format, &appName, &actName);
-    CleanupStack::PopAndDestroy(&actName);
-    CleanupStack::PushL(query);
-    return query;
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-TInt CActivityStorage::DataSizeL(RDbRowSet& data)const
-{
-    TInt dataSize(sizeof(TInt));
-    CDbColSet* row = data.ColSetL();
-    CleanupStack::PushL(row);
-    const TInt dataOffset(row->ColNo(KDataColumnName));
-    for (data.FirstL(); data.AtRow(); data.NextL()) {
-        data.GetL();
-        dataSize += (sizeof(TInt) + 
-                     data.ColLength(dataOffset));
-    }
-    CleanupStack::PopAndDestroy(row);
-    return dataSize;
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CActivityStorage::ExternalizeL(TDes8& dst, RDbRowSet& src)const
-{
-    RDesWriteStream dstStream(dst);
-    CleanupClosePushL(dstStream);
-    dstStream.WriteInt32L(src.CountL());
-    RBuf8 data;
-    CleanupClosePushL(data);
-    CDbColSet* row = src.ColSetL();
-    CleanupStack::PushL(row);
-    const TInt dataOffset(row->ColNo(KDataColumnName));
-    RDbColReadStream srcStream;
-    CleanupClosePushL(srcStream);
-    for (src.FirstL(); src.AtRow(); src.NextL()) {
-        src.GetL();
-        if (data.MaxLength() < src.ColLength(dataOffset)) {
-            data.ReAllocL(src.ColLength(dataOffset));
-        }
-        data.SetLength(0);
-        srcStream.OpenL(src,dataOffset);
-        srcStream.ReadL(data, src.ColLength(dataOffset));
-        srcStream.Close();
-        dstStream.WriteInt32L(src.ColLength(dataOffset));
-        if (0 < src.ColLength(dataOffset)) {
-            dstStream.WriteL(data, src.ColLength(dataOffset));
-        }
-    }
-    CleanupStack::PopAndDestroy(&srcStream);
-    CleanupStack::PopAndDestroy(row);
-    CleanupStack::PopAndDestroy(&data);
-    CleanupStack::PopAndDestroy(&dstStream);
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CActivityStorage::ActivitiesL(RBuf8& dst, const TDesC& query)
-{
-    RDbView view;// Create a view on the database
-    CleanupClosePushL(view);
-    User::LeaveIfError(view.Prepare(mActDb, TDbQuery(query), view.EReadOnly));
-    User::LeaveIfError(view.EvaluateAll());
-    const TInt dataSize(DataSizeL(view));
-    if(dst.MaxLength() < dataSize) {
-        dst.ReAllocL(dataSize);
-    }
-    ExternalizeL(dst, view);
-    CleanupStack::PopAndDestroy(&view);
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CActivityStorage::GetActivityForUpdateL(RDbView& view, TInt appId, const TDesC8& actId)
-{
-    HBufC* query(SelectRowLC(appId, actId));
-    User::LeaveIfError(view.Prepare(mActDb, TDbQuery(*query), view.EUpdatable));
-    CleanupStack::PopAndDestroy(query);
-    User::LeaveIfError(view.EvaluateAll());
-    if (!view.FirstL()) {
-        User::Leave(KErrNotFound);
-    }
-}
--- a/activityfw/activitydatabase/hsactivitydbserver/src/activitystorageasynctask.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,139 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-#include "activitystorageasynctask.h"
-#include "activitycmd.h"
-
-_LIT(KUnsupportedStorageAsyncTask, "Unsupported async storage task");
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-CActivityStorageAsyncTask::CActivityStorageAsyncTask()
-{
-    // No implementation required
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-CActivityStorageAsyncTask::~CActivityStorageAsyncTask()
-{
-    mData.Close();
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CActivityStorageAsyncTask::ExecuteLD(MActivityTaskStorage& taskStorage, 
-                                          CActivityStorage& dataStorage, 
-                                          const RMessage2& msg)
-{
-    CActivityStorageAsyncTask* self = new (ELeave) CActivityStorageAsyncTask();
-    CleanupStack::PushL(self);
-    self->ExecuteL(dataStorage, msg);
-    taskStorage.PushL(self);
-    CleanupStack::Pop(self);
-    msg.Complete(KErrNone);
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-const TDesC8& CActivityStorageAsyncTask::CActivityStorageAsyncTask::Data() const
-{
-    return mData;
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CActivityStorageAsyncTask::BroadcastReceivedL(const RMessage2& )
-{
-    // No implementation required
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CActivityStorageAsyncTask::ExecuteL(CActivityStorage& dataStorage, 
-                                         const RMessage2& msg)
-{
-    switch (msg.Function()) {
-    case Activities:
-        AllActivitiesL(dataStorage, msg);
-        break;
-    case ApplicationActivities:
-        ApplicationActivitiesL(dataStorage, msg);
-        break;
-    default:
-        //this code shouldn't be called. fatal error: means wrong session implementation 
-        User::Panic(KUnsupportedStorageAsyncTask, KErrGeneral);
-    };
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CActivityStorageAsyncTask::AllActivitiesL(CActivityStorage& dataStorage, 
-                                               const RMessage2& msg)
-{
-    dataStorage.ActivitiesL(mData);
-    WriteResponseL(msg);
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CActivityStorageAsyncTask::ApplicationActivitiesL(CActivityStorage& dataStorage, 
-                                                       const RMessage2& msg)
-{
-    TPckgBuf<TInt> appId;
-    msg.ReadL(KRequestAppIdOffset, appId);
-    dataStorage.ActivitiesL(mData, appId());
-    WriteResponseL(msg);
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CActivityStorageAsyncTask::WriteResponseL(const RMessage2& msg)
-{
-    if (EFalse == msg.IsNull()) {
-        msg.WriteL(KResponseDataSizeOffset, 
-                   TPckgBuf<TInt>(mData.Length()));//write data size
-        msg.WriteL(KResponseIdOffset, 
-                   TPckgBuf<CBase*>(this));//task identyfier
-    }
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-TBool CActivityStorageAsyncTask::IsSessionTask(const CSession2* /*session*/)
-{
-	return EFalse;
-}
--- a/activityfw/activitydatabase/hsactivitydbserver/src/activitystoragesynctask.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,142 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-#include "activitystoragesynctask.h"
-#include "activitycmd.h"
-
-_LIT(KUnsupportedStorageSyncTask, "Unsupported sync storage task");
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void ActivityStorageSyncTask::ExecuteL(MActivityTaskStorage& observers,
-                                       CActivityStorage& dataStorage, 
-                                       const RMessage2& msg)
-{
-    switch (msg.Function()) {
-    case AddActivity: 
-        AddActivityL(dataStorage, msg);
-        break;
-    case UpdateActivity:
-        UpdateActivityL(dataStorage, msg);
-        break;
-    case RemoveActivity:
-        DeleteActivityL(dataStorage, msg);
-        break;
-    case RemoveApplicationActivities:
-        DeleteApplicationActivitiesL(dataStorage, msg);
-        break;
-    default:
-        //this code shouldn't be called. fatal error: means wrong session implementation 
-        User::Panic(KUnsupportedStorageSyncTask, KErrGeneral);
-    };
-    msg.Complete(KErrNone);
-    NotifyChangeL(observers, msg);
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void ActivityStorageSyncTask::AddActivityL(CActivityStorage& dataStorage, const RMessage2& msg)
-{
-    TPckgBuf<TInt> appId;
-    msg.ReadL(KRequestAppIdOffset, appId);
-    
-    RBuf8 actId;
-    CleanupClosePushL(actId);
-    actId.CreateL(msg.GetDesLengthL(KRequestActOffset));
-    msg.ReadL(KRequestActOffset, actId, 0);
-    
-    RBuf8 data;
-    CleanupClosePushL(data);
-    data.CreateL(msg.GetDesLengthL(KRequestData));
-    msg.ReadL(KRequestData, data, 0);
-    
-    dataStorage.AddActivityL(appId(), actId, data);
-    
-    CleanupStack::PopAndDestroy(&data);
-    CleanupStack::PopAndDestroy(&actId);
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void ActivityStorageSyncTask::UpdateActivityL(CActivityStorage& dataStorage, const RMessage2& msg)
-{
-    TPckgBuf<TInt> appId;
-    msg.ReadL(KRequestAppIdOffset, appId);
-    
-    RBuf8 actId;
-    CleanupClosePushL(actId);
-    actId.CreateL(msg.GetDesLengthL(KRequestActOffset));
-    msg.ReadL(KRequestActOffset, actId, 0);
-    
-    RBuf8 data;
-    CleanupClosePushL(data);
-    data.CreateL(msg.GetDesLengthL(KRequestData));
-    msg.ReadL(KRequestData, data, 0);
-    
-    dataStorage.UpdateActivityL(appId(), actId, data);
-    
-    CleanupStack::PopAndDestroy(&data);
-    CleanupStack::PopAndDestroy(&actId);
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void ActivityStorageSyncTask::DeleteActivityL(CActivityStorage& dataStorage, const RMessage2& msg)
-{
-    TPckgBuf<TInt> appId;
-    msg.ReadL(KRequestAppIdOffset, appId);
-    
-    RBuf8 actId;
-    CleanupClosePushL(actId);
-    actId.CreateL(msg.GetDesLengthL(KRequestActOffset));
-    msg.ReadL(KRequestActOffset, actId, 0);
-    
-    dataStorage.DeleteActivityL(appId(), actId);
-    
-    CleanupStack::PopAndDestroy(&actId);
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void ActivityStorageSyncTask::DeleteApplicationActivitiesL(CActivityStorage& dataStorage, const RMessage2& msg)
-{
-    TPckgBuf<TInt> appId;
-    msg.ReadL(KRequestAppIdOffset, appId);
-    dataStorage.DeleteActivitiesL(appId());
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void ActivityStorageSyncTask::NotifyChangeL(MActivityTaskStorage& observers,
-                          const RMessage2& msg)
-{
-    const RPointerArray<CActivityTask> &table(observers.StorageData());
-    for (TInt iter(table.Count() - 1); 0 <= iter; --iter) {
-        table[iter]->BroadcastReceivedL(msg);
-    }
-}
--- a/activityfw/activitydatabase/hsactivitydbserver/src/activitythumbnailtask.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,134 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-
-#include "activitythumbnailtask.h"
-#include "activitycmd.h"
-
-#include <fbs.h>
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-CActivityThumbnailTask::CActivityThumbnailTask(MActivityTaskStorage& storage, 
-                                               const RMessage2 msg)
-:
-    mStorage(storage), 
-    mMsg(msg)
-{
-    // No implementation required
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-CActivityThumbnailTask::~CActivityThumbnailTask()
-{
-    delete mService;
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CActivityThumbnailTask::ExecuteLD(RFs& session,
-                                       MActivityTaskStorage& taskStorage,
-                                       const RMessage2& message)
-{
-    CActivityThumbnailTask *self = new (ELeave)CActivityThumbnailTask(taskStorage, 
-                                                                      message);
-    CleanupStack::PushL(self);
-    self->ConstructL(session);
-    taskStorage.PushL(self);
-    CleanupStack::Pop(self);
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CActivityThumbnailTask::ConstructL(RFs& session)
-{
-    TPckgBuf<int> width(0), height(0);
-    RBuf path;
-    RBuf8 mime;
-    CleanupClosePushL(path);
-    CleanupClosePushL(mime);
-    mMsg.ReadL(0, width);
-    mMsg.ReadL(1, height);
-    path.CreateL(mMsg.GetDesLengthL(2));
-    mMsg.ReadL(2, path);
-    mime.CreateL(mMsg.GetDesLengthL(3));
-    mMsg.ReadL(3, mime);
-
-    mService = CTsGraphicFileScalingHandler::NewL(*this, 
-                                    session, 
-                                    path, 
-                                    mime, 
-                                    TSize(width(), height()), 
-                                    CTsGraphicFileScalingHandler::EKeepAspectRatio);
-    
-    CleanupStack::PopAndDestroy(&mime);
-    CleanupStack::PopAndDestroy(&path);
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CActivityThumbnailTask::ImageReadyCallBack(TInt error,const CFbsBitmap *bitmap)
-{
-    if (EFalse == mMsg.IsNull() &&
-        KErrNone == error) {
-        mMsg.Write(0, TPckgBuf<int>(const_cast<CFbsBitmap*>(bitmap)->Handle()));
-        mMsg.Write(1, TPckgBuf<void *>(this));
-        mMsg.Complete(error);
-    } else {
-        if (EFalse == mMsg.IsNull()) {
-         mMsg.Complete(error);
-        }
-        mStorage.Pop(this);
-        delete this;
-    }
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-const TDesC8& CActivityThumbnailTask::Data() const
-{
-    return KNullDesC8();
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CActivityThumbnailTask::BroadcastReceivedL(const RMessage2&)
-{
-}
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-TBool CActivityThumbnailTask::IsSessionTask(const CSession2* session)
-{
-	return mMsg.Session() == session ? ETrue : EFalse;
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/activityfw/activitydatabase/hsactivitydbserver/src/afbroadcasttask.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#include "afbroadcasttask.h"
+
+// -----------------------------------------------------------------------------
+/**
+ * Handle broadccast message request
+ * @param storage - observer tasks storage
+ * @param msg - request message that will be provided to observers
+ */
+void AfBroadcastTask::ExecuteL(MAfTaskStorage& storage, 
+                               const RMessage2& msg)
+{
+    const RPointerArray<CAfTask> &tasks(storage.StorageData());
+    for (TInt iter(tasks.Count() - 1); iter >= 0 ; --iter ) {
+        if(EFalse == msg.IsNull()) {
+            (tasks[iter])->BroadcastReceivedL(msg);
+        }
+    }
+    if(EFalse == msg.IsNull()) {
+        msg.Complete(KErrNone);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/activityfw/activitydatabase/hsactivitydbserver/src/afdataprovidertask.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -0,0 +1,58 @@
+/*
+* 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:
+*
+*/
+#include "afdataprovidertask.h"
+#include "activitycmd.h"
+
+// -----------------------------------------------------------------------------
+/**
+ * Handle data request. Deliver data stored in other task.
+ * @param storage - data tasks storage
+ * @param msg - request message
+ */
+void AfDataProviderTask::ExecuteL(MAfTaskStorage& storage, 
+                                  const RMessage2& msg)
+{
+    TPckgBuf<void*> requestId;
+    CAfTask* taskPtr(0);
+    msg.Read(KRequestIdOffset, requestId);
+    
+    for (TInt iter(0);iter <storage.StorageData().Count();++iter) {
+        taskPtr = storage.StorageData()[iter];
+        if (taskPtr == requestId()) {//compare requested task address with storage objects
+            ProvideDataL(msg, *taskPtr);
+            storage.Pop(taskPtr);
+            delete taskPtr;
+            return;
+        }
+    }
+    User::Leave(KErrNotFound);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Write response data to request message
+ * @param msg - destination message
+ * @param src - data source
+ */
+void AfDataProviderTask::ProvideDataL(const RMessage2& msg, 
+                                      const CAfTask& src)
+{
+    if (EFalse ==msg.IsNull()) {
+        msg.WriteL(KResponseDataOffset, src.Data());
+        msg.Complete(KErrNone);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/activityfw/activitydatabase/hsactivitydbserver/src/afobservertask.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -0,0 +1,145 @@
+/*
+* 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:
+*
+*/
+#include "afobservertask.h"
+#include "activitycmd.h"
+
+// -----------------------------------------------------------------------------
+/**
+ * Constructor for performing 1st stage construction
+ * @param globalStorage - global observers storage
+ * @param localStorage - local observers storage
+ * @param msg - request message
+ */
+CAfObserverTask::CAfObserverTask(MAfTaskStorage& globalStorage, 
+                                 MAfTaskStorage& localStorage, 
+                                 const RMessage2& msg)
+:
+    mGlobalStorage(globalStorage),
+    mLocalStorage(localStorage),
+    mMsg(msg)
+{
+    // No implementation required
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Destructor.
+ */
+CAfObserverTask::~CAfObserverTask()
+{
+    mData.Close();
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Handle observer request. 
+ * @param globalStorage - global observers storage
+ * @param localStorage - local observers storage
+ * @param msg - request message
+ */
+
+void CAfObserverTask::ExecuteLD(MAfTaskStorage& globalStorage, 
+                                MAfTaskStorage& localStorage, 
+                                const RMessage2& msg)
+{
+    CAfObserverTask *self = new(ELeave)CAfObserverTask(globalStorage, 
+                                                       localStorage, 
+                                                       msg);
+    CleanupStack::PushL(self);
+    globalStorage.PushL(self);
+    CleanupStack::Pop(self);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Interface implementation
+ * @see CActivityTask::Data()
+ */
+const TDesC8& CAfObserverTask::Data() const
+{
+    return mData;
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Interface implementation
+ * @see CActivityTask::BroadcastReceivedL(const RMessage2&)
+ */
+void CAfObserverTask::BroadcastReceivedL(const RMessage2& msg)
+{
+    if(EFalse != mMsg.IsNull()) {
+        mGlobalStorage.Pop(this);//
+        mLocalStorage.Pop(this);
+        delete this;
+    } else if (WaitActivity == mMsg.Function() &&
+               LaunchActivity == msg.Function()) {
+               TPckgBuf<TInt> observerdId;
+               mMsg.ReadL(KRequestAppIdOffset, observerdId);
+
+        TPckgBuf<TInt> requestedId;
+        msg.ReadL(KRequestAppIdOffset, requestedId);
+        if (observerdId() == requestedId()) {
+            if (msg.GetDesLength(KRequestActOffset) > mData.MaxLength()) {
+                mData.ReAllocL(msg.GetDesLength(1));
+            }
+            msg.ReadL(KRequestActOffset, mData, 0);
+            WriteResponseL();
+            mLocalStorage.PushL(this);
+            mGlobalStorage.Pop(this);
+            mMsg.Complete(KErrNone);
+        }
+    } else if (WaitActivity == mMsg.Function() &&
+               CancelWait == msg.Function() &&
+               mMsg.Session() == msg.Session()) {
+        mGlobalStorage.Pop(this);
+        mMsg.Complete(KErrCancel);
+        delete this;
+    } else if (NotifyChange == mMsg.Function() &&
+               CancelNotify == msg.Function() &&
+               mMsg.Session() == msg.Session()) {
+        mGlobalStorage.Pop(this);
+        mMsg.Complete(KErrCancel);
+        delete this;
+    } else if(NotifyChange == mMsg.Function() &&
+              (AddActivity == msg.Function() ||
+               UpdateActivity == msg.Function() ||
+               RemoveActivity == msg.Function() ||
+               RemoveApplicationActivities == msg.Function())){
+        mMsg.Complete(KErrNone);
+        mGlobalStorage.Pop(this);
+        delete this;
+    }
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Write response data to requested message 
+ */
+void CAfObserverTask::WriteResponseL()
+{
+    mMsg.WriteL(KResponseDataSizeOffset, TPckgBuf<TInt>(mData.Length()));//write data size
+    mMsg.WriteL(KResponseIdOffset, TPckgBuf<CBase*>(this));//task identyfier
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Returns ETrue if task is related with session argument
+ */
+TBool CAfObserverTask::IsSessionTask(const CSession2* session)
+{
+    return mMsg.Session() == session ? ETrue : EFalse;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/activityfw/activitydatabase/hsactivitydbserver/src/afserver.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -0,0 +1,134 @@
+/*
+* 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:
+*
+*/
+#include <fbs.h>
+
+#include "afserver.h"
+#include "afsession.h"
+#include "afstorage.h"
+#include "aftask.h"
+
+_LIT( KActivityServerName, "hsactivitydbserver" );
+_LIT(KObserverAlreadyExists, "Observer task exists");
+
+// -----------------------------------------------------------------------------
+/**
+ * Constructor for performing 1st stage construction
+ */
+CAfServer::CAfServer()
+:
+CServer2( EPriorityStandard )
+{
+    // No implementation required
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Destructor.
+ */
+CAfServer::~CAfServer()
+{
+    delete mStorage;
+    mFsSession.Close();
+    mObservers.ResetAndDestroy();
+    RFbsSession::Disconnect();
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Two-phased constructor.
+ */
+CAfServer* CAfServer::NewLC()
+{
+    CAfServer* self = new (ELeave) CAfServer();
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Default constructor for performing 2nd stage construction
+ */
+void CAfServer::ConstructL()
+{
+    StartL(KActivityServerName);
+    User::LeaveIfError(mFsSession.Connect());
+    User::LeaveIfError(RFbsSession::Connect(mFsSession));
+    mStorage = CAfStorage::NewL(mFsSession);
+    mObservers.Array();
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Interface implementation
+ * @see CServer2::NewSessionL(const TVersion&, const RMessage2&)
+ */
+CSession2* CAfServer::NewSessionL(const TVersion &, const RMessage2&) const
+{
+    return CAfSession::NewL(const_cast<CAfServer*>(this)->mFsSession, 
+                            *const_cast<CAfServer*>(this), 
+                            *mStorage);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Interface implementation
+ * @see MAfTaskStorage::PushL(CAfTask *)
+ */
+void CAfServer::PushL(CAfTask * task)
+{
+    (KErrNotFound == mObservers.Find(task)) ?
+     mObservers.AppendL(task) :
+     User::Panic(KObserverAlreadyExists, KErrAlreadyExists);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Interface implementation
+ * @see MAfTaskStorage::Pop(CActivityTask *)
+ */
+void CAfServer::Pop(CAfTask *task)
+{
+    const TInt offset(mObservers.Find(task));
+    if (KErrNotFound != offset) {
+        mObservers.Remove(offset);
+    }
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Interface implementation
+ * @see MAfTaskStorage::StorageData()
+ */
+const RPointerArray<CAfTask>& CAfServer::StorageData() const
+{
+    return mObservers;
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Removes not valid task
+ */
+void CAfServer::RemoveNotValidTasks(const CSession2* session)
+{
+    for (TInt i=mObservers.Count()-1; i>=0; --i) {
+        if( mObservers[i]->IsSessionTask(session) ) {
+            delete mObservers[i];
+            mObservers.Remove(i);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/activityfw/activitydatabase/hsactivitydbserver/src/afsession.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -0,0 +1,177 @@
+/*
+* 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:
+*
+*/
+#include "afsession.h"
+#include "aftask.h"
+#include "activitycmd.h"
+
+#include "afstorageasynctask.h"
+#include "afstoragesynctask.h"
+#include "afobservertask.h"
+#include "afbroadcasttask.h"
+#include "afdataprovidertask.h"
+#include "afthumbnailtask.h"
+
+_LIT(KTaskAlreadyExists, "Activity task exists");
+
+// -----------------------------------------------------------------------------
+/**
+ * Constructor for performing 1st stage construction
+ * @param fileSession - initialized file system session
+ * @param taskStorage - global observers storage
+ * @param storage - data storage
+ */
+
+CAfSession::CAfSession(RFs& fileSession, 
+                       MAfTaskStorage& taskStorage, 
+                       CAfStorage& storage)
+:
+mFileSession(fileSession),
+mTasksStorage(taskStorage),
+mStorage(storage)
+{
+    // No implementation required
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Destructor.
+ */
+CAfSession::~CAfSession()
+{
+    RemoveNotValidTasks(this);
+    mTasksStorage.RemoveNotValidTasks(this);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Two-phased constructor.
+ * @param fileSession - initialized file system session
+ * @param taskStorage - global observers storage
+ * @param storage - data storage
+ */
+CAfSession* CAfSession::NewL(RFs& fileSession,
+                             MAfTaskStorage& taskStorage,
+                             CAfStorage& storage)
+{
+    CAfSession* self = new (ELeave) CAfSession(fileSession, 
+                                               taskStorage, 
+                                               storage);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * EPOC default constructor for performing 2nd stage construction
+ */
+void CAfSession::ConstructL()
+{
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Implements interface
+ * @see void CSession2::ServiceL(const RMessage2&)
+ */
+void CAfSession::ServiceL(const RMessage2& message)
+{
+    switch (message.Function()) {
+    case AddActivity:
+    case UpdateActivity:
+    case RemoveActivity:
+    case RemoveApplicationActivities:
+        AfStorageSyncTask::ExecuteL(mTasksStorage, mStorage, message);
+        break;
+    
+    case ApplicationActivity:
+    case Activities:
+    case ApplicationActivities:
+        CAfStorageAsyncTask::ExecuteLD(*this, mStorage, message);
+        break;
+    
+    case WaitActivity:
+    case NotifyChange:
+        CAfObserverTask::ExecuteLD(mTasksStorage, *this, message);
+        break;
+    
+    case GetThumbnail:
+        CAfThumbnailTask::ExecuteLD(*this, message);
+        break;
+    
+    case LaunchActivity:
+    case CancelWait:
+    case CancelNotify:
+        AfBroadcastTask::ExecuteL(mTasksStorage, message);
+        break;
+    
+    case GetData:
+        AfDataProviderTask::ExecuteL(*this,message);
+        break;
+    
+    default:
+        message.Complete(CServer2::EBadMessageNumber);
+        break;
+    }
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Interface implementation
+ * @see MAfTaskStorage::PushL(CAfTask *)
+ */
+void CAfSession::PushL(CAfTask * task)
+{
+    (KErrNotFound == mRunningTasks.Find(task)) ?
+     mRunningTasks.AppendL(task) :
+     User::Panic(KTaskAlreadyExists, KErrAlreadyExists);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Interface implementation
+ * @see MAfTaskStorage::Pop(CAfTask *)
+ */
+void CAfSession::Pop(CAfTask *task)
+{
+    const TInt offset(mRunningTasks.Find(task));
+    if (KErrNotFound != offset) {
+        mRunningTasks.Remove(offset);
+    }
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Interface implementation
+ * @see MAfTaskStorage::StorageData()
+ */
+const RPointerArray<CAfTask>& CAfSession::StorageData() const
+{
+    return mRunningTasks;
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Removes not valid task
+ */
+void CAfSession::RemoveNotValidTasks(const CSession2* session)
+{
+    if (session == this) {
+        mRunningTasks.ResetAndDestroy();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/activityfw/activitydatabase/hsactivitydbserver/src/afstorage.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -0,0 +1,505 @@
+/*
+* 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:
+*
+*/
+#include "afstorage.h"
+#include "afqueries.h"
+#include "afentry.h"
+#include <bautils.h>
+#include <s32mem.h>
+
+_LIT(KDbName, "activity.db");
+_LIT(KDbDrive, "c:");
+const TInt KMaxPathLength = 256;
+
+// -----------------------------------------------------------------------------
+LOCAL_C void CleanupResetAndDestroy(TAny*  item)
+{
+    RPointerArray<CAfEntry> *array = static_cast< RPointerArray<CAfEntry>* >(item);
+    array->ResetAndDestroy();
+    array->Close();
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Constructor for performing 1st stage construction
+ * @param session - initialized session to file system
+ */
+CAfStorage::CAfStorage(RFs& session)
+:
+mFsSession(session)
+{
+    // No implementation required
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Destructor.
+ */
+CAfStorage::~CAfStorage()
+{
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Two-phased constructor.
+ * @param session - initialized session to file system
+ */
+CAfStorage* CAfStorage::NewL(RFs& session)
+{
+    CAfStorage* self = new (ELeave) CAfStorage(session);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(); // self;
+    return self;
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * EPOC default constructor for performing 2nd stage construction
+ */
+void CAfStorage::ConstructL()
+{
+    RBuf path;
+    CleanupClosePushL( path );
+    path.CreateL(KMaxPathLength);
+    User::LeaveIfError(mFsSession.PrivatePath(path ));
+    path.Append(KDbName);
+    path.Insert(0, KDbDrive);
+    BaflUtils::EnsurePathExistsL(mFsSession, path);
+    BaflUtils::FileExists(mFsSession, path) ? OpenDbL(path) : CreateDbL(path);
+    CleanupStack::PopAndDestroy(&path);
+
+    DeleteNonPersistentActivitiesL();
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Create database and its structure
+ * @param databaseFile - database file path
+ */
+void CAfStorage::CreateDbL(const TDesC& databaseFile)
+{
+    mFileStore = CPermanentFileStore::ReplaceL(mFsSession,
+                                               databaseFile,
+                                               EFileRead|EFileWrite);
+    mFileStore->SetTypeL(mFileStore->Layout());// Set file store type
+    TStreamId id = mActDb.CreateL(mFileStore);// Create stream object
+    mFileStore->SetRootL(id);// Keep database id as root of store
+    mFileStore->CommitL();// Complete creation by commiting
+    CreateTableL();
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Open database
+ * @param databaseFile - database file path
+ */
+void CAfStorage::OpenDbL(const TDesC& databaseFile)
+{
+    mFileStore = CPermanentFileStore::OpenL(mFsSession,
+                                            databaseFile,
+                                            EFileRead|EFileWrite);
+    mFileStore->SetTypeL(mFileStore->Layout()); /* Set file store type*/
+    mActDb.OpenL(mFileStore,mFileStore->Root());
+    CDbTableNames* tables = mActDb.TableNamesL();
+    CleanupStack::PushL(tables);
+    if (0 == tables->Count()) {
+        CreateTableL();
+    }
+    CleanupStack::PopAndDestroy(tables);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Create database structure
+ */
+void CAfStorage::CreateTableL()
+{
+    // Add the columns to column set
+    CDbColSet* actColSet = CDbColSet::NewLC();
+
+    TDbCol appName(KApplicationColumnName, EDbColInt64);
+    appName.iAttributes = TDbCol::ENotNull;
+    actColSet->AddL(appName);
+
+    TDbCol actName(KActivityColumnName, EDbColText16);// Using default length
+    actName.iAttributes = TDbCol::ENotNull;
+    actColSet->AddL(actName);
+
+    TDbCol actFlags(KFlagsColumnName, EDbColInt32);
+    actFlags.iAttributes = TDbCol::ENotNull;
+    actColSet->AddL(actFlags);
+
+    actColSet->AddL(TDbCol(KDataColumnName, EDbColLongBinary));// Stream Data
+
+    // Create the table
+    User::LeaveIfError(mActDb.CreateTable(KActivityTableName,
+                                         *actColSet));
+
+    CleanupStack::PopAndDestroy(actColSet);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Delete non-persistent activities
+ */
+void CAfStorage::DeleteNonPersistentActivitiesL()
+{
+    HBufC *query(BuildQueryLC(KDeleteNonPersistentActivities(), CAfEntry::Persistent, KNullDesC));
+    User::LeaveIfError(mActDb.Execute(*query));
+    CleanupStack::PopAndDestroy(query);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Register new activity
+ * @param appId - application id
+ * @param actId - activity id
+ * @param flags - activity flags
+ * @param imgSrc - activity thumbnail source
+ * @param privateData - activity private data
+ * @param publicData - activity public data
+ */
+void CAfStorage::AddActivityL(CAfEntry& entry)
+{
+    //verify if row already exists
+    TInt errNo(KErrNone);
+    RDbView view;
+    CleanupClosePushL(view);
+    TRAP( errNo, GetActivityForUpdateL(view, entry.ApplicationId(), entry.ActivityId()));
+    if (KErrNone == errNo) {
+        User::Leave(KErrAlreadyExists);
+    }
+    CleanupStack::PopAndDestroy(&view);
+
+    //write table
+    RDbTable table;
+    CleanupClosePushL(table);
+    User::LeaveIfError(table.Open(mActDb, KActivityTableName, table.EUpdatable));
+    CDbColSet *row = table.ColSetL();
+    CleanupStack::PushL(row);
+
+    table.InsertL();
+    TRAP(errNo,
+    table.SetColL(row->ColNo(KApplicationColumnName), TInt64(entry.ApplicationId()));
+    table.SetColL(row->ColNo(KActivityColumnName), entry.ActivityId());
+    table.SetColL(row->ColNo(KFlagsColumnName), entry.Flags());
+    ExternalizeDataL(table, entry, row->ColNo(KDataColumnName));
+    table.PutL();)
+    if (KErrNone != errNo) {
+        table.Cancel();
+        User::Leave(errNo);
+    }
+    CleanupStack::PopAndDestroy(row);
+    CleanupStack::PopAndDestroy(&table);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Update activity
+ * @param entry - activity data
+ */
+void CAfStorage::UpdateActivityL(CAfEntry& entry)
+{
+    RDbView view;
+    CleanupClosePushL(view);
+    GetActivityForUpdateL(view, entry.ApplicationId(), entry.ActivityId());
+    view.UpdateL();
+    TRAPD(errNo,
+    CDbColSet* colSet = view.ColSetL();
+    CleanupStack::PushL(colSet);
+
+    view.SetColL(colSet->ColNo(KFlagsColumnName), entry.Flags());
+    ExternalizeDataL(view, entry, colSet->ColNo(KDataColumnName));
+
+    view.PutL();
+    if (KErrNone != errNo) {
+        view.Cancel();
+        User::Leave(errNo);
+    }
+    CleanupStack::PopAndDestroy(colSet);)
+
+    if (KErrNone != errNo) {
+        view.Cancel();
+        User::Leave(errNo);
+    }
+    CleanupStack::PopAndDestroy(&view);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Delete activity
+ * @param appId - application id
+ * @param actId - activity id
+ */
+void CAfStorage::DeleteActivityL(CAfEntry& entry)
+{
+    HBufC *query(DeleteRowLC(entry.ApplicationId(), entry.ActivityId()));
+    User::LeaveIfError(mActDb.Execute(*query));
+    CleanupStack::PopAndDestroy(query);
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CAfStorage::DeleteActivitiesL(CAfEntry& entry)
+{
+    HBufC *query(DeleteRowsLC(entry.ApplicationId()));
+    User::LeaveIfError(mActDb.Execute(*query));
+    CleanupStack::PopAndDestroy(query);
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CAfStorage::ActivitiesL(RPointerArray<CAfEntry>& dst)
+{
+    ActivitiesL(dst, KSelectRows(), CAfEntry::Public);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Serialize application activity into the buffer
+ * @param dst - destination buffer
+ * @param appId - application id
+ */
+void CAfStorage::ActivitiesL(RPointerArray<CAfEntry>& dst,TInt appId)
+{
+    HBufC *query(SelectRowsLC(appId));
+    ActivitiesL(dst, *query, CAfEntry::Private);
+    CleanupStack::PopAndDestroy(query);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Serialize application activity into the buffer
+ * @param dst - destination entry
+ * @param src - condition pattern
+ */
+void CAfStorage::ActivityL(CAfEntry *&dst, CAfEntry& src)
+{
+    HBufC *query = SelectRowLC(src.ApplicationId(), src.ActivityId());
+    RPointerArray<CAfEntry> array;
+    CleanupStack::PushL(TCleanupItem(CleanupResetAndDestroy,&array));
+    ActivitiesL(array, *query, CAfEntry::Private, 1);
+    if (0 >= array.Count()) {
+        User::Leave(KErrNotFound);
+    }
+    dst = array[0];
+    array.Remove(0);
+    CleanupStack::PopAndDestroy(&array);
+    CleanupStack::PopAndDestroy(query);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Provide initialized file system session
+ * @return file system session
+ */
+RFs& CAfStorage::Fs()
+{
+    return mFsSession;
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Format query to select activity row
+ * @param appId - application id
+ * @param actId - activity id
+ * @return formated sql query
+ */
+HBufC* CAfStorage::SelectRowLC(TInt appId, const TDesC& actId) const
+{
+    return BuildQueryLC(KSelectRow(),appId, actId);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Format query to select activities for application
+ * @param appId - application id
+ * @return formated sql query
+ */
+HBufC* CAfStorage::SelectRowsLC(TInt appId) const
+{
+    return BuildQueryLC(KSelectAppRows(), appId, KNullDesC);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Format query to delete activity
+ * @param appId - application id
+ * @param actId - activity id
+ * @return formated sql query
+ */
+HBufC* CAfStorage::DeleteRowLC(TInt appId, const TDesC& actId) const
+{
+    return BuildQueryLC(KDeleteRow(),appId, actId);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Format query to delete activities for application
+ * @param appId - application id
+ * @return formated sql query
+ */
+HBufC* CAfStorage::DeleteRowsLC(TInt appId) const
+{
+    return BuildQueryLC(KDeleteRows(),appId, KNullDesC);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Format sql query
+ * @format - sql format string
+ * @param appId - application id
+ * @param actId - activity id
+ * @return formated sql query
+ */
+HBufC* CAfStorage::BuildQueryLC(const TDesC& format,
+                                      TInt appId,
+                                      const TDesC& actId) const
+{
+    TBuf<16> appName;
+    appName.AppendNum(appId);
+    RBuf actName;
+    CleanupClosePushL(actName);
+    actName.CreateL(actId.Length());
+    actName.Copy(actId);
+    HBufC* query = HBufC::NewL(format.Length() +
+                               appName.Length() +
+                               actName.Length() );
+    query->Des().AppendFormat(format, &appName, &actName);
+    CleanupStack::PopAndDestroy(&actName);
+    CleanupStack::PushL(query);
+    return query;
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Execute sql query and result serialize into buffer
+ * @param dst - destination result buffer
+ * @param query - sql activity query
+ */
+void CAfStorage::ActivitiesL(RPointerArray<CAfEntry>& dst, const TDesC& query, CAfEntry::AccessRights rights, TInt limit)
+{
+    RDbView view;// Create a view on the database
+    CleanupClosePushL(view);
+    User::LeaveIfError(view.Prepare(mActDb, TDbQuery(query), view.EReadOnly));
+    User::LeaveIfError(view.EvaluateAll());
+    ActivitiesL(dst, view, rights, limit);
+    CleanupStack::PopAndDestroy(&view);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Return view deserialisd into entries array
+ * @param dst - destination result
+ * @param query - view
+ * @param rights - acess rights
+ */
+void CAfStorage::ActivitiesL(RPointerArray<CAfEntry>& dst, RDbView& src, CAfEntry::AccessRights rights, TInt limit)
+{
+    CDbColSet* row = src.ColSetL();
+    CleanupStack::PushL(row);
+
+    const TInt flagsOffset(row->ColNo(KFlagsColumnName)),
+               applicationOffset(row->ColNo(KApplicationColumnName)),
+               activityOffset(row->ColNo(KActivityColumnName)),
+               dataOffset(row->ColNo(KDataColumnName));
+
+    RBuf activityName;
+    CleanupClosePushL(activityName);
+
+    for (src.FirstL(); src.AtRow(); src.NextL()) {
+        if(0 < limit && dst.Count() >= limit) {
+            break;
+        }
+        src.GetL();
+        ReadDataL(activityName, src, activityOffset);
+
+        CAfEntry *entry = CAfEntry::NewLC(src.ColInt32(flagsOffset),
+                                          src.ColInt64(applicationOffset),
+                                          activityName,
+                                          KNullDesC,
+                                          KNullDesC8,
+                                          KNullDesC8);
+        if (CAfEntry::Public == rights && (entry->Flags() & CAfEntry::Invisible)) {
+            CleanupStack::PopAndDestroy(entry);
+            continue;
+        }
+        InternalizeDataL(*entry, src, dataOffset);
+        
+        if (CAfEntry::Public == rights || 0 >= limit) {
+            entry->SetDataL(KNullDesC8(), CAfEntry::Private);
+        }
+        dst.AppendL(entry);
+        CleanupStack::Pop(entry);
+    }
+
+    CleanupStack::PopAndDestroy(&activityName);
+    CleanupStack::PopAndDestroy(row);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Get activity for update
+ * @param query - destination query result
+ * @param appId - application id
+ * @param actId - activity id
+ */
+void CAfStorage::GetActivityForUpdateL(RDbView& view, TInt appId, const TDesC& actId)
+{
+    HBufC* query(SelectRowLC(appId, actId));
+    User::LeaveIfError(view.Prepare(mActDb, TDbQuery(*query), view.EUpdatable));
+    CleanupStack::PopAndDestroy(query);
+    User::LeaveIfError(view.EvaluateAll());
+    if (!view.FirstL()) {
+        User::Leave(KErrNotFound);
+    }
+}
+
+// -----------------------------------------------------------------------------
+void CAfStorage::ReadDataL(RBuf& dst, RDbRowSet& src, TInt offset) const
+{
+    const TInt length(src.ColLength(offset));
+    CAfEntry::ReallocL(dst, length);
+    RDbColReadStream srcStream;
+    srcStream.OpenLC(src,offset);
+    srcStream.ReadL(dst, src.ColLength(offset));
+    CleanupStack::PopAndDestroy(&srcStream);
+}
+
+// -----------------------------------------------------------------------------
+void CAfStorage::ExternalizeDataL(RDbRowSet& dst,const CAfEntry &src, TInt offset) const
+{
+    RDbColWriteStream dbStream;
+    CleanupClosePushL(dbStream);
+    dbStream.OpenL(dst, offset);
+    src.ExternalizeDataOnlyL(dbStream);
+    CleanupStack::PopAndDestroy(&dbStream);
+}
+
+// -----------------------------------------------------------------------------
+void CAfStorage::InternalizeDataL(CAfEntry & dst, RDbRowSet& src, TInt offset) const
+{
+    RDbColReadStream dbStream;
+    CleanupClosePushL(dbStream);
+    dbStream.OpenL(src, offset);
+    dst.InternalizeDataOnlyL(dbStream);
+    CleanupStack::PopAndDestroy(&dbStream);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/activityfw/activitydatabase/hsactivitydbserver/src/afstorageasynctask.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -0,0 +1,221 @@
+/*
+* 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:
+*
+*/
+#include <s32mem.h>
+
+#include "afstorageasynctask.h"
+#include "activitycmd.h"
+
+_LIT(KUnsupportedStorageAsyncTask, "Unsupported async storage task");
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+LOCAL_C void ReadEntryL(CAfEntry& entry, const RMessage2& msg)
+{
+    RBuf8 serializedEntry;
+    CleanupClosePushL(serializedEntry);
+    serializedEntry.CreateL(msg.GetDesLengthL(0));
+    msg.ReadL(0, serializedEntry);
+    RDesReadStream reader(serializedEntry);
+    CleanupClosePushL(reader);
+    
+    reader >> entry;
+    
+    CleanupStack::PopAndDestroy(&reader);
+    CleanupStack::PopAndDestroy(&serializedEntry);
+}
+// -----------------------------------------------------------------------------
+/**
+ * Constructor for performing 1st stage construction
+ */
+CAfStorageAsyncTask::CAfStorageAsyncTask()
+{
+    // No implementation required
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Destructor.
+ */
+CAfStorageAsyncTask::~CAfStorageAsyncTask()
+{
+    mExternalizedData.Close();
+    mInternalizedData.ResetAndDestroy();
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Handle asynchronous data storage requests
+ * @param taskStorage - data tasks storage
+ * @param dataStorage - data storage
+ * @param msg - request message
+ */
+void CAfStorageAsyncTask::ExecuteLD(MAfTaskStorage& taskStorage, 
+                                    CAfStorage& dataStorage, 
+                                    const RMessage2& msg)
+{
+    CAfStorageAsyncTask* self = new (ELeave) CAfStorageAsyncTask();
+    CleanupStack::PushL(self);
+    self->ExecuteL(dataStorage, msg);
+    taskStorage.PushL(self);
+    CleanupStack::Pop(self);
+    if (EFalse == msg.IsNull()) {
+        msg.Complete(KErrNone);
+    }
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Interface implementation
+ * @see CActivityTask::Data()
+ */
+const TDesC8& CAfStorageAsyncTask::CAfStorageAsyncTask::Data() const
+{
+    return mExternalizedData;
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Interface implementation
+ * @see CActivityTask::BroadcastReceivedL(const RMessage2 &)
+ */
+void CAfStorageAsyncTask::BroadcastReceivedL(const RMessage2& )
+{
+    // No implementation required
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Handle asynchronous data storage requests
+ * @param dataStorage - data storage
+ * @param msg - request message
+ */
+void CAfStorageAsyncTask::ExecuteL(CAfStorage& dataStorage, 
+                                   const RMessage2& msg)
+{
+    switch (msg.Function()) {
+    case Activities:
+        AllActivitiesL(dataStorage, msg);
+        break;
+    case ApplicationActivities:
+        ApplicationActivitiesL(dataStorage, msg);
+        break;
+    case ApplicationActivity:
+        ApplicationActivityL(dataStorage, msg);
+        break;
+    default:
+        //this code shouldn't be called. fatal error: means wrong session implementation 
+        User::Panic(KUnsupportedStorageAsyncTask, KErrGeneral);
+    };
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Handle getting all activities request
+ * @param dataStorage - data storage
+ * @param msg - requested message
+ */
+void CAfStorageAsyncTask::AllActivitiesL(CAfStorage& dataStorage, 
+                                         const RMessage2& msg)
+{
+    dataStorage.ActivitiesL(mInternalizedData);
+    ExternalizeL();
+    WriteResponseL(msg);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Handle getting application activities request
+ * @param dataStorage - data storage
+ * @param msg - requested message
+ */
+void CAfStorageAsyncTask::ApplicationActivitiesL(CAfStorage& dataStorage, 
+                                                 const RMessage2& msg)
+{
+    CAfEntry *entry = CAfEntry::NewLC();
+    ReadEntryL(*entry, msg);
+    dataStorage.ActivitiesL(mInternalizedData, entry->ApplicationId());
+    CleanupStack::PopAndDestroy(entry);
+    ExternalizeL();
+    WriteResponseL(msg);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Handle getting application activity request
+ * @param dataStorage - data storage
+ * @param msg - requested message
+ */
+void CAfStorageAsyncTask::ApplicationActivityL(CAfStorage& dataStorage, 
+                                               const RMessage2& msg)
+{
+    CAfEntry *src(CAfEntry::NewLC()) , *dst(0);
+    ReadEntryL(*src, msg);
+    dataStorage.ActivityL(dst, *src);
+    CleanupStack::PushL(dst);
+    ExternalizeL(*dst);
+    CleanupStack::PopAndDestroy(dst);
+    CleanupStack::PopAndDestroy(src);
+    WriteResponseL(msg);
+}
+
+// -----------------------------------------------------------------------------
+void CAfStorageAsyncTask::ExternalizeL()
+{
+    mExternalizedData << mInternalizedData;
+    mInternalizedData.ResetAndDestroy();
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Externalzie entry into output buffer
+ * @param entry - source entry
+ */
+void CAfStorageAsyncTask::ExternalizeL(const CAfEntry &entry)
+{
+    CAfEntry::ReallocL(mExternalizedData, entry.Size());
+    RDesWriteStream writer(mExternalizedData);
+    CleanupClosePushL(writer);
+    writer << entry;
+    CleanupStack::PopAndDestroy(&writer);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Write response data into request message
+ * @param msg - destination message
+ */
+void CAfStorageAsyncTask::WriteResponseL(const RMessage2& msg)
+{
+    if (EFalse == msg.IsNull()) {
+        msg.WriteL(1, 
+                   TPckgBuf<TInt>(mExternalizedData.Length()));//write data size
+        msg.WriteL(2, 
+                   TPckgBuf<CBase*>(this));//task identyfier
+    }
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Returns ETrue if task is related with session argument
+ */
+
+TBool CAfStorageAsyncTask::IsSessionTask(const CSession2* /*session*/)
+{
+	return EFalse;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/activityfw/activitydatabase/hsactivitydbserver/src/afstoragesynctask.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -0,0 +1,260 @@
+/*
+* 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:
+*
+*/
+#include <s32mem.h>
+#include <hash.h>
+#include <fbs.h>
+#include <bautils.h>
+
+#include "afstoragesynctask.h"
+#include "activitycmd.h"
+#include "afentry.h"
+const TInt KMaxPathLength = 256;
+
+_LIT(KUnsupportedStorageSyncTask, "Unsupported sync storage task");
+
+// -----------------------------------------------------------------------------
+/**
+ * Handle synchronous data storage requests
+ * @param dataStorage - data storage
+ * @param msg - request message
+ */
+void AfStorageSyncTask::ExecuteL(MAfTaskStorage& observers,
+                                 CAfStorage& dataStorage, 
+                                 const RMessage2& msg)
+{
+    switch (msg.Function()) {
+    case AddActivity: 
+        AddActivityL(dataStorage, msg);
+        break;
+    case UpdateActivity:
+        UpdateActivityL(dataStorage, msg);
+        break;
+    case RemoveActivity:
+        DeleteActivityL(dataStorage, msg);
+        break;
+    case RemoveApplicationActivities:
+        DeleteApplicationActivitiesL(dataStorage, msg);
+        break;
+    default:
+        //this code shouldn't be called. fatal error: means wrong session implementation 
+        User::Panic(KUnsupportedStorageSyncTask, KErrGeneral);
+    };
+    msg.Complete(KErrNone);
+    NotifyChangeL(observers, msg);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Handle adding new activity.
+ * @param dataStorage - data storage
+ * @param msg - request message
+ */
+void AfStorageSyncTask::AddActivityL(CAfStorage& dataStorage, 
+                                     const RMessage2& msg)
+{
+    //Read message and bitmap handle
+    TPckgBuf<TInt> bitmapHdl(0);
+    CAfEntry *entry = CAfEntry::NewLC();
+    ReadEntryL(*entry, msg);
+    msg.ReadL(1, bitmapHdl);
+    
+    RBuf thumbnailPath;
+    CleanupClosePushL(thumbnailPath);
+    ThumbnailPathL(thumbnailPath, 
+                   dataStorage.Fs(), 
+                   entry->ApplicationId(), 
+                   entry->ActivityId());
+    CreateThumbnailL(thumbnailPath, bitmapHdl());
+    entry->SetImageSrcL(thumbnailPath);
+    dataStorage.AddActivityL(*entry);
+    CleanupStack::PopAndDestroy(&thumbnailPath);
+    
+    CleanupStack::PopAndDestroy(entry);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Handle updating existing activiy
+ * @param dataStorage - data storage
+ * @param msg - request message
+ */
+void AfStorageSyncTask::UpdateActivityL(CAfStorage& dataStorage, 
+                                        const RMessage2& msg)
+{
+    TPckgBuf<TInt> bitmapHdl(0);
+    CAfEntry *entry = CAfEntry::NewLC();
+    ReadEntryL(*entry, msg);
+    msg.ReadL(1, bitmapHdl);
+        
+    RBuf thumbnailPath;
+    CleanupClosePushL(thumbnailPath);
+    ThumbnailPathL(thumbnailPath, 
+                   dataStorage.Fs(), 
+                   entry->ApplicationId(), 
+                   entry->ActivityId());
+    CreateThumbnailL(thumbnailPath, bitmapHdl());
+    entry->SetImageSrcL(thumbnailPath);
+    dataStorage.UpdateActivityL(*entry);
+    CleanupStack::PopAndDestroy(&thumbnailPath);
+    CleanupStack::PopAndDestroy(entry);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Handle removing activity.
+ * @param dataStorage - data storage
+ * @param msg - request message
+ */
+void AfStorageSyncTask::DeleteActivityL(CAfStorage& dataStorage, 
+                                        const RMessage2& msg)
+{
+    CAfEntry *entry = CAfEntry::NewLC();
+    ReadEntryL(*entry, msg);
+    dataStorage.DeleteActivityL(*entry);
+    CleanupStack::PopAndDestroy(entry);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Handle removing all application activities.
+ * @param dataStorage - data storage
+ * @param msg - request message
+ */
+void AfStorageSyncTask::DeleteApplicationActivitiesL(CAfStorage& dataStorage, 
+                                                     const RMessage2& msg)
+{
+    CAfEntry *entry = CAfEntry::NewLC();
+    ReadEntryL(*entry, msg);
+    dataStorage.DeleteActivitiesL(*entry);
+    CleanupStack::PopAndDestroy(entry);
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void AfStorageSyncTask::NotifyChangeL(MAfTaskStorage& observers,
+                                      const RMessage2& msg)
+{
+    const RPointerArray<CAfTask> &table(observers.StorageData());
+    for (TInt iter(table.Count() - 1); 0 <= iter; --iter) {
+        table[iter]->BroadcastReceivedL(msg);
+    }
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void AfStorageSyncTask::ReadEntryL(CAfEntry& entry, const RMessage2& msg)
+{
+    RBuf8 serializedEntry;
+    CleanupClosePushL(serializedEntry);
+    serializedEntry.CreateL(msg.GetDesLengthL(0));
+    msg.ReadL(0, serializedEntry);
+    RDesReadStream reader(serializedEntry);
+    CleanupClosePushL(reader);
+    
+    reader >> entry;
+    
+    CleanupStack::PopAndDestroy(&reader);
+    CleanupStack::PopAndDestroy(&serializedEntry);
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void AfStorageSyncTask::CreateThumbnailL(const TDesC &path, TInt hdl)
+{
+    if (0 >= hdl) {
+        User::Leave(KErrCorrupt);
+    }
+    CFbsBitmap *bitmap = new (ELeave) CFbsBitmap;
+    CleanupStack::PushL(bitmap);
+    User::LeaveIfError(bitmap->Duplicate(hdl));
+    User::LeaveIfError(bitmap->Save(path));
+    CleanupStack::PopAndDestroy(bitmap);
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void AfStorageSyncTask::ThumbnailPathL(RBuf &dst, 
+                                       RFs& fileSystem, 
+                                       TInt uid, 
+                                       const TDesC &activityName)
+{
+    _LIT(KUidFormat, "%+08x\\");
+    _LIT(KExtFormat, ".mbm");
+    //Generate activity hash
+    RBuf8 buff8;
+    CleanupClosePushL(buff8);
+    buff8.CreateL(activityName.Length());
+    buff8.Copy(activityName);
+    HBufC8 *activityHash = Md5HexDigestL(buff8);
+    CleanupStack::PopAndDestroy(&buff8);
+    CleanupStack::PushL(activityHash);
+    
+    //Get private path
+    RBuf privatePath;
+    CleanupClosePushL(privatePath);
+    privatePath.CreateL(KMaxPathLength);
+    User::LeaveIfError(fileSystem.PrivatePath(privatePath));
+    
+    //Format activity path
+    privatePath.AppendFormat( KUidFormat, uid);
+    
+    const TInt requiredSize(privatePath.Length() + 
+                            activityHash->Length() + 
+                            KExtFormat().Length());
+    CAfEntry::ReallocL(dst, requiredSize);
+    
+    //Copy path
+    dst.Copy(privatePath);
+    privatePath.Copy(*activityHash);//reuse already allocated buffer to convert 8 -> 16
+    dst.Append(privatePath);
+    dst.Append(KExtFormat());
+    
+    CleanupStack::PopAndDestroy(&privatePath);
+    CleanupStack::PopAndDestroy(activityHash);
+    
+    BaflUtils::EnsurePathExistsL(fileSystem, dst);
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+HBufC8* AfStorageSyncTask::Md5HexDigestL(const TDes8 &string)
+{
+    _LIT8(KMd5HexFormat, "%+02x");
+    CMD5* md5 = CMD5::NewL();
+    CleanupStack::PushL(md5);
+    
+    TPtrC8 hashedSig(md5->Hash(string));
+    
+    HBufC8* buf = HBufC8::NewL(hashedSig.Length() * 2);
+    TPtr8 bufPtr = buf->Des();
+    
+    for(TInt i(0); i< hashedSig.Length(); ++i) {
+        bufPtr.AppendFormat(KMd5HexFormat,hashedSig[i]);
+    }
+    CleanupStack::PopAndDestroy(md5);
+    return buf;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/activityfw/activitydatabase/hsactivitydbserver/src/afthumbnailtask.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -0,0 +1,135 @@
+/*
+* 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:
+*
+*/
+
+#include "afthumbnailtask.h"
+#include "activitycmd.h"
+
+#include <fbs.h>
+
+// -----------------------------------------------------------------------------
+/**
+ * Constructor for performing 1st stage construction
+ */
+CAfThumbnailTask::CAfThumbnailTask(MAfTaskStorage& storage, 
+                                   const RMessage2 msg)
+:
+    mStorage(storage), 
+    mMsg(msg)
+{
+    // No implementation required
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Destructor.
+ */
+CAfThumbnailTask::~CAfThumbnailTask()
+{
+    delete mService;
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CAfThumbnailTask::ExecuteLD(MAfTaskStorage& taskStorage,
+                                 const RMessage2& message)
+{
+    CAfThumbnailTask *self = new (ELeave)CAfThumbnailTask(taskStorage, 
+                                                                      message);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    taskStorage.PushL(self);
+    CleanupStack::Pop(self);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * EPOC default constructor for performing 2nd stage construction
+ */
+void CAfThumbnailTask::ConstructL()
+{
+    TPckgBuf<int> width(0), height(0);
+    RBuf path;
+    RBuf8 mime;
+    CleanupClosePushL(path);
+    CleanupClosePushL(mime);
+    mMsg.ReadL(0, width);
+    mMsg.ReadL(1, height);
+    path.CreateL(mMsg.GetDesLengthL(2));
+    mMsg.ReadL(2, path);
+    mime.CreateL(mMsg.GetDesLengthL(3));
+    mMsg.ReadL(3, mime);
+    
+    CFbsBitmap *bitmap = new (ELeave) CFbsBitmap();
+    CleanupStack::PushL(bitmap);
+    User::LeaveIfError(bitmap->Load(path));
+    mService = CTsGraphicFileScalingHandler::NewL(*this, 
+                                                  *bitmap, 
+                                                  TSize(width(), height()), 
+                                                  CTsGraphicFileScalingHandler::EKeepAspectRatioByExpanding);
+    CleanupStack::PopAndDestroy(bitmap);
+
+    CleanupStack::PopAndDestroy(&mime);
+    CleanupStack::PopAndDestroy(&path);
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CAfThumbnailTask::ImageReadyCallBack(TInt error,const CFbsBitmap *bitmap)
+{
+    if (EFalse == mMsg.IsNull() &&
+        KErrNone == error) {
+        mMsg.Write(0, TPckgBuf<int>(const_cast<CFbsBitmap*>(bitmap)->Handle()));
+        mMsg.Write(1, TPckgBuf<void *>(this));
+        mMsg.Complete(error);
+    } else {
+        if (EFalse == mMsg.IsNull()) {
+         mMsg.Complete(error);
+        }
+        mStorage.Pop(this);
+        delete this;
+    }
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+const TDesC8& CAfThumbnailTask::Data() const
+{
+    return KNullDesC8();
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CAfThumbnailTask::BroadcastReceivedL(const RMessage2&)
+{
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Returns ETrue if task is related with session argument
+ */
+TBool CAfThumbnailTask::IsSessionTask(const CSession2* session)
+{
+    return mMsg.Session() == session ? ETrue : EFalse;
+}
--- a/activityfw/activitydatabase/hsactivitydbserver/src/main.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/activityfw/activitydatabase/hsactivitydbserver/src/main.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -14,7 +14,7 @@
 * Description:
 *
 */
-#include "activityserver.h"
+#include "afserver.h"
 #include <e32base.h>
 
 // -----------------------------------------------------------------------------
@@ -26,7 +26,7 @@
     CActiveScheduler* activeScheduler = new( ELeave ) CActiveScheduler;
     CleanupStack::PushL( activeScheduler );
     CActiveScheduler::Install( activeScheduler );
-    CActivityServer* serverObject = CActivityServer::NewLC();
+    CAfServer* serverObject = CAfServer::NewLC();
     RProcess::Rendezvous( KErrNone );
     CActiveScheduler::Start();
     CleanupStack::PopAndDestroy( serverObject );
--- a/activityfw/activitydatabase/inc/activitycmd.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/activityfw/activitydatabase/inc/activitycmd.h	Wed Jun 23 18:33:40 2010 +0300
@@ -34,6 +34,7 @@
     RemoveApplicationActivities,
     Activities,
     ApplicationActivities,
+    ApplicationActivity,
     WaitActivity,
     LaunchActivity,
     GetThumbnail,
--- a/activityfw/activitydatabase/inc/hsactivitydbclientinterface.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/activityfw/activitydatabase/inc/hsactivitydbclientinterface.h	Wed Jun 23 18:33:40 2010 +0300
@@ -25,7 +25,10 @@
 const char ActivityApplicationKeyword [] = ":ApplicationId";
 const char ActivityActivityKeyword [] = ":ActivityName";
 const char ActivityParametersKeyword [] = ":ActivityParams";
+const char ActivityPersistence [] = ":ActivityPersistence";
+const char ActivityVisibility [] = ":ActivityVisibility";
 const char ActivityScreenshotKeyword [] = "screenshot";
+const char ActivityDataKeyword [] = ":ActivityData";
 
 class HsActivityDbClientInterface
 {
@@ -36,14 +39,16 @@
      * @param activity - activity to store
      * @return 0 on succees, error code otherwise
      */
-    virtual int addActivity(const QVariantHash &activity) =0;
+    virtual int addActivity(const QVariantHash &privateData,
+                            const QVariantHash &publicData) =0;
 
     /**
      * Function update exiting activity
      * @param activity - filtering rules
      * @return 0 on succees, error code otherwise
      */
-    virtual int updateActivity(const QVariantHash &activity) =0;
+    virtual int updateActivity(const QVariantHash &privateData,
+                               const QVariantHash &publicData) =0;
 
     /**
      * Function delete activity
@@ -76,6 +81,14 @@
                                       const QVariantHash &activity) =0;
 
     /**
+     * Function returns data for activity
+     * @param result - activity data
+     * @param activity - filtering rules
+     * @return 0 on succees, error code otherwise
+     */
+    virtual int activityData(QVariant &result, const QVariantHash &activity) = 0;
+                                      
+    /**
      * Function subscribe to activity
      * @param  activity - filtering rules
      * @return 0 on succees, error code otherwise
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/activityfw/activitydatabase/s60/inc/afentry.h	Wed Jun 23 18:33:40 2010 +0300
@@ -0,0 +1,130 @@
+/*
+* 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:
+*
+*/
+#ifndef AFENTRYDATA_H
+#define AFENTRYDATA_H
+
+#include <e32base.h>
+#include <s32strm.h>
+class RDbColWriteStream;
+class RDbColReadStream;
+const TInt KAfMask(0x0001);
+
+#ifdef AF_ADD_MASK
+#undef AF_ADD_MASK
+#endif
+#define AF_ADD_MASK(n) (KAfMask << n)
+
+class CAfEntry: public CBase
+{
+public:
+    enum AccessRights {
+    Private =0,
+    Public
+    };
+
+    enum Flags {
+    Invisible = KAfMask,
+    Persistent = 0x40000000,
+    };
+
+public:
+    static CAfEntry* NewL();
+
+    static CAfEntry* NewLC();
+
+    static CAfEntry* NewL(TInt flags,
+                          TInt applicationId,
+                          const TDesC &activityId,
+                          const TDesC &imgSrc,
+                          const TDesC8 &privateData,
+                          const TDesC8 &publicData);
+
+    static CAfEntry* NewLC(TInt flags,
+                           TInt applicationId,
+                           const TDesC &activityId,
+                           const TDesC &imgSrc,
+                           const TDesC8 &privateData,
+                           const TDesC8 &publicData);
+
+    ~CAfEntry();
+
+    TInt Size() const;
+
+    TInt DataSize() const;
+
+    void ExternalizeL(RWriteStream &stream) const;
+
+    void InternalizeL(RReadStream &stream);
+
+    void ExternalizeDataOnlyL(RWriteStream &stream) const;
+
+    void InternalizeDataOnlyL(RReadStream &stream);
+
+    TInt Flags() const;
+
+    TInt ApplicationId() const;
+
+    const TDesC& ActivityId() const;
+
+    const TDesC& ImageSrc() const;
+
+    void SetImageSrcL(const TDesC& src);
+
+    const TDesC8& Data(CAfEntry::AccessRights rights) const;
+
+    void SetDataL(const TDesC8& src, CAfEntry::AccessRights rights);
+
+    static void ReallocL(RBuf8 &dst,TInt length);
+
+    static void ReallocL(RBuf &dst,TInt length);
+
+    static void CopyL(RBuf8 &dst,const TDesC8 &src);
+
+    static void CopyL(RBuf &dst,const TDesC &src);
+
+private:
+    CAfEntry();
+
+    void ConstructL(TInt flags,
+                    TInt applicationId,
+                    const TDesC &activityId,
+                    const TDesC &imgSrc,
+                    const TDesC8 &privateData,
+                    const TDesC8 &publicData);
+
+    static void InternalizeL(RBuf8 &dst, RReadStream &src);
+
+    static void InternalizeL(RBuf &dst, RReadStream &src);
+
+    static void ExternalizeL(RWriteStream &dst,const TDesC8 & src);
+
+    static void ExternalizeL(RWriteStream &dst,const TDesC& src);
+private:
+    TInt mFlags;
+    TInt mAppId;
+    RBuf mActivityId;
+    RBuf mImgSrc;
+    RBuf8 mPrivateData;
+    RBuf8 mPublicData;
+
+};
+
+RPointerArray<CAfEntry>& operator <<(RPointerArray<CAfEntry>& dst, const TDesC8 &src);
+
+RBuf8& operator << (RBuf8 &dst, const RPointerArray<CAfEntry>& src);
+
+#endif
--- a/activityfw/activitydatabase/s60/inc/hsserializer.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/activityfw/activitydatabase/s60/inc/hsserializer.h	Wed Jun 23 18:33:40 2010 +0300
@@ -16,8 +16,8 @@
 */
 #ifndef HSSERIALIZER_H
 #define HSSERIALIZER_H
+
 #include <qvariant.h>
-#include <qpixmap.h>
 
 /**
  * Operator serialize VarinatHash to RBuf8
@@ -29,8 +29,4 @@
  */
 QVariantHash &operator <<(QVariantHash &dst, const TDesC8 &src);
 
-/**
- * Operator deserialize RBuf8 to QList<QVariantHash>
- */
-QList<QVariantHash>& operator <<(QList<QVariantHash>& dst, const TDesC8 &src);
 #endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/activityfw/activitydatabase/s60/src/afentry.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -0,0 +1,446 @@
+/*
+* 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:
+*
+*/
+#include "afentry.h"
+#include <s32mem.h>
+
+// -----------------------------------------------------------------------------
+/**
+ * Two-phase constructor. Create and initialize instance
+ * @return entry instance
+ */
+CAfEntry* CAfEntry::NewL()
+{
+    CAfEntry *self = CAfEntry::NewLC();
+    CleanupStack::Pop(self);
+    return self;
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Two-phase constructor. Create, initialize and push instance into cleanup stack
+ * @return entry instance
+ */
+CAfEntry* CAfEntry::NewLC()
+{
+    CAfEntry *self = new (ELeave)CAfEntry();
+    CleanupStack::PushL(self);
+    return self;
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Two-phase constructor. Create and initialize instance
+ * @param flags - entry flags
+ * @param applicationId - application unique identifier
+ * @param activityId - activity unique identifier
+ * @param imgSrc - thumbanail source
+ * @param privateData - privated application data
+ * @param publicData - public activity data
+ * @return entry instance
+ */
+CAfEntry* CAfEntry::NewL(TInt flags,
+                         TInt applicationId,
+                         const TDesC &activityId,
+                         const TDesC &imgSrc,
+                         const TDesC8 &privateData,
+                         const TDesC8 &publicData)
+{
+    CAfEntry* self = CAfEntry::NewLC(flags, 
+                                     applicationId, 
+                                     activityId, 
+                                     imgSrc, 
+                                     privateData, 
+                                     publicData);
+    CleanupStack::Pop(self);
+    return self;
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Two-phase constructor. Create, initialize and push instance into cleanup stack
+ * @param flags - entry flags
+ * @param applicationId - application unique identifier
+ * @param activityId - activity unique identifier
+ * @param imgSrc - thumbanail source
+ * @param privateData - privated application data
+ * @param publicData - public activity data
+ * @return entry instance
+ */
+CAfEntry* CAfEntry::NewLC(TInt flags,
+                          TInt applicationId,
+                          const TDesC &activityId,
+                          const TDesC &imgSrc,
+                          const TDesC8 &privateData,
+                          const TDesC8 &publicData)
+{
+    CAfEntry *self = CAfEntry::NewLC();
+    self->ConstructL(flags, 
+                     applicationId, 
+                     activityId, 
+                     imgSrc, 
+                     privateData, 
+                     publicData);
+    return self;
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * First phase constructor
+ */
+CAfEntry::CAfEntry()
+{
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Second phase constructor. Initialize instance
+ * @param flags - entry flags
+ * @param applicationId - application unique identifier
+ * @param activityId - activity unique identifier
+ * @param imgSrc - thumbanail source
+ * @param privateData - privated application data
+ * @param publicData - public activity data 
+ */
+void CAfEntry::ConstructL(TInt flags,
+                          TInt applicationId,
+                          const TDesC &activityId,
+                          const TDesC &imgSrc,
+                          const TDesC8 &privateData,
+                          const TDesC8 &publicData)
+{
+    mFlags = flags;
+    mAppId = applicationId;
+    CopyL(mActivityId, activityId);
+    CopyL(mImgSrc, imgSrc);
+    CopyL(mPrivateData, privateData);
+    CopyL(mPublicData, publicData);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Destructor. Release allocated resources 
+ */
+CAfEntry::~CAfEntry()
+{
+    mActivityId.Close();
+    mPrivateData.Close();
+    mPublicData.Close();
+    mImgSrc.Close();
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Provide size of serialized entry
+ * @return size of serialized entry instance
+ */
+TInt CAfEntry::Size() const
+{
+    return (sizeof(TInt) * 3) + //flags + appId + actId size info 
+           mActivityId.Size() + //actId content size
+           DataSize(); //data size
+           
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Provide size of serialized entry
+ * @return size of serialized entry instance
+ */
+TInt CAfEntry::DataSize() const
+{
+    return (sizeof(TInt) * 3) + //privData size info + pubData size info + imgSrc size info
+            mImgSrc.Size() + //imgSize content size
+            mPrivateData.Size() + //privData content size
+            mPublicData.Size(); //pubData content size 
+}
+// -----------------------------------------------------------------------------
+/**
+ * Serialize entry content into output stream.
+ * @param stream - output stream
+ */
+void CAfEntry::ExternalizeL(RWriteStream &stream) const
+{
+    stream.WriteInt32L(mFlags);
+    stream.WriteInt32L(mAppId);
+    ExternalizeL(stream, mActivityId);
+    ExternalizeDataOnlyL(stream);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Deserialize entry content from input stream
+ * @param stream - input stream
+ */
+void CAfEntry::InternalizeL(RReadStream &stream)
+{
+    mFlags = stream.ReadInt32L();
+    mAppId = stream.ReadInt32L();
+    InternalizeL(mActivityId, stream);
+    InternalizeDataOnlyL(stream);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Serialize entry content into output stream.
+ * @param stream - output stream
+ */
+void CAfEntry::ExternalizeDataOnlyL(RWriteStream &stream) const
+{
+    ExternalizeL(stream, mImgSrc);
+    ExternalizeL(stream, mPrivateData);
+    ExternalizeL(stream, mPublicData);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Deserialize entry content from input stream
+ * @param stream - input stream
+ */
+void CAfEntry::InternalizeDataOnlyL(RReadStream &stream)
+{
+    
+    InternalizeL(mImgSrc, stream);
+    InternalizeL(mPrivateData, stream);
+    InternalizeL(mPublicData, stream);
+    
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Provide access to activity flags
+ * @return activity flags 
+ */
+TInt CAfEntry::Flags() const
+{
+    return mFlags;
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Provide access to activity identifier.
+ * @return activity identifier
+ */
+TInt CAfEntry::ApplicationId() const
+{
+    return mAppId;
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Provide access to activity identifier.
+ * @return activity identifier
+ */
+const TDesC& CAfEntry::ActivityId() const
+{
+    return mActivityId;
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Provide access to activity data.
+ * @param rights - type of requested data
+ * @return activity data
+ */
+const TDesC8& CAfEntry::Data(CAfEntry::AccessRights rights) const
+{
+    return Private == rights ? mPrivateData : mPublicData;
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Provide access to activity data.
+ * @param rights - type of requested data
+ * @return activity data
+ */
+void CAfEntry::SetDataL(const TDesC8& src, CAfEntry::AccessRights rights)
+{
+    CopyL(Private == rights ? mPrivateData : mPublicData, src);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Provide access to activity thumbail path
+ * @return path to activity thumbnail 
+ */
+const TDesC& CAfEntry::ImageSrc() const
+{
+    return mImgSrc;
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Set new value of image source
+ */
+void CAfEntry::SetImageSrcL(const TDesC& src)
+{
+    CopyL(mImgSrc, src);
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Reallocate blob buffer to requested size
+ * @param dst - destination buffer
+ * @param length - requested length
+ */
+void CAfEntry::ReallocL(RBuf8 &dst,TInt length)
+{
+    if (0 < length) {
+        if (dst.MaxLength() < length) {
+            dst.ReAllocL(length);
+        }
+    } else {
+        dst.Close();
+    }
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Reallocate text buffer to requested size
+ * @param dst - destination buffer
+ * @param length - requested length
+ */
+void CAfEntry::ReallocL(RBuf &dst,TInt length)
+{
+    if (0 < length) {
+        if (dst.MaxLength() < length) {
+            dst.ReAllocL(length);
+        }
+    } else {
+        dst.Close();
+    }
+}
+// -----------------------------------------------------------------------------
+/**
+ * Copy blob content from input stream
+ * @param dst - destination buffer
+ * @param src - source buffer
+ */
+void CAfEntry::CopyL(RBuf8 &dst,const TDesC8 &src)
+{
+    ReallocL(dst, src.Length());
+    if(0 < src.Length()) {
+        dst.Copy(src);
+    }
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Copy text content from input buffer
+ * @param dst - destination buffer
+ * @param src - source buffer
+ */
+void CAfEntry::CopyL(RBuf &dst,const TDesC &src)
+{
+    ReallocL(dst, src.Length());
+    if(0 < src.Length()) {
+        dst.Copy(src);
+    }
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Deserialize blob content from input stream
+ * @param dst - destination buffer
+ * @param src - input stream
+ */
+void CAfEntry::InternalizeL(RBuf8 &dst, RReadStream &src)
+{
+    const TInt length(src.ReadInt32L());
+    ReallocL(dst, length);
+    if (0 < length) {
+        src.ReadL(dst, length);
+    }
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Deserialize text content from input stream
+ * @param dst - destination buffer
+ * @param src - input stream
+ */
+void CAfEntry::InternalizeL(RBuf &dst, RReadStream &src)
+{
+    const TInt length(src.ReadInt32L());
+    ReallocL(dst, length);
+    if (0 < length) {
+        src.ReadL(dst, length);
+    }
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Serialize blob content into output stream
+ * @param dst - destination stream
+ * @param src - input buffer
+ */
+void CAfEntry::ExternalizeL(RWriteStream &dst,const TDesC8 & src)
+{
+    dst.WriteInt32L(src.Length());
+    if (src.Length()) {
+        dst.WriteL(src, src.Length());
+    }
+}
+
+// -----------------------------------------------------------------------------
+/**
+ * Serialize text content into output stream
+ * @param dst - destination stream
+ * @param src - input buffer
+ */
+void CAfEntry::ExternalizeL(RWriteStream &dst,const TDesC& src)
+{
+    dst.WriteInt32L(src.Length());
+    if (src.Length()) {
+        dst.WriteL(src, src.Length());
+    }
+}
+
+// -----------------------------------------------------------------------------
+RPointerArray<CAfEntry>& operator <<(RPointerArray<CAfEntry>& dst, const TDesC8 &src)
+{
+    dst.ResetAndDestroy();
+    RDesReadStream srcStream(src);
+    CleanupClosePushL(srcStream);
+    int numOfItems(srcStream.ReadInt32L());
+    for (int i(0); i < numOfItems; ++i) {
+        CAfEntry *entry = CAfEntry::NewLC();
+        srcStream >> (*entry);
+        dst.AppendL(entry);
+        CleanupStack::Pop(entry);
+    }
+    CleanupStack::PopAndDestroy(&srcStream);
+    return dst;
+}
+
+// -----------------------------------------------------------------------------
+RBuf8& operator <<(RBuf8 &dst, const RPointerArray<CAfEntry>& src)
+{
+    int iter(0), 
+        requiredSize(sizeof(int));
+    for(iter =0; iter< src.Count(); ++iter) {
+        requiredSize += src[iter]->Size();
+    }
+    CAfEntry::ReallocL(dst, requiredSize);
+    RDesWriteStream dstStream(dst);
+    CleanupClosePushL(dstStream);
+    dstStream.WriteInt32L(src.Count());
+    for (iter =0; iter < src.Count(); ++iter) {
+        dstStream << *(src[iter]);
+    }
+    CleanupStack::PopAndDestroy(&dstStream);
+    return dst;
+}
--- a/activityfw/activitydatabase/s60/src/hsserializer.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/activityfw/activitydatabase/s60/src/hsserializer.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -14,8 +14,8 @@
 * Description:
 *
 */
+#include <s32mem.h>
 #include "hsserializer.h"
-#include <s32mem.h>
 // -----------------------------------------------------------------------------
 //
 // -----------------------------------------------------------------------------
@@ -48,35 +48,3 @@
     QT_TRYCATCH_LEAVING(stream >> dst);
     return dst;
 }
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-QList<QVariantHash>& operator <<(QList<QVariantHash>& dst, const TDesC8 &src)
-{
-    dst.clear();
-    
-    QVariantHash item;
-    TRAP_IGNORE(
-    RDesReadStream srcStream(src);
-    int numOfItems(srcStream.ReadInt32L());
-    int bufferSize;
-    
-    RBuf8 tmpBuff;
-    CleanupClosePushL(tmpBuff);
-    for (int iter(0); iter < numOfItems; ++iter) {
-        bufferSize = srcStream.ReadInt32L();
-        if (tmpBuff.MaxLength() < bufferSize) {
-            tmpBuff.ReAllocL(bufferSize);
-        }
-        item.clear();
-        if (0 < bufferSize) {
-            srcStream.ReadL(tmpBuff, bufferSize);
-            item << tmpBuff;
-        }
-        dst.append(item);
-    }
-    CleanupStack::PopAndDestroy(&tmpBuff));
-    return dst;
-}
--- a/activityfw/activitylauncher/activitylauncher.pro	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-#
-
-TEMPLATE = app
-
-TARGET = activitylauncher
-
-CONFIG += hb console mobility
-MOBILITY = serviceframework
-
-SOURCES =   main.cpp \
-            activitylauncherview.cpp \
-
-HEADERS =   activitylauncherview.h \
-
-symbian {
-    TARGET.EPOCHEAPSIZE = 0x20000 0x1000000 // 128kB - 16MB
-}
\ No newline at end of file
--- a/activityfw/activitylauncher/activitylauncherview.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,107 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-#include "activitylauncherview.h"
-
-#include <QGraphicsLinearLayout>
-#include <QStandardItemModel>
-#include <QProcess>
-
-#include <qservicemanager.h>
-
-#include <hblabel.h>
-#include <hbapplication.h>
-#include <hbpushbutton.h>
-#include <hbgridview.h>
-
-#include <hsactivitydbclientinterface.h>
-
-QTM_USE_NAMESPACE
-
-ActivityLauncherView::ActivityLauncherView(QGraphicsItem *parent) : HbView(parent), mModel(NULL), mActivityManager(NULL)
-{
-    QServiceManager serviceManager;
-    mActivityManager = serviceManager.loadInterface("com.nokia.qt.activities.ActivityManager");
-
-    if (!mActivityManager) {
-        qFatal("Cannot initialize critical com.nokia.qt.activities.ActivityManager service");
-    }
-
-    // create UI
-    setTitle(tr("Activity launcher"));
-    QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical);
-    QGraphicsLinearLayout *statusLayout = new QGraphicsLinearLayout(Qt::Horizontal);
-    mStatusLabel = new HbLabel(this);
-    mStatusLabel->setAlignment(Qt::AlignLeft);
-    statusLayout->setMaximumHeight(15);
-
-    HbLabel *statusHeader = new HbLabel("Status: ");
-    statusHeader->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
-    statusLayout->addItem(statusHeader);
-    statusLayout->addItem(mStatusLabel);
-
-    HbGridView *activities = new HbGridView();
-    connect(activities, SIGNAL(activated(QModelIndex)), this, SLOT(itemPressed(QModelIndex)));
-    activities->setRowCount(1);
-    activities->setColumnCount(1);
-
-    activities->setScrollDirections(Qt::Horizontal);
-
-    mModel = new QStandardItemModel(this);
-    activities->setModel(mModel);
-
-    layout->addItem(statusLayout);
-    layout->addItem(activities);
-
-    setLayout(layout);
-    qApp->installEventFilter(this);
-    getActivitiesList();
-}
-
-ActivityLauncherView::~ActivityLauncherView()
-{
-    delete mActivityManager;
-}
-
-void ActivityLauncherView::getActivitiesList()
-{
-    mStatusLabel->setPlainText("Fetching activities");
-    mCurrentActivities.clear();
-    QMetaObject::invokeMethod(mActivityManager, "activitiesList", Q_RETURN_ARG(QList<QVariantHash>, mCurrentActivities));
-    mModel->clear();
-
-    foreach(const QVariantHash& activityEntry, mCurrentActivities) {
-        QStandardItem *newItem = new QStandardItem(QIcon(activityEntry.value("screenshot").value<QPixmap>()), QString("%1").arg(activityEntry.value(ActivityActivityKeyword).toInt()));
-        mModel->invisibleRootItem()->appendRow(newItem);
-    }
-    mStatusLabel->setPlainText(QString("Ready (%1 activities)").arg(mCurrentActivities.count()));
-}
-
-bool ActivityLauncherView::eventFilter(QObject *obj, QEvent *event)
-{
-    if (event->type() == QEvent::ApplicationActivate) {
-        getActivitiesList();
-    }
-    return QObject::eventFilter(obj, event);
-}
-
-void ActivityLauncherView::itemPressed(const QModelIndex &index)
-{
-    QVariantHash activity = mCurrentActivities.at(index.row());
-    int applicationId = activity.value(ActivityApplicationKeyword).toInt();
-    QString activityName = activity.value(ActivityActivityKeyword).toString();
-    QMetaObject::invokeMethod(mActivityManager, "launchActivity", Q_ARG(int, applicationId), Q_ARG(QString, activityName));
-}
--- a/activityfw/activitylauncher/activitylauncherview.h	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-#ifndef ACTIVITYLAUNCHERVIEW_H
-#define ACTIVITYLAUNCHERVIEW_H
-
-#include <hbview.h>
-#include <QVariant>
-
-class HbLabel;
-class QStandardItemModel;
-
-class ActivityLauncherView : public HbView
-{
-    Q_OBJECT
-
-public:
-    ActivityLauncherView(QGraphicsItem *parent = 0);
-    ~ActivityLauncherView();
-
-private slots:
-    void itemPressed(const QModelIndex &index);
-
-protected:
-    bool eventFilter(QObject *obj, QEvent *event);
-
-private:
-    void getActivitiesList();
-
-private:
-    QStandardItemModel *mModel;
-    QList<QVariantHash> mCurrentActivities;
-    HbLabel *mStatusLabel;
-
-    QObject *mActivityManager;
-};
-
-#endif // ACTIVITYLAUNCHERVIEW_H
--- a/activityfw/activitylauncher/main.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-
-#include <QCoreApplication>
-
-#include <hbapplication.h>
-#include <hbmainwindow.h>
-
-#include "activitylauncherview.h"
-
-int main(int argc, char *argv[])
-{
-    HbApplication app(argc, argv);
-
-    HbMainWindow mainWindow;
-    ActivityLauncherView mainView;
-    mainWindow.addView(&mainView);
-    mainWindow.show();
-
-    return app.exec();
-}
--- a/activityfw/activityserviceplugin/activityserviceplugin.pro	Fri Jun 11 13:58:37 2010 +0300
+++ b/activityfw/activityserviceplugin/activityserviceplugin.pro	Wed Jun 23 18:33:40 2010 +0300
@@ -23,7 +23,6 @@
 INCLUDEPATH += ./inc \
 
 HEADERS +=  ./inc/activityserviceplugin.h \
-            ./inc/activitydatastorage.h \
             ./inc/activityclient.h \
             ./inc/activityclient_p.h \
             ./inc/activitymanager.h \
@@ -31,7 +30,6 @@
             ./inc/applicationlauncher.h \
 
 SOURCES +=  ./src/activityserviceplugin.cpp \
-            ./src/activitydatastorage.cpp \
             ./src/activityclient.cpp \
             ./src/activityclient_p.cpp \
             ./src/activitymanager.cpp \
--- a/activityfw/activityserviceplugin/inc/activityclient_p.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/activityfw/activityserviceplugin/inc/activityclient_p.h	Wed Jun 23 18:33:40 2010 +0300
@@ -44,11 +44,6 @@
     QVariantHash parseCommandLine(const QStringList &commandLineParams) const;
 
 private:
-    void registerThumbnail(const QString &, QVariantHash&);
-    QString thumbnailName(const QString &) const;
-
-private:
-    ActivityDataStorage *mDataStorage;
     HsActivityDbClient *mServerClient;
     bool mIsconnected;
 };
--- a/activityfw/activityserviceplugin/inc/activitydatastorage.h	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-#ifndef ACTIVITYDATASTORAGE_H
-#define ACTIVITYDATASTORAGE_H
-
-#include <QVariant>
-#include <QString>
-
-class ActivityDataStorage
-{
-
-public:
-    ActivityDataStorage();
-    ~ActivityDataStorage();
-
-public:
-    bool addActivity(const QString &activityId, const QVariant &data);
-    bool removeActivity(const QString &activityId);
-    bool updateActivity(const QString &activityId, const QVariant &data);
-    QVariant activityData(const QString &activityId) const;
-
-private:
-    bool checkTables();
-    void recreateTables();
-
-};
-
-#endif // ACTIVITYDATASTORAGE_H
--- a/activityfw/activityserviceplugin/src/activityclient_p.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/activityfw/activityserviceplugin/src/activityclient_p.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -16,7 +16,6 @@
 */
 #include "activityclient_p.h"
 #include "activityclient.h"
-#include "activitydatastorage.h"
 #include <hsactivitydbclient.h>
 
 #include <QCoreApplication>
@@ -28,7 +27,6 @@
 
 ActivityClientPrivate::ActivityClientPrivate(ActivityClient *q) : QObject(q), mIsconnected(false)
 {
-    mDataStorage = new ActivityDataStorage();
     mServerClient = new HsActivityDbClient();
     mIsconnected = ( KErrNone == mServerClient->connect());
     if( mIsconnected) {
@@ -40,25 +38,20 @@
 ActivityClientPrivate::~ActivityClientPrivate()
 {
     delete mServerClient;
-    delete mDataStorage;
 }
 
 bool ActivityClientPrivate::addActivity(const QString &activityId, const QVariant &data, const QVariantHash &parameters)
 {
     bool result(false);
     if (mIsconnected) {
-        result = mDataStorage->addActivity(activityId, data);
-        if ( result ) {
-            QVariantHash activity(parameters);
-            RProcess process;
-            registerThumbnail(activityId, activity);
-            activity.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId));
-            activity.insert(ActivityActivityKeyword, activityId);
-            int error = mServerClient->addActivity(activity);
-            result = error == KErrNone ? true : false;
-        }
+        QVariantHash privateData;
+        privateData.insert(ActivityDataKeyword, data);
+        QVariantHash publicData(parameters);
+        RProcess process;
+        publicData.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId));
+        publicData.insert(ActivityActivityKeyword, activityId);
+        result = (KErrNone == mServerClient->addActivity(privateData, publicData));
     }
-    // @todo make those operations atomic
     return result;
 }
 
@@ -66,20 +59,12 @@
 {
     bool result(false);
     if (mIsconnected) {
-        result = mDataStorage->removeActivity(activityId);
-        if ( result ) {            
-            QVariantHash activity;
-            RProcess process;
-            activity.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId));
-            activity.insert(ActivityActivityKeyword, activityId);
-            int error = mServerClient->removeActivity(activity);
-            result = error == KErrNone ? true : false;
-            if (result) {
-                result = QFile::remove(thumbnailName(activityId));
-            }
-        }
+        QVariantHash activity;
+        RProcess process;
+        activity.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId));
+        activity.insert(ActivityActivityKeyword, activityId);
+        result = (KErrNone == mServerClient->removeActivity(activity));
     }
-    // @todo make those operations atomic
     return result;
 }
 
@@ -87,18 +72,14 @@
 {
     bool result(false);
     if (mIsconnected) {
-        result = mDataStorage->updateActivity(activityId, data);
-        if ( result ) {
-            QVariantHash activity(parameters);
-            RProcess process;
-            registerThumbnail(activityId, activity);
-            activity.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId));
-            activity.insert(ActivityActivityKeyword, activityId);
-            int error = mServerClient->updateActivity(activity);
-            result = error == KErrNone ? true : false;
-        }
+        QVariantHash privateData;
+        privateData.insert(ActivityDataKeyword, data);
+        QVariantHash publicData(parameters);
+        RProcess process;
+        publicData.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId));
+        publicData.insert(ActivityActivityKeyword, activityId);
+        result = (KErrNone == mServerClient->updateActivity(privateData, publicData));
     }
-    // @todo make those operations atomic
     return result;
 }
 
@@ -116,7 +97,15 @@
 
 QVariant ActivityClientPrivate::activityData(const QString &activityId) const
 {
-    return mIsconnected ? mDataStorage->activityData(activityId) : QVariant();
+    QVariant data;
+    if (mIsconnected) {
+        QVariantHash activity;
+        RProcess process;
+        activity.insert(ActivityApplicationKeyword, static_cast<int>(process.SecureId().iId));
+        activity.insert(ActivityActivityKeyword, activityId);
+        mServerClient->activityData(data, activity);
+    }
+    return data;
 }
 
 QVariantHash ActivityClientPrivate::parseCommandLine(const QStringList &commandLineParams) const
@@ -138,26 +127,3 @@
     }
     return QVariantHash();
 }
-
-void ActivityClientPrivate::registerThumbnail(const QString &name, QVariantHash &activity)
-{
-    QVariantHash::const_iterator findIterator(activity.constFind(ActivityScreenshotKeyword));
-    if (activity.constEnd() != findIterator   &&
-        findIterator.value().canConvert<QPixmap>()) {
-        const QString thumbnailManagerName = thumbnailName(name);
-        if (findIterator.value().value<QPixmap>().save(thumbnailManagerName)) {
-            activity.insert(ActivityScreenshotKeyword, thumbnailManagerName);
-        } else {
-            activity.remove(ActivityScreenshotKeyword);
-        }
-    }
-}
-
-QString ActivityClientPrivate::thumbnailName(const QString &activityId) const
-{
-    return QDir::toNativeSeparators(qApp->applicationDirPath() + 
-                                    "/" + 
-                                    QString::number(qHash(activityId), 16) + 
-                                    ".png");
-}
-
--- a/activityfw/activityserviceplugin/src/activitydatastorage.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,171 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-#include "activitydatastorage.h"
-
-#include <QSqlDatabase>
-#include <QSqlQuery>
-#include <QSqlError>
-#include <QStringList>
-
-const char KConnectionName[] = "ActivityDataStorage";
-
-ActivityDataStorage::ActivityDataStorage()
-{
-    QSqlDatabase database;
-    if (QSqlDatabase::contains(KConnectionName)) {
-        database = QSqlDatabase::database(KConnectionName);
-    } else {
-        database = QSqlDatabase::addDatabase("QSQLITE", KConnectionName);
-        database.setDatabaseName("activitydatastorage.db");
-        if (!database.open()) {
-            qFatal(qPrintable(database.lastError().text()));
-        }
-    }
-
-    if (!checkTables()) {
-        recreateTables();
-    }
-}
-
-ActivityDataStorage::~ActivityDataStorage()
-{
-    QSqlDatabase::database(KConnectionName).close();
-}
-
-bool ActivityDataStorage::addActivity(const QString &activityId, const QVariant &data)
-{
-    QSqlDatabase database = QSqlDatabase::database(KConnectionName);
-
-    QByteArray streamedData;
-    {
-        QDataStream stream(&streamedData, QIODevice::WriteOnly);
-        stream << data;
-    }
-
-    // insert data
-    QSqlQuery query(database);
-    if (!query.prepare("INSERT INTO Activities(Name, Data) VALUES(:Name, :Data)")) {
-        qCritical(qPrintable(query.lastError().text()));
-        return false;
-    }
-    query.bindValue(":Name", activityId);
-    query.bindValue(":Data", streamedData);
-    if (!query.exec()) {
-        qCritical(qPrintable(query.lastError().text()));
-        return false;
-    }
-
-    return true;
-}
-
-bool ActivityDataStorage::removeActivity(const QString &activityId)
-{
-    QString sqlCommand = QString("DELETE FROM Activities WHERE Name = '%1'").arg(activityId);
-    QSqlQuery query(QSqlDatabase::database(KConnectionName));
-    if (!query.exec(sqlCommand)) {
-        qCritical(qPrintable(query.lastError().text()));
-        return false;
-    }
-    return query.numRowsAffected() > 0;
-}
-
-bool ActivityDataStorage::updateActivity(const QString &activityId, const QVariant &data)
-{
-    QSqlDatabase database = QSqlDatabase::database(KConnectionName);
-
-    QByteArray streamedData;
-    {
-        QDataStream stream(&streamedData, QIODevice::WriteOnly);
-        stream << data;
-    }
-
-    // update data
-    QSqlQuery query(database);
-    if (!query.prepare("UPDATE Activities SET Data = :Data WHERE Name = :Name")) {
-        qCritical(qPrintable(query.lastError().text()));
-        return false;
-    }
-    query.bindValue(":Data", streamedData);
-    query.bindValue(":Name", activityId);
-    if (!query.exec()) {
-        qCritical(qPrintable(query.lastError().text()));
-        return false;
-    }
-
-    return query.numRowsAffected() > 0;
-}
-
-QVariant ActivityDataStorage::activityData(const QString &activityId) const
-{
-    QSqlDatabase database = QSqlDatabase::database(KConnectionName);
-    QSqlQuery query(database);
-    if (!query.exec(QString("SELECT Data FROM Activities WHERE Name = '%1'").arg(activityId))) {
-        qCritical(qPrintable(query.lastError().text()));
-        return QVariant();
-    }
-
-    QVariant result;
-    if (query.next()) {
-        QByteArray data(query.value(0).toByteArray());
-        QDataStream stream(&data, QIODevice::ReadOnly);
-        stream >> result;
-    }
-    return result;
-}
-
-bool ActivityDataStorage::checkTables()
-{
-    QStringList expectedTables("Activities");
-    QStringList actualTables = QSqlDatabase::database(KConnectionName).tables();
-    return (expectedTables == actualTables);
-}
-
-void ActivityDataStorage::recreateTables()
-{
-    QSqlDatabase database = QSqlDatabase::database(KConnectionName);
-
-    if (!database.transaction()) {
-        qFatal(qPrintable(database.lastError().text()));
-    }
-
-    // drop any existing tables
-    {
-        QSqlQuery dropQuery(database);
-        foreach(const QString &tableName, database.tables()) {
-            if (!dropQuery.exec(QString("DROP TABLE %1").arg(tableName))) {
-                qFatal(qPrintable(dropQuery.lastError().text()));
-            }
-        }
-    }
-
-    // create new table
-    {
-        QSqlQuery createQuery(database);
-        QString statement(
-            "CREATE TABLE Activities("
-            "Name TEXT NOT NULL PRIMARY KEY UNIQUE,"
-            "Data BLOB NOT NULL)");
-
-        if (!createQuery.exec(statement)) {
-            qFatal(qPrintable(createQuery.lastError().text()));
-        }
-    }
-
-    if (!database.commit()) {
-        qFatal(qPrintable(database.lastError().text()));
-    }
-}
--- a/activityfw/tsutils/bwins/tsutilsu.def	Fri Jun 11 13:58:37 2010 +0300
+++ b/activityfw/tsutils/bwins/tsutilsu.def	Wed Jun 23 18:33:40 2010 +0300
@@ -1,7 +1,18 @@
 EXPORTS
-	?NewLC@CTsGraphicFileScalingHandler@@SAPAV1@AAVMImageReadyCallBack@@AAVRFs@@ABVTDesC16@@ABVTDesC8@@ABVTSize@@W4TKindOfScaling@1@@Z @ 1 NONAME ; class CTsGraphicFileScalingHandler * CTsGraphicFileScalingHandler::NewLC(class MImageReadyCallBack &, class RFs &, class TDesC16 const &, class TDesC8 const &, class TSize const &, enum CTsGraphicFileScalingHandler::TKindOfScaling)
-	?NewL@CTsGraphicFileScalingHandler@@SAPAV1@AAVMImageReadyCallBack@@AAVRFs@@ABVTDesC16@@ABVTDesC8@@ABVTSize@@W4TKindOfScaling@1@@Z @ 2 NONAME ; class CTsGraphicFileScalingHandler * CTsGraphicFileScalingHandler::NewL(class MImageReadyCallBack &, class RFs &, class TDesC16 const &, class TDesC8 const &, class TSize const &, enum CTsGraphicFileScalingHandler::TKindOfScaling)
-	?NewLC@CTsGraphicFileScalingHandler@@SAPAV1@AAVMImageReadyCallBack@@ABVCFbsBitmap@@ABVTSize@@W4TKindOfScaling@1@@Z @ 3 NONAME ; class CTsGraphicFileScalingHandler * CTsGraphicFileScalingHandler::NewLC(class MImageReadyCallBack &, class CFbsBitmap const &, class TSize const &, enum CTsGraphicFileScalingHandler::TKindOfScaling)
-	?NewL@CTsGraphicFileScalingHandler@@SAPAV1@AAVMImageReadyCallBack@@ABVCFbsBitmap@@ABVTSize@@W4TKindOfScaling@1@@Z @ 4 NONAME ; class CTsGraphicFileScalingHandler * CTsGraphicFileScalingHandler::NewL(class MImageReadyCallBack &, class CFbsBitmap const &, class TSize const &, enum CTsGraphicFileScalingHandler::TKindOfScaling)
-	??1CTsGraphicFileScalingHandler@@UAE@XZ @ 5 NONAME ; CTsGraphicFileScalingHandler::~CTsGraphicFileScalingHandler(void)
+	?WsSession@CTsResourceManager@@UAEAAVRWsSession@@XZ @ 1 NONAME ; class RWsSession & CTsResourceManager::WsSession(void)
+	?ApaSession@CTsResourceManager@@UAEAAVRApaLsSession@@XZ @ 2 NONAME ; class RApaLsSession & CTsResourceManager::ApaSession(void)
+	?BaseConstructL@CTsWindowGroupsObserver@@IAEXXZ @ 3 NONAME ; void CTsWindowGroupsObserver::BaseConstructL(void)
+	??1CTsWindowGroupsObserver@@UAE@XZ @ 4 NONAME ; CTsWindowGroupsObserver::~CTsWindowGroupsObserver(void)
+	??1CTsWindowGroupsMonitor@@UAE@XZ @ 5 NONAME ; CTsWindowGroupsMonitor::~CTsWindowGroupsMonitor(void)
+	?NewL@CTsGraphicFileScalingHandler@@SAPAV1@AAVMImageReadyCallBack@@AAVRFs@@ABVTDesC16@@ABVTDesC8@@ABVTSize@@W4TKindOfScaling@1@@Z @ 6 NONAME ; class CTsGraphicFileScalingHandler * CTsGraphicFileScalingHandler::NewL(class MImageReadyCallBack &, class RFs &, class TDesC16 const &, class TDesC8 const &, class TSize const &, enum CTsGraphicFileScalingHandler::TKindOfScaling)
+	?SubscribeL@CTsWindowGroupsMonitor@@UAEXAAVMTsWindowGroupsObserver@@@Z @ 7 NONAME ; void CTsWindowGroupsMonitor::SubscribeL(class MTsWindowGroupsObserver &)
+	?NewL@CTsWindowGroupsMonitor@@SAPAV1@AAVMTsResourceManager@@@Z @ 8 NONAME ; class CTsWindowGroupsMonitor * CTsWindowGroupsMonitor::NewL(class MTsResourceManager &)
+	??1CTsGraphicFileScalingHandler@@UAE@XZ @ 9 NONAME ; CTsGraphicFileScalingHandler::~CTsGraphicFileScalingHandler(void)
+	?NewLC@CTsGraphicFileScalingHandler@@SAPAV1@AAVMImageReadyCallBack@@ABVCFbsBitmap@@ABVTSize@@W4TKindOfScaling@1@@Z @ 10 NONAME ; class CTsGraphicFileScalingHandler * CTsGraphicFileScalingHandler::NewLC(class MImageReadyCallBack &, class CFbsBitmap const &, class TSize const &, enum CTsGraphicFileScalingHandler::TKindOfScaling)
+	?NewL@CTsGraphicFileScalingHandler@@SAPAV1@AAVMImageReadyCallBack@@ABVCFbsBitmap@@ABVTSize@@W4TKindOfScaling@1@@Z @ 11 NONAME ; class CTsGraphicFileScalingHandler * CTsGraphicFileScalingHandler::NewL(class MImageReadyCallBack &, class CFbsBitmap const &, class TSize const &, enum CTsGraphicFileScalingHandler::TKindOfScaling)
+	?NewLC@CTsGraphicFileScalingHandler@@SAPAV1@AAVMImageReadyCallBack@@AAVRFs@@ABVTDesC16@@ABVTDesC8@@ABVTSize@@W4TKindOfScaling@1@@Z @ 12 NONAME ; class CTsGraphicFileScalingHandler * CTsGraphicFileScalingHandler::NewLC(class MImageReadyCallBack &, class RFs &, class TDesC16 const &, class TDesC8 const &, class TSize const &, enum CTsGraphicFileScalingHandler::TKindOfScaling)
+	??0CTsWindowGroupsObserver@@IAE@AAVMTsWindowGroupsMonitor@@@Z @ 13 NONAME ; CTsWindowGroupsObserver::CTsWindowGroupsObserver(class MTsWindowGroupsMonitor &)
+	?NewL@CTsResourceManager@@SAPAV1@XZ @ 14 NONAME ; class CTsResourceManager * CTsResourceManager::NewL(void)
+	?Cancel@CTsWindowGroupsMonitor@@UAEXAAVMTsWindowGroupsObserver@@@Z @ 15 NONAME ; void CTsWindowGroupsMonitor::Cancel(class MTsWindowGroupsObserver &)
+	??1CTsResourceManager@@UAE@XZ @ 16 NONAME ; CTsResourceManager::~CTsResourceManager(void)
 
--- a/activityfw/tsutils/eabi/tsutilsu.def	Fri Jun 11 13:58:37 2010 +0300
+++ b/activityfw/tsutils/eabi/tsutilsu.def	Wed Jun 23 18:33:40 2010 +0300
@@ -1,11 +1,38 @@
 EXPORTS
-	_ZN28CTsGraphicFileScalingHandler4NewLER19MImageReadyCallBackR3RFsRK7TDesC16RK6TDesC8RK5TSizeNS_14TKindOfScalingE @ 1 NONAME
-	_ZN28CTsGraphicFileScalingHandler4NewLER19MImageReadyCallBackRK10CFbsBitmapRK5TSizeNS_14TKindOfScalingE @ 2 NONAME
-	_ZN28CTsGraphicFileScalingHandler5NewLCER19MImageReadyCallBackR3RFsRK7TDesC16RK6TDesC8RK5TSizeNS_14TKindOfScalingE @ 3 NONAME
-	_ZN28CTsGraphicFileScalingHandler5NewLCER19MImageReadyCallBackRK10CFbsBitmapRK5TSizeNS_14TKindOfScalingE @ 4 NONAME
-	_ZN28CTsGraphicFileScalingHandlerD0Ev @ 5 NONAME
-	_ZN28CTsGraphicFileScalingHandlerD1Ev @ 6 NONAME
-	_ZN28CTsGraphicFileScalingHandlerD2Ev @ 7 NONAME
-	_ZTI28CTsGraphicFileScalingHandler @ 8 NONAME
-	_ZTV28CTsGraphicFileScalingHandler @ 9 NONAME
+	_ZN18CTsResourceManager10ApaSessionEv @ 1 NONAME
+	_ZN18CTsResourceManager4NewLEv @ 2 NONAME
+	_ZN18CTsResourceManager9WsSessionEv @ 3 NONAME
+	_ZN18CTsResourceManagerD0Ev @ 4 NONAME
+	_ZN18CTsResourceManagerD1Ev @ 5 NONAME
+	_ZN18CTsResourceManagerD2Ev @ 6 NONAME
+	_ZN22CTsWindowGroupsMonitor10SubscribeLER23MTsWindowGroupsObserver @ 7 NONAME
+	_ZN22CTsWindowGroupsMonitor4NewLER18MTsResourceManager @ 8 NONAME
+	_ZN22CTsWindowGroupsMonitor6CancelER23MTsWindowGroupsObserver @ 9 NONAME
+	_ZN22CTsWindowGroupsMonitorD0Ev @ 10 NONAME
+	_ZN22CTsWindowGroupsMonitorD1Ev @ 11 NONAME
+	_ZN22CTsWindowGroupsMonitorD2Ev @ 12 NONAME
+	_ZN23CTsWindowGroupsObserver14BaseConstructLEv @ 13 NONAME
+	_ZN23CTsWindowGroupsObserverC2ER22MTsWindowGroupsMonitor @ 14 NONAME
+	_ZN23CTsWindowGroupsObserverD0Ev @ 15 NONAME
+	_ZN23CTsWindowGroupsObserverD1Ev @ 16 NONAME
+	_ZN23CTsWindowGroupsObserverD2Ev @ 17 NONAME
+	_ZN28CTsGraphicFileScalingHandler4NewLER19MImageReadyCallBackR3RFsRK7TDesC16RK6TDesC8RK5TSizeNS_14TKindOfScalingE @ 18 NONAME
+	_ZN28CTsGraphicFileScalingHandler4NewLER19MImageReadyCallBackRK10CFbsBitmapRK5TSizeNS_14TKindOfScalingE @ 19 NONAME
+	_ZN28CTsGraphicFileScalingHandler5NewLCER19MImageReadyCallBackR3RFsRK7TDesC16RK6TDesC8RK5TSizeNS_14TKindOfScalingE @ 20 NONAME
+	_ZN28CTsGraphicFileScalingHandler5NewLCER19MImageReadyCallBackRK10CFbsBitmapRK5TSizeNS_14TKindOfScalingE @ 21 NONAME
+	_ZN28CTsGraphicFileScalingHandlerD0Ev @ 22 NONAME
+	_ZN28CTsGraphicFileScalingHandlerD1Ev @ 23 NONAME
+	_ZN28CTsGraphicFileScalingHandlerD2Ev @ 24 NONAME
+	_ZTI18CTsResourceManager @ 25 NONAME
+	_ZTI22CTsWindowGroupsMonitor @ 26 NONAME
+	_ZTI23CTsWindowGroupsObserver @ 27 NONAME
+	_ZTI28CTsGraphicFileScalingHandler @ 28 NONAME
+	_ZTV18CTsResourceManager @ 29 NONAME
+	_ZTV22CTsWindowGroupsMonitor @ 30 NONAME
+	_ZTV23CTsWindowGroupsObserver @ 31 NONAME
+	_ZTV28CTsGraphicFileScalingHandler @ 32 NONAME
+	_ZThn28_N22CTsWindowGroupsMonitor10SubscribeLER23MTsWindowGroupsObserver @ 33 NONAME
+	_ZThn28_N22CTsWindowGroupsMonitor6CancelER23MTsWindowGroupsObserver @ 34 NONAME
+	_ZThn4_N18CTsResourceManager10ApaSessionEv @ 35 NONAME
+	_ZThn4_N18CTsResourceManager9WsSessionEv @ 36 NONAME
 
--- a/activityfw/tsutils/group/bld.inf	Fri Jun 11 13:58:37 2010 +0300
+++ b/activityfw/tsutils/group/bld.inf	Wed Jun 23 18:33:40 2010 +0300
@@ -18,6 +18,8 @@
 DEFAULT
 
 PRJ_EXPORTS
+../inc/tsresourcemanager.h |../../../inc/tsresourcemanager.h
+../inc/tswindowgroupsobserver.h |../../../inc/tswindowgroupsobserver.h
 ../inc/tsgraphicfilescalinghandler.h |../../../inc/tsgraphicfilescalinghandler.h
 
 PRJ_MMPFILES
--- a/activityfw/tsutils/group/tsutils.mmp	Fri Jun 11 13:58:37 2010 +0300
+++ b/activityfw/tsutils/group/tsutils.mmp	Wed Jun 23 18:33:40 2010 +0300
@@ -20,16 +20,23 @@
 
 CAPABILITY    CAP_GENERAL_DLL
 
+MW_LAYER_SYSTEMINCLUDE
+
 USERINCLUDE   ../inc
 
 SOURCEPATH    ../src
 SOURCE        tsgraphicfilescalinghandler.cpp
+SOURCE        tswindowgroupsmonitor.cpp
+SOURCE        tswindowgroupsobserver.cpp
+SOURCE        tsresourcemanager.cpp
 
 LIBRARY      euser.lib
 LIBRARY      bitmaptransforms.lib
 LIBRARY      imageconversion.lib
 LIBRARY      fbscli.lib
 LIBRARY      efsrv.lib
+LIBRARY      ws32.lib
+LIBRARY      apgrfx.lib
 
 //EXPORTUNFROZEN
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/activityfw/tsutils/inc/tsresourcemanager.h	Wed Jun 23 18:33:40 2010 +0300
@@ -0,0 +1,85 @@
+/*
+ * 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 :
+ *
+ */
+#ifndef TSRESOURCEMANAGER_H
+#define TSRESOURCEMANAGER_H
+
+#ifndef __E32SVR_H__
+#define __E32SVR_H__
+#endif
+#include <e32base.h>
+#include <e32event.h>
+#include <w32std.h>
+#include <apgcli.h>
+
+/**
+ * Interface decalre methods to access initialized OS resources
+ */
+class MTsResourceManager
+{
+public:
+    /**
+     * Access to initialized window server session
+     */
+    virtual RWsSession& WsSession() =0;
+    
+    /**
+     * Access to initilaized APA session
+     */
+    virtual RApaLsSession& ApaSession() =0;
+};
+
+/**
+ * Resource manager implemetatioin
+ */
+class CTsResourceManager: public CBase,
+                          public MTsResourceManager
+{
+public:
+    /**
+     * Two phase constructor
+     */
+    IMPORT_C static CTsResourceManager* NewL();
+    
+    /**
+     * Destructor
+     */
+    IMPORT_C ~CTsResourceManager();
+    
+    /**
+     * @see MTsResourceManager::WsSession
+     */
+    IMPORT_C RWsSession& WsSession();
+    
+    /**
+     * @see MTsResourceManager::ApaSession
+     */
+    IMPORT_C RApaLsSession& ApaSession();
+
+private:
+    /**
+     * Second phase constructor
+     */
+    void ConstructL();
+
+private:
+   RWsSession mWsSession;
+   RApaLsSession mApaSeesion;
+};
+
+
+
+#endif // TSRESOURCEMANAGER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/activityfw/tsutils/inc/tswindowgroupsobserver.h	Wed Jun 23 18:33:40 2010 +0300
@@ -0,0 +1,173 @@
+/*
+ * 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 :
+ *
+ */
+#ifndef TSWINDOWGROUPSOBSERVER_H
+#define TSWINDOWGROUPSOBSERVER_H
+
+#include "tsresourcemanager.h"
+
+/**
+ * Interface declare mathods to notify about window server events
+ */
+class MTsWindowGroupsObserver
+{
+public:
+    /**
+     * Method notidy about window group changes.
+     * @param rsc - resource manager
+     * @param wgs - list of window groups associated with running applications
+     */
+    virtual void HandleWindowGroupChanged(MTsResourceManager &rsc, 
+                                          const TArray<RWsSession::TWindowGroupChainInfo> & wgs) =0;
+};
+
+/**
+ * Interface declare methods to subscribe windo server events
+ */
+class MTsWindowGroupsMonitor
+{
+public:
+    /**
+     * Method make subscription for window server events
+     * @param observer - events observer
+     */
+    virtual void SubscribeL(MTsWindowGroupsObserver & observer) =0;
+    
+    /**
+     * Method cancel subscription for window server events
+     * @param observer - events observer
+     */
+    virtual void Cancel(MTsWindowGroupsObserver &) =0;
+};
+
+/**
+ * Window server observer implementation. Class automaticly subscribe / cancel subscription
+ * at construction / destruction level.
+ * 
+ */
+class CTsWindowGroupsObserver: public CBase,
+                               public MTsWindowGroupsObserver
+{
+public:
+    /**
+     * Destructor
+     * Function automaticly cancel subscrption to window server events
+     */
+    IMPORT_C ~CTsWindowGroupsObserver();
+    
+protected:
+    /**
+     * First phase constructor
+     */
+    IMPORT_C CTsWindowGroupsObserver(MTsWindowGroupsMonitor &);
+    
+    /**
+     * Second phase constructor.
+     * Function automaticly subscribe window server events
+     */
+    IMPORT_C void BaseConstructL();
+
+private:
+    MTsWindowGroupsMonitor & mMonitor;
+};
+
+/**
+ * Window server monitor implementation.
+ */
+class CTsWindowGroupsMonitor: public CActive, 
+                              public MTsWindowGroupsMonitor
+                              
+{
+public:
+    /**
+     * Two phase constructor
+     */
+    IMPORT_C static CTsWindowGroupsMonitor* NewL(MTsResourceManager &);
+    
+    /**
+     * Destructor
+     */
+    IMPORT_C ~CTsWindowGroupsMonitor();
+    
+    /**
+     * @see MTsWindowGroupsMonitor::SubscribeL
+     */
+    IMPORT_C void SubscribeL(MTsWindowGroupsObserver &);
+    
+    /**
+     * @see MTsWindowGroupsMonitor::Cancel
+     */
+    IMPORT_C void Cancel(MTsWindowGroupsObserver &);
+
+protected:
+    /**
+     * @see CActive::RunL
+     */
+    void RunL();
+    
+    /**
+     * @see CActive::DoCancel
+     */
+    void DoCancel();
+    
+    /**
+     * @see CActive::RunError
+     */
+    TInt RunError(TInt error);
+
+private:
+    /**
+     * First phase constructor
+     */
+    CTsWindowGroupsMonitor(MTsResourceManager &);
+    
+    /**
+     * Second phase constructor
+     */
+    void ConstructL();
+    
+    /**
+     * Function subscribe for event to window server and activate object
+     */
+    void Subscribe();
+    
+    /**
+     * Function provide window server event to observers
+     */
+    void ProvideEventL();
+    
+    /**
+     * Function provide window server event to observer
+     */
+    void ProvideEventL(TWsEvent, MTsWindowGroupsObserver &);
+
+private:
+    /**
+     * Registry of subscribed observers
+     */
+    RPointerArray<MTsWindowGroupsObserver> mObservers;
+    
+    /**
+     * Resources manager
+     */
+    MTsResourceManager &mResources;
+    
+    /**
+     * Monitor window group
+     */
+    RWindowGroup mWg;
+};
+#endif //TSWINDOWGROUPSOBSERVER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/activityfw/tsutils/src/tsresourcemanager.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -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 :
+ *
+ */
+#include "tswindowgroupsobserver.h"
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CTsResourceManager* CTsResourceManager::NewL()
+{
+    CTsResourceManager* self =new(ELeave) CTsResourceManager();
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CTsResourceManager::ConstructL()
+{
+    User::LeaveIfError(mWsSession.Connect());
+    User::LeaveIfError(mApaSeesion.Connect());
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CTsResourceManager::~CTsResourceManager()
+{
+    mApaSeesion.Close();
+    mWsSession.Close();
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C RWsSession& CTsResourceManager::WsSession()
+{
+    return mWsSession;
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C RApaLsSession& CTsResourceManager::ApaSession()
+{
+    return mApaSeesion;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/activityfw/tsutils/src/tswindowgroupsmonitor.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -0,0 +1,176 @@
+/*
+ * 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 :
+ *
+ */
+#include "tswindowgroupsobserver.h"
+#include <apgwgnam.h>
+
+const int KOrdinalPositionNoZOrder(-1);
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CTsWindowGroupsMonitor* CTsWindowGroupsMonitor::NewL(MTsResourceManager &resources)
+{
+    CTsWindowGroupsMonitor* self = new (ELeave) CTsWindowGroupsMonitor(resources);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+CTsWindowGroupsMonitor::CTsWindowGroupsMonitor(MTsResourceManager &resources)
+:
+    CActive(EPriorityStandard),
+    mResources(resources)
+{
+    CActiveScheduler::Add(this);
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CTsWindowGroupsMonitor::ConstructL()
+{
+    
+    // Initial window group
+    mWg = RWindowGroup (mResources.WsSession());
+    User::LeaveIfError (mWg.Construct ((TUint32)&mWg, EFalse));
+    mWg.SetOrdinalPosition (KOrdinalPositionNoZOrder);
+    mWg.EnableReceiptOfFocus (EFalse);
+    
+    // Hide window
+    CApaWindowGroupName* wn = CApaWindowGroupName::NewLC(mResources.WsSession());
+    wn->SetHidden (ETrue);
+    wn->SetWindowGroupName (mWg);
+    CleanupStack::PopAndDestroy (wn);
+    
+    // Window group change event
+    User::LeaveIfError (mWg.EnableGroupListChangeEvents());
+    Subscribe();
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CTsWindowGroupsMonitor::~CTsWindowGroupsMonitor()
+{
+    CActive::Cancel();
+    mWg.Close();
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CTsWindowGroupsMonitor::SubscribeL(MTsWindowGroupsObserver &observer)
+{
+    const TInt offset(mObservers.Find(&observer));
+    KErrNotFound == offset ? mObservers.AppendL(&observer) : 
+                             User::Leave(KErrAlreadyExists);
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CTsWindowGroupsMonitor::Cancel(MTsWindowGroupsObserver & observer)
+{
+    const TInt offset(mObservers.Find(&observer));
+    if (KErrNotFound != offset) {
+        mObservers.Remove(offset);
+    }
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CTsWindowGroupsMonitor::RunL()
+{
+    User::LeaveIfError(iStatus.Int());
+    ProvideEventL();
+    Subscribe();
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CTsWindowGroupsMonitor::DoCancel()
+{
+    if (IsActive()) {
+        mResources.WsSession().EventReadyCancel();
+    }
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+TInt CTsWindowGroupsMonitor::RunError(TInt error)
+{
+    if (!IsActive() && KErrCancel != error) {
+        Subscribe();
+    }
+    return KErrNone;
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CTsWindowGroupsMonitor::Subscribe()
+{
+    mResources.WsSession().EventReady( &iStatus );
+    SetActive();
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CTsWindowGroupsMonitor::ProvideEventL()
+{
+    TWsEvent wsEvent;
+    mResources.WsSession().GetEvent(wsEvent);
+    for (TInt iter(0); iter < mObservers.Count(); ++iter) {
+        ProvideEventL(wsEvent, *mObservers[iter]);
+    }
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CTsWindowGroupsMonitor::ProvideEventL(TWsEvent event, 
+                                          MTsWindowGroupsObserver &observer)
+{
+    RArray<RWsSession::TWindowGroupChainInfo> wgInfo;
+    CleanupClosePushL(wgInfo);
+    switch(event.Type()) {
+    case EEventWindowGroupListChanged:
+        User::LeaveIfError(mResources.WsSession().WindowGroupList(&wgInfo));
+        observer.HandleWindowGroupChanged(mResources, wgInfo.Array());
+        break;
+    }
+    CleanupStack::PopAndDestroy(&wgInfo);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/activityfw/tsutils/src/tswindowgroupsobserver.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -0,0 +1,43 @@
+/*
+ * 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 :
+ *
+ */
+#include "tswindowgroupsobserver.h"
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CTsWindowGroupsObserver::CTsWindowGroupsObserver(MTsWindowGroupsMonitor & monitor)
+:
+    mMonitor(monitor)
+{}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CTsWindowGroupsObserver::BaseConstructL()
+{
+    mMonitor.SubscribeL(*this);
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CTsWindowGroupsObserver::~CTsWindowGroupsObserver()
+{
+    mMonitor.Cancel(*this);
+}
--- a/appfoundation/appfoundation.pro	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,24 +0,0 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-#
-
-TEMPLATE = subdirs
-
-SUBDIRS+=  statemodel \
-           appruntimemodel
-
-CONFIG += ordered
-
-tests:include(appfoundation_tests.pri)
--- a/appfoundation/appfoundation_tests.pri	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-#
-
-SUBDIRS += ./appruntimemodel/tsrc \           
-           ./statemodel/tsrc
--- a/appfoundation/appruntimemodel/appruntimemodel.pri	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,21 +0,0 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-#
-
-HEADERS += ./inc/*.h \
-                     ../../homescreensrv_plat/appruntimemodel_api/*.h
-
-SOURCES += ./src/*.cpp
-
--- a/appfoundation/appruntimemodel/appruntimemodel.pro	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-#
-
-TEMPLATE = lib
-DEPENDPATH += . \
-              inc \
-              src
-INCLUDEPATH += . \
-               inc 
-               
-symbian: {
-TARGET.UID3 = 0x20022F37
-}
-
-# Sources
-include(appruntimemodel.pri)
-include(../../common.pri)
-
-DEFINES += HSRUNTIMEMODEL_LIB
-
-QT += xml
-
--- a/appfoundation/appruntimemodel/inc/hsruntimefactory_p.h	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  HsRuntime factory private implementation..
-*
-*/
-
-
-#ifndef HSRUNTIMEFACTORY_P_H
-#define HSRUNTIMEFACTORY_P_H
-
-#include "hsiruntimeprovider.h"
-
-class HsRuntimeFactory;
-class IHsRuntimeProvider;
-
-class HsRuntimeFactoryPrivate : public QObject
-{
-    Q_OBJECT
-    
-public:
-    HsRuntimeFactoryPrivate(HsRuntimeFactory* aPublic);
-    ~HsRuntimeFactoryPrivate();
-    
-    QList<HsRuntimeToken> runtimes();
-    HsRuntime* createRuntime(const HsRuntimeToken& aToken);
-    IHsRuntimeProvider* loadProviderFromPlugin(const QString& aPluginName);
-
-
-private:
-    Q_DISABLE_COPY(HsRuntimeFactoryPrivate)
-
-public:
-    HsRuntimeFactory* mQ;
-    QString mPluginManifestDirectory;
-    QString mPluginDirectory;
-};
-
-#endif
--- a/appfoundation/appruntimemodel/inc/hsruntimeprovidermanifest.h	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  HsRuntime provider manifest.
-*
-*/
-
-
-#ifndef HSRUNTIMEPROVIDERMANIFEST_H
-#define HSRUNTIMEPROVIDERMANIFEST_H
-
-#include <QObject>
-
-#include "hsruntimemodel_global.h"
-#include "hsiruntimeprovider.h"
-
-class HsRuntimeProviderManifestPrivate;
-
-class HSRUNTIMEMODEL_EXPORT HsRuntimeProviderManifest : public QObject
-{
-    Q_OBJECT
-
-public:
-
-    HsRuntimeProviderManifest(QObject* aParent = 0);   
-    virtual ~HsRuntimeProviderManifest();
-
-    bool loadFromXml(const QString& aFileName) const;
-    QList<HsRuntimeToken> runtimes() const;
-    bool loadOnQuery() const;
-
-private:
-    Q_DISABLE_COPY(HsRuntimeProviderManifest)
-
-private:
-    HsRuntimeProviderManifestPrivate* mD;
-    friend class HsRuntimeProviderManifestPrivate;
-
-};
-
-#endif
--- a/appfoundation/appruntimemodel/inc/hsruntimeprovidermanifest_p.h	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  HsRuntime provider manifest private implementation.
-*
-*/
-
-
-#ifndef HSRUNTIMEPROVIDERMANIFEST_P_H
-#define HSRUNTIMEPROVIDERMANIFEST_P_H
-
-#include <QDomElement>
-
-#include "hsiruntimeprovider.h"
-
-class HsRuntimeProviderManifest;
-
-class HsRuntimeProviderManifestPrivate : public QObject
-{
-    Q_OBJECT
-    
-public:
-    HsRuntimeProviderManifestPrivate(HsRuntimeProviderManifest* aPublic);
-    ~HsRuntimeProviderManifestPrivate();
-
-    QList<HsRuntimeToken> runtimes() const;
-    bool loadFromXml(const QString& aFileName);
-
-private:
-    QString parseAttribute(QDomElement& aElement, const QString& aAttributeName, bool aIsRequired = true) const;
-    Q_DISABLE_COPY(HsRuntimeProviderManifestPrivate)
-
-public:
-
-    HsRuntimeProviderManifest* mQ;
-    QList<HsRuntimeToken> mRuntimeTokens;
-    bool mLoadOnQuery;
-
-};
-
-#endif
--- a/appfoundation/appruntimemodel/src/hsruntimefactory.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,228 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  HsRuntime factory.
-*
-*/
-
-
-#include "hsruntimefactory.h"
-#include "hsruntimefactory_p.h"
-#include "hsruntimeprovidermanifest.h"
-#include "hstest_global.h"
-
-#include <QStringList>
-#include <QDir>
-#include <QPluginLoader>
-
-
-HsRuntimeFactoryPrivate::HsRuntimeFactoryPrivate(HsRuntimeFactory* aPublic)
-    : QObject(aPublic),
-      mQ(aPublic)
-{
-
-}
-
-
-HsRuntimeFactoryPrivate::~HsRuntimeFactoryPrivate()
-{
-
-}
-
-QList<HsRuntimeToken> HsRuntimeFactoryPrivate::runtimes()
-{
-    QStringList pluginPaths;
-
-    //Check plugin dirs from root of different drives
-    QFileInfoList drives = QDir::drives();
-    for(int i=0; i < drives.count(); i++)
-    {
-        QFileInfo drive = drives.at(i);
-        QString driveLetter = drive.absolutePath();
-        QString path = driveLetter + mPluginManifestDirectory;
-        if(QDir(path).exists())
-        {
-            pluginPaths << path;
-        }
-    }
-
-    //Check plugin dir relative to current dir
-    if(QDir(mPluginManifestDirectory).exists() && !pluginPaths.contains(QDir(mPluginManifestDirectory).absolutePath()))
-    {
-        pluginPaths << mPluginManifestDirectory;
-    }
-
-    QList<HsRuntimeToken> runtimes;
-
-    for(int h=0; h < pluginPaths.count(); h++)
-    {
-        QString path = pluginPaths.at(h);
-        QDir dir(path);
-        QStringList filters("*.manifest");
-
-        for(int i=0; i < dir.entryList(filters, QDir::Files).count(); ++i)
-        {
-            QString fileName = dir.entryList(filters, QDir::Files).at(i);
-
-            HsRuntimeProviderManifest manifest;
-            manifest.loadFromXml(dir.absoluteFilePath(fileName));
-
-            if(manifest.loadOnQuery())
-            {
-                QList<HsRuntimeToken> tokens = manifest.runtimes();
-                for(int j=0; j < tokens.count(); ++j)
-                {
-                    HsRuntimeToken token = tokens.at(j);
-                    IHsRuntimeProvider* provider = loadProviderFromPlugin(token.mLibrary);
-                    if(provider)
-                    {
-                        runtimes << provider->runtimes();
-                        delete provider;
-                    }
-                }
-            }
-            else
-            {
-                runtimes << manifest.runtimes();
-            }
-        }
-    }
-    return runtimes;
-}
-
-HsRuntime* HsRuntimeFactoryPrivate::createRuntime(const HsRuntimeToken& aToken)
-{
-    IHsRuntimeProvider* provider = loadProviderFromPlugin(aToken.mLibrary);
-    if(!provider)
-    {
-        HSDEBUG("Runtime creation failed - No provider.")
-        return 0;
-    }
-
-    HsRuntime* runtime = provider->createRuntime(aToken);
-    delete provider;
-    if(!runtime)
-    {
-        HSDEBUG("Runtime creation failed.")
-    }
-    return runtime;
-}
-
-IHsRuntimeProvider* HsRuntimeFactoryPrivate::loadProviderFromPlugin(const QString& aPluginName)
-{
-    QStringList pluginPaths;
-
-    //Check plugin dirs from root of different drives
-    QFileInfoList drives = QDir::drives();
-    for(int i=0; i < drives.count(); i++)
-    {
-        QFileInfo drive = drives.at(i);
-        QString driveLetter = drive.absolutePath();
-        QString path = driveLetter + mPluginDirectory;
-        if(QDir(path).exists())
-        {
-            pluginPaths << path;
-        }
-    }
-
-
-    //Check plugin dir relative to current dir
-    if(QDir(mPluginManifestDirectory).exists() && !pluginPaths.contains(QDir(mPluginDirectory).absolutePath()))
-    {
-        pluginPaths << mPluginDirectory;
-    }
-
-    IHsRuntimeProvider* provider = 0;
-    QPluginLoader loader;
-    QObject* plugin = 0;
-
-    for(int i=0; i < pluginPaths.count(); i++)
-    {
-        QString path = pluginPaths.at(i);
-        QString fileName = QDir(path).absoluteFilePath(aPluginName);
-
-        loader.setFileName(fileName);
-        plugin = loader.instance();
-        provider = qobject_cast<IHsRuntimeProvider*>(plugin);
-        if(provider)
-        {
-            return provider;
-        }
-
-        //Don't leak memory if provider not IHsRuntimeProvider
-        if(plugin)
-        {
-            HSDEBUG("Runtime provider load - !provider, deleting plugin.")
-            delete plugin;
-        }
-    }
-
-    HSDEBUG("Runtime provider load failed - Not found.")
-    return 0;
-}
-
-/*!
-    \class HsRuntimeFactory
-    \ingroup group_hsruntimemodel
-    \brief Finds and creates home screen runtimes.
-
-    HsRuntime factory finds home screen runtimes from HsRuntime provider 
-    plugins. The search is done based on given plugin manifest
-    and plugin binary directories. Found runtimes are returned as
-    a list of HsRuntime tokens. HsRuntime factory creates an instance of
-    a HsRuntime base on a HsRuntime token that is given to it.
-*/
-
-/*!
-    Constructor.
-    
-    \a aPluginManifestDirectory Directory that contains plugin manifests.
-    \a aPluginDirectory Directory that contains plugin binaries.
-    \a aParent Parent object.
-*/
-HsRuntimeFactory::HsRuntimeFactory(const QString& aPluginManifestDirectory,
-                               const QString& aPluginDirectory,
-                               QObject* aParent)
-    : QObject(aParent)
-{
-    mD = new HsRuntimeFactoryPrivate(this);
-    mD->mPluginManifestDirectory = aPluginManifestDirectory;
-    mD->mPluginDirectory = aPluginDirectory;
-}
-
-/*!
-    Destructor.    
-*/
-HsRuntimeFactory::~HsRuntimeFactory()
-{
-
-}
-
-/*!
-    Returns found runtimes as a list of HsRuntime tokens.    
-*/
-QList<HsRuntimeToken> HsRuntimeFactory::runtimes()
-{
-    return mD->runtimes();
-}
-
-/*!
-    Creates and returns a HsRuntime based on the given token.    
-    \a aToken Identifies the HsRuntime to be created.
-
-    Return The created HsRuntime.
-*/
-HsRuntime* HsRuntimeFactory::createRuntime(const HsRuntimeToken& aToken)
-{
-    return mD->createRuntime(aToken);
-}
--- a/appfoundation/appruntimemodel/src/hsruntimeprovidermanifest.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,174 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  HsRuntime provider manifest.
-*
-*/
-
-
-#include "hsruntimeprovidermanifest.h"
-#include "hsruntimeprovidermanifest_p.h"
-#include "hstest_global.h"
-
-#include <QDomDocument>
-#include <QFile>
-
-HsRuntimeProviderManifestPrivate::HsRuntimeProviderManifestPrivate(HsRuntimeProviderManifest* aPublic)
-    : QObject(aPublic),
-      mQ(aPublic),
-      mLoadOnQuery(false)
-{
-
-}
-
-HsRuntimeProviderManifestPrivate::~HsRuntimeProviderManifestPrivate()
-{
-
-}
-
-bool HsRuntimeProviderManifestPrivate::loadFromXml(const QString& aFileName)
-{
-    mRuntimeTokens.clear();
-
-    QFile file(aFileName);
-    if(!file.exists())
-    {
-        return false;
-    }
-
-    QDomDocument document;
-    if(!document.setContent(&file))
-    {
-        return false;
-    }
-
-    QDomElement element = document.documentElement();
-    if(element.tagName() != "runtimeprovider")
-    {
-        return false;
-    }
-
-    mLoadOnQuery = false;
-    QDomAttr attribute = element.attributeNode("loadonquery");
-	if(attribute.value().toLower() == "true")
-	{
-        mLoadOnQuery = true;
-	}
-
-    QList<HsRuntimeToken> tokens;
-    HsRuntimeToken token;
-
-    QDomNodeList runtimes = element.elementsByTagName("runtime");
-
-    for(int i = 0; i < runtimes.count(); ++i)
-    {
-        element = runtimes.at(i).toElement();
-        token.mLibrary = parseAttribute(element, "library");
-        token.mUri = parseAttribute(element, "uri");
-        tokens << token;
-    }
-
-    mRuntimeTokens = tokens;
-    return true;
-}
-
-QList<HsRuntimeToken> HsRuntimeProviderManifestPrivate::runtimes() const
-{
-    return mRuntimeTokens;
-}
-
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-//
-QString HsRuntimeProviderManifestPrivate::parseAttribute(QDomElement& aElement, 
-                                                       const QString& aAttributeName, 
-                                                       bool aIsRequired) const
-{
-    QDomAttr attribute = aElement.attributeNode(aAttributeName);
-    if(attribute.isNull() || attribute.value().isEmpty())
-    {
-        if(aIsRequired)
-        {
-            HSDEBUG("Required attribute missing")
-        }
-        else
-        {
-            HSDEBUG("Attribute missing")
-        }
-
-        return QString();        
-    }
-
-    return attribute.value();
-}
-
-
-/*!
-    \class HsRuntimeProviderManifest
-    \ingroup group_hsruntimemodel
-    \brief Loads home screen HsRuntime tokens from an XML manifest file.
-    Used by the HsRuntimeFactory for loading HsRuntime tokens from an XML
-    manifest file.
-        
-*/
-
-/*!
-    Constructor. Loads runtimes as HsRuntime tokens from the given
-    manifest file.
-    \a aParent Parent object.
-*/
-HsRuntimeProviderManifest::HsRuntimeProviderManifest(QObject* aParent)
-    : QObject(aParent)
-{
-    mD = new HsRuntimeProviderManifestPrivate(this);
-}
-
-
-/*!
-    Destructor.    
-*/
-HsRuntimeProviderManifest::~HsRuntimeProviderManifest()
-{
-
-}
-
-/*!
-    return loaded runtimes as HsRuntime tokens.    
-*/
-QList<HsRuntimeToken> HsRuntimeProviderManifest::runtimes() const
-{
-    return mD->runtimes();
-}
-
-/*!
-    Tells if the HsRuntime tokens must be asked from plugin
-    instead of manifest file. 
-
-    return True if loading required, false otherwise.
-*/
-bool HsRuntimeProviderManifest::loadOnQuery() const
-{
-	return mD->mLoadOnQuery;
-}
-
-
-/*!
-    Loads runtimes as HsRuntime tokens from a manifest file.    
-    \a aFileName Manifest file name.
-
-    return true if load was succesfull, false otherwise
-*/
-bool HsRuntimeProviderManifest::loadFromXml(const QString& aFileName) const
-{
-	return mD->loadFromXml(aFileName);
-}
--- a/appfoundation/statemodel/inc/hsstatefactory_p.h	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  State factory private implementation.
-*
-*/
-
-
-#ifndef HSSTATEFACTORY_P_H
-#define HSSTATEFACTORY_P_H
-
-#include "hsistateprovider.h"
-
-class QState;
-class HsStateFactory;
-class IHsStateProvider;
-
-class HsStateFactoryPrivate : public QObject
-{
-    Q_OBJECT
-
-public:
-
-    HsStateFactoryPrivate(HsStateFactory* aPublic);
-    ~HsStateFactoryPrivate();
-
-private:
-
-    Q_DISABLE_COPY(HsStateFactoryPrivate)
-
-public:
-    QList<HsStateToken> states();
-    QState* createState(const HsStateToken& aToken);
-    IHsStateProvider* loadProviderFromPlugin(const QString& aPluginName);
-
-public:
-    HsStateFactory* mQ;
-    QString mPluginManifestDirectory;
-    QString mPluginDirectory;
-
-};
-
-#endif
--- a/appfoundation/statemodel/inc/hsstateprovidermanifest.h	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,50 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  State provider manifest.
-*
-*/
-
-
-#ifndef HSSTATEPROVIDERMANIFEST_H
-#define HSSTATEPROVIDERMANIFEST_H
-
-#include <QObject>
-
-#include "hsstatemodel_global.h"
-#include "hsistateprovider.h"
-
-class HsStateProviderManifestPrivate;
-
-class HSSTATEMODEL_EXPORT HsStateProviderManifest : public QObject
-{
-    Q_OBJECT
-
-public:
-    HsStateProviderManifest(QObject* aParent = 0);
-    virtual ~HsStateProviderManifest();
-
-    QList<HsStateToken> states() const;
-    bool loadOnQuery() const;
-    bool loadFromXml(const QString& aFileName);
-
-private:
-    Q_DISABLE_COPY(HsStateProviderManifest)
-
-private:
-    HsStateProviderManifestPrivate* mD;
-    friend class HsStateProviderManifestPrivate;
-
-};
-
-#endif
--- a/appfoundation/statemodel/inc/hsstateprovidermanifest_p.h	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  State provider manifest private implementation.
-*
-*/
-
-
-#ifndef HSSTATEPROVIDERMANIFEST_P_H
-#define HSSTATEPROVIDERMANIFEST_P_H
-
-#include <QDomElement>
-
-#include "hsistateprovider.h"
-
-class HsStateProviderManifest;
-class HsStateProviderManifestPrivate : public QObject
-{
-    Q_OBJECT
-    
-public:
-    HsStateProviderManifestPrivate(HsStateProviderManifest* aPublic);
-    ~HsStateProviderManifestPrivate();
-
-    bool loadFromXml(const QString& aFileName);
-    QList<HsStateToken> states() const;
-    
-private:
-    QString parseAttribute(QDomElement& aElement, const QString& aAttributeName, bool aIsRequired = true) const;
-    Q_DISABLE_COPY(HsStateProviderManifestPrivate)
-
-public:
-    HsStateProviderManifest* mQ;
-    QList<HsStateToken> mStateTokens;
-    bool mLoadOnQuery;
-};
-
-#endif
--- a/appfoundation/statemodel/src/hsstatefactory.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,225 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  State factory.
-*
-*/
-
-#include <QStringList>
-#include <QDir>
-#include <QPluginLoader>
-#include <QState>
-
-#include "hsstatefactory.h"
-#include "hsstatefactory_p.h"
-#include "hsstateprovidermanifest.h"
-#include "hstest_global.h"
-
-HsStateFactoryPrivate::HsStateFactoryPrivate(HsStateFactory* aPublic)
-    : QObject(aPublic),
-      mQ(aPublic)
-{
-
-}
-
-HsStateFactoryPrivate::~HsStateFactoryPrivate()
-{
-
-}
-
-QList<HsStateToken> HsStateFactoryPrivate::states()
-{
-    QStringList pluginPaths;
-
-    //Check plugin dirs from root of different drives
-    QFileInfoList drives = QDir::drives();
-    for(int i=0; i < drives.count(); i++)
-    {
-        QFileInfo drive = drives.at(i);
-        QString driveLetter = drive.absolutePath();
-        QString path = driveLetter + mPluginManifestDirectory;
-        if(QDir(path).exists())
-        {
-            pluginPaths << path;
-        }
-    }
-
-    //Check plugin dir relative to current dir
-    if(QDir(mPluginManifestDirectory).exists() && !pluginPaths.contains(QDir(mPluginManifestDirectory).absolutePath()))
-    {
-        pluginPaths << mPluginManifestDirectory;
-    }
-
-    QList<HsStateToken> states;
-
-    for(int h=0; h < pluginPaths.count(); h++)
-    {
-        QString path = pluginPaths.at(h);
-        QDir dir(path);
-        QStringList filters("*.manifest");
-
-        for(int i=0; i < dir.entryList(filters, QDir::Files).count(); ++i)
-        {
-            QString fileName = dir.entryList(filters, QDir::Files).at(i);
-
-            HsStateProviderManifest manifest;
-            manifest.loadFromXml(dir.absoluteFilePath(fileName));
-
-            if(manifest.loadOnQuery())
-            {
-                QList<HsStateToken> tokens = manifest.states();
-                for(int j=0; j < tokens.count(); ++j)
-                {
-                    HsStateToken token = tokens.at(j);
-                    IHsStateProvider* provider = loadProviderFromPlugin(token.mLibrary);
-                    if(provider)
-                    {
-                        states << provider->states();
-                        delete provider;
-                    }
-                }
-            }
-            else
-            {
-                states << manifest.states();
-            }
-        }
-    }
-    return states;
-}
-
-QState* HsStateFactoryPrivate::createState(const HsStateToken& aToken)
-{
-    IHsStateProvider* provider = loadProviderFromPlugin(aToken.mLibrary);
-    if(!provider)
-    {
-        HSDEBUG("Widget creation failed - No provider.")
-        return 0;
-    }
-
-    QState* state = provider->createState(aToken);
-    delete provider;
-    if(!state)
-    {
-        HSDEBUG("State creation failed.")
-    }
-    return state;
-}
-
-IHsStateProvider* HsStateFactoryPrivate::loadProviderFromPlugin(const QString& aPluginName)
-{
-    QStringList pluginPaths;
-
-    //Check plugin dirs from root of different drives
-    QFileInfoList drives = QDir::drives();
-    for(int i=0; i < drives.count(); i++)
-    {
-        QFileInfo drive = drives.at(i);
-        QString driveLetter = drive.absolutePath();
-        QString path = driveLetter + mPluginDirectory;
-        if(QDir(path).exists())
-        {
-            pluginPaths << path;
-        }
-    }
-
-
-    //Check plugin dir relative to current dir
-    if(QDir(mPluginManifestDirectory).exists() && !pluginPaths.contains(QDir(mPluginDirectory).absolutePath()))
-    {
-        pluginPaths << mPluginDirectory;
-    }
-
-    IHsStateProvider* provider = 0;
-    QPluginLoader loader;
-    QObject* plugin = 0;
-
-    for(int i=0; i < pluginPaths.count(); i++)
-    {
-        QString path = pluginPaths.at(i);
-        QString fileName = QDir(path).absoluteFilePath(aPluginName);
-
-        loader.setFileName(fileName);
-        plugin = loader.instance();
-        provider = qobject_cast<IHsStateProvider*>(plugin);
-        if(provider)
-        {
-            return provider;
-        }
-
-        //Don't leak memory if provider not IHsStateProvider
-        if(plugin)
-        {
-            HSDEBUG("State provider load - !provider, deleting plugin.")
-            delete plugin;
-        }
-    }
-
-    HSDEBUG("State provider load failed - Not found.")
-    return 0;
-}
-
-/*!
-    \class HsStateFactory
-    \ingroup group_hsstatemodel
-    \brief Finds and creates home screen states.
-    State factory finds home screen states from state provider
-    plugins. The search is done based on given plugin manifest
-    and plugin binary directories. Found states are returned as
-    a list of state tokens. State factory creates an instance of
-    a state base on a state token that is given to it.
-*/
-
-/*!
-    Constructor.
-    \a aPluginManifestDirectory Directory that contains plugin manifests.
-    \a aPluginDirectory Directory that contains plugin binaries.
-    \a aParent Parent object.
-*/
-HsStateFactory::HsStateFactory(const QString& aPluginManifestDirectory,
-                           const QString& aPluginDirectory,
-                           QObject* aParent)
-    : QObject(aParent)
-{
-    mD = new HsStateFactoryPrivate(this);
-    mD->mPluginManifestDirectory = aPluginManifestDirectory;
-    mD->mPluginDirectory = aPluginDirectory;
-}
-
-
-/*!
-    Destructor.
-*/
-HsStateFactory::~HsStateFactory()
-{
-
-}
-
-/*!
-    Returns found states as a list of state tokens.
-*/
-QList<HsStateToken> HsStateFactory::states()
-{
-    return mD->states();
-}
-
-/*!
-    Creates and returns a state based on the given token.
-    \a aToken Identifies the state to be created.
-
-    Returns The created state.
-*/
-QState* HsStateFactory::createState(const HsStateToken& aToken)
-{
-    return mD->createState(aToken);
-}
--- a/appfoundation/statemodel/src/hsstateprovidermanifest.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,164 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  State provider manifest.
-*
-*/
-
-
-#include <QDomDocument>
-#include <QFile>
-
-#include "hsstateprovidermanifest.h"
-#include "hsstateprovidermanifest_p.h"
-#include "hstest_global.h"
-
-HsStateProviderManifestPrivate::HsStateProviderManifestPrivate(HsStateProviderManifest* aPublic)
-    : QObject(aPublic),
-      mQ(aPublic),
-      mLoadOnQuery(false)
-{
-}
-
-HsStateProviderManifestPrivate::~HsStateProviderManifestPrivate()
-{
-
-}
-
-bool HsStateProviderManifestPrivate::loadFromXml(const QString& aFileName)
-{
-    mStateTokens.clear();
-
-    QFile file(aFileName);
-    if(!file.exists())
-    {
-        return false;
-    }
-
-    QDomDocument document;
-    if(!document.setContent(&file))
-    {
-        return false;
-    }
-
-    QDomElement element = document.documentElement();
-    if(element.tagName() != "stateprovider")
-    {
-        return false;
-    }
-
-    mLoadOnQuery = false;
-    QDomAttr attribute = element.attributeNode("loadonquery");
-	if(attribute.value().toLower() == "true")
-	{
-        mLoadOnQuery = true;
-	}
-    
-    QList<HsStateToken> tokens;
-    HsStateToken token;
-
-    QDomNodeList states = element.elementsByTagName("state");
-
-    for(int i = 0; i < states.count(); ++i)
-    {
-        element = states.at(i).toElement();
-        token.mLibrary = parseAttribute(element, "library");
-        token.mUri = parseAttribute(element, "uri");
-        tokens << token;
-    }
-
-    mStateTokens = tokens;
-    return true;
-}
-
-QList<HsStateToken> HsStateProviderManifestPrivate::states() const
-{
-    return mStateTokens;
-}
-
-QString HsStateProviderManifestPrivate::parseAttribute(QDomElement& aElement, const QString& aAttributeName, bool aIsRequired) const
-{
-    QDomAttr attribute = aElement.attributeNode(aAttributeName);
-    if(attribute.isNull() || attribute.value().isEmpty())
-    {
-        if(aIsRequired)
-        {
-            HSDEBUG("Required attribute missing")            
-        }
-        else
-        {
-            HSDEBUG("Attribute missing")
-        }
-
-        return QString();
-    }
-
-    return attribute.value();
-}
-
-
-/*!
-    \class HsStateProviderManifest
-    \ingroup group_hsstatemodel
-    \brief Loads home screen state tokens from an XML manifest file.
-    Used by the HsStateFactory for loading state tokens from an XML
-    manifest file.
-*/
-
-/*!
-    Constructor. Loads states as state tokens from the given
-    manifest file.
-    \a aParent Parent object.
-*/
-HsStateProviderManifest::HsStateProviderManifest(QObject* aParent)
-    : QObject(aParent)
-{
-    mD = new HsStateProviderManifestPrivate(this);
-}
-
-/*!
-    Destructor.
-*/
-HsStateProviderManifest::~HsStateProviderManifest()
-{
-
-}
-
-/*!
-    Returns loaded states as state tokens.
-*/
-QList<HsStateToken> HsStateProviderManifest::states() const
-{
-    return mD->states();
-}
-
-/*!
-    Returns true if the state tokens must be asked from plugin
-    instead of manifest file.
-*/
-bool HsStateProviderManifest::loadOnQuery()const
-{
-	return mD->mLoadOnQuery;
-}
-
-/*!
-    Loads states as state tokens from a manifest file.
-    \a aFileName Manifest file name.
-
-    Returns true if load was succesfull, false otherwise
-*/
-bool HsStateProviderManifest::loadFromXml(const QString& aFileName)
-{
-    return mD->loadFromXml(aFileName);
-}
-
--- a/appfoundation/statemodel/statemodel.pri	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,21 +0,0 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-#
-
-HEADERS += ./inc/*.h \
-                     ../../homescreensrv_plat/statemodel_api/*.h
-
-SOURCES += ./src/*.cpp
-
--- a/appfoundation/statemodel/statemodel.pro	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-#
-
-TEMPLATE = lib
-DEPENDPATH += . \
-              inc \
-              src
-INCLUDEPATH += . \
-               inc 
-               
-symbian: {
-TARGET.UID3 = 0x20022F3B
-}
-
-# Sources
-include(statemodel.pri)
-include(../../common.pri)
-
-DEFINES += HSSTATEMODEL_LIB
-
-QT += xml
--- a/common.pri	Fri Jun 11 13:58:37 2010 +0300
+++ b/common.pri	Wed Jun 23 18:33:40 2010 +0300
@@ -77,11 +77,9 @@
 
 win32 {
     # add platfrom API for windows
-    INCLUDEPATH += \
-                $$PWD/homescreensrv_plat/appruntimemodel_api \
+    INCLUDEPATH += \                
                 $$PWD/homescreensrv_plat/contentstorage_api \
-                $$PWD/homescreensrv_plat/hswidgetmodel_api \
-                $$PWD/homescreensrv_plat/statemodel_api \
+                $$PWD/homescreensrv_plat/hswidgetmodel_api \                
                 $$PWD/homescreensrv_plat/homescreen_information_api/inc
 }
 
--- a/contentstorage/bwins/cautilsu.def	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/bwins/cautilsu.def	Wed Jun 23 18:33:40 2010 +0300
@@ -7,95 +7,96 @@
 	?SetIconId@CCaInnerEntry@@QAEXH@Z @ 6 NONAME ; void CCaInnerEntry::SetIconId(int)
 	?SetUid@CCaInnerEntry@@QAEXJ@Z @ 7 NONAME ; void CCaInnerEntry::SetUid(long)
 	?SetLocalizedStringL@CCaLocalizationEntry@@QAEXABVTDesC16@@@Z @ 8 NONAME ; void CCaLocalizationEntry::SetLocalizedStringL(class TDesC16 const &)
-	?GetText@CCaInnerEntry@@QBEABVRBuf16@@XZ @ 9 NONAME ; class RBuf16 const & CCaInnerEntry::GetText(void) const
-	?InternalizeL@RCaEntriesArray@@QAEXAAVRReadStream@@@Z @ 10 NONAME ; void RCaEntriesArray::InternalizeL(class RReadStream &)
-	?SetIdsL@CCaInnerNotifierFilter@@QAEXABV?$RArray@H@@@Z @ 11 NONAME ; void CCaInnerNotifierFilter::SetIdsL(class RArray<int> const &)
-	?GetTextId@CCaLocalizationEntry@@QBEHXZ @ 12 NONAME ; int CCaLocalizationEntry::GetTextId(void) const
-	?GetUid@CCaInnerEntry@@QBEJXZ @ 13 NONAME ; long CCaInnerEntry::GetUid(void) const
-	?SetId@CCaInnerEntry@@QAEXI@Z @ 14 NONAME ; void CCaInnerEntry::SetId(unsigned int)
-	?GetSort@CCaInnerQuery@@QBE?AW4TSortAttribute@1@XZ @ 15 NONAME ; enum CCaInnerQuery::TSortAttribute CCaInnerQuery::GetSort(void) const
-	?SetCount@CCaInnerQuery@@QAEXI@Z @ 16 NONAME ; void CCaInnerQuery::SetCount(unsigned int)
-	?ExternalizeL@CCaInnerNotifierFilter@@QBEXAAVRWriteStream@@@Z @ 17 NONAME ; void CCaInnerNotifierFilter::ExternalizeL(class RWriteStream &) const
-	?FindAttribute@CCaInnerEntry@@QAEHABVTDesC16@@AAVTDes16@@@Z @ 18 NONAME ; int CCaInnerEntry::FindAttribute(class TDesC16 const &, class TDes16 &)
-	?Find@RCaEntryAttrArray@@QAEHABVTDesC16@@AAVTDes16@@@Z @ 19 NONAME ; int RCaEntryAttrArray::Find(class TDesC16 const &, class TDes16 &)
-	?SetRowId@CCaLocalizationEntry@@QAEXI@Z @ 20 NONAME ; void CCaLocalizationEntry::SetRowId(unsigned int)
-	?GetUid@CCaInnerQuery@@QBEIXZ @ 21 NONAME ; unsigned int CCaInnerQuery::GetUid(void) const
-	?SetFlags@CCaInnerEntry@@QAEXI@Z @ 22 NONAME ; void CCaInnerEntry::SetFlags(unsigned int)
-	?SetAttributeNameL@CCaLocalizationEntry@@QAEXABVTDesC16@@@Z @ 23 NONAME ; void CCaLocalizationEntry::SetAttributeNameL(class TDesC16 const &)
-	?GetCount@CCaInnerQuery@@QBEIXZ @ 24 NONAME ; unsigned int CCaInnerQuery::GetCount(void) const
-	?GetParentId@CCaInnerNotifierFilter@@QBEHXZ @ 25 NONAME ; int CCaInnerNotifierFilter::GetParentId(void) const
-	?SetId@CCaInnerIconDescription@@QAEXH@Z @ 26 NONAME ; void CCaInnerIconDescription::SetId(int)
-	?GetStringId@CCaLocalizationEntry@@QBEABVRBuf16@@XZ @ 27 NONAME ; class RBuf16 const & CCaLocalizationEntry::GetStringId(void) const
-	?GetFlags@CCaInnerEntry@@QBEIXZ @ 28 NONAME ; unsigned int CCaInnerEntry::GetFlags(void) const
-	?NewL@CCaInnerIconDescription@@SAPAV1@XZ @ 29 NONAME ; class CCaInnerIconDescription * CCaInnerIconDescription::NewL(void)
-	?NewL@CCaEntryAttribute@@SAPAV1@ABVTDesC16@@@Z @ 30 NONAME ; class CCaEntryAttribute * CCaEntryAttribute::NewL(class TDesC16 const &)
-	?Find@RCaEntryAttrArray@@QAEHABVTDesC16@@AAVTPtrC16@@@Z @ 31 NONAME ; int RCaEntryAttrArray::Find(class TDesC16 const &, class TPtrC16 &)
-	?SetFileNameL@CCaInnerIconDescription@@QAEXABVTDesC16@@@Z @ 32 NONAME ; void CCaInnerIconDescription::SetFileNameL(class TDesC16 const &)
-	?SetParentId@CCaInnerNotifierFilter@@QAEXH@Z @ 33 NONAME ; void CCaInnerNotifierFilter::SetParentId(int)
-	?SetFlagsOn@CCaInnerQuery@@QAEXI@Z @ 34 NONAME ; void CCaInnerQuery::SetFlagsOn(unsigned int)
-	?SetTypeNames@CCaInnerNotifierFilter@@QAEXPAVCDesC16ArrayFlat@@@Z @ 35 NONAME ; void CCaInnerNotifierFilter::SetTypeNames(class CDesC16ArrayFlat *)
-	?NewLC@CCaLocalizationEntry@@SAPAV1@XZ @ 36 NONAME ; class CCaLocalizationEntry * CCaLocalizationEntry::NewLC(void)
-	?NewL@CCaInnerNotifierFilter@@SAPAV1@W4TNotifierType@1@@Z @ 37 NONAME ; class CCaInnerNotifierFilter * CCaInnerNotifierFilter::NewL(enum CCaInnerNotifierFilter::TNotifierType)
-	?GetTableName@CCaLocalizationEntry@@QBEABVRBuf16@@XZ @ 38 NONAME ; class RBuf16 const & CCaLocalizationEntry::GetTableName(void) const
-	?GetFlagsOff@CCaInnerQuery@@QBEIXZ @ 39 NONAME ; unsigned int CCaInnerQuery::GetFlagsOff(void) const
-	?InternalizeL@CCaInnerEntry@@QAEXAAVRReadStream@@@Z @ 40 NONAME ; void CCaInnerEntry::InternalizeL(class RReadStream &)
-	?GetAttributeName@CCaLocalizationEntry@@QBEABVRBuf16@@XZ @ 41 NONAME ; class RBuf16 const & CCaLocalizationEntry::GetAttributeName(void) const
-	?GetTUint@MenuUtils@@SAHABVTDesC16@@AAI@Z @ 42 NONAME ; int MenuUtils::GetTUint(class TDesC16 const &, unsigned int &)
-	?AddAttributeL@CCaInnerQuery@@QAEXABVTDesC16@@0@Z @ 43 NONAME ; void CCaInnerQuery::AddAttributeL(class TDesC16 const &, class TDesC16 const &)
-	?Exist@RCaEntryAttrArray@@QAEHABVTDesC16@@@Z @ 44 NONAME ; int RCaEntryAttrArray::Exist(class TDesC16 const &)
-	?AddAttributeL@CCaInnerEntry@@QAEXABVTDesC16@@0@Z @ 45 NONAME ; void CCaInnerEntry::AddAttributeL(class TDesC16 const &, class TDesC16 const &)
-	?GetParentId@CCaInnerQuery@@QBEHXZ @ 46 NONAME ; int CCaInnerQuery::GetParentId(void) const
-	?SetDescriptionL@CCaInnerEntry@@QAEXABVTDesC16@@@Z @ 47 NONAME ; void CCaInnerEntry::SetDescriptionL(class TDesC16 const &)
+	?GetQmFilename@CCaLocalizationEntry@@QBEABVRBuf16@@XZ @ 9 NONAME ; class RBuf16 const & CCaLocalizationEntry::GetQmFilename(void) const
+	?GetText@CCaInnerEntry@@QBEABVRBuf16@@XZ @ 10 NONAME ; class RBuf16 const & CCaInnerEntry::GetText(void) const
+	?InternalizeL@RCaEntriesArray@@QAEXAAVRReadStream@@@Z @ 11 NONAME ; void RCaEntriesArray::InternalizeL(class RReadStream &)
+	?SetIdsL@CCaInnerNotifierFilter@@QAEXABV?$RArray@H@@@Z @ 12 NONAME ; void CCaInnerNotifierFilter::SetIdsL(class RArray<int> const &)
+	?GetTextId@CCaLocalizationEntry@@QBEHXZ @ 13 NONAME ; int CCaLocalizationEntry::GetTextId(void) const
+	?GetUid@CCaInnerEntry@@QBEJXZ @ 14 NONAME ; long CCaInnerEntry::GetUid(void) const
+	?SetId@CCaInnerEntry@@QAEXI@Z @ 15 NONAME ; void CCaInnerEntry::SetId(unsigned int)
+	?GetSort@CCaInnerQuery@@QBE?AW4TSortAttribute@1@XZ @ 16 NONAME ; enum CCaInnerQuery::TSortAttribute CCaInnerQuery::GetSort(void) const
+	?SetCount@CCaInnerQuery@@QAEXI@Z @ 17 NONAME ; void CCaInnerQuery::SetCount(unsigned int)
+	?ExternalizeL@CCaInnerNotifierFilter@@QBEXAAVRWriteStream@@@Z @ 18 NONAME ; void CCaInnerNotifierFilter::ExternalizeL(class RWriteStream &) const
+	?FindAttribute@CCaInnerEntry@@QAEHABVTDesC16@@AAVTDes16@@@Z @ 19 NONAME ; int CCaInnerEntry::FindAttribute(class TDesC16 const &, class TDes16 &)
+	?Find@RCaEntryAttrArray@@QAEHABVTDesC16@@AAVTDes16@@@Z @ 20 NONAME ; int RCaEntryAttrArray::Find(class TDesC16 const &, class TDes16 &)
+	?SetRowId@CCaLocalizationEntry@@QAEXI@Z @ 21 NONAME ; void CCaLocalizationEntry::SetRowId(unsigned int)
+	?GetUid@CCaInnerQuery@@QBEIXZ @ 22 NONAME ; unsigned int CCaInnerQuery::GetUid(void) const
+	?SetFlags@CCaInnerEntry@@QAEXI@Z @ 23 NONAME ; void CCaInnerEntry::SetFlags(unsigned int)
+	?SetAttributeNameL@CCaLocalizationEntry@@QAEXABVTDesC16@@@Z @ 24 NONAME ; void CCaLocalizationEntry::SetAttributeNameL(class TDesC16 const &)
+	?GetCount@CCaInnerQuery@@QBEIXZ @ 25 NONAME ; unsigned int CCaInnerQuery::GetCount(void) const
+	?GetParentId@CCaInnerNotifierFilter@@QBEHXZ @ 26 NONAME ; int CCaInnerNotifierFilter::GetParentId(void) const
+	?SetId@CCaInnerIconDescription@@QAEXH@Z @ 27 NONAME ; void CCaInnerIconDescription::SetId(int)
+	?GetStringId@CCaLocalizationEntry@@QBEABVRBuf16@@XZ @ 28 NONAME ; class RBuf16 const & CCaLocalizationEntry::GetStringId(void) const
+	?GetFlags@CCaInnerEntry@@QBEIXZ @ 29 NONAME ; unsigned int CCaInnerEntry::GetFlags(void) const
+	?NewL@CCaInnerIconDescription@@SAPAV1@XZ @ 30 NONAME ; class CCaInnerIconDescription * CCaInnerIconDescription::NewL(void)
+	?NewL@CCaEntryAttribute@@SAPAV1@ABVTDesC16@@@Z @ 31 NONAME ; class CCaEntryAttribute * CCaEntryAttribute::NewL(class TDesC16 const &)
+	?Find@RCaEntryAttrArray@@QAEHABVTDesC16@@AAVTPtrC16@@@Z @ 32 NONAME ; int RCaEntryAttrArray::Find(class TDesC16 const &, class TPtrC16 &)
+	?SetFileNameL@CCaInnerIconDescription@@QAEXABVTDesC16@@@Z @ 33 NONAME ; void CCaInnerIconDescription::SetFileNameL(class TDesC16 const &)
+	?SetParentId@CCaInnerNotifierFilter@@QAEXH@Z @ 34 NONAME ; void CCaInnerNotifierFilter::SetParentId(int)
+	?SetFlagsOn@CCaInnerQuery@@QAEXI@Z @ 35 NONAME ; void CCaInnerQuery::SetFlagsOn(unsigned int)
+	?SetTypeNames@CCaInnerNotifierFilter@@QAEXPAVCDesC16ArrayFlat@@@Z @ 36 NONAME ; void CCaInnerNotifierFilter::SetTypeNames(class CDesC16ArrayFlat *)
+	?NewLC@CCaLocalizationEntry@@SAPAV1@XZ @ 37 NONAME ; class CCaLocalizationEntry * CCaLocalizationEntry::NewLC(void)
+	?NewL@CCaInnerNotifierFilter@@SAPAV1@W4TNotifierType@1@@Z @ 38 NONAME ; class CCaInnerNotifierFilter * CCaInnerNotifierFilter::NewL(enum CCaInnerNotifierFilter::TNotifierType)
+	?GetTableName@CCaLocalizationEntry@@QBEABVRBuf16@@XZ @ 39 NONAME ; class RBuf16 const & CCaLocalizationEntry::GetTableName(void) const
+	?GetFlagsOff@CCaInnerQuery@@QBEIXZ @ 40 NONAME ; unsigned int CCaInnerQuery::GetFlagsOff(void) const
+	?InternalizeL@CCaInnerEntry@@QAEXAAVRReadStream@@@Z @ 41 NONAME ; void CCaInnerEntry::InternalizeL(class RReadStream &)
+	?GetAttributeName@CCaLocalizationEntry@@QBEABVRBuf16@@XZ @ 42 NONAME ; class RBuf16 const & CCaLocalizationEntry::GetAttributeName(void) const
+	?GetTUint@MenuUtils@@SAHABVTDesC16@@AAI@Z @ 43 NONAME ; int MenuUtils::GetTUint(class TDesC16 const &, unsigned int &)
+	?AddAttributeL@CCaInnerQuery@@QAEXABVTDesC16@@0@Z @ 44 NONAME ; void CCaInnerQuery::AddAttributeL(class TDesC16 const &, class TDesC16 const &)
+	?Exist@RCaEntryAttrArray@@QAEHABVTDesC16@@@Z @ 45 NONAME ; int RCaEntryAttrArray::Exist(class TDesC16 const &)
+	?AddAttributeL@CCaInnerEntry@@QAEXABVTDesC16@@0@Z @ 46 NONAME ; void CCaInnerEntry::AddAttributeL(class TDesC16 const &, class TDesC16 const &)
+	?GetParentId@CCaInnerQuery@@QBEHXZ @ 47 NONAME ; int CCaInnerQuery::GetParentId(void) const
 	?SetEntryRole@CCaInnerNotifierFilter@@QAEXW4TEntryRole@@@Z @ 48 NONAME ; void CCaInnerNotifierFilter::SetEntryRole(enum TEntryRole)
 	?GetFlagsOn@CCaInnerQuery@@QBEIXZ @ 49 NONAME ; unsigned int CCaInnerQuery::GetFlagsOn(void) const
 	?GetIconId@CCaInnerEntry@@QBEHXZ @ 50 NONAME ; int CCaInnerEntry::GetIconId(void) const
 	?SetIconDataL@CCaInnerEntry@@QAEXABVTDesC16@@00@Z @ 51 NONAME ; void CCaInnerEntry::SetIconDataL(class TDesC16 const &, class TDesC16 const &, class TDesC16 const &)
 	?GetEntryRole@CCaInnerNotifierFilter@@QBE?AW4TEntryRole@@XZ @ 52 NONAME ; enum TEntryRole CCaInnerNotifierFilter::GetEntryRole(void) const
 	?GetId@CCaInnerEntry@@QBEHXZ @ 53 NONAME ; int CCaInnerEntry::GetId(void) const
-	?SetEntryTypeNames@CCaInnerQuery@@QAEXPAVCDesC16ArrayFlat@@@Z @ 54 NONAME ; void CCaInnerQuery::SetEntryTypeNames(class CDesC16ArrayFlat *)
-	?GetNotifierType@CCaInnerNotifierFilter@@QBE?AW4TNotifierType@1@XZ @ 55 NONAME ; enum CCaInnerNotifierFilter::TNotifierType CCaInnerNotifierFilter::GetNotifierType(void) const
-	?ExternalizeL@CCaInnerEntry@@QBEXAAVRWriteStream@@@Z @ 56 NONAME ; void CCaInnerEntry::ExternalizeL(class RWriteStream &) const
-	?SetRole@CCaInnerQuery@@QAEXH@Z @ 57 NONAME ; void CCaInnerQuery::SetRole(int)
-	?NewL@CCaLocalizationEntry@@SAPAV1@XZ @ 58 NONAME ; class CCaLocalizationEntry * CCaLocalizationEntry::NewL(void)
-	?InternalizeL@CCaInnerNotifierFilter@@QAEXAAVRReadStream@@@Z @ 59 NONAME ; void CCaInnerNotifierFilter::InternalizeL(class RReadStream &)
-	?InternalizeL@RCaIdsArray@@QAEXAAVRReadStream@@@Z @ 60 NONAME ; void RCaIdsArray::InternalizeL(class RReadStream &)
-	?MarshalDataLC@RCaIdsArray@@QBEPAVHBufC8@@XZ @ 61 NONAME ; class HBufC8 * RCaIdsArray::MarshalDataLC(void) const
-	?GetEntryTypeNames@CCaInnerQuery@@QBEPBVCDesC16ArrayFlat@@XZ @ 62 NONAME ; class CDesC16ArrayFlat const * CCaInnerQuery::GetEntryTypeNames(void) const
-	?SetValueL@CCaEntryAttribute@@QAEXABVTDesC16@@@Z @ 63 NONAME ; void CCaEntryAttribute::SetValueL(class TDesC16 const &)
-	?SetSkinIdL@CCaInnerIconDescription@@QAEXABVTDesC16@@@Z @ 64 NONAME ; void CCaInnerIconDescription::SetSkinIdL(class TDesC16 const &)
-	?ExternalizeL@CCaInnerQuery@@QBEXAAVRWriteStream@@@Z @ 65 NONAME ; void CCaInnerQuery::ExternalizeL(class RWriteStream &) const
-	?GetLocalizedString@CCaLocalizationEntry@@QBEABVRBuf16@@XZ @ 66 NONAME ; class RBuf16 const & CCaLocalizationEntry::GetLocalizedString(void) const
-	?InternalizeL@CCaInnerQuery@@QAEXAAVRReadStream@@@Z @ 67 NONAME ; void CCaInnerQuery::InternalizeL(class RReadStream &)
-	?NewLC@CCaEntryAttribute@@SAPAV1@ABVTDesC16@@@Z @ 68 NONAME ; class CCaEntryAttribute * CCaEntryAttribute::NewLC(class TDesC16 const &)
-	?GetTypeNames@CCaInnerNotifierFilter@@QBEPAVCDesC16ArrayFlat@@XZ @ 69 NONAME ; class CDesC16ArrayFlat * CCaInnerNotifierFilter::GetTypeNames(void) const
-	?NewL@CCaInnerEntry@@SAPAV1@XZ @ 70 NONAME ; class CCaInnerEntry * CCaInnerEntry::NewL(void)
-	?SetRole@CCaInnerEntry@@QAEXI@Z @ 71 NONAME ; void CCaInnerEntry::SetRole(unsigned int)
-	?NewLC@CCaInnerEntry@@SAPAV1@XZ @ 72 NONAME ; class CCaInnerEntry * CCaInnerEntry::NewLC(void)
-	?SetTableNameL@CCaLocalizationEntry@@QAEXABVTDesC16@@@Z @ 73 NONAME ; void CCaLocalizationEntry::SetTableNameL(class TDesC16 const &)
-	?GetAttributes@CCaInnerEntry@@QBEABVRCaEntryAttrArray@@XZ @ 74 NONAME ; class RCaEntryAttrArray const & CCaInnerEntry::GetAttributes(void) const
-	?GetRowId@CCaLocalizationEntry@@QBEHXZ @ 75 NONAME ; int CCaLocalizationEntry::GetRowId(void) const
-	?NewLC@CCaInnerIconDescription@@SAPAV1@XZ @ 76 NONAME ; class CCaInnerIconDescription * CCaInnerIconDescription::NewLC(void)
-	?SetIdsL@CCaInnerQuery@@QAEXABV?$RArray@H@@@Z @ 77 NONAME ; void CCaInnerQuery::SetIdsL(class RArray<int> const &)
-	?SetFlagsOff@CCaInnerQuery@@QAEXI@Z @ 78 NONAME ; void CCaInnerQuery::SetFlagsOff(unsigned int)
-	?Icon@CCaInnerEntry@@QBEPBVCCaInnerIconDescription@@XZ @ 79 NONAME ; class CCaInnerIconDescription const * CCaInnerEntry::Icon(void) const
-	?SetApplicationIdL@CCaInnerIconDescription@@QAEXABVTDesC16@@@Z @ 80 NONAME ; void CCaInnerIconDescription::SetApplicationIdL(class TDesC16 const &)
-	?FindAttribute@CCaInnerEntry@@QAEHABVTDesC16@@AAVTPtrC16@@@Z @ 81 NONAME ; int CCaInnerEntry::FindAttribute(class TDesC16 const &, class TPtrC16 &)
-	?RemoveAttributeL@CCaInnerEntry@@QAEXABVTDesC16@@@Z @ 82 NONAME ; void CCaInnerEntry::RemoveAttributeL(class TDesC16 const &)
-	?GetRole@CCaInnerEntry@@QBEIXZ @ 83 NONAME ; unsigned int CCaInnerEntry::GetRole(void) const
-	?GetIds@CCaInnerQuery@@QBEABV?$RArray@H@@XZ @ 84 NONAME ; class RArray<int> const & CCaInnerQuery::GetIds(void) const
-	?ExternalizeL@RCaEntriesArray@@QBEXAAVRWriteStream@@@Z @ 85 NONAME ; void RCaEntriesArray::ExternalizeL(class RWriteStream &) const
-	?NewL@CCaInnerQuery@@SAPAV1@XZ @ 86 NONAME ; class CCaInnerQuery * CCaInnerQuery::NewL(void)
-	?SetUid@CCaInnerQuery@@QAEXI@Z @ 87 NONAME ; void CCaInnerQuery::SetUid(unsigned int)
-	?GetDescription@CCaInnerEntry@@QBEABVRBuf16@@XZ @ 88 NONAME ; class RBuf16 const & CCaInnerEntry::GetDescription(void) const
-	?GetRole@CCaInnerQuery@@QBEHXZ @ 89 NONAME ; int CCaInnerQuery::GetRole(void) const
-	?GetEntryTypeName@CCaInnerEntry@@QBEABVRBuf16@@XZ @ 90 NONAME ; class RBuf16 const & CCaInnerEntry::GetEntryTypeName(void) const
-	?NewLC@CCaInnerQuery@@SAPAV1@XZ @ 91 NONAME ; class CCaInnerQuery * CCaInnerQuery::NewLC(void)
-	?SetTextL@CCaInnerEntry@@QAEXABVTDesC16@@@Z @ 92 NONAME ; void CCaInnerEntry::SetTextL(class TDesC16 const &)
-	?SetParentId@CCaInnerQuery@@QAEXH@Z @ 93 NONAME ; void CCaInnerQuery::SetParentId(int)
-	?GetIds@CCaInnerNotifierFilter@@QBE?AV?$RArray@H@@XZ @ 94 NONAME ; class RArray<int> CCaInnerNotifierFilter::GetIds(void) const
-	?SetStringIdL@CCaLocalizationEntry@@QAEXABVTDesC16@@@Z @ 95 NONAME ; void CCaLocalizationEntry::SetStringIdL(class TDesC16 const &)
-	?SetTextId@CCaLocalizationEntry@@QAEXI@Z @ 96 NONAME ; void CCaLocalizationEntry::SetTextId(unsigned int)
-	?RemoveAttribute@RCaEntryAttrArray@@QAEXABVTDesC16@@@Z @ 97 NONAME ; void RCaEntryAttrArray::RemoveAttribute(class TDesC16 const &)
-	?GetQmFilename@CCaLocalizationEntry@@QBEABVRBuf16@@XZ @ 98 NONAME ; class RBuf16 const & CCaLocalizationEntry::GetQmFilename(void) const
-	?SetQmFilenameL@CCaLocalizationEntry@@QAEXABVTDesC16@@@Z @ 99 NONAME ; void CCaLocalizationEntry::SetQmFilenameL(class TDesC16 const &)
+	?SetDescriptionL@CCaInnerEntry@@QAEXABVTDesC16@@H@Z @ 54 NONAME ; void CCaInnerEntry::SetDescriptionL(class TDesC16 const &, int)
+	?SetEntryTypeNames@CCaInnerQuery@@QAEXPAVCDesC16ArrayFlat@@@Z @ 55 NONAME ; void CCaInnerQuery::SetEntryTypeNames(class CDesC16ArrayFlat *)
+	?GetNotifierType@CCaInnerNotifierFilter@@QBE?AW4TNotifierType@1@XZ @ 56 NONAME ; enum CCaInnerNotifierFilter::TNotifierType CCaInnerNotifierFilter::GetNotifierType(void) const
+	?SetTextL@CCaInnerEntry@@QAEXABVTDesC16@@H@Z @ 57 NONAME ; void CCaInnerEntry::SetTextL(class TDesC16 const &, int)
+	?ExternalizeL@CCaInnerEntry@@QBEXAAVRWriteStream@@@Z @ 58 NONAME ; void CCaInnerEntry::ExternalizeL(class RWriteStream &) const
+	?SetRole@CCaInnerQuery@@QAEXH@Z @ 59 NONAME ; void CCaInnerQuery::SetRole(int)
+	?NewL@CCaLocalizationEntry@@SAPAV1@XZ @ 60 NONAME ; class CCaLocalizationEntry * CCaLocalizationEntry::NewL(void)
+	?InternalizeL@CCaInnerNotifierFilter@@QAEXAAVRReadStream@@@Z @ 61 NONAME ; void CCaInnerNotifierFilter::InternalizeL(class RReadStream &)
+	?InternalizeL@RCaIdsArray@@QAEXAAVRReadStream@@@Z @ 62 NONAME ; void RCaIdsArray::InternalizeL(class RReadStream &)
+	?SetQmFilenameL@CCaLocalizationEntry@@QAEXABVTDesC16@@@Z @ 63 NONAME ; void CCaLocalizationEntry::SetQmFilenameL(class TDesC16 const &)
+	?MarshalDataLC@RCaIdsArray@@QBEPAVHBufC8@@XZ @ 64 NONAME ; class HBufC8 * RCaIdsArray::MarshalDataLC(void) const
+	?GetEntryTypeNames@CCaInnerQuery@@QBEPBVCDesC16ArrayFlat@@XZ @ 65 NONAME ; class CDesC16ArrayFlat const * CCaInnerQuery::GetEntryTypeNames(void) const
+	?SetValueL@CCaEntryAttribute@@QAEXABVTDesC16@@@Z @ 66 NONAME ; void CCaEntryAttribute::SetValueL(class TDesC16 const &)
+	?SetSkinIdL@CCaInnerIconDescription@@QAEXABVTDesC16@@@Z @ 67 NONAME ; void CCaInnerIconDescription::SetSkinIdL(class TDesC16 const &)
+	?ExternalizeL@CCaInnerQuery@@QBEXAAVRWriteStream@@@Z @ 68 NONAME ; void CCaInnerQuery::ExternalizeL(class RWriteStream &) const
+	?GetLocalizedString@CCaLocalizationEntry@@QBEABVRBuf16@@XZ @ 69 NONAME ; class RBuf16 const & CCaLocalizationEntry::GetLocalizedString(void) const
+	?InternalizeL@CCaInnerQuery@@QAEXAAVRReadStream@@@Z @ 70 NONAME ; void CCaInnerQuery::InternalizeL(class RReadStream &)
+	?NewLC@CCaEntryAttribute@@SAPAV1@ABVTDesC16@@@Z @ 71 NONAME ; class CCaEntryAttribute * CCaEntryAttribute::NewLC(class TDesC16 const &)
+	?GetTypeNames@CCaInnerNotifierFilter@@QBEPAVCDesC16ArrayFlat@@XZ @ 72 NONAME ; class CDesC16ArrayFlat * CCaInnerNotifierFilter::GetTypeNames(void) const
+	?NewL@CCaInnerEntry@@SAPAV1@XZ @ 73 NONAME ; class CCaInnerEntry * CCaInnerEntry::NewL(void)
+	?SetRole@CCaInnerEntry@@QAEXI@Z @ 74 NONAME ; void CCaInnerEntry::SetRole(unsigned int)
+	?NewLC@CCaInnerEntry@@SAPAV1@XZ @ 75 NONAME ; class CCaInnerEntry * CCaInnerEntry::NewLC(void)
+	?SetTableNameL@CCaLocalizationEntry@@QAEXABVTDesC16@@@Z @ 76 NONAME ; void CCaLocalizationEntry::SetTableNameL(class TDesC16 const &)
+	?GetAttributes@CCaInnerEntry@@QBEABVRCaEntryAttrArray@@XZ @ 77 NONAME ; class RCaEntryAttrArray const & CCaInnerEntry::GetAttributes(void) const
+	?GetRowId@CCaLocalizationEntry@@QBEHXZ @ 78 NONAME ; int CCaLocalizationEntry::GetRowId(void) const
+	?NewLC@CCaInnerIconDescription@@SAPAV1@XZ @ 79 NONAME ; class CCaInnerIconDescription * CCaInnerIconDescription::NewLC(void)
+	?SetIdsL@CCaInnerQuery@@QAEXABV?$RArray@H@@@Z @ 80 NONAME ; void CCaInnerQuery::SetIdsL(class RArray<int> const &)
+	?SetFlagsOff@CCaInnerQuery@@QAEXI@Z @ 81 NONAME ; void CCaInnerQuery::SetFlagsOff(unsigned int)
+	?Icon@CCaInnerEntry@@QBEPBVCCaInnerIconDescription@@XZ @ 82 NONAME ; class CCaInnerIconDescription const * CCaInnerEntry::Icon(void) const
+	?SetApplicationIdL@CCaInnerIconDescription@@QAEXABVTDesC16@@@Z @ 83 NONAME ; void CCaInnerIconDescription::SetApplicationIdL(class TDesC16 const &)
+	?FindAttribute@CCaInnerEntry@@QAEHABVTDesC16@@AAVTPtrC16@@@Z @ 84 NONAME ; int CCaInnerEntry::FindAttribute(class TDesC16 const &, class TPtrC16 &)
+	?RemoveAttributeL@CCaInnerEntry@@QAEXABVTDesC16@@@Z @ 85 NONAME ; void CCaInnerEntry::RemoveAttributeL(class TDesC16 const &)
+	?GetRole@CCaInnerEntry@@QBEIXZ @ 86 NONAME ; unsigned int CCaInnerEntry::GetRole(void) const
+	?GetIds@CCaInnerQuery@@QBEABV?$RArray@H@@XZ @ 87 NONAME ; class RArray<int> const & CCaInnerQuery::GetIds(void) const
+	?ExternalizeL@RCaEntriesArray@@QBEXAAVRWriteStream@@@Z @ 88 NONAME ; void RCaEntriesArray::ExternalizeL(class RWriteStream &) const
+	?NewL@CCaInnerQuery@@SAPAV1@XZ @ 89 NONAME ; class CCaInnerQuery * CCaInnerQuery::NewL(void)
+	?isLocalized@CCaInnerEntry@@QBEHW4TLocalizedType@1@@Z @ 90 NONAME ; int CCaInnerEntry::isLocalized(enum CCaInnerEntry::TLocalizedType) const
+	?SetUid@CCaInnerQuery@@QAEXI@Z @ 91 NONAME ; void CCaInnerQuery::SetUid(unsigned int)
+	?GetDescription@CCaInnerEntry@@QBEABVRBuf16@@XZ @ 92 NONAME ; class RBuf16 const & CCaInnerEntry::GetDescription(void) const
+	?GetRole@CCaInnerQuery@@QBEHXZ @ 93 NONAME ; int CCaInnerQuery::GetRole(void) const
+	?GetEntryTypeName@CCaInnerEntry@@QBEABVRBuf16@@XZ @ 94 NONAME ; class RBuf16 const & CCaInnerEntry::GetEntryTypeName(void) const
+	?NewLC@CCaInnerQuery@@SAPAV1@XZ @ 95 NONAME ; class CCaInnerQuery * CCaInnerQuery::NewLC(void)
+	?SetParentId@CCaInnerQuery@@QAEXH@Z @ 96 NONAME ; void CCaInnerQuery::SetParentId(int)
+	?GetIds@CCaInnerNotifierFilter@@QBE?AV?$RArray@H@@XZ @ 97 NONAME ; class RArray<int> CCaInnerNotifierFilter::GetIds(void) const
+	?SetStringIdL@CCaLocalizationEntry@@QAEXABVTDesC16@@@Z @ 98 NONAME ; void CCaLocalizationEntry::SetStringIdL(class TDesC16 const &)
+	?SetTextId@CCaLocalizationEntry@@QAEXI@Z @ 99 NONAME ; void CCaLocalizationEntry::SetTextId(unsigned int)
+	?RemoveAttribute@RCaEntryAttrArray@@QAEXABVTDesC16@@@Z @ 100 NONAME ; void RCaEntryAttrArray::RemoveAttribute(class TDesC16 const &)
 
--- a/contentstorage/caclient/caclient.pro	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/caclient/caclient.pro	Wed Jun 23 18:33:40 2010 +0300
@@ -53,7 +53,9 @@
         -lxqutils \
         -lsif \
         -lscrclient \
-        -laknicon
+        -laknicon \
+        -lapgrfx \
+        -lapparc
 
 include(caclient_s60.pri)
 }
--- a/contentstorage/caclient/inc/caclient_defines.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/caclient/inc/caclient_defines.h	Wed Jun 23 18:33:40 2010 +0300
@@ -18,7 +18,8 @@
 #ifndef CACLIENT_DEFINES_H
 #define CACLIENT_DEFINES_H
 
-const char APPLICATION_UID_ATTRIBUTE_NAME[]  = "application:uid";
+const char APPLICATION_UID_ATTRIBUTE_NAME[] = "application:uid";
+const char UNINSTALL_PROGRESS_APPLICATION_ATTRIBUTE_NAME[] = "uninstall_progress";
 const char APPLICATION_ENTRY_TYPE_NAME[] = "application";
 const char WIDGET_ENTRY_TYPE_NAME[] = "widget";
 const char URL_ENTRY_TYPE_NAME[] = "url";
--- a/contentstorage/caclient/inc/caentry_p.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/caclient/inc/caentry_p.h	Wed Jun 23 18:33:40 2010 +0300
@@ -43,10 +43,10 @@
     void setId(int id);
 
     QString text() const;
-    void setText(const QString &text);
+    void setText(const QString &text, bool localized = false);
 
     QString description() const;
-    void setDescription(const QString &text);
+    void setDescription(const QString &text, bool localized = false);
 
     CaIconDescription iconDescription() const;
     void setIconDescription(const CaIconDescription &iconDescription);
@@ -65,6 +65,8 @@
 
     EntryRole role() const;
     void setRole(const EntryRole &role);
+    
+    bool isLocalized(LocalizationType localized) const;
 
 private:
 
@@ -85,6 +87,10 @@
     QMap<QString, QString> mAttributes;
 
     EntryRole mEntryRole;
+    
+    bool mTextLocalized;
+    
+    bool mDescriptionLocalized;
 };
 
 #endif // CAENTRY_PRIVATE_H
--- a/contentstorage/caclient/inc/cahandler.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/caclient/inc/cahandler.h	Wed Jun 23 18:33:40 2010 +0300
@@ -34,4 +34,4 @@
 
 Q_DECLARE_INTERFACE(CaHandler, "com.nokia.homescreen.ICommandHandler")
 
-#endif //CAHANDLER_H
+#endif // CAHANDLER_H
--- a/contentstorage/caclient/inc/caitemmodel_p.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/caclient/inc/caitemmodel_p.h	Wed Jun 23 18:33:40 2010 +0300
@@ -73,7 +73,7 @@
 
     // Function declarations
     void updateParentEntry();
-    void updateItemData(int id);
+    void updateItemData(const QSharedPointer<CaEntry> &entry);
     void addItem(int id);
     void addItemBlock(const QList<int> &itemsList);
     void handleAddItems(const QList<int> &itemsList);
@@ -89,7 +89,7 @@
 private slots:
 
     // Function declarations
-    void updateModelItem(int id, ChangeType changeType);
+    void updateModelItem(const CaEntry &entry, ChangeType changeType);
     void updateModelContent(int id);
 
 private:
--- a/contentstorage/caclient/inc/caitemmodellist.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/caclient/inc/caitemmodellist.h	Wed Jun 23 18:33:40 2010 +0300
@@ -43,7 +43,7 @@
     int count() const;
     QSharedPointer<CaEntry> at(int row) const;
     void reloadEntries(const CaQuery &query);
-    void updateEntry(int id);
+    void updateEntry(const QSharedPointer<CaEntry> &entry);
     void updateEntries(const CaQuery &query);
     int indexOf(const int &id) const;
     void insert(int row, int id);
--- a/contentstorage/caclient/s60/src/camenuiconutility.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/caclient/s60/src/camenuiconutility.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -55,20 +55,7 @@
     if (icon.isNull() || !(icon.size().isValid())) {
         QString fileName(entry.iconDescription().filename());
         if (!fileName.isEmpty()) {
-        
-            // TODO:
-            // work-around for HbIcon::size() method locking files if returns 
-            // default size, error id: ou1cimx1#279208 Case: mcl06HsDo07 - 
-            // "Cannot delete file" when trying to uninstall sisx file
-            
-            if (entry.entryTypeName() == XQConversions::s60DescToQString(
-                    KCaTypeWidget)) {
-                icon = QIcon(fileName);
-                qWarning("Widget icon created by QIcon, "
-                        "as work-around for HbIcon::size");
-            } else {
-                icon = HbIcon(fileName);
-            }
+            icon = HbIcon(fileName);
         }
     }
     return icon;
--- a/contentstorage/caclient/s60/src/caobjectadapter.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/caclient/s60/src/caobjectadapter.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -48,12 +48,12 @@
     toEntry.SetId(fromEntry.id());
 
     toEntry.SetTextL(
-        XQConversions::qStringToS60Desc(fromEntry.text())->Des());
+        XQConversions::qStringToS60Desc(fromEntry.text())->Des(),
+        fromEntry.isLocalized(NameLocalized));
 
     toEntry.SetDescriptionL(
-        XQConversions::qStringToS60Desc(fromEntry.description())->Des());
-    toEntry.SetDescriptionL(
-        XQConversions::qStringToS60Desc(fromEntry.description())->Des());
+        XQConversions::qStringToS60Desc(fromEntry.description())->Des(),
+        fromEntry.isLocalized(DescriptionLocalized));
 
     toEntry.SetEntryTypeNameL(
         XQConversions::qStringToS60Desc(fromEntry.entryTypeName())->Des());
@@ -148,10 +148,12 @@
 {
     toEntry.setId(fromEntry.GetId());
 
-    toEntry.setText(XQConversions::s60DescToQString(fromEntry.GetText()));
+    toEntry.setText(XQConversions::s60DescToQString(fromEntry.GetText()),
+            fromEntry.isLocalized(CCaInnerEntry::ENameLocalized));
 
     toEntry.setDescription(
-        XQConversions::s60DescToQString(fromEntry.GetDescription()));
+        XQConversions::s60DescToQString(fromEntry.GetDescription()),
+        fromEntry.isLocalized(CCaInnerEntry::EDescriptionLocalized));
     toEntry.setEntryTypeName(
         XQConversions::s60DescToQString(fromEntry.GetEntryTypeName()));
 
--- a/contentstorage/caclient/s60/src/caobserver.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/caclient/s60/src/caobserver.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -58,7 +58,8 @@
 {
     qDebug() << "CaClientProxy::entryChanged changeType:" << changeType;
 
-    CaEntry *caEntry = new CaEntry(static_cast<EntryRole>(entry.GetRole()));
+    QSharedPointer<CaEntry> caEntry(
+        new CaEntry(static_cast<EntryRole>(entry.GetRole())));
     ChangeType entryChangeType(AddChangeType);
     CaObjectAdapter::convert(entry, *caEntry);
     CaObjectAdapter::convert(changeType, entryChangeType);
--- a/contentstorage/caclient/src/caentry.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/caclient/src/caentry.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -150,19 +150,20 @@
 }
 
 /*!
- Sets name of the item.
+ Sets localized name of the item.
  \param text new name of the item.
+ \param localized set to true if its localized
 
  \code
  ...
  QString entryText( QString("EntryText") );
- resultEntry->setText( entryText);
+ resultEntry->setText( entryText, true);
  ...
  \endcode
  */
-void CaEntry::setText(const QString &text)
+void CaEntry::setText(const QString &text, bool localized)
 {
-    m_d->setText(text);
+    m_d->setText(text, localized);
 }
 
 /*!
@@ -180,8 +181,9 @@
     return m_d->description();
 }
 
+
 /*!
-Sets description of the item.
+Sets localized description of the item.
 \param new description of the item.
 
 \code
@@ -191,9 +193,10 @@
 ...
 \endcode
 */
-void CaEntry::setDescription(const QString &description)
+void CaEntry::setDescription(const QString &description,
+        bool localized)
 {
-    m_d->setDescription(description);
+    m_d->setDescription(description, localized);
 }
 
 /*!
@@ -472,6 +475,11 @@
 }
 
 
+bool CaEntry::isLocalized(LocalizationType localized)  const
+{
+    return m_d->isLocalized(localized);  
+}
+
 /*
  Constructor
  \param entryPublic associated public entry
@@ -479,7 +487,8 @@
 CaEntryPrivate::CaEntryPrivate(CaEntry *entryPublic) :
     m_q(entryPublic), mId(0), mText(), mDescription(), mIconDescription(),
     mFlags(RemovableEntryFlag|VisibleEntryFlag),mEntryTypeName(),
-    mAttributes(), mEntryRole(ItemEntryRole)
+    mAttributes(), mEntryRole(ItemEntryRole), 
+    mTextLocalized(false), mDescriptionLocalized(false)
 {
 }
 /*!
@@ -497,6 +506,8 @@
     mEntryTypeName = entry.mEntryTypeName;
     mAttributes = entry.mAttributes;
     mEntryRole = entry.mEntryRole;
+    mTextLocalized = entry.mTextLocalized;
+    mDescriptionLocalized = entry.mDescriptionLocalized;
     return *this;
 }
 
@@ -524,12 +535,13 @@
 }
 
 /*!
- Sets name of the item.
+ Sets localized name of the item.
  \param text new name of the item.
  */
-void CaEntryPrivate::setText(const QString &text)
+void CaEntryPrivate::setText(const QString &text, bool localized)
 {
     mText = text;
+    mTextLocalized = localized;
 }
 
 /*!
@@ -544,9 +556,11 @@
 Sets description of the item.
 \param text new name of the item.
 */
-void CaEntryPrivate::setDescription(const QString &description)
+void CaEntryPrivate::setDescription(const QString &description,
+        bool localized)
 {
     mDescription = description;
+    mDescriptionLocalized = localized;
 }
 
 /*!
@@ -663,3 +677,18 @@
     mEntryRole = role;
 }
 
+bool CaEntryPrivate::isLocalized(LocalizationType localized)  const
+{
+    if(localized == NameLocalized)
+    {
+        return mTextLocalized;
+    }
+    if(localized == DescriptionLocalized)
+    {
+        return mDescriptionLocalized;
+    }
+    return false;
+    
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentstorage/caclient/src/cahandler.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ *
+ */
+ 
+/*!
+    \class CaHandler
+    \ingroup
+    \brief Interface for command handlers
+*/
+
+/*!
+    \fn int CaHandler::execute(const CaEntry &entry, const QString &commandName) = 0
+    \param entry the entry for which the command is executed.
+    \param commandName the name of the command to execute.
+    \retval an error code.
+    \sa e32err.h for error code descriptions.
+*/
--- a/contentstorage/caclient/src/cahandlerloader.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/caclient/src/cahandlerloader.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -33,4 +33,14 @@
 {
 }
 
+/*!
+    \fn virtual CaHandler *loadHandler(const QString &entryTypeName,
+                                   const QString &commandName) = 0;
+    Loads handler implementations appropriate for the requested entry type name and command.
 
+    The caller takes ownership of the returned pointer.
+
+    \param entryTypeName an entry type name.
+    \param commandName a name of the command to be handled.
+    \retval a pointer to the handler serving the entry type and command if found, NULL otherwise.
+*/
--- a/contentstorage/caclient/src/cahandlerproxy.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/caclient/src/cahandlerproxy.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -52,7 +52,7 @@
   Forwards execute request to an appropriate handler if found otherwise ignores the request.
   \param entry Subject for the requested command.
   \param commandName Name of the command to be executed.
-  \return KErrNone (i.e. 0) on succes, error code otherwise.
+  \retval KErrNone on succes, error code otherwise.
   \sa e32err.h for KErrNone definition.
 */
 ErrorCode CaHandlerProxy::execute(const CaEntry &entry, const QString &commandName)
--- a/contentstorage/caclient/src/caiconcache.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/caclient/src/caiconcache.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -145,7 +145,7 @@
 void CaIconCache::remove(const CaEntry &entry, ChangeType changeType)
 {
     CACLIENTTEST_FUNC_ENTRY("CaIconCache::remove");
-    if (changeType != AddChangeType) {
+    if (changeType != AddChangeType && !(entry.flags() & UninstallEntryFlag)) {
         QString entryKey = key(entry);
         entryKey.append(separator);
         QList<QString> keys = mCache.keys();
--- a/contentstorage/caclient/src/caitemmodel.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/caclient/src/caitemmodel.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -17,6 +17,7 @@
 
 #include <HbIcon>
 
+#include "caclient_defines.h"
 #include "caitemmodel.h"
 #include "caitemmodel_p.h"
 #include "canotifier.h"
@@ -469,6 +470,9 @@
             variant = QVariant(entry(modelIndex)->text() + QString(" ")
                 + entry(modelIndex)->description());
             break;
+        case CaItemModel::UninstalRole:
+      	    variant = QVariant(entry(modelIndex)->attribute(UNINSTALL_PROGRESS_APPLICATION_ATTRIBUTE_NAME).toInt());
+            break;
         default:
             variant = QVariant(QVariant::Invalid);
         }
@@ -699,22 +703,27 @@
 
 /*!
  Updates model item with fresh data
- \param id id of item to update
+ \param entry item to update
  */
-void CaItemModelPrivate::updateItemData(int id)
+void CaItemModelPrivate::updateItemData(const QSharedPointer<CaEntry> &entry)
 {
     CACLIENTTEST_FUNC_ENTRY("CaItemModelPrivate::updateItemData");
 
-    mEntries.updateEntry(id);
 
+    int id = entry->id();
     QList<int> ids = mService->getEntryIds(mQuery);
     if (mEntries.indexOf(id) >= 0
            && ids.indexOf(id) == mEntries.indexOf(id)) {
-        emit m_q->dataChanged(index(mEntries.indexOf(id)), index(
-                                  mEntries.indexOf(id)));
+        mEntries.updateEntry(entry);
+        emit m_q->dataChanged(
+            index(mEntries.indexOf(id)), index(mEntries.indexOf(id)));
     } else if (mParentEntry && id == mParentEntry->id()) {
         updateParentEntry();
         m_q->reset();
+    } else if (ids.indexOf(id) < 0) {
+        removeItem(id);
+    } else if (mEntries.indexOf(id) < 0) {
+        addItem(id);
     } else {
         updateModel();
     }
@@ -911,8 +920,8 @@
 void CaItemModelPrivate::connectSlots()
 {
     CACLIENTTEST_FUNC_ENTRY("CaItemModelPrivate::connectSlots");
-    connect(mNotifier, SIGNAL(entryChanged(int,ChangeType)),
-            this, SLOT(updateModelItem(int,ChangeType)));
+    connect(mNotifier, SIGNAL(entryChanged(CaEntry ,ChangeType)),
+            this, SLOT(updateModelItem(CaEntry, ChangeType)));
 
     if (mQuery.parentId() > 0) {
         connect(mNotifier, SIGNAL(groupContentChanged(int)),
@@ -927,8 +936,8 @@
 void CaItemModelPrivate::disconnectSlots()
 {
     CACLIENTTEST_FUNC_ENTRY("CaItemModelPrivate::disconnectSlots");
-    disconnect(mNotifier, SIGNAL(entryChanged(int,ChangeType)),
-               this, SLOT(updateModelItem(int,ChangeType)));
+    disconnect(mNotifier, SIGNAL(entryChanged(CaEntry ,ChangeType)),
+            this, SLOT(updateModelItem(CaEntry, ChangeType)));
     if (mQuery.parentId() > 0) {
         disconnect(mNotifier, SIGNAL(groupContentChanged(int)),
                    this, SLOT(updateModelContent(int)));
@@ -952,20 +961,22 @@
  \param id of item to handle
  \param changeType change type
  */
-void CaItemModelPrivate::updateModelItem(int id, ChangeType changeType)
+void CaItemModelPrivate::updateModelItem(
+    const CaEntry &entry, ChangeType changeType)
 {
     CACLIENTTEST_FUNC_ENTRY("CaItemModelPrivate::updateModelItem");
+    QSharedPointer<CaEntry> sharedEntry(new CaEntry(entry));
     int previousCount = rowCount();
     switch (changeType) {
-    case AddChangeType:
-        addItem(id);
-        break;
-    case RemoveChangeType:
-        removeItem(id);
-        break;
-    default:
-        updateItemData(id);
-        break;
+        case AddChangeType:
+            addItem(sharedEntry->id());
+            break;
+        case RemoveChangeType:
+            removeItem(sharedEntry->id());
+            break;
+        default:
+            updateItemData(sharedEntry);
+            break;
     }
     emitEmpty(previousCount);
     CACLIENTTEST_FUNC_EXIT("CaItemModelPrivate::updateModelItem");
--- a/contentstorage/caclient/src/caitemmodellist.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/caclient/src/caitemmodellist.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -93,13 +93,13 @@
 
 /*!
  Updates entry with given id
- \param id of item in the list
+ \param entry of item in the list
  */
-void CaItemModelList::updateEntry(int id)
+void CaItemModelList::updateEntry(const QSharedPointer<CaEntry> &entry)
 {
     CACLIENTTEST_FUNC_ENTRY("CaItemModelList::updateEntry");
-    if (mEntriesHash.contains(id)) {
-        mEntriesHash.insert(id, mService->getEntry(id));
+    if (mEntriesHash.contains(entry->id())) {
+        mEntriesHash.insert(entry->id(), entry);
     }
     CACLIENTTEST_FUNC_EXIT("CaItemModelList::updateEntry");
 }
--- a/contentstorage/caclient/src/caqtsfhandlerloader.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/caclient/src/caqtsfhandlerloader.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -57,11 +57,11 @@
     const QString pluginPath("hsresources/plugins/commandhandler");
     const QFileInfoList drives = QDir::drives();
     
-    foreach(QFileInfo drive, drives) {
+    foreach (QFileInfo drive, drives) {
         const QString driveLetter = drive.absolutePath();
         const QString pluginAbsolutePath = driveLetter + pluginPath;
         const QDir pluginDir(pluginAbsolutePath);
-        if(QDir(pluginDir).exists()) {
+        if (QDir(pluginDir).exists()) {
             const QFileInfoList fileInfos = 
                 pluginDir.entryInfoList(QStringList("*.xml"));
             
--- a/contentstorage/caclient/src/caservice.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/caclient/src/caservice.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -973,7 +973,8 @@
  \param entryIdList list of entry ids
  \retval list of entries (pointers)
  */
-QList< QSharedPointer<CaEntry> > CaServicePrivate::getEntries(const QList<int> &entryIdList) const
+QList< QSharedPointer<CaEntry> > CaServicePrivate::getEntries(
+    const QList<int> &entryIdList) const
 {
     qDebug() << "CaServicePrivate::getEntries"
              << "entryIdList:" << entryIdList;
@@ -1338,6 +1339,10 @@
 
     CACLIENTTEST_FUNC_ENTRY("CaServicePrivate::executeCommand");
 
+    if (entry.flags() & UninstallEntryFlag) {
+        return false;
+    }    
+    
     if (command == caCmdOpen) {
         touch(entry);
     }
--- a/contentstorage/caclient/stub/inc/caobjectadapter.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/caclient/stub/inc/caobjectadapter.h	Wed Jun 23 18:33:40 2010 +0300
@@ -15,8 +15,8 @@
  *
  */
 
-#ifndef OBJECTADAPTER_H
-#define OBJECTADAPTER_H
+#ifndef CAOBJECTADAPTER_H
+#define CAOBJECTADAPTER_H
 
 // INCLUDES
 #include <QPixmap>
@@ -28,46 +28,18 @@
 class CaIconDescription;
 class HbIcon;
 
-/**
- *  CaObjectAdapter
- *
- */
 class CaObjectAdapter
 {
 public:
 
-    /**
-     * Create an icon.
-     * @param entry entry.
-     * @param size size of the icon
-     * @return QPixmap.
-     */
-    static HbIcon makeIcon(
-        const CaEntry &entry,
-        const QSize &size);
+    static HbIcon makeIcon(const CaEntry &entry, const QSize &size);
+
+    static void setId(CaEntry &entry, int id);
 
-    /**
-     * Set entry id.
-     * @param entry entry.
-     * @param id entry id.
-     */
-    static void setId(CaEntry &entry,
-                      int id);
-
-    /**
-     * Set icon description id.
-     * @param iconDescription icon description.
-     * @param id icon description id.
-     */
-    static void setId(CaIconDescription &iconDescription,
-                      int id);
+    static void setId(CaIconDescription &iconDescription, int id);
                       
-    /**
-     * Converts symbian error code to error code (used in QT code).
-     */
-    static ErrorCode convertErrorCode(
-        int internalErrorCode);
+    static ErrorCode convertErrorCode(int internalErrorCode);
 
 };
 
-#endif // OBJECTADAPTER_H
+#endif // CAOBJECTADAPTER_H
--- a/contentstorage/caclient/stub/src/caobjectadapter.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/caclient/stub/src/caobjectadapter.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -24,9 +24,12 @@
 #include "caicondescription.h"
 #include <cadefs.h>
 
-//----------------------------------------------------------------------------
-//
-//----------------------------------------------------------------------------
+/*!
+ * Create an icon.
+ * \param entry a CaEntry instance.
+ * \param size a size of the icon
+ * \retval a HbIcon instance.
+ */
 HbIcon CaObjectAdapter::makeIcon(const CaEntry &entry, const QSize &size)
 {
     HbIcon icon;
@@ -42,27 +45,31 @@
 }
 
 
-//----------------------------------------------------------------------------
-//
-//----------------------------------------------------------------------------
-void CaObjectAdapter::setId(CaEntry &entry,
-                            int id)
+/*!
+ * Set entry id.
+ * \param entry entry.
+ * \param id entry id.
+ */
+void CaObjectAdapter::setId(CaEntry &entry, int id)
 {
     entry.setId(id);
 }
 
-//----------------------------------------------------------------------------
-//
-//----------------------------------------------------------------------------
-void CaObjectAdapter::setId(CaIconDescription &iconDescription,
-                            int id)
+/*!
+ * Set icon description id.
+ * \param iconDescription icon description.
+ * \param id icon description id.
+ */
+void CaObjectAdapter::setId(CaIconDescription &iconDescription, int id)
 {
     iconDescription.setId(id);
 }
 
-//----------------------------------------------------------------------------
-//
-//----------------------------------------------------------------------------
+/**
+ * Convert Symbian error code to error code (used in QT code).
+ * \param internalErrorCode Symbian error code.
+ * \retval converted error code (ErrorCode enum).
+ */
 ErrorCode CaObjectAdapter::convertErrorCode(int internalErrorCode)
 {
     ErrorCode error(NoErrorCode);
--- a/contentstorage/cahandler/app/inc/caapphandler.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/cahandler/app/inc/caapphandler.h	Wed Jun 23 18:33:40 2010 +0300
@@ -26,11 +26,6 @@
 class CCaUsifUninstallOperation;
 class CaEntry;
 
-/**
- *  Command handler for application entries.
- *
- *  @lib caclient.lib
- */
 class CaAppHandler: public QObject, public CaHandler
 {
     Q_OBJECT
@@ -40,9 +35,6 @@
 
     explicit CaAppHandler(QObject *parent = 0);
 
-    /**
-     * Destructor.
-     */
     virtual ~CaAppHandler();
 
 public:
@@ -51,33 +43,15 @@
 
 private:
 
-    /**
-     * Launches application
-     * @param aUid UID of the application to launch
-     * @param aParam command parameters
-     * @param aViewId id of the view the application is to start in
-     */
-    void launchApplicationL(const TUid aUid, TInt aViewId);
+    void launchApplicationL(const TUid uid, TInt viewId);
 
-    /**
-     * Closes application
-     * @param aEntry the entry represeting application to close
-     */
     int closeApplication(const EntryFlags &flags, TInt windowGroupId);
 
-    /**
-     * Uninstall application 
-     * @param aEntry the entry represeting application to uninstall
-     */
     int handleRemove(const EntryFlags &flags,
         const QString &typeName,
         const QString &componentId);
     
-    /**
-     * Start uninstall operation via usif 
-     * @param aComponentId component id
-     */
-    void startUsifUninstallL(TInt aComponentId);
+    void startUsifUninstallL(TInt componentId);
     
 private:
     CEikonEnv *iEikEnv;
--- a/contentstorage/cahandler/app/inc/caapphandlerplugin.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/cahandler/app/inc/caapphandlerplugin.h	Wed Jun 23 18:33:40 2010 +0300
@@ -15,8 +15,8 @@
  *
  */
 
-#ifndef CA_APP_HANDLER_PLUGIN_H
-#define CA_APP_HANDLER_PLUGIN_H
+#ifndef CAAPPHANDLERPLUGIN_H
+#define CAAPPHANDLERPLUGIN_H
 
 #include <QObject>
 #include <qserviceplugininterface.h>
@@ -34,4 +34,4 @@
                             QAbstractSecuritySession *session);
 };
 
-#endif
+#endif // CAAPPHANDLERPLUGIN_H
--- a/contentstorage/cahandler/app/src/caapphandler.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/cahandler/app/src/caapphandler.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -49,12 +49,16 @@
 static const char caCmdClose[] = "close";
 static const char caAttrWindowGroupId[] = "window_group_id";
 static const char caAttrComponentId[] = "component_id";
-static const char caCmdRemove[] = "remove";
 
-// ---------------------------------------------------------
-//
-// ---------------------------------------------------------
-//
+/*!
+ *  Command handler for application entries.
+ *
+ *  \lib caclient.lib
+ */
+
+/*!
+ * Constructor.
+ */
 CaAppHandler::CaAppHandler(QObject *parent):
     iEikEnv(CEikonEnv::Static()),
     iUsifUninstallOperation(NULL)
@@ -62,15 +66,20 @@
     Q_UNUSED(parent);
 }
 
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
+/*!
+ * Destructor.
+ */
 CaAppHandler::~CaAppHandler()
 {
     delete iUsifUninstallOperation;
 }
 
+/*!
+ * Execute a given command.
+ * \param entry a reference to a CaEntry instance.
+ * \param command a given command.
+ * \retval an error code.
+ */
 int CaAppHandler::execute(const CaEntry &entry, const QString &command)
 {
     int result(KErrGeneral);
@@ -104,99 +113,93 @@
     return result;
 }
 
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-void CaAppHandler::launchApplicationL(const TUid aUid, TInt aViewId)
+/*!
+ * Launch application
+ * \param uid UID of the application to launch.
+ * \param viewId id of the view the application is to start in.
+ */
+void CaAppHandler::launchApplicationL(const TUid uid, TInt viewId)
 {
-    if( aViewId > 0 && iEikEnv )
-        {
-        TUid viewId = TUid::Uid( aViewId );
-        TVwsViewId view( aUid, viewId );
+    if (viewId > 0 && iEikEnv) {
+        TVwsViewId view(uid, TUid::Uid(viewId));
         iEikEnv->EikAppUi()->ActivateViewL( view );
-        }
-    else
-        {
+    } else {
         RWsSession wsSession;
-        User::LeaveIfError( wsSession.Connect() );
-        CleanupClosePushL<RWsSession>( wsSession );
+        User::LeaveIfError(wsSession.Connect());
+        CleanupClosePushL<RWsSession>(wsSession);
 
-        CCaTaskList* taskList = CCaTaskList::NewLC( wsSession );
-        TApaTask task = taskList->FindRootApp( aUid );
-        CleanupStack::PopAndDestroy( taskList );
+        CCaTaskList* taskList = CCaTaskList::NewLC(wsSession);
+        TApaTask task = taskList->FindRootApp(uid);
+        CleanupStack::PopAndDestroy(taskList);
 
-        if( task.Exists() )
-            {
+        if (task.Exists()) {
             task.BringToForeground();
-            }
-        else
-            {
+        } else {
             // TApaAppInfo size is greater then 1024 bytes
             // so its instances should not be created on the stack.
-            TApaAppInfo* appInfo = new( ELeave ) TApaAppInfo;
-            CleanupStack::PushL( appInfo );
+            TApaAppInfo* appInfo = new(ELeave) TApaAppInfo;
+            CleanupStack::PushL(appInfo);
             TApaAppCapabilityBuf capabilityBuf;
             RApaLsSession appArcSession;
-            User::LeaveIfError( appArcSession.Connect() );
-            CleanupClosePushL<RApaLsSession>( appArcSession );
+            User::LeaveIfError(appArcSession.Connect());
+            CleanupClosePushL<RApaLsSession>(appArcSession);
 
-            User::LeaveIfError( appArcSession.GetAppInfo( *appInfo, aUid ) );
-            User::LeaveIfError( appArcSession.GetAppCapability(
-                                   capabilityBuf, aUid ) );
+            User::LeaveIfError(appArcSession.GetAppInfo(*appInfo, uid));
+            User::LeaveIfError(appArcSession.GetAppCapability(
+               capabilityBuf, uid));
 
             TApaAppCapability &caps = capabilityBuf();
             CApaCommandLine *cmdLine = CApaCommandLine::NewLC();
-            cmdLine->SetExecutableNameL( appInfo->iFullName );
+            cmdLine->SetExecutableNameL(appInfo->iFullName);
+
+            if (caps.iLaunchInBackground) {
+                cmdLine->SetCommandL(EApaCommandBackground);
+            } else {
+                cmdLine->SetCommandL(EApaCommandRun);
+            }
 
-            if( caps.iLaunchInBackground )
-                {
-                cmdLine->SetCommandL( EApaCommandBackground );
-                }
-            else
-                {
-                cmdLine->SetCommandL( EApaCommandRun );
-                }
+            cmdLine->SetTailEndL(KNullDesC8);
+
+            User::LeaveIfError(appArcSession.StartApp(*cmdLine));
 
-            cmdLine->SetTailEndL( KNullDesC8 );
-
-            User::LeaveIfError( appArcSession.StartApp( *cmdLine ) );
-
-            CleanupStack::PopAndDestroy( cmdLine );
-            CleanupStack::PopAndDestroy( &appArcSession );
-            CleanupStack::PopAndDestroy( appInfo );
+            CleanupStack::PopAndDestroy(cmdLine);
+            CleanupStack::PopAndDestroy(&appArcSession);
+            CleanupStack::PopAndDestroy(appInfo);
         }
         CleanupStack::PopAndDestroy( &wsSession );
     }
 }
 
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
+/*!
+ * Closes application.
+ * \param flags an entry flags.
+ * \param windowGroupId window group id.
+ * \retval an error code.
+ */
 int CaAppHandler::closeApplication(const EntryFlags &flags, int windowGroupId)
 {
     int result(KErrNone);
-    if (flags.testFlag(RunningEntryFlag)
-        && !( flags.testFlag(SystemEntryFlag))
-        && windowGroupId > 0) {
+    if (flags.testFlag(RunningEntryFlag) && windowGroupId > 0) {
         RWsSession wsSession;
         result = wsSession.Connect();
         if (result==KErrNone) {
             TWsEvent event;
             event.SetTimeNow();
-            event.SetType( KAknShutOrHideApp );
-            wsSession.SendEventToWindowGroup( windowGroupId, event );
+            event.SetType(KAknShutOrHideApp);
+            wsSession.SendEventToWindowGroup(windowGroupId, event);
         }
         wsSession.Close();
     }
     return result;
 }
 
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
+/*!
+ * Uninstall application.
+ * \param flags flags of the application which is to uninstall.
+ * \param typeName type name of the entry.
+ * \param componentId component id.
+ * \retval an error code.
+ */
 int CaAppHandler::handleRemove(const EntryFlags &flags,
     const QString &typeName,
     const QString &componentId)
@@ -227,17 +230,17 @@
     return result;
 }
 
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-void CaAppHandler::startUsifUninstallL(TInt aComponentId)
+/*!
+ * Start uninstall operation via usif.
+ * \param componentId component id.
+ */
+void CaAppHandler::startUsifUninstallL(TInt componentId)
 {
     if (iUsifUninstallOperation && iUsifUninstallOperation->IsActive()) {
         User::Leave( KErrInUse );
     }
     delete iUsifUninstallOperation;
     iUsifUninstallOperation = NULL;
-    iUsifUninstallOperation = CCaUsifUninstallOperation::NewL(aComponentId);
+    iUsifUninstallOperation = CCaUsifUninstallOperation::NewL(componentId);
 }
 
--- a/contentstorage/cahandler/app/src/caapphandlerplugin.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/cahandler/app/src/caapphandlerplugin.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -34,7 +34,7 @@
     \param descriptor Service descriptor.
     \param context Ignored.
     \param session Ignored.
-    \return An instance of the CaS60HandlerAdapter<CaAppHandler> when descriptor interface name
+    \retval an instance of the CaAppHandler when descriptor interface name
     is "com.nokia.homescreen.ICommandHandler", NULL otherwise.
 */
 QObject *CaAppHandlerPlugin::createInstance(const QServiceInterfaceDescriptor &descriptor,
@@ -51,37 +51,14 @@
         return 0;
     }
 }
+
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC SKIP
+#endif //COVERAGE_MEASUREMENT (QT macro)
+
 Q_EXPORT_PLUGIN2(caapphandlerplugin, CaAppHandlerPlugin)
 
-
-/*!
-    \class CaHandler
-    \ingroup
-    \brief Interface for command handlers
-*/
-
-/*!
-    \fn int CaHandler::execute(const CaEntry &entry, const QString &commandName) = 0
-    \param entry Subject of the command.
-    \param commandName The name of the command to execute.
-    Returns 0 on success, error code otherwise.
-    \sa e32err.h for error code descriptions.
-*/
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC ENDSKIP
+#endif //COVERAGE_MEASUREMENT
 
-/*!
-    \class CaS60HandlerAdapter<typename Plugin>
-    \ingroup
-    \brief Adapter for S60 command handlers.
-
-    Adapts S60 command handlers to CaHandler interface
-
-    \sa CaHandler
-*/
-
-/*!
-    \fn int CaS60HandlerAdapter<typename Plugin>::execute(const CaEntry &entry, const QString &commandName)
-    \param entry Subject of the command.
-    \param commandName The name of the command to execute.
-    \return 0 on success, error code otherwise.
-    \sa e32err.h for error code descriptions.
-*/
--- a/contentstorage/cahandler/app/src/causifuninstalloperation.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/cahandler/app/src/causifuninstalloperation.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -93,6 +93,9 @@
     iUninstaller.CancelOperation();
     }
 
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC SKIP
+#endif //COVERAGE_MEASUREMENT (error ignored)
 // ---------------------------------------------------------------------------
 // CCaUsifUninstallOperation::RunError
 // ---------------------------------------------------------------------------
@@ -101,3 +104,7 @@
     {
     return KErrNone;
     }
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC ENDSKIP
+#endif //COVERAGE_MEASUREMENT
+
--- a/contentstorage/cahandler/tapp/src/catapphandler.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/cahandler/tapp/src/catapphandler.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -58,7 +58,7 @@
  Uses XQApplicationManager
  \param entry Subject of the \a command.
  \param command Description of the command.
- \return Error code described in QSERVICEMANAGER.H
+ \retval Error code described in QSERVICEMANAGER.H
  */
 int CaTappHandler::execute(const CaEntry& entry, const QString& command)
 {
@@ -78,7 +78,7 @@
             }
         }
     } else {
-        // TODO: error code cleanning and appropriate conversion (in other classes too).
+        // TODO: error code cleanning and an appropriate conversion (in other classes too).
         static const int NotSupportedErrorCode = 100;
         error = NotSupportedErrorCode;
     }
--- a/contentstorage/cahandler/tapp/src/catapphandlerplugin.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/cahandler/tapp/src/catapphandlerplugin.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -18,9 +18,6 @@
 #include "catapphandlerplugin.h"
 #include "catapphandler.h"
 
-#ifdef COVERAGE_MEASUREMENT
-#pragma CTC SKIP
-#endif //COVERAGE_MEASUREMENT
 /*!
     \class CaTappHandlerPlugin
     \ingroup
@@ -31,7 +28,7 @@
     \param descriptor service descriptor
     \param context ignored
     \param session ignored
-    \return An instance of the CaTapphandler object when descriptor interface name
+    \retval An instance of the CaTapphandler object when descriptor interface name
     is "com.nokia.homescreen.ICommandHandler", NULL otherwise.
 */
 QObject *CaTappHandlerPlugin::createInstance(const QServiceInterfaceDescriptor &descriptor,
@@ -48,6 +45,10 @@
     }
 }
 
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC SKIP
+#endif //COVERAGE_MEASUREMENT (QT macro)
+
 Q_EXPORT_PLUGIN2(catapphandlerplugin, CaTappHandlerPlugin)
 
 #ifdef COVERAGE_MEASUREMENT
--- a/contentstorage/cahandler/url/src/caurlhandler.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/cahandler/url/src/caurlhandler.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -24,15 +24,27 @@
 
 static const QString caAttrUrl("url");
 
+/*!
+ * Constructor.
+ */
 CaUrlHandler::CaUrlHandler(QObject *parent)
 {
     Q_UNUSED(parent);
 }
 
+/*!
+ * Destructor.
+ */
 CaUrlHandler::~CaUrlHandler()
 {
 }
 
+/*!
+ * Execute a given command.
+ * \param entry a reference to CaEntry instance.
+ * \param command a given command.
+ * \retval an error code.
+ */
 int CaUrlHandler::execute(const CaEntry &entry, const QString &command)
 {
     int err(KErrGeneral);
--- a/contentstorage/cahandler/url/src/caurlhandlerplugin.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/cahandler/url/src/caurlhandlerplugin.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -51,4 +51,12 @@
     }
 }
 
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC SKIP
+#endif //COVERAGE_MEASUREMENT (QT macro)
+
 Q_EXPORT_PLUGIN2(caurlhandlerplugin, CaUrlHandlerPlugin)
+
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC ENDSKIP
+#endif //COVERAGE_MEASUREMENT
--- a/contentstorage/casoftwareregistry/casoftwareregistry.pro	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/casoftwareregistry/casoftwareregistry.pro	Wed Jun 23 18:33:40 2010 +0300
@@ -15,7 +15,7 @@
 #
 
 TEMPLATE = lib
-
+CONFIG += hb
 DEFINES += CACLIENT_LIB
 
 include(../../common.pri)
@@ -41,7 +41,8 @@
         -lestor \
         -lscrclient \
         -lxqutils \
-        -lPlatformEnv
+        -lPlatformEnv \
+        -lefsrv
         
 include(casoftwareregistry_s60.pri)
 }
--- a/contentstorage/casoftwareregistry/s60/inc/casoftwareregistry_p.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/casoftwareregistry/s60/inc/casoftwareregistry_p.h	Wed Jun 23 18:33:40 2010 +0300
@@ -15,13 +15,17 @@
  *
  */
 
-#ifndef CA_SOFTWARE_REGISTRY_PRIVATE_H
-#define CA_SOFTWARE_REGISTRY_PRIVATE_H
+#ifndef CASOFTWAREREGISTRY_P_H
+#define CASOFTWAREREGISTRY_P_H
 
 #include <QHash>
 #include <QString>
 
+#include <usif/usifcommon.h>
+
+class QStringList;
 class CaSoftwareRegistry;
+
 namespace Usif 
 {
     class CComponentEntry;
@@ -37,13 +41,28 @@
         CaSoftwareRegistry *softwareRegistryPublic);
     ~CaSoftwareRegistryPrivate();
 
+    bool getUninstallDetails(int componentId,
+        QString &componentName,
+        QStringList &applicationsUids,
+        QString &confirmationMessage);
+    
+    bool getApplicationsUids(int componentId,
+        QStringList &appUids);
+
     DetailMap entryDetails(int componentId) const;
     
     DetailMap entryDetails(
         const Usif::CComponentEntry& entry) const;
 private:
+    void getUninstallDetailsL(int componentId,
+        QString &componentName,
+        QStringList &appUids,
+        QString &confirmationMessage);
+    void getApplicationsUidsL(int componentId,
+        QStringList &appUids);
+private:
     CaSoftwareRegistry *const m_q;
 
 };
 
-#endif // CA_SOFTWARE_REGISTRY_PRIVATE_H
+#endif // CASOFTWAREREGISTRY_P_H
--- a/contentstorage/casoftwareregistry/s60/src/casoftwareregistry_p.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/casoftwareregistry/s60/src/casoftwareregistry_p.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -14,10 +14,10 @@
  * Description:  ?Description
  *
  */
-#include <QtGlobal>
+#include <HbParameterLengthLimiter>
 #include <QMetaType>
 #include <QScopedPointer>
-#include <QString>
+#include <QStringList>
 
 #include <usif/scr/scr.h>
 #include <usif/scr/screntries.h>
@@ -29,6 +29,8 @@
 
 using namespace Usif;
 
+_LIT(KConfirmMessageKey, "MIDlet-Delete-Confirm");
+
 template <typename RClass>
 struct RClassDeleter
 {
@@ -61,6 +63,140 @@
 }
 
 /*!
+ Provides details needed for uninstalling process of Java applications.
+ \param[in] componentId component id of an application to be uninstalled.
+ \param[out] componentName a name of the component.
+ \param[out] applicationsUids a list of uids of applications in the package
+      of the given component id.
+ \param[out] confirmationMessage optional deletion confirmation message,
+      null string means the lack of the message.
+ \retval true if there is no error.
+ */
+
+bool CaSoftwareRegistryPrivate::getUninstallDetails(int componentId,
+    QString &componentName,
+    QStringList &applicationsUids,
+    QString &confirmationMessage)
+{
+    TRAPD(error, getUninstallDetailsL(componentId,
+        componentName,
+        applicationsUids,
+        confirmationMessage)
+         );
+    return error == KErrNone;
+}
+
+/*!
+ Provides a list of uids of applications installed by the given package.
+ \param[in] componentId component id of an application to be uninstalled.
+ \param[out] applicationsUids a list of uids of applications in the package
+      of the given component id.
+ \retval true if there is no error.
+ */
+
+bool CaSoftwareRegistryPrivate::getApplicationsUids(int componentId,
+    QStringList &applicationsUids)
+{
+    TRAPD(error, getApplicationsUidsL(componentId, applicationsUids));
+    return error == KErrNone;
+}
+
+/*!
+ Provides details needed for uninstalling process of Java applications
+   (leaving version).
+ \param[in] componentId component id of an application to be uninstalled.
+ \param[out] componentName a name of the component.
+ \param[out] applicationsUids a list of uids of applications in the package
+      of the given component id.
+ \param[out] confirmationMessage optional deletion confirmation message,
+      null string means the lack of the message.
+ */
+void CaSoftwareRegistryPrivate::getUninstallDetailsL(int componentId,
+    QString &componentName,
+    QStringList &appUids,
+    QString &confirmationMessage)
+{
+    componentName.clear();
+    appUids.clear();
+    confirmationMessage.clear();
+
+    if (componentId >= 1) {
+        TComponentId componentIdValue(componentId);
+        RArray<TUid> appUidsArray;
+        CleanupClosePushL(appUidsArray);
+        CLocalizablePropertyEntry *confirmationMessageProperty = NULL;
+
+        RSoftwareComponentRegistry softwareComponentRegistry;
+        CleanupClosePushL(softwareComponentRegistry);
+        User::LeaveIfError(softwareComponentRegistry.Connect());
+
+        CComponentEntry *entry = CComponentEntry::NewLC();
+        softwareComponentRegistry.GetComponentL(componentId, *entry);
+        softwareComponentRegistry.GetAppUidsForComponentL(componentIdValue,
+            appUidsArray);
+
+        CPropertyEntry *confirmationProperty =
+            softwareComponentRegistry.GetComponentPropertyL(componentId,
+            KConfirmMessageKey);
+        if (confirmationProperty &&
+            confirmationProperty->PropertyType() ==
+                CPropertyEntry::ELocalizedProperty) {
+            confirmationMessageProperty =
+                static_cast<CLocalizablePropertyEntry *>(
+                    confirmationProperty);
+        } else {
+            delete confirmationProperty;
+            confirmationProperty = NULL;
+        }
+
+        QT_TRYCATCH_LEAVING(componentName =
+            XQConversions::s60DescToQString(entry->Name());
+            for (TInt i = 0; i<appUidsArray.Count(); i++) {
+                appUids.append(QString::number(appUidsArray[i].iUid));
+            }
+            if (confirmationMessageProperty) {
+                confirmationMessage = XQConversions::s60DescToQString(
+                    confirmationMessageProperty->StrValue());
+            }
+        );
+
+        CleanupStack::PopAndDestroy(3, &appUidsArray);
+    }
+}
+
+/*!
+ Provides details needed for uninstalling process of Java applications
+   (leaving version).
+ \param[in] componentId component id of an application to be uninstalled.
+ \param[out] applicationsUids a list of uids of applications in the package
+      of the given component id.
+ */
+void CaSoftwareRegistryPrivate::getApplicationsUidsL(int componentId,
+    QStringList &appUids)
+{
+    appUids.clear();
+    if (componentId >= 1) {
+        TComponentId componentIdValue(componentId);
+        RArray<TUid> appUidsArray;
+        CleanupClosePushL(appUidsArray);
+
+        RSoftwareComponentRegistry softwareComponentRegistry;
+        CleanupClosePushL(softwareComponentRegistry);
+        User::LeaveIfError(softwareComponentRegistry.Connect());
+
+        softwareComponentRegistry.GetAppUidsForComponentL(componentIdValue,
+            appUidsArray);
+
+        QT_TRYCATCH_LEAVING(
+            for (TInt i = 0; i<appUidsArray.Count(); i++) {
+                appUids.append(QString::number(appUidsArray[i].iUid));
+            }
+        );
+        CleanupStack::PopAndDestroy(2, &appUidsArray);
+    }
+}
+
+/*!
  \param componentId Component id of the entry which details are requested for.
  \return Map of component details if component id was greater than 0 or
  empty map otherwise. 
@@ -73,13 +209,18 @@
     if (componentId >= 1) {
         RSoftwareComponentRegistry softwareComponentRegistry;
         ScrScopedPointer scr(&softwareComponentRegistry);
-        QT_TRAP_THROWING(User::LeaveIfError(scr->Connect()));
-        
-        QScopedPointer<CComponentEntry> entry;
-        
-        QT_TRAP_THROWING(entry.reset(CComponentEntry::NewL()));
-        QT_TRAP_THROWING(scr->GetComponentL(componentId, *entry));
-        result = entryDetails(*entry);
+        if (scr->Connect() == KErrNone) {
+            
+            QScopedPointer<CComponentEntry> entry;
+            
+            QT_TRAP_THROWING(entry.reset(CComponentEntry::NewL()));
+            
+            TBool resultCode = EFalse;
+            TRAPD(leaveCode, resultCode = scr->GetComponentL(componentId, *entry));
+            if (leaveCode == KErrNone && resultCode) {
+                result = entryDetails(*entry);
+            }
+        }
     }
     
     return result;
@@ -104,7 +245,8 @@
         XQConversions::s60DescToQString(entry.Vendor());
         
     QString drives;
-    TChar drive;
+    QString drv;
+    TChar drive;    
     
     const TInt driveListLen(entry.InstalledDrives().Length());
     for (TInt i( 0 ); i < driveListLen; ++i) {
@@ -112,50 +254,70 @@
             
             if (!drives.isEmpty()) {
                 drives = drives.append(",");
-             }  
-            
-            if(DriveInfo::GetDefaultDrive(DriveInfo::EDefaultPhoneMemory, drive ) == KErrNone 
+            }  
+            drv = QString(QChar('A'+ i)).append(":");
+            if(DriveInfo::GetDefaultDrive(
+                    DriveInfo::EDefaultPhoneMemory, drive ) == KErrNone 
                     && QChar('A'+ i) == QChar(drive))
                 {
-                drives = drives.append(QChar('A'+ i)).append(":").append(
-                        " txt_applib_dialog_1_device_memory");
+                drives = drives.append(
+                        HbParameterLengthLimiter("txt_applib_dialog_1_device_memory").arg(
+                          QString(QChar('A'+ i)).append(":")));
                 }
-            else if(DriveInfo::GetDefaultDrive(DriveInfo::EDefaultMassStorage, drive ) == KErrNone 
+            else if(DriveInfo::GetDefaultDrive(
+                    DriveInfo::EDefaultMassStorage, drive ) == KErrNone 
                     && QChar('A'+ i) == QChar(drive))
                 {
-                drives = drives.append(QChar('A'+ i)).append(":").append(
-                        " txt_applib_dialog_1_mass_storage");
+                drives = drives.append(
+                        HbParameterLengthLimiter("txt_applib_dialog_1_mass_storage").arg(
+                          QString(QChar('A'+ i)).append(":")));
                 }
-            else if(DriveInfo::GetDefaultDrive(DriveInfo::EDefaultRemovableMassStorage, drive ) == KErrNone 
+            else if(DriveInfo::GetDefaultDrive(
+                    DriveInfo::EDefaultRemovableMassStorage, drive ) == KErrNone 
                     && QChar('A'+ i) == QChar(drive))
                 {
                 RFs fs;
                 RFSScopedPointer fSPointer(&fs);
-                qt_symbian_throwIfError(fs.Connect());
-
-                TInt driveNumber;
-                TVolumeInfo tv;
-                DriveInfo::GetDefaultDrive(DriveInfo::EDefaultRemovableMassStorage, driveNumber );
-                
-                qt_symbian_throwIfError(fs.Volume(tv, driveNumber));
-                if(tv.iName.Length()) {
-                    drives = drives.append(QChar('A'+ i)).append(": ").append(
-                                XQConversions::s60DescToQString(tv.iName));                
+                if (fs.Connect() == KErrNone) {
+                    TInt driveNumber;
+                    TVolumeInfo tv;
+                    DriveInfo::GetDefaultDrive(
+                            DriveInfo::EDefaultRemovableMassStorage, driveNumber );
+                    qt_symbian_throwIfError(fs.Volume(tv, driveNumber));
+                    if(tv.iName.Length()) { 
+                        drives = drives.append(
+                                HbParameterLengthLimiter("txt_applib_dialog_1_2").arg(
+                                   QString(QChar('A'+ i)).append(":")).arg(
+                                           XQConversions::s60DescToQString(tv.iName)));                       
+                    }
+                    else {
+                        drives = drives.append(
+                            HbParameterLengthLimiter("txt_applib_dialog_1_memory_card").arg(
+                              QString(QChar('A'+ i)).append(":")));           
+                    }
                 }
-                else {
-                    drives = drives.append(QChar('A'+ i)).append(":").append(
-                        " txt_applib_dialog_1_memory_card");                
-                }
-            }
-            else {
+            } else {
                 drives = drives.append(QChar('A'+ i)).append(":");   
             }
         }
     }
     
     detailMap[CaSoftwareRegistry::componentDriveInfoKey()] = drives;
-    detailMap[CaSoftwareRegistry::componentSizeKey()].setNum(
-        entry.ComponentSize() / 1024);
+    
+
+    static const TInt64 KKilo = 1024;
+    static const TInt64 KMega = KKilo * KKilo;
+    if(entry.ComponentSize() >= KMega) {
+        detailMap[CaSoftwareRegistry::componentSizeKey()] = 
+            HbParameterLengthLimiter("txt_applib_dialog_l1_mb").arg(QString().setNum(
+                    static_cast<double>(entry.ComponentSize() / KMega)));
+    }
+    else {
+        detailMap[CaSoftwareRegistry::componentSizeKey()] = 
+            HbParameterLengthLimiter("txt_applib_dialog_l1_kb").arg(QString().setNum(
+                    static_cast<double>(entry.ComponentSize() / KKilo)));
+    }
+
     
     detailMap[CaSoftwareRegistry::componentTypeKey()] = 
         XQConversions::s60DescToQString(entry.SoftwareType());
--- a/contentstorage/casoftwareregistry/src/casoftwareregistry.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/casoftwareregistry/src/casoftwareregistry.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -15,8 +15,8 @@
  *
  */
 #include <QtGlobal>
-#include <QMetaType>
 #include <QString>
+#include <QStringList>
 
 
 #include "casoftwareregistry.h"
@@ -94,6 +94,53 @@
 }
 
 /*!
+ Provides details needed for uninstalling process of Java applications.
+ \code
+ QSharedPointer<CaSoftwareRegistry> service = CaSoftwareRegistry::create();
+ int componentId(20);
+ QString &componentName,
+ QStringList applicationsUids;
+ QString confirmationMessage;
+ CaSoftwareRegistry::DetailMap detailMap = service->getUninstallDetails(
+    componentId,
+    componentName,
+    applicationsUids,
+    confirmationMessage);
+ \endcode
+ \param[in] componentId component id of an application to be uninstalled.
+ \param[out] componentName a name of the component.
+ \param[out] applicationsUids a list of uids of applications in the package
+      of the given component id.
+ \param[out] confirmationMessage optional deletion confirmation message,
+      null string means the lack of the message.
+ \retval true if there is no error.
+ */
+bool CaSoftwareRegistry::getUninstallDetails(int componentId,
+    QString &componentName,
+    QStringList &applicationsUids,
+    QString &confirmationMessage)
+{
+    return m_d->getUninstallDetails(componentId,
+        componentName,
+        applicationsUids,
+        confirmationMessage);
+}
+
+/*!
+ Provides a list of uids of applications installed by the given package.
+ \param[in] componentId component id of an application to be uninstalled.
+ \param[out] applicationsUids a list of uids of applications in the package
+      of the given component id.
+ \retval true if there is no error.
+ */
+
+bool CaSoftwareRegistry::getApplicationsUids(int componentId,
+    QStringList &applicationsUids)
+{
+    return m_d->getApplicationsUids(componentId, applicationsUids);
+}
+
+/*!
  The method provides component details from USIF for a given component id.
  \code
  QSharedPointer<CaSoftwareRegistry> service = CaSoftwareRegistry::create();
@@ -165,5 +212,3 @@
     return key;
 }
 
-
-
--- a/contentstorage/casoftwareregistry/stub/inc/casoftwareregistry_p.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/casoftwareregistry/stub/inc/casoftwareregistry_p.h	Wed Jun 23 18:33:40 2010 +0300
@@ -15,12 +15,13 @@
  *
  */
 
-#ifndef CA_SOFTWARE_REGISTRY_PRIVATE_H
-#define CA_SOFTWARE_REGISTRY_PRIVATE_H
+#ifndef CASOFTWAREREGISTRY_P_H
+#define CASOFTWAREREGISTRY_P_H
 
 #include <QHash>
 #include <QString>
 
+class QStringList;
 class CaSoftwareRegistry;
 
 class CaSoftwareRegistryPrivate
@@ -32,6 +33,14 @@
         CaSoftwareRegistry *softwareRegistryPublic);
     ~CaSoftwareRegistryPrivate();
 
+    bool getApplicationsUids(int componentId,
+        QStringList &applicationsUids);
+
+    bool getUninstallDetails(int componentId,
+        QString &componentName,
+        QStringList &applicationsUids,
+        QString &confirmationMessage);
+
     DetailMap entryDetails(int componentId) const;
 private:
 
@@ -39,4 +48,4 @@
 
 };
 
-#endif // CA_SOFTWARE_REGISTRY_PRIVATE_H
+#endif // CASOFTWAREREGISTRY_P_H
--- a/contentstorage/casoftwareregistry/stub/src/casoftwareregistry_p.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/casoftwareregistry/stub/src/casoftwareregistry_p.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -16,7 +16,7 @@
  */
 #include <QtGlobal>
 #include <QMetaType>
-#include <QString>
+#include <QStringList>
 
 
 #include "casoftwareregistry.h"
@@ -39,6 +39,45 @@
 {
 }
 
+/*!
+ Provides details needed for uninstalling process of Java applications
+ (windows stub).
+ \param[in] componentId component id of an application to be uninstalled.
+ \param[out] componentName a name of the component.
+ \param[out] applicationsUids a list of uids of applications in the package
+      of the given component id.
+ \param[out] confirmationMessage optional deletion confirmation message,
+      null string means the lack of the message.
+ \retval true if there is no error.
+ */
+bool CaSoftwareRegistryPrivate::getUninstallDetails(int componentId,
+    QString &componentName,
+    QStringList &applicationsUids,
+    QString &confirmationMessage)
+{
+    Q_UNUSED(componentId);
+    componentName.clear();
+    applicationsUids.clear();
+    confirmationMessage.clear();
+    return true;
+}
+
+/*!
+ Provides a list of uids of applications installed by the given package
+ (windows stub).
+ \param[in] componentId component id of an application to be uninstalled.
+ \param[out] applicationsUids a list of uids of applications in the package
+      of the given component id.
+ \retval true if there is no error.
+ */
+bool CaSoftwareRegistryPrivate::getApplicationsUids(int componentId,
+    QStringList &applicationsUids)
+{
+    Q_UNUSED(componentId);
+    applicationsUids.clear();
+    return true;
+}
+
 /*
  Stub for windows development.
  \param Component id.
--- a/contentstorage/casrv/caappscanner/group/caappscanner.mmp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/casrv/caappscanner/group/caappscanner.mmp	Wed Jun 23 18:33:40 2010 +0300
@@ -36,7 +36,6 @@
 USERINCLUDE     ../../../inc
 USERINCLUDE     ../../../cautils/inc
 USERINCLUDE     ../../../srvinc
-USERINCLUDE     ../../../castorage/inc
 
 
 MW_LAYER_SYSTEMINCLUDE
--- a/contentstorage/casrv/caappscanner/inc/casrvappscanner.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/casrv/caappscanner/inc/casrvappscanner.h	Wed Jun 23 18:33:40 2010 +0300
@@ -150,6 +150,9 @@
      * @result id of download collection.
      */
     TInt GetCollectionDownloadIdL();
+    
+    //TODO temporary sollution for fake uninstall progres notification
+    void ClearUninstallFlagL();
 
     /**
      * Gets collectionId of all collection.
@@ -308,12 +311,6 @@
     void HandleMissingItemsL( RPointerArray<CCaInnerEntry>& aCaEnties );
 
     /**
-     * Removes app from storage.
-     * @param aAppEntry app to remove.
-     */
-    void RemoveAppL( CCaInnerEntry* aAppEntry );
-
-    /**
      * Set "missing" flag.
      * @param aEntry entry.
      */
--- a/contentstorage/casrv/caappscanner/src/casrvappscanner.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/casrv/caappscanner/src/casrvappscanner.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -141,6 +141,10 @@
     iApaLsSession.RegisterListPopulationCompleteObserver( iStatus );
     iCollectionDownloadId = 0;
     iAllCollectionId = 0;
+    
+    //TODO temporary sollution for fake uninstall progres notification
+    ClearUninstallFlagL();
+    
     SetActive();
     }
 
@@ -148,6 +152,29 @@
 //
 // ---------------------------------------------------------
 //
+//TODO temporary sollution for fake uninstall progres notification
+void CCaSrvAppScanner::ClearUninstallFlagL()
+    {
+    CCaInnerQuery* uninstallQuery = CCaInnerQuery::NewLC();
+    uninstallQuery->SetFlagsOn( EUninstall );
+    
+    RPointerArray<CCaInnerEntry> resultArray;
+    CleanupResetAndDestroyPushL( resultArray );
+    iCaStorageProxy.GetEntriesL( uninstallQuery, resultArray );
+    for( TInt i = 0; i < resultArray.Count(); i++ )
+    {
+        resultArray[i]->SetFlags( resultArray[i]->GetFlags() & ~EUninstall );
+        iCaStorageProxy.AddL( resultArray[i] );
+    }
+    CleanupStack::PopAndDestroy( &resultArray );
+    
+    CleanupStack::PopAndDestroy( uninstallQuery );    
+    }
+
+// ---------------------------------------------------------
+//
+// ---------------------------------------------------------
+//
 void CCaSrvAppScanner::RunL()
     {
     User::LeaveIfError( iStatus.Int() );
@@ -912,13 +939,13 @@
         RBuf attrVal;
         attrVal.CleanupClosePushL();
         attrVal.CreateL( KCaMaxAttrValueLen );
-        aEntry->FindAttribute( KCaAttrLongName, attrVal );
-        if( attrVal.Compare( info->iCaption ) != KErrNone
+        aEntry->FindAttribute( KCaAttrShortName, attrVal );
+        if( attrVal.Compare( info->iShortCaption ) != KErrNone
                 || aEntry->GetText().Compare( info->iCaption )
                         != KErrNone )
             {
             aEntry->SetTextL( info->iCaption );
-            aEntry->AddAttributeL( KCaAttrLongName, info->iCaption );
+            aEntry->AddAttributeL( KCaAttrShortName, info->iShortCaption );
             changed = ETrue;
             }
         
@@ -939,9 +966,20 @@
                 aEntry->AddAttributeL(
                         KCaAttrAppType,
                         KCaAttrAppTypeValueJava );
-                aEntry->AddAttributeL(
-                        KCaAttrAppSettingsPlugin,
-                        KCaAttrJavaAppSettingsPluginValue );
+                
+                TComponentId compId = 
+                        iSoftwareRegistry.GetComponentIdForAppL( info->iUid );
+                CPropertyEntry* propertyEntry = 
+                    iSoftwareRegistry.GetComponentPropertyL( compId, KCaScrPropertyAppSettings );
+                CleanupStack::PushL( propertyEntry );
+                if ( propertyEntry && 
+                        propertyEntry->PropertyType() == CPropertyEntry::ELocalizedProperty ) 
+                    {
+                    aEntry->AddAttributeL(
+                            KCaAttrAppSettingsPlugin,
+                            static_cast<CLocalizablePropertyEntry*>(propertyEntry)->StrValue() );
+                    }
+                CleanupStack::PopAndDestroy( propertyEntry );
                 }
             else if ( appTypeUid == KCWRTApplicationTypeUid )
                 {
@@ -998,9 +1036,9 @@
             TUint mmcId = 0;
             MenuUtils::GetTUint( attrVal, mmcId );
             if( ( mmcId && KErrNotFound != iMmcHistory->Find( mmcId )
-                    && mmcId != CurrentMmcId() ) ||
-                    ( attrVal == KCaMassStorage() &&
-                    IsDriveInUse( DriveInfo::EDefaultMassStorage ) ) )
+                        && mmcId != CurrentMmcId() ) 
+                    || ( attrVal == KCaMassStorage() 
+                        && IsDriveInUse( DriveInfo::EDefaultMassStorage ) ) )
                 {
                 // This item is on an MMC which is currently
                 // in the MMC history or on a mass storage in use.
@@ -1009,7 +1047,7 @@
                 }
             else
                 {
-                aCaEntries[i]->RemoveAttributeL(KCaAttrMmcId());
+                aCaEntries[i]->RemoveAttributeL( KCaAttrMmcId() );
                 ClearVisibleFlagL( aCaEntries[i] );
                 }
             }
@@ -1025,24 +1063,11 @@
 //
 // ---------------------------------------------------------
 //
-void CCaSrvAppScanner::RemoveAppL( CCaInnerEntry* aAppEntry )
-    {
-    RArray<TInt> idsToRemove;
-    CleanupClosePushL( idsToRemove );
-    idsToRemove.AppendL( aAppEntry->GetId() );
-    iCaStorageProxy.RemoveL( idsToRemove );
-    CleanupStack::PopAndDestroy( &idsToRemove );
-    }
-
-// ---------------------------------------------------------
-//
-// ---------------------------------------------------------
-//
 void CCaSrvAppScanner::SetMissingFlagL( CCaInnerEntry* aEntry )
     {
     if( !( aEntry->GetFlags() & EMissing ) )
         {
-        aEntry->SetFlags( aEntry->GetFlags() | EMissing );
+        aEntry->SetFlags( ( aEntry->GetFlags() | EMissing ) & ~EUninstall );
         iCaStorageProxy.AddL( aEntry, EFalse, EItemDisappeared );
         }
     }
@@ -1057,6 +1082,7 @@
         {
         aEntry->SetFlags(
                 aEntry->GetFlags() &
+                ~EUninstall &
                 ~EVisible &
                 ~EMissing &
                 ~EUsed );
--- a/contentstorage/casrv/caappscanner/src/proxy.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/casrv/caappscanner/src/proxy.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -26,6 +26,10 @@
     IMPLEMENTATION_PROXY_ENTRY(0x20026FAF, CCaAppScannerHandler::NewL)
     };
 
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC SKIP
+#endif //COVERAGE_MEASUREMENT (proxy for instantiation)
+
 // Function used to return an instance of the proxy table.
 EXPORT_C const TImplementationProxy* ImplementationGroupProxy(
         TInt& aTableCount )
@@ -34,3 +38,9 @@
             / sizeof(TImplementationProxy);
     return ImplementationTable;
     }
+
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC ENDSKIP
+#endif //COVERAGE_MEASUREMENT
+
+
--- a/contentstorage/casrv/calocalizerscanner/calocalizerscanner.pro	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/casrv/calocalizerscanner/calocalizerscanner.pro	Wed Jun 23 18:33:40 2010 +0300
@@ -56,7 +56,8 @@
     LIBS += -leuser \
         -lecom \
         -lcautils \
-        -lcamenu
+        -lcamenu \
+        -lefsrv
 }
 
 exportResources(./*.qm, resource/qt/translations)
--- a/contentstorage/casrv/calocalizerscanner/inc/calocalizerscannerproxy.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/casrv/calocalizerscanner/inc/calocalizerscannerproxy.h	Wed Jun 23 18:33:40 2010 +0300
@@ -22,8 +22,6 @@
 #include <e32std.h>
 #include <e32base.h>
 
-#include "hbtextresolversymbian.h"
-
 #include "castorage_global.h"
 
 // FORWARD DECLARATIONS
--- a/contentstorage/casrv/calocalizerscanner/src/calocalizerscannerproxy.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/casrv/calocalizerscanner/src/calocalizerscannerproxy.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -20,6 +20,7 @@
 #include <qtranslator.h>
 #include <calocalizationentry.h>
 #include <QLocale>
+#include <hbtextresolversymbian.h>
 
 //#include "cainternaltypes.h"
 #include "caarraycleanup.inl"
@@ -150,6 +151,7 @@
             }
         CleanupStack::PopAndDestroy( localizedName );
         }
+    HbTextResolverSymbian::Init( _L(""), KLocalizationFilepathZ );
    
     CleanupStack::PopAndDestroy( &ids );
     CleanupStack::PopAndDestroy( &entries );
--- a/contentstorage/casrv/casatmonitor/src/casatmonitor.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/casrv/casatmonitor/src/casatmonitor.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -115,7 +115,7 @@
         resultArray[0]->SetRole( EItemEntryRole );
         resultArray[0]->SetEntryTypeNameL( KCaTypeApp );
         resultArray[0]->SetTextL( satName );
-        resultArray[0]->AddAttributeL( KCaAttrLongName, satName );
+        resultArray[0]->AddAttributeL( KCaAttrShortName, satName );
         resultArray[0]->SetFlags( resultArray[0]->GetFlags() | EVisible );
 
         iCaStorageProxy.AddL( resultArray[0] );
--- a/contentstorage/casrv/casatmonitor/src/casatnotifier.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/casrv/casatmonitor/src/casatnotifier.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -95,6 +95,9 @@
     iProperty.Cancel();
     }
 
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC SKIP
+#endif //COVERAGE_MEASUREMENT (error ignored)
 // ---------------------------------------------------------------------------
 // CCaSatNotifier::RunError
 // ---------------------------------------------------------------------------
@@ -103,6 +106,9 @@
     {
     return KErrNone;
     }
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC ENDSKIP
+#endif //COVERAGE_MEASUREMENT
 
 // ---------------------------------------------------------------------------
 // CCaSatNotifier::RunL
--- a/contentstorage/casrv/causifscanner/src/causifscanner.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/casrv/causifscanner/src/causifscanner.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -161,7 +161,6 @@
     if( aEntry->Name().Compare( KNullDesC ) )
         {
         aCaEntry->SetTextL( aEntry->Name() );
-        aCaEntry->AddAttributeL( KCaAttrLongName, aEntry->Name() );
         }
     if( !aEntry->IsHidden() )
         {
--- a/contentstorage/casrv/causifscanner/src/proxy.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/casrv/causifscanner/src/proxy.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -28,6 +28,10 @@
     IMPLEMENTATION_PROXY_ENTRY(KCaUsifScannerImplProxyUid, CCaUsifScanner::NewL)
     };
 
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC SKIP
+#endif //COVERAGE_MEASUREMENT (proxy for instantiation)
+
 // Function used to return an instance of the proxy table.
 EXPORT_C const TImplementationProxy* ImplementationGroupProxy(
         TInt& aTableCount )
@@ -35,3 +39,8 @@
     aTableCount = sizeof( ImplementationTable ) / sizeof(TImplementationProxy);
     return ImplementationTable;
     }
+
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC ENDSKIP
+#endif //COVERAGE_MEASUREMENT
+
--- a/contentstorage/casrv/cawidgetscanner/group/cawidgetscanner.mmp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/casrv/cawidgetscanner/group/cawidgetscanner.mmp	Wed Jun 23 18:33:40 2010 +0300
@@ -45,7 +45,6 @@
 USERINCLUDE     ../../casrvmgr/inc
 USERINCLUDE     ../../../cautils/inc
 USERINCLUDE     ../../../srvinc
-USERINCLUDE     ../../../castorage/inc
 USERINCLUDE     ../../../inc
 
 MW_LAYER_SYSTEMINCLUDE
--- a/contentstorage/casrv/cawidgetscanner/inc/cawidgetdescription.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/casrv/cawidgetscanner/inc/cawidgetdescription.h	Wed Jun 23 18:33:40 2010 +0300
@@ -1,19 +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:
-*
-*/
+ * 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:
+ *
+ */
 #ifndef C_WIDGETDESCRIPTION_H
 #define C_WIDGETDESCRIPTION_H
 
@@ -49,13 +49,14 @@
 
     /**
      * Static method to compare two CCaWidgetDescription objects
+     * used in Find() method
      * @param aFirst first item to compare
      * @param aSecond second item to compare
-     * @return ETrue if iLibrary value is the same in both objects,
+     * @return ETrue if widget uri value is the same in both objects,
      * otherwise returns EFalse
      */
     static TBool Compare( const CCaWidgetDescription& aFirst,
-            const CCaWidgetDescription& aSecond);
+            const CCaWidgetDescription& aSecond );
 
     /**
      * Method to compare two CCaWidgetDescription objects
@@ -78,6 +79,12 @@
     void SetPackageUidL( const TDesC& aPackageUid );
 
     /*
+     * PackageUid getter
+     * @return iPackageUid - package UID
+     */
+    TUint GetPackageUidL();
+    
+    /*
      * Title setter
      * @param aTitle widget title
      */
@@ -102,107 +109,88 @@
     void SetIconUriL( const TDesC& aIconUri );
 
     /*
+     * Preview image name setter.
+     * @param aPreview preview image name identifier.
+     */
+    void SetPreviewImageNameL( const TDesC& aPreviewName );
+    
+    /*
      * Library setter
      * @param aLibrary widget library
      */
     void SetLibraryL( const TDesC& aLibrary );
 
     /*
-     * Path setter
-     * @param aLibrary widget library
-     */
-    void SetPathL( const TDesC& aPath );
-
-    /*
-     * Path getter
-     * @return widget library
-     */
-    TPtrC GetPath( ) const;
-
-    /*
-     * Missing flag setter
-     * @param aMissing flag
+     * Content storage entry id getter
+     * @return CS entry id
      */
-    void SetMissing( TBool aMissing );
-
-    /*
-     * Visible flag setter
-     * @param aVisible flag
-     */
-    void SetVisible( TBool aVisible );
-
-    /*
-     * Used flag setter
-     * @param aUsed flag
-     */
-    void SetUsed( TBool aUsed );
-
-    /*
-     * Content arsenal entry id getter
-     * @return CA entry id
-     */
-    TInt GetEntryId( ) const;
+    TInt GetEntryId() const;
 
     /*
      * MMC id getter
      * @return CA entry id
      */
-    TPtrC GetMmcId( ) const;
-    
+    TPtrC GetMmcId() const;
+
     /*
      * Library getter
      * @return widget library
      */
-    TPtrC GetLibrary( ) const;
+    TPtrC GetLibrary() const;
 
     /*
      * Description getter
      * @return widget Description
      */
-    TPtrC GetDescription( ) const;
+    TPtrC GetDescription() const;
 
     /*
      * Uri getter
      * @return widget Uri
      */
-    TPtrC GetUri( ) const;
+    TPtrC GetUri() const;
 
     /*
      * IconUri getter
      * @return widget IconUri
      */
-    TPtrC GetIconUri( ) const;
+    TPtrC GetIconUri() const;
 
     /*
+     * Preview image name getter
+     * @return widget preview image name
+     */
+    TPtrC GetPreviewImageName( ) const;
+    
+    /*
      * Title getter
-     * @return widget IconUri
+     * @return widget title
      */
-    TPtrC GetTitle( ) const;
+    TPtrC GetTitle() const;
 
     /*
      * Missing flag
      * @return ETrue if flag missing is set
      */
-    TBool IsMissing( ) const;
+    TBool IsMissing() const;
 
     /*
      * Used flag
      * @return ETrue if flag used is set
      */
-    TBool IsUsed( ) const;
-    
+    TBool IsUsed() const;
 
     /*
      * Used flag
      * @return ETrue if flag visible is set
      */
-    TBool IsVisible( ) const;
+    TBool IsVisible() const;
 
     /*
      * Entry getter
      * @return entry representing widget
      */
-    CCaInnerEntry* GetEntryLC( ) const;
+    CCaInnerEntry* GetEntryLC() const;
 
     /*
      * Modification time setter
@@ -224,54 +212,55 @@
      * Set service fw xml filename
      * @param aServiceXml Service xml filename
      */
-    void SetServiceXmlL(const TDesC& aServiceXml);
+    void SetServiceXmlL( const TDesC& aServiceXml );
     /*
      * Get service fw xml filename
      * @return Service xml filename
      */
     TPtrC GetServiceXml() const;
-    
-    /*
+
     /*
-    * Localizes title and description, fill string id fields
-    */
+     /*
+     * Localizes title and description, fill string id fields
+     */
     void LocalizeTextsL();
-    
+
     /*
      * StringIdDescription time getter
      * @return StringIdDescription
      */
     TPtrC GetStringIdDescription() const;
-    
+
     /*
      * StringIdTitle time getter
      * @return widget StringIdTitle
      */
     TPtrC GetStringIdTitle() const;
-    
-     /*
+
+    /*
      * Set manifest file path name.
      * @param aServiceXml Manifest file path name.
      */
-    void SetManifestFilePathNameL(const TDesC& aManifestFilePathName);
-    
+    void SetManifestFilePathNameL( const TDesC& aManifestFilePathName );
+
     /*
      * Get manifest file path name.
      * @return Manifest file path name.
      */
     TPtrC GetManifestFilePathName() const;
 
+    /*
+     * Set logical string for description.
+     * @param aStringIdDescription logical string for description.
+     */
     void SetStringIdDescriptionL( const TDesC& aStringIdDescription );
 
+    /*
+     * Set logical string for title.
+     * @param aStringIdTitle logical string for title.
+     */
     void SetStringidTitleL( const TDesC& aStringIdTitle );
 
-private:
-    /*
-     * Library name getter
-     * @return libraru name
-     */
-    TPtrC GetLibraryName( ) const;
-
     /*
      * Flag setter
      * @param aFlag flag
@@ -279,7 +268,24 @@
      */
     void SetFlag( TInt aFlag, TBool aValue );
 
-private:
+    /*
+     * Valid setter
+     * @param aVal value
+     */ 
+    void SetValid(TBool aVal);
+    
+    /*
+     * Valid getter
+     * @return valid value
+     */ 
+    TBool CCaWidgetDescription::IsValid();
+
+    /*
+     * Library name getter
+     * @return libraru name
+     */
+    TPtrC GetLibraryName() const;
+
 
     /**
      * C++ default constructor.
@@ -289,17 +295,20 @@
     /**
      * By default Symbian 2nd phase constructor is private.
      */
-    void ConstructL( );
+    void ConstructL();
     void ConstructL( CCaInnerEntry* aEntry );
 
-
-private:
     // Data
 
     /*
      * Content Storage entry id
      */
     TInt iEntryId;
+    
+    /*
+     * Marks vidget as valid, used to remove widgets
+     */
+    TBool iValid;
 
     /*
      * Package UID
@@ -330,12 +339,11 @@
      * Widget icon uri. Own
      */
     RBuf iIconUri;
-
+    
     /*
-     * Widget library. Own
+     * Preview name. Own
      */
-    RBuf iPath;
-
+    RBuf iPreviewImageName;
     /*
      * Widget library. Own
      */
--- a/contentstorage/casrv/cawidgetscanner/inc/cawidgetscannerdef.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/casrv/cawidgetscanner/inc/cawidgetscannerdef.h	Wed Jun 23 18:33:40 2010 +0300
@@ -25,12 +25,13 @@
 const TInt KModificationTimeLength = 17;
 const TInt KNoId = -1;
 
+const TInt KPackageUidPosition = 9; // position in path from end
+const TInt KPackageUidLength = 8;
+
+
 // LIT
 _LIT( KDoubleSlash, "\\" );
 _LIT( KWidgetScannerUnderline, "_" );
-_LIT( KWidgetScannerCaEntry, "CA_ENTRY" );
-_LIT( KWidgetScannerEnText, "EN_TEXT" );
-_LIT( KWidgetScannerEnDescription, "EN_DESCRIPTION" );
 
 
 _LIT( KManifest, ".manifest");
@@ -48,7 +49,16 @@
 
 _LIT8(KWidgetManifest, "hswidgetmanifest");
 _LIT8(KIcon, "icon");
+_LIT8( KPreviewImageElementName, "previewimage" );
 _LIT8(KServiceXml, "servicexml");
 
+// CONSTANTS
+_LIT(KAttrWidgetPath, "widget:path");
+_LIT(KAttrWidgetLibrary, "widget:library");
+_LIT(KAttrWidgetUri, "widget:uri");
+_LIT(KAttrWidgetServiceXml, "widget:servicexml");
+_LIT(KSlash, "/");
+_LIT(KDllExt, ".dll");
+_LIT(KNoLibrary, "NoLibrary");
 
 #endif // CA_WIDGETSCANNERDEF_H
--- a/contentstorage/casrv/cawidgetscanner/inc/cawidgetscannerinstallnotifier.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/casrv/cawidgetscanner/inc/cawidgetscannerinstallnotifier.h	Wed Jun 23 18:33:40 2010 +0300
@@ -1,20 +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:  Sis package installation event listener
+ * 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:  Sis package installation event listener
+ *
+ */
 
 #ifndef C_CAWIDGETSCANNERINSTALLNOTIFIER_H
 #define C_CAWIDGETSCANNERINSTALLNOTIFIER_H
@@ -61,12 +60,12 @@
      * @param aKey Key for central repository.
      */
     static CCaWidgetScannerInstallNotifier* NewL(
-        CCaWidgetScannerPlugin* aCallback, TUid aCategory, TUint aKey );
+            CCaWidgetScannerPlugin* aCallback, TUid aCategory, TUint aKey );
 
     /**
      * Destructor.
      */
-    virtual ~CCaWidgetScannerInstallNotifier ();
+    virtual ~CCaWidgetScannerInstallNotifier();
 
 private:
     /**
@@ -76,7 +75,7 @@
      * @param aKey Key for central repository.
      */
     CCaWidgetScannerInstallNotifier( CCaWidgetScannerPlugin* aCallback,
-        TUid aCategory, TUint aKey );
+            TUid aCategory, TUint aKey );
 
     /**
      * Symbian 2nd phase constructor.
--- a/contentstorage/casrv/cawidgetscanner/inc/cawidgetscannerparser.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/casrv/cawidgetscanner/inc/cawidgetscannerparser.h	Wed Jun 23 18:33:40 2010 +0300
@@ -21,17 +21,19 @@
 
 //  INCLUDES
 #include <e32base.h>
-#include <xmlengdomimplementation.h>
-#include <xmlengelement.h>
+#include <xml/dom/xmlengdomimplementation.h>
 #include <badesca.h>
 #include <f32file.h>
 #include "cawidgetdescription.h"
+#include "castorage_global.h"
 
 // CONSTANTS
 
 // FORWARD DECLARATIONS
+
 class CDir;
-
+CA_STORAGE_TEST_CLASS( T_CaWidgetScanner )
+class TXmlEngElement;
 /**
  *  Widget Parser
  *
@@ -58,124 +60,8 @@
      * WidgetsL
      * @return array containing widgets description
      */
-    RWidgetArray& WidgetsScanL( );
-
-private:
-
-    /**
-     * Looks for manifests on a drive
-     * @param aDriveLetter drive letter
-     */
-    void ScanOnDriveL( );
-
-    /**
-     * Parses all manifest files in a directory
-     * @param aDriveLetter drive letter
-     * @param aDirectoryName directory name
-     */
-    void ParseDirectoryL( const TDesC& aDirectoryName );
-
-    /**
-    * Parse manifest file
-    * @param aFilePath full file path to manifest file
-    * @param aPackageUid descriptor containing package uid
-    */
-    void ParseManifestFileL( const TDesC& aFilePath,
-        const TDesC& aPackageUid);
-
-    /**
-    * Parse a widget, store parsed object in an internal array
-    * @param aFilePath full file path to manifest file
-    * @param aElement widget element
-    * @param aPackageUid descriptor containing package uid
-    */
-    void ParseWidgetL( const TDesC& aFilePath,
-            TXmlEngElement aElement, const TDesC& aPackageUid );
-
-    /**
-     * Gets all directories from import folder
-     * @param aDriveLetter drive letter
-     * @return directories
-     */
-    CDir* GetDirectoriesLC( );
-
-    /**
-     * Returns import path
-     * @param aDriveLetter drive letter
-     * @return import path
-     */
-    HBufC* FullPathLC( );
-
-    /**
-     * Returns manifest directory path
-     * @param aDriveLetter drive letter
-     * @param aDirectoryName directory name
-     * @return manifest directory path
-     */
-    HBufC* GetManifestDirectoryPathLC( const TDesC& aDirectoryName );
-
-    /**
-     * Sets widgets URI
-     * @param aElement xml element
-     * @param aWidget widget to set value
-     */
-    void SetUriL( TXmlEngElement & aElement, CCaWidgetDescription * aWidget );
-
-    /**
-     * Sets widgets library and path created from library
-     * @param aElement xml element
-     * @param aPackageUid package uid
-     * @param aWidget widget to set value
-     */
-    void SetLibraryL( TXmlEngElement & aElement, const TDesC & aPackageUid,
-            CCaWidgetDescription * aWidget );
-
-    /**
-     * Sets widgets title
-     * @param aElement xml element
-     * @param aWidget widget to set value
-     */
-    void SetTitleL( TXmlEngElement & aElement, 
-            CCaWidgetDescription * aWidget );
-
-    /**
-     * Sets widgets description
-     * @param aElement xml element
-     * @param aWidget widget to set value
-     */
-    void SetDescriptionL( TXmlEngElement & aElement,
-            CCaWidgetDescription * aWidget );
-
-    /**
-     * Sets widgets visibility
-     * @param aElement xml element
-     * @param aWidget widget to set value
-     */
-    void SetVisibilityL( TXmlEngElement & aElement,
-            CCaWidgetDescription * aWidget );
-
-    /**
-     * Sets icons URI
-     * @param aElement xml element
-     * @param aPackageUid package uid
-     * @param aWidget widget to set value
-     */
-    void SetIconUriL( TXmlEngElement & aElement, const TDesC & aPackageUid,
-            CCaWidgetDescription * aWidget );
-
-    /**
-     * Sets widgets mmc id
-     * @param aWidget widget to set value
-     */
-    void SetMmcIdL( CCaWidgetDescription * aWidget );
+    RWidgetArray& WidgetsScanL( const RWidgetArray& aWidgets  );
     
-    void ParseUriL(TXmlEngElement & aElement);
-    void ParseTitleL(TXmlEngElement & aElement);
-    void ParseIconL(TXmlEngElement & aElement,  const TDesC & aPackageUid);
-    void ParseDescriptionL(TXmlEngElement & aElement);
-    void ParseHiddenL(TXmlEngElement & aElement);
-    void ParseServiceXmlL(TXmlEngElement & aElement);
-
 private:
 
     /**
@@ -188,13 +74,162 @@
      */
     void ConstructL( );
 
-private:
-    // Data
+
+    /**
+     * Looks for manifests on a drive
+     * @param aDrive drive to use
+     */
+    void ScanOnDriveL( TChar& aDrive );
+
+    /**
+     * Parses all manifest files in a directory
+     * @param aDirectoryName directory name
+     * @param aDrive drive to use
+     */
+    void ParseDirectoryL( const TDesC& aDirectoryName, TChar& aDrive );
+
+    /**
+    * Parse manifest file
+    * @param aFilePath full file path to manifest file
+    * @param aPackageUid descriptor containing package uid
+    * @param aDrive drive to use
+    */
+    void ParseManifestFileL( const TDesC& aFilePath,
+        const TDesC& aPackageUid, TChar& aDrive );
+
+    /**
+    * Parse a widget, store parsed object in an internal array
+    * @param aFilePath full file path to manifest file
+    * @param aElement widget element
+    * @param aPackageUid descriptor containing package uid
+    * @param aDrive drive to use
+    */
+    void ParseWidgetL( const TDesC& aFilePath,
+            TXmlEngElement& aElement, const TDesC& aPackageUid,
+            TChar& aDrive );
+
+    /**
+     * Gets all directories from import folder
+     * @param aDriveLetter drive letter
+     * @return directories
+     */
+    CDir* GetDirectoriesLC( TChar& aDrive );
+
+    /**
+     * Returns import path
+     * @param aDriveLetter drive letter
+     * @return import path
+     */
+    HBufC* FullPathLC( TChar& aDrive ) const;
+
+    /**
+     * Returns manifest directory path
+     * @param aDriveLetter drive letter
+     * @param aDirectoryName directory name
+     * @param aDrive drive to use
+     * @return manifest directory path
+     */
+    HBufC* GetManifestDirectoryPathLC( const TDesC& aDirectoryName, TChar& aDrive ) const;
+
+    /**
+     * Sets widgets URI
+     * @param aElement xml element
+     * @param aWidget widget to set value
+     */
+    void SetUriL( TXmlEngElement& aElement, CCaWidgetDescription* aWidget );
+
+    /**
+     * Sets widgets library and path created from library
+     * @param aElement xml element
+     * @param aPackageUid package uid
+     * @param aWidget widget to set value
+     */
+    void SetLibraryL( TXmlEngElement& aElement, const TDesC& aPackageUid,
+            CCaWidgetDescription* aWidget, TChar& aDrive );
 
-    /*
-     * Stores current drive letter
+    /**
+     * Sets widgets title
+     * @param aElement xml element
+     * @param aWidget widget to set value
+     */
+    void SetTitleL( TXmlEngElement& aElement, 
+            CCaWidgetDescription* aWidget );
+
+    /**
+     * Sets widgets description
+     * @param aElement xml element
+     * @param aWidget widget to set value
+     */
+    void SetDescriptionL( TXmlEngElement& aElement,
+            CCaWidgetDescription* aWidget );
+
+    /**
+     * Sets widgets visibility
+     * @param aElement xml element
+     * @param aWidget widget to set value
+     */
+    void SetVisibilityL( TXmlEngElement& aElement,
+            CCaWidgetDescription* aWidget );
+
+    /**
+     * Sets icons URI
+     * @param aElement xml element
+     * @param aPackageUid package uid
+     * @param aWidget widget to set value
+     */
+    void SetIconUriL( TXmlEngElement& aElement, const TDesC& aPackageUid,
+            CCaWidgetDescription* aWidget, TChar& aDrive );
+
+    /**
+     * Sets widgets mmc id
+     * @param aWidget widget to set value
      */
-    TChar iCurrentDriveLetter;
+    void SetMmcIdL( CCaWidgetDescription* aWidget, TChar& aDrive );
+    
+    void ParseUriL( TXmlEngElement& aElement,
+            CCaWidgetDescription* aWidgetDescriptor );
+    void ParseTitleL( TXmlEngElement& aElement,
+            CCaWidgetDescription* aWidgetDescriptor );
+    void ParseIconL( TXmlEngElement& aElement,  const TDesC& aPackageUid,
+            CCaWidgetDescription* aWidgetDescriptor, TChar& aDrive );
+    void ParseDescriptionL( TXmlEngElement& aElement,
+            CCaWidgetDescription* aWidgetDescriptor );
+    void ParseHiddenL( TXmlEngElement& aElement,
+            CCaWidgetDescription* aWidgetDescriptor );
+    void ParseServiceXmlL(TXmlEngElement & aElement,
+            CCaWidgetDescription* aWidgetDescriptor );
+    void SetModificationTimeL( const TDesC& aFilePath,
+            CCaWidgetDescription* aWidgetDescriptor );
+    
+    void ParsePreviewImageNameL( TXmlEngElement& aElement, 
+        const TDesC& aPackageUid,
+        CCaWidgetDescription* aWidgetDescriptor,
+        TChar& aDrive );
+
+    /**
+     * @param aElement xml document element.
+     * @return created descriptor with element's text value. Ownership
+     * of the descriptor is passed to the caller.
+     */
+    HBufC *CCaWidgetScannerParser::GetElementTextLC( 
+        const TXmlEngElement& aElement ) const;
+    
+    /**
+     * Parses graphics name value and if the name has a file extension
+     * adds widget root directory path to it.
+     * @param aElement xml document element.
+     * @return created descriptor with graphics name value. Ownership
+     * of the descriptor is passed to the caller.
+     */
+    HBufC* GetThemableGraphicsNameLC(
+            const TXmlEngElement & aElement,
+            const TDesC & aPackageUid,
+            TChar& aDrive ) const;
+
+
+
+private:
+    // Data  
 
     /*
      * File server session.Not Own
@@ -210,13 +245,19 @@
      * Widgets. Own.
      */
     RWidgetArray iWidgets;
+    
+    /*
+     * Widgets. Not own.
+     */
+    RWidgetArray iFetchedWidgets; 
     /*
      * Own.
      */
     RXmlEngDOMImplementation iDomImpl;
     
-    CCaWidgetDescription* iWidgetDescriptor;
-
+    
+    CA_STORAGE_TEST_FRIEND_CLASS( T_CaWidgetScanner )
+    
     };
 
 #endif      // C_WIDGETSCANNERPARSER_H
--- a/contentstorage/casrv/cawidgetscanner/inc/cawidgetscannerplugin.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/casrv/cawidgetscanner/inc/cawidgetscannerplugin.h	Wed Jun 23 18:33:40 2010 +0300
@@ -1,31 +1,28 @@
 /*
-* 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:  Ecom plugin
+ * 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:  Ecom plugin
+ *
+ */
 
 #ifndef C_CAWIDGETSCANNERPLUGIN_H
 #define C_CAWIDGETSCANNERPLUGIN_H
 
 #include <casrvplugin.h>
 #include <f32file.h>
-#include "cawidgetdescription.h"
 #include "cammcwatcher.h"
 
 class TPluginParams;
-class CCaWidgetScannerParser;
 class CCaWidgetScannerInstallNotifier;
 class CCaWidgetStorageHandler;
 
@@ -47,12 +44,12 @@
     ~CCaWidgetScannerPlugin();
 
     /**
-     * SynchronizeL
+     * SynchronizeL - synchronizes widgets on device with database
      */
     void SynchronizeL();
 
 private:
-//from MWidgetMmcWatcherCallback
+    //from MWidgetMmcWatcherCallback
 
     /**
      * MmcChangeL is called when the MMC is removed or inserted.
@@ -64,7 +61,7 @@
     /**
      * C++ default constructor.
      */
-    CCaWidgetScannerPlugin( );
+    CCaWidgetScannerPlugin();
 
     /**
      * By default Symbian 2nd phase constructor is private.
@@ -84,11 +81,6 @@
     CCaWidgetScannerInstallNotifier* iInstallNotifier;
 
     /**
-     * Pointer to a parser object. Own
-     */
-    CCaWidgetScannerParser* iParser;
-
-    /**
      * Content Storage Handler. Own.
      */
     CCaWidgetStorageHandler* iStorageHandler;
--- a/contentstorage/casrv/cawidgetscanner/inc/cawidgetstoragehandler.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/casrv/cawidgetscanner/inc/cawidgetstoragehandler.h	Wed Jun 23 18:33:40 2010 +0300
@@ -1,26 +1,26 @@
 /*
-* 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:
+ * 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:
+ *
+ */
 
 #ifndef C_WIDGETSTORAGEHANDLER_H
 #define C_WIDGETSTORAGEHANDLER_H
 
 class CCaStorageProxy;
 class CCaWidgetDescription;
+class CCaWidgetScannerParser;
 
 //  INCLUDES
 #include <e32base.h>
@@ -40,7 +40,7 @@
 class CCaWidgetStorageHandler : public CBase
     {
 public:
-    CA_STORAGE_TEST_FRIEND_CLASS    (T_CaWidgetScanner)
+CA_STORAGE_TEST_FRIEND_CLASS (T_CaWidgetScanner)
 
 public:
     // Constructors and destructor
@@ -59,11 +59,9 @@
     virtual ~CCaWidgetStorageHandler();
 
     /**
-     * Synchronizes widgets
-     * @param aWidgets widgets to synchronize
+     * SynchronizeL - synchronizes widgets on device with database
      */
-    void SynchronizeL( const RWidgetArray& aWidgets );
-
+    void SynchronizeL();
 
 private:
 
@@ -76,6 +74,7 @@
     /**
      * Updates widget in storage.
      * @param aWidget widget to be updated
+     * @param aEntryId entry of widget in db
      */
     void UpdateL( const CCaWidgetDescription* aWidget, TUint aEntryId );
 
@@ -88,12 +87,12 @@
     /**
      * Removes widgets from DB
      */
-    void RemoveWidgetsL( ) ;
+    void RemoveWidgetsL();
 
     /**
      * Fetch widgets from content storage
      */
-    void FetchWidgetsL( );
+    void FetchWidgetsL();
 
     /**
      * Add widget to download collection
@@ -112,14 +111,13 @@
      * @param aWidget widget.
      */
     void ClearVisibleFlagL( const CCaWidgetDescription* aWidget );
-    
+
     /**
-    * Set localizations for widget in db
-    * @param aWidget widget.
-    * @param aEntryId of widget.
-    */    
-    void SetLocalizationsL( const CCaWidgetDescription* aWidget,
-            TInt aEntryId );
+     * Set localizations for widget in db
+     * @param aWidget widget.
+     * @param aEntryId of widget.
+     */
+    void SetLocalizationsL( const CCaWidgetDescription* aWidget, TInt aEntryId );
 
 private:
 
@@ -131,7 +129,7 @@
     /**
      * By default Symbian 2nd phase constructor is private.
      */
-    void ConstructL( );
+    void ConstructL();
 
     /**
      * Check if mass storage is not in use.
@@ -145,9 +143,8 @@
      * is delivered with
      * @param aEntry widget entry being updated with component id attribute.
      */
-    void UpdateComponentIdL( const TDesC& aManifestFilePathName, 
-        CCaInnerEntry& aEntry ) const;
-
+    void UpdateComponentIdL( const TDesC& aManifestFilePathName,
+            CCaInnerEntry& aEntry ) const;
 
 private:
     // Data
@@ -167,11 +164,10 @@
      */
     RWidgetArray iWidgets;
 
-    /*
-     * Indexes updated during last add operation. Own.
+    /**
+     * Pointer to a parser object. Own
      */
-    RArray<TInt> iUpdatedIndexes;
-    
+    CCaWidgetScannerParser* iParser;
 
     Usif::RSoftwareComponentRegistry iSoftwareRegistry;
     };
--- a/contentstorage/casrv/cawidgetscanner/inc/widgetscannerutils.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/casrv/cawidgetscanner/inc/widgetscannerutils.h	Wed Jun 23 18:33:40 2010 +0300
@@ -1,20 +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:
+ * 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:
+ *
+ */
 
 #ifndef WIDGETSCANNERUTILS_H
 #define WIDGETSCANNERUTILS_H
@@ -22,15 +21,7 @@
 //  INCLUDES
 #include <e32base.h>
 #include <driveinfo.h>
-
-// CONSTANTS
-_LIT(KAttrWidgetPath, "widget:path");
-_LIT(KAttrWidgetLibrary, "widget:library");
-_LIT(KAttrWidgetUri, "widget:uri");
-_LIT(KAttrWidgetServiceXml, "widget:servicexml");
-_LIT(KSlash, "/");
-_LIT(KDllExt, ".dll");
-_LIT(KNoLibrary, "NoLibrary");
+#include "cawidgetscannerdef.h"
 
 // FORWARD DECLARATIONS
 class CCaInnerEntry;
@@ -49,8 +40,8 @@
      * @param aDriveLetter drive letter
      * @return ETrue if file is present, EFalse if not
      */
-    static TBool IsFileOnDrive(const TDesC& aFileName,
-        const DriveInfo::TDefaultDrives& aDefaultDrive);
+    static TBool IsFileOnDrive( const TDesC& aFileName,
+            const DriveInfo::TDefaultDrives& aDefaultDrive );
 
     /**
      * Returns current MMC id.
--- a/contentstorage/casrv/cawidgetscanner/src/cawidgetdescription.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/casrv/cawidgetscanner/src/cawidgetdescription.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -17,13 +17,12 @@
 
 
 // INCLUDE FILES
+#include <hbtextresolversymbian.h>
 
 #include "cadef.h"
 #include "cawidgetdescription.h"
 #include "cainnerentry.h"
 #include "widgetscannerutils.h"
-#include "hbtextresolversymbian.h"
-
 #include "cawidgetscannerdef.h"
 // ============================ MEMBER FUNCTIONS ===============================
 
@@ -34,7 +33,7 @@
 // -----------------------------------------------------------------------------
 //
 CCaWidgetDescription::CCaWidgetDescription() :
-    iEntryId(KNoId), iMmcId()
+    iEntryId( KNoId ), iValid ( EFalse )
     {
     }
 
@@ -65,13 +64,17 @@
         User::LeaveIfError( uidLex.Val( iPackageUid, EHex ));
         }
     iTitle.CreateL( aEntry->GetText() );
+    
     iIconUri.CreateL( aEntry->Icon()->FileName() );
+    
+    TPtrC attribute;
+    aEntry->FindAttribute( KPreviewImageAttrName, attribute );
+    iPreviewImageName.CreateL( attribute.Length() );
+    iPreviewImageName = attribute;
+    
     //library
     iLibrary.CreateL( KCaMaxAttrValueLen );
     aEntry->FindAttribute( KAttrWidgetLibrary, iLibrary );
-    //path
-    iPath.CreateL( KCaMaxAttrValueLen );
-    aEntry->FindAttribute( KAttrWidgetPath, iPath );
     //uri
     iUri.CreateL( KCaMaxAttrValueLen );
     aEntry->FindAttribute( KAttrWidgetUri, iUri );
@@ -131,18 +134,20 @@
 //
 CCaWidgetDescription::~CCaWidgetDescription()
     {
+
+    iModificationTime.Close();
+    iServiceXml.Close();
+    iMmcId.Close();
+    iUri.Close();
+    iLibrary.Close();
+    iPreviewImageName.Close();
+    iIconUri.Close();
     iTitle.Close();
     iDescription.Close();
-    iUri.Close();
-    iIconUri.Close();
-    iLibrary.Close();
-    iPath.Close();
-    iModificationTime.Close();
-    iMmcId.Close();
-    iServiceXml.Close();
-    iManifestFilePathName.Close();
     iStringIdTitle.Close();
     iStringIdDescription.Close();
+    iManifestFilePathName.Close();
+    
     }
 
 // ----------------------------------------------------------------------------
@@ -152,14 +157,16 @@
 TBool CCaWidgetDescription::Compare(
         const CCaWidgetDescription& aFirst,const CCaWidgetDescription& aSecond)
     {
+    TBool result = EFalse;
     if( aFirst.GetUri() == aSecond.GetUri() )
         {
-        return ETrue;
+        result = ETrue;
         }
     else
         {
-        return EFalse;
+        result = EFalse;
         }
+    return result;
     }
 
 // ----------------------------------------------------------------------------
@@ -168,24 +175,28 @@
 //
 TBool CCaWidgetDescription::Compare( const CCaWidgetDescription& aToCompare )
     {
+    TBool result = EFalse;
     if( aToCompare.GetLibrary() == GetLibrary() &&
             aToCompare.GetDescription() == GetDescription() &&
             aToCompare.GetUri() == GetUri() &&
             aToCompare.GetIconUri() == GetIconUri() &&
+            aToCompare.GetPreviewImageName() == GetPreviewImageName() &&
             aToCompare.GetTitle() == GetTitle() &&
             aToCompare.GetLibrary() != KNoLibrary &&
             aToCompare.GetModificationTime() == GetModificationTime() &&
             aToCompare.GetServiceXml() == GetServiceXml()
             )
         {
-        return ETrue;
+        result = ETrue;
         }
     else
         {
-        return EFalse;
+        result = EFalse;
         }
+    return result;
     }
 
+
 // -----------------------------------------------------------------------------
 //
 // -----------------------------------------------------------------------------
@@ -210,6 +221,15 @@
 //
 // -----------------------------------------------------------------------------
 //
+TUint CCaWidgetDescription::GetPackageUidL()
+    {
+    return iPackageUid;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
 void CCaWidgetDescription::SetTitleL( const TDesC& aTitle )
     {
     iTitle.Close();
@@ -248,37 +268,19 @@
 //
 // -----------------------------------------------------------------------------
 //
-void CCaWidgetDescription::SetLibraryL( const TDesC& aLibrary )
+void CCaWidgetDescription::SetPreviewImageNameL( const TDesC& aPreviewName )
     {
-    iLibrary.Close();
-    iLibrary.CreateL(aLibrary);
+    iPreviewImageName.Close();
+    iPreviewImageName.CreateL( aPreviewName );
     }
-
 // -----------------------------------------------------------------------------
 //
 // -----------------------------------------------------------------------------
 //
-void CCaWidgetDescription::SetMissing( TBool aMissing )
-    {
-    SetFlag( EMissing, aMissing );
-    }
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CCaWidgetDescription::SetVisible( TBool aVisible )
+void CCaWidgetDescription::SetLibraryL( const TDesC& aLibrary )
     {
-    SetFlag( EVisible, aVisible );
-    }
-
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CCaWidgetDescription::SetUsed( TBool aUsed )
-    {
-    SetFlag( EUsed, aUsed );
+    iLibrary.Close();
+    iLibrary.CreateL(aLibrary);
     }
 
 // -----------------------------------------------------------------------------
@@ -375,23 +377,6 @@
 //
 // -----------------------------------------------------------------------------
 //
-TPtrC CCaWidgetDescription::GetPath( ) const
-    {
-    return iPath;
-    }
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
-void CCaWidgetDescription::SetPathL( const TDesC& aPath )
-    {
-	iPath.Close();
-	iPath.CreateL(aPath);
-    }
-// -----------------------------------------------------------------------------
-//
-// -----------------------------------------------------------------------------
-//
 TPtrC CCaWidgetDescription::GetDescription( ) const
     {
     return iDescription;
@@ -419,16 +404,27 @@
 //
 // -----------------------------------------------------------------------------
 //
+TPtrC CCaWidgetDescription::GetPreviewImageName( ) const
+    {
+    return iPreviewImageName;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
 TPtrC CCaWidgetDescription::GetTitle( ) const
     {
+    TPtrC result ;
     if ( iTitle == KNullDesC )
         {
-        return GetLibraryName();
+        result.Set( GetLibraryName() );
         }
     else
         {
-        return iTitle;
+        result.Set( iTitle );
         }
+    return result;
     }
 
 // -----------------------------------------------------------------------------
@@ -504,20 +500,14 @@
             entry->SetFlags( entry->GetFlags() & ~ERemovable );
             }
         }
-    if ( iPath != KNullDesC )
-        {
-        entry->AddAttributeL(KAttrWidgetPath, iPath);
-        }
     if ( iTitle != KNullDesC )
         {
         entry->SetTextL(iTitle);
-        entry->AddAttributeL(KCaAttrLongName, iTitle);
         }
     else
         {
         TPtrC libraryName( GetLibraryName() );
         entry->SetTextL( libraryName );
-        entry->AddAttributeL( KCaAttrLongName, libraryName );
         }
 
     if ( iDescription != KNullDesC )
@@ -531,9 +521,12 @@
     if ( iIconUri != KNullDesC)
         {
         // aSkinId and AppId not used for widgets - KNullDesC
-        entry->SetIconDataL(iIconUri, KNullDesC, KNullDesC);
+        entry->SetIconDataL( iIconUri, KNullDesC, KNullDesC );
         }
-
+    if ( iPreviewImageName != KNullDesC )
+        {
+        entry->AddAttributeL( KPreviewImageAttrName, iPreviewImageName );
+        }
     if( iModificationTime != KNullDesC )
         {
         entry->AddAttributeL( KCaAttrInstallationTime, iModificationTime );
@@ -591,6 +584,10 @@
     return iServiceXml;
     }
 
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
 void CCaWidgetDescription::LocalizeTextsL()
 	{
     
@@ -659,10 +656,28 @@
 		}
 	}
 
-/*
- * Set manifest file path name
- * @param aManifestFilePt
- */
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+// 
+TBool CCaWidgetDescription::IsValid()
+    {
+    return iValid;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+void CCaWidgetDescription::SetValid(TBool aVal)
+    {
+    iValid = aVal;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
 void CCaWidgetDescription::SetManifestFilePathNameL( 
     const TDesC& aManifestFilePathName )
     {
@@ -670,10 +685,10 @@
     iManifestFilePathName.CreateL( aManifestFilePathName );
     }
 
-/*
- * Get service fw xml filename
- * @return Service xml filename
- */
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
 TPtrC CCaWidgetDescription::GetManifestFilePathName() const
     {
     return iManifestFilePathName;
--- a/contentstorage/casrv/cawidgetscanner/src/cawidgetscannerinstallnotifier.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/casrv/cawidgetscanner/src/cawidgetscannerinstallnotifier.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -1,20 +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:  Sis package installation event listener
+ * 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:  Sis package installation event listener
+ *
+ */
 
 #include <sacls.h>
 #include "cawidgetscannerinstallnotifier.h"
@@ -23,73 +22,73 @@
 // ============================ MEMBER FUNCTIONS =============================
 
 // -----------------------------------------------------------------------------
-// CCaWidgetScannerInstallNotifier::CCaWidgetScannerInstallNotifier
-// C++ default constructor
+//
 // -----------------------------------------------------------------------------
 //
 CCaWidgetScannerInstallNotifier::CCaWidgetScannerInstallNotifier(
-    CCaWidgetScannerPlugin* aCallback, TUid aCategory, TUint aKey ) :
-    CActive(EPriorityNormal)
+        CCaWidgetScannerPlugin* aCallback, TUid aCategory, TUint aKey ) :
+    CActive( EPriorityNormal )
     {
     CActiveScheduler::Add( this );
 
     iCallback = aCallback;
     iCategory = aCategory;
     iKey = aKey;
-    // Prepare automatically
     iProperty.Attach( iCategory, iKey );
-    SetActive( );
+    SetActive();
     iProperty.Subscribe( iStatus );
+    iHackFlag = EFalse;
     }
 
 // -----------------------------------------------------------------------------
-// CCaWidgetScannerInstallNotifier::ConstructL
-// S2nd phase constructor.
+//
 // -----------------------------------------------------------------------------
 //
 void CCaWidgetScannerInstallNotifier::ConstructL()
     {
-    iHackFlag = EFalse;
     }
 
 // ---------------------------------------------------------------------------
-// CCaWidgetScannerInstallNotifier::NewL
+//
 // ---------------------------------------------------------------------------
 //
 CCaWidgetScannerInstallNotifier* CCaWidgetScannerInstallNotifier::NewL(
-    CCaWidgetScannerPlugin* aCallback, TUid aCategory, TUint aKey )
+        CCaWidgetScannerPlugin* aCallback, TUid aCategory, TUint aKey )
     {
-    CCaWidgetScannerInstallNotifier* self = 
-            new (ELeave) CCaWidgetScannerInstallNotifier( aCallback,
-            aCategory, aKey );
+    CCaWidgetScannerInstallNotifier* self =
+            new ( ELeave ) CCaWidgetScannerInstallNotifier( aCallback,
+                    aCategory, aKey );
     CleanupStack::PushL( self );
-    self->ConstructL( );
+    self->ConstructL();
     CleanupStack::Pop( self );
 
     return self;
     }
 
 // ---------------------------------------------------------------------------
-// CCaWidgetScannerInstallNotifier::~CCaWidgetScannerInstallNotifier
+//
 // ---------------------------------------------------------------------------
 //
 CCaWidgetScannerInstallNotifier::~CCaWidgetScannerInstallNotifier()
     {
-    Cancel( );
-    iProperty.Close( );
+    Cancel();
+    iProperty.Close();
     }
 
 // ---------------------------------------------------------------------------
-// CCaWidgetScannerInstallNotifier::DoCancel
+//
 // ---------------------------------------------------------------------------
 //
 void CCaWidgetScannerInstallNotifier::DoCancel()
     {
-    iProperty.Cancel( );
+    iProperty.Cancel();
     }
 
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC SKIP
+#endif //COVERAGE_MEASUREMENT (error is ignored)
 // ---------------------------------------------------------------------------
-// CCaWidgetScannerInstallNotifier::RunError
+//
 // ---------------------------------------------------------------------------
 //
 TInt CCaWidgetScannerInstallNotifier::RunError( TInt /*aError*/)
@@ -97,27 +96,30 @@
     // No need to do anything      
     return KErrNone;
     }
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC ENDSKIP
+#endif //COVERAGE_MEASUREMENT
 
 // ---------------------------------------------------------------------------
-// CCaWidgetScannerInstallNotifier::RunL
+//
 // ---------------------------------------------------------------------------
 //
 void CCaWidgetScannerInstallNotifier::RunL()
     {
     // Re-issue request before notifying
-    SetActive( );
+    SetActive();
     iProperty.Subscribe( iStatus );
 
     TInt status;
     User::LeaveIfError( iProperty.Get( KUidSystemCategory,
-        KSAUidSoftwareInstallKeyValue, status ) );
-    
-    if( iHackFlag )
+            KSAUidSoftwareInstallKeyValue, status ) );
+
+    if ( iHackFlag )
         {
         iHackFlag = EFalse;
         iCallback->SynchronizeL();
         }
-    else if ( (status & EInstOpInstall )||(status & EInstOpUninstall ) )
+    else if ( ( status & EInstOpInstall ) || ( status & EInstOpUninstall ) )
         {
         iHackFlag = ETrue;
         }
--- a/contentstorage/casrv/cawidgetscanner/src/cawidgetscannerparser.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/casrv/cawidgetscanner/src/cawidgetscannerparser.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -1,65 +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:
+ * 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:
+ *
+ */
 
 // INCLUDE FILES
 
 #include <driveinfo.h>
-#include <xmlengnodelist.h>
-#include <xmlengdomparser.h>
-#include <xmlengdocument.h>
+#include <xml/dom/xmlengnodelist.h>
+#include <xml/dom/xmlengdomparser.h>
+#include <xml/dom/xmlengdocument.h>
+#include <xml/dom/xmlengelement.h>
 #include <utf.h>
+#include <e32base.h>
 
 #include "cadef.h"
 #include "cawidgetscannerparser.h"
 #include "widgetscannerutils.h"
-
 #include "cawidgetscannerdef.h"
 
-
 // ============================ MEMBER FUNCTIONS ===============================
 
 // -----------------------------------------------------------------------------
-// CCaWidgetScannerParser::CCaWidgetScannerParser
-// C++ default constructor can NOT contain any code, that
-// might leave.
+//
 // -----------------------------------------------------------------------------
 //
-CCaWidgetScannerParser::CCaWidgetScannerParser( RFs& aFs ):
+CCaWidgetScannerParser::CCaWidgetScannerParser( RFs& aFs ) :
     iFs( aFs )
     {
     }
 
 // -----------------------------------------------------------------------------
-// CCaWidgetScannerParser::ConstructL
-// Symbian 2nd phase constructor can leave.
+// 
 // -----------------------------------------------------------------------------
 //
-void CCaWidgetScannerParser::ConstructL( )
+void CCaWidgetScannerParser::ConstructL()
     {
     iImportPath.CreateL( KMaxPath );
-    //iFs.PrivatePath( iImportPath );
     iImportPath.Append( KImportDir );
     iDomImpl.OpenL();
     }
 
 // -----------------------------------------------------------------------------
-// CCaWidgetScannerParser::NewL
-// Two-phased constructor.
+// 
 // -----------------------------------------------------------------------------
 //
 CCaWidgetScannerParser* CCaWidgetScannerParser::NewL( RFs& aFs )
@@ -70,25 +64,23 @@
     }
 
 // -----------------------------------------------------------------------------
-// CCaWidgetScannerParser::NewLC
-// Two-phased constructor.
+// 
 // -----------------------------------------------------------------------------
 //
 CCaWidgetScannerParser* CCaWidgetScannerParser::NewLC( RFs& aFs )
     {
-    CCaWidgetScannerParser* self = new( ELeave ) CCaWidgetScannerParser( aFs );
+    CCaWidgetScannerParser* self = new ( ELeave ) CCaWidgetScannerParser( aFs );
     CleanupStack::PushL( self );
-    self->ConstructL( );
+    self->ConstructL();
     return self;
     }
 
 // -----------------------------------------------------------------------------
-// Destructor
+// 
 // -----------------------------------------------------------------------------
 //
 CCaWidgetScannerParser::~CCaWidgetScannerParser()
     {
-    delete iWidgetDescriptor;
     iImportPath.Close();
     iWidgets.ResetAndDestroy();
     iDomImpl.Close();
@@ -98,39 +90,44 @@
 //
 // ----------------------------------------------------------------------------
 //
-RWidgetArray& CCaWidgetScannerParser::WidgetsScanL( )
+RWidgetArray& CCaWidgetScannerParser::WidgetsScanL(
+        const RWidgetArray& aWidgets )
     {
     TDriveList driveList;
+    TChar currentDriveLetter;
     User::LeaveIfError( iFs.DriveList( driveList ) );
     iWidgets.ResetAndDestroy();
 
-    for ( TInt driveNumber=EDriveZ; driveNumber >= EDriveA; driveNumber-- )
+    iFetchedWidgets = aWidgets;
+
+    for ( TInt driveNumber = EDriveZ; driveNumber >= EDriveA; driveNumber-- )
         {
         if ( driveList[driveNumber] )
             {
             User::LeaveIfError( iFs.DriveToChar( driveNumber,
-                    iCurrentDriveLetter ) );
-            ScanOnDriveL( );
+                    currentDriveLetter ) );
+            ScanOnDriveL( currentDriveLetter );
             }
         }
+    
+    
     return iWidgets;
     }
 
-
 // ----------------------------------------------------------------------------
 //
 // ----------------------------------------------------------------------------
 //
-void CCaWidgetScannerParser::ScanOnDriveL( )
+void CCaWidgetScannerParser::ScanOnDriveL( TChar& aDrive )
     {
-    CDir* directories = GetDirectoriesLC( );
+    CDir* directories = GetDirectoriesLC( aDrive );
     if ( directories )
         {
-        for ( TInt i(0); i<directories->Count( ); i++ )
+        for ( TInt i( 0 ); i < directories->Count(); i++ )
             {
-            if((*directories)[i].IsDir())
+            if ( ( *directories )[i].IsDir() )
                 {
-                ParseDirectoryL((*directories)[i].iName);
+                ParseDirectoryL( ( *directories )[i].iName, aDrive );
                 }
             }
         }
@@ -141,30 +138,66 @@
 //
 // ----------------------------------------------------------------------------
 //
-void CCaWidgetScannerParser::ParseDirectoryL( const TDesC& aDirectoryName )
+void CCaWidgetScannerParser::ParseDirectoryL( const TDesC& aDirectoryName,
+        TChar& aDrive )
     {
-    HBufC* manifestDirectoryPath =
-        GetManifestDirectoryPathLC( aDirectoryName );
+    HBufC* manifestDirectoryPath = GetManifestDirectoryPathLC( aDirectoryName,
+            aDrive );
 
     CDir* fileList = NULL;
 
     User::LeaveIfError( iFs.GetDir( *manifestDirectoryPath,
-                         KEntryAttMatchExclude|KEntryAttDir,
-                         ESortByDate, fileList ) );
+            KEntryAttMatchExclude | KEntryAttDir, ESortByDate, fileList ) );
     CleanupStack::PushL( fileList );
 
-    for ( TInt i = 0; i<fileList->Count( ); i++ )
+    for ( TInt i = 0; i < fileList->Count(); i++ )
         {
-        if( (*fileList)[i].iName.Find( KManifest ) != KErrNotFound )
+        if ( ( *fileList )[i].iName.Find( KManifest ) != KErrNotFound )
             {
             RBuf fullFilePath;
             CleanupClosePushL( fullFilePath );
-            fullFilePath.CreateL( manifestDirectoryPath->Length() +
-                    (*fileList)[i].iName.Length() );
+            fullFilePath.CreateL( manifestDirectoryPath->Length()
+                    + ( *fileList )[i].iName.Length() );
             fullFilePath.Append( *manifestDirectoryPath );
-            fullFilePath.Append( (*fileList)[i].iName );
-            //if file is corrupted we go to the next one
-            TRAP_IGNORE(ParseManifestFileL( fullFilePath, aDirectoryName ));
+            fullFilePath.Append( ( *fileList )[i].iName );
+          
+            TPtrC packageUidPtr = manifestDirectoryPath->Mid(
+                    manifestDirectoryPath->Length() - KPackageUidPosition,
+                    KPackageUidLength); 
+            TUint packageUid;            
+            TLex lexer( packageUidPtr );
+            User::LeaveIfError( lexer.Val( packageUid, EHex ) );
+
+            CCaWidgetDescription* compareWidget = NULL;
+            for ( TInt j = 0; j < iFetchedWidgets.Count(); j++ )
+                {
+                if ( iFetchedWidgets[j]->GetPackageUidL() ==  packageUid )
+                    {
+                    compareWidget = iFetchedWidgets[j];
+                    compareWidget->SetValid( ETrue ); //do not remove from db
+                    break; // once found we dont iterate anymore
+                    }
+                }
+
+            if ( compareWidget )
+                {
+                TTime modificationTime = ( *fileList )[i].iModified;
+                TInt64 modificationIntTime = modificationTime.Int64();
+                TLex lex( compareWidget->GetModificationTime() );
+                TInt64 uintTimeDB( 0 );
+                User::LeaveIfError( lex.Val( uintTimeDB ) );
+
+                if ( uintTimeDB != modificationIntTime )
+                    {
+                    TRAP_IGNORE( ParseManifestFileL( fullFilePath,
+                                    aDirectoryName, aDrive ) );
+                    }
+                }
+            else
+                {
+                TRAP_IGNORE( ParseManifestFileL( fullFilePath, aDirectoryName,
+                                aDrive ) );
+                }
             CleanupStack::PopAndDestroy( &fullFilePath );
             }
         }
@@ -176,144 +209,125 @@
 //
 // ----------------------------------------------------------------------------
 //
-void CCaWidgetScannerParser::ParseManifestFileL(
-        const TDesC& aFilePath, const TDesC& aPackageUid )
+void CCaWidgetScannerParser::ParseManifestFileL( const TDesC& aFilePath,
+        const TDesC& aPackageUid, TChar& aDrive )
     {
     RXmlEngDOMParser parser;
-    CleanupClosePushL(parser);
-    User::LeaveIfError(parser.Open(iDomImpl));
-    RXmlEngDocument doc = parser.ParseFileL(aFilePath, KChunkSize);
-    CleanupClosePushL(doc);
+    CleanupClosePushL( parser );
+    User::LeaveIfError( parser.Open( iDomImpl ) );
+    RXmlEngDocument doc = parser.ParseFileL( aFilePath, KChunkSize );
+    CleanupClosePushL( doc );
     TXmlEngElement docElement = doc.DocumentElement();
 
-    if (docElement.Name() == KWidgetProvider) {
+    if ( docElement.Name() == KWidgetProvider )
+        {
         TXmlEngElement element;
         RXmlEngNodeList<TXmlEngElement> elementList;
-        CleanupClosePushL(elementList);
-        docElement.GetElementsByTagNameL(elementList, KWidget);
+        CleanupClosePushL( elementList );
+        docElement.GetElementsByTagNameL( elementList, KWidget );
 
-        while (elementList.HasNext())
+        while ( elementList.HasNext() )
             {
             element = elementList.Next();
             if ( element.HasAttributes() )
                 {
-                ParseWidgetL( aFilePath, element, aPackageUid );
+                ParseWidgetL( aFilePath, element, aPackageUid, aDrive );
                 }
             }
-        CleanupStack::PopAndDestroy(&elementList);
-    } else if (docElement.Name() == KWidgetManifest) {
+        CleanupStack::PopAndDestroy( &elementList );
+        }
+    else if ( docElement.Name() == KWidgetManifest )
+        {
+        CCaWidgetDescription* widgetDescriptor = CCaWidgetDescription::NewL();
+        widgetDescriptor->SetPackageUidL( aPackageUid );
+        widgetDescriptor->SetFlag( EVisible, ETrue );
+        widgetDescriptor->SetManifestFilePathNameL( aFilePath );
 
-        delete iWidgetDescriptor;
-        iWidgetDescriptor = NULL;
-        iWidgetDescriptor = CCaWidgetDescription::NewL();
-        iWidgetDescriptor->SetPackageUidL(aPackageUid);
-        iWidgetDescriptor->SetVisible(ETrue);
-        iWidgetDescriptor->SetManifestFilePathNameL( aFilePath );
+        SetMmcIdL( widgetDescriptor, aDrive );
 
-        SetMmcIdL( iWidgetDescriptor );
-        
         RXmlEngNodeList<TXmlEngElement> childElementList;
-        CleanupClosePushL(childElementList);
-        docElement.GetChildElements(childElementList);
+        CleanupClosePushL( childElementList );
+        docElement.GetChildElements( childElementList );
         TXmlEngElement element;
         
-        while (childElementList.HasNext())
-          {
-          element = childElementList.Next();
-          if (element.Name() == KUri)
-              {
-              ParseUriL(element);
-              }
-          else if (element.Name() == KTitle)
-              {
-              ParseTitleL(element);
-              }
-          else if (element.Name() == KIcon)
-              {
-              ParseIconL(element,aPackageUid);
-              }
-          else if (element.Name() == KDescription)
-              {
-              ParseDescriptionL(element);
-              }
-          else if (element.Name() == KHidden)
-              {
-              ParseHiddenL(element);
-              }
-          else if (element.Name() == KServiceXml)
-              {
-              ParseServiceXmlL(element);
-              }
-           }
-        CleanupStack::PopAndDestroy(&childElementList);
+        while ( childElementList.HasNext() )
+            {
+            element = childElementList.Next();
+            if ( element.Name() == KUri )
+                {
+                ParseUriL( element, widgetDescriptor );
+                }
+            else if ( element.Name() == KTitle )
+                {
+                ParseTitleL( element, widgetDescriptor );
+                }
+            else if ( element.Name() == KIcon )
+                {
+                ParseIconL( element, aPackageUid, widgetDescriptor, aDrive );
+                }
+            else if ( element.Name() == KDescription )
+                {
+                ParseDescriptionL( element, widgetDescriptor );
+                }
+            else if ( element.Name() == KHidden )
+                {
+                ParseHiddenL( element, widgetDescriptor );
+                }
+            else if ( element.Name() == KServiceXml )
+                {
+                ParseServiceXmlL( element, widgetDescriptor );
+                }
+            else if ( element.Name() == KPreviewImageElementName )
+                {
+                ParsePreviewImageNameL( element, aPackageUid, widgetDescriptor, aDrive );
+                }
+            }
+        CleanupStack::PopAndDestroy( &childElementList );
 
-        //set path for hs to use, trim last 2 chars (doubleslash)
-        HBufC *libraryPath = GetManifestDirectoryPathLC( aPackageUid );
-        iWidgetDescriptor->SetPathL(libraryPath->Mid(0,libraryPath->Length()-1));
-        CleanupStack::PopAndDestroy(libraryPath);
-        
-        HBufC *libraryPath2 = GetManifestDirectoryPathLC( aPackageUid );
-        libraryPath2 = libraryPath2->ReAllocL(libraryPath2->Length() + iWidgetDescriptor->GetUri().Length());
-        CleanupStack::Pop(1);
-        CleanupStack::PushL(libraryPath2);
-        libraryPath2->Des().Append(iWidgetDescriptor->GetUri());
-        iWidgetDescriptor->SetLibraryL(*libraryPath2);
-        CleanupStack::PopAndDestroy(libraryPath2);
-        
-                
-        TTime modificationTime;
-        iFs.Modified( aFilePath, modificationTime);
-        TInt64 modificationIntTime = modificationTime.Int64();
-        RBuf16 rBuf;
-        rBuf.CleanupClosePushL();
-        rBuf.CreateL( KModificationTimeLength );
-        rBuf.AppendNum( modificationIntTime );
-        iWidgetDescriptor->SetModificationTimeL( rBuf );
-        CleanupStack::PopAndDestroy( &rBuf );
+        HBufC *libraryPath2 = GetManifestDirectoryPathLC( aPackageUid, aDrive );
+        libraryPath2 = libraryPath2->ReAllocL( libraryPath2->Length()
+                + widgetDescriptor->GetUri().Length() );
+        libraryPath2->Des().Append( widgetDescriptor->GetUri() );
+        widgetDescriptor->SetLibraryL( *libraryPath2 );
+        CleanupStack::PopAndDestroy( libraryPath2 );
 
-        TInt index = iWidgets.Find( iWidgetDescriptor, CCaWidgetDescription::Compare );
+        SetModificationTimeL( aFilePath, widgetDescriptor );
+
+        TInt index = iWidgets.Find( widgetDescriptor,
+                CCaWidgetDescription::Compare );
         if ( index != KErrNotFound )
             {
             delete iWidgets[index];
             iWidgets.Remove( index );
             }
-        iWidgets.AppendL( iWidgetDescriptor );//ownership transfer
-        iWidgetDescriptor = NULL;
-    }
+        iWidgets.AppendL( widgetDescriptor );//ownership transfer
+        widgetDescriptor = NULL;
+        }
 
-    CleanupStack::PopAndDestroy(&doc);
-    CleanupStack::PopAndDestroy(&parser);
+    CleanupStack::PopAndDestroy( &doc );
+    CleanupStack::PopAndDestroy( &parser );
     }
 
 // ----------------------------------------------------------------------------
 //
 // ----------------------------------------------------------------------------
 //
-void CCaWidgetScannerParser::ParseWidgetL(
-        const TDesC& aFilePath, TXmlEngElement aElement,
-        const TDesC& aPackageUid )
+void CCaWidgetScannerParser::ParseWidgetL( const TDesC& aFilePath,
+        TXmlEngElement& aElement, const TDesC& aPackageUid, TChar& aDrive )
     {
     CCaWidgetDescription* widget = CCaWidgetDescription::NewLC();
 
     SetUriL( aElement, widget );
-    SetLibraryL( aElement, aPackageUid, widget);
+    SetLibraryL( aElement, aPackageUid, widget, aDrive );
     SetTitleL( aElement, widget );
     SetDescriptionL( aElement, widget );
     SetVisibilityL( aElement, widget );
-    SetIconUriL( aElement, aPackageUid, widget);
+    SetIconUriL( aElement, aPackageUid, widget, aDrive );
     widget->SetPackageUidL( aPackageUid );
     widget->SetManifestFilePathNameL( aFilePath );
-    SetMmcIdL( widget );
+    SetMmcIdL( widget, aDrive );
 
-    TTime modificationTime;
-    iFs.Modified( aFilePath, modificationTime);
-    TInt64 modificationIntTime = modificationTime.Int64();
-    RBuf16 rBuf;
-    rBuf.CleanupClosePushL();
-    rBuf.CreateL( KModificationTimeLength );
-    rBuf.AppendNum( modificationIntTime );
-    widget->SetModificationTimeL( rBuf );
-    CleanupStack::PopAndDestroy( &rBuf );
+    SetModificationTimeL( aFilePath, widget );
 
     TInt index = iWidgets.Find( widget, CCaWidgetDescription::Compare );
     if ( index != KErrNotFound )
@@ -325,45 +339,40 @@
     CleanupStack::Pop( widget );
     }
 
-
 // ----------------------------------------------------------------------------
 //
 // ----------------------------------------------------------------------------
 //
-void CCaWidgetScannerParser::SetUriL(
-    TXmlEngElement & aElement, CCaWidgetDescription * aWidget )
-{
+void CCaWidgetScannerParser::SetUriL( TXmlEngElement& aElement,
+        CCaWidgetDescription* aWidget )
+    {
     HBufC *attributeValue = CnvUtfConverter::ConvertToUnicodeFromUtf8L(
-        aElement.AttributeValueL( KUri ) );
+            aElement.AttributeValueL( KUri ) );
     CleanupStack::PushL( attributeValue );
 
-    if( attributeValue->Compare( KNullDesC ) != 0 )
+    if ( attributeValue->Compare( KNullDesC ) != 0 )
         {
         aWidget->SetUriL( *attributeValue );
         }
     CleanupStack::PopAndDestroy( attributeValue );
-}
+    }
 
 // ----------------------------------------------------------------------------
-//    keep in mind that setLibrary also setsPath
+//   
 // ----------------------------------------------------------------------------
 //
-void CCaWidgetScannerParser::SetLibraryL( TXmlEngElement & aElement,
-    const TDesC & aPackageUid, CCaWidgetDescription * aWidget )
-{
+void CCaWidgetScannerParser::SetLibraryL( TXmlEngElement& aElement,
+        const TDesC& aPackageUid, CCaWidgetDescription* aWidget, TChar& aDrive )
+    {
     HBufC *attributeValue = CnvUtfConverter::ConvertToUnicodeFromUtf8L(
-        aElement.AttributeValueL( KLibrary ) );
+            aElement.AttributeValueL( KLibrary ) );
     CleanupStack::PushL( attributeValue );
 
-    if( attributeValue->Compare( KNullDesC ) != 0 )
+    if ( attributeValue->Compare( KNullDesC ) != 0 )
         {
-        HBufC *libraryPath = GetManifestDirectoryPathLC( aPackageUid );
+        HBufC *libraryPath = GetManifestDirectoryPathLC( aPackageUid, aDrive );
 
-        //set path for hs to use, trim last 2 chars (doubleslash)
-        aWidget->SetPathL(libraryPath->Mid(0,libraryPath->Length()-1));
-
-        libraryPath->ReAllocL(
-            libraryPath->Length() + attributeValue->Length());
+        libraryPath->ReAllocL( libraryPath->Length() + attributeValue->Length() );
 
         TPtr libraryPathModifier( libraryPath->Des() );
         libraryPathModifier.Append( *attributeValue );
@@ -376,82 +385,81 @@
         aWidget->SetLibraryL( KNoLibrary );
         }
     CleanupStack::PopAndDestroy( attributeValue );
-}
+    }
 
 // ----------------------------------------------------------------------------
 //
 // ----------------------------------------------------------------------------
 //
-void CCaWidgetScannerParser::SetTitleL(
-    TXmlEngElement & aElement, CCaWidgetDescription * aWidget )
-{
+void CCaWidgetScannerParser::SetTitleL( TXmlEngElement& aElement,
+        CCaWidgetDescription* aWidget )
+    {
     HBufC *attributeValue = CnvUtfConverter::ConvertToUnicodeFromUtf8L(
-                aElement.AttributeValueL( KTitle ) );
+            aElement.AttributeValueL( KTitle ) );
     CleanupStack::PushL( attributeValue );
 
-    if( attributeValue->Compare( KNullDesC ) != 0 )
+    if ( attributeValue->Compare( KNullDesC ) != 0 )
         {
         aWidget->SetTitleL( *attributeValue );
         }
     CleanupStack::PopAndDestroy( attributeValue );
-}
+    }
 
 // ----------------------------------------------------------------------------
 //
 // ----------------------------------------------------------------------------
 //
-void CCaWidgetScannerParser::SetDescriptionL(
-    TXmlEngElement & aElement, CCaWidgetDescription * aWidget )
-{
+void CCaWidgetScannerParser::SetDescriptionL( TXmlEngElement& aElement,
+        CCaWidgetDescription* aWidget )
+    {
     HBufC *attributeValue = CnvUtfConverter::ConvertToUnicodeFromUtf8L(
-                aElement.AttributeValueL( KDescription ) );
+            aElement.AttributeValueL( KDescription ) );
     CleanupStack::PushL( attributeValue );
 
-    if( attributeValue->Compare( KNullDesC ) != 0 )
+    if ( attributeValue->Compare( KNullDesC ) != 0 )
         {
         aWidget->SetDescriptionL( *attributeValue );
         }
     CleanupStack::PopAndDestroy( attributeValue );
-}
+    }
 
 // ----------------------------------------------------------------------------
 //
 // ----------------------------------------------------------------------------
 //
-void CCaWidgetScannerParser::SetVisibilityL(
-    TXmlEngElement & aElement, CCaWidgetDescription * aWidget )
-{
+void CCaWidgetScannerParser::SetVisibilityL( TXmlEngElement& aElement,
+        CCaWidgetDescription* aWidget )
+    {
     HBufC *hidden = CnvUtfConverter::ConvertToUnicodeFromUtf8L(
-                aElement.AttributeValueL( KHidden ) );
+            aElement.AttributeValueL( KHidden ) );
     CleanupStack::PushL( hidden );
 
-    if( hidden->Compare( KTrue ) == 0 )
+    if ( hidden->Compare( KTrue ) == 0 )
         {
-        aWidget->SetVisible( EFalse );
+        aWidget->SetFlag( EVisible, EFalse );
         }
     else
         {
-        aWidget->SetVisible( ETrue );
+        aWidget->SetFlag( EVisible, ETrue );
         }
     CleanupStack::PopAndDestroy( hidden );
-}
+    }
 
 // ----------------------------------------------------------------------------
 //
 // ----------------------------------------------------------------------------
 //
-void CCaWidgetScannerParser::SetIconUriL( TXmlEngElement & aElement,
-    const TDesC & aPackageUid, CCaWidgetDescription * aWidget )
-{
+void CCaWidgetScannerParser::SetIconUriL( TXmlEngElement& aElement,
+        const TDesC& aPackageUid, CCaWidgetDescription* aWidget, TChar& aDrive )
+    {
     HBufC *attributeValue = CnvUtfConverter::ConvertToUnicodeFromUtf8L(
-                aElement.AttributeValueL( KIconUri ) );
+            aElement.AttributeValueL( KIconUri ) );
     CleanupStack::PushL( attributeValue );
 
-    if( attributeValue->Compare( KNullDesC ) != 0 )
+    if ( attributeValue->Compare( KNullDesC ) != 0 )
         {
-        HBufC* iconUriPath = GetManifestDirectoryPathLC( aPackageUid );
-        iconUriPath->ReAllocL(
-            iconUriPath->Length() + attributeValue->Length() );
+        HBufC* iconUriPath = GetManifestDirectoryPathLC( aPackageUid, aDrive );
+        iconUriPath->ReAllocL( iconUriPath->Length() + attributeValue->Length() );
 
         TPtr iconUriPathModifier( iconUriPath->Des() );
         iconUriPathModifier.Append( *attributeValue );
@@ -460,44 +468,62 @@
         CleanupStack::PopAndDestroy( iconUriPath );
         }
     CleanupStack::PopAndDestroy( attributeValue );
-}
+    }
 
 // ----------------------------------------------------------------------------
 //
 // ----------------------------------------------------------------------------
 //
-void CCaWidgetScannerParser::SetMmcIdL( CCaWidgetDescription * widget )
-{
+void CCaWidgetScannerParser::SetMmcIdL( CCaWidgetDescription* aWidget,
+        TChar& aDrive )
+    {
     TChar removableDrive;
     User::LeaveIfError( DriveInfo::GetDefaultDrive(
-                DriveInfo::EDefaultRemovableMassStorage, removableDrive ) );
+            DriveInfo::EDefaultRemovableMassStorage, removableDrive ) );
 
     TChar massStorageDrive;
     User::LeaveIfError( DriveInfo::GetDefaultDrive(
-                DriveInfo::EDefaultMassStorage, massStorageDrive ) );
-    if( iCurrentDriveLetter == removableDrive )
+            DriveInfo::EDefaultMassStorage, massStorageDrive ) );
+    if ( aDrive == removableDrive )
         {
         RBuf mmcId;
-        mmcId.CreateL(KMassStorageIdLength);
         mmcId.CleanupClosePushL();
+        mmcId.CreateL( KMassStorageIdLength );
         WidgetScannerUtils::CurrentMmcId( iFs, mmcId );
-        widget->SetMmcIdL( mmcId );
+        aWidget->SetMmcIdL( mmcId );
         CleanupStack::PopAndDestroy( &mmcId );
         }
-    else if( iCurrentDriveLetter == massStorageDrive )
+    else if ( aDrive == massStorageDrive )
         {
-        widget->SetMmcIdL( KCaMassStorage );
+        aWidget->SetMmcIdL( KCaMassStorage );
         }
-}
+    }
+// ----------------------------------------------------------------------------
+//
+// ----------------------------------------------------------------------------
+//
+void CCaWidgetScannerParser::SetModificationTimeL( const TDesC& aFilePath,
+        CCaWidgetDescription* aWidgetDescriptor )
+    {
+    TTime modificationTime;
+    iFs.Modified( aFilePath, modificationTime );
+    TInt64 modificationIntTime = modificationTime.Int64();
+    RBuf16 rBuf;
+    rBuf.CleanupClosePushL();
+    rBuf.CreateL( KModificationTimeLength );
+    rBuf.AppendNum( modificationIntTime );
+    aWidgetDescriptor->SetModificationTimeL( rBuf );
+    CleanupStack::PopAndDestroy( &rBuf );
+    }
 
 // ----------------------------------------------------------------------------
 //
 // ----------------------------------------------------------------------------
 //
-CDir* CCaWidgetScannerParser::GetDirectoriesLC( )
+CDir* CCaWidgetScannerParser::GetDirectoriesLC( TChar& aDrive )
     {
     CDir* result = NULL;
-    HBufC* path = FullPathLC( );
+    HBufC* path = FullPathLC( aDrive );
     iFs.GetDir( *path, KEntryAttDir, ESortByName, result );
     CleanupStack::PopAndDestroy( path );
     CleanupStack::PushL( result );
@@ -508,12 +534,11 @@
 //
 // ----------------------------------------------------------------------------
 //
-HBufC* CCaWidgetScannerParser::FullPathLC( )
+HBufC* CCaWidgetScannerParser::FullPathLC( TChar& aDrive ) const
     {
-    HBufC* result =
-        HBufC16::NewLC( iImportPath.Length() + KDriveLetterLength );
+    HBufC* result = HBufC16::NewLC( iImportPath.Length() + KDriveLetterLength );
     TPtr modifier( result->Des() );
-    modifier.Append( iCurrentDriveLetter );
+    modifier.Append( aDrive );
     modifier.Append( KColen );
     modifier.Append( iImportPath );
     return result;
@@ -524,11 +549,11 @@
 // ----------------------------------------------------------------------------
 //
 HBufC* CCaWidgetScannerParser::GetManifestDirectoryPathLC(
-        const TDesC& aDirectoryName )
+        const TDesC& aDirectoryName, TChar& aDrive ) const
     {
     HBufC* result = HBufC16::NewLC( KMaxPath );
     TPtr modifier( result->Des() );
-    HBufC* path = FullPathLC( );
+    HBufC* path = FullPathLC( aDrive );
     modifier.Append( *path );
     CleanupStack::PopAndDestroy( path );
     modifier.Append( aDirectoryName );
@@ -536,79 +561,160 @@
     return result;
     }
 
-void CCaWidgetScannerParser::ParseUriL(TXmlEngElement & aElement)
-    {
-    if (aElement.Text().Length())
-        {
-        HBufC *utf16 =
-            CnvUtfConverter::ConvertToUnicodeFromUtf8L( aElement.Text() );
-        CleanupStack::PushL( utf16 );
-        iWidgetDescriptor->SetUriL( *utf16 );
-        CleanupStack::PopAndDestroy( utf16 );
-        }
-
-    }
-void CCaWidgetScannerParser::ParseTitleL(TXmlEngElement & aElement)
+// ----------------------------------------------------------------------------
+//
+// ----------------------------------------------------------------------------
+//
+void CCaWidgetScannerParser::ParseUriL( TXmlEngElement& aElement,
+        CCaWidgetDescription* aWidgetDescriptor )
     {
-    if (aElement.Text().Length())
-        {
-        HBufC *utf16 =
-            CnvUtfConverter::ConvertToUnicodeFromUtf8L( aElement.Text() );
-        CleanupStack::PushL( utf16 );
-        iWidgetDescriptor->SetTitleL( *utf16 );
-        CleanupStack::PopAndDestroy( utf16 );
-        }
+    aWidgetDescriptor->SetUriL( *GetElementTextLC( aElement )  );
+    CleanupStack::PopAndDestroy( );
     }
-void CCaWidgetScannerParser::ParseIconL(TXmlEngElement & aElement,
-    const TDesC & aPackageUid )
+
+// ----------------------------------------------------------------------------
+//
+// ----------------------------------------------------------------------------
+//
+void CCaWidgetScannerParser::ParseTitleL( TXmlEngElement& aElement,
+        CCaWidgetDescription* aWidgetDescriptor )
     {
-    HBufC *utf16 =
-        CnvUtfConverter::ConvertToUnicodeFromUtf8L( aElement.Text() );
-    CleanupStack::PushL( utf16 );
-    if ( utf16->Compare( KNullDesC ) )
-        {
-        HBufC* iconUriPath = GetManifestDirectoryPathLC( aPackageUid );
-        iconUriPath = iconUriPath->ReAllocL( iconUriPath->Length() + utf16->Length() );
-        CleanupStack::Pop(1);
-        CleanupStack::PushL(iconUriPath);
-        TPtr iconUriPathModifier( iconUriPath->Des() );
-        iconUriPathModifier.Append( *utf16 );
-        iWidgetDescriptor->SetIconUriL( *iconUriPath );
-        CleanupStack::PopAndDestroy( iconUriPath );
-        }
-
-    CleanupStack::PopAndDestroy( utf16 );
+    aWidgetDescriptor->SetTitleL( *GetElementTextLC( aElement ) );
+    CleanupStack::PopAndDestroy( );
     }
 
-void CCaWidgetScannerParser::ParseDescriptionL(TXmlEngElement & aElement)
+// ----------------------------------------------------------------------------
+//
+// ----------------------------------------------------------------------------
+//
+void CCaWidgetScannerParser::ParseIconL( TXmlEngElement& aElement,
+        const TDesC& aPackageUid, CCaWidgetDescription* aWidgetDescriptor,
+        TChar& aDrive )
     {
-    HBufC *desc =
-        CnvUtfConverter::ConvertToUnicodeFromUtf8L( aElement.Text() );
-    CleanupStack::PushL( desc );
+    aWidgetDescriptor->SetIconUriL( 
+        *GetThemableGraphicsNameLC(aElement, aPackageUid, aDrive ) );
+   
+    CleanupStack::PopAndDestroy( );
+    }
 
-    if( desc->Compare( KNullDesC ) != 0 )
-       {
-       iWidgetDescriptor->SetDescriptionL( *desc );
-       }
-    CleanupStack::PopAndDestroy( desc );
+// ----------------------------------------------------------------------------
+//
+// ----------------------------------------------------------------------------
+//
+void CCaWidgetScannerParser::ParsePreviewImageNameL(
+        TXmlEngElement & aElement,
+        const TDesC & aPackageUid,
+        CCaWidgetDescription* aWidgetDescriptor,
+        TChar& aDrive )
+    {
+    aWidgetDescriptor->SetPreviewImageNameL( 
+        *GetThemableGraphicsNameLC(aElement, aPackageUid, aDrive ) );
+    
+    CleanupStack::PopAndDestroy( );
     }
-void CCaWidgetScannerParser::ParseHiddenL( TXmlEngElement& aElement )
+
+// ----------------------------------------------------------------------------
+//
+// ----------------------------------------------------------------------------
+//
+void CCaWidgetScannerParser::ParseDescriptionL( TXmlEngElement& aElement,
+        CCaWidgetDescription* aWidgetDescriptor )
+    {
+    aWidgetDescriptor->SetDescriptionL( *GetElementTextLC( aElement ) );
+    CleanupStack::PopAndDestroy();
+    }
+
+// ----------------------------------------------------------------------------
+//
+// ----------------------------------------------------------------------------
+//
+void CCaWidgetScannerParser::ParseHiddenL( TXmlEngElement& aElement,
+        CCaWidgetDescription* aWidgetDescriptor )
     {
     if( aElement.Text().Compare( _L8("true") ) == 0 )
         {
-        iWidgetDescriptor->SetVisible( EFalse );
+        aWidgetDescriptor->SetFlag( EVisible, EFalse );
         }
+    }
+
+// ----------------------------------------------------------------------------
+//
+// ----------------------------------------------------------------------------
+//
+void CCaWidgetScannerParser::ParseServiceXmlL( TXmlEngElement& aElement,
+        CCaWidgetDescription* aWidgetDescriptor )
+    {
+    aWidgetDescriptor->SetServiceXmlL( *GetElementTextLC( aElement ) );
+    CleanupStack::PopAndDestroy( );
+    }
 
+// ----------------------------------------------------------------------------
+//
+// ----------------------------------------------------------------------------
+//
+HBufC* CCaWidgetScannerParser::GetElementTextLC( 
+    const TXmlEngElement& aElement ) const
+    {
+    HBufC* const elementText =
+        CnvUtfConverter::ConvertToUnicodeFromUtf8L( aElement.Text() );
+    CleanupStack::PushL( elementText );
+    return elementText;
     }
-void CCaWidgetScannerParser::ParseServiceXmlL( TXmlEngElement& aElement )
+
+
+// ----------------------------------------------------------------------------
+//
+// ----------------------------------------------------------------------------
+//
+HBufC* CCaWidgetScannerParser::GetThemableGraphicsNameLC(
+        const TXmlEngElement& aElement,
+        const TDesC& aPackageUid,
+        TChar& aDrive ) const
     {
-    HBufC *serviceXml = CnvUtfConverter::ConvertToUnicodeFromUtf8L( aElement.Text() );
-    CleanupStack::PushL( serviceXml );
-       
-    if (serviceXml->Compare(KNullDesC) != 0)
+    RBuf graphicsName;
+    graphicsName.CleanupClosePushL();
+    HBufC* result; 
+
+    
+    if ( aElement.Text() != KNullDesC8 )
         {
-        iWidgetDescriptor->SetServiceXmlL( *serviceXml );
+        RBuf elementText;
+        elementText.CleanupClosePushL();
+        
+        elementText.Assign( 
+            CnvUtfConverter::ConvertToUnicodeFromUtf8L( aElement.Text() ) );
+        
+        if ( TParsePtrC(elementText).Ext() != KNullDesC )
+            {
+            HBufC* const manifestDirectoryPath( 
+                GetManifestDirectoryPathLC( aPackageUid, aDrive ) );
+            
+            graphicsName.CreateL( manifestDirectoryPath->Length() + 
+                elementText.Length() );
+            graphicsName.Append( *manifestDirectoryPath );
+            
+            CleanupStack::PopAndDestroy( manifestDirectoryPath );
+            }
+        else
+            {   
+            graphicsName.CreateL( elementText.Length() );
+            }
+        
+        graphicsName.Append( elementText );
+        result = HBufC::NewL( graphicsName.Length() ) ;
+        *result = graphicsName;
+        
+        CleanupStack::PopAndDestroy( &elementText );
         }
-    CleanupStack::PopAndDestroy( serviceXml );
+    else
+    	{
+        result = HBufC::NewL( 1 ) ;
+    	}
+        CleanupStack::PopAndDestroy( &graphicsName );
+        CleanupStack::PushL( result );
+        
+        return result;
     }
+
+
 //  End of File
--- a/contentstorage/casrv/cawidgetscanner/src/cawidgetscannerplugin.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/casrv/cawidgetscanner/src/cawidgetscannerplugin.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -1,19 +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:
+ * 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:
+ *
+ */
 
 // INCLUDE FILES
 
@@ -21,63 +21,60 @@
 #include <sacls.h>
 
 #include "cawidgetscannerplugin.h"
-#include "cawidgetscannerparser.h"
 #include "cawidgetstoragehandler.h"
 #include "cawidgetscannerinstallnotifier.h"
 
-
 // Function used to return an instance of the proxy table.
 const TImplementationProxy ImplementationTable[] =
     {
     IMPLEMENTATION_PROXY_ENTRY(0x20028707, CCaWidgetScannerPlugin::NewL)
     };
 
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC SKIP
+#endif //COVERAGE_MEASUREMENT (proxy for instantiation)
 // ----------------------------------------------------------------------------
-// ImplementationGroupProxy
-// Exported proxy for instantiation method resolution
+// 
 // ----------------------------------------------------------------------------
 //
 EXPORT_C const TImplementationProxy*
 ImplementationGroupProxy( TInt& aTableCount )
     {
-    aTableCount = sizeof( ImplementationTable ) /
-    sizeof( TImplementationProxy );
+    aTableCount = sizeof( ImplementationTable ) / sizeof(TImplementationProxy);
     return ImplementationTable;
     }
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC ENDSKIP
+#endif //COVERAGE_MEASUREMENT
 
 // ============================ MEMBER FUNCTIONS ===============================
 
-// -----------------------------------------------------------------------------
-// CCaWidgetScannerPlugin ::CCaWidgetScannerPlugin
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
+// ----------------------------------------------------------------------------
+// 
+// ----------------------------------------------------------------------------
 //
 CCaWidgetScannerPlugin::CCaWidgetScannerPlugin()
     {
     }
 
-// -----------------------------------------------------------------------------
-// CCaWidgetScannerPlugin ::ConstructL
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
+// ----------------------------------------------------------------------------
+// 
+// ----------------------------------------------------------------------------
 //
 void CCaWidgetScannerPlugin::ConstructL( TPluginParams* aPluginParams )
     {
     User::LeaveIfError( iFs.Connect() );
     iMmcWatcher = CCaMmcWatcher::NewL( iFs, this );
     iInstallNotifier = CCaWidgetScannerInstallNotifier::NewL( this,
-        KUidSystemCategory, KSAUidSoftwareInstallKeyValue );
-    iParser = CCaWidgetScannerParser::NewL( iFs );
+            KUidSystemCategory, KSAUidSoftwareInstallKeyValue );
     iStorageHandler = CCaWidgetStorageHandler::NewL(
             aPluginParams->storageProxy, iFs );
     SynchronizeL();
     }
 
-// -----------------------------------------------------------------------------
-// CCaWidgetScannerPlugin ::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
+// ----------------------------------------------------------------------------
+// 
+// ----------------------------------------------------------------------------
 //
 CCaWidgetScannerPlugin * CCaWidgetScannerPlugin::NewL(
         TPluginParams* aPluginParams )
@@ -87,29 +84,27 @@
     return self;
     }
 
-// -----------------------------------------------------------------------------
-// CCaWidgetScannerPlugin ::NewLC
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
+// ----------------------------------------------------------------------------
+// 
+// ----------------------------------------------------------------------------
 //
 CCaWidgetScannerPlugin * CCaWidgetScannerPlugin::NewLC(
         TPluginParams* aPluginParams )
     {
-    CCaWidgetScannerPlugin * self = new( ELeave ) CCaWidgetScannerPlugin ( );
+    CCaWidgetScannerPlugin * self = new ( ELeave ) CCaWidgetScannerPlugin();
     CleanupStack::PushL( self );
     self->ConstructL( aPluginParams );
     return self;
     }
 
-// -----------------------------------------------------------------------------
-// Destructor
-// -----------------------------------------------------------------------------
+// ----------------------------------------------------------------------------
+// 
+// ----------------------------------------------------------------------------
 //
-CCaWidgetScannerPlugin::~CCaWidgetScannerPlugin ()
+CCaWidgetScannerPlugin::~CCaWidgetScannerPlugin()
     {
     delete iMmcWatcher;
     delete iInstallNotifier;
-    delete iParser;
     delete iStorageHandler;
     iFs.Close();
     }
@@ -120,7 +115,7 @@
 //
 void CCaWidgetScannerPlugin::SynchronizeL()
     {
-    iStorageHandler->SynchronizeL( iParser->WidgetsScanL() );
+    iStorageHandler->SynchronizeL();
     }
 
 // ----------------------------------------------------------------------------
--- a/contentstorage/casrv/cawidgetscanner/src/cawidgetstoragehandler.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/casrv/cawidgetscanner/src/cawidgetstoragehandler.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -18,6 +18,8 @@
 
 #include <badesca.h>
 #include <usif/scr/screntries.h>
+#include <hbtextresolversymbian.h>
+
 #include "widgetscannerutils.h"
 #include "cawidgetstoragehandler.h"
 #include "cadef.h"
@@ -26,41 +28,36 @@
 #include "castorageproxy.h"
 #include "caarraycleanup.inl"
 #include "calocalizationentry.h"
-
+#include "cawidgetscannerparser.h"
 #include "cawidgetscannerdef.h"
 
-
 using namespace Usif;
 
-
-// ============================ MEMBER FUNCTIONS ===============================
+// ============================ MEMBER FUNCTIONS ============================z===
 
 // -----------------------------------------------------------------------------
-// CCaWidgetStorageHandler::CCaWidgetStorageHandler
-// C++ default constructor can NOT contain any code, that
-// might leave.
+// 
 // -----------------------------------------------------------------------------
 //
-CCaWidgetStorageHandler::CCaWidgetStorageHandler(
-        CCaStorageProxy* aStorage, RFs& aFs )
+CCaWidgetStorageHandler::CCaWidgetStorageHandler( CCaStorageProxy* aStorage,
+        RFs& aFs )
     {
     iStorage = aStorage;
     iFs = aFs;
     }
 
 // -----------------------------------------------------------------------------
-// CCaWidgetStorageHandler::ConstructL
-// Symbian 2nd phase constructor can leave.
+// 
 // -----------------------------------------------------------------------------
 //
 void CCaWidgetStorageHandler::ConstructL()
     {
     User::LeaveIfError( iSoftwareRegistry.Connect() );
+    iParser = CCaWidgetScannerParser::NewL( iFs );
     }
 
 // -----------------------------------------------------------------------------
-// CCaWidgetStorageHandler::NewL
-// Two-phased constructor.
+// 
 // -----------------------------------------------------------------------------
 //
 CCaWidgetStorageHandler* CCaWidgetStorageHandler::NewL(
@@ -72,8 +69,7 @@
     }
 
 // -----------------------------------------------------------------------------
-// CCaWidgetStorageHandler::NewLC
-// Two-phased constructor.
+// 
 // -----------------------------------------------------------------------------
 //
 CCaWidgetStorageHandler* CCaWidgetStorageHandler::NewLC(
@@ -87,24 +83,24 @@
     }
 
 // -----------------------------------------------------------------------------
-// Destructor
+// 
 // -----------------------------------------------------------------------------
 //
 CCaWidgetStorageHandler::~CCaWidgetStorageHandler()
     {
+    delete iParser;
     iSoftwareRegistry.Close();
     iWidgets.ResetAndDestroy();
-    iUpdatedIndexes.Close();
     }
 
 // ----------------------------------------------------------------------------
 //
 // ----------------------------------------------------------------------------
 //
-void CCaWidgetStorageHandler::SynchronizeL( const RWidgetArray& aWidgets )
+void CCaWidgetStorageHandler::SynchronizeL()
     {
     FetchWidgetsL();
-    AddWidgetsL( aWidgets );
+    AddWidgetsL( iParser->WidgetsScanL( iWidgets ) );
     RemoveWidgetsL();
     }
 
@@ -119,8 +115,8 @@
     iStorage->AddL( entry );
 
     SetLocalizationsL( aWidget, entry->GetId() );
-    
-    if( entry->GetFlags() & ERemovable )
+
+    if ( entry->GetFlags() & ERemovable )
         {
         AddWidgetToDownloadCollectionL( entry );
         }
@@ -137,22 +133,21 @@
     CCaInnerEntry* entry = aWidget->GetEntryLC();
     UpdateComponentIdL( aWidget->GetManifestFilePathName(), *entry );
     entry->SetId( aEntryId );
-    if( !aWidget->IsMissing() && aWidget->IsUsed() )
+    if ( !aWidget->IsMissing() && aWidget->IsUsed() )
         {
         entry->SetFlags( entry->GetFlags() & ~EUsed );
         }
     TItemAppearance itemAppearanceChange = EItemAppearanceNotChanged;
-    if( ( entry->GetFlags() & EMissing ) ||
-        !( entry->GetFlags() & EVisible ) )
+    if ( ( entry->GetFlags() & EMissing ) || !( entry->GetFlags() & EVisible ) )
         {
         itemAppearanceChange = EItemAppeared;
         }
     entry->SetFlags( entry->GetFlags() & ~EMissing | EVisible );
     iStorage->AddL( entry, EFalse, itemAppearanceChange );
-    
+
     SetLocalizationsL( aWidget, entry->GetId() );
-    
-    if( !aWidget->IsMissing() )
+
+    if ( !aWidget->IsMissing() )
         {
         AddWidgetToDownloadCollectionL( entry );
         }
@@ -165,29 +160,28 @@
 //
 void CCaWidgetStorageHandler::AddWidgetsL( const RWidgetArray& aWidgets )
     {
-    iUpdatedIndexes.Reset();
-    for( TInt i = 0; i < aWidgets.Count(); i++ )
+    for ( TInt i = 0; i < aWidgets.Count(); i++ )
         {
         aWidgets[i]->LocalizeTextsL();
-        TInt index = iWidgets.Find(
-                aWidgets[i], CCaWidgetDescription::Compare );
-        if( index != KErrNotFound )
+        TInt index = iWidgets.Find( aWidgets[i], CCaWidgetDescription::Compare );
+        if ( index != KErrNotFound )
             {
-            if( !iWidgets[index]->Compare( *aWidgets[i] ) ||
-                    iWidgets[index]->IsMissing() )
+            iWidgets[index]->SetValid( ETrue );
+            if ( !iWidgets[index]->Compare( *aWidgets[i] )
+                    || iWidgets[index]->IsMissing() )
                 {
-                aWidgets[i]->SetMissing( iWidgets[index]->IsMissing() );
-                aWidgets[i]->SetUsed( iWidgets[index]->IsUsed() );
-                aWidgets[i]->SetVisible( iWidgets[index]->IsVisible() );
+                aWidgets[i]->SetFlag( EMissing, iWidgets[index]->IsMissing() );
+                aWidgets[i]->SetFlag( EUsed, iWidgets[index]->IsUsed() );
+                aWidgets[i]->SetFlag( EVisible, iWidgets[index]->IsVisible() );
                 UpdateL( aWidgets[i], iWidgets[index]->GetEntryId() );
                 }
-            iUpdatedIndexes.AppendL( index );
             }
         else
             {
             AddL( aWidgets[i] );
             }
         }
+    HbTextResolverSymbian::Init( _L(""), KLocalizationFilepathZ );
     }
 
 // ----------------------------------------------------------------------------
@@ -196,11 +190,11 @@
 //
 void CCaWidgetStorageHandler::RemoveWidgetsL()
     {
-    for( TInt i = 0; i < iWidgets.Count(); i++ )
+    for ( TInt i = 0; i < iWidgets.Count(); i++ )
         {
-        if( iUpdatedIndexes.Find( i ) == KErrNotFound )
+        if ( !iWidgets[i]->IsValid() )
             {
-            if( iWidgets[i]->GetMmcId() != KNullDesC )
+            if ( iWidgets[i]->GetMmcId() != KNullDesC )
                 {
                 RBuf currentMmcId;
                 currentMmcId.CreateL( KMassStorageIdLength );
@@ -218,15 +212,12 @@
                     {
                     SetMissingFlagL( iWidgets[i] );
                     }
-                CleanupStack::PopAndDestroy(&currentMmcId);
+                CleanupStack::PopAndDestroy( &currentMmcId );
                 }
             else
                 {
                 //item was uninstalled so we remove its mmc id
-                if ( iWidgets[i]->IsVisible() )
-                    {
-                    ClearVisibleFlagL( iWidgets[i] );
-                    }
+                ClearVisibleFlagL( iWidgets[i] );
                 }
             }
         }
@@ -284,12 +275,11 @@
     RPointerArray<CCaInnerEntry> entries;
     CleanupResetAndDestroyPushL( entries );
     iStorage->GetEntriesL( query, entries );
-       
+
     iWidgets.ResetAndDestroy();
-    for( TInt i = 0; i < entries.Count(); i++ )
+    for ( TInt i = 0; i < entries.Count(); i++ )
         {
-        CCaWidgetDescription* widget = CCaWidgetDescription::NewLC(
-                entries[i] );
+        CCaWidgetDescription* widget = CCaWidgetDescription::NewLC( entries[i] );
         iWidgets.AppendL( widget ); //iWidgets takes ownership
         CleanupStack::Pop( widget );
         }
@@ -304,11 +294,11 @@
 void CCaWidgetStorageHandler::SetMissingFlagL(
         const CCaWidgetDescription* aWidget )
     {
-    if( !aWidget->IsMissing() )
+    if ( !aWidget->IsMissing() )
         {
         CCaInnerEntry* entry = aWidget->GetEntryLC();
-        entry->SetFlags( entry->GetFlags() | EMissing );
-        if( aWidget->IsUsed() )
+        entry->SetFlags( ( entry->GetFlags() | EMissing ) & ~EUninstall );
+        if ( aWidget->IsUsed() )
             {
             entry->SetFlags( entry->GetFlags() | EUsed );
             }
@@ -324,10 +314,17 @@
 void CCaWidgetStorageHandler::ClearVisibleFlagL(
         const CCaWidgetDescription* aWidget )
     {
-    CCaInnerEntry* entry = aWidget->GetEntryLC();
-    entry->SetFlags( entry->GetFlags() & ~EVisible & ~EMissing & ~EUsed );
-    iStorage->AddL( entry, EFalse, EItemDisappeared );
-    CleanupStack::PopAndDestroy( entry );
+    if ( aWidget->IsVisible() )
+        {
+        CCaInnerEntry* entry = aWidget->GetEntryLC();
+        entry->SetFlags( entry->GetFlags()
+                & ~EUninstall
+                & ~EVisible 
+                & ~EMissing 
+                & ~EUsed );
+        iStorage->AddL( entry, EFalse, EItemDisappeared );
+        CleanupStack::PopAndDestroy( entry );
+        }
     }
 
 // ----------------------------------------------------------------------------
@@ -355,24 +352,24 @@
 // ----------------------------------------------------------------------------
 //
 
-void CCaWidgetStorageHandler::SetLocalizationsL(  const CCaWidgetDescription* aWidget,
-        TInt aEntryId  )
+void CCaWidgetStorageHandler::SetLocalizationsL(
+        const CCaWidgetDescription* aWidget, TInt aEntryId )
     {
     RBuf filename;
-    filename.Create( aWidget->GetUri().Length() + 1 ); //1 for _
+    filename.CreateL( aWidget->GetUri().Length() + 1 ); //1 for _
     CleanupClosePushL( filename );
     filename.Copy( aWidget->GetUri() );
     filename.Append( KWidgetScannerUnderline );
-    
+
     // prepare localizations
-    if ( aWidget->GetTitle().Length() > 0 &&
-            aWidget->GetTitle().Compare( aWidget->GetStringIdTitle() ) )
-        // lets do not add localization when key and value are identical
+    if ( aWidget->GetTitle().Length() > 0 && aWidget->GetTitle().Compare(
+            aWidget->GetStringIdTitle() ) )
+    // lets do not add localization when key and value are identical
         {
         CCaLocalizationEntry* titleEntry = CCaLocalizationEntry::NewL();
         CleanupStack::PushL( titleEntry );
-        titleEntry->SetTableNameL( KWidgetScannerCaEntry );
-        titleEntry->SetAttributeNameL( KWidgetScannerEnText );
+        titleEntry->SetTableNameL( KLocalizationCaEntry );
+        titleEntry->SetAttributeNameL( KLocalizationEnText );
         titleEntry->SetStringIdL( aWidget->GetStringIdTitle() );
         titleEntry->SetQmFilenameL( filename );
         titleEntry->SetRowId( aEntryId );
@@ -382,12 +379,12 @@
     if ( aWidget->GetDescription().Length() > 0 &&
             aWidget->GetDescription().Compare(
                     aWidget->GetStringIdDescription() ) )
-        // lets do not add localization when key and value are identical
+    // lets do not add localization when key and value are identical
         {
         CCaLocalizationEntry* descEntry = CCaLocalizationEntry::NewL();
         CleanupStack::PushL( descEntry );
-        descEntry->SetTableNameL( KWidgetScannerCaEntry );
-        descEntry->SetAttributeNameL( KWidgetScannerEnDescription );
+        descEntry->SetTableNameL( KLocalizationCaEntry );
+        descEntry->SetAttributeNameL( KLocalizationEnDescription );
         descEntry->SetStringIdL( aWidget->GetStringIdDescription() );
         descEntry->SetQmFilenameL( filename );
         descEntry->SetRowId( aEntryId );
@@ -402,41 +399,39 @@
 // ----------------------------------------------------------------------------
 //
 
-void CCaWidgetStorageHandler::UpdateComponentIdL( 
-    const TDesC& aManifestFilePathName, 
-    CCaInnerEntry& aEntry ) const
+void CCaWidgetStorageHandler::UpdateComponentIdL(
+        const TDesC& aManifestFilePathName, CCaInnerEntry& aEntry ) const
     {
     RArray<TComponentId> componentIds;
     CleanupClosePushL( componentIds );
-    
+
     CComponentFilter* const fileNameFilter = CComponentFilter::NewLC();
     fileNameFilter->SetFileL( aManifestFilePathName );
     iSoftwareRegistry.GetComponentIdsL( componentIds, fileNameFilter );
 
     CleanupStack::PopAndDestroy( fileNameFilter );
-    
+
     if ( componentIds.Count() == 1 )
         {
         RBuf newComponentId;
         newComponentId.CleanupClosePushL();
         newComponentId.CreateL( sizeof(TComponentId) + 1 );
         newComponentId.AppendNum( componentIds[0] );
-        
+
         RBuf oldComponentId;
         oldComponentId.CleanupClosePushL();
         oldComponentId.CreateL( KCaMaxAttrValueLen );
-        
-        const TBool componentIdAttributeFound = 
-            aEntry.FindAttribute( KCaComponentId, oldComponentId );
-              
-        if ( !componentIdAttributeFound 
-            || oldComponentId.Compare( newComponentId ) != 0 )
+
+        const TBool componentIdAttributeFound = aEntry.FindAttribute(
+                KCaComponentId, oldComponentId );
+
+        if ( !componentIdAttributeFound || oldComponentId.Compare(
+                newComponentId ) != 0 )
             {
             // 'add' or 'update' the component id attribute value
-            aEntry.AddAttributeL( KCaComponentId, 
-                newComponentId );
+            aEntry.AddAttributeL( KCaComponentId, newComponentId );
             }
-        
+
         CleanupStack::PopAndDestroy( &oldComponentId );
         CleanupStack::PopAndDestroy( &newComponentId );
         }
@@ -444,5 +439,4 @@
     CleanupStack::PopAndDestroy( &componentIds );
     }
 
-
 //  End of File
--- a/contentstorage/casrv/cawidgetscanner/src/widgetscannerutils.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/casrv/cawidgetscanner/src/widgetscannerutils.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -1,19 +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:
+ * 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:
+ *
+ */
 
 // INCLUDE FILES
 #include "widgetscannerutils.h"
@@ -24,23 +24,26 @@
 //
 // -----------------------------------------------------------------------------
 //
-TBool WidgetScannerUtils::IsFileOnDrive(const TDesC& aFileName,
-    const DriveInfo::TDefaultDrives& aDefaultDrive)
-{
-    if (aFileName.Length()) {
+TBool WidgetScannerUtils::IsFileOnDrive( const TDesC& aFileName,
+        const DriveInfo::TDefaultDrives& aDefaultDrive )
+    {
+    TBool result = EFalse;
+    if ( aFileName.Length() )
+        {
         TInt drive;
-        TInt err = DriveInfo::GetDefaultDrive(aDefaultDrive, drive);
-        if (!err) {
+        TInt err = DriveInfo::GetDefaultDrive( aDefaultDrive, drive );
+        if ( !err )
+            {
             TInt fileDrive;
-            err = RFs::CharToDrive(aFileName[0], fileDrive);
-            if (!err && fileDrive == drive) {
-                return ETrue;
+            err = RFs::CharToDrive( aFileName[0], fileDrive );
+            if ( !err && fileDrive == drive )
+                {
+                result = ETrue;
+                }
             }
         }
+    return result;
     }
-    return EFalse;
-}
-
 
 // -----------------------------------------------------------------------------
 //
@@ -49,11 +52,11 @@
 void WidgetScannerUtils::CurrentMmcId( const RFs& aFs, TDes& aMmcId )
     {
     TInt mmcDrive;
-    if ( DriveInfo::GetDefaultDrive(
-            DriveInfo::EDefaultRemovableMassStorage, mmcDrive ) == KErrNone )
+    if ( DriveInfo::GetDefaultDrive( DriveInfo::EDefaultRemovableMassStorage,
+            mmcDrive ) == KErrNone )
         {
         TVolumeInfo volumeInfo;
-        if( aFs.Volume( volumeInfo, mmcDrive ) == KErrNone )
+        if ( aFs.Volume( volumeInfo, mmcDrive ) == KErrNone )
             {
             aMmcId.Zero();
             aMmcId.AppendNum( volumeInfo.iUniqueID );
Binary file contentstorage/castorage/data/castorage.db has changed
--- a/contentstorage/castorage/data/castoragedb_create.sql	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/castorage/data/castoragedb_create.sql	Wed Jun 23 18:33:40 2010 +0300
@@ -193,7 +193,6 @@
     "" AS "ICON_SKIN_ID",
     "" AS "PACKAGE_UID",
     "" AS "LIBRARY",
-    "" AS "LONG_NAME",
     "" AS "URI",
     "" AS "COLLECTION_NAME";
 
@@ -216,8 +215,6 @@
   INSERT OR IGNORE INTO CA_ATTRIBUTE (AT_ENTRY_ID, AT_NAME, AT_VALUE )  
   VALUES ( ( SELECT ENTRY_ID FROM CA_ENTRY WHERE EN_TEXT = new.ITEM_NAME ) ,"widget:library",new.LIBRARY);
   INSERT OR IGNORE INTO CA_ATTRIBUTE (AT_ENTRY_ID, AT_NAME, AT_VALUE )  
-  VALUES ( ( SELECT ENTRY_ID FROM CA_ENTRY WHERE EN_TEXT = new.ITEM_NAME ) ,"long_name",new.LONG_NAME);
-  INSERT OR IGNORE INTO CA_ATTRIBUTE (AT_ENTRY_ID, AT_NAME, AT_VALUE )  
   VALUES ( ( SELECT ENTRY_ID FROM CA_ENTRY WHERE EN_TEXT = new.ITEM_NAME ) ,"widget:uri",new.URI);
   -- RELATION TO MAIN COLLECTION (ADD TO GROUP: )
   INSERT INTO CA_GROUP_ENTRY (GE_GROUP_ID, GE_ENTRY_ID, GE_POSITION) 
--- a/contentstorage/castorage/data/castoragedb_variant_test.sql	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/castorage/data/castoragedb_variant_test.sql	Wed Jun 23 18:33:40 2010 +0300
@@ -14,8 +14,8 @@
   VALUES ("url", 'Google', 'c:\data\Images\kqticaicons\google.png', "http://www.google.com/", 'Test Apps', '4' );
 
 -- insert example widgets
-  INSERT INTO WIDGET_TO_COLLECTION (ITEM_TYPE, ITEM_NAME, ICON_FILENAME, ICON_SKIN_ID, PACKAGE_UID, LIBRARY, LONG_NAME, URI, COLLECTION_NAME) 
-  VALUES ("widget", 'Clock', 'Z:\private\20022F35\import\widgetregistry\20022F6C\tclock.png', '4' , '20022f6c', 'Z:\private\20022F35\import\widgetregistry\20022F6C\hsclockwidgetplugin', 'Clock', 'hsclockwidgetplugin', 'Test Apps' ); 
+  INSERT INTO WIDGET_TO_COLLECTION (ITEM_TYPE, ITEM_NAME, ICON_FILENAME, ICON_SKIN_ID, PACKAGE_UID, LIBRARY, URI, COLLECTION_NAME) 
+  VALUES ("widget", 'Clock', 'Z:\private\20022F35\import\widgetregistry\20022F6C\tclock.png', '4' , '20022f6c', 'Z:\private\20022F35\import\widgetregistry\20022F6C\hsclockwidgetplugin', 'hsclockwidgetplugin', 'Test Apps' ); 
 
 
 SELECT "castoragedb_variant_test - END" AS " ";
--- a/contentstorage/castorage/inc/casqlitestorage.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/castorage/inc/casqlitestorage.h	Wed Jun 23 18:33:40 2010 +0300
@@ -129,9 +129,12 @@
      * @param aEntryIdArray List of enties ids.
      * @param aParentIdArray The result list of parents
      * ids for a specific select.
+     * @param aCheckParentsParent falg if set to true then 
+     * search also for parent of the parent 
      */
     void GetParentsIdsL( const RArray<TInt>& aEntryIdArray,
-            RArray<TInt>& aParentIdArray );
+            RArray<TInt>& aParentIdArray, 
+            TBool aCheckParentsParent = ETrue );
 
     /**
      * Adds or Updates data & action to database.
--- a/contentstorage/castorage/inc/castorage.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/castorage/inc/castorage.h	Wed Jun 23 18:33:40 2010 +0300
@@ -79,9 +79,12 @@
      * @param aEntryIdArray list of enties ids.
      * @param aParentIdArray The result list of parents' ids
      * for a specific select.
+     * @param aCheckParentsParent falg if set to true then 
+     * search also for parent of the parent 
      */
     virtual void GetParentsIdsL( const RArray<TInt>& aEntryIdArray,
-            RArray<TInt>& aParentIdArray ) = 0;
+            RArray<TInt>& aParentIdArray, 
+            TBool aCheckParentsParent = ETrue ) = 0;
 
     /**
      * Adds or Updates data & action to the storage.
--- a/contentstorage/castorage/inc/castorage_global.h	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-/*
- * 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:
- *
- */
-
-#ifndef CA_STORAGE_GLOBAL
-#define CA_STORAGE_GLOBAL
-
-#ifndef CONTENT_ARSENAL_STORAGE_UT
-#define CA_STORAGE_TEST_CLASS(aClassName)
-#else
-#define CA_STORAGE_TEST_CLASS(aClassName) class aClassName;
-#endif
-
-#ifndef CONTENT_ARSENAL_STORAGE_UT
-#define CA_STORAGE_TEST_FRIEND_CLASS(aClassName)
-#else
-#define CA_STORAGE_TEST_FRIEND_CLASS(aClassName) friend class aClassName;
-#endif
-
-#endif // CA_STORAGE_GLOBAL
--- a/contentstorage/castorage/src/casqlitestorage.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/castorage/src/casqlitestorage.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -320,7 +320,7 @@
 // ---------------------------------------------------------------------------
 //
 void CCaSqLiteStorage::GetParentsIdsL( const RArray<TInt>& aEntryIdArray,
-        RArray<TInt>& aParentIdArray )
+        RArray<TInt>& aParentIdArray, TBool aCheckParentsParent )
     {
     CCaSqlQuery* sqlGetParentIdsQuery = CCaSqlQuery::NewLC( iSqlDb );
     CaSqlQueryCreator::CreateGetParentsIdsQueryL( aEntryIdArray,
@@ -334,7 +334,7 @@
     TInt parentCount = sqlGetParentIdsQuery->ExecuteL( aParentIdArray,
             CCaSqlQuery::EGroupTable );
     CleanupStack::PopAndDestroy( sqlGetParentIdsQuery );
-    if( parentCount > 0 )
+    if( aCheckParentsParent && parentCount > 0 )
         {
         GetParentsIdsL( aParentIdArray, aParentIdArray );
         }
@@ -910,3 +910,4 @@
         }
     }
 
+
--- a/contentstorage/cautils/cautils.pro	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/cautils/cautils.pro	Wed Jun 23 18:33:40 2010 +0300
@@ -16,6 +16,7 @@
 
 TEMPLATE = lib
 symbian:{
+defFilePath = ./..
 DEPENDPATH += ./inc \
 			./src
 INCLUDEPATH += ./inc \
--- a/contentstorage/cautils/inc/cainnerentry.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/cautils/inc/cainnerentry.h	Wed Jun 23 18:33:40 2010 +0300
@@ -30,6 +30,12 @@
     {
 public:
 
+
+    enum TLocalizedType
+        {
+        ENameLocalized = 0,
+        EDescriptionLocalized
+        };
     /**
      * Destructor.
      */
@@ -116,16 +122,17 @@
     IMPORT_C void SetId( TUint aId );
 
     /**
-     * Sets the entry text.
+     * Sets localized entry text.
      * @param aText Entry text.
      */
-    IMPORT_C void SetTextL( const TDesC& aText );
-
+    IMPORT_C void SetTextL( 
+            const TDesC& aText, TBool localized = false );    
     /**
-     * Sets the entry description.
+     * Sets localized entry description.
      * @param aText Entry description.
      */
-    IMPORT_C void SetDescriptionL( const TDesC& aText );
+    IMPORT_C void SetDescriptionL( 
+            const TDesC& aText, TBool localized = false );
 
     /**
      * Sets the entry typename.
@@ -206,6 +213,12 @@
      * @param aStream a read stream
      */
     IMPORT_C void InternalizeL( RReadStream& aStream );
+    
+    /**
+     * Gets if Description is localized.
+     * @return ETrue if entry desscription is localized.
+     */
+    IMPORT_C TBool isLocalized(TLocalizedType aLocalized) const;
 
 private:
 
@@ -270,6 +283,11 @@
      * Uid
      */
     TInt32 iUid;
+    
+    TBool iTextLocalized;
+    
+    TBool iDescriptionLocalized;
+    
 
     };
 
--- a/contentstorage/cautils/src/caentryattribute.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/cautils/src/caentryattribute.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -32,6 +32,9 @@
     iValue.Close();
     }
 
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC SKIP
+#endif //COVERAGE_MEASUREMENT (only NewLC used in code)
 // ---------------------------------------------------------
 // CCaEntryAttribute::NewL
 // ---------------------------------------------------------
@@ -42,6 +45,9 @@
     CleanupStack::Pop( attr );
     return attr;
     }
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC ENDSKIP
+#endif //COVERAGE_MEASUREMENT
 
 // ---------------------------------------------------------
 // CCaEntryAttribute::NewLC
--- a/contentstorage/cautils/src/cainnerentry.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/cautils/src/cainnerentry.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -72,6 +72,8 @@
     aStream.WriteL( iDescription, iDescription.Length() );
     aStream.WriteUint32L( iEntryTypeName.Length() );
     aStream.WriteL( iEntryTypeName, iEntryTypeName.Length() );
+    aStream.WriteUint32L( iTextLocalized );
+    aStream.WriteUint32L( iDescriptionLocalized );
     iAttributes.ExternalizeL( aStream );
     iIcon->ExternalizeL( aStream );
     aStream.CommitL();
@@ -99,6 +101,8 @@
     iEntryTypeName.Close();
     iEntryTypeName.CreateL( length );
     aStream.ReadL( iEntryTypeName, length );
+    iTextLocalized = aStream.ReadUint32L();
+    iDescriptionLocalized = aStream.ReadUint32L();
     iAttributes.InternalizeL( aStream );
     iIcon->InternalizeL( aStream );
     }
@@ -110,6 +114,8 @@
 void CCaInnerEntry::ConstructL()
     {
     iIcon = CCaInnerIconDescription::NewL();
+    iTextLocalized = EFalse;
+    iDescriptionLocalized = EFalse;
     }
 
 // ---------------------------------------------------------------------------
@@ -224,20 +230,23 @@
 //
 // ---------------------------------------------------------------------------
 //
-EXPORT_C void CCaInnerEntry::SetTextL( const TDesC& aText )
+EXPORT_C void CCaInnerEntry::SetTextL( const TDesC& aText, TBool localized )
     {
     iText.Close();
     iText.CreateL( aText );
+    iTextLocalized = localized;
     }
 
 // ---------------------------------------------------------------------------
 //
 // ---------------------------------------------------------------------------
 //
-EXPORT_C void CCaInnerEntry::SetDescriptionL( const TDesC& aText )
+EXPORT_C void CCaInnerEntry::SetDescriptionL( 
+        const TDesC& aText, TBool localized )
     {
     iDescription.Close();
     iDescription.CreateL( aText );
+    iDescriptionLocalized = localized;
     }
 
 // ---------------------------------------------------------------------------
@@ -344,3 +353,23 @@
     {
     iIcon->SetId( aIconId );
     }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CCaInnerEntry::isLocalized(TLocalizedType aLocalized) const
+    {
+    if(aLocalized == EDescriptionLocalized)
+        {
+        return iDescriptionLocalized;
+        }
+    if(aLocalized == ENameLocalized)
+        {
+        return iTextLocalized;
+        }
+    else 
+        return EFalse;
+    }
+
+
--- a/contentstorage/eabi/cautilsu.def	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/eabi/cautilsu.def	Wed Jun 23 18:33:40 2010 +0300
@@ -5,7 +5,7 @@
 	_ZN13CCaInnerEntry13AddAttributeLERK7TDesC16S2_ @ 4 NONAME
 	_ZN13CCaInnerEntry13FindAttributeERK7TDesC16R6TDes16 @ 5 NONAME
 	_ZN13CCaInnerEntry13FindAttributeERK7TDesC16R7TPtrC16 @ 6 NONAME
-	_ZN13CCaInnerEntry15SetDescriptionLERK7TDesC16 @ 7 NONAME
+	_ZN13CCaInnerEntry15SetDescriptionLERK7TDesC16i @ 7 NONAME
 	_ZN13CCaInnerEntry16RemoveAttributeLERK7TDesC16 @ 8 NONAME
 	_ZN13CCaInnerEntry17SetEntryTypeNameLERK7TDesC16 @ 9 NONAME
 	_ZN13CCaInnerEntry4NewLEv @ 10 NONAME
@@ -14,7 +14,7 @@
 	_ZN13CCaInnerEntry6SetUidEl @ 13 NONAME
 	_ZN13CCaInnerEntry7SetRoleEj @ 14 NONAME
 	_ZN13CCaInnerEntry8SetFlagsEj @ 15 NONAME
-	_ZN13CCaInnerEntry8SetTextLERK7TDesC16 @ 16 NONAME
+	_ZN13CCaInnerEntry8SetTextLERK7TDesC16i @ 16 NONAME
 	_ZN13CCaInnerEntry9SetIconIdEi @ 17 NONAME
 	_ZN13CCaInnerQuery10SetFlagsOnEj @ 18 NONAME
 	_ZN13CCaInnerQuery11SetFlagsOffEj @ 19 NONAME
@@ -39,63 +39,64 @@
 	_ZN17RCaEntryAttrArray5ExistERK7TDesC16 @ 38 NONAME
 	_ZN20CCaLocalizationEntry12SetStringIdLERK7TDesC16 @ 39 NONAME
 	_ZN20CCaLocalizationEntry13SetTableNameLERK7TDesC16 @ 40 NONAME
-	_ZN20CCaLocalizationEntry17SetAttributeNameLERK7TDesC16 @ 41 NONAME
-	_ZN20CCaLocalizationEntry19SetLocalizedStringLERK7TDesC16 @ 42 NONAME
-	_ZN20CCaLocalizationEntry4NewLEv @ 43 NONAME
-	_ZN20CCaLocalizationEntry5NewLCEv @ 44 NONAME
-	_ZN20CCaLocalizationEntry8SetRowIdEj @ 45 NONAME
-	_ZN20CCaLocalizationEntry9SetTextIdEj @ 46 NONAME
-	_ZN22CCaInnerNotifierFilter11SetParentIdEi @ 47 NONAME
-	_ZN22CCaInnerNotifierFilter12InternalizeLER11RReadStream @ 48 NONAME
-	_ZN22CCaInnerNotifierFilter12SetEntryRoleE10TEntryRole @ 49 NONAME
-	_ZN22CCaInnerNotifierFilter12SetTypeNamesEP16CDesC16ArrayFlat @ 50 NONAME
-	_ZN22CCaInnerNotifierFilter4NewLENS_13TNotifierTypeE @ 51 NONAME
-	_ZN22CCaInnerNotifierFilter5NewLCENS_13TNotifierTypeE @ 52 NONAME
-	_ZN22CCaInnerNotifierFilter7SetIdsLERK6RArrayIiE @ 53 NONAME
-	_ZN23CCaInnerIconDescription10SetSkinIdLERK7TDesC16 @ 54 NONAME
-	_ZN23CCaInnerIconDescription12SetFileNameLERK7TDesC16 @ 55 NONAME
-	_ZN23CCaInnerIconDescription17SetApplicationIdLERK7TDesC16 @ 56 NONAME
-	_ZN23CCaInnerIconDescription4NewLEv @ 57 NONAME
-	_ZN23CCaInnerIconDescription5NewLCEv @ 58 NONAME
-	_ZN23CCaInnerIconDescription5SetIdEi @ 59 NONAME
-	_ZN9MenuUtils8GetTUintERK7TDesC16Rj @ 60 NONAME
-	_ZNK11RCaIdsArray12ExternalizeLER12RWriteStream @ 61 NONAME
-	_ZNK11RCaIdsArray13MarshalDataLCEv @ 62 NONAME
-	_ZNK13CCaInnerEntry12ExternalizeLER12RWriteStream @ 63 NONAME
-	_ZNK13CCaInnerEntry13GetAttributesEv @ 64 NONAME
-	_ZNK13CCaInnerEntry14GetDescriptionEv @ 65 NONAME
-	_ZNK13CCaInnerEntry16GetEntryTypeNameEv @ 66 NONAME
-	_ZNK13CCaInnerEntry4IconEv @ 67 NONAME
-	_ZNK13CCaInnerEntry5GetIdEv @ 68 NONAME
-	_ZNK13CCaInnerEntry6GetUidEv @ 69 NONAME
-	_ZNK13CCaInnerEntry7GetRoleEv @ 70 NONAME
-	_ZNK13CCaInnerEntry7GetTextEv @ 71 NONAME
-	_ZNK13CCaInnerEntry8GetFlagsEv @ 72 NONAME
-	_ZNK13CCaInnerEntry9GetIconIdEv @ 73 NONAME
-	_ZNK13CCaInnerQuery10GetFlagsOnEv @ 74 NONAME
-	_ZNK13CCaInnerQuery11GetFlagsOffEv @ 75 NONAME
-	_ZNK13CCaInnerQuery11GetParentIdEv @ 76 NONAME
-	_ZNK13CCaInnerQuery12ExternalizeLER12RWriteStream @ 77 NONAME
-	_ZNK13CCaInnerQuery13GetAttributesEv @ 78 NONAME
-	_ZNK13CCaInnerQuery17GetEntryTypeNamesEv @ 79 NONAME
-	_ZNK13CCaInnerQuery6GetIdsEv @ 80 NONAME
-	_ZNK13CCaInnerQuery6GetUidEv @ 81 NONAME
-	_ZNK13CCaInnerQuery7GetRoleEv @ 82 NONAME
-	_ZNK13CCaInnerQuery7GetSortEv @ 83 NONAME
-	_ZNK13CCaInnerQuery8GetCountEv @ 84 NONAME
-	_ZNK15RCaEntriesArray12ExternalizeLER12RWriteStream @ 85 NONAME
-	_ZNK20CCaLocalizationEntry11GetStringIdEv @ 86 NONAME
-	_ZNK20CCaLocalizationEntry12GetTableNameEv @ 87 NONAME
-	_ZNK20CCaLocalizationEntry16GetAttributeNameEv @ 88 NONAME
-	_ZNK20CCaLocalizationEntry18GetLocalizedStringEv @ 89 NONAME
-	_ZNK20CCaLocalizationEntry8GetRowIdEv @ 90 NONAME
-	_ZNK20CCaLocalizationEntry9GetTextIdEv @ 91 NONAME
-	_ZNK22CCaInnerNotifierFilter11GetParentIdEv @ 92 NONAME
-	_ZNK22CCaInnerNotifierFilter12ExternalizeLER12RWriteStream @ 93 NONAME
-	_ZNK22CCaInnerNotifierFilter12GetEntryRoleEv @ 94 NONAME
-	_ZNK22CCaInnerNotifierFilter12GetTypeNamesEv @ 95 NONAME
-	_ZNK22CCaInnerNotifierFilter15GetNotifierTypeEv @ 96 NONAME
-	_ZNK22CCaInnerNotifierFilter6GetIdsEv @ 97 NONAME
-	_ZN20CCaLocalizationEntry14SetQmFilenameLERK7TDesC16 @ 98 NONAME
-	_ZNK20CCaLocalizationEntry13GetQmFilenameEv @ 99 NONAME
+	_ZN20CCaLocalizationEntry14SetQmFilenameLERK7TDesC16 @ 41 NONAME
+	_ZN20CCaLocalizationEntry17SetAttributeNameLERK7TDesC16 @ 42 NONAME
+	_ZN20CCaLocalizationEntry19SetLocalizedStringLERK7TDesC16 @ 43 NONAME
+	_ZN20CCaLocalizationEntry4NewLEv @ 44 NONAME
+	_ZN20CCaLocalizationEntry5NewLCEv @ 45 NONAME
+	_ZN20CCaLocalizationEntry8SetRowIdEj @ 46 NONAME
+	_ZN20CCaLocalizationEntry9SetTextIdEj @ 47 NONAME
+	_ZN22CCaInnerNotifierFilter11SetParentIdEi @ 48 NONAME
+	_ZN22CCaInnerNotifierFilter12InternalizeLER11RReadStream @ 49 NONAME
+	_ZN22CCaInnerNotifierFilter12SetEntryRoleE10TEntryRole @ 50 NONAME
+	_ZN22CCaInnerNotifierFilter12SetTypeNamesEP16CDesC16ArrayFlat @ 51 NONAME
+	_ZN22CCaInnerNotifierFilter4NewLENS_13TNotifierTypeE @ 52 NONAME
+	_ZN22CCaInnerNotifierFilter5NewLCENS_13TNotifierTypeE @ 53 NONAME
+	_ZN22CCaInnerNotifierFilter7SetIdsLERK6RArrayIiE @ 54 NONAME
+	_ZN23CCaInnerIconDescription10SetSkinIdLERK7TDesC16 @ 55 NONAME
+	_ZN23CCaInnerIconDescription12SetFileNameLERK7TDesC16 @ 56 NONAME
+	_ZN23CCaInnerIconDescription17SetApplicationIdLERK7TDesC16 @ 57 NONAME
+	_ZN23CCaInnerIconDescription4NewLEv @ 58 NONAME
+	_ZN23CCaInnerIconDescription5NewLCEv @ 59 NONAME
+	_ZN23CCaInnerIconDescription5SetIdEi @ 60 NONAME
+	_ZN9MenuUtils8GetTUintERK7TDesC16Rj @ 61 NONAME
+	_ZNK11RCaIdsArray12ExternalizeLER12RWriteStream @ 62 NONAME
+	_ZNK11RCaIdsArray13MarshalDataLCEv @ 63 NONAME
+	_ZNK13CCaInnerEntry11isLocalizedENS_14TLocalizedTypeE @ 64 NONAME
+	_ZNK13CCaInnerEntry12ExternalizeLER12RWriteStream @ 65 NONAME
+	_ZNK13CCaInnerEntry13GetAttributesEv @ 66 NONAME
+	_ZNK13CCaInnerEntry14GetDescriptionEv @ 67 NONAME
+	_ZNK13CCaInnerEntry16GetEntryTypeNameEv @ 68 NONAME
+	_ZNK13CCaInnerEntry4IconEv @ 69 NONAME
+	_ZNK13CCaInnerEntry5GetIdEv @ 70 NONAME
+	_ZNK13CCaInnerEntry6GetUidEv @ 71 NONAME
+	_ZNK13CCaInnerEntry7GetRoleEv @ 72 NONAME
+	_ZNK13CCaInnerEntry7GetTextEv @ 73 NONAME
+	_ZNK13CCaInnerEntry8GetFlagsEv @ 74 NONAME
+	_ZNK13CCaInnerEntry9GetIconIdEv @ 75 NONAME
+	_ZNK13CCaInnerQuery10GetFlagsOnEv @ 76 NONAME
+	_ZNK13CCaInnerQuery11GetFlagsOffEv @ 77 NONAME
+	_ZNK13CCaInnerQuery11GetParentIdEv @ 78 NONAME
+	_ZNK13CCaInnerQuery12ExternalizeLER12RWriteStream @ 79 NONAME
+	_ZNK13CCaInnerQuery13GetAttributesEv @ 80 NONAME
+	_ZNK13CCaInnerQuery17GetEntryTypeNamesEv @ 81 NONAME
+	_ZNK13CCaInnerQuery6GetIdsEv @ 82 NONAME
+	_ZNK13CCaInnerQuery6GetUidEv @ 83 NONAME
+	_ZNK13CCaInnerQuery7GetRoleEv @ 84 NONAME
+	_ZNK13CCaInnerQuery7GetSortEv @ 85 NONAME
+	_ZNK13CCaInnerQuery8GetCountEv @ 86 NONAME
+	_ZNK15RCaEntriesArray12ExternalizeLER12RWriteStream @ 87 NONAME
+	_ZNK20CCaLocalizationEntry11GetStringIdEv @ 88 NONAME
+	_ZNK20CCaLocalizationEntry12GetTableNameEv @ 89 NONAME
+	_ZNK20CCaLocalizationEntry13GetQmFilenameEv @ 90 NONAME
+	_ZNK20CCaLocalizationEntry16GetAttributeNameEv @ 91 NONAME
+	_ZNK20CCaLocalizationEntry18GetLocalizedStringEv @ 92 NONAME
+	_ZNK20CCaLocalizationEntry8GetRowIdEv @ 93 NONAME
+	_ZNK20CCaLocalizationEntry9GetTextIdEv @ 94 NONAME
+	_ZNK22CCaInnerNotifierFilter11GetParentIdEv @ 95 NONAME
+	_ZNK22CCaInnerNotifierFilter12ExternalizeLER12RWriteStream @ 96 NONAME
+	_ZNK22CCaInnerNotifierFilter12GetEntryRoleEv @ 97 NONAME
+	_ZNK22CCaInnerNotifierFilter12GetTypeNamesEv @ 98 NONAME
+	_ZNK22CCaInnerNotifierFilter15GetNotifierTypeEv @ 99 NONAME
+	_ZNK22CCaInnerNotifierFilter6GetIdsEv @ 100 NONAME
 
--- a/contentstorage/extsrc/casathandler.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/extsrc/casathandler.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -145,6 +145,9 @@
     iSatIcon.OpenL( iSatSession );
     }
 
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC SKIP
+#endif //COVERAGE_MEASUREMENT (Icon can be created only from SIM)
 // ---------------------------------------------------------------------------
 // CCaSatHandler::GetVisibility
 // ---------------------------------------------------------------------------
@@ -192,5 +195,8 @@
         return NULL;
         }
     }
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC ENDSKIP
+#endif //COVERAGE_MEASUREMENT
 
 //  End of File
--- a/contentstorage/group/camenu.mmp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/group/camenu.mmp	Wed Jun 23 18:33:40 2010 +0300
@@ -12,7 +12,7 @@
 * Contributors:
 *
 * Description:
-*  Version     : %version: 19.1.6 % << Don't touch! Updated by Synergy at check-out.
+*  Version     : %version: 19.1.8 % << Don't touch! Updated by Synergy at check-out.
 *
 */
 
@@ -39,6 +39,7 @@
 SOURCE          casrvengutils.cpp
 SOURCE			casrvnotifier.cpp
 SOURCE          castorageproxy.cpp
+SOURCE          caprogressnotifier.cpp
 
 
 USERINCLUDE     ../srvinc
@@ -64,4 +65,12 @@
 LIBRARY         bafl.lib
 LIBRARY         casrvmanager.lib
 
+LIBRARY         sifnotification.lib
+LIBRARY         sif.lib
+LIBRARY         scrclient.lib
 
+// HB LIBRARIES
+SYSTEMINCLUDE		/epoc32/include/mw/hb/hbcore
+LIBRARY		HbCore.lib
+
+
--- a/contentstorage/inc/cadef.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/inc/cadef.h	Wed Jun 23 18:33:40 2010 +0300
@@ -12,7 +12,7 @@
  * Contributors:
  *
  * Description:  Definition of different constants
- *  Version     : %version: ou1s60ui#10.1.19 % << Don't touch! Updated by Synergy at check-out.
+ *  Version     : %version: 10.1.25 % << Don't touch! Updated by Synergy at check-out.
  *
  */
 
@@ -49,7 +49,7 @@
 enum TEntryFlag
     {
     EUsed = 1,
-    ESystem = 2,
+    EUninstall = 2,
     ERemovable = 4,
     EVisible = 8,
     ERunning = 16,
@@ -61,7 +61,8 @@
     {
     EItemAppearanceNotChanged,
     EItemDisappeared,
-    EItemAppeared
+    EItemAppeared,
+    EItemUninstallProgressChanged
     };
 
 // Ca - Application
@@ -86,9 +87,8 @@
 _LIT( KCaAttrAppTypeValueNative, "native");
 _LIT( KCaAttrComponentId, "component_id" );
 _LIT( KCaAttrAppSettingsPlugin, "app_settings_plugin");
-// app settings plugin for java apps
-_LIT( KCaAttrJavaAppSettingsPluginValue,
-        "/resource/qt/plugins/appsettings/javaapplicationsettingsview.qtplugin");
+_LIT( KCaScrPropertyAppSettings, "settingsName");
+_LIT( KPreviewImageAttrName, "preview_image_name" );
 _LIT( KCaAttrAppWidgetUri, "widget:uri");
 _LIT( KCaAttrAppWidgetServiceXml, "widget:servicexml");
 
@@ -98,12 +98,19 @@
 _LIT( KCaScrPropertyIsMiniviewSupported, "isMiniviewSupported");
 
 _LIT( KCaAppGroupName, "appgroup_name" );
+_LIT( KCaAppUninstallProgress, "uninstall_progress" );
 
 _LIT( KCollectionIconFileName, "qtg_large_applications_user");
 
+
 _LIT(KLocalizationFilepathZ, "z:/resource/qt/translations");
 _LIT(KLocalizationFilepathC, "c:/resource/qt/translations");
 _LIT(KLocalizationFilepath, ":/resource/qt/translations");
+_LIT( KLocalizationCaEntry, "CA_ENTRY" );
+_LIT( KLocalizationEnText, "EN_TEXT" );
+_LIT( KLocalizationEnDescription, "EN_DESCRIPTION" );
+const TInt charsToFilename= 6;  // <loc://> loc://email/qtn_gmail_mail_account
+
 
 const TInt KGranularityOne = 1;
 const TInt KUidChars = 10;
@@ -153,8 +160,8 @@
 // Note, however, that none of these is guaranteed to be set, or be used by a menu UI.
 // Menu clients always need to check that the necessary attributes are present.
 //
-_LIT( KCaAttrLongName, "long_name" ); ///< Long name.
-_LIT( KCaComponentId, "component_id" ); ///< Long name.
+_LIT( KCaAttrShortName, "short_name" ); ///< Short name.
+_LIT( KCaComponentId, "component_id" ); ///< Component Id.
 
 // Built-in types and attributes.
 //
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentstorage/inc/castorage_global.h	Wed Jun 23 18:33:40 2010 +0300
@@ -0,0 +1,33 @@
+/*
+ * 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:
+ *
+ */
+
+#ifndef CA_STORAGE_GLOBAL_H
+#define CA_STORAGE_GLOBAL_H
+
+#ifndef CONTENT_ARSENAL_STORAGE_UT
+#define CA_STORAGE_TEST_CLASS(aClassName)
+#else
+#define CA_STORAGE_TEST_CLASS(aClassName) class aClassName;
+#endif
+
+#ifndef CONTENT_ARSENAL_STORAGE_UT
+#define CA_STORAGE_TEST_FRIEND_CLASS(aClassName)
+#else
+#define CA_STORAGE_TEST_FRIEND_CLASS(aClassName) friend class aClassName;
+#endif
+
+#endif // CA_STORAGE_GLOBAL_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentstorage/srvinc/caprogressnotifier.h	Wed Jun 23 18:33:40 2010 +0300
@@ -0,0 +1,220 @@
+/*
+ * 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:  ?Description
+ *
+ */
+
+#ifndef CAPROGRESSNOTIFIER_H
+#define CAPROGRESSNOTIFIER_H
+
+#include <e32base.h>
+#include <usif/sif/sifnotification.h>
+#include "castorage_global.h"
+using namespace Usif; 
+
+class CCaStorageProxy;
+
+// needed for fake notifier
+#include "cainstallnotifier.h"
+
+/**
+ * Interface for updating after installer events.
+ */
+class MCaFakeProgressListener
+    {
+public:
+    /**
+     * Pure virtual method.
+     * @param aEvent event type.
+     */
+    virtual void HandleFakeProgressNotifyL(TInt aCurrentProgress) = 0;
+    };
+
+/**
+ *  Fake Install notifier.
+ *
+ *  @since S60 v5.0
+ */
+NONSHARABLE_CLASS( CCaFakeProgressNotifier ) : public CActive
+    {
+public:
+
+/**
+     * Creates an instance of CCaFakeProgressNotifier.
+     * @param aListener Reference to notifier interface.
+     */
+IMPORT_C static CCaFakeProgressNotifier* NewL( MCaFakeProgressListener& aListener);
+
+    /**
+     * Destructor.
+     */
+    virtual ~CCaFakeProgressNotifier();
+
+    /**
+     * Starts fake progress notifications.
+     */
+    void StartNotifying();
+    
+private:
+
+    /**
+     * Constructor.
+     * @param aListener Reference to notifier interface.
+     */
+    CCaFakeProgressNotifier( MCaFakeProgressListener& aListener );
+
+    /**
+     * Symbian 2nd phase constructor.
+    */
+    void ConstructL( );
+
+    /**
+     * From CActive.
+     */ 
+    void DoCancel();
+
+    /**
+     * From CActive.
+     */ 
+    void RunL();
+
+    /**
+     * From CActive.
+     */ 
+    TInt RunError( TInt aError );
+
+private:
+
+    /**
+     * Interface for fake notifications
+     * Not Own.
+     */
+    MCaFakeProgressListener& iListener;
+    
+    /**
+     * Timer
+     */
+    RTimer iTimer;
+    
+    /**
+     * Counter for fake notifications
+     */
+    TInt iCount;
+
+    };
+
+
+/**
+ *  Uninstall Progress notifier.
+ *
+ *  @since S60 v5.0
+ */
+NONSHARABLE_CLASS( CCaProgressNotifier ) : public CBase, 
+        //public MSifOperationsHandler, // USIF not working yet
+        public MCaInstallListener,      //needed for fake
+        public MCaFakeProgressListener  //needed for fake
+    {
+
+public:
+    /**
+     * Creates an instance of CCaProgressNotifier.
+     * @param aCaStorageProxy Reference to storage.
+     */
+IMPORT_C static CCaProgressNotifier* NewL( CCaStorageProxy& aCaStorageProxy);
+
+    /**
+     * Destructor.
+     */
+    virtual ~CCaProgressNotifier();
+
+private:
+
+    /**
+     * Constructor.
+     */
+    CCaProgressNotifier( );
+
+    /**
+     * Symbian 2nd phase constructor.
+     * @param aCaStorageProxy Reference to storage.
+     */
+    void ConstructL( CCaStorageProxy& aCaStorageProxy );
+
+public:
+    /**
+     * From MSifOperationsHandler
+     */
+    void StartOperationHandler(TUint aKey, const CSifOperationStartData& aStartData);
+
+    /**
+     * From MSifOperationsHandler
+     */
+    void EndOperationHandler(const CSifOperationEndData& aEndData);
+
+    /**
+     * From MSifOperationsHandler
+     */
+    void ProgressOperationHandler(const CSifOperationProgressData& aProgressData);
+    
+public:
+
+    /**
+     * From MCaInstallListener, needed for fake
+     */
+    void HandleInstallNotifyL( TInt aUid );
+     
+    /**
+     * From MCaFakeProgressListener, needed for fake
+     */
+    void HandleFakeProgressNotifyL(TInt aCurrentProgress);
+    
+private:
+
+    /**
+     * USIF notifier
+     * Own.
+     * 
+     * Commented out since USIF notifications do not
+     * work on MCL wk20
+     */
+    //CSifOperationsNotifier* iNotifier;
+    
+    /**
+     * Not Own.
+     * Reference to the Storage Proxy.
+     */
+    CCaStorageProxy* iStorageProxy;
+
+    /**
+     * Uninstall notifier. Own. Needed for fake
+     */
+    CCaInstallNotifier *iUsifUninstallNotifier;
+
+    /**
+     * Install and uninstall notifier. Own. Needed for fake
+     */
+    CCaInstallNotifier *iJavaInstallNotifier;
+    
+    /**
+     * Fake uninstall progress notifier. Own. Needed for fake
+     */
+    CCaFakeProgressNotifier *iFakeProgressNotifier;
+    
+    };
+
+
+#endif /* CAPROGRESSNOTIFIER_H */
+
+// End of File
+
--- a/contentstorage/srvinc/casrv.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/srvinc/casrv.h	Wed Jun 23 18:33:40 2010 +0300
@@ -25,6 +25,7 @@
 class CCaSrvEngUtils;
 class CCaSrvManager;
 class CCaStorageProxy;
+class CCaProgressNotifier;
 
 // GLOBAL FUNCTIONS
 /**
@@ -119,6 +120,11 @@
      */
     CCaSrvManager* iSrvManager;
 
+    /*
+     * Uninstall progress notifier
+     */
+    CCaProgressNotifier* iProgressNotifier;
+
     };
 
 #endif // CASRV_H
--- a/contentstorage/srvinc/castorageproxy.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/srvinc/castorageproxy.h	Wed Jun 23 18:33:40 2010 +0300
@@ -19,9 +19,11 @@
 #define CASTORAGEPROXY_H
 
 #include "cadef.h"
+#include "castorage_global.h"
 #include "caoperationparams.h"
 
 
+
 // FORWARD DECLARATIONS
 class CCaStorage;
 class CCaInnerQuery;
@@ -29,6 +31,8 @@
 class CCaLocalizationEntry;
 class MCaSessionNorifier;
 
+CA_STORAGE_TEST_CLASS( TestCaClient )
+
 /**
  * Interface for CA database implementations.
  *
@@ -180,6 +184,12 @@
      * C++ default constructor.
      */
     CCaStorageProxy();
+    
+    CCaLocalizationEntry* LocalizeTextL( CCaInnerEntry* aEntry );
+    
+    CCaLocalizationEntry* LocalizeDescriptionL( CCaInnerEntry* aEntry );
+    
+    TBool InitializeTranslatorL( TDesC& aQmFilename );
 
 private:
     //Data
@@ -193,6 +203,9 @@
      * Sessions using this engine. Own.
      */
     RPointerArray<MCaSessionNorifier> iHandlerNotifier;
+    
+    CA_STORAGE_TEST_FRIEND_CLASS( TestCaClient )
+    
     };
 
 #endif //CASTORAGEPROXY_H
--- a/contentstorage/srvsrc/cainstallstrategy.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/srvsrc/cainstallstrategy.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -146,9 +146,10 @@
     User::LeaveIfError( aProperty.Get( KUidSystemCategory,
             Swi::KUidSoftwareInstallKey, status ) );
     //if( status == ( Swi::ESwisStatusSuccess | Swi::ESwisUninstall ) )
-    if( iUninstallStatus == Swi::ESwisUninstall && !status )
+    // notify subscribers on begenning and at the end of uninstallation
+    if( status == Swi::ESwisUninstall || iUninstallStatus == Swi::ESwisUninstall /*&& !status*/ )
         {
-        aListener.HandleInstallNotifyL( iUninstallStatus );
+        aListener.HandleInstallNotifyL( status );
         }    
     iUninstallStatus = status;
     }
--- a/contentstorage/srvsrc/cammcwatcher.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/srvsrc/cammcwatcher.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -107,6 +107,9 @@
     iFs.NotifyChangeCancel();
     }
 
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC SKIP
+#endif //COVERAGE_MEASUREMENT (error is ignored)
 // ---------------------------------------------------------------------------
 // CCaWidgetMmcWatcher::RunError
 // ---------------------------------------------------------------------------
@@ -116,7 +119,13 @@
     // No need to do anything
     return KErrNone;
     }
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC ENDSKIP
+#endif //COVERAGE_MEASUREMENT
 
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC SKIP
+#endif //COVERAGE_MEASUREMENT (memory card removal)
 // ---------------------------------------------------------
 // CCaWidgetMmcWatcher::RunL
 // ---------------------------------------------------------
@@ -130,4 +139,6 @@
         iObserver->MmcChangeL();
         }
     }
-
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC ENDSKIP
+#endif //COVERAGE_MEASUREMENT
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentstorage/srvsrc/caprogressnotifier.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -0,0 +1,290 @@
+/*
+ * 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:  ?Description
+ *
+ */
+
+#include "s32mem.h"
+
+#include <usif/usifcommon.h> 
+#include <usif/scr/scr.h>
+#include <usif/scr/screntries.h>
+
+#include "caprogressnotifier.h"
+#include "castorageproxy.h"
+#include "cainnerquery.h"
+#include "cainnerentry.h"
+#include "caarraycleanup.inl"
+
+using namespace Usif;
+
+//fake constants
+const TInt KMaxProgressValue = 100;
+const TInt KDelayTimeBetweenNotifications(500000);
+
+
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC SKIP
+#endif //COVERAGE_MEASUREMENT (fake notifier timer)
+
+EXPORT_C CCaFakeProgressNotifier* CCaFakeProgressNotifier::NewL(
+        MCaFakeProgressListener& aListener )
+    {
+    CCaFakeProgressNotifier* self = new ( ELeave ) CCaFakeProgressNotifier( aListener );
+    CleanupStack::PushL( self );
+    self->ConstructL( );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+CCaFakeProgressNotifier::~CCaFakeProgressNotifier()
+    {
+    Cancel();
+    iTimer.Close();
+    }
+
+CCaFakeProgressNotifier::CCaFakeProgressNotifier( MCaFakeProgressListener& aListener ) :
+    CActive( EPriorityNormal ), iListener( aListener ), iCount( 0 ) 
+    {
+    CActiveScheduler::Add( this );
+    }
+
+void CCaFakeProgressNotifier::ConstructL(  )
+    {
+    User::LeaveIfError( iTimer.CreateLocal() );
+    }
+
+void CCaFakeProgressNotifier::StartNotifying()
+    {
+    iCount = 0;
+    Cancel();
+    iTimer.After( iStatus, TTimeIntervalMicroSeconds32( KDelayTimeBetweenNotifications ) );
+    SetActive();
+    }
+
+void CCaFakeProgressNotifier::DoCancel()
+    {    
+    iTimer.Cancel();
+    }
+
+void CCaFakeProgressNotifier::RunL()
+    {
+    User::LeaveIfError( iStatus.Int() );
+    
+    if ( iCount <= KMaxProgressValue )
+        {
+        if( iCount > 20 )
+            {            
+            iListener.HandleFakeProgressNotifyL(iCount); 
+            }     
+        iTimer.After( iStatus, TTimeIntervalMicroSeconds32( KDelayTimeBetweenNotifications ) );
+        SetActive();
+        iCount += 20;
+        }
+    }
+
+TInt CCaFakeProgressNotifier::RunError( TInt /*aError*/)
+    {
+    // No need to do anything
+    return KErrNone;
+    }
+
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC ENDSKIP
+#endif //COVERAGE_MEASUREMENT  (fake notifier)
+
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CCaProgressNotifier* CCaProgressNotifier::NewL(
+        CCaStorageProxy& aCaStorageProxy )
+    {
+    CCaProgressNotifier* self = new ( ELeave ) CCaProgressNotifier(  );
+    CleanupStack::PushL( self );
+    self->ConstructL( aCaStorageProxy );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+CCaProgressNotifier::~CCaProgressNotifier()
+    {
+    // TODO: Commented out since USIF notifications do not 
+    // work on MCL wk20
+    /*
+    iNotifier->CancelSubscribeL();
+    delete iNotifier;
+    */
+    
+    // needed for fake:
+    delete iUsifUninstallNotifier;
+    delete iJavaInstallNotifier;
+    delete iFakeProgressNotifier;
+    }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+CCaProgressNotifier::CCaProgressNotifier()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CCaProgressNotifier::ConstructL( CCaStorageProxy& aCaStorageProxy )
+    {
+    // TODO: Commented out since USIF notifications do not 
+    // work on MCL wk20
+    /*
+    iNotifier = CSifOperationsNotifier::NewL(*this);
+    */
+    
+    iStorageProxy = &aCaStorageProxy;
+    
+    iUsifUninstallNotifier = CCaInstallNotifier::NewL( *this,
+            CCaInstallNotifier::EUsifUninstallNotification );
+
+    iJavaInstallNotifier = CCaInstallNotifier::NewL( *this,
+                CCaInstallNotifier::EJavaInstallNotification );
+
+    iFakeProgressNotifier = CCaFakeProgressNotifier::NewL(*this);    
+    }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CCaProgressNotifier::StartOperationHandler(TUint /*aKey*/, const CSifOperationStartData& /*aStartData*/)
+    {
+    // TODO: Commented out since USIF notifications do not 
+    // work on MCL wk20
+    /*
+    iNotifier->SubscribeL( aKey, ETrue );
+    */
+    }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CCaProgressNotifier::EndOperationHandler(const CSifOperationEndData& /*aEndData*/)
+    {
+    }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void CCaProgressNotifier::ProgressOperationHandler(const CSifOperationProgressData& /*aProgressData*/)
+    {
+    
+    // TODO: Commented out since USIF notifications do not 
+    // work on MCL wk20
+    
+    /* 
+    // extract component ID
+    TBuf8<20> globalIdBuf;
+    globalIdBuf.Copy( aProgressData.GlobalComponentId() );
+    
+    RDesReadStream readStream( globalIdBuf );
+    CleanupClosePushL( readStream );
+    CGlobalComponentId *globalId = CGlobalComponentId::NewL( readStream );
+    CleanupStack::PushL(globalId);
+     
+    RSoftwareComponentRegistry iScrSession;
+    TComponentId componentId = iScrSession.GetComponentIdL( globalId->GlobalIdName(), 
+            globalId->SoftwareTypeName() );
+
+    CleanupStack::PopAndDestroy( globalId );
+    CleanupStack::PopAndDestroy( &readStream );
+
+    RBuf componentIdBuf;
+    componentIdBuf.CleanupClosePushL();
+    componentIdBuf.CreateL( sizeof(TComponentId) + 1 );
+    componentIdBuf.AppendNum( componentId );
+
+    // find entry by componentID
+    CCaInnerQuery *innerQuery = CCaInnerQuery::NewLC();
+    innerQuery->SetRole( CCaInnerQuery::Item );
+    innerQuery->AddAttributeL( KCaAttrComponentId,
+            componentIdBuf );
+
+    RPointerArray<CCaInnerEntry> resultArrayItems;
+    CleanupResetAndDestroyPushL( resultArrayItems );
+    iStorageProxy->GetEntriesL( innerQuery, resultArrayItems );
+   
+    RBuf totalProgressBuf;
+    totalProgressBuf.CleanupClosePushL();
+    totalProgressBuf.CreateL( sizeof(TComponentId) + 1 );
+    totalProgressBuf.AppendNum( aProgressData.CurrentProgess() );
+
+    if (resultArrayItems.Count() && aProgressData.Phase() == EUninstalling)
+        {
+        CCaInnerEntry* appEntry = resultArrayItems[0];
+        appEntry->AddAttributeL(KCaAppUninstallProgress, totalProgressBuf);
+
+        iStorageProxy->AddL(appEntry, ETrue, EItemUninstallProgressChanged );
+        }
+    CleanupStack::PopAndDestroy( &totalProgressBuf );
+    CleanupStack::PopAndDestroy( &resultArrayItems );
+    CleanupStack::PopAndDestroy( innerQuery );
+    CleanupStack::PopAndDestroy( &componentIdBuf );
+    */
+    }
+
+void CCaProgressNotifier::HandleInstallNotifyL( TInt /*aUid*/)
+    {
+    // start sending fake notifications
+    iFakeProgressNotifier->StartNotifying();
+    }
+
+void CCaProgressNotifier::HandleFakeProgressNotifyL(TInt aCurrentProgress)
+    {
+    //update storage with new info
+    
+    // find entry by componentID
+    CCaInnerQuery *innerQuery = CCaInnerQuery::NewLC();
+    innerQuery->SetRole( CCaInnerQuery::Item );
+    innerQuery->SetFlagsOn(EUninstall);
+    
+    RPointerArray<CCaInnerEntry> resultArrayItems;
+    CleanupResetAndDestroyPushL( resultArrayItems );
+    iStorageProxy->GetEntriesL( innerQuery, resultArrayItems );
+    
+    
+    RBuf totalProgressBuf;
+    totalProgressBuf.CleanupClosePushL();
+    totalProgressBuf.CreateL( sizeof( TInt ) + 1 );
+    totalProgressBuf.AppendNum( aCurrentProgress );
+    
+    for ( TInt i = 0; i<resultArrayItems.Count(); i++ )
+       {
+       CCaInnerEntry* appEntry = resultArrayItems[i];
+       appEntry->AddAttributeL(KCaAppUninstallProgress, totalProgressBuf);
+       iStorageProxy->AddL(appEntry, ETrue, EItemUninstallProgressChanged );
+       }
+    
+    CleanupStack::PopAndDestroy( &totalProgressBuf );
+    CleanupStack::PopAndDestroy( &resultArrayItems );
+    CleanupStack::PopAndDestroy( innerQuery );
+    }
--- a/contentstorage/srvsrc/casrv.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/srvsrc/casrv.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -24,6 +24,7 @@
 #include "casrvengutils.h"
 #include "castorageproxy.h"
 #include "casrvmanager.h"
+#include "caprogressnotifier.h"
 
 // ==================== LOCAL FUNCTIONS ====================
 
@@ -124,6 +125,7 @@
         }
     delete iSrvManager;
     delete iSrvEngUtils;
+    delete iProgressNotifier;
     delete iStorageProxy;
     }
 
@@ -154,7 +156,8 @@
     iSessionCount = 0;
     iStorageProxy = CCaStorageProxy::NewL();
     iSrvEngUtils = CCaSrvEngUtils::NewL();
-    iSrvManager = CCaSrvManager::NewL(*iStorageProxy, iSrvEngUtils);
+    iProgressNotifier = CCaProgressNotifier::NewL( *iStorageProxy );
+    iSrvManager = CCaSrvManager::NewL( *iStorageProxy, iSrvEngUtils );
     TInt errCode = iSrvManager->LoadOperationErrorCodeL();
     if( KSqlErrNotDb <= errCode && errCode <= KSqlErrGeneral )
         {
--- a/contentstorage/srvsrc/casrvnotifier.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/srvsrc/casrvnotifier.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -38,6 +38,9 @@
     delete iFilter;
     }
 
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC SKIP
+#endif //COVERAGE_MEASUREMENT (only NewLC used in code)
 // -----------------------------------------------------------------------------
 // 
 // -----------------------------------------------------------------------------
@@ -48,6 +51,9 @@
     CleanupStack::Pop();
     return self;
     }
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC ENDSKIP
+#endif //COVERAGE_MEASUREMENT
 
 // -----------------------------------------------------------------------------
 // 
--- a/contentstorage/srvsrc/castorageproxy.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/contentstorage/srvsrc/castorageproxy.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -15,6 +15,9 @@
  *
  */
 
+#include <driveinfo.h>
+#include <hbtextresolversymbian.h>
+
 #include "castorage.h"
 #include "castorageproxy.h"
 #include "castoragefactory.h"
@@ -107,14 +110,23 @@
     TChangeType changeType = EAddChangeType;
     RArray<TInt> parentArray;
     CleanupClosePushL( parentArray );
-
+          
     if( aEntry->GetId() > 0 )
         {
         changeType = EUpdateChangeType;
         RArray<TInt> id;
         CleanupClosePushL( id );
         id.AppendL( aEntry->GetId() );
-        iStorage->GetParentsIdsL( id, parentArray );
+        if (aItemAppearanceChange == EItemUninstallProgressChanged)
+            {
+            // no need to search for parent parents for uninstall 
+            // progress change
+            iStorage->GetParentsIdsL( id, parentArray, EFalse );
+            }
+        else
+            {
+            iStorage->GetParentsIdsL( id, parentArray );
+            }
         CleanupStack::PopAndDestroy( &id );
         }
 
@@ -126,8 +138,47 @@
         {
         changeType = EAddChangeType;
         }
-
-    iStorage->AddL( aEntry, aUpdate );
+    
+    // do not update entry in db with uninstall progress
+    if (aItemAppearanceChange != EItemUninstallProgressChanged)
+        {
+        RPointerArray<CCaLocalizationEntry> localizations;
+	    CleanupResetAndDestroyPushL( localizations );
+        CCaLocalizationEntry* tempLocalization = NULL;
+        if( aEntry->isLocalized( CCaInnerEntry::ENameLocalized ) )		
+            {
+            tempLocalization = LocalizeTextL( aEntry );
+            if( tempLocalization )
+                {
+                localizations.Append( tempLocalization );
+                tempLocalization = NULL;
+                }
+            }
+        if( aEntry->isLocalized( CCaInnerEntry::EDescriptionLocalized ) )
+            {
+            tempLocalization = LocalizeDescriptionL( aEntry );
+            if (tempLocalization)
+                {
+                localizations.Append(tempLocalization);
+                tempLocalization = NULL;
+                }
+            }
+        
+        iStorage->AddL( aEntry, aUpdate );
+        
+        for( TInt j =0; j < localizations.Count(); j++ )
+            {
+            localizations[j]->SetRowId( aEntry->GetId() );
+            AddLocalizationL( *( localizations[j] ) );
+            }
+		if( localizations.Count() > 0 )
+            {
+            HbTextResolverSymbian::Init( _L(""), KLocalizationFilepathZ );
+            }
+		 CleanupStack::PopAndDestroy( &localizations );
+        }
+    
+        
     for( TInt i = 0; i < iHandlerNotifier.Count(); i++ )
         {
         iHandlerNotifier[i]->EntryChanged( aEntry, changeType, parentArray );
@@ -317,6 +368,9 @@
     CleanupStack::PopAndDestroy( &parentArray );
     }
 
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC SKIP
+#endif //COVERAGE_MEASUREMENT (calls another method)
 // ---------------------------------------------------------------------------
 //
 // ---------------------------------------------------------------------------
@@ -325,6 +379,9 @@
     {
     iStorage->LoadDataBaseFromRomL();
     }
+#ifdef COVERAGE_MEASUREMENT
+#pragma CTC ENDSKIP
+#endif //COVERAGE_MEASUREMENT
 
 // ---------------------------------------------------------
 //
@@ -350,3 +407,147 @@
         iHandlerNotifier.Remove( i );
         }
     }
+
+// ---------------------------------------------------------
+//
+// ---------------------------------------------------------
+//
+CCaLocalizationEntry* CCaStorageProxy::LocalizeTextL( CCaInnerEntry* aEntry )
+    {
+	CCaLocalizationEntry* result = NULL;
+	TInt textLength = aEntry->GetText().Length();
+	if (textLength > 0)
+		{
+		TChar delimiter = '/'; // cannot add it as global
+		RBuf title;
+		CleanupClosePushL( title );
+		title.CreateL( aEntry->GetText() );
+		TInt pos = title.LocateReverse( delimiter );
+		if ( pos > 0 && pos + 1 < textLength )   // 1 is for delimiters
+			{
+			TPtrC16 logString = title.Mid( pos + 1 ); 
+			TInt qmFileNameLength = textLength - charsToFilename - 1 - logString.Length();
+			TPtrC16 qmFile = title.Mid( charsToFilename, qmFileNameLength );
+			if ( InitializeTranslatorL( qmFile ) )
+				{
+			    result = CCaLocalizationEntry::NewLC();			
+				HBufC* translatedString = HbTextResolverSymbian::LoadLC( logString );
+				if ( translatedString->Compare( logString ) )
+					{
+					result->SetStringIdL( logString );
+					aEntry->SetTextL( *translatedString );
+					if( translatedString )
+						{
+					    CleanupStack::PopAndDestroy( translatedString );
+						}
+					result->SetTableNameL( KLocalizationCaEntry );
+					result->SetAttributeNameL( KLocalizationEnText );
+					result->SetQmFilenameL( qmFile );
+					result->SetRowId( aEntry->GetId() ? 0 : aEntry->GetId() ); // must be added when present
+					}
+				else 
+					{
+				    if (translatedString)
+						{
+						CleanupStack::PopAndDestroy(translatedString);
+						}
+					}
+				CleanupStack::Pop( result );
+				}
+			}
+		CleanupStack::PopAndDestroy( &title );
+		}
+	return result;
+	}
+
+// ---------------------------------------------------------
+//
+// ---------------------------------------------------------
+//
+CCaLocalizationEntry* CCaStorageProxy::LocalizeDescriptionL( CCaInnerEntry* aEntry )
+    {
+	CCaLocalizationEntry* result = NULL;
+	TInt dscLength = aEntry->GetDescription().Length();
+	if ( dscLength )
+		{
+		TChar delimiter = '/'; // cannot add it as global
+		RBuf description;
+		CleanupClosePushL( description );
+		description.CreateL( aEntry->GetDescription() );
+		TInt pos = description.LocateReverse( delimiter );
+		if ( pos > 0 && pos + 1 < dscLength )   // 1 is for delimiters
+			{
+			TPtrC16 logString = description.Mid(pos + 1);
+			TInt qmFileNameLength = dscLength - charsToFilename - 1 - logString.Length();
+			TPtrC16 qmFile = description.Mid(charsToFilename, qmFileNameLength);
+			if ( InitializeTranslatorL( qmFile ) )
+				{
+			    result = CCaLocalizationEntry::NewLC();
+				HBufC* translatedString = HbTextResolverSymbian::LoadLC( logString );
+				if ( translatedString->Compare( logString ) )
+					{
+					result->SetStringIdL( logString );
+					aEntry->SetDescriptionL( *translatedString );
+					CleanupStack::PopAndDestroy( translatedString );
+					result->SetTableNameL( KLocalizationCaEntry );
+					result->SetAttributeNameL( KLocalizationEnDescription );
+					result->SetQmFilenameL( qmFile );
+					result->SetRowId( aEntry->GetId() ? 0 : aEntry->GetId() ); // must be added when present
+					}
+				else 
+					{
+				    CleanupStack::PopAndDestroy( translatedString );
+					}
+				CleanupStack::Pop( result );
+				}
+			}
+		CleanupStack::PopAndDestroy( &description );
+		}
+	return result;
+	}
+
+// ---------------------------------------------------------
+//
+// ---------------------------------------------------------
+//
+TBool CCaStorageProxy::InitializeTranslatorL( TDesC& aQmFilename )
+    {
+	TBool result = HbTextResolverSymbian::Init( aQmFilename, KLocalizationFilepathC );
+	if ( !result )
+		{
+		// this should not be called too often 
+		TChar currentDriveLetter;
+		TDriveList driveList;
+		RFs fs;
+		User::LeaveIfError( fs.Connect() );
+		User::LeaveIfError( fs.DriveList( driveList ) );
+
+		RBuf path;
+		CleanupClosePushL( path );
+		path.CreateL( KLocalizationFilepath().Length() + 1 );
+
+		for ( TInt driveNr = EDriveY; driveNr >= EDriveA; driveNr-- )
+			{
+			if ( driveList[driveNr] )
+				{
+				User::LeaveIfError(fs.DriveToChar( driveNr, currentDriveLetter ));
+				path.Append( currentDriveLetter );
+				path.Append( KLocalizationFilepath );
+				if (HbTextResolverSymbian::Init( aQmFilename, path ))
+					{
+				    result = ETrue;
+					break;
+					}
+				}
+			path.Zero();
+			}
+		CleanupStack::PopAndDestroy( &path );
+		fs.Close();
+		
+		if( !result )
+			{
+		    result = HbTextResolverSymbian::Init( aQmFilename, KLocalizationFilepathZ );
+			}
+		}
+	return result;
+	}
--- a/homescreensrv.pro	Fri Jun 11 13:58:37 2010 +0300
+++ b/homescreensrv.pro	Wed Jun 23 18:33:40 2010 +0300
@@ -16,8 +16,7 @@
 
 TEMPLATE = subdirs
 
-SUBDIRS  += appfoundation \
-            hswidgetmodel \
+SUBDIRS  += hswidgetmodel \
             contentstorage \
             homescreensrv_plat \
             tsrc
--- a/homescreensrv_plat/appruntimemodel_api/appruntimemodel_api.pri	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,21 +0,0 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-#
-
-PLATFORM_HEADERS += \
-                    appruntimemodel_api/hsiruntimeprovider.h \
-                    appruntimemodel_api/hsruntime.h \
-                    appruntimemodel_api/hsruntimefactory.h \
-                    appruntimemodel_api/hsruntimemodel_global.h
\ No newline at end of file
--- a/homescreensrv_plat/appruntimemodel_api/hsiruntimeprovider.h	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,93 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  HsRuntime provider interface.
-*
-*/
-
-
-#ifndef HSIRUNTIMEPROVIDER_H
-#define HSIRUNTIMEPROVIDER_H
-
-#include <QtPlugin>
-#include <QList>
-#include <QString>
-
-/*!
-    \class HsRuntimeToken
-    \ingroup group_hsruntimemodel
-    \brief Represents a home screen runtime that can be created. 
-
-    Home screen runtimes are located in runtime providers. Each provider
-    exposes its contained runtimes as runtime tokens. A token has all
-    the needed information for runtime selection and creation
-        
-*/
-class HsRuntimeToken
-{
-
-public:
-
-/*!
-    The name of the library/plugin that contains the runtime.
-*/
-    QString mLibrary;
-
-/*!
-    Uniquely identifies the runtime.
-*/
-    QString mUri;
-    
-};
-
-class HsRuntime;
-
-/*!
-    \class IHsRuntimeProvider
-    \ingroup group_hsruntimemodel
-    \brief Defines a mechanism for retrieving a home screen runtime.
-    Interface that defines a mechanism for retrieving a home screen
-    runtime. Each home screen runtime provider implements this interface. 
-        
-*/
-class IHsRuntimeProvider
-{
-
-public:
-
-/*!
-    Destructor.    
-*/
-    virtual ~IHsRuntimeProvider() {}
-
-public:
-
-/*!
-    Returns contained runtimes as a list of runtime tokens.    
-*/
-    virtual QList<HsRuntimeToken> runtimes() = 0;
-
-/*!
-    Creates and returns a runtime based on the given token.
-    
-    \a aToken Identifies the runtime to be created.
-
-    Returns The created runtime or null in failure cases.
-*/
-    virtual HsRuntime* createRuntime(const HsRuntimeToken& aToken) = 0;
-
-};
-
-Q_DECLARE_INTERFACE(IHsRuntimeProvider, "com.nokia.homescreen.iruntimeprovider/1.0")
-
-#endif
--- a/homescreensrv_plat/appruntimemodel_api/hsruntime.h	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Base class for all homescreen runtimes.
-*
-*/
-
-
-#ifndef HSRUNTIME_H
-#define HSRUNTIME_H
-
-#include <QObject>
-
-#include "hsruntimemodel_global.h"
-
-/*! 
-    \class HsRuntime
-    \ingroup group_hsruntimemodel
-    \brief Base class for all home screen runtimes.
-
-    Provides the common functionality for all home screen runtime
-    implementations.
-        
-*/
-class HSRUNTIMEMODEL_EXPORT HsRuntime : public QObject
-{
-    Q_OBJECT
-
-public:
-    HsRuntime(QObject* aParent = 0) : QObject(aParent) {}
-    virtual ~HsRuntime() {}
-
-
-signals:
-/*!
-    Emitted when the runtime has started.         
-*/
-    void started();
-
-/*!
-    Emitted when the runtime has stopped.         
-*/
-    void stopped();
-    
-/*!
-    Emitted when the runtime has faulted.         
-*/
-    void faulted();
-
-
-public slots:
-
-/*!
-    Starts the runtime.         
-*/
-    virtual void start() = 0;
-
-/*!
-    Stops the runtime.         
-*/
-    virtual void stop() = 0;
-
-
-
-private:
-
-    Q_DISABLE_COPY(HsRuntime)
-};
-
-#endif
--- a/homescreensrv_plat/appruntimemodel_api/hsruntimefactory.h	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  HsRuntime factory.
-*
-*/
-
-
-#ifndef HSRUNTIMEFACTORY_H
-#define HSRUNTIMEFACTORY_H
-
-#include <QObject>
-
-#include "hsruntimemodel_global.h"
-#include "hsiruntimeprovider.h"
-
-class HsRuntimeFactoryPrivate;
-
-class HSRUNTIMEMODEL_EXPORT HsRuntimeFactory : public QObject
-{
-    Q_OBJECT
-
-public:
-    HsRuntimeFactory(const QString& aPluginManifestDirectory,
-                 const QString& aPluginDirectory,
-                 QObject* aParent = 0);
-    virtual ~HsRuntimeFactory();
-
-    QList<HsRuntimeToken> runtimes();
-    HsRuntime* createRuntime(const HsRuntimeToken& aToken);
-
-private:
-    Q_DISABLE_COPY(HsRuntimeFactory)
-
-private:
-    HsRuntimeFactoryPrivate* mD;
-    friend class HsRuntimeFactoryPrivate;
-
-};
-
-#endif
--- a/homescreensrv_plat/appruntimemodel_api/hsruntimemodel_global.h	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-/*
-* 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:  The dll header file.
-*
-*/
-
-
-#ifndef HSRUNTIMEMODEL_GLOBAL_H
-#define HSRUNTIMEMODEL_GLOBAL_H
-
-#include <Qt/qglobal.h>
-
-
-#ifdef HSRUNTIMEMODEL_LIB
-	#define HSRUNTIMEMODEL_EXPORT Q_DECL_EXPORT
-#else
-    #ifdef HSRUNTIMEMODEL_TEST
-        #define HSRUNTIMEMODEL_EXPORT
-    #else
-        #define HSRUNTIMEMODEL_EXPORT Q_DECL_IMPORT
-    #endif	
-#endif
-
-
-#endif // HSRUNTIMEMODEL_GLOBAL_H
--- a/homescreensrv_plat/contentstorage_api/cadefs.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/homescreensrv_plat/contentstorage_api/cadefs.h	Wed Jun 23 18:33:40 2010 +0300
@@ -49,13 +49,20 @@
 enum EntryFlag
 {
     UsedEntryFlag = 1,
-    SystemEntryFlag = 2,
+    UninstallEntryFlag = 2,
     RemovableEntryFlag = 4,
     VisibleEntryFlag = 8,
     RunningEntryFlag = 16,
     NativeEntryFlag = 32,
     MissingEntryFlag = 64
 };
+
+enum LocalizationType
+{
+    NameLocalized,
+    DescriptionLocalized
+};
+
 Q_DECLARE_FLAGS(EntryFlags, EntryFlag)
 Q_DECLARE_OPERATORS_FOR_FLAGS(EntryFlags)
 Q_DECLARE_METATYPE(EntryFlags)
@@ -71,6 +78,7 @@
 };
 
 static const QString caCmdOpen("open");
+static const QString caCmdRemove("remove");
 
 #ifndef QT_NO_DEBUG_OUTPUT
 #   define USE_QDEBUG_IF(predicate) if (!predicate) {} else qDebug()
--- a/homescreensrv_plat/contentstorage_api/caentry.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/homescreensrv_plat/contentstorage_api/caentry.h	Wed Jun 23 18:33:40 2010 +0300
@@ -47,10 +47,10 @@
     int id() const;
 
     QString text() const;
-    void setText(const QString &text);
+    void setText(const QString &text, bool localized = false);
 
     QString description() const;
-    void setDescription(const QString &text);
+    void setDescription(const QString &text, bool localized = false);
     
     CaIconDescription iconDescription() const;
     void setIconDescription(const CaIconDescription &iconDescription);
@@ -76,6 +76,7 @@
 private:
 
     void setId(int id);
+    bool isLocalized(LocalizationType localized) const; 
 
 private:
     /*!
--- a/homescreensrv_plat/contentstorage_api/caitemmodel.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/homescreensrv_plat/contentstorage_api/caitemmodel.h	Wed Jun 23 18:33:40 2010 +0300
@@ -48,7 +48,8 @@
         TypeRole,
         FlagsRole,
         TextRole,//contains title represented as QString,
-        FullTextRole //'title description' convinient for operations such as search
+        FullTextRole, //'title description' convinient for operations such as search
+        UninstalRole  //contains progress status as decimal number in QString
     };
 
     // Function declarations
--- a/homescreensrv_plat/contentstorage_api/casoftwareregistry.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/homescreensrv_plat/contentstorage_api/casoftwareregistry.h	Wed Jun 23 18:33:40 2010 +0300
@@ -26,6 +26,7 @@
 #include "caclient_global.h"
 
 //FORWARD DECLARATIONS
+class QStringList;
 class CaSoftwareRegistryPrivate;
 
 /**
@@ -46,6 +47,13 @@
     
     typedef QHash<QString, QString> DetailMap;
     
+    bool getUninstallDetails(int componentId,
+        QString &componentName,
+        QStringList &applicationsUids,
+        QString &confirmationMessage);
+    
+    bool getApplicationsUids(int componentId, QStringList &applicationsUids);
+    
     DetailMap entryDetails(int componentId) const;
     
     static QString componentNameKey();
--- a/homescreensrv_plat/homescreen_information_api/inc/homescreendomainpskeys.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/homescreensrv_plat/homescreen_information_api/inc/homescreendomainpskeys.h	Wed Jun 23 18:33:40 2010 +0300
@@ -18,36 +18,42 @@
 #ifndef HOMESCREEN_DOMAIN_PS_KEYS_H
 #define HOMESCREEN_DOMAIN_PS_KEYS_H
 
-/**
- * P&S Key path for all Home Screen information keys provided by this API.
- */
+
+/*!
+    \file homescreendomainpskeys.h
+    \brief 
+*/
+
+/*!
+    P&S Key path for all Home Screen information keys provided by this API.
+*/
 const char HsStatePSKeyPath[] = "/homescreen";
 
-/**
- * P&S Key sub path to represent the state of the Home Screen. This property is updated when
- * Home screen state is changed. Valid values are defined by the enum EPSHsState.
- *
- * @see EPSHsState
- */
+/*!
+    P&S Key sub path to represent the state of the Home Screen. This property is updated when
+    Home screen state is changed. Valid values are defined by the enum EPSHsState.
+    
+    @see EPSHsState
+*/
 const char HsStatePSKeySubPath[] = "state";
 
 #ifdef Q_OS_SYMBIAN
-/**
- * Home Screen P&S category Uid for pure Symbian usage.
- */
+/*!
+    Home Screen P&S category Uid for pure Symbian usage.
+*/
 const TUid KHsCategoryUid = { 0x20022F35 };
 
-/**
- * P&S Key to represent the state of the Home Screen for pure Symbian usage.
- * This property is updated when Home screen state is changed. Valid values
- * are defined by the enum EPSHsState.
- */
+/*!
+    P&S Key to represent the state of the Home Screen for pure Symbian usage.
+    This property is updated when Home screen state is changed. Valid values
+    are defined by the enum EPSHsState.
+*/
 const TUint KHsCategoryStateKey = 0x1;
 #endif //Q_OS_SYMBIAN
 
-/**
- * Home screen state.
- */
+/*!
+    Home screen state.
+*/
 enum EPSHsState
      {
      /**
--- a/homescreensrv_plat/homescreensrv_plat.pro	Fri Jun 11 13:58:37 2010 +0300
+++ b/homescreensrv_plat/homescreensrv_plat.pro	Wed Jun 23 18:33:40 2010 +0300
@@ -17,15 +17,11 @@
 TEMPLATE = subdirs
 BLD_INF_RULES.prj_exports += "$${LITERAL_HASH}include <platform_paths.hrh>"
 
-include(appruntimemodel_api/appruntimemodel_api.pri)
 include(contentstorage_api/contentstorage_api.pri)
 include(hswidgetmodel_api/hswidgetmodel_api.pri)
-include(statemodel_api/statemodel_api.pri)
 include(menu_sat_interface_api/menu_sat_interface_api.pri)
 include(homescreen_information_api/homescreen_information_api.pri)
 
 for(filename,PLATFORM_HEADERS){
     BLD_INF_RULES.prj_exports *= "$$filename MW_LAYER_PLATFORM_EXPORT_PATH($$basename(filename))"
   }
-
-
--- a/homescreensrv_plat/hswidgetmodel_api/hsipreferencestore.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/homescreensrv_plat/hswidgetmodel_api/hsipreferencestore.h	Wed Jun 23 18:33:40 2010 +0300
@@ -18,11 +18,10 @@
 #ifndef HSIPREFERENCESTORE_H
 #define HSIPREFERENCESTORE_H
 
-
 class QString;
 
-/*!
-    \ingroup group_hscontentmodel group_widget_api_candidates
+
+/*DEPRECATED
     \class IHsPreferenceStore
     \brief Interface class for preference store.
 
@@ -74,7 +73,4 @@
 
 };
 
-
-
-
 #endif
--- a/homescreensrv_plat/hswidgetmodel_api/hsiwidgetprovider.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/homescreensrv_plat/hswidgetmodel_api/hsiwidgetprovider.h	Wed Jun 23 18:33:40 2010 +0300
@@ -25,15 +25,15 @@
 #include <QVariant>
 #include <QMetaType>
 
-/*!
+
+/*DEPRECATED
     \class HsWidgetToken
-    \ingroup group_hswidgetmodel group_widget_api_candidates
+    \ingroup group_hswidgetmodel_api
     \brief Represents a home screen widget that can be created. 
 
     Home screen widgets are located in widget providers. Each provider
     exposes its contained widgets as widget tokens. A token has all
     the needed information for widget selection and creation.
-
 */
 class HsWidgetToken
 {
@@ -82,7 +82,7 @@
 
 class HsWidget;
 
-/*!
+/*DEPRECATED
     \class IHsWidgetProvider
     \ingroup group_hswidgetmodel group_widget_api_candidates
     \brief Defines a mechanism for retrieving a home screen widget.
@@ -114,10 +114,7 @@
 
 };
 
-
-
 Q_DECLARE_METATYPE(HsWidgetToken)
 Q_DECLARE_INTERFACE(IHsWidgetProvider, "com.nokia.homescreen.iwidgetprovider/1.0")
 
-
 #endif
--- a/homescreensrv_plat/hswidgetmodel_api/ihswidgetpreferenceservice.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/homescreensrv_plat/hswidgetmodel_api/ihswidgetpreferenceservice.h	Wed Jun 23 18:33:40 2010 +0300
@@ -22,7 +22,7 @@
 class QString;
 class HsWidget;
 
-/**
+/*DEPRECATED
  * @ingroup group_hswidgetmodel group_widget_api_candidates
  * @brief Preference store for widget.
  *
--- a/homescreensrv_plat/statemodel_api/hsistateprovider.h	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,89 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  State provider interface.
-*
-*/
-
-
-#ifndef HSISTATEPROVIDER_H
-#define HSISTATEPROVIDER_H
-
-#include <QtPlugin>
-#include <QList>
-#include <QString>
-
-class QState;
-
-/*!
-    \class HsStateToken
-    \ingroup group_hsstatemodel
-    \brief Represents a home screen state that can be created.
-    Home screen states are located in state providers. Each provider
-    exposes its contained states as state tokens. A token has all
-    the needed information for state selection and creation.
-*/
-class HsStateToken
-{
-
-public:
-
-/*!
-    The name of the library/plugin that contains the state.
- */
-QString mLibrary;
-
-/*!
-    Uniquely identifies the state.
-*/
-    QString mUri;
-
-};
-
-/*!
-    \class IHsStateProvider
-    \ingroup group_hsstatemodel
-    \brief Defines a mechanism for retrieving a home screen state.
-    Interface that defines a mechanism for retrieving a home screen
-    state. Each home screen state provider implements this interface.
-*/
-class IHsStateProvider
-{
-
-public:
-
-/*!
-    Destructor.    
-*/
-    virtual ~IHsStateProvider() {}
-
-public:
-
-/*!
-    Returns contained states as a list of state tokens.    
-*/
-    virtual QList<HsStateToken> states() = 0;
-
-/*!
-    Creates and returns a state based on the given token.
-    \a aToken Identifies the state to be created.
-
-    Returns The created state or null in failure cases.
-*/
-    virtual QState* createState(const HsStateToken& aToken) = 0;
-
-};
-
-Q_DECLARE_INTERFACE(IHsStateProvider, "com.nokia.homescreen.istateprovider/1.0")
-
-#endif
--- a/homescreensrv_plat/statemodel_api/hsstatefactory.h	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,54 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  State factory.
-*
-*/
-
-
-#ifndef HSSTATEFACTORY_H
-#define HSSTATEFACTORY_H
-
-#include <QObject>
-
-#include "hsstatemodel_global.h"
-#include "hsistateprovider.h"
-
-class QState;
-class HsStateFactoryPrivate;
-
-class HSSTATEMODEL_EXPORT HsStateFactory : public QObject
-{
-    Q_OBJECT
-
-public:
-    HsStateFactory(const QString& aPluginManifestDirectory,
-                 const QString& aPluginDirectory,
-                 QObject* aParent = 0);
-
-    virtual ~HsStateFactory();
-
-    QList<HsStateToken> states();
-    QState* createState(const HsStateToken& aToken);
-
-private:
-
-    Q_DISABLE_COPY(HsStateFactory)
-
-private:
-    HsStateFactoryPrivate* mD;
-    friend class HsStateFactoryPrivate;
-
-};
-
-#endif
--- a/homescreensrv_plat/statemodel_api/hsstatemodel_global.h	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-/*
-* 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:  The dll header file.
-*
-*/
-
-
-#ifndef HSSTATEMODEL_GLOBAL_H
-#define HSSTATEMODEL_GLOBAL_H
-
-#include <Qt/qglobal.h>
-
-
-#ifdef HSSTATEMODEL_LIB
-	#define HSSTATEMODEL_EXPORT Q_DECL_EXPORT
-#else
-    #ifdef HSSTATEMODEL_TEST
-        #define HSSTATEMODEL_EXPORT
-    #else
-        #define HSSTATEMODEL_EXPORT Q_DECL_IMPORT
-    #endif	
-#endif
-
-
-#endif // HSSTATEMODEL_GLOBAL_H
--- a/homescreensrv_plat/statemodel_api/statemodel_api.pri	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-#
-
-PLATFORM_HEADERS += \
-                    statemodel_api/hsistateprovider.h \
-                    statemodel_api/hsstatefactory.h \
-                    statemodel_api/hsstatemodel_global.h
\ No newline at end of file
--- a/hswidgetmodel/src/hswidget.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/hswidgetmodel/src/hswidget.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -20,7 +20,7 @@
 #include "hswidget_p.h"
 #include "ihswidgetpreferenceservice.h"
 
-/*!
+/*DEPRECATED
     \ingroup group_hswidgetmodel group_widget_api_candidates
     \class HsWidget
     \brief Base class for all home screen widgets.
--- a/hswidgetmodel/src/hswidgetfactory.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/hswidgetmodel/src/hswidgetfactory.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -28,7 +28,7 @@
 
 
 
-/*!
+/*DEPRECATED
     \class HsPluginUnloader
     \ingroup group_hswidgetmodel
     \brief Unloads plugin and deletes plugin loader.
@@ -63,7 +63,7 @@
     }
 }
 
-/*!
+/*DEPRECATED
     \class HsWidgetFactory 
     \ingroup group_hswidgetmodel
     \brief Finds and creates home screen widgets.
--- a/hswidgetmodel/src/hswidgetprovidermanifest.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/hswidgetmodel/src/hswidgetprovidermanifest.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -23,7 +23,7 @@
 #include "hstest_global.h"
 
 
-/**
+/*DEPRECATED
     \class HsWidgetProviderManifest
     \ingroup group_hswidgetmodel
     \brief Loads home screen widget tokens from an XML manifest file.
--- a/rom/homescreensrv_core.iby	Fri Jun 11 13:58:37 2010 +0300
+++ b/rom/homescreensrv_core.iby	Wed Jun 23 18:33:40 2010 +0300
@@ -52,14 +52,6 @@
 
 data=ZPRIVATE\20022F90\castorage.db          private\20022F90\castorage.db
 
-// ---- appfoundation --------------------------------------------
-
-// -------- statemodel
-file=ABI_DIR\BUILD_DIR\statemodel.dll       SHARED_LIB_DIR\statemodel.dll
-
-// -------- appruntimemodel
-file=ABI_DIR\BUILD_DIR\appruntimemodel.dll  SHARED_LIB_DIR\appruntimemodel.dll
-
 // ----  hswidgetmodel --------------------------------------------
 file=ABI_DIR\BUILD_DIR\hswidgetmodel.dll    SHARED_LIB_DIR\hswidgetmodel.dll
 
--- a/sis/homescreensrv.pkg	Fri Jun 11 13:58:37 2010 +0300
+++ b/sis/homescreensrv.pkg	Wed Jun 23 18:33:40 2010 +0300
@@ -143,14 +143,6 @@
 "/epoc32/data/z/private/20022F90/castorage.db" - "c:/private/20022F90/castorage.db"
 "/epoc32/data/z/resource/plugins/castockhandlerplugins.rsc"-"c:/resource/plugins/castockhandlerplugins.rsc"
 
-; ---- appfoundation --------------------------------------------
-
-; -------- statemodel
-"/epoc32/release/armv5/urel/statemodel.dll" - "c:/sys/bin/statemodel.dll"
-
-; -------- appruntimemodel
-"/epoc32/release/armv5/urel/appruntimemodel.dll" - "c:/sys/bin/appruntimemodel.dll"
-
 ; ----  hswidgetmodel --------------------------------------------
 "/epoc32/release/armv5/urel/hswidgetmodel.dll" - "c:/sys/bin/hswidgetmodel.dll"
 
--- a/tstaskmonitor/backstepping/bwins/tsbacksteppingu.def	Fri Jun 11 13:58:37 2010 +0300
+++ b/tstaskmonitor/backstepping/bwins/tsbacksteppingu.def	Wed Jun 23 18:33:40 2010 +0300
@@ -1,5 +1,5 @@
 EXPORTS
-	?NewLC@CTsBackstepping@@SAPAV1@AAVRWsSession@@@Z @ 1 NONAME ; class CTsBackstepping * CTsBackstepping::NewLC(class RWsSession &)
-	?NewL@CTsBackstepping@@SAPAV1@AAVRWsSession@@@Z @ 2 NONAME ; class CTsBackstepping * CTsBackstepping::NewL(class RWsSession &)
+	?NewL@CTsBackstepping@@SAPAV1@AAVMTsWindowGroupsMonitor@@@Z @ 1 NONAME ; class CTsBackstepping * CTsBackstepping::NewL(class MTsWindowGroupsMonitor &)
+	?NewLC@CTsBackstepping@@SAPAV1@AAVMTsWindowGroupsMonitor@@@Z @ 2 NONAME ; class CTsBackstepping * CTsBackstepping::NewLC(class MTsWindowGroupsMonitor &)
 	??1CTsBackstepping@@UAE@XZ @ 3 NONAME ; CTsBackstepping::~CTsBackstepping(void)
 
--- a/tstaskmonitor/backstepping/eabi/tsbacksteppingu.def	Fri Jun 11 13:58:37 2010 +0300
+++ b/tstaskmonitor/backstepping/eabi/tsbacksteppingu.def	Wed Jun 23 18:33:40 2010 +0300
@@ -1,6 +1,6 @@
 EXPORTS
-	_ZN15CTsBackstepping4NewLER10RWsSession @ 1 NONAME
-	_ZN15CTsBackstepping5NewLCER10RWsSession @ 2 NONAME
+	_ZN15CTsBackstepping4NewLER22MTsWindowGroupsMonitor @ 1 NONAME
+	_ZN15CTsBackstepping5NewLCER22MTsWindowGroupsMonitor @ 2 NONAME
 	_ZN15CTsBacksteppingD0Ev @ 3 NONAME
 	_ZN15CTsBacksteppingD1Ev @ 4 NONAME
 	_ZN15CTsBacksteppingD2Ev @ 5 NONAME
--- a/tstaskmonitor/backstepping/group/tsbackstepping.mmp	Fri Jun 11 13:58:37 2010 +0300
+++ b/tstaskmonitor/backstepping/group/tsbackstepping.mmp	Wed Jun 23 18:33:40 2010 +0300
@@ -26,6 +26,7 @@
 MW_LAYER_SYSTEMINCLUDE
 
 USERINCLUDE    ../inc
+USERINCLUDE     ../../../inc
 
 SOURCEPATH     ../src
 SOURCE         tsbackstepping.cpp
@@ -33,5 +34,6 @@
 LIBRARY        euser.lib 
 LIBRARY        ws32.lib // for RWsSession
 LIBRARY        apgrfx.lib // for TApaTask / TApaTasksList
+LIBRARY        tsutils.lib
 
 DEBUGLIBRARY    flogger.lib
--- a/tstaskmonitor/backstepping/inc/tsbackstepping.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/tstaskmonitor/backstepping/inc/tsbackstepping.h	Wed Jun 23 18:33:40 2010 +0300
@@ -19,28 +19,25 @@
 #define __CBACKSTEPPING_H
 
 #include <w32std.h>
-
+#include <tswindowgroupsobserver.h>
 
 
-class CTsBackstepping : public CActive
+class CTsBackstepping : public CTsWindowGroupsObserver
 {
 public:
-    IMPORT_C static CTsBackstepping* NewL(RWsSession &);
-    IMPORT_C static CTsBackstepping* NewLC(RWsSession &);
+    IMPORT_C static CTsBackstepping* NewL(MTsWindowGroupsMonitor &);
+    IMPORT_C static CTsBackstepping* NewLC(MTsWindowGroupsMonitor &);
     IMPORT_C virtual ~CTsBackstepping();
 
 private:
-    CTsBackstepping(RWsSession&);
+    CTsBackstepping(MTsWindowGroupsMonitor &);
     void ConstructL();
-    void RunL();
-    TInt RunError(TInt error);
-    void DoCancel();
-    void Subscribe();
-    void AnalyseWindowStackL();
 
-private:
-    RWsSession &mWsSession;
-    RWindowGroup mWg;
+    void HandleWindowGroupChanged(MTsResourceManager &, 
+                                  const TArray<RWsSession::TWindowGroupChainInfo> &);
+                                  
+    void HandleWindowGroupChangedL(MTsResourceManager &, 
+                                  const TArray<RWsSession::TWindowGroupChainInfo> &);
 };
 
 #endif // __CBACKSTEPPING_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tstaskmonitor/backstepping/inc/tsbacksteppingactivation.h	Wed Jun 23 18:33:40 2010 +0300
@@ -0,0 +1,78 @@
+/*
+* 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:
+*
+*/
+
+#ifndef CTSBACKSTEPPINGWAITINGDLE_H
+#define CTSBACKSTEPPINGWAITINGDLE_H
+
+#include <e32base.h>
+
+class RProperty;
+class MTsWindowGroupsMonitor;
+
+
+NONSHARABLE_CLASS(CTsBacksteppingActivation) : public CActive
+    {
+public:
+    /**
+    * Two-phased constructor.
+    * @param aPriority priority for the timer.
+    * @return new instance of CTeleWaitingIdle.
+    */
+    static CTsBacksteppingActivation* NewL(MTsWindowGroupsMonitor &monitor);
+    /**
+    * destructor
+    */
+    virtual ~CTsBacksteppingActivation();
+
+protected:
+    /**
+     * @see CActive.
+     */
+    void RunL();
+    
+    /**
+     * @see CActive::RunError(TInt)
+     */
+    TInt RunError(TInt);
+    
+    /**
+     * @see CActive.
+     */
+    void DoCancel();  
+
+private:
+    /**
+    * constructor.
+    * @return new instance of CTeleWaitingIdle.
+    */
+    CTsBacksteppingActivation(MTsWindowGroupsMonitor &monitor);
+    
+    void ConstructL();
+    
+    void Subscribe();
+
+private:
+    MTsWindowGroupsMonitor &mMonitor;
+    
+    // Central Repository.
+    RProperty mProperty;
+    
+    // Backstepping engine. Own
+    CBase* mEngine;
+    };
+
+#endif /* CTSBACKSTEPPINGWAITINGDLE_H */
--- a/tstaskmonitor/backstepping/src/tsbackstepping.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/tstaskmonitor/backstepping/src/tsbackstepping.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -27,17 +27,16 @@
 #include "tsbackstepping.h"
 
 const TUid KHSUid = {0x20022f35};
-const int KOrdinalPositionNoZOrder(-1);
 
 
 /** 
  *  CTsBackstepping::NewL
  *  two phase constructor
  */
-EXPORT_C CTsBackstepping* CTsBackstepping::NewL(RWsSession &session)
+EXPORT_C CTsBackstepping* CTsBackstepping::NewL(MTsWindowGroupsMonitor &monitor)
   {
   RDebug::Print(_L("CTsBackstepping::NewL"));
-  CTsBackstepping* self = CTsBackstepping::NewLC(session);
+  CTsBackstepping* self = CTsBackstepping::NewLC(monitor);
   CleanupStack::Pop(self);
   return self;
   }
@@ -46,9 +45,9 @@
  *  CTsBackstepping::NewLC
  *  two phase constructor
  */
-EXPORT_C CTsBackstepping* CTsBackstepping::NewLC(RWsSession &session)
+EXPORT_C CTsBackstepping* CTsBackstepping::NewLC(MTsWindowGroupsMonitor &monitor)
 { 
-  CTsBackstepping* self = new (ELeave) CTsBackstepping(session);
+  CTsBackstepping* self = new (ELeave) CTsBackstepping(monitor);
   CleanupStack::PushL(self);
   self->ConstructL();
   return self;
@@ -58,11 +57,10 @@
  * CTsBackstepping::CTsBackstepping
  * constructor
  */
-CTsBackstepping::CTsBackstepping(RWsSession &session)
-:CActive(EPriorityStandard),
-mWsSession(session)
+CTsBackstepping::CTsBackstepping(MTsWindowGroupsMonitor &monitor)
+:
+CTsWindowGroupsObserver(monitor)
 {
-    CActiveScheduler::Add(this);
 }
 
 
@@ -72,12 +70,6 @@
  */
 EXPORT_C CTsBackstepping::~CTsBackstepping()
 {
-    RDebug::Print(_L("CTsBackstepping::~CTsBackstepping"));
-    // Cancel AO
-    Cancel();
-    // Close opened session
-    mWg.Close();
-    
 }
 
 /** 
@@ -87,102 +79,38 @@
 void CTsBackstepping::ConstructL ()
 {
     RDebug::Print(_L("CTsBackstepping::ConstructL"));
-    // Initial window group
-    mWg = RWindowGroup (mWsSession);
-    User::LeaveIfError (mWg.Construct ((TUint32)&mWg, EFalse));
-    mWg.SetOrdinalPosition (KOrdinalPositionNoZOrder);
-    mWg.EnableReceiptOfFocus (EFalse);
-
-    // Hide window
-    CApaWindowGroupName* wn = CApaWindowGroupName::NewLC (mWsSession);
-    wn->SetHidden (ETrue);
-    wn->SetWindowGroupName (mWg);
-    CleanupStack::PopAndDestroy (wn);
-
-    // Window group change event
-    User::LeaveIfError (mWg.EnableGroupListChangeEvents());
-    
-    TRAP_IGNORE(AnalyseWindowStackL());//not critical operation
-    Subscribe();
+    BaseConstructL();
 }
 
 /** 
- *  CTsBackstepping::RunL
- *  called for handling events from window server
+ * CTsBackstepping::AnalyseWindowStackL
+ * Analyzes window stack and move homescreen to proper position
  */
-void CTsBackstepping::RunL()
-{
-    User::LeaveIfError(iStatus.Int());
-    TWsEvent wsEvent;
-    mWsSession.GetEvent (wsEvent);
-    if (EEventWindowGroupListChanged == wsEvent.Type()) {
-        RDebug::Print(_L("CTsBackstepping::RunL : EEventWindowGroupListChanged"));
-        AnalyseWindowStackL ();
-    }
-    Subscribe();
-}
-
-/** 
- *  CTsBackstepping::DoCancel
- *  Handling RunL errors.
- */
-TInt CTsBackstepping::RunError(TInt error)
+void CTsBackstepping::HandleWindowGroupChanged(MTsResourceManager &resource, const TArray<RWsSession::TWindowGroupChainInfo> &windowGroups)
 {
-    if (!IsActive() && KErrCancel != error) {
-        Subscribe();
-    }
-    return KErrNone;
-}
-
-/** 
- *  CTsBackstepping::DoCancel
- *  Stopping active object
- */
-void CTsBackstepping::DoCancel ()
-{
-    if (IsActive()) {
-        mWsSession.EventReadyCancel();
-    }
-}
-
-/** 
- *  CTsBackstepping::ActivateListeningL
- *  Starts listening to Window session events
- */
-void CTsBackstepping::Subscribe()
-{
-    RDebug::Print(_L("CTsBackstepping::Subscribe"));
-    // and start listening
-    iStatus = KRequestPending;
-    mWsSession.EventReady( &iStatus );
-    SetActive();
+    TRAP_IGNORE(HandleWindowGroupChangedL(resource, windowGroups));
 }
 
 /** 
  * CTsBackstepping::AnalyseWindowStackL
  * Analyzes window stack and move homescreen to proper position
  */
-void CTsBackstepping::AnalyseWindowStackL ()
+void CTsBackstepping::HandleWindowGroupChangedL(MTsResourceManager &resource,
+                                                const TArray<RWsSession::TWindowGroupChainInfo> &windowGroups)
 {  
     RDebug::Print(_L("CTsBackstepping::GetWindowCaption"));
     
-    RArray<RWsSession::TWindowGroupChainInfo> windowGroups;
-    CleanupClosePushL(windowGroups);
-    
-    CApaWindowGroupName *windowGroupName = CApaWindowGroupName::NewLC(mWsSession );
-    //update window group list
-    mWsSession.WindowGroupList( &windowGroups );
+    CApaWindowGroupName *windowGroupName = CApaWindowGroupName::NewLC(resource.WsSession());
     
     TInt count(windowGroups.Count());
     TInt pos(0);
     TInt whereToJump(1);
     for (TInt i=0; i<count; i++) {//iterate through list and give debug info
-        const RWsSession::TWindowGroupChainInfo& info = windowGroups[i];
-        windowGroupName->ConstructFromWgIdL(info.iId);
+        windowGroupName->ConstructFromWgIdL(windowGroups[i].iId);
         if (windowGroupName->AppUid() != TUid::Null()) {
             // find the window group id and check that it has no parent
-            if ( info.iParentId <= 0 ) {
-                RDebug::Print( _L("CTsBackstepping::GetWindowCaption wgid:%d is standalone view"), info.iId);
+            if ( windowGroups[i].iParentId <= 0 ) {
+                RDebug::Print( _L("CTsBackstepping::GetWindowCaption wgid:%d is standalone view"), windowGroups[i].iId);
                 //check if it is homescreen 
                 if (windowGroupName->AppUid() == KHSUid) {
                     RDebug::Print(_L("CTsBackstepping::GetWindowCaption Homescreen position = %d ; list:%d/%d"), pos, i, count);
@@ -191,7 +119,7 @@
                     } else {//we should move homescreen to be second (ommit embeded views) from top
                         RDebug::Print(_L("CTsBackstepping::moving homescreen to be second from top"));
                         RDebug::Print(_L("CTsBackstepping::whereToJump = %d"), whereToJump);
-                        mWsSession.SetWindowGroupOrdinalPosition(info.iId, whereToJump);
+                        resource.WsSession().SetWindowGroupOrdinalPosition(windowGroups[i].iId, whereToJump);
                     }
                     // and break
                     break;
@@ -202,12 +130,11 @@
                 if (!pos) {
                     ++whereToJump;
                 }
-                RDebug::Print(_L("CTsBackstepping::GetWindowCaption wgid:%d is embedded view"), info.iId);
+                RDebug::Print(_L("CTsBackstepping::GetWindowCaption wgid:%d is embedded view"), windowGroups[i].iId);
             }
         }
     }
     CleanupStack::PopAndDestroy(windowGroupName);
-    CleanupStack::PopAndDestroy(&windowGroups);
 }
 
 // end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tstaskmonitor/backstepping/src/tsbacksteppingactivation.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -0,0 +1,137 @@
+/*
+* 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:
+*
+*/
+
+#include <e32property.h>
+#include <startupdomainpskeys.h>
+#include <flogger.h>
+#include <w32std.h>
+
+#include "tsbacksteppingactivation.h"
+#include "tsbackstepping.h"
+
+ // ============================ MEMBER FUNCTIONS ===============================
+// -----------------------------------------------------------------------------
+// CBacksteppingActivation::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CTsBacksteppingActivation* CTsBacksteppingActivation::NewL(MTsWindowGroupsMonitor &monitor)
+{
+    RDebug::Print(_L("CBacksteppingActivation::NewL"));
+    CTsBacksteppingActivation* self = new( ELeave ) CTsBacksteppingActivation(monitor);
+    self->ConstructL();
+    return self;
+}
+
+// -----------------------------------------------------------------------------
+// CBacksteppingWaitingIdle::CBacksteppingWaitingIdle
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CTsBacksteppingActivation::CTsBacksteppingActivation(MTsWindowGroupsMonitor &monitor) 
+:
+    CActive(EPriorityLow),
+    mMonitor(monitor)
+{
+    CActiveScheduler::Add(this);
+}
+
+// -----------------------------------------------------------------------------
+// CBacksteppingActivation::ConstructL()
+// -----------------------------------------------------------------------------
+//
+void CTsBacksteppingActivation::ConstructL() 
+{
+    User::LeaveIfError(mProperty.Attach(KPSUidStartup, KPSIdlePhase1Ok));
+    iStatus = KRequestPending;
+    SetActive();
+    TRequestStatus* status(&iStatus);
+    User::RequestComplete(status);
+}
+
+// -----------------------------------------------------------------------------
+// CBacksteppingActivation::~CBacksteppingActivation
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CTsBacksteppingActivation::~CTsBacksteppingActivation()
+{
+    Cancel();
+    delete mEngine;
+    mProperty.Close();
+}
+
+// -----------------------------------------------------------------------------
+// CBacksteppingActivation::DoCancel
+// 
+// -----------------------------------------------------------------------------
+//
+void CTsBacksteppingActivation::DoCancel()
+{
+    if ( IsActive() && mProperty.Handle() ) {
+        mProperty.Cancel();
+    }
+}
+
+// -----------------------------------------------------------------------------
+// CBacksteppingActivation::RunL
+// 
+// -----------------------------------------------------------------------------
+//
+void CTsBacksteppingActivation::RunL()
+{
+    User::LeaveIfError(iStatus.Int());
+    
+    TInt state(~EIdlePhase1Ok);
+    User::LeaveIfError(mProperty.Get(state));
+    
+    if (EIdlePhase1Ok == state) {
+        if (0 == mEngine) {
+            mEngine = CTsBackstepping::NewL(mMonitor);
+        }
+    } else {
+        delete mEngine;
+        mEngine = 0;
+    }
+    Subscribe();
+}
+
+// -----------------------------------------------------------------------------
+// CBacksteppingActivation::RunError
+// 
+// -----------------------------------------------------------------------------
+//
+TInt CTsBacksteppingActivation::RunError(TInt error)
+{
+    if (KErrCancel != error) {
+        Subscribe();
+    }
+    return KErrNone;
+}
+
+// -----------------------------------------------------------------------------
+// CBacksteppingActivation::Subscribe
+// 
+// -----------------------------------------------------------------------------
+//
+void CTsBacksteppingActivation::Subscribe()
+{
+    mProperty.Subscribe(iStatus);
+    SetActive();
+}
+// end of file
--- a/tstaskmonitor/client/client.pro	Fri Jun 11 13:58:37 2010 +0300
+++ b/tstaskmonitor/client/client.pro	Wed Jun 23 18:33:40 2010 +0300
@@ -25,7 +25,7 @@
     dll.sources = tstaskmonitorclient.dll
     dll.path = $$SHARED_LIB_DIR
     DEPLOYMENT += dll
-    LIBS += -ltsutils
+    LIBS += -ltsutils -lws32 -lapgrfx -lcone
 
     BLD_INF_RULES.prj_exports +=    "s60\inc\tstaskmonitorclient.h" \
                                     "s60\inc\tstaskmonitorobserver.h" \
--- a/tstaskmonitor/server/group/hsrunningappmonitor.mmp	Fri Jun 11 13:58:37 2010 +0300
+++ b/tstaskmonitor/server/group/hsrunningappmonitor.mmp	Wed Jun 23 18:33:40 2010 +0300
@@ -38,8 +38,6 @@
 
 SOURCE          tsrunningappstorage.cpp
 SOURCE          tsfswdatalist.cpp
-SOURCE          tsfswengine.cpp
-SOURCE          tsfswmonitor.cpp
 SOURCE          tsscreenshotprovider.cpp
 
 SOURCEPATH      ../../utils/src
--- a/tstaskmonitor/server/inc/hsrunningappserver.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/tstaskmonitor/server/inc/hsrunningappserver.h	Wed Jun 23 18:33:40 2010 +0300
@@ -24,6 +24,8 @@
 #include "tsdataobserver.h"
 
 class CRunningAppStorage;
+class CTsResourceManager;
+class CTsWindowGroupsMonitor;
 /**
  *  CRunningAppServer
  * 
@@ -70,7 +72,10 @@
 private:
     RPointerArray<CHsDataObserver> mObservers;
     RWsSession mWsSession;
+    CTsResourceManager* mResources;
+    CTsWindowGroupsMonitor* mMonitor;
     CRunningAppStorage* mStorage;
+    
     CBase *mScreenshotProviderStarter;
     CBase *mBacksteppingEngine;
 };
--- a/tstaskmonitor/server/inc/tsfswdatalist.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/tstaskmonitor/server/inc/tsfswdatalist.h	Wed Jun 23 18:33:40 2010 +0300
@@ -20,8 +20,7 @@
 #define TSFSWDATALIST_H
 
 #include <e32base.h>
-#include <apgcli.h>
-#include <w32std.h>
+#include <tswindowgroupsobserver.h>
 #include "tsfswentry.h"
 #include "tsdataobserver.h"
 
@@ -31,15 +30,15 @@
 /**
  * Engine's data list.
  */
-NONSHARABLE_CLASS( CTsFswDataList ) : public CBase
+NONSHARABLE_CLASS( CTsFswDataList ) : public CTsWindowGroupsObserver
     {
 public:
     /**
      * Two-phased constructor.
-     *
-     * @param aParent
      */
-    static CTsFswDataList* NewL(MHsDataObserver& observer);
+    static CTsFswDataList* NewL(MTsResourceManager& resources, 
+                                MTsWindowGroupsMonitor &monitor, 
+                                MHsDataObserver& observer);
 
     /*
      * Destructor
@@ -50,7 +49,9 @@
     /**
      * Constructor.
      */
-    CTsFswDataList(MHsDataObserver& observer);
+    CTsFswDataList(MTsResourceManager& resources,
+                   MTsWindowGroupsMonitor &monitor, 
+                   MHsDataObserver& observer);
 
     /**
      * Performs 2nd phase construction.
@@ -67,10 +68,11 @@
     const RTsFswArray& FswDataL();
 
     /**
-     * Gets the window group list and reconstructs the fsw content.
-     * @return   TBool   ETrue if the content iData has been modified
+     * Interface implementation
+     * @see MTsWindowGroupsObserver HandleWindowGroupChanged
      */
-    TBool CollectTasksL();
+    void HandleWindowGroupChanged(MTsResourceManager &,
+                                  const TArray<RWsSession::TWindowGroupChainInfo> &);
     
     /**
      * Checks if given uid is on hidden list
@@ -82,19 +84,20 @@
     /**
      * Set screenshot 
      */
-    TBool SetScreenshotL(const CFbsBitmap* bitmap, UpdatePriority priority, TInt wgId);
+    void SetScreenshotL(const CFbsBitmap* bitmap, UpdatePriority priority, TInt wgId);
     
     /**
      * Removes screenshot 
      */    
-    TBool RemoveScreenshotL(TInt wgId);
+    void RemoveScreenshotL(TInt wgId);
     
 private:
     /**
      * Adds running apps to the list.
      * @param   appsList    array to add to
      */
-    void CollectAppsL( RTsFswArray& appsList );
+    void CollectAppsL(RTsFswArray& appsList,
+                      const TArray<RWsSession::TWindowGroupChainInfo> &wgList);
 
     /**
      * Called from CollectTasksL for each entry in the task list.
@@ -103,10 +106,10 @@
      * @param   wgName     window group name or NULL
      * @param   newList    list to add to
      */
-    void AddEntryL( const TTsEntryKey& key, 
-			const TUid& appUid,
-            CApaWindowGroupName* wgName,
-			RTsFswArray& newList );
+    void AddEntryL(const TTsEntryKey& key, 
+                   const TUid& appUid,
+                   CApaWindowGroupName* wgName,
+                   RTsFswArray& newList );
 
     /**
      * Checks if there is an entry for same app in the content list.
@@ -135,9 +138,8 @@
      * on aConsiderWidgets param. 
      * Function removes or add entries into data depend on given list.
      * @param   listToFit          list with actual data  
-     * @return  ETrue if change occours on data list, EFalse otherwise   
      */
-    TBool FitDataToListL( RTsFswArray& listToFit);
+    void FitDataToList( RTsFswArray& listToFit);
 
     /**
      * Checks if there is an entry for same app in the given list.
@@ -176,20 +178,39 @@
     /**
      * Gets allowed uids, tries to filter non GUI application 
      */
-    void GetAllowedUidsL();
+    TBool VerifyApplicationL(TUid);
+    
+    /**
+     * Function generate task key using window group id
+     * @param wgId - window group id of running application
+     * @param entry key 
+     */
+    TTsEntryKey GenerateKeyL(TInt);
     
+    /**
+     * Analyse and compress lookup table id needed
+     * @param array - lookup table that has to be checked
+     * 
+     */
+    void CompressLookupTable(RArray<TUid> &array);
+    
+    /**
+     * Change priority of an item in the lookup table
+     * @param array - look up table
+     * @param offset - index of an item in the table
+     */
+    void UpdateLookupTableL(RArray<TUid> &array, TInt offset);
 
 private:
+    /**
+     * Resource manager. Not own
+     */
+    MTsResourceManager& mResources;
+    
     MHsDataObserver &mObserver;
     
     RTsFswArray mData; // current fsw content, i.e. the task list
 
-    // window server session
-    RWsSession mWsSession;
-
-    // apparc session
-    RApaLsSession mAppArcSession;
-    
     // list of hidden uids
     RArray<TUid> mHiddenUids;
     
--- a/tstaskmonitor/server/inc/tsfswengine.h	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,103 +0,0 @@
-/*
-* 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:  Task monitor engine
- *
-*/
-
-
-#ifndef TSFSWENGINE_H
-#define TSFSWENGINE_H
-
-#include <e32base.h>
-#include "tsfswentry.h"
-#include "tsdataobserver.h"
-
-class CTsFswDataList;
-
-
-/**
- * Engine for fast swap server.
- * Performs task monitoring, notifications about wg changes are
- * received from the appui.
- */
-NONSHARABLE_CLASS( CTsFswEngine ) : public CBase,
-                                    public MHsDataObserver
-
-    {
-    
-public:
-    /**
-     * Creates a new instance.
-     * @param   observer   ref to observer
-     */
-    static CTsFswEngine* NewL( MHsDataObserver& observer );
-
-    /**
-     * @copydoc NewL
-     */
-    static CTsFswEngine* NewLC( MHsDataObserver& observer );
-
-    /**
-     * Destructor.
-     */
-    ~CTsFswEngine();
-
-    /**
-     * Returns a reference to the current content.
-     * @return  ref to content array
-     */
-    const RTsFswArray& FswDataL();
-
-    /**
-     * Set screenshot 
-     */
-    void SetScreenshotL(const CFbsBitmap* bitmap, UpdatePriority priority, TInt wgId);
-    
-    /**
-     * Removes screenshot 
-     */    
-    void RemoveScreenshotL(TInt wgId);
-
-
-private:
-
-    // from MTsFswTaskListObserver
-    void DataChanged();
-
-
-
-private:
-    /**
-     * Constructor.
-     */
-    CTsFswEngine( MHsDataObserver& observer );
-
-    /**
-     * Performs 2nd phase construction.
-     */
-    void ConstructL();
-
-    /**
-     * Gets the window group list and reconstructs the fsw content.
-     * @return   TBool   ETrue if the list has been modified
-     */
-    TBool CollectTasksL();
-
-private:
-    MHsDataObserver& mObserver;
-    CTsFswDataList* mDataList; //own
-
-    };
-
-#endif
--- a/tstaskmonitor/server/inc/tsfswmonitor.h	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,66 +0,0 @@
-/*
-* 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:  Monitor for server
- *
-*/
-
-
-#ifndef TSFSWMONITOR_H
-#define TSFSWMONITOR_H
-
-#include <e32debug.h>
-#include <w32std.h>
-
-class MHsDataObserver;
-class MTsFswResourceObserver;
-
-/**
- * Monitor for the fsw server.
- * Reimplements HandleWsEventL from base class to get notifications about
- * window group changes.
- */
-class CTsFswMonitor : public CActive
-    {
-public:
-    ~CTsFswMonitor();
-    
-    
-
-static CTsFswMonitor* NewL(MHsDataObserver& taskListObserver);
-static CTsFswMonitor* NewLC(MHsDataObserver& taskListObserver);
-
-protected:
-    CTsFswMonitor(MHsDataObserver& taskListObserver);
-    void ConstructL();
-    
-    // from CActive
-    void RunL();
-    TInt RunError( TInt error );
-    void DoCancel();
-
-
-private:
-    void Subscribe();        
-    void ConstractObserverL();
-private:
-    MHsDataObserver* mTaskListObserver; // not own
-    
-    // window server session
-    RWsSession mWsSession;
-    
-    // Window group.
-    RWindowGroup mWg;
-    };
-
-#endif //TSFSWMONITOR_H
--- a/tstaskmonitor/server/inc/tsrunningappstorage.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/tstaskmonitor/server/inc/tsrunningappstorage.h	Wed Jun 23 18:33:40 2010 +0300
@@ -25,8 +25,10 @@
 #include "hsdataprovider.h"
 #include "tsdatastorage.h"
 
-class CTsFswEngine;
-class CTsFswMonitor;
+class CTsFswDataList;
+class MTsResourceManager;
+class MTsWindowGroupsMonitor;
+
 /**
  *  CRunningAppServer
  * 
@@ -45,7 +47,9 @@
     /**
      * Two-phased constructor.
      */
-    static CRunningAppStorage* NewL(MHsDataObserver& observer);
+    static CRunningAppStorage* NewL(MHsDataObserver& observer,
+                                    MTsResourceManager& resources,
+                                    MTsWindowGroupsMonitor &wsMonitor);
     
 public: //MHsDataObserver
     const TDesC8& Data() const; 
@@ -66,17 +70,15 @@
     /**
      * Default constructor for performing 2nd stage construction
      */
-    void ConstructL();
+    void ConstructL(MTsResourceManager& resources,
+                    MTsWindowGroupsMonitor &wsMonitor);
     
     void DataChangedL();
 
 private:
     MHsDataObserver& mObserver;
     RBuf8 mData;
-    
-    CTsFswEngine* mEngine;
-    CTsFswMonitor* mMonitor;
-
+    CTsFswDataList* mEngine;
 };
 
 #endif // RUNNINGAPPSERVER_H
--- a/tstaskmonitor/server/src/hsrunningappserver.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/tstaskmonitor/server/src/hsrunningappserver.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -14,6 +14,7 @@
 * Description:
 *
 */
+#include <tswindowgroupsobserver.h>
 #include "tstaskmonitorglobals.h"
 #include "hsrunningappserver.h"
 #include "hsrunningappsession.h"
@@ -42,6 +43,7 @@
     delete mBacksteppingEngine;
     delete mScreenshotProviderStarter;
     delete mStorage;
+    delete mMonitor;
     mObservers.ResetAndDestroy();
 }
 
@@ -65,9 +67,11 @@
 {
     StartL(KRunningAppServerName);
     User::LeaveIfError(mWsSession.Connect());
-    mStorage = CRunningAppStorage::NewL(*this);
+    mResources = CTsResourceManager::NewL();
+    mMonitor = CTsWindowGroupsMonitor::NewL(*mResources);
+    mStorage = CRunningAppStorage::NewL(*this, *mResources, *mMonitor);
     TRAP_IGNORE(mScreenshotProviderStarter = CTsScreenshotProvider::NewL(*mStorage);
-    mBacksteppingEngine = CTsBackstepping::NewL(mWsSession);)
+    mBacksteppingEngine = CTsBackstepping::NewL(*mMonitor);)
 }
 
 // -----------------------------------------------------------------------------
--- a/tstaskmonitor/server/src/tsfswdatalist.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/tstaskmonitor/server/src/tsfswdatalist.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -18,7 +18,6 @@
 //INCLUDES:
 
 #include "tsfswdatalist.h"
-#include "tsfswengine.h"
 #include "tsentrykeygenerator.h"
 #include <mmf/common/mmfcontrollerpluginresolver.h> // for CleanupResetAndDestroyPushL
 #include <apgwgnam.h>
@@ -27,7 +26,7 @@
 #include <apgicnfl.h> // fbsbitmap
 #include <AknIconSrvClient.h> 
 #include <fbs.h>
-#include <APGWGNAM.H>
+#include <apgwgnam.h>
 
 
 // size for the created app icons
@@ -37,15 +36,19 @@
 //uids to be hidden
 const TUid KHsApplicationUid = { 0x20022F35 };
 
+const TInt KMaxLookupSize(75);
+
 // ================= MEMBER FUNCTIONS =======================
 
 // --------------------------------------------------------------------------
 // CTsFswDataList::NewL
 // --------------------------------------------------------------------------
 //
-CTsFswDataList* CTsFswDataList::NewL(MHsDataObserver &observer)
+CTsFswDataList* CTsFswDataList::NewL(MTsResourceManager& resources,
+                                     MTsWindowGroupsMonitor &monitor, 
+                                     MHsDataObserver& observer)
 {
-    CTsFswDataList* self = new (ELeave) CTsFswDataList(observer);
+    CTsFswDataList* self = new (ELeave) CTsFswDataList(resources, monitor, observer);
     CleanupStack::PushL(self);
     self->ConstructL();
     CleanupStack::Pop(self);
@@ -56,7 +59,12 @@
 // CTsFswDataList::CTsFswDataList
 // --------------------------------------------------------------------------
 //
-CTsFswDataList::CTsFswDataList(MHsDataObserver& observer) :
+CTsFswDataList::CTsFswDataList(MTsResourceManager& resources,
+                               MTsWindowGroupsMonitor &monitor, 
+                               MHsDataObserver& observer) 
+:
+    CTsWindowGroupsObserver(monitor),
+    mResources(resources),
     mObserver(observer)
 {
 }
@@ -68,8 +76,6 @@
 CTsFswDataList::~CTsFswDataList()
 {
     mData.ResetAndDestroy();
-    mAppArcSession.Close();
-    mWsSession.Close();
     mHiddenUids.Close();
     mAllowedUids.Close();
     RFbsSession::Disconnect();
@@ -82,8 +88,7 @@
 //
 void CTsFswDataList::ConstructL()
 {
-    User::LeaveIfError(mWsSession.Connect());
-    User::LeaveIfError(mAppArcSession.Connect());
+    BaseConstructL();
     mHiddenUids.AppendL(KHsApplicationUid);
     User::LeaveIfError(RFbsSession::Connect());
     RAknIconSrvClient::Connect();
@@ -102,34 +107,27 @@
 // CTsFswDataList::CollectTasksL
 // --------------------------------------------------------------------------
 //
-TBool CTsFswDataList::CollectTasksL()
+void CTsFswDataList::HandleWindowGroupChanged(MTsResourceManager &, 
+                                              const TArray<RWsSession::TWindowGroupChainInfo> &wgList)
 {
-    TBool changed = EFalse;
-    RTsFswArray newAppsList;
-    CleanupResetAndDestroyPushL(newAppsList);
-    CollectAppsL(newAppsList);
-    changed |= FitDataToListL(newAppsList);
-    CleanupStack::PopAndDestroy(&newAppsList);
-    return changed;
+    TRAP_IGNORE(RTsFswArray newAppsList;
+                CleanupResetAndDestroyPushL(newAppsList);
+                CollectAppsL(newAppsList, wgList);
+                FitDataToList(newAppsList);
+                CleanupStack::PopAndDestroy(&newAppsList));
+    
 }
 
 // --------------------------------------------------------------------------
 // CTsFswDataList::
 // --------------------------------------------------------------------------
 //
-void CTsFswDataList::CollectAppsL(RTsFswArray& appsList)
+void CTsFswDataList::CollectAppsL(RTsFswArray& appsList, 
+                                  const TArray<RWsSession::TWindowGroupChainInfo> &wgList)
 {
-    // gets allowed uids - running apps without hidden uids, null uids, filtered uid
-    GetAllowedUidsL();
-
-    // get all window groups
-    RArray<RWsSession::TWindowGroupChainInfo> allWgIds;
-    CleanupClosePushL(allWgIds);
-    User::LeaveIfError(mWsSession.WindowGroupList(0, &allWgIds));
-
-    TInt count = allWgIds.Count();
-    for (TInt i = 0; i < count; ++i) {
-        TTsEntryKey key = TsEntryKeyGeneraror::GenerateL(allWgIds[i].iId, allWgIds.Array());
+    TInt offset(KErrNotFound);
+    for (TInt i = 0; i < wgList.Count(); ++i) {
+        TTsEntryKey key = TsEntryKeyGeneraror::GenerateL(wgList[i].iId, wgList);
         //skip this entry if it is already on list
         if (FindEntry(appsList, key) >= 0) {
             continue;
@@ -137,16 +135,22 @@
 
         // get window group name
         TInt wgId = key.mParentId;
-        CApaWindowGroupName* windowName = CApaWindowGroupName::NewLC(mWsSession, wgId);
+        CApaWindowGroupName* windowName = CApaWindowGroupName::NewLC(mResources.WsSession(), wgId);
         TUid appUid = windowName->AppUid();
-
-        // add item to task list if uid is allowed
-        if (mAllowedUids.Find(appUid) >= 0) {
+        
+        //Check hidden applications
+        if (KErrNotFound != (offset = mHiddenUids.Find(appUid))) {
+            UpdateLookupTableL(mHiddenUids, offset);
+        } else if (KErrNotFound != (offset = mAllowedUids.Find(appUid))) {
+            UpdateLookupTableL(mAllowedUids, offset);
+            AddEntryL(key, appUid, windowName, appsList);
+        } else if(VerifyApplicationL(appUid)) {
             AddEntryL(key, appUid, windowName, appsList);
         }
         CleanupStack::PopAndDestroy(windowName);
     }
-    CleanupStack::PopAndDestroy(&allWgIds);
+    CompressLookupTable(mHiddenUids);
+    CompressLookupTable(mAllowedUids);
 }
 
 // --------------------------------------------------------------------------
@@ -208,7 +212,7 @@
 {
     //Retrieve the app name
     TApaAppInfo info;
-    mAppArcSession.GetAppInfo(info, appUid);
+    mResources.ApaSession().GetAppInfo(info, appUid);
     TPtrC caption = info.iShortCaption;
 
     HBufC* tempName = 0;
@@ -220,7 +224,7 @@
         }
         else {
             TThreadId threadId;
-            TInt err = mWsSession.GetWindowGroupClientThreadId(wgId, threadId);
+            TInt err = mResources.WsSession().GetWindowGroupClientThreadId(wgId, threadId);
             if (err == KErrNone) {
                 RThread thread;
                 CleanupClosePushL(thread);
@@ -245,7 +249,7 @@
 // CTsFswDataList::FitDataToListL
 // --------------------------------------------------------------------------
 //
-TBool CTsFswDataList::FitDataToListL(RTsFswArray& listToFit)
+void CTsFswDataList::FitDataToList(RTsFswArray& listToFit)
 {
     TBool changed = EFalse;
     TInt listCount = listToFit.Count();
@@ -272,9 +276,10 @@
     }
     //establish order
     TBool orderChanged = EstablishOrder(allKeys);
-    changed = changed || orderChanged;
+    if (changed || orderChanged) {
+        mObserver.DataChanged();
+    }
     allKeys.Close();
-    return changed;
 }
 
 // --------------------------------------------------------------------------
@@ -302,10 +307,10 @@
 
     TSize size(KAppIconWidth, KAppIconHeight);
     CApaMaskedBitmap* apaMaskedBitmap = CApaMaskedBitmap::NewLC();
-    TInt err = mAppArcSession.GetAppIcon(aAppUid, size, *apaMaskedBitmap);
+    TInt err = mResources.ApaSession().GetAppIcon(aAppUid, size, *apaMaskedBitmap);
     TInt iconsCount(0);
     if (err == KErrNone) {
-        err = mAppArcSession.NumberOfOwnDefinedIcons(aAppUid, iconsCount);
+        err = mResources.ApaSession().NumberOfOwnDefinedIcons(aAppUid, iconsCount);
     }
 
     if ((err == KErrNone) && (iconsCount > 0)) {
@@ -318,7 +323,7 @@
     else {
         CleanupStack::PopAndDestroy(apaMaskedBitmap);
         HBufC* fileNameFromApparc = NULL;
-        TInt err = mAppArcSession.GetAppIcon(aAppUid, fileNameFromApparc);
+        TInt err = mResources.ApaSession().GetAppIcon(aAppUid, fileNameFromApparc);
         if (err == KErrNone) {
             CleanupStack::PushL(fileNameFromApparc);
             CFbsBitmap *bitamp(0);
@@ -378,44 +383,23 @@
 // CTsFswDataList::SetScreenshotL
 // --------------------------------------------------------------------------
 //
-TBool CTsFswDataList::SetScreenshotL(const CFbsBitmap* bitmap, UpdatePriority priority, TInt wgId)
+void CTsFswDataList::SetScreenshotL(const CFbsBitmap* bitmap, UpdatePriority priority, TInt wgId)
 {
-    RArray<RWsSession::TWindowGroupChainInfo> allWgIds;
-    CleanupClosePushL(allWgIds);
-    User::LeaveIfError(mWsSession.WindowGroupList(0, &allWgIds));
-    TTsEntryKey key = TsEntryKeyGeneraror::GenerateL(wgId, allWgIds.Array());
-    TInt pos = FindEntry(mData, key);
-    TBool updated(EFalse);
-    if (pos >= 0) {
-        updated = mData[pos]->SetScreenshotL(bitmap, priority);
-    }
-    else {
-        User::Leave(KErrNotFound);
-    }
-    CleanupStack::PopAndDestroy(&allWgIds);
-    return updated;
+    TInt pos = FindEntry(mData, GenerateKeyL(wgId));
+    User::LeaveIfError(pos);
+    mData[pos]->SetScreenshotL(bitmap, priority);
 }
 
 // --------------------------------------------------------------------------
 // CTsFswDataList::RemoveScreenshotL
 // --------------------------------------------------------------------------
 //
-TBool CTsFswDataList::RemoveScreenshotL(TInt wgId)
+void CTsFswDataList::RemoveScreenshotL(TInt wgId)
 {
-    RArray<RWsSession::TWindowGroupChainInfo> allWgIds;
-    CleanupClosePushL(allWgIds);
-    User::LeaveIfError(mWsSession.WindowGroupList(0, &allWgIds));
-    TTsEntryKey key = TsEntryKeyGeneraror::GenerateL(wgId, allWgIds.Array());
-    TInt pos = FindEntry(mData, key);
-    TBool updated(EFalse);
-    if (pos >= 0) {
-        updated = mData[pos]->RemoveScreenshot();
-    }
-    else {
-        User::Leave(KErrNotFound);
-    }
-    CleanupStack::PopAndDestroy(&allWgIds);
-    return updated;
+    
+    TInt pos = FindEntry(mData, GenerateKeyL(wgId));
+    User::LeaveIfError(pos);
+    mData[pos]->RemoveScreenshotL();
 }
 
 // --------------------------------------------------------------------------
@@ -445,25 +429,65 @@
 // CTsFswDataList::GetAllowedUidsL
 // --------------------------------------------------------------------------
 //
-void CTsFswDataList::GetAllowedUidsL()
+TBool CTsFswDataList::VerifyApplicationL(TUid uid)
 {
-    mAllowedUids.Close();
-    TApaAppInfo* appInfo = new (ELeave) TApaAppInfo();
-    CleanupStack::PushL(appInfo);
+    TBool retVal(EFalse);
+    TApaAppInfo appInfo;
     TApaAppCapabilityBuf appCap;
 
-    User::LeaveIfError(mAppArcSession.GetAllApps(0));
+    User::LeaveIfError(mResources.ApaSession().GetAllApps(0));
     // for every application get uid, hidden and missing attribute
     // and add to aArray.
-    while (KErrNone == mAppArcSession.GetNextApp(*appInfo)) {
-        TUid uid = appInfo->iUid;
-        User::LeaveIfError(mAppArcSession.GetAppCapability(appCap, uid));
-        // do not add hidden app and with null uid.
-        if (!appCap().iAppIsHidden && !IsHiddenUid(uid) && uid.iUid) {
-            mAllowedUids.AppendL(uid);
+    while (KErrNone == mResources.ApaSession().GetNextApp(appInfo)) {
+        User::LeaveIfError(mResources.ApaSession().GetAppCapability(appCap, appInfo.iUid));
+        if(!appCap().iAppIsHidden) {
+            if (uid == appInfo.iUid) {
+                retVal = ETrue;
+                mAllowedUids.InsertL(appInfo.iUid, mAllowedUids.Count());
+            }
+        } else if(KErrNotFound == mHiddenUids.Find(appInfo.iUid)) {
+            mHiddenUids.InsertL(appInfo.iUid, mHiddenUids.Count());
         }
     }
-    CleanupStack::PopAndDestroy(appInfo);
+    if (EFalse == retVal && KErrNotFound == mHiddenUids.Find(uid)) {
+        mHiddenUids.InsertL(uid, mHiddenUids.Count());
+    }
+    return retVal;
+}
+
+// --------------------------------------------------------------------------
+// CTsFswDataList::GenerateKeyL(TInt)
+// --------------------------------------------------------------------------
+//
+TTsEntryKey CTsFswDataList::GenerateKeyL(TInt wgId)
+{
+    RArray<RWsSession::TWindowGroupChainInfo> allWgIds;
+   CleanupClosePushL(allWgIds);
+   User::LeaveIfError(mResources.WsSession().WindowGroupList(0, &allWgIds));
+   const TTsEntryKey key = TsEntryKeyGeneraror::GenerateL(wgId, allWgIds.Array());
+   CleanupStack::PopAndDestroy(&allWgIds);
+   return key;
 }
 
+// --------------------------------------------------------------------------
+// CTsFswDataList::CompressLookupTable(RArray<TUid> &)
+// --------------------------------------------------------------------------
+//
+void CTsFswDataList::CompressLookupTable(RArray<TUid> &array)
+{
+    while(KMaxLookupSize < array.Count()) {
+        array.Remove(0);
+    }
+}
+
+// --------------------------------------------------------------------------
+// CTsFswDataList::UpdateLookupTableL(RArray<TUid> &, TInt)
+// --------------------------------------------------------------------------
+//
+void CTsFswDataList::UpdateLookupTableL(RArray<TUid> &array, TInt offset)
+{
+    const TUid uid(array[offset]);
+    array.Remove(offset);
+    array.InsertL(uid, array.Count());
+}
 // end of file
--- a/tstaskmonitor/server/src/tsfswengine.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,130 +0,0 @@
-/*
-* 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:  Task monitor engine
- *
-*/
-
-
-#include "tsfswengine.h"
-#include "tsfswdatalist.h"
-
-
-// --------------------------------------------------------------------------
-// CTsFswEngine::NewL
-// --------------------------------------------------------------------------
-//
-CTsFswEngine* CTsFswEngine::NewL(MHsDataObserver& observer)
-{
-    CTsFswEngine* self = NewLC(observer);
-    CleanupStack::Pop(self);
-    return self;
-}
-
-// --------------------------------------------------------------------------
-// CTsFswEngine::NewLC
-// --------------------------------------------------------------------------
-//
-CTsFswEngine* CTsFswEngine::NewLC(MHsDataObserver& observer)
-{
-    CTsFswEngine* self = new (ELeave) CTsFswEngine(observer);
-    CleanupStack::PushL(self);
-    self->ConstructL();
-    return self;
-}
-
-// --------------------------------------------------------------------------
-// CTsFswEngine::CTsFswEngine
-// --------------------------------------------------------------------------
-//
-CTsFswEngine::CTsFswEngine(MHsDataObserver& observer) :
-    mObserver(observer)
-{
-}
-
-// --------------------------------------------------------------------------
-// CTsFswEngine::ConstructL
-// --------------------------------------------------------------------------
-//
-void CTsFswEngine::ConstructL()
-{
-    mDataList = CTsFswDataList::NewL(mObserver);
-    CollectTasksL();
-}
-
-// --------------------------------------------------------------------------
-// CTsFswEngine::~CTsFswEngine
-// --------------------------------------------------------------------------
-//
-CTsFswEngine::~CTsFswEngine()
-{
-    delete mDataList;
-}
-
-// --------------------------------------------------------------------------
-// CTsFswEngine::FswDataL
-// --------------------------------------------------------------------------
-//
-const RTsFswArray& CTsFswEngine::FswDataL()
-{
-    return mDataList->FswDataL();
-}
-
-// --------------------------------------------------------------------------
-// CTsFswEngine::UpdateTaskList
-// Callback from appui
-// --------------------------------------------------------------------------
-//
-void CTsFswEngine::DataChanged()
-{
-    TBool changed = EFalse;
-    TRAPD( err, changed = CollectTasksL() );
-    if (err == KErrNone && changed) {
-        mObserver.DataChanged();
-    }
-}
-
-// --------------------------------------------------------------------------
-// CTsFswEngine::CollectTasksL
-// --------------------------------------------------------------------------
-//
-TBool CTsFswEngine::CollectTasksL()
-{
-    TBool changed = mDataList->CollectTasksL();
-    return changed;
-}
-
-// --------------------------------------------------------------------------
-// CTsFswEngine::SetScreenshotL
-// --------------------------------------------------------------------------
-//
-void CTsFswEngine::SetScreenshotL(const CFbsBitmap* bitmap, UpdatePriority priority, TInt wgId)
-{
-    TBool changed = mDataList->SetScreenshotL(bitmap, priority, wgId);
-    if (!changed) {
-        User::Leave(KErrAccessDenied);
-    }
-}
-
-// --------------------------------------------------------------------------
-// CTsFswEngine::SetScreenshotL
-// --------------------------------------------------------------------------
-//
-void CTsFswEngine::RemoveScreenshotL(TInt wgId)
-{
-    TBool changed = mDataList->RemoveScreenshotL(wgId);
-    if (changed) {
-        mObserver.DataChanged();
-    }
-}
-// end of file
--- a/tstaskmonitor/server/src/tsfswmonitor.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,132 +0,0 @@
-/*
- * 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:  ws monitor implementation
- *
- */
-
-#include "tsfswmonitor.h"
-#include "tsdataobserver.h"
-
-// --------------------------------------------------------------------------
-// CTsFswMonitor::~CTsFswMonitor
-// --------------------------------------------------------------------------
-//
-CTsFswMonitor::~CTsFswMonitor()
-{
-    Cancel();
-    mWg.Close();
-    mWsSession.Close();
-}
-
-// --------------------------------------------------------------------------
-// CTsFswMonitor::CTsFswMonitor
-// --------------------------------------------------------------------------
-//
-CTsFswMonitor::CTsFswMonitor(MHsDataObserver& taskListObserver) :
-    CActive(EPriorityStandard), mTaskListObserver(&taskListObserver)
-{
-}
-
-// --------------------------------------------------------------------------
-// CTsFswMonitor::NewL
-// --------------------------------------------------------------------------
-//        
-CTsFswMonitor* CTsFswMonitor::NewL(MHsDataObserver& taskListObserver)
-{
-    CTsFswMonitor* self = NewLC(taskListObserver);
-    CleanupStack::Pop(self);
-    return self;
-}
-
-// --------------------------------------------------------------------------
-// CTsFswMonitor::NewLC
-// --------------------------------------------------------------------------
-//
-CTsFswMonitor* CTsFswMonitor::NewLC(MHsDataObserver& taskListObserver)
-{
-    CTsFswMonitor* self = new (ELeave) CTsFswMonitor(taskListObserver);
-    CleanupStack::PushL(self);
-    self->ConstructL();
-    return self;
-}
-
-// --------------------------------------------------------------------------
-// CTsFswMonitor::ConstructL
-// --------------------------------------------------------------------------
-//
-void CTsFswMonitor::ConstructL()
-{
-    CActiveScheduler::Add(this);
-    //Create window server observer
-    ConstractObserverL();
-    Subscribe();
-}
-
-// -----------------------------------------------------------------------------
-// Subscribe
-// -----------------------------------------------------------------------------
-//
-void CTsFswMonitor::Subscribe()
-{
-    if (!IsActive()) {
-        mWsSession.EventReady(&iStatus);
-        SetActive();
-    }
-}
-
-// -----------------------------------------------------------------------------
-// ConstractObserverL
-// -----------------------------------------------------------------------------
-//
-void CTsFswMonitor::ConstractObserverL()
-{
-    User::LeaveIfError(mWsSession.Connect());
-    mWg = RWindowGroup(mWsSession);
-    User::LeaveIfError(mWg.Construct(reinterpret_cast<TUint32> (&mWg)));
-    mWg.DisableFocusChangeEvents();
-    mWg.DisableModifierChangedEvents();
-    mWg.DisableOnEvents();
-    mWg.DisableScreenChangeEvents();
-
-    //enable notifications about group lists
-    User::LeaveIfError(mWg.EnableGroupListChangeEvents());
-}
-
-void CTsFswMonitor::RunL()
-{
-    User::LeaveIfError(iStatus.Int());
-    TWsEvent event;
-    mWsSession.GetEvent(event);
-    Subscribe();//new subscribtion has to be called after picking event
-    if (EEventWindowGroupListChanged == event.Type() /*|| EEventFocusGroupChanged == event.Type()*/) {
-        if (mTaskListObserver) {
-            mTaskListObserver->DataChanged();
-        }
-    }
-}
-
-TInt CTsFswMonitor::RunError(TInt /*aError*/)
-{
-    Subscribe();
-    return KErrNone;
-}
-
-void CTsFswMonitor::DoCancel()
-{
-    if (IsActive()) {
-        mWsSession.EventReadyCancel();
-    }
-}
-
-// end of file
--- a/tstaskmonitor/server/src/tsrunningappstorage.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/tstaskmonitor/server/src/tsrunningappstorage.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -15,8 +15,7 @@
 *
 */
 #include "tsrunningappstorage.h"
-#include "tsfswengine.h"
-#include "tsfswmonitor.h"
+#include "tsfswdatalist.h"
 #include "tsfswentry.h"
 #include <s32strm.h>
 #include <s32mem.h>
@@ -37,18 +36,19 @@
 {
     mData.Close();
     delete mEngine;
-    delete mMonitor;
 }
 
 // -----------------------------------------------------------------------------
 //
 // -----------------------------------------------------------------------------
 //
-CRunningAppStorage* CRunningAppStorage::NewL(MHsDataObserver& observer)
+CRunningAppStorage* CRunningAppStorage::NewL(MHsDataObserver& observer,
+                                             MTsResourceManager& resources,
+                                             MTsWindowGroupsMonitor &wsMonitor)
 {
     CRunningAppStorage * self = new (ELeave)CRunningAppStorage(observer);
     CleanupStack::PushL(self);
-    self->ConstructL();
+    self->ConstructL(resources, wsMonitor);
     CleanupStack::Pop(self);
     return self;
 }
@@ -57,10 +57,15 @@
 //
 // -----------------------------------------------------------------------------
 //
-void CRunningAppStorage::ConstructL()
+void CRunningAppStorage::ConstructL(MTsResourceManager& resources, 
+                                    MTsWindowGroupsMonitor &wsMonitor)
 {
-    mEngine = CTsFswEngine::NewL(*this) ;
-    mMonitor = CTsFswMonitor::NewL(*mEngine);
+    mEngine = CTsFswDataList::NewL(resources, wsMonitor, *this) ;
+    RArray<RWsSession::TWindowGroupChainInfo> wgList;
+    CleanupClosePushL(wgList);
+    User::LeaveIfError(resources.WsSession().WindowGroupList(&wgList));
+    mEngine->HandleWindowGroupChanged(resources, wgList.Array());
+    CleanupStack::PopAndDestroy(&wgList);
     DataChangedL();
 }
 
--- a/tstaskmonitor/utils/inc/tsfswentry.h	Fri Jun 11 13:58:37 2010 +0300
+++ b/tstaskmonitor/utils/inc/tsfswentry.h	Wed Jun 23 18:33:40 2010 +0300
@@ -113,8 +113,8 @@
     void SetAppUid( const TUid& uid );
     void SetAppNameL( const TDesC& appName );
     void SetCloseableApp( TBool value );
-    TBool SetScreenshotL(const CFbsBitmap* bitmap, UpdatePriority priority);
-    TBool RemoveScreenshot();
+    void SetScreenshotL(const CFbsBitmap* bitmap, UpdatePriority priority);
+    void RemoveScreenshotL();
     
     // takes ownership of bitmaps
     void SetAppIcon( CFbsBitmap* aBitmap, CFbsBitmap* aMask );
--- a/tstaskmonitor/utils/src/tsfswentry.cpp	Fri Jun 11 13:58:37 2010 +0300
+++ b/tstaskmonitor/utils/src/tsfswentry.cpp	Wed Jun 23 18:33:40 2010 +0300
@@ -319,43 +319,45 @@
 // CTsFswEntry::SetScreenshot
 // --------------------------------------------------------------------------
 //
-TBool CTsFswEntry::SetScreenshotL(const CFbsBitmap* bitmapArg, UpdatePriority priority)
+void CTsFswEntry::SetScreenshotL(const CFbsBitmap* bitmapArg, UpdatePriority priority)
 {
     TInt currentPriority = static_cast<TInt> (mPriority);
     TInt newPriority = static_cast<TInt> (priority);
-    if (newPriority >= currentPriority) {
-        CFbsBitmap* bitmap = new (ELeave) CFbsBitmap;
-        CleanupStack::PushL(bitmap);
-        User::LeaveIfError(bitmap->Duplicate(bitmapArg->Handle()));
-        CleanupStack::Pop(bitmap);
+    if(newPriority <currentPriority) {
+        User::Leave(KErrAccessDenied);
+    }
+    
+    CFbsBitmap* bitmap = new (ELeave) CFbsBitmap;
+    CleanupStack::PushL(bitmap);
+    User::LeaveIfError(bitmap->Duplicate(bitmapArg->Handle()));
+    CleanupStack::Pop(bitmap);
 
-        mPriority = priority;
-        delete mScreenshot;
-        mScreenshot = bitmap;
+    mPriority = priority;
+    delete mScreenshot;
+    mScreenshot = bitmap;
 
-        delete mImgTool;
-        mImgTool = 0;
+    delete mImgTool;
+    mImgTool = 0;
 
-        mImgTool = CTsGraphicFileScalingHandler::NewL(*this, *mScreenshot, TSize(128, 128),
-            CTsGraphicFileScalingHandler::EKeepAspectRatioByExpanding);
-        return ETrue;
-    }
-    return EFalse;
+    mImgTool = CTsGraphicFileScalingHandler::NewL(*this, *mScreenshot, TSize(128, 128),
+    CTsGraphicFileScalingHandler::EKeepAspectRatioByExpanding);
 }
 
 // --------------------------------------------------------------------------
 // CTsFswEntry::RemoveScreenshot
 // --------------------------------------------------------------------------
 //
-TBool CTsFswEntry::RemoveScreenshot()
+void CTsFswEntry::RemoveScreenshotL()
 {
-    if (mScreenshot) {
-        delete mScreenshot;
-        mScreenshot = NULL;
-        mPriority = Low;
-        return ETrue;
+    if (!mScreenshot) {
+        User::Leave(KErrNotFound);
     }
-    return EFalse;
+    delete mScreenshot;
+    mScreenshot = NULL;
+    mPriority = Low;
+    if (mObserver) {
+        mObserver->DataChanged();
+    }
 }
 
 // --------------------------------------------------------------------------